PCAPNG ファイルがあり、そこから RTP パケットを取得する必要があります。具体的には、RTP パケットの 1 つが次のようになります...
フレーム N: ワイヤ上の X バイト...
- イーサネット II、ソース: ...
- IPv4、ソース: ...
- TCP、送信元ポート: rstp ...
- RTSP インターリーブ フレーム、チャネル: 0x02、163 バイト
- リアルタイム トランスポート プロトコル
...そして、各パケットから必要なものは...
- RTSP インターリーブ フレームからのチャネル
- RTSP インターリーブ フレームからの長さ
- RTP からのペイロード
...このデータを使用して、オーディオ ファイルとビデオ ファイルを再作成し、ローカル ペイロードから完全なビデオを再構築します (再生はストリーミングではありません)。
どちらかを使用してRTPパケットを正常に取得できます...
tshark -r my.pcap -R -T フィールド -e rtp.payload -w rtp.out
また...
tshark -r my.pcap -R -T フィールド -e rtp.payload > rtp.out
...しかし、私が抱えている問題は、最初の方法では必要なものがすべて保存されることですが、何らかの理由で余分なデータ (つまり、RTP ペイロードと RTSP インターリーブ フレームの内容以上のもの) が奇妙な場所に追加されることです...テストに必要なデータを生成するためのプログラムを作成できません。いくつかの正規表現を使用して余分なデータをすべて削除しようとしましたが、他の有効なシナリオと重複するシナリオが多すぎます。
2 番目の方法は、必要なインターリーブされたプロパティを含まない RTP ペイロードのみを提供します (各バイト間にコロンを含む 16 進数を生成しますが、これは簡単に処理できます)。すべての RTSP インターリーブ フレーム プロパティを取得するために別の呼び出しを行うことができたとしても、回避したい区切り記号/区切り記号を使用して各パケットを識別することにより、2 つの出力を結合する必要があります (tshark を取得できませんでした)。それを行うには...)。
tshark 読み取りフィルターを調べたところ、必要なことを実行できるはずですが、これまでのところ、それを理解できていません。これは、サンプル データを作成し、再生に必要なデータをフォーマットするロジックを記述するためだけに行っていることに注意してください。最終的に、同僚の 1 人がストリーミング クライアントを変更して、データを適切な形式でキャプチャする予定です (そのため、データを変更せずに ffmpeg を介してデータを実行することができます)。必要なフォーマットを作成する方法についてのアイデアはありますか?