RTP與RTCP協議介紹

本文轉自:http://blog.51cto.com/zhangjunhd/25481
1.流媒體( Streaming Media)
1.1流媒體概念
流媒體技術是網絡技術和多媒體技術發展到一定階段的產物。術語流媒體既可以指在網上傳輸連續時基媒體的流式技術,也可以指使用流式技術的連續時基媒體本身。在網上傳輸音頻、視頻等多媒體信息目前主要有兩種方式:下載和流式傳輸。采用下載方式,用戶需要先下載整個媒體文件,然后才能進行播放。由于網絡帶寬的限制,下載常常要花很長時間,所以這種處理方式延遲很大。而流媒體實現的關鍵技術是流式傳輸。傳輸之前首先對多媒體進行預處理(降低質量和高效壓縮) ,然后使用緩存系統來保證數據連續正確地進行傳輸。使用流式傳輸方式,用戶不必像采用下載方式那樣要等到整個文件全部下載完畢,而是只需經過幾秒到幾十秒的啟動延時即可在客戶端進行播放和觀看。此時媒體文件的剩余部分將在后臺繼續下載。與單純的下載方式相比,這種對多媒體文件邊下載邊播放的流式傳輸方式不僅使啟動延時大幅度地縮短,而且對系統緩存容量的需求也大大降低。使用流式傳輸的另一個好處是使傳輸那些事先不知道或無法知道大小的媒體數據(如網上直播、視頻會議等) 成為可能。
到目前為止,Internet 上使用較多的流式視頻格式主要有以下三種:RealNetworks 公司的RealMedia ,Apple 公司的QuickTime 以及Microsoft 公司的Advanced Streaming Format (ASF) 。

1.2支持流媒體的協議
多媒體應用的一個顯著特點是數據量大,并且許多應用對實時性要求比較高。傳統的TCP 協議是一個面向連接的協議,它的重傳機制和擁塞控制機制都是不適用于實時多媒體傳輸的。RTP 是一個應用型的傳輸層協議,它并不提供任何傳輸可靠性的保證和流量的擁塞控制機制。RTP 位于UDP(User Datagram Protocol) 之上。UDP 雖然沒有TCP 那么可靠,并且無法保證實時業務的服務質量,需要RTCP 實時監控數據傳輸和服務質量。但是,由于UDP 的傳輸時延低于TCP ,能與音頻和視頻很好地配合。因此,在實際應用中,RTP/ RTCP/ UDP 用于音頻/ 視頻媒體,而TCP 用于數據和控制信令的傳輸。目前,支持流媒體傳輸的協議主要有實時傳輸協議RTP( Real-Time Transport Protocol) 、實時傳輸控制協議RTCP(Real-Time Transport Control Protocol) 和實時流協議RTSP(Real-Time Streaming Protocol) 等。下面分別對這三種協議作簡要介紹。流媒體協議棧如圖1 所示。這里寫圖片描述
2.實時傳輸協議RTP(Real-Time Transport Protocol)
RTP是針對Internet上多媒體數據流的一個傳輸協議, 由IETF(Internet工程任務組)作為RFC1889發布。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間信息和實現流同步。RTP的典型應用建立在UDP上,但也可以在TCP或ATM等其他協議之上工作。RTP本身只保證實時數據的傳輸,并不能為按順序傳送數據包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務。

2.1 RTP工作機制
威脅多媒體數據傳輸的一個尖銳的問題就是不可預料數據到達時間。但是流媒體的傳輸是需要數據的適時的到達用以播放和回放。rtp協議就是提供了時間標簽,序列號以及其它的結構用于控制適時數據的流放。在流的概念中”時間標簽”是最重要的信息。發送端依照即時的采樣在數據包里隱蔽的設置了時間標簽。在接受端收到數據包后,就依照時間標簽按照正確的速率恢復成原始的適時的數據。不同的媒體格式調時屬性是不一樣的。但是rtp本身并不負責同步,rtp只是傳輸層協議,為了簡化運輸層處理,提高該層的效率。將部分運輸層協議功能(比如流量控制)上移到應用層完成。同步就是屬于應用層協議完成的。它沒有運輸層協議的完整功能,不提供任何機制來保證實時地傳輸數據,不支持資源預留,也不保證服務質量。rtp報文甚至不包括長度和報文邊界的描述。同時rtp協議的數據報文和控制報文的使用相鄰的不同端口,這樣大大提高了協議的靈活性和處理的簡單性。
rtp協議和udp二者共同完成運輸層協議功能。udp協議只是傳輸數據包,不管數據包傳輸的時間順序。 rtp的協議數據單元是用udp分組來承載的。在承載rtp數據包的時候,有時候一幀數據被分割成幾個包具有相同的時間標簽,則可以知道時間標簽并不是必須的。而udp的多路復用讓rtp協議利用支持顯式的多點投遞,可以滿足多媒體會話的需求。
rtp協議雖然是傳輸層協議但是它沒有作為osi體系結構中單獨的一層來實現。rtp協議通常根據一個具體的應用來提供服務,rtp只提供協議框架,開發者可以根據應用的具體要求對協議進行充分的擴展。

