首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImagePickerController返回H.265而不是H.264

UIImagePickerController返回H.265而不是H.264
EN

Stack Overflow用户
提问于 2017-08-03 19:21:35
回答 1查看 1.5K关注 0票数 6

我有一个应用程序,它使用一个UIImagePickerController对象来获取一个视频文件以供共享。

我正在设置媒体类型(picker.mediaTypes = [kUTTypeMovie as String]),并使用字段UIImagePickerControllerMediaURL来获取视频细节。当所有设备都是H.264实时编码或所有设备都是H.265实时解码时,这是正常工作的,并且不存在任何问题。

问题是我需要支持不能播放H.265内容的设备。我想采取“创建一个单一的兼容文件”的路线。UIImagePickerController 如何告诉给我一段H.264视频,而不管设备的功能如何?

EN

回答 1

Stack Overflow用户

发布于 2018-09-14 04:32:00

这就是对我起作用的东西。我使用一个AVAssetExportSession获得H.265视频输出的H.264格式。

也许以上解决方案可以通过选择AVAssetExportPresetHighestQuality作为UIImagePickerController的videoExportPreset属性来工作。我的方法的好处是iOS 9/10兼容性。也可能是一个更快的UI,因为您可以在后台线程上进行导出。

我不能使用UIImagePickerController,因为我的应用程序中相同的选择器工作流允许用户选择倍数,所以我使用CTAssetsPickerController,这需要对返回的媒体对象使用PHAsset。

以西结和内森的讨论让我找到了这个解决方案,所以在这里分享。

代码语言:javascript
复制
PHAsset *phasset = <fetched-asset>;
NSURL *assetURL = <where-to-store-exported-asset>;

if(PHAssetMediaTypeVideo == phasset.mediaType) {
    [[PHImageManager defaultManager] requestAVAssetForVideo: phasset
        options: nil resultHandler:^(AVAsset * _Nullable avasset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
        AVAssetExportSession *exportSession =
            [AVAssetExportSession exportSessionWithAsset: avasset presetName: AVAssetExportPresetHighestQuality];
        exportSession.outputURL = assetURL;
        exportSession.outputFileType = AVFileTypeMPEG4;
        [exportSession exportAsynchronouslyWithCompletionHandler:^{
            if(exportSession.status == AVAssetExportSessionStatusCompleted) {
                //
                // success!
                //
            }
        }];
    }];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45492880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档