パケットがRTP/RTCPかどうかを判断するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2916177

  •  04-10-2019
  •  | 
  •  

質問

WinpCapに構築されたSharppcapを使用して、UDPトラフィックをキャプチャしています。私の最終目標は、h.323からオーディオデータをキャプチャし、それらの電話での会話をWAVファイルとして保存することです。しかし、最初は最初です - 私は自分のUDPパケットがNICを越えているものを把握する必要があります。

Sharppcapは、メッセージのPayloadDataにアクセスできるudppacketクラスを提供します。しかし、私はこのデータをどうするか確信が持てません。これはバイト[]配列であり、RTPまたはRTCPパケットかどうかを判断する方法がわかりません。

私はこのトピックをグーグルで検索しましたが、そこにはあまりありません。どんな助けも感謝しています。

役に立ちましたか?

解決

RTPおよびRTCPパケットの定義を見てください RFC 3550:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |       sequence number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           timestamp                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           synchronization source (SSRC) identifier            |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|            contributing source (CSRC) identifiers             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

私は上記のすべての伝説を再現しません - それはかなり長いです - しかし、見てください セクション5.1.

それを手にして、あなたはあなたができることはあまりないことがわかります a パケットにはRTP/RTCPが含まれています。何よりも、他のポスターが示唆しているように、メディアストリームの交渉が嗅ぐことです。 2番目のベストは、パケットのシーケンスで一致するパターンのある種です。最初の2つのビットは10で、次の2つのビットが一定になり、続いて9〜15が一定、次に16-> 31の増分、およびすぐ。

他のヒント

Wiresharkのパケット検出器を見てみましょう。Wiresharkは、利用可能な最も一般的なプロトコルをデコードできます。

RTPパケットの前に来るSIPパケットを見る必要があると思います。

がある PCAP.NETサイトでのこの問題に関する議論.

RTSPを介して通信が行われている場合は、セットアップ時にネゴシエートされたUDPポートをご覧ください。

UDPポートは、RTPまたはRTCPであるかどうかを示します(通常、RTPはポート番号やRTCPでもODDで行われていることに注意してください)。

最後に、RTSPを介して通信する場合は、SDPファイルからペイロード番号のリストを説明してから、RTPヘッダーのペイロードタイプをチェックして、ペイロードをデコードする必要があるコーデックを伝えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top