記錄下RTP的解析
參考:
http://blog.csdn.net/chen495810242/article/details/39207305
http://blog.csdn.net/bytxl/article/details/50395427
RTP Header解析
前12字節是固定的,CSRC可以有多個。
1)? ? ? ? V:RTP協議的版本號,占2位,當前協議版本號為2
2)? ? ? ? P:填充標志,占1位,如果P=1,則在該報文的尾部填充一個或多個額外的八位組,它們不是有效載荷的一部分。
3)? ? ? ? X:擴展標志,占1位,如果X=1,則在RTP報頭后跟有一個擴展報頭
4)? ? ? ? CC:CSRC計數器,占4位,指示CSRC 標識符的個數
5)? ? ? ? M: 標記,占1位,不同的有效載荷有不同的含義,對于視頻,標記一幀的結束;對于音頻,標記會話的開始。
6)? ? ? ? PT(payload type): 有效荷載類型,占7位,用于說明RTP報文中有效載荷的類型,如GSM音頻、JPEM圖像等,在流媒體中大部分是用來區分音頻流和視頻流的,這樣便于客戶端進行解析。
7)? ? ? ? 序列號:占16位,用于標識發送者所發送的RTP報文的序列號,每發送一個報文,序列號增1。這個字段當下層的承載協議用UDP的時候,網絡狀況不好的時候可以用來檢查丟包。當出現網絡抖動的情況可以用來對數據進行重新排序。序列號的初始值是隨機的,同時音頻包和視頻包的sequence 是分別記數的。
8)? ? ? ? 時戳(Timestamp):占32位,必須使用90 kHz 時鐘頻率(程序中的90000)。時戳反映了該RTP報文的第一個八位組的采樣時刻。接收者使用時戳來計算延遲和延遲抖動,并進行同步控制??梢愿鶕TP包的時間戳來獲得數據包的時序。
9)? ? ? ? 同步信源(SSRC)標識符:占32位,用于標識同步信源。同步信源是指產生媒體流的信源,它通過RTP報頭中的一個32位數字SSRC標識符來標識,而不依賴于網絡地址,接收者將根據SSRC標識符來區分不同的信源,進行RTP報文的分組。
該標識符是隨機選擇的,參加同一視頻會議的兩個同步信源不能有相同的SSRC。
此標識不是隨機選擇的,目的在于使同一RTP包連接中沒有兩個同步源有相同的SSRC標識。盡管多個源選擇同一個標識的概率很低,所有RTP實現都必須探測并解決沖突。如源改變源傳輸地址,也必須選擇一個新SSRC標識以避免插入成環行源。
10)? ? 提供信源(CSRC)標識符:每個CSRC標識符占32位,可以有0~15個CSRC。每個CSRC標識了包含在該RTP報文有效載荷中的所有提供信源。
提供信源用來標志對一個RTP混合器產生的新包有貢獻的所有RTP包的源。是指當混合器接收到一個或多個同步信源的RTP報文后,經過混合處理產生一個新的組合RTP報文,并把混合器作為組合RTP報文的SSRC,而將原來所有的SSRC都作為CSRC傳送給接收者,使接收者知道組成組合報文的各個SSRC。
注:基本的RTP說明并不定義任何頭擴展本身,如果遇到X=1,需要特殊處理