看看在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