使用照片框架从图库上传视频

2024-01-16

使用照片框架从图库上传视频的最佳方式是什么? 在我使用 ALAssetRepresentation 和 next 方法之前:

- (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error;

这允许上传文件,而无需先将其复制到应用程序临时目录。在照片框架中看不到任何替代方案。唯一的方法似乎是使用 AVAssetExportSession -> 导出到本地目录 -> 上传,但这需要额外的存储空间(如果视频太大,可能会出现问题)


似乎唯一有效的方法是请求AVAsset from PHImageManager,并检查返回的资产是否为AVURLAsset。在这种情况下,URL 可用于直接访问文件并获取所需的字节块:

[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
  if ([asset isKindOfClass:[AVURLAsset class]]) {
    NSURL *URL = [(AVURLAsset *)asset URL];
    // use URL to get file content
  }
}];

这不适用于慢动作视频,因为AVComposition代替AVURLAsset被返回。可能的解决方案是使用PHVideoRequestOptionsVersionOriginal视频文件版本:

PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;

[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
  if ([asset isKindOfClass:[AVURLAsset class]]) {
    NSURL *URL = [(AVURLAsset *)asset URL];
    // use URL to get file content
  }
}];

并获取全尺寸图像网址:

PHContentEditingInputRequestOptions *options = [[PHContentEditingInputRequestOptions alloc] init];
options.canHandleAdjustmentData = ^BOOL(PHAdjustmentData *adjustmentData) {
  return YES;
};

[imageAsset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
  // use contentEditingInput.fullSizeImageURL
}];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用照片框架从图库上传视频 的相关文章

随机推荐