无法将CMSampleBuffer附加到AVAssertWriterInput(错误-12780)

时间:2017-07-03 14:10:24

标签: ios iphone video avfoundation core-video

我正在使用ffmpeg手动解码h264 RTSP流并尝试使用AVAssertWriterAVAssertWriterInput保存未压缩的帧。

调用AVAssetWriterInput appendBuffer -

时出现以下错误
  

错误Domain = AVFoundationErrorDomain Code = -11800“操作无法完成”UserInfo = {NSUnderlyingError = 0x170059530 {Error Domain = NSOSStatusErrorDomain Code = -12780“(null)”},NSLocalizedFailureReason =发生未知错误(-12780) ),NSLocalizedDescription =操作无法完成}

CMSampleBuffer包含BGRA帧,看起来像这样 -

CMSampleBuffer 0x159d12900 retainCount: 1 allocator: 0x1b3aa3bb8
invalid = NO
dataReady = YES
makeDataReadyCallback = 0x0
makeDataReadyRefcon = 0x0
formatDescription = <CMVideoFormatDescription 0x17405bd50 [0x1b3aa3bb8]> {
    mediaType:'vide' 
    mediaSubType:'BGRA' 
    mediaSpecific: {
        codecType: 'BGRA'
        dimensions: 720 x 1280 
    } 
    extensions: {<CFBasicHash 0x1742652c0 [0x1b3aa3bb8]>{type = immutable dict, count = 4,
        entries =>
        0 : <CFString 0x1addb17c8 [0x1b3aa3bb8]>{contents = "CVImageBufferYCbCrMatrix"} = <CFString 0x1addb1808 [0x1b3aa3bb8]>{contents = "ITU_R_601_4"}
        1 : <CFString 0x1addb1928 [0x1b3aa3bb8]>{contents = "CVImageBufferTransferFunction"} = <CFString 0x1addb17e8 [0x1b3aa3bb8]>{contents = "ITU_R_709_2"}
        2 : <CFString 0x1adde3800 [0x1b3aa3bb8]>{contents = "CVBytesPerRow"} = <CFNumber 0xb00000000000b402 [0x1b3aa3bb8]>{value = +2880, type = kCFNumberSInt32Type}
        3 : <CFString 0x1adde3880 [0x1b3aa3bb8]>{contents = "Version"} = <CFNumber 0xb000000000000022 [0x1b3aa3bb8]>{value = +2, type = kCFNumberSInt32Type}
        }
    }
}
sbufToTrackReadiness = 0x0
numSamples = 1
sampleTimingArray[1] = {
    {PTS = {3000/90000 = 0.033}, DTS = {INVALID}, duration = {INVALID}},
}
imageBuffer = 0x17413ebe0

我也看了下面的问题和答案,但它似乎没有解释我遇到的问题(我使用的格式是支持的像素格式): Why won't AVFoundation accept my planar pixel buffers on an iOS device?

任何帮助都将不胜感激!

仅供参考 - 当我保存BGRA CMSampleBuffer时,我从iPhone相机中获取它只是工作,如果需要我也可以粘贴示例CMSampleBuffer。

1 个答案:

答案 0 :(得分:0)

我会回答自己,因为我发现了这个问题 -

CMSampleBuffer未被IOSurface支持。我使用CVPixelBufferCreateWithBytes创建了CVPixelBuffer而没有IOSurface支持,只要我使用CVPixelBufferCreate并传递了它工作的kCVPixelBufferIOSurfacePropertiesKey键。

https://developer.apple.com/library/content/qa/qa1781/_index.html包含有关创建受IOSurface支持的CVPixelBuffers的所有信息。