RTP/RTCP

RTP/RTCP

RTP(Realtime Transport Protocol)實時傳輸協定:是針對Internet上多媒體數據流的一個傳輸協定, 由IETF(Internet工程任務組)作為RFC1889發布;RTCP(Realtime Transport Control Protocol)實時傳輸控制協定:負責管理傳輸質量在當前套用進程之間交換控制信息。

簡介

專用術語

實時傳輸協定RTP(Realtime Transport Protocol):是針對Internet上多媒體數據流的一個傳輸協定, 由IETF(Internet工程任務組)作為RFC1889發布。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間信息和實現流同步。RTP的典型套用建立在UDP上,但也可以在TCP或ATM等其他協定之上工作。RTP本身只保證實時數據的傳輸,並不能為按順序傳送數據包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務。
實時傳輸控制協定RTCP(Realtime Transport Control Protocol):負責管理傳輸質量在當前套用進程之間交換控制信息。在RTP會話期間,各參與者周期性地傳送RTCP包,包中含有已傳送的數據包的數量、丟失的數據包的數量等統計資料,因此,伺服器可以利用這些信息動態地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,能以有效的反饋和最小的開銷使傳輸效率最佳化,故特別適合傳送網上的實時數據。

RTCP主要有4個功能:
流程圖流程圖
(1)用反饋信息的方法來提供分配數據的傳送質量,這種反饋可以用來進行流量的擁塞控制,也可以用來監視網路和用來診斷網路中的問題;
(2)為RTP源提供一個永久性的CNAME(規範性名字)的傳送層標誌,因為在發現衝突或者程式更新重啟時SSRC(同步源標識)會變,需要一個運作痕跡,在一組相關的會話中接收方也要用CNAME來從一個指定的與會者得到相聯繫的數據流(如音頻和視頻);
(3)根據與會者的數量來調整RTCP包的傳送率;
(4)傳送會話控制信息,如可在用戶接口顯示與會者的標識,這是可選功能。

工作流程

RTP協定從上層接收流媒體信息碼流(如H.263),裝配成RTP數據包傳送給下層,下層協定提供RTP和RTCP的分流。如在UDP中,RTP使用一個偶數號連線埠,則相應的RTCP使用其後的奇數號連線埠。RTP數據包沒有長度限制,它的最大包長只受下層協定的限制。

RTP會話和流的兩級分用

一個RTP會話(Session)包括傳給某個指定目的地對(Destination Pair)的所有通信量,傳送方可能包括多個。而從同一個同步源發出的RTP分組序列稱為流(Stream),一個RTP會話可能包含多個RTP流。一個RTP分組在伺服器端傳送出去的時候總是要指定屬於哪個會話和流,在接收時也需要進行兩級分用,即會話分用和流分用。只有當RTP使用同步源標識(SSRC)和分組類型(PTYPE)把同一個流中的分組組合起來,才能夠使用序列號(Sequence Number)和時間戳(Timestamp)對分組進行排序和正確回放。
由於實時數據的獨有性,不同實時客戶可以共用一個RTP實時服務執行緒和一個RTCP實時服務執行緒,這樣可以大大減小伺服器的負擔,而每個檔案客戶由於請求的檔案不同,相應地對速度和開始時間的要求都可能不同,所以需要有自己獨有的RTP檔案服務執行緒和RTCP檔案服務執行緒。
RTP服務執行緒負責把實時數據流傳送給客戶,RTCP服務執行緒根據RTP執行緒的統計數據,產生髮送方報告給客戶。RTP執行緒和RTCP執行緒之間通過一段共享記憶體互動統計數據,對共享記憶體必須設定互斥體進行保護,防止出現錯誤讀寫。在這種方式下,伺服器可以根據每個用戶的不同請求和具體情況方便地提供不同的服務。
RTP 時間戳的處理
時間戳欄位是RTP首部中說明數據包時間的同步信息,是數據能以正確的時間順序恢復的關鍵。時間戳的值給出了分組中數據的第一個位元組的採樣時間(Sampling Instant),要求傳送方時間戳的時鐘是連續、單調增長的,即使在沒有數據輸入或傳送數據時也是如此。在靜默時,傳送方不必傳送數據,保持時間戳的增長,在接收端,由於接收到的數據分組的序號沒有丟失,就知道沒有發生數據丟失,而且只要比較前後分組的時間戳的差異,就可以確定輸出的時間間隔。
RTP規定一次會話的初始時間戳必須隨機選擇,但協定沒有規定時間戳的單位,也沒有規定該值的精確解釋,而是由負載類型來確定時鐘的顆粒,這樣各種套用類型可以根據需要選擇合適的輸出計時精度。
在RTP傳輸音頻數據時,一般選定邏輯時間戳速率與採樣速率相同,但是在傳輸視頻數據時,必須使時間戳速率大於每幀的一個滴答。如果數據是在同一時刻採樣的,協定標準還允許多個分組具有相同的時間戳值。
RTP協定沒有規定RTP分組的長度和傳送數據的速度,因而需要根據具體情況調整伺服器端傳送媒體數據的速度。對來自設備的實時數據可以採取等時間間隔訪問設備緩衝區,在有新數據輸入時傳送數據的方式,時間戳的設定相對容易。對已經錄製好的本地硬碟上的媒體檔案,以H.263格式的檔案為例,由於檔案本身不包含幀率信息,所以需要知道錄製時的幀率或者設定一個初始值,在傳送數據的時候找出傳送數據中的幀數目,根據幀率和預置值來計算時延,以適當的速度傳送數據並設定時間戳信息。
RTCP的一個關鍵作用就是能讓接收方同步多個RTP流,例如:當音頻與視頻一起傳輸的時候,由於編碼的不同,RTP使用兩個流分別進行傳輸,這樣兩個流的時間戳以不同的速率運行,接收方必須同步兩個流,以保證聲音與影像的一致。為能進行流同步,RTCP要求傳送方給每個傳送一個唯一的標識數據源的規範名(Canonical Name),儘管由一個數據源發出的不同的流具有不同的同步源標識(SSRC),但具有相同的規範名,這樣接收方就知道哪些流是有關聯的。而傳送方報告報文所包含的信息可被接收方用於協調兩個流中的時間戳值。傳送方報告中含有一個以網路時間協定NTP(Network Time Protocol)格式表示的絕對時間值,接著RTCP報告中給出一個RTP時間戳值,產生該值的時鐘就是產生RTP分組中的TimeStamp欄位的那個時鐘。由於傳送方發出的所有流和傳送方報告都使用同一個絕對時鐘,接收方就可以比較來自同一數據源的兩個流的絕對時間,從而確定如何將一個流中的時間戳值映射為另一個流中的時間戳值。

