看看在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 |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
我不会重现传奇上述所有的 - 这是相当长的 - 但看看Section 5.1。
有了这些,你会发现确定和数据包是否包含RTP/RTCP并不是很多。正如其他海报所建议的,最重要的将是嗅探媒体流的谈判。第二好的做法是对一系列数据包进行一些排序模式匹配:前两位为10,后面两位为常数,随后是9至15位恒定,然后是16→31递增,以及等等。
谢谢弗兰克。事实证明,检查RTP头中的字节并基本检查版本和有效负载类型足以确定它是否是RTP数据包。至少到目前为止,我还没有在网络上找到其他具有相同前几位的数据包。 寻找那个,然后SSRC足以找出哪些数据包是RTP。但是,我换了工作,不必担心这个问题的其余部分,所以你会得到复选标记! – 2010-07-16 18:18:03