2.2 RTP協議的報文結構
RTP頭格式如圖2所示:這里寫圖片描述
開始12個八進制出現在每個RTP包中,而CSRC標識列表僅出現在混合器插入時。各段含義如下:
①版本(V)
2位,標識RTP版本。

②填充標識(P)
1位,如設置填充位,在包尾將包含附加填充字,它不屬于有效載荷。填充的最后一個八進制包含應該忽略的八進制計數。某些加密算法需要固定大小的填充字,或為在底層協議數據單元中攜帶幾個RTP包。

③擴展(X)
1位,如設置擴展位,固定頭后跟一個頭擴展。

④CSRC計數(CC)
4位,CSRC計數包括緊接在固定頭后CSRC標識符個數。

⑤標記(M)
1位,標記解釋由設置定義,目的在于允許重要事件在包流中標記出來。設置可定義其他標示位,或通過改變位數量來指定沒有標記位。

⑥載荷類型(PT)
7位,記錄后面資料使用哪種 Codec , receiver 端找出相應的 decoder 解碼出來。

常用 types:

Payload TypeCodec
0PCM μ -Law
8PCM-A Law
9G..722 audio codec
4G..723 audio codec
15G..728 audio codec
18G..729 audio codec
34G..763 audio codec
31G..761 audio codec

⑦系列號
16位,系列號隨每個RTP數據包而增加1,由接收者用來探測包損失。系列號初值是隨機的,使對加密的文本攻擊更加困難。

⑧時標
32位,時標反映RTP數據包中第一個八進制數的采樣時刻,采樣時刻必須從單調、線性增加的時鐘導出,以允許同步與抖動計算。時標可以讓receiver端知道在正確的時間將資料播放出來。
這里寫圖片描述
由上圖可知,如果只有系列號,并不能完整按照順序的將data播放出來,因為如果data中間有一段是沒有資料的,只有系列號的話會造成錯誤,需搭配上讓它知道在哪個時間將data正確播放出來,如此我們才能播放出正確無誤的信息。

⑨SSRC
32位,SSRC段標識同步源。此標識不是隨機選擇的,目的在于使同一RTP包連接中沒有兩個同步源有相同的SSRC標識。盡管多個源選擇同一個標識的概率很低,所有RTP實現都必須探測并解決沖突。如源改變源傳輸地址,也必須選擇一個新SSRC標識以避免插入成環行源。

⑩CSRC列表
0到15項,每項32位。CSRC列表表示包內的對載荷起作用的源。標識數量由CC段給出。如超出15個作用源,也僅標識15個。CSRC標識由混合器插入,采用作用源的SSRC標識。

3.實時傳輸控制協議RTCP(Real-Time Transport Control Protocol)
RTCP負責管理傳輸質量在當前應用進程之間交換控制信息。在RTP會話期間,各參與者周期性地傳送RTCP包,包中含有已發送的數據包的數量、丟失的數據包的數量等統計資料。因此,服務器可以利用這些信息動態地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,能以有效的反饋和最小的開銷使傳輸效率最佳化,故特別適合傳送網上的實時數據。

3.1 RTCP工作機制
當應用程序開始一個rtp會話時將使用兩個端口:一個給rtp,一個給rtcp。rtp本身并不能為按順序傳送數據包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠rtcp提供這些服務。在rtp的會話之間周期的發放一些rtcp包以用來傳監聽服務質量和交換會話用戶信息等功能。rtcp包中含有已發送的數據包的數量、丟失的數據包的數量等統計資料。因此,服務器可以利用這些信息動態地改變傳輸速率,甚至改變有效載荷類型。rtp和rtcp配合使用,它們能以有效的反饋和最小的開銷使傳輸效率最佳化,因而特別適合傳送網上的實時數據。根據用戶間的數據傳輸反饋信息,可以制定流量控制的策略,而會話用戶信息的交互,可以制定會話控制的策略。

