流媒體傳輸協議

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 所示。

  圖1 流媒體協議棧

  2.實時傳輸協議RTPReal-Time Transport Protocol):

  RTP是針對Internet上多媒體數據流的一個傳輸協議,IETF(Internet工程任務組)作為RFC1889發布。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間信息和實現流同步。RTP的典型應用建立在UDP上,但也可以在TCPATM等其他協議之上工作。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位,記錄后面資料使用哪種 Codecreceiver 端找出相應的 decoder 解碼出來。

  常用types

Payload Type

Codec

0

PCM μ -Law

8

PCM-A Law

9

G..722 audio codec

4

G..723 audio codec

15

G..728 audio codec

18

G..729 audio codec

34

G..763 audio codec

31

G..761 audio codec

  ⑦系列號

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

  ⑧時標

  32位,時標反映RTP數據包中第一個八進制數的采樣時刻,采樣時刻必須從單調、線性增加的時鐘導出,以允許同步與抖動計算。時標可以讓receiver端知道在正確的時間將資料播放出來。

  由上圖可知,如果只有系列號,并不能完整按照順序的將data播放出來,因為如果data中間有一段是沒有資料的,只有系列號的話會造成錯誤,需搭配上讓它知道在哪個時間將data正確播放出來,如此我們才能播放出正確無誤的信息。

  ⑨SSRC

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

  ⑩CSRC列表

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

  3.實時傳輸控制協議RTCP(Real-Time Transport Control Protocol)

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

  3.1 RTCP工作機制

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

  3.2 RTCP數據報

  在RTCP通信控制中,RTCP協議的功能是通過不同的RTCP數據報來實現的,主要有如下幾種類型:

  ①SR:發送端報告,所謂發送端是指發出RTP數據報的應用程序或者終端,發送端同時也可以是接收端。

  ②RR:接收端報告,所謂接收端是指僅接收但不發送RTP數據報的應用程序或者終端。

  ③SDES:源描述,主要功能是作為會話成員有關標識信息的載體,如用戶名、郵件地址、電話號碼等,此外還具有向會話成員傳達會話控制信息的功能。

  ④BYE:通知離開,主要功能是指示某一個或者幾個源不再有效,即通知會話中的其他成員自己將退出會話。

  ⑤APP:由應用程序自己定義,解決了RTCP的擴展性問題,并且為協議的實現者提供了很大的靈活性。

  4.資源預訂協議RSVP (ResorceReservationProtocol)

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

  本文出自 子 孑 博客,請務必保留此出處http://zhangjunhd.blog.51cto.com/113473/25481

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

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

相關文章

關閉瀏覽器網頁觸發事件_淺析瀏覽器渲染和 script 加載

前言前端代碼離不開瀏覽器環境,理解 js、css 代碼如何在瀏覽器中工作是非常重要的。如何優化渲染過程中的回流,重繪?script 腳本在頁面中是怎么個加載順序?了解這些對前端性能優化起著非常大的作用。借著這篇文章,讓自…

Open vSwitch實驗常用命令

1. 基本架構 ovs-vsctl: 管理ovsdb-server的配置,提供OVSDB的配置方法,包括創建和刪除網橋、端口等; ovs-ofctl: 提供ovs-vswitchd的流表配置方法; ovs-dpctl: 配置OVS內核模塊,提供緩存流表的操作方法&#xff1b…

記IOS8中碰到的一個JS bug

IOS8的JS版本過低導致 var id "123"; var temp1 {id, "left": "200"}; // error in IOS8 var temp2 {"id":id, "left": "200"};平時還是多寫ES5的代碼,es6的語法總能碰到兼容的坑。 改了好幾天。…

Emmet的html語法

Emmet的html語法 所有操作按下“tab”鍵即可瞬間完成 元素 1.在編輯器中輸入元素名稱,即可自動補全生成 HTML 標簽,即使不是標準的 HTML 標簽。 2.輸入:! 或者 html:5 或者 html:4s 或者 html:4t 將自動補全html基本結構 嵌套操作 1.使用…

RTP Payload Format for H.264 Video

H.264 RTP協議的封裝格式rfc3984 英文原版:http://tools.ietf.org/html/rfc3984 部分中文翻譯: H.264 視頻 RTP 負載格式 1. 網絡抽象層單元類型 (NALU) NAL單元1字節包頭負載 NALU 頭由一個字節組成, 它的語法如下: —————|0|1|2|3|4|5|6|7|------…

js字符串、數組和數字常用方法總結

https://github.com/AnHyun/blog/issues/3 一、string 常用方法: 1.substring(start開始位置的索引,end結束位置索引) 截取的位置不包含結束位置的字符,只寫一個參數表示從開始位置截取到最后,輸入負值時將負值變為0,哪個較小作為開始位置 va…

Oracle 存儲過程錯誤之PLS-00201: 必須聲明標識符

轉自:http://blog.csdn.net/u010678947/article/details/20702149 錯誤: ORA-06550: 第 1 行, 第 7 列: PLS-00201: 必須聲明標識符ZUO.PROCE_TESTORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored 解決方法: (1&#x…

