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

AVAssetWriter追加HDR元数据报错-12743,求排查元数据拷贝问题

解决方案

报错-12743对应AVAssetWriterErrorCodeInvalidPixelBufferAttributes,核心问题是kCVImageBufferAmbientViewingEnvironmentKey的附加数据格式不符合要求。

  • 禁止直接转成NSData/CFData:该key要求的附加值必须是符合特定结构的CFDictionary,而非序列化后的plist二进制数据。你从CMFormatDescription.Extensions.Value获取的propertyListRepresentation是序列化后的结果,这不符合AVAssetWriter的格式要求。

  • 正确提取与附加方式:直接将环境数据转换为CFDictionary后附加,跳过序列化步骤:

if let ambientEnv = sampleBuffer.formatDescription?.extensions[.ambientViewingEnvironment] as? CFDictionary {
    CVBufferSetAttachment(dstPixelBuffer, kCVImageBufferAmbientViewingEnvironmentKey, ambientEnv, .shouldPropagate)
}
  • 拷贝附件的修正逻辑:如果直接拷贝源缓冲区的附件,需先判断附件类型:
    1. 若源附件是序列化后的CFData,需先反序列化为CFDictionary再附加
    2. 若源附件本身就是CFDictionary,可直接附加
var attachmentMode: CVAttachmentMode = .shouldPropagate
if let attachment = CVBufferCopyAttachment(sourcePixelBuffer!, kCVImageBufferAmbientViewingEnvironmentKey, &attachmentMode) {
    if let data = attachment as? CFData,
       let ambientDict = try? PropertyListSerialization.propertyList(from: data as Data, options: [], format: nil) as? CFDictionary {
        CVBufferSetAttachment(dstPixelBuffer, kCVImageBufferAmbientViewingEnvironmentKey, ambientDict, attachmentMode)
    } else if let ambientDict = attachment as? CFDictionary {
        CVBufferSetAttachment(dstPixelBuffer, kCVImageBufferAmbientViewingEnvironmentKey, ambientDict, attachmentMode)
    }
}

AVAssetWriter对HDR元数据的格式要求严格,必须传递原始字典结构,这是解决报错的关键。


内容的提问来源于stack exchange,提问作者Deepak Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:42:45