RTP全名是Real-time Transport Protocol(實時傳輸協議)。它是IETF提出的一個標準,對應的RFC文檔爲RFC3550(RFC1889爲其過時版本)。RFC3550不只定義了RTP,並且定義了配套的相關協議RTCP(Real-time Transport Control Protocol,即實時傳輸控制協議)。html
RTP用來爲IP網上的語音、圖像、傳真等多種須要實時傳輸的多媒體數據提供端到端的實時傳輸服務。RTP爲Internet上端到端的實時傳輸提供時間信息和流同步,但並不保證服務質量,服務質量由RTCP來提供。算法
RTP的應用環境緩存
RTP用於在單播或多播網絡中傳送實時數據。它們典型的應用場合有以下幾個。網絡
流媒體工具
流媒體是指Internet上使用流式傳輸技術的連續時基媒體。ui
當前在Internet上傳輸音頻和視頻等信息主要有兩種方式:下載和流式傳輸編碼
下載狀況下,用戶須要先下載整個媒體文件到本地,而後才能播放媒體文件。在視頻直播等應用場合,因爲生成整個媒體文件要等直播結束,也就是用戶至少要在直播結束後才能看到直播節目,因此用下載方式不能實現直播。spa
流式傳輸是實現流媒體的關鍵技術。使用流式傳輸能夠邊下載邊觀看流媒體節目。因爲Internet是基於分組傳輸的,因此接收端收到的數據包每每有延遲和亂序(流式傳輸構建在UDP上)。要實現流式傳輸,就是要從下降延遲和恢復數據包時序入手。在發送端,爲下降延遲,每每對傳輸數據進行預處理(下降質量和高效壓縮)。在接收端爲了恢復時序,採用了接收緩衝;而爲了實現媒體的流暢播放,則採用了播放緩衝。操作系統
使用接收緩衝,能夠將接收到的數據包緩存起來,而後根據數據包的封裝信息(如包序號和時戳等),將亂序的包從新排序,最後將從新排序了的數據包放入播放緩衝播放。翻譯
爲何須要播放緩衝呢?容易想到,因爲網絡不可能很理想,而且對數據包排序須要處理時耗,咱們獲得排序好的數據包的時間間隔是不等的。若是不用播放緩衝,那麼播放節目會很卡,這叫時延抖動。相反,使用播放緩衝,在開始播放時,花費幾十秒鐘先將播放緩衝填滿(例如PPLIVE),能夠有效地消除時延抖動,從而在不太損失實時性的前提下實現流媒體的順暢播放。
到目前爲止,Internet 上使用較多的流式視頻格式主要有如下三種:RealNetworks 公司的RealMedia ,Apple 公司的QuickTime 以及Microsoft 公司的Advanced Streaming Format (ASF) 。
上面在談接收緩衝時,說到了流媒體數據包的封裝信息(包序號和時戳等),這在後面的RTP封裝中會有體現。另外,RealMedia這些流式媒體格式只是編解碼有不一樣,但對於RTP來講,它們都是待封裝傳輸的流媒體數據而沒有什麼不一樣。
怎樣重組亂序的數據包
能夠根據RTP包的序列號來排序。
怎樣得到數據包的時序
能夠根據RTP包的時間戳來得到數據包的時序。
聲音和圖像怎麼同步
根據聲音流和圖像流的相對時間(即RTP包的時間戳),以及它們的絕對時間(即對應的RTCP包中的RTCP),能夠實現聲音和圖像的同步。
接收緩衝和播放緩衝的做用
接收緩衝用來排序亂序了的數據包;播放緩衝用來消除播放的抖動,實現等時播放。
RTP(實時傳輸協議),顧名思義它是用來提供實時傳輸的,於是能夠當作是傳輸層的一個子層。給出了流媒體應用中的一個典型的協議體系結構。下圖給出了RTP協議與其餘協議之間的關係。RTP、TCP、UDP都屬於傳輸層協議; RTP也能夠認爲是介於應用層與傳輸層之間
RTP被劃分在傳輸層,它創建在UDP上。同UDP協議同樣,爲了實現其實時傳輸功能,RTP也有固定的封裝形式。RTP用來爲端到端的實時傳輸提供時間信息和流同步,但並不保證服務質量。服務質量由RTCP來提供。
很多人也把RTP歸爲應用層的一部分,這是從應用開發者的角度來講的。操做系統中的TCP/IP等協議棧所提供的是咱們最經常使用的服務,而RTP的實現仍是要靠開發者本身。所以從開發的角度來講,RTP的實現和應用層協議的實現沒不一樣,因此可將RTP當作應用層協議。
RTP實現者在發送RTP數據時,需先將數據封裝成RTP包,而在接收到RTP數據包,須要將數據從RTP包中提取出來。
一個協議的封裝是爲了知足協議的功能需求的。RTP封裝中應該有同步源和時戳等字段,具體封裝形式以下
另外還包括如下字段
RTP的會話過程
當應用程序創建一個RTP會話時,應用程序將肯定一對目的傳輸地址。目的傳輸地址由一個網絡地址和一對端口組成,有兩個端口:一個給RTP包,一個給RTCP包,使得RTP/RTCP數據可以正確發送。RTP數據發向偶數的UDP端口,而對應的控制信號RTCP數據發向相鄰的奇數UDP端口(偶數的UDP端口+1),這樣就構成一個UDP端口對。 RTP的發送過程以下,接收過程則相反。
RTP須要RTCP爲其服務質量提供保證,所以須要介紹一下RTCP的相關知識。
RTCP的主要功能是:服務質量的監視與反饋、媒體間的同步,以及多播組中成員的標識。
在RTP會話期間,各參與者週期性地傳送RTCP包。RTCP包中含有已發送的數據包的數量、丟失的數據包的數量等統計資料,所以,各參與者能夠利用這些信息動態地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,它們能以有效的反饋和最小的開銷使傳輸效率最佳化,於是特別適合傳送網上的實時數據。
RTCP也是用UDP來傳送的,但RTCP封裝的僅僅是一些控制信息,於是分組很短,因此能夠將多個RTCP分組封裝在一個UDP包中。RTCP有以下五種分組類型。
類型 |
縮寫表示 |
用途 |
200 |
SR(Sender Report) |
發送端報告 |
201 |
RR(Receiver Report) |
接收端報告 |
202 |
SDES(Source Description Items) |
源點描述 |
203 |
BYE |
結束傳輸 |
204 |
APP |
特定應用 |
表 1 RTCP的5種分組類型
上述五種分組的封裝大同小異,下面只講述SR類型,而其它類型請參考RFC3550。
發送端報告分組SR(Sender Report)用來使發送端以多播方式向全部接收端報告發送狀況。SR分組的主要內容有:相應的RTP流的SSRC,RTP流中最新產生的RTP分組的時間戳和NTP,RTP流包含的分組數,RTP流包含的字節數。
實時流協議RTSP
實時流協議RTSP(Real-Time Streaming Protocol)是IETF提出的協議,對應的RFC文檔爲RFC2362。
RTSP是一個應用層協議(TCP/IP網絡體系中)。它以C/S模式工做,它是一個多媒體播放控制協議,主要用來使用戶在播放流媒體時能夠像操做本地的影碟機同樣進行控制,便可以對流媒體進行暫停/繼續、後退和前進等控制。
資源預約協議RSVP
資源預約協議RSVP(Resource Reservation Protocol)是IETF提出的協議,對應的RFC文檔爲RFC2208。
RSVP工做在IP層之上傳輸層之下,是一個網絡控制協議。RSVP經過在路由器上預留必定的帶寬,能在必定程度上爲流媒體的傳輸提供服務質量。在某些試驗性的系統如網絡視頻會議工具vic中就集成了RSVP。