3.2 RTCP數據報
在RTCP通信控制中,RTCP協議的功能是通過不同的RTCP數據報來實現的,主要有如下幾種類型:
①SR:發送端報告,所謂發送端是指發出RTP數據報的應用程序或者終端,發送端同時也可以是接收端。
②RR:接收端報告,所謂接收端是指僅接收但不發送RTP數據報的應用程序或者終端。
③SDES:源描述,主要功能是作為會話成員有關標識信息的載體,如用戶名、郵件地址、電話號碼等,此外還具有向會話成員傳達會話控制信息的功能。
④BYE:通知離開,主要功能是指示某一個或者幾個源不再有效,即通知會話中的其他成員自己將退出會話。
⑤APP:由應用程序自己定義,解決了RTCP的擴展性問題,并且為協議的實現者提供了很大的靈活性。

4.資源預訂協議RSVP (Resorce Reservation Protocol)
由于音頻和視頻數據流比傳統數據對網絡的延時更敏感,要在網絡中傳輸高質量的音頻、視頻信息,除帶寬要求之外,還需其他更多的條件。RSVP是Internet上的資源預訂協議,使用RSVP預留部分網絡資源(即帶寬),能在一定程度上為流媒體的傳輸提供QoS。

5.參考資料
[1]蔣愛權,流媒體技術的Java實現,計算機應用研究2002,10。
[2]吳國勇,網絡視頻流媒體技術與應用,北京郵電大學出版社,2001。
[3]臺灣國立中央大學電機工程系通訊專題報告VOIP

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274031.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274031.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274031.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JSP學習

一、JSP 簡介 什么是Java Server Pages? JSP全稱Java Server Pages&#xff0c;是一種動態網頁開發技術。它使用JSP標簽在HTML網頁中插入Java代碼。標簽通常以<%開頭以%>結束。 JSP是一種Java servlet&#xff0c;主要用于實現Java web應用程序的用戶界面部分。網頁開發…

Java給定一個字符串數組,判斷每個字符出現次數

題目要求&#xff1a;給定一個字符串&#xff0c;判斷每個字符出現多少次&#xff1f; 解決思路&#xff1a;利用Map的特性&#xff1a;即Map集合中如果兩個key&#xff08;鍵&#xff09;值是一樣相同的&#xff0c;那么&#xff0c;后放&#xff08;put&#xff09;入的值會將…

Java-n個人報數

題目&#xff1a; 有n個人圍成一圈&#xff0c;順序排號。從第一個人開始報數&#xff08;從1到3報數&#xff09;&#xff0c;凡報到3的人退出圈子&#xff0c;問最后留下的是原來第幾號的哪一位&#xff1f; 大概思路&#xff1a;假設有3個人&#xff0c;它們圍成一圈&#x…

100個直接可以拿來用的JavaScript實用功能代碼片段

http://www.cnblogs.com/wxydigua/p/3314274.html轉載于:https://www.cnblogs.com/kevinge/p/3316315.html

[轉]JS Cookie 中文亂碼

首先是一個解析cookie的函數&#xff1a; <script type"text/javascript"> function getCookie(name) { var cookies document.cookie.split(";"); for(var i0;i<cookies.length;i) { var cookie cookies[i]; var cookieStr cookie.…

Java線程中關于Synchronized的用法

synchronized是Java中的關鍵字&#xff0c;是一種同步鎖。它修飾的對象有以下幾種&#xff1a; 1. 修飾一個代碼塊&#xff0c;被修飾的代碼塊稱為同步語句塊&#xff0c;其作用的范圍是大括號{}括起來的代碼&#xff0c;作用的對象是調用這個代碼塊的對象&#xff1b; 2. 修飾…

cmd命令行設置環境變量

http://blog.sciencenet.cn/blog-51026-566742.html 1、查看當前所有可用的環境變量&#xff1a;輸入 set 即可查看。 2、查看某個環境變量&#xff1a;輸入 “set 變量名”即可&#xff0c;比如想查看path變量的值&#xff0c;即輸入 set path。 3、修改環境變量 &#xff1a;…

Java線程之多線程與多進程(1)——以操作系統的角度述說線程與進程

任務調度 線程是什么&#xff1f;要理解這個概念&#xff0c;須要先了解一下操作系統的一些相關概念。大部分操作系統(如Windows、Linux)的任務調度是采用時間片輪轉的搶占式調度方式&#xff0c;也就是說一個任務執行一小段時間后強制暫停去執行下一個任務&#xff0c;每個任務…

