我有一个使用UIImagePickerController对象获取视频文件进行共享的应用程序.
我正在设置媒体类型(picker.mediaTypes = [kUTTypeMovie as String])并使用该字段UIImagePickerControllerMediaURL来获取视频详细信息.这可以正常工作,并且当所有设备都是H.264实时编码或所有设备都是H.265实时解码时都没有问题.
问题是我需要支持无法播放H.265内容的设备.我想采取"创建单一兼容文件"的路线.无论录制设备的功能如何,如何告诉UIImagePickerController我H.264视频呢?
小智 1
这对我有用。我使用 AVAssetExportSession 获取以 H.264 格式导出的 H.265 视频。
也许上述解决方案可以通过选择AVAssetExportPresetHighestQuality作为 UIImagePickerController 的 videoExportPreset 属性来实现。我的方法的好处是 iOS 9/10 兼容性。也许还有一个更快捷的 UI,因为您可以在后台线程上进行导出。
我无法使用 UIImagePickerController,因为我的应用程序中的相同选取器工作流程允许用户选择多个,因此我使用 CTAssetsPickerController,这需要对返回的媒体对象使用 PHAsset。
以西结和内森的讨论让我找到了这个解决方案,因此在这里分享。
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!
//
}
}];
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
763 次 |
| 最近记录: |