Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定数据包是否为RTP/RTCP?_C#_Udp_Rtp_Sharppcap_Rtcp - Fatal编程技术网

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

C# 如何确定数据包是否为RTP/RTCP?,c#,udp,rtp,sharppcap,rtcp,C#,Udp,Rtp,Sharppcap,Rtcp,我正在使用基于WinPCap的SharpPCap来捕获UDP流量。我的最终目标是从H.323中捕获音频数据,并将这些电话对话保存为WAV文件。但第一件事是首先-我需要弄清楚我的UDP数据包是通过NIC的 SharpPCap提供了一个UdpPacket类,允许我访问消息的PayloadData。但我不确定如何处理这些数据。这是一个Byte[]数组,我不知道如何确定它是RTP还是RTCP数据包 我在谷歌上搜索过这个话题,但没有太多。感谢您的帮助 我会查看Wireshark中的数据包检测器,它可以解码

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

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


我在谷歌上搜索过这个话题,但没有太多。感谢您的帮助

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

我认为您需要查看RTP数据包之前的SIP数据包


有。

请查看以下中RTP和RTCP数据包的定义:

我不会为上面的所有内容复制这个传说——它相当长——但请看一看


有了它,您将看到您无法确定数据包是否包含RTP/RTCP。正如其他海报所建议的那样,最好是嗅嗅一下媒体流谈判。第二个最好的方法是对一系列数据包进行某种模式匹配:前两位为10,后两位为常量,第9位至第15位为常量,然后16->31递增,依此类推。

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

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


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

我感谢您的努力,但这并不能真正回答我的问题。我对数据包结构的理论知识更感兴趣,这样我就能理解如何着手解决这个问题。如何确定UDP数据包实际上是RTP或RTCP数据包?我在UDP标头中找不到任何有助于此的内容。UDP标头中的任何内容都不会告诉您端口号。你需要对数据包数据进行模式匹配。我想我开始发现这个谜题的意义远不止这些。我们试图检测来自H.323协议的通信量,我读到的是,它还使用了一组TCP端口来在RTP通信量开始之前设置通信。到目前为止,我还没找到关于如何捕获流量的好信息。谢谢brickner。我们关注的是H.323流量,而不是SIP流量,因此情况有所改变。现在看起来很复杂,谢谢你,弗兰克。事实证明,检查RTP报头中的字节以及基本上检查版本和负载类型就足以确定它是否是RTP数据包。至少到目前为止,我还没有在网络上找到任何其他具有相同前几位的数据包。寻找那个,然后SSRC就足以找出哪些数据包是RTP。但是,我换了工作,不必担心这个问题的其余部分,所以你得到了复选标记!
 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             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+