一、RTP協議概述
RTP 為互動式音頻、視頻等具有即時特性的資料提供端到端的傳送服務。在
IP 網路上,一般是在 UDP 之上運行 RTP 協議。如果支援它的網路能提供組播功
能,則 RTP 也可用組播將資料送給多個目的使用者。
RTP 包括兩個關係十分密切的子協議:
即時傳輸協議(RTP):用於傳輸即時資料。
即時控制協議(RTCP):用於監視網路的服務品質,並傳遞與會者會話中的資訊。
下面首先給出有關 RTP 的一些定義。
• RTP會話(RTP session):RTP傳輸服務使用者之間的串連被稱為RTP會話,就每一個會話參與者而言,會話由一對傳輸層地址(即一個網路層地址加上
兩個連接埠地址,一個連接埠為 RTP 報文的發送/接收所佔用,另一個連接埠為 RTCP
報文的發送/接收所佔用)標識。在 IP 多播方式中,每個參與者的目的地運輸層
地址對可以都相同;在單播方式中,每個參與者的地址對均不相同,因為每個人
的網路層地址都不相同。在多媒體會話中,每個媒體訊號由不同的 RTP 會話傳
送,有其自己的 RTCP 分組。各 RTP 會話由不同的連接埠對和/或不同的多播地址
區分。
• RTP媒體類型:由一個RTP會話傳送的所有淨荷類型的集合。RTP應用
文檔指定 RTP 媒體類型和 RTP 淨荷類型的關係。
• RTP 淨荷:由 RTP 傳送的資料,如音頻抽樣訊號,壓縮視頻資料等。淨荷
格式及其解釋由應用程式層規定。
• RTP分組:由RTP頭部和淨荷資料群組成。通常下層傳送協議的一個資料
包(如一個 UDP 包)只含一個 RTP 分組;如果採用一定的封裝方法,也可以包
含多個 RTP 分組。
• 同步源 SSRC(Synchronization source ):RTP 包的信源流,在 RTP 頭中用
32 位元長的同步源標識符表示,與網路地址無關。該欄位用以標識訊號的同步
源,其值應隨機播放,以保證 RTP 會話中任意兩個同步源的 SSRC 標識都不相
同。
• 提供源 CSRC(Contributing source):分信源標識,32 位元。RTP 分組頭部 最多可包含 15CSRC 標識,其數目由 CC 欄位指明。如果分
信源的個數大於 15,只能標識其中 5 個源。CSRC 標識由混合器插入,其值就是
組成複合訊號的各個分訊號的 SSRC 標識,用以標識各個組成分訊號的信源。
• 混合器(Mixer)和翻譯器(Translator):這是 RTP 在接收方和發送方之間
引入的兩類功能模組。混合器接收來自一個或多個發送方的 RTP 組塊,並把它
們組合成一個新的RTP分組繼續轉寄。這種組合組塊將有一個新的SSRC ID。
因為這些來自不同信源的組塊可以非同步到達,所以混合器改變了該資料流的臨時結構。與混合器相反,轉換器只改變組塊內容而並不把資料流組合在一起。 混合器和翻譯器保證具有不同通訊條件的使用者可以順暢地完成資料交換。混 合器的重要應用是在高頻寬網路與低頻寬網路之間,改變從高頻寬網路接收資料 的壓縮編碼,把音、視頻碼流轉換成低碼流資料發送到低頻寬網路;翻譯器用在不同協議的網路之間和在防火牆之間,因為 UDP 通過防火牆會發生阻塞現象。
二、RTP(即時傳輸協議)
RTP 協議(Real Time Protocol)提供具有即時特徵的、端到端的資料傳送服
務,可用來傳送聲音和運動映像資料。在這項資料傳送服務中包含了裝載資料的
標識符、序列計數、時戳和傳送監視。通常 RTP 的協議元是用 UDP 協議元來裝
載的,並利用 UDP 的複用和校正和來實現 RTP 的複用。
必須注意的是,RTP 沒有提供任何確保按時傳送資料的機制,也沒有提供任何品質保證的機制,因而要實現服務品質必須由下層網路來提供保證。同樣必須
注意的是,RTP 不保證資料包按序號傳送,即使在下層網路能使保證可靠傳送的
條件下,也不保證資料包按序號傳送。包含在 RTP 中的序號可供接收方用於重
構資料包序列,也可用於包的定位。
在 RTP 會話中,複用是由目的傳送地址(網路地址和連接埠號碼)來提供的,
一個傳送地址定義了一個 RTP 會話。例如,在一個會議中,音頻碼流和視頻碼流是分別用不同的 RTP 會話(一般是同一個目的網路地址和不同的連接埠號碼)來傳送,而不是用 PT(載荷類別)或 SSRC 作區分來實現單個 RTP 會話中的複用傳送。
固定前序的 RTP 報文結構如所示:
RTP 前序中各欄位的含義如下:
版本(V):2個位元,表示RTP的版本號碼。
填充(P):1 個位元,置“1”表示使用者資料最後加有填充位,使用者資料中
最後一個位元組是填充位計數,它表示一共加了多少個填充位。在兩種情況下可能
需要填充,一是某些密碼編譯演算法要求資料區塊大小固定;二是在一個低層協議資料包
中裝載多個 RTP 分組。
擴充(X):1個位元,置“1”表示RTP前序後緊隨一個擴充前序。
CSRC計數(CC):4個位元,表示在定長的RTP前序後的CSRC標識符的
數量。
標記(M):1 個位元,其具體解釋由應用文檔來定義。例如,對於視頻流,
它表示一幀的結束,而對於音頻,則表示一次談話的開始。
載荷類別(PT):7 個位元,它指示在使用者資料欄位中承載資料的載荷類別。
序號(SN):2 個位元組,每發送一個 RTP 資料包該序號增加 1。該序號在接
收方可用來發現丟失的資料包和對到來的資料包進行排序。
時間戳記(TS):4個位元組,它用來表示RTP包中使用者資料區段的第一個位元組的
採樣時刻。時間戳記的時間表示應為線性單調遞增的,以便完成同步實現和抖動的
計算。
同步源標識符(SSRC):4 個位元組,用來標識一個同步源。此標識符是隨機
選擇的,但要保證同一 RTP 會話中的任意兩個 SSRC 各不相同,RTP 必須檢測
並解決衝突。
提供源標識符(CSRC):它可有 0~15 項標識符,每一項長度為 32 位元,其
項數由 CC 欄位來確定。如果提供源多於 15 個,則只有 15 個被標識。
為了能滿足各種應用的需要,RTP 前序可進一步擴充,其時 X 位元將置“1”,
擴充的 RTP 前序部分則緊隨在 SCRC 清單之內。
如果擴充位被置為 1,意味著 RTP 固定頭後緊跟著一個頭擴充,其格式
3-2 所示。前 16 位的內容由輪廓檔案決定,主要用來標識不同的頭擴充類型。這
種擴充方式主要用來傳遞獨立於具體格式的載荷(payload-format-independent)
的應用資訊。
三、RTCP(即時傳輸控制通訊協定)3.1 RTCP的功能
RTCP 是 RTP 的控制協議,它用於監視網路的服務品質和在進行中的與會
者會話中傳遞資訊。RTCP 的基本做法是周期性地向會話的所有參與者進行通訊,
採用和資料包分配傳送的相同機制來發送控制包。RTP 有四個功能:
(1) RTCP 的準系統是提供關於資料轉送品質的反饋,這是 RTP協議的重要組成部分,它大致和其它傳輸協議的流量控制及擁塞控制相對應。
RTP 向會話的所有參與者發送反饋報文,其目的是允許那些探索資料傳輸過程中
出現問題的使用者進一步判斷問題僅和其自身相關還是和全體參與者有關,並採取相應的措施。此外,在 IP 組播機制的支援下,RTCP的這一功能允許監視者並不具體參加某一 RTP 會話的功能實體,而是通過接受反饋報文來推斷網路的服務
品質,扮演第三方監測者(third-party monitor)的角色。該功能由RTCP 的寄件者報告(SR)和接收者報告(RR)來具體完成。
(2) 就每個 RTP 源而言,RTCP 為其分配一個永久的傳輸層標識,該標識被稱為 CNAME。雖然 SSRC 標識符可以區分一個會話中的不同碼流,當 RTP 發現
不同碼流的 SSRC 標識發生衝突或應用重新啟動時,SSRC 值會被更改,因而接
收者需要利用 CNAME 而非 SSRC 來跟蹤每一個會話參與者;另外,藉助於CNAME,接收者可以關聯來自於同一使用者、經由不同 RTP 會話傳來的碼流以完
成特定的任務,如音頻流和視頻流的同步。CNAME 由 RTCP 的 SDES 報文(源
描述 source description)所攜帶。
(3) 由於上述兩項功能要求所有的會話參與者發送 RTCP 報文,因此為了能夠在一個 RTP 會話中接納更多的使用者,RTCP 給出另外關於調整控制報文發送速
率的方法。一個 RTP 使用者能夠通過接收來自於其他使用者的 RTCP 報文,獨立地
瞭解會話參與者的數目,RTCP 利用該數值參數為每個會話參與者計算控制報文
的發送間隔,以達到 RTCP 所佔用的通訊頻寬不超過會話頻寬 5%的目的。
(4) RTCP 提供了基本的會話控制功能,如在不同的會話參與者之間互換身份
(identification)資訊等。該項功能為可選項,主要用於控制較為鬆散的會話,
這樣的會話對使用者的加入和離開沒有嚴格的管理。由此可以看出,儘管 RTCP 為
訪問每一個會話參與者提供了便捷的手段,但它並未滿足應用程式所需的全部通
信控制要求,所以 RTP 允許應用在 RTCP 的基礎上選用其它高層控制協議以滿
足其特定的應用需求。
其中(1)~(3)項功能是 RTCP 必備功能,而第四項為可選功能。
RTCP 報文的類型有下述多種:
SR(sender report):寄件者報告。
RR(receiver report):接收者報告。
SDES(source description items):源描述條款,包括 CNAME。
BYE:指示與會者退出。
APP:應用的特定功能。
每一個 RTCP 包都以和 RTP 資料報的固定部分類似的結構開始,後隨的結
構單元和 RTCP 包的類型相似,其長度隨類型不同而不同,但都是 32 位元的整
數倍。
3.2 SR和RR
RTP 報文的接收者可以利用兩種類型的 RTCP 報告報文(SR 或 RR)來提供有關資料接收品質的統計資訊,具體選用 SR 報文還是 RR 報文要看該接收者是
否同時是一個 RTP 報文的寄件者,明確地講,如果一個會話參與者自最後一次
發送 RTCP 報文後,發送了新的 RTP 資料報文,那麼該參與者需要傳送 SR 報文,
否則傳送 RR 報文。SR 報文和 RR 報文的主要區別在於前者包含了 20 位元組有關
寄件者的資訊。
SR 報文包括三部分,第一部分是 RTCP 報文頭,長度為 8 個位元組;第二部
分是寄件者資訊,長度為 20 位元組;第三部分為接收報告塊,接收報告塊攜帶了
有關連續碼流接收情況的統計資訊,其中SSRC值表明了統計資訊所針對的具體
碼流,在一個 RTP 會話中,參與者有可能收到多個具有相同媒體類型的碼流,
因而在一個 SR 或 RR 報文中可能會包含多個接收報告塊。
SR 報文中的欄位含義如下。
版本(V),填充(P)與RTP前序中的V,P欄位含義相同。
RC:5 個位元,表示包中包含的接收報告塊的數目。
載荷類型(PT):8 個位元,其值反映了該報文的類型(如對於 SR,PT 為
200;對於 RR,PT 為 201 等)。
長度(length):16 個位元,表示 RTCP 包的長度,包括頭和填充位元組。
SSRC:32 個位元,該標識值一方面表明了該控制報文的產生者,另一方面
反映了該報文攜帶的寄件者資訊塊內的統計資料所針對的具體碼流。
NTP 時間戳記:64 個位元,它記錄了 SR 報文的發送時刻,該值可被用來估
測 RTP 報文或連續資料的平均發送速率。該時間戳記為絕對時間戳記,64 位元的前 32
位是從 1900 年 1 月 1 日 0 時開始到現在的以秒為單位的整數部分,後 32 位是此
時間的小數部分。
RTP 時間戳記:32 個位元,同 NTP 時間戳記相同,不過它的計時單位和計時原
點與 RTP 資料報文的時間戳記相同,該值可為碼流內部或碼流間的同步控制機制
所選用。
發送報文計數:32 個位元,它記錄了到該 SR 報文發送時所發的 RTP 資料報
文的總數。
發送位元組計數:32 個位元,它記錄了到該 SR 報文發送時所發的連續資料的
位元組總數。
SSRC-n:同步源標識符,SR 中的資訊是關於這些同步源的。
丟失百分比(fraction lost):8個位元,它表示自上一個SR或RR報文發送
後,在資料接收過程中丟失的RTP報文數同所應收到的RTP報文總數的百分比。
包丟失累計數(cumulative number of packet lost):24 個位元,它記錄了到該
RTCP 報文發送時,在接收過程中所丟失的 RTP 資料報文的總數。
被擴充的最大序號(extended highest sequence number):32 個位元,由於
RTP 報文中的序號只有 16 位,因而資料轉送過程經過一段時間後,序號將
被回置為 0,RTP 協議稱這段時間為一個序號周期(sequence number cycle),
相應於此,被擴充的最大序號由兩部分構成,低 16 位記錄了到發送該 RTCP
報文時,收到的 RTP 報文的最大序號值,高 16 位包含了所經曆的序號周期
數,兩者聯合反映了應收到的 RTP 資料報文的總數。
包間抖動(IJ:interarrival jitter):32 個位元,其所含內容是對資料轉送過程
中 RTP 報文所經曆的延時抖動的一種估測,由下述兩式確定。其中 S 為 RTP 報
文的時間戳記值,R 為 RTP 報文的到達時刻。IJ 值可以大致反映 RTCP 報文發送時
網路的擁塞狀況。
D(i-1,i)=(Ri-Si)-(Ri-1 - Si-1)
J=IJ+(|d(i-1,i)|-IJ)/16
上一個 SR(LSR:last SR timestamp):32 個位元,其值為 NTP 時間戳記的中
間 32 位,表示最近收到 SR 報文的時間。
自從上一個 SR 的延時(DLSR):32 個位元,其值為最近收到的 SR 報文到發
送該 RTCP 報文的延時。
由此,該 RTCP 報文的接收者則可以通過 LSR 域和 DLSR 域來估算兩點之
間的往返傳播延時,具體地說,若令 A 表示該 RTCP 報文的到達時刻,則連續
資料流收/發兩端之間的往返傳播延時為 A-LSR-DLSR。
RR 報文格式 3-4 所示,它與 SR 大致相同,只不過不包含寄件者資訊塊,
因而不再贅述。