You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

我的疑问

  1. 是否存在特定条件(比如视频是HDR/杜比视界、电影模式,或者存储在iCloud中),导致PHPickerViewController的itemProvider故意不提供public.hevc类型标识符,即使视频本身是HEVC编码的?
  2. 有没有权威的、官方推荐的API调用流程,能保证获取到视频资源的原始未修改数据流,绝对避免系统自动转码为H.264?
  3. 为什么明明是HEVC编码的视频,其itemProvider的registeredTypeIdentifiers中却找不到public.hevc?

非常感谢各位的解答!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:13:02