を識別します。生のH.264データをファイルに入れて、ffmpeg
と変換できるようにしたい。H.264 - 私はRTPフレームにパックIPカメラからの生のH.264ストリームを持っているSPSとPPSフレーム
私は私の生のH.264ファイルにデータを書き込みたいときに、私はそれがこのように見えるように持って出た:
00 00 01 [SPS]
00 00 01 [PPS]
00 00 01 [NALByte]
[PAYLOAD RTP Frame 1] // Payload always without the first 2 Bytes -> NAL
[PAYLOAD RTP Frame 2]
[... until PAYLOAD Frame with Mark Bit received] // From here its a new Video Frame
00 00 01 [NAL BYTE]
[PAYLOAD RTP Frame 1]
....
だから私は私の外にSession Description Protocol
からSPS
とPPS
を取得先にRTSP
と通信します。さらに、カメラは、ビデオストリーム自体を開始する前に2つのメッセージにSPS
とPPS
を送信します。
だから私はこの順序でメッセージをキャプチャ:
1. Preceding RTSP Communication here (including SDP with SPS and PPS)
2. RTP Frame with Payload: 67 42 80 28 DA 01 40 16 C4 // This is the SPS
3. RTP Frame with Payload: 68 CE 3C 80 // This is the PPS
4. RTP Frame with Payload: ... // Video Data
は、その後、いくつかのフレームはMarker Bit = 1
でRTPフレームペイロードとし、いくつかの時点で存在しています。これは私が完全にビデオフレームを持っていることを意味します。これのafer私は再びプレフィックスシーケンス(00 00 01
)とペイロードからNAL
を書き、同じ手順で上に行きます。すべての8の完全なビデオが再びSPS
とPPS
をフレーム後
今、私のカメラは私を送信します。 (上記の例のように、2つのRTPフレームでも同様です)。私は特にPPS
がストリーミングの間で変更できることを知っていますが、それは問題ではありません。
私の質問は次のようになります。
1.私はSPS/PPSごとに8ビデオフレームを記述する必要がありますか?私のSPS
と私のPPS
が、彼らが私のファイルと、何よりもの非常に最初に書かれているために十分であるべき変化しないのですか?もし
2. SPS/PPSと通常のRTPフレームを区別するには?
送信データを解析する私のC++コードでは、普通のペイロードを持つRTPフレームと、SPS/PPS
を持っているRTPフレームの違いを作る必要があります。どのように私はそれらを区別することができますか?さて、SPS/PPS
のフレームは通常は小さいですが、これは依存するセーブコールではありません。私はそれらを無視した場合ので、私は、私は捨てることのできるデータを知る必要があり、または私はそれらを記述する必要がある場合、私は彼らの前に00 00 01
プレフィックスを配置する必要があります。 ?それとも、8番目のビデオフレームごとに発生するという固定ルールですか?
ありがとうございます。私はあなたと同じ質問をしています。私はlive555のソースコードを読んで、そのような各パケット/フレームを保存する理由を知らない。このスレッドを読んだら、事は私にはっきりと分かります。 live555の実装に基づく提案として、マーカビットは他のコーデックでのみ使用され、H264にはフレームの開始/終了を表すstart_bitとend_bitがあり、H264ではマーカービットは使用されません。 – user534498