欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS相册视频读取PHAsset到ALAsset转换

程序员文章站 2024-01-15 19:14:46
...

问题

iOS上传视频时从相册选择视频上传失败,错误是“视频文件不存在”。

排查过程

  • 相册读取出来的是PHAssert, 对视频文件返回系统相册中的路径地址(如:file:///var/mobile/Media/DCIM/100APPLE/IMG_0632.MOV),不可以直接访问。
  • 上传组件判断视频文件的方法是用ALAssetsLibrary 读取视频文件。

解决

将PHAssert转换为ALAssert格式的路径

//输入1:asset.localIdentifier 形如:A918D262-4915-4B4D-98DB-018A7D5860EE/L0/001
//输入2:asset.localURL 形如:file:///var/mobile/Media/DCIM/100APPLE/IMG_0632.MOV
            NSString *localID = asset.localIdentifier; 
            NSURL *url = asset.localURL;
            NSArray *temp = [localID componentsSeparatedByString:@"/"];
            NSString *uploadVideoFilePath = nil;
            if (temp.count > 0) {
                NSString *assetID = temp[0];
                NSString *ext = url.pathExtension;
                if (assetID && ext) {
                    uploadVideoFilePath = [NSString stringWithFormat:@"assets-library://asset/asset.%@?id=%@&ext=%@", ext, assetID, ext];
                }
            }
//输出:得到的路径uploadVideoFilePath格式如下:assets-library://asset/asset.MOV?id=A918D262-4915-4B4D-98DB-018A7D5860EE&ext=MOV