RTP協議
實時傳輸協議RTP提供了實時資訊的端對端傳輸業務,如互動的語音和圖象;這些業務包括負載型別識別,序列編號,加入時間標誌,傳輸監視.典型的應用是在UDP層上傳輸RTP包,以利用它的複用和總和檢測業務.
RTP包括兩個緊密相關的部分:
- 實時傳輸協議(RTP),傳輸有實時特性的資訊;
- RTP控制協議(RTCP),監視業務質量和傳輸對話中成員的資訊.
RTP包頭
RTP頭有以下格式:
0 1 2 3
0 1 23 4 5 6 7 89 0 1 2 3 45 6 7 8 90 1 2 34 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | 序列號 |
| 時間標誌 |
| 同步源(SSRC)識別符 |
| 有貢獻源(CSRC)識別符 |
| ... ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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負載型別;此域不用來複用不同的媒體流.
序列號:16位元 每傳送一個RTP資料包,序列號加一,接收機可以據此檢測包損和重建包序列.序列號的初始值是隨機的(不可預測),以使即便在源本身不加密時(有時包要透過翻譯器,它會這樣做),對加密演算法泛知的普通文字攻擊也會更加困難.
時間標誌:32位元 時間標誌反映了RTP資料包中第一個位元的抽樣瞬間.抽樣瞬間必須由隨時間單調和線形增長的時鐘得到,以進行同步和抖動計算.時鐘的解析度必須滿足要求的同步準確度,足以進行包到達抖動測量.時鐘頻率與作為負載傳輸的資料格式獨立,在協議中或定義此格式的負載型別說明中靜態定義,也可以在透過非RTP方法定義的負載格式中動態說明.若RTP包週期性生成,可以使用由抽樣時鐘確定的額定抽樣瞬間,而不是讀系統時鐘.例如,對於固定速率語音,時間標誌鍾可以每個抽樣週期加1.若語音裝置從輸入裝置讀取覆蓋160個抽樣週期的資料塊,對於每個這樣的資料塊,時間標誌增加160,無論此塊被髮送還是被靜音壓縮.
時間標誌的起始值是隨機的,如同序列號.多個連續的RTP包可能由同樣的時間標誌,若他們在邏輯上同時產生.如屬於同一個圖象幀.若資料沒有按照抽樣的
順序傳送,連續的RTP包可以包含不單調的時間標誌,如MPEG交織圖象幀.
SSRC:32位元 SSRC域用以識別同步源.識別符號被隨機生成,以使在同一個RTP會話期中沒有任何兩個同步源有相同的SSRC識別符.儘管多個源選擇同一個SSRC識別符的機率很低,所有RTP實現工具都必須準備檢測和解決衝突.若一個源改變本身的源傳輸地址,必須選擇新的SSRC識別符,以避免被當作一個環路源.
CSRC列表:0到15項,每項32位元 CSRC列表識別在此包中負載的有貢獻源.識別符的數目在CC域中給定.若有貢獻源多於15個,僅識別15個.CSRC識別符由混合器插入,用有貢獻源的SSRC識別符.例如語音包,混合產生新包的所有源的SSRC識別符號都被陳列,以期在接收機處正確指示交談者.
RTP頭擴充套件
RTP提供擴充套件機制以允許實現個性化:某些新的與負載格式獨立的功能要求的附加資訊在RTP資料資料包頭中傳輸.設計此方法可以使其它沒有擴充套件的互動執行忽略此頭擴充套件.RTP頭擴充套件的格式如下圖所示.
0 1 2 34 5 6 78 9 0 1 2 3 4 56 7 8 90 1 23 4 5 6 7 8 9 0 1
| 由協議定義 | 長度 |
| 頭擴充套件 |
若RTP頭中的擴充套件位元位置1,則一個長度可變的頭擴充套件部分被加到RTP固定頭之後,.頭擴充套件包含16位元的長度域,指示擴充套件項中32位元字的個數,不包括4個位元組擴充套件頭(因此零是有效值).RTP固定頭之後只允許有一個頭擴充套件.為允許多個互操作實現獨立生成不同的頭擴充套件,或某種特定實現有多種不同的頭擴充套件,擴充套件項的前16位元用以識別識別符號或引數.這16位元的格式由具體實現的上層協議定義.基本的RTP說明並不定義任何頭擴充套件本身.
RTP協議
實時傳輸協議RTP提供了實時資訊的端對端傳輸業務,如互動的語音和圖象;這些業務包括負載型別識別,序列編號,加入時間標誌,傳輸監視.典型的應用是在UDP層上傳輸RTP包,以利用它的複用和總和檢測業務.
RTP包括兩個緊密相關的部分:
- 實時傳輸協議(RTP),傳輸有實時特性的資訊;
- RTP控制協議(RTCP),監視業務質量和傳輸對話中成員的資訊.
RTP包頭
RTP頭有以下格式:
0 1 2 3
0 1 23 4 5 6 7 89 0 1 2 3 45 6 7 8 90 1 2 34 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | 序列號 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 時間標誌 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 同步源(SSRC)識別符 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 有貢獻源(CSRC)識別符 |
| ... ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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負載型別;此域不用來複用不同的媒體流.
序列號:16位元 每傳送一個RTP資料包,序列號加一,接收機可以據此檢測包損和重建包序列.序列號的初始值是隨機的(不可預測),以使即便在源本身不加密時(有時包要透過翻譯器,它會這樣做),對加密演算法泛知的普通文字攻擊也會更加困難.
時間標誌:32位元 時間標誌反映了RTP資料包中第一個位元的抽樣瞬間.抽樣瞬間必須由隨時間單調和線形增長的時鐘得到,以進行同步和抖動計算.時鐘的解析度必須滿足要求的同步準確度,足以進行包到達抖動測量.時鐘頻率與作為負載傳輸的資料格式獨立,在協議中或定義此格式的負載型別說明中靜態定義,也可以在透過非RTP方法定義的負載格式中動態說明.若RTP包週期性生成,可以使用由抽樣時鐘確定的額定抽樣瞬間,而不是讀系統時鐘.例如,對於固定速率語音,時間標誌鍾可以每個抽樣週期加1.若語音裝置從輸入裝置讀取覆蓋160個抽樣週期的資料塊,對於每個這樣的資料塊,時間標誌增加160,無論此塊被髮送還是被靜音壓縮.
時間標誌的起始值是隨機的,如同序列號.多個連續的RTP包可能由同樣的時間標誌,若他們在邏輯上同時產生.如屬於同一個圖象幀.若資料沒有按照抽樣的
順序傳送,連續的RTP包可以包含不單調的時間標誌,如MPEG交織圖象幀.
SSRC:32位元 SSRC域用以識別同步源.識別符號被隨機生成,以使在同一個RTP會話期中沒有任何兩個同步源有相同的SSRC識別符.儘管多個源選擇同一個SSRC識別符的機率很低,所有RTP實現工具都必須準備檢測和解決衝突.若一個源改變本身的源傳輸地址,必須選擇新的SSRC識別符,以避免被當作一個環路源.
CSRC列表:0到15項,每項32位元 CSRC列表識別在此包中負載的有貢獻源.識別符的數目在CC域中給定.若有貢獻源多於15個,僅識別15個.CSRC識別符由混合器插入,用有貢獻源的SSRC識別符.例如語音包,混合產生新包的所有源的SSRC識別符號都被陳列,以期在接收機處正確指示交談者.
RTP頭擴充套件
RTP提供擴充套件機制以允許實現個性化:某些新的與負載格式獨立的功能要求的附加資訊在RTP資料資料包頭中傳輸.設計此方法可以使其它沒有擴充套件的互動執行忽略此頭擴充套件.RTP頭擴充套件的格式如下圖所示.
0 1 2 3
0 1 2 34 5 6 78 9 0 1 2 3 4 56 7 8 90 1 23 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 由協議定義 | 長度 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 頭擴充套件 |
| ... ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
若RTP頭中的擴充套件位元位置1,則一個長度可變的頭擴充套件部分被加到RTP固定頭之後,.頭擴充套件包含16位元的長度域,指示擴充套件項中32位元字的個數,不包括4個位元組擴充套件頭(因此零是有效值).RTP固定頭之後只允許有一個頭擴充套件.為允許多個互操作實現獨立生成不同的頭擴充套件,或某種特定實現有多種不同的頭擴充套件,擴充套件項的前16位元用以識別識別符號或引數.這16位元的格式由具體實現的上層協議定義.基本的RTP說明並不定義任何頭擴充套件本身.