簡體   English   中英

無法將CMSampleBuffer附加到AVAssertWriterInput(錯誤-12780)

[英]Can't append CMSampleBuffer to AVAssertWriterInput (error -12780)

我正在使用ffmpeg手動解碼h264 RTSP流,並嘗試使用AVAssertWriterAVAssertWriterInput保存未壓縮的幀。

調用AVAssetWriterInput appendBuffer時出現以下錯誤-

錯誤域= AVFoundationErrorDomain代碼= -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

我也查看了以下問題和答案,但似乎並不能解釋我遇到的問題(我使用的格式是受支持的像素格式): 為什么AVFoundation不接受我的平面像素緩沖區? iOS設備?

任何幫助將不勝感激!

僅供參考-保存我從iPhone相機獲得的BGRA CMSampleBuffer它可以正常工作,如果需要,我也可以粘貼示例CMSampleBuffer。

找到問題后,我會自己回答-

CMSampleBuffer不是由IOSurface支持的。 我用CVPixelBufferCreateWithBytes它創造了一個CVPixelBuffer沒有IOSurface后盾,只要我使用CVPixelBufferCreate並通過了kCVPixelBufferIOSurfacePropertiesKey鍵入它的工作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM