參考:
RTP包主要由兩部分組成,head和payload,head最小12個字節,可擴展。
1 相關定義
1.1 RTP 包(RTP packet)
一種數據包,其組成部分有:一個固定 RTP 報頭,一個可能爲空的作用源(contributing sources)列表(見下文),以及負載數據。
1.2 RTP 負載(RTP payload)
通過 RTP 傳輸的包中的數據,例如,音頻樣本或壓縮好的視頻數據。
1.3 RTCP 包(RTCP packet)
一種控制包,其組成有兩部分:一個類似 RTP 包的固定報頭, 一個結構化的部分(該部分具體元素依不同 RTCP 包的類型而定)。
1.4 同步源(***C,Synchronization source)
RTP 包流的源,用 RTP 報頭中 32 位數值的***C 標識符進行標識, 使其不依賴於網絡地址。 一個同步源的所有包構成了相同計時和序列號空間的一部分, 這樣接收方就可以把一個同步源的包放在一起, 來進行重放。舉些同步源的例子,像來自同一信號源的包流的發送方,如麥克風、攝影機、RTP 混頻器(見下文)就是同步源。一個同步源可能隨着時間變化而改變其數據格式, 如音頻編碼。 ***C 標識符是一個隨機選取的值,它在特定的 RTP 會話中是全局唯一(globally unique)的(見章節8)。參與者並不需要在一個多媒體會議的所有 RTP 會話中,使用相同的 ***C 標識符;***C 標識符的綁定通過RTCP(見章節 6.5.1)。如果參與者在一個 RTP 會話中生成了多個流,例如來自多個攝影機,則每個攝影機都必須標識成單獨的同步源。
1.5 終端系統(End system)
一種應用程序,它產生髮送出的 RTP 包中內容,或者使用接收到的 RTP 包中內容。 在一個特定的 RTP 會話中, 一個終端系統可以扮演一個或多個同步源角色,但通常是一個。
1.6 作用源(CSRC,Contributing source )
若一個 RTP 包流的源,對由 RTP 混頻器生成的組合流起了作用,則它就是一個作用源。
2 RTP頭
前 12 個字節出現在每個 RTP 包中,僅僅在被混合器插入時,纔出現 CSRC 識別符列表。這
些域有以下意義:
版本(V):2 比特 此域定義了 RTP 的版本。此協議定義的版本是 2。(值 1 被 RTP 草案版本
使用,值 0 用在最初"vat"語音工具使用的協議中。)填充(P):1 比特 若填料比特被設置,則此包包含一到多個附加在末端的填充比特,填充比
特不算作負載的一部分。 填充的最後一個字節指明可以忽略多少個填充比特。 填充可能用於某些
具有固定長度的加密算法,或者用於在底層數據單元中傳輸多個 RTP 包。擴展(X):1 比特 若設置擴展比特,固定頭(僅)後面跟隨一個頭擴展。
CSRC 計數(CC):4 比特 CSRC 計數包含了跟在固定頭後面 CSRC 識別符的數目。
標誌(M):1 比特 標誌的解釋由具體協議規定。它用來允許在比特流中標記重要的事件,如
幀邊界。負載類型(PT):7 比特 此域定義了負載的格式,由具體應用決定其解釋。協議可以規定負載
類型碼和負載格式之間一個默認的匹配。 其他的負載類型碼可以通過非 RTP 方法動態定義。 RTP
發送端在任意給定時間發出一個單獨的 RTP 負載類型;此域不用來複用不同的媒體流。序列號(sequence number):16 比特 每發送一個 RTP 數據包,序列號加 1,接收端可
以據此檢測丟包和重建包序列。 序列號的初始值是隨機的(不可預測),以使即便在源本身不加密
時(有時包要通過翻譯器,它會這樣做),對加密算法泛知的普通文本***也會更加困難。時間戳(timestamp) 32 比特時間戳反映了 RTP 數據包中第一個字節的採樣時間。時
鍾頻率依賴於負載數據格式,並在描述文件(profile)中進行描述。也可以通過 RTP 方法對負
載格式動態描述。時間戳可用來實現不同媒體流的同步***C:32 比特 用以識別同步源。標識符被隨機生成,以使在同一個 RTP 會話期中沒有
任何兩個同步源有相同的 ***C 識別符。儘管多個源選擇同一個 ***C 識別符的概率很低,所
有 RTP 實現工具都必須準備檢測和解決衝突。若一個源改變本身的源傳輸地址,必須選擇新的
***C 識別符,以避免被當作一個環路源。
下面是抓包示例