2017-08-11 123 views
0

我正在使用VTCompressionSessionEncodeFrameWithOutputHandler從相機壓縮像素緩衝區到原始h264流。我使用kVTEncodeFrameOptionKey_ForceKeyFrame確保VTCompressionSessionEncodeFrame的每個輸出都不依賴於其他作品。另外,在會話初始化期間有kVTCompressionPropertyKey_AllowFrameReordering = false,kVTCompressionPropertyKey_RealTime = true選項,以及在每個VTCompressionSessionEncodeFrame調用之後調用VTCompressionSessionCompleteFrames。VTCompressionSessionEncodeFrame:上一秒丟失了嗎?

我還收集由VTCompressionSessionEncodeFrame生成的樣本,並定期將它們保存爲MP4文件(使用Bento4庫)。

但是最終曲目總是比樣本要短,在1-2秒鐘之後傳給VTCompressionSessionEncodeFrame。經過多次嘗試解決這個問題之後,我可以肯定的是,它是VTCompressionSessionEncodeFrame輸出幀,它依賴於後來的幀被正確解碼 - 所以這些幀丟失了,因爲它們不能用於產生軌道的「最終塊」 。

所以這個問題 - 如何強制VTCompressionSessionEncodeFrame產生完全獨立的數據塊?

回答

0

打開這是... FPS問題! NAL單位本身並沒有特殊的時機(除了pts,這在我的例子中是capture-fps-bound),所以它是非常重要的,它們的製作速度正如FPS在電影中預期的那樣......沒有什麼是丟失,剛剛保存的幀播放速度更快(實際上這並不容易發現)