如何确定数据包是否为RTP/RTCP?

Chr*_*mes 11 c# udp rtp rtcp sharppcap

我正在使用基于WinPCap构建的SharpPCap来捕获UDP流量.我的最终目标是从H.323捕获音频数据并将这些电话对话保存为WAV文件.但首先要做的是 - 我需要弄清楚我的UDP数据包是通过网卡的.

SharpPCap提供了一个UdpPacket类,使我可以访问消息的PayloadData.但我不确定这些数据是做什么的.它是一个Byte []数组,我不知道如何确定它是否是RTP或RTCP数据包.

我用Google搜索了这个主题,但那里没有多少.任何帮助表示赞赏.

Fra*_*rar 5

查看RFC 3550中 RTP和RTCP数据包的定义:

 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             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Run Code Online (Sandbox Code Playgroud)

对于以上所有内容,我都不会重述。它已经很长了,但请参阅第5.1节

随着在手,你会看到有没有很多可以做,以确定是否一个数据包中包含RTP / RTCP。最好的办法是像其他发布者所建议的那样嗅探媒体流谈判。第二好的方法是对一系列数据包进行某种模式匹配:前两位为10,接下来的两位为常数,随后的9至15位为常数,然后16-> 31递增,并且以此类推。