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