调用AVAsset获取MXF视频轨道返回空数组,求助MTRegister相关问题
MXF文件无法通过AVAsset获取视频轨道的解决办法
处理MOV文件时,用这段代码能正常拿到视频轨道,提取元数据或时间码都没问题:
let track = asset.tracks(withMediaType: AVMediaType.video)[0]
但碰到MXF文件时,调用asset.tracks(withMediaType: AVMediaType.video)直接返回空数组,根本拿不到数据。
亲测有效的解决方案
你提到的MTRegisterProfessionalVideoWorkflowFormatReaders就是破局点——这个MediaToolbox下的私有函数专门用来注册MXF这类专业视频格式的读取器,让AVFoundation能识别并解析MXF文件。
具体操作步骤:
- 导入MediaToolbox框架
- 在加载MXF文件前,动态调用这个私有函数(因为无公开声明,不能直接调用):
import MediaToolbox import AVFoundation // 先注册MXF格式读取器 if let registerFuncPtr = dlsym(RTLD_DEFAULT, "MTRegisterProfessionalVideoWorkflowFormatReaders") { typealias RegisterReaderFunc = @convention(c) () -> Void let registerReaders = unsafeBitCast(registerFuncPtr, to: RegisterReaderFunc.self) registerReaders() } // 再正常初始化AVAsset并读取轨道 let asset = AVAsset(url: mxfFileURL) if let videoTrack = asset.tracks(withMediaType: .video).first { // 处理轨道数据、元数据或时间码 }
注意事项
- 这是私有API,提交App Store大概率会被拒,适合企业内部应用或非上架项目使用;若需上架,建议寻找第三方MXF解析库替代。
- 不同iOS/macOS版本可能存在兼容性差异,需在目标系统版本中充分测试。
内容的提问来源于stack exchange,提问作者EndyVelvet
相关产品推荐
相关产品推荐

