我正在使用基于WinPCAP构建的SharppCap来捕获UDP流量。我的最终目标是捕获H.323的音频数据,并将这些电话交谈保存为WAV文件。但是第一件事是第一件事 - 我需要弄清楚我的UDP数据包越过NIC。

SharppCap提供了一个UDPPACKET类,可让我访问消息的PayloadData。但是我不确定这些数据有什么关系。这是一个字节[]数组,我不知道该如何确定它是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节.

在手头上,您会发现没有很多事情可以确定是否 一种 数据包包含RTP/RTCP。最重要的是,正如其他海报所建议的那样,媒体流谈判。第二最好的是一系列数据包上的某种形式匹配:前两个位将为10,其次是恒定的两个位,其次是恒定的位,然后是9至15的位,然后是16-> 31增量,并且很快。

其他提示

我会查看Wireshark中的数据包检测器,该检测器可以解码可用的最常见协议。

我相信您需要查看RTP数据包之前的SIP数据包。

在PCAP.NET网站上讨论此问题.

如果通过RTSP完成沟通,请查看设置时协商的UDP端口。

UDP端口将告诉您它是RTP还是RTCP(还值得注意的是,RTP通常是通过均匀端口号和奇数上的RTCP完成的)。

最后,如果您通过RTSP进行通信,则可以从描述中从SDP文件中获取有效负载号列表,然后检查RTP标头中的有效负载类型以告诉编解码器您需要解码有效负载。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top