2017-07-03 6 views
0

ffmpegを使用して手動でh264 RTSPストリームをデコードし、​​とAVAssertWriterInputを使用して非圧縮フレームを保存しようとしています。 AVAssetWriterInput appendBuffer呼び出すときAVAssertWriterInputにCMSampleBufferを追加できません(エラー-12780)

私は次のエラーを取得しています -

エラードメイン= AVFoundationErrorDomainコード= -11800を=のUserInfo = {NSUnderlyingError = 0x170059530 {エラードメイン= NSOSStatusErrorDomainコード "操作を完了できませんでした" -12780 "(ヌル)"}、NSLocalizedFailureReasonが不明なエラーが(-12780)が発生= NSLocalizedDescriptionは、操作を完了できませんでした=}

CMSampleBufferはBGRAフレームが含まれており、このようになります -

Why won't AVFoundation accept my planar pixel buffers on an iOS device?

:3210

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 

私も、次の質問と回答で見てきたが、私がいる問題を説明していないようですが(私が使用するフォーマットは、サポートされているピクセル形式です)どんな助けでも感謝します!

FYI - 私はBGRA CMSampleBufferを保存します。私はiPhoneカメラから取得します。必要であれば、サンプルCMSampleBufferも貼り付けることができます。

+0

どのようにプレゼンテーションタイムスタンプを設定していますか? –

答えて

0

私は問題を発見したように私は自分自身をお答えします -

CMSampleBufferIOSurfaceバックアップされていませんでした。私はCVPixelBufferCreateを使用してすぐに、それが働いたkCVPixelBufferIOSurfacePropertiesKeyキーを渡すと、CVPixelBufferCreateWithBytesを使ってをIOSurfaceバッキングなしで作成しました。

https://developer.apple.com/library/content/qa/qa1781/_index.htmlには、IOSurfaceをベースにしたCVPixelBuffersの作成に関するすべての情報があります。

関連する問題