伺服器的算法

伺服器軟體模型主要有兩種,即並發伺服器和循環伺服器。循環伺服器(Iterative Server)是指在一個時刻只處理一個請求的伺服器。並發伺服器(Concurrent Server)是指在一個時刻可以處理多個請求的伺服器。事實上,多數伺服器沒有用於同時處理多個請求的冗餘設備,而是提供一種表面上的並發性,方法是依靠執行多個執行緒,每個執行緒處理一個請求,從客戶的角度看,伺服器就像在並發地與多個客戶通信。
由於流媒體服務時間的不定性和數據互動實時性的請求,流媒體伺服器一般採用並發伺服器算法。本文構建了一個基本的流媒體伺服器,能夠同時回響多個用戶的請求,把本地硬碟流媒體檔案或實時數據流(H.263格式)傳送給用戶。在套用中,把客戶分為請求實時數據的實時客戶和請求檔案數據的檔案客戶兩類。主要算法為:
(1)打開設備,分配資源。當設備準備好時,創建一個RTP實時服務執行緒和一個RTCP實時服務執行緒。
(2)創建一個UDP套接字並將其綁定到所提供服務的地址之上。
(3)反覆調用接收模組,接收來自客戶的RTCP報告,根據其類型做出回響。對新實時客戶的請求,把客戶地址添加到實時服務的客戶列表中,對新檔案客戶的請求,則創建一個新RTP檔案服務執行緒和一個新RTCP檔案服務執行緒;對已經在服務中的客戶則根據RTCP報告的內容調整服務。
RTP實時服務執行緒1:初始化客戶列表和RTP首部。
RTP實時服務執行緒2:從設備讀取媒體數據,把數據傳送給實時服務列表中的客戶。
RTP實時服務執行緒3:更新RTP首部和統計數據。
RTP實時服務執行緒4:計算延時,重複第二步。
RTCP實時服務執行緒1:初始化RTCP首部。
RTCP實時服務執行緒2:傳送傳送方報告給實時服務列表中的客戶。
RTCP實時服務執行緒3:計算延時,重複第二步。
RTP檔案服務執行緒1:初始化RTP首部。
RTP檔案服務執行緒2.:從檔案讀取媒體數據,把數據傳送給客戶。
RTP檔案服務執行緒3:更新已傳送數據的統計信息,為生成傳送方報告做準備。
RTP檔案服務執行緒4:計算延時,調整傳送速度,正常情況下開始重複第二步。
RTCP檔案服務執行緒1:初始化RTCP首部,傳送一個源描述(SDES)報文給客戶。
RTCP檔案服務執行緒2:根據已傳送數據的統計信息生成傳送方報告,傳送給客戶。
RTCP檔案服務執行緒3:計算延時,正常情況下開始重複第一步。

RTP/RTCP實現(C++)

對於WIFI手機來說呢,RTP協定用來傳送編碼後的語音,RTCP協定用來傳送控制信息,公司的RTCP附帶了一些語音統計信息和JITTER buffer的統計信息用來防止語音抖動。

相關搜尋

熱門詞條

聯絡我們