音視頻基礎:RTP/RTCP協議

RTP協議

      RFC3550定義實時傳輸協議RTP和它的控制協議RTCP。RTP協議是Internet上針對流媒體傳輸的基礎協議,該協議詳細說明在互聯網上傳輸音視頻的標準數據包格式。RTP本身只保證實時數據的傳輸,並不能提供可靠傳輸、流量控制和擁塞控制等服務質量保證,這需要RTCP協議提供這些服務。 IETF的RFC3550定義RTP/RTCP協議的基本內容,包括報文格式、傳輸規則等。除此之外,IETF還定義一系列擴展協議,包括RTP檔次擴展,RTCP報文類型擴展等。

RTP固定頭部

V   :RTP協議的版本號,佔2位,當前協議版本號爲2。
P   :填充標誌,佔1位,若P=1則在該報文的尾部填充一個或多個額外的八位組,它們不是有效載荷的一部分,表示報文對齊。
X   :擴展標誌,佔1位,若X=1,則在RTP報頭後跟有一個擴展頭。
CC:CSRC計數器,佔4位,指示CSRC 標識符的個數。
M   :標記,佔1位,不同的有效載荷有不同的含義,對於視頻,標記一幀的結束;對於音頻,標記會話的開始。
PT :有效載荷類型,佔7位,用於說明RTP報文中有效載荷的類型,如GSM音頻、JPEM圖像等。
序列號:16位,發送RTP報文的序列號,每發送一個報文序列號增1。接收者用序列號來檢測報文丟失,排序報文,恢復數據。
時間戳:32位,反映該RTP報文的第一個八位組的採樣時刻。接收者使用時戳來計算延遲和延遲抖動,並進行同步控制。
SSRC:32位,用於標識同步信源。該標識符是隨機選擇的,參加同一視頻會議的兩個同步信源不能有相同的SSRC。
CSRC:每個CSRC標識符佔32位,可以有0~15個。每個CSRC標識了包含在該RTP報文有效載荷中的所有特約信源。在共流源標識並且沒有拓展頭部(X=0)的情況下,RTP頭部爲12個字節。

RTP拓展頭部

      RTP提供拓展機制以允許實現個性化,某些與常規負載格式功能要求相獨立的附加信息在RTP 拓展頭的定義中實現。

      若 RTP 固定頭中的擴展標誌位 X 置 1,則一個長度可變的擴展頭部分被加到 RTP 固定頭之後。擴展包含 16 比特的長度域,指示擴展項中 32 比特字的個數,不包括 4 個字節擴展頭(因此零是有效值)。RTP 固定頭之後只允許有一頭個頭擴展。爲了使拓展頭具有特定的含義,擴展頭的前 16 比特用來作爲特定含義的識別標識符或參數。這 16 比特的格式由具體實現的上層協議定義。基本的 RTP 說明並不定義任何頭擴展本身。

RTP規格級別(profile)

      profile定義了一系列負載類型和對應的負載格式,也定義了特定於具體應用的RTP擴展和修改。典型地,某個應用僅基於一個規格級別運行。IETF針對RFC3550在檔次方面定義了一系列擴展協議。


      RFC3551(RTP/AVP)在RFC3550的基礎上針對RTP檔次進行補充形成RTP/APVP檔次,被用在具有最小會話控制的音視頻會議中,是其它擴展檔次的基礎。該檔次在沒有參數協商和成員控制的會話中非常有用。該檔次也爲音視頻定義一系列編碼和負載格式。對於具體的流媒體負載格式,IETF也定義一系列協議詳細描述,如VP8視頻負載格式[6]和H264視頻負載格式[7],等等。

      RFC3711(SRTP,也即RTP/SAVP)是RTP/AVP在安全方面進行擴展形成的檔次,爲RTP/RTCP提供數據加密、消息認證、重放保護等功能。SRTP具有高吞吐量和低數據膨脹等特點,是異構環境下對RTP/RTCP數據的有效保護。

      RFC4585(RTP/AVPF)是RTP/AVP在及時反饋方面進行擴展形成的檔次,使得接收端能夠向發送端提供及時反饋,實現短時調整和基於反饋的修復機制。該協議定義早期RTCP報文以實現及時反饋,並定義一系列通用RTCP反饋報文和特定於應用的反饋報文,如NACK、PLI、SLI、RPSI等。

      RFC5124(RTP/SAVPF)則是RTP/SAVP和RTP/AVPF的綜合。SAVP和AVPF在使用時,需要參與者藉助於SDP協議[8]就檔次和參數信息達成一致。但是對一個RTP會話來說,這兩種檔次不能同時被協商。而實際應用中,我們有同時使用這兩種檔次的需要。因此,RTP/SAVPF檔次應運而生,它能夠使得RTP會話同時具有安全和及時反饋兩方面的特性。

