私はVTCompressionSessionEncodeFrameWithOutputHandlerを使用して、カメラから生のh264ストリームにピクセルバッファを圧縮しています。私はkVTEncodeFrameOptionKey_ForceKeyFrameを使用して、VTCompressionSessionEncodeFrameからのすべての出力が他の部分に依存していないことを確認しています。また、セッション初期化時にはkVTCompressionPropertyKey_AllowFrameReordering = false、kVTCompressionPropertyKey_RealTime = trueオプション、VTCompressionSessionEncodeFrameコールごとにVTCompressionSessionCompleteFramesが呼び出されます。VTCompressionSessionEncodeFrame:最後の秒は失われますか?
また、VTCompressionSessionEncodeFrameで生成されたサンプルを収集し、定期的にMP4ファイルとして保存します(Bento4ライブラリを使用)。
最終的なトラックは常にサンプルよりも短く、1~2秒でVTCompressionSessionEncodeFrameに供給されます。これを解決するためのいくつかの試みの後、私はそれがVTCompressionSessionEncodeFrameがフレームを出力していることを確かめることができます。これは、後のフレームが正しくデコードされるためです。このフレームは、トラックの "最終チャンク" 。
したがって、どのようにしてVTCompressionSessionEncodeFrameに完全に独立したデータチャンクを生成させることができるのでしょうか?