2017-08-11 16 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を除いて)、映画のFPSが期待しているように正確なレートで生産されていることは非常に重要です。失われた、ちょうど保存されたフレームがより速く演奏されました(これは実際にスポットするのが簡単ではありませんでした)

関連する問題