11

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

SharpPCap 提供了一个 UdpPacket 类,让我可以访问消息的 PayloadData。但我不确定如何处理这些数据。这是一个 Byte[] 数组,我不知道如何确定它是 RTP 还是 RTCP 数据包。

我已经用谷歌搜索了这个主题,但那里没有太多内容。任何帮助表示赞赏。

4

4 回答 4

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             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

我不会重现以上所有的传说——它很长——但是看看第 5.1 节

有了这些,您会发现您无法确定数据包是否包含RTP/RTCP。正如其他海报所暗示的那样,最好的办法是嗅探媒体流协商。第二个最好的方法是对一系列数据包进行某种模式匹配:前两位为 10,接下来的两位为常数,随后位 9 到 15 为常数,然后 16 -> 31 递增,并且很快。

于 2010-07-11T08:04:02.777 回答
2

我会看一下 Wireshark 中的数据包检测器,它可以解码大多数可用的常见协议。

于 2010-05-26T19:40:02.717 回答
0

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

Pcap.Net 网站上有关于这个问题的讨论

于 2010-05-28T21:14:54.723 回答
0

如果通过 RTSP 进行通信,请查看在 SETUP 时协商的 udp 端口​​。

udp 端口​​会告诉您它是 RTP 还是 RTCP(还值得注意的是,RTP 通常在偶数端口号上完成,而 RTCP 在奇数上完成)。

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

于 2015-01-12T11:52:36.937 回答