用 PS 調整服務器時間

用 PS 調整服務器時間 Powershell 有一個命令用來調整計算機的時間&#xff0c; Set-Date -Adjust&#xff0c;但是&#xff0c;只能調整本地時間&#xff0c;不能調整遠程的計算機時間。 function AdjustDCTime ( $Server, $addTime ){ $Svr Get-WmiObject Win32_Operatin…

Java線程之多線程與多進程(2)——線程優先級與線程安全

線程優先級 現在主流操作系統(如Windows、Linux、Mac OS X)的任務調度除了具有前面提到的時間片輪轉的特點外&#xff0c;還有優先級調度(Priority Schedule)的特點。優先級調度決定了線程按照什么順序輪流執行&#xff0c;在具有優先級調度的系統中&#xff0c;線程擁有各自的…

mahout貝葉斯算法開發思路(拓展篇)1

首先說明一點&#xff0c;此篇blog解決的問題是就下面的數據如何應用mahout中的貝葉斯算法&#xff1f;&#xff08;這個問題是在上篇&#xff08;。。。完結篇&#xff09;blog最后留的問題&#xff0c;如果想直接使用該工具&#xff0c;可以在mahout貝葉斯算法拓展下載&#…

Java線程之多線程與多進程(3)——Java中的多線程

單線程 任何程序至少有一個線程&#xff0c;即使你沒有主動地創建線程&#xff0c;程序從一開始執行就有一個默認的線程&#xff0c;被稱為主線程&#xff0c;只有一個線程的程序稱為單線程程序。如下面這一簡單的代碼&#xff0c;沒有顯示地創建一個線程&#xff0c;程序從mai…

幾種常用控件的使用方法

1.UIActivityIndicatorView的使用 UIActivityIndicatorView *activity[[[UIActivityIndicatorViewalloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]autorelease]; z [activity setFrame:CGRectMake(150,150, 50, 50)]; [self.window addSubview:activ…

Java-正則表達式

什么是正則表達式&#xff1f; 正則表達式(Regular Expression)就是用某種模式去匹配一類字符串的公式。如你要在一篇文章中查找第一個字是“李”最后一個字是“建”的三個字的姓名&#xff0c;即“李*建”&#xff1b;那么“李*建”就是公式&#xff0c;也稱作模式(Pattern)&a…

tab標簽的另一種寫法

<div class"good"><ul><li><span>歌曲精選</span></li><li class"other"><span>MV精選</span></li></ul><div class"music_good"><p><span>丁當</span…

java 中 if與while的區別

if&#xff1a;就是一個判斷的&#xff0c;如果滿足后面的條件就繼續運行if語句里面的東西的&#xff0c;要是不滿足就跳出來&#xff0c;執行else語句或執行下面的語句的 。while&#xff1a;就是循環語句的&#xff0c;當滿足while里面的條件時&#xff0c;就會執行里面的循環…

install yael on the ubuntu 12.04

1. bits/predefs.h no such file or directory ??? sudo apt-get install gcc-multilib 2. sudo gedit /etc/profile PATH$PATH:/usr/local/MATLAB/R2012a/bin source /etc/profile 3.ubuntu 切換gcc 版本 1&#xff09;sudo apt-get install gcc-4.4 g-4.4 g-4.4-multi…

Java 線程多線程編程3---線程同步之生產者與消費者問題

生產者與消費者問題&#xff1a; 第一步&#xff1a;把架子搭起來 package com.zhj.www;public class ProceduerConsumer {public static void main(String[] args) {} }//饅頭實體 class wotou{int id;wotou(int id) {this.id id;}public String toString() {return "wo…

windows 服務實例

參考來源:http://blog.csdn.net/morewindows/article/details/6858216 參考來源: http://hi.baidu.com/tfantasy/item/aefa43d66b470a2b38f6f76c 剩下的都是我自己整理的。 在VS2012中新建一個Windows 服務的項目。然后在解決方案目錄下找到Services1.cs&#xff0c;切換到代碼…

Java 線程多線程編程2---線程同步

來模擬一個死鎖&#xff08;互相等待&#xff09;&#xff1a; TestDeadLock.java package com.zhj.www;public class TestDeadLock implements Runnable {public int flag 1;static Object o1 new Object();static Object o2 new Object();public void run() {System.out.p…