我有一個由類型1(P幀),5(I幀),7(SPS)和8(PPS)組成的H.264/AVC NAL流。我想將它們寫入.mov文件而不用重新編碼。我試圖用AVAssetWriter
來做到這一點。 AVAssetWriterInput
的文檔狀態如下:AVAssetWriterInput H.264直通到QuickTime(.mov) - 傳入SPS/PPS創建avcC原子?
傳遞nil給outputSettings指示輸入通過附加採樣,在寫入輸出文件之前不進行處理。例如,如果你正在追加已經處於理想壓縮格式的緩衝區,這很有用。但是,僅在寫入QuickTime影片文件時才支持直通(即,AVAssetWriter已使用AVFileTypeQuickTimeMovie進行初始化)。對於其他文件類型,您必須指定非零輸出設置。
我試圖創建CMSampleBuffers這些的NAL並將其追加到資產作家輸入,但我無法輸入的數據在產生一個結構良好的.mov文件的方式,我可以在如何做到這一點的任何地方找不到任何線索。
到目前爲止我所得到的最好結果是以附件B字節流格式(以7 8 5 1 1 1的順序重複)傳遞NAL並在VLC中播放結果。因此,我知道NAL包含有效數據,但由於.mov文件沒有avcC原子,並且mdat原子填充了附件B字節流,因此QuickTime不會播放視頻。
現在我試圖通過一個4字節(由lengthSizeMinusOne
字段指定)長度字段而不是附件B分隔符,這是他們應該如何打包到mdat原子我所知道的。
我不知道如何讓資產編寫者編寫avcC原子。我追加的每個樣本都會被推入mdat原子中。
有誰知道我可以如何將原始的H.264數據傳遞到配置爲pass through(nil outputSettings)配置的AVAssetWriterInput並讓它生成一個正確形成的QuickTime文件?
考慮人的狹隘集團可能已經成功地做到了這一點,你有沒有想到提交TSI和得到一個蘋果在這個問題上的正確答案?無論如何,有趣的事情,你在這裏和你的最後一個問題...... +1 – Till 2013-03-28 02:57:35
謝謝你的建議。我想我可以繼續做下去。我會在這裏更新任何其他發現。 – bsirang 2013-03-28 03:16:37