RTCP協議

       RTCP需要與RTP協議一起配合使用,當應用程序啓動一個RTP會話時將同時佔用兩個端口(複用情況下佔用同一個端口),分別供RTP和RTCP使用。RTP本身並不能爲數據包提供可靠傳輸的保證,也不提供流量控制和擁塞控制,這些都由RTCP來負責完成。通常RTCP會採用與RTP相同的分發機制,向會話中的所有成員週期性地發送控制信息,應用程序通過接收這些數據,從中獲取會話參與者的相關資料,以及網絡狀況、分組丟失概率等反饋信息,從而能夠對服務質量進行控制或者對網絡狀況進行診斷。

RTCP功能概括

       RTCP的主要功能可以概括爲3個方面,服務質量的監視與反饋、媒體間的同步、多播組中成員的標識。此外還可以進行丟包重傳或者 I 幀重傳的控制。下面是消息類型

Type Description References
0
-
191
   
192 FIR,                   full INTRA-frame request. RFC 2032
193 NACK,              negative acknowledgement. RFC 2032
194 SMPTETC,       SMPTE time-code mapping. RFC5484
195 IJ,                     extended inter-arrival jitter report. RFC 5450
196
-
199
   
200 SR,                    sender report. RFC 3550
201 RR,                    receiver report. RFC 3550
202 SDES,               source description. RFC 3550
203 BYE,                  goodbye. RFC 3550
204 APP,                 application defined. RFC 3550
205 RTPFB,             Generic RTP Feedback.  
206 PSFB,               Payload-specific Feedback.  
207 XR,                    RTCP extension. RFC 3611
208 AVB,                  AVB RTCP packet. IEEE 1733
209 RSI,                   Receiver Summary Information. RFC 5760
210
-
255
   

其中以發送者報告舉例

 

RTCP頭部的格式

版本(V):同RTP包頭域.
填充(P):同RTP包頭域.
接收報告計數器(RC):5比特, 該SR包中的接收報告塊的數目, 可以爲零.
包類型(PT):8比特, SR包是200.
長度域(Length):16比特, 其中存放的是該SR包以32比特爲單位的總長度減一.
同步源(SSRC):SR包發送者的同步源標識符, 對應RTP包中的SSRC一樣.
NTP timestamp:SR包發送時的絕對時間值, NTP的作用是同步不同的RTP媒體流, 一共8個字節,前4個字節代表
RTP timestamp:與NTP時間戳對應, 與RTP數據包中的RTP時間戳具有相同的單位和隨機初始值.
Sender's packet count:從開始發送包到產生這個SR包這段時間裏, 發送者發送的RTP數據包的總數, SRC改變時這個域清零.
Sender's octet count:從開始發送包到產生這個SR包這段時間裏, 發送者發送的淨荷數據的總字節數(不包括頭部和填充), 發送者改變其SSRC時這個域要清零.
同步源n的SSRC標識符:該報告塊中包含的是從該源接收到的包的統計信息.
丟失率(Fraction Lost):表明從上一個SR或RR包發出以來從同步源n(SSRC_n)來的RTP數據包的丟失率.
累計的包丟失數目:從開始接收到SSRC_n的包到發送SR, 從SSRC_n傳過來的RTP數據包的丟失總數.
收到的擴展最大序列號:從SSRC_n收到的RTP數據包中最大的序列號.
接收抖動(Interarrival jitter):RTP數據包接受時間的統計方差估計.
上次SR時間戳(Last SR,LSR):取最近從SSRC_n收到的SR包中的NTP時間戳的中間32比特, 如果目前還沒收到SR包, 則該域清零.
上次SR以來的延時(Delay since last SR,DLSR):上次從SSRC_n收到SR包到發送本報告的延時.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章