ios - 如何使用 PhotoKit 访问慢动作视频的 NSData/NSURL

标签 ios photokit phasset

使用新的 Photo 框架,我可以使用 requestImageDataForAsset 访问 PHAssets 的 NSData。我还可以使用返回的 info NSDictionaryPHImageFileURLKey 访问文件 URL。

[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {

                //imageData contains the correct data for images and videos
                NSLog(@"info - %@", info);
                NSURL* fileURL = [info objectForKey:@"PHImageFileURLKey"];
}];

这适用于图像和普通视频。

然而,当 Assets 为PHAssetMediaSubtypeVideoHighFrameRate(慢动作视频)时,返回的数据对应包含视频第一帧的JPG文件(NSData、dataUTI和info字典都指向同一个jpg文件) .例如,这是为慢动作视频返回的 URL 和 dataUTI:

PHImageFileURLKey = "file:///var/mobile/Media/PhotoData/Metadata/DCIM/100APPLE/IMG_0642.JPG"; PHImageFileUTIKey = "public.jpeg";

为什么会这样? 如何访问慢动作视频的 NSData/NSURL 而不是此 JPG 预览?

最佳答案

在疯狂测试每一个选项后,我发现了问题所在。

负责为慢动作视频返回 JPG 图像的是 PHImageRequestOptions.version 属性的默认 PHImageRequestOptionsVersionCurrent 值。

只需将版本分配给 PHImageRequestOptionsVersionUnadjusted 或 PHImageRequestOptionsVersionOriginal 即可返回原始慢动作视频。

PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];

imageRequestOptions.version = PHImageRequestOptionsVersionUnadjusted;
// or 
imageRequestOptions.version = PHImageRequestOptionsVersionOriginal;

我认为这是一种意外行为,因为我不希望慢动作视频的“当前”版本是静止图像(可能是应用了慢动作效果的视频,但不是照片)。

希望这对某人有用。

关于ios - 如何使用 PhotoKit 访问慢动作视频的 NSData/NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26152396/

相关文章:

ios - 在 swift 类中实现 AsyncSocket 回调

ios - Cordova:检查用户是否已启用推送通知的简洁方法

ios - 如何从 PHPickerViewController 委托(delegate)中获取实时照片或视频

ios - Web VR 模式在 iOS13 上的 Safari 中不再工作吗?

ios - UITableView 没有滚动到最后一行,而是滚动到上面的 5-6 行。 (使用自动布局)

ios - 使用照片框架将图像保存到照片库

ios - PHImageManager 是否为 2x 和 3x 屏幕返回像素或点大小的图像?

ios - 如何在 iOS 中播放视频 PHAsset?

ios - requestImageDataForAsset 结果处理程序格式不正确

ios - 如何使用 PHAssetResourceRequestOptions progressHandler/PHAssetResourceProgressHandler