我正在使用基于WinPCap构建的SharpPCap来捕获UDP流量。我的最终目标是从H.323捕获音频数据并将这些电话对话保存为WAV文件。但首先要做的是 - 我需要弄清楚我的UDP数据包是通过网卡的。
SharpPCap提供了一个UdpPacket类,可以让我访问消息的PayloadData。但我不确定这些数据是做什么的。它是一个Byte []数组,我不知道如何确定它是否是RTP或RTCP数据包。
我用Google搜索了这个话题,但那里并没有多少。任何帮助表示赞赏。
答案 0 :(得分: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 |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
我不会重现以上所有内容的传说 - 它很长 - 但请看Section 5.1。
有了这些,您将看到您无法确定 数据包是否包含RTP / RTCP。最重要的是,正如其他海报所建议的那样,嗅闻媒体流谈判。第二好的将是在一系列分组上的某种模式匹配:前两个比特将是10,接着是接下来的两个比特是恒定的,接着是比特9到15是恒定的,然后是16 - > 31递增,依此类推。
答案 1 :(得分:2)
我会看看Wireshark中的数据包检测器,它可以解码大多数常用协议。
答案 2 :(得分:0)
我认为您需要查看RTP数据包之前的SIP数据包。
答案 3 :(得分:0)
如果通过RTSP完成通信,请查看在SETUP上协商的udp端口。
udp端口会告诉你它是RTP还是RTCP(还值得注意的是RTP通常是通过偶数端口号完成的,RTCP是奇数)。
最后,如果您通过RTSP进行通信,则可以从DESCRIBE中获取SDP文件中的有效负载编号列表,然后检查RTP头中的有效负载类型,以告知编解码器需要解码有效负载。