IP カメラからの H.264 RTP ストリームを処理します。私が使用しているカメラは、各 I フレームを複数の NAL ユニットに分割し、それぞれが RTP パケットに分割されます (開始フラグと終了フラグは、フレームではなく、各ユニットのサイズを決定します)。
フレーム送信が終了し、それを解凍するのに十分なデータがあることをどのように知ることができますか? フレームは複数のユニットで構成されているため、フラグを使用してその終了を判断することはできません。
私が扱ったほとんどのカメラは、フラグがフレームの開始と終了を決定する RTP パケットに各フレームを分割しました。したがって、終了フラグを待っているこのパケットからデータをアンパックします。これが完全なフレームです。
このカメラから取得した NAL ユニットのシーケンスは次のとおりです。
[NAL_UT_SPS] シーケンス パラメータ セット +
[NAL_UT_PPS] 画像パラメータセット
[NAL_UT_SEI] 補足強化情報
[NAL_UT_IDR_SLICE] I フレーム画像データのパート #1
[NAL_UT_IDR_SLICE] I フレーム画像データのパート 2
[NAL_UT_IDR_SLICE] I フレーム画像データのパート #3
[NAL_UT_SLICE] 1 番目の P フレーム
[NAL_UT_SLICE] 2 番目の P フレーム
[NAL_UT_SLICE] 3 番目の P フレーム
...
このシーケンスから、[NAL_UT_SPS] + [NAL_UT_PPS] + [NAL_UT_SEI] + 3*[NAL_UT_IDR_SLICE] を 1 つの I フレームに結合して、後でデコーダにフィードできることが明らかです。しかし、画像データのパーツ数はどのように判断すればよいのでしょうか? パーツ #X を受け取ったときに、それがシーケンスの最後ではないことをどのように確認できますか?
何か案は?