一、定義
實時傳輸協議(Real- time Transport Protocol,RTP)是在Internet上處理多媒體數據流的一種網絡協議,利用它能夠在一對一(unicast,單播)或者一對多 (multicast,多播)的網絡環境中實現傳流媒體數據的實時傳輸。
RTP通常使用UDP來進行多媒體數據的傳輸,但如果需要的話可以使用TCP或者ATM等其它協議。
二、協議格式
0 1 2 3 4 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) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| contributing source (CSRC) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
三、字段解析
1 V:RTP協議的版本號,占2位,當前協議版本號為2。 2 3 P:填充標志,占1位,如果P=1,則在該報文的尾部填充一個或多個額外的八位組,它們不是有效載荷的一部分。 4 5 X:擴展標志,占1位,如果X=1,則在RTP報頭后跟有一個擴展報頭。 6 7 CC:CSRC計數器,占4位,指示CSRC 標識符的個數。 8 9 M: 標記,占1位,不同的有效載荷有不同的含義,對於視頻,標記一幀的結束;對於音頻,標記會話的開始。 10 11 PT: 有效載荷類型,占7位,用於說明RTP報文中有效載荷的類型,如GSM音頻、H264視頻等,在流媒體中大部分是用來區分音頻流和視頻流的,這樣便於客戶端進行解析。 12 13 sequence number(序列號):占16位,用於標識發送者所發送的RTP報文的序列號,每發送一個報文,序列號增1。這個字段當下層的承載協議用UDP的時候,網絡狀況不好的時候可以用來檢查丟包。同時出現網絡抖動的情況可以用來對數據進行重新排序。 14 15 timestamp(時間戳):占32位,時戳反映了該RTP報文的第一個八位組的采樣時刻。接收者使用時戳來計算延遲和延遲抖動,並進行同步控制。 16 17 SSRC(同步信源):占32位,用於標識同步信源。
RTP包流的源,用RTP報頭中32位數值的SSRC標識符進行標識,使其不依賴於網絡地址。一個同步源的所有包構成了相同計時和序列號空間的一部分,這樣接收方就可以把一個同步源的包放在一起,來進行重放。
舉些同步源的例子,像來自同一信號源的包流的發送方,如麥克風、攝影機、RTP混頻器就是同步源。一個同步源可能隨着時間變化而改變其數據格式,如音頻編碼。
SSRC標識符是一個隨機選取的值,它在特定的RTP會話中是全局唯一的。
如果參與者在一個RTP會話中生成了多個流,例如來自多個攝影機,則每個攝影機都必須標識成單獨的同步源。
該標識符是隨機選擇的,參加同一視頻會議的兩個同步信源不能有相同的SSRC。
19 CSRC(作用信源):占32位,可以包含0~15個作用信源信息。
若一個RTP包流的源,對由RTP混頻器生成的組合流起了作用,則它就是一個作用源。對特定包的生成起作用的源,其SSRC標識符組成的列表,被混頻器插入到包的RTP報頭中。這個列表叫做CSRC表。
相關應用的例子如:在音頻會議中,混頻器向所有的說話人(talker)指出,誰的話語(speech)將被組合到即將發出的包中,即便所有的包都包含在同一個(混頻器的)SSRC標識符中,也可讓聽者(接收者)可以清楚誰是當前說話人。
每個CSRC標識了包含在該RTP報文有效載荷中的所有作用信源。
四、實例參考
16進制碼流實例
1 80 00 1e e2 12 e9 c2 4d 0b a9 e9 05 ff ff ff ...
連續的ffff開始往后是Payload負載,不做分析。
1. 80 二進制 1000 0000
可以得出 V=2,P=0,X=0,CC=0
2. 00 二進制 0000 0000
可以得出 M=1,PT=0(PCMU)
3. 1e e2 二進制 00011110 11100010
可以得出 sequence number=7906
4. 12 e9 c2 4d 二進制 00010010 11101001 11000010 01001101
可以得出 timestamp=317309517
5. 0b a9 e9 05
可以得出SSRC=0x0ba9e905