mysql中如何把兩個查詢結果列數不同并成一張表_MySQL

引言本文整理了MySQL相關的知識,方便以后查閱。 基礎架構下圖是 MySQL 的一個簡要架構圖,從下圖你可以很清晰的看到用戶的 SQL 語句在 MySQL 內部是如何執行的。 先簡單介紹一下下圖涉及的一些組件的基本作用幫助大家理解這幅圖。 - 連接器: …

JavaWeb筆記01-XML

今日內容 XML 概念語法解析 XML: 概念: Extensible Markup Language 可擴展標記語言 可擴展:標簽都是自定義的.<user><student> 功能 存儲數據 配置文件在網絡中傳輸 一個故事 由于瀏覽器之間的競爭,導致HTML發展的十分不順利 用戶:唉,這怎么報錯了呢?…

centos下如何使用sendmail發送郵件

最近在實施服務端日志監控腳本&#xff0c;需要對異常情況發送郵件通知相關責任人&#xff0c;記錄下centos通過sendmail發送郵件的配置過程。一. 安裝sendmail和mailx1、安裝sendmail&#xff1a;1): centos下可以安裝命令:yum install -y sendmail service sendmail start yu…

H.263 H.263+ Payload Type

h263 rtp協議封裝協議英文版&#xff1a;rfc4629:http://tools.ietf.org/html/rfc4629 以下文章是部分參考翻譯&#xff1a; 文章出處&#xff1a; http://blog.csdn.net/zblue78/archive/2009/04/09/4059414.aspxGeneral H.263 Payload Header The H.263 payload header is s…

OC 中 load 方法和 initialize 方法的異同

(void)load; 當類對象被引入項目時, runtime 會向每一個類對象發送 load 消息load 方法會在每一個類甚至分類被引入時僅調用一次,調用的順序:父類優先于子類, 子類優先于分類load 方法不會被類自動繼承 (void)initialize; 也是在第一次使用這個類的時候會調用這個方法 轉載于:h…

scrapy框架_Python學習之Scrapy框架

爬蟲界江湖地位No.1說起Python&#xff0c;不得不說到它的爬蟲應用&#xff0c;由于Python的短小精悍&#xff0c;用它來開發爬蟲應用是最合適不過了&#xff0c;基于Python抓取網頁的庫有很多&#xff0c;例如requests,beatifulsoup等等&#xff0c;但是要說到有哪一個框架&am…

JavaWeb筆記03-Servlet

今日內容 ServletHTTP協議Request Servlet 概念 步驟 執行原理 生命周期 Servlet3.0注解配置 Servlet的體系結構 Servlet – 接口 GenericServlet – 抽象類:將Servlet接口中其他方法做了默認空實現,只將service()方法作為抽象 將來定義Servlet類時候,可以繼承Generic…

Android開發中無處不在的設計模式——動態代理模式

繼續更新設計模式系列。寫這個模式的主要原因是近期看到了動態代理的代碼。 先來回想一下前5個模式&#xff1a; - Android開發中無處不在的設計模式——單例模式 - Android開發中無處不在的設計模式——Builder模式 - Android開發中無處不在的設計模式——觀察者模式 - A…

用于MPEG-4視聽流的RTP負載格式

MPEG-4的rtp協議封裝英文原版 RFC 3016&#xff1a;http://www.rfc-editor.org/rfc/rfc3016.txt中文翻譯&#xff1a;組織&#xff1a;中國互動出版網&#xff08;http://www.china-pub.com/&#xff09;RFC文檔中文翻譯計劃&#xff08;http://www.china-pub.com/compters/emo…

pycharm python 模板配置_windows下pycharm安裝、創建文件、配置默認模板

本文為大家分享了windows下pycharm安裝、創建文件、配置默認模板的具體步驟&#xff0c;供大家參考&#xff0c;具體內容如下步驟&#xff1a;下包 —->安裝——>創建文件—->定制模板一、下包官方地址這里有企業版和社區版&#xff0c;老司機都知道社區版是免費的&am…

JavaWeb筆記02-Tomcat

今日內容 web相關概念回顧web服務器軟件:TomcatServlet入門學習 web相關概念回顧 軟件架構 C/S: 客戶端/服務器端B/S: 瀏覽器/服務器端 資源分類 靜態資源: 所有用戶訪問后,得到的結果都是一樣的,成為靜態資源,靜態資源可以直接被瀏覽器解析 如:html, css ,JavaScript 動態資…

網上的畫板代碼收集和整理

修改后的代碼[1]為&#xff0c;少了一個} package com.example.administrator.myapplication;import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.graphics.Canvas; import an…

如何寫年終總結(轉)

很多人不重視年終總結&#xff0c;覺得是一個非常令人厭煩的任務&#xff0c;往往是應付了事&#xff0c;短短幾百字&#xff0c;對目前工作中存在的問題發現不夠&#xff0c;思考不足&#xff0c;對自己一年的評價和未來一年的定位沒有說明。造成的后果就是公司得不到來自基層…