PHPickerViewController不提供已知HEVC视频的public.hevc UTI导致被迫转码为H.264的问题求助
PHPickerViewController不提供已知HEVC视频的public.hevc UTI导致被迫转码为H.264的问题求助
我正在开发一款iOS应用,核心需求是让用户从照片库中选择视频后,获取原始未修改的HEVC(H.265)数据流,以此保留视频的原生编码格式。
问题详情
我已经确认测试用的源视频是标准HEVC编码:用iPhone 15 Pro Max相机的「高效」模式录制,从Mac端照片应用导出「未修改的原始文件」后,验证其编码为MPEG-H Part2/HEVC(H.265)。但在应用中通过PHPickerViewController选择这个视频时,itemProvider返回的可用类型标识符里始终找不到public.hevc,这迫使我只能回退到通用视频类型,而系统会自动返回转码后的H.264版本。
应用调试时的输出如下:
⚠️ 'public.hevc' not found. Falling back to generic movie type (likely H.264).
我尝试过的操作
我的代码会显式检查itemProvider.registeredTypeIdentifiers数组中是否包含public.hevc标识符,但它从未出现过,导致HEVC专属的处理逻辑完全无法触发。以下是PHPickerViewControllerDelegate实现的最简版本:
import UniformTypeIdentifiers // ... 位于Coordinator类内部 ... func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { picker.dismiss(animated: true) guard let result = results.first else { return } let itemProvider = result.itemProvider let hevcIdentifier = "public.hevc" let identifiers = itemProvider.registeredTypeIdentifiers print("Available formats from itemProvider: \(identifiers)") if identifiers.contains(hevcIdentifier) { print("✅ HEVC format found, requesting raw data...") itemProvider.loadDataRepresentation(forTypeIdentifier: hevcIdentifier) { (data, error) in // ... 处理H.265原始数据的逻辑 ... } } else { print("⚠️ 'public.hevc' not found. Falling back to generic movie type (likely H.264).") itemProvider.loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier) { url, error in // ... 处理H.264转码视频的回退逻辑 ... } } }
调试时能看到,itemProvider返回的可用类型列表里确实没有public.hevc。
我的开发环境
- 设备:iPhone 15 Pro Max
- iOS版本:iOS 18.5
- Xcode版本:16.2
我的疑问
- 是否存在特定条件(比如视频是HDR/杜比视界、电影模式,或者存储在iCloud中),导致
PHPickerViewController的itemProvider故意不提供public.hevc类型标识符,即使视频本身是HEVC编码的? - 有没有权威的、官方推荐的API调用流程,能保证获取到视频资源的原始未修改数据流,绝对避免系统自动转码为H.264?
- 为什么明明是HEVC编码的视频,其
itemProvider的registeredTypeIdentifiers中却找不到public.hevc?
非常感谢各位的解答!
内容来源于stack exchange
相关产品推荐
相关产品推荐

