RTP協議棧簡介

?

?

流媒體指的是在網絡中使用流技術傳輸的連續時基媒體,其特點是在播放前不需要下載整個文件,而是采用邊下載邊播放的方式,它是視頻會議、IP電話等應用場合的技術基礎。RTP是進行實時流媒體傳輸的標準協議和關鍵技術,本文介紹如何在Linux下利用JRTPLIB進行實時流媒體編程。?

??

一、流媒體簡介
????????隨著Internet的日益普及,在網絡上傳輸的數據已經不再局限于文字和圖形,而是逐漸向聲音和視頻等多媒體格式過渡。目前在網絡上傳輸音頻/視頻(Audio/Video,簡稱A/V)等多媒體文件時,基本上只有下載和流式傳輸兩種選擇。通常說來,A/V文件占據的存儲空間都比較大,在帶寬受限的網絡環境中下載可能要耗費數分鐘甚至數小時,所以這種處理方法的延遲很大。如果換用流式傳輸的話,聲音、影像、動畫等多媒體文件將由專門的流媒體服務器負責向用戶連續、實時地發送,這樣用戶可以不必等到整個文件全部下載完畢,而只需要經過幾秒鐘的啟動延時就可以了,當這些多媒體數據在客戶機上播放時,文件的剩余部分將繼續從流媒體服務器下載。

?

????????流(Streaming)是近年在Internet上出現的新概念,其定義非常廣泛,主要是指通過網絡傳輸多媒體數據的技術總稱。流媒體包含廣義和狹義兩種內涵:廣義上的流媒體指的是使音頻和視頻形成穩定和連續的傳輸流和回放流的一系列技術、方法和協議的總稱,即流媒體技術;狹義上的流媒體是相對于傳統的下載-回放方式而言的,指的是一種從Internet上獲取音頻和視頻等多媒體數據的新方法,它能夠支持多媒體數據流的實時傳輸和實時播放。通過運用流媒體技術,服務器能夠向客戶機發送穩定和連續的多媒體數據流,客戶機在接收數據的同時以一個穩定的速率回放,而不用等數據全部下載完之后再進行回放。

?

由于受網絡帶寬、計算機處理能力和協議規范等方面的限制,要想從Internet上下載大量的音頻和視頻數據,無論從下載時間和存儲空間上來講都是不太現實的,而流媒體技術的出現則很好地解決了這一難題。目前實現流媒體傳輸主要有兩種方法:順序流(progressive?streaming)傳輸和實時流(realtime?streaming)傳輸,它們分別適合于不同的應用場合。

?

順序流傳輸

?

????????順序流傳輸采用順序下載的方式進行傳輸,在下載的同時用戶可以在線回放多媒體數據,但給定時刻只能觀看已經下載的部分,不能跳到尚未下載的部分,也不能在傳輸期間根據網絡狀況對下載速度進行調整。由于標準的HTTP服務器就可以發送這種形式的流媒體,而不需要其他特殊協議的支持,因此也常常被稱作HTTP?流式傳輸。順序流式傳輸比較適合于高質量的多媒體片段,如片頭、片尾或者廣告等。

?

實時流傳輸

?

????????實時流式傳輸保證媒體信號帶寬能夠與當前網絡狀況相匹配,從而使得流媒體數據總是被實時地傳送,因此特別適合于現場事件。實時流傳輸支持隨機訪問,即用戶可以通過快進或者后退操作來觀看前面或者后面的內容。從理論上講,實時流媒體一經播放就不會停頓,但事實上仍有可能發生周期性的暫停現象,尤其是在網絡狀況惡化時更是如此。與順序流傳輸不同的是,實時流傳輸需要用到特定的流媒體服務器,而且還需要特定網絡協議的支持。

?

二、流媒體協議
實時傳輸協議(Real-time?Transport?Protocol,PRT)是在Internet上處理多媒體數據流的一種網絡協議,利用它能夠在一對一(unicast,單播)或者一對多(multicast,多播)的網絡環境中實現傳流媒體數據的實時傳輸。RTP通常使用UDP來進行多媒體數據的傳輸,但如果需要的話可以使用TCP或者?ATM等其它協議,整個RTP協議由兩個密切相關的部分組成:RTP數據協議和RTP控制協議。實時流協議(Real?Time?Streaming?Protocol,RTSP)最早由Real?Networks和Netscape公司共同提出,它位于RTP和RTCP之上,其目的是希望通過IP網絡有效地傳輸多媒體數據。

?

2.1?RTP數據協議

?

RTP數據協議負責對流媒體數據進行封包并實現媒體流的實時傳輸,每一個RTP數據報都由頭部(Header)和負載(Payload)兩個部分組成,其中頭部前12個字節的含義是固定的,而負載則可以是音頻或者視頻數據。RTP數據報的頭部格式如圖1所示:

?

?
圖1?RTP頭部格式

?

其中比較重要的幾個域及其意義如下:?

?

  • CSRC記數(CC)  表示CSRC標識的數目。CSRC標識緊跟在RTP固定頭部之后,用來表示RTP數據報的來源,RTP協議允許在同一個會話中存在多個數據源,它們可以通過RTP混合器合并為一個數據源。例如,可以產生一個CSRC列表來表示一個電話會議,該會議通過一個?RTP混合器將所有講話者的語音數據組合為一個RTP數據源。?
  • 負載類型(PT)  標明RTP負載的格式,包括所采用的編碼算法、采樣頻率、承載通道等。例如,類型2表明該RTP數據包中承載的是用ITU?G.721算法編碼的語音數據,采樣頻率為8000Hz,并且采用單聲道。?
  • 序列號  用來為接收方提供探測數據丟失的方法,但如何處理丟失的數據則是應用程序自己的事情,RTP協議本身并不負責數據的重傳。?
  • 時間戳  記錄了負載中第一個字節的采樣時間,接收方能夠時間戳能夠確定數據的到達是否受到了延遲抖動的影響,但具體如何來補償延遲抖動則是應用程序自己的事情。?

從RTP?數據報的格式不難看出,它包含了傳輸媒體的類型、格式、序列號、時間戳以及是否有附加數據等信息,這些都為實時的流媒體傳輸提供了相應的基礎。RTP協議的目的是提供實時數據(如交互式的音頻和視頻)的端到端傳輸服務,因此在RTP中沒有連接的概念,它可以建立在底層的面向連接或面向非連接的傳輸協議之上;RTP也不依賴于特別的網絡地址格式,而僅僅只需要底層傳輸協議支持組幀(Framing)和分段(Segmentation)就足夠了;另外RTP?本身還不提供任何可靠性機制,這些都要由傳輸協議或者應用程序自己來保證。在典型的應用場合下,RTP?一般是在傳輸協議之上作為應用程序的一部分加以實現的,如圖2所示:

?


圖2?RTP與各種網絡協議的關系

?

2.2?RTCP控制協議

?

RTCP?控制協議需要與RTP數據協議一起配合使用,當應用程序啟動一個RTP會話時將同時占用兩個端口,分別供RTP?和RTCP使用。RTP本身并不能為按序傳輸數據包提供可靠的保證,也不提供流量控制和擁塞控制,這些都由RTCP來負責完成。通常RTCP會采用與?RTP相同的分發機制,向會話中的所有成員周期性地發送控制信息,應用程序通過接收這些數據,從中獲取會話參與者的相關資料,以及網絡狀況、分組丟失概率等反饋信息,從而能夠對服務質量進行控制或者對網絡狀況進行診斷。

?

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

?

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

RTCP數據報攜帶有服務質量監控的必要信息,能夠對服務質量進行動態的調整,并能夠對網絡擁塞進行有效的控制。由于RTCP數據報采用的是多播方式,因此會話中的所有成員都可以通過RTCP數據報返回的控制信息,來了解其他參與者的當前情況。

?

在一個典型的應用場合下,發送媒體流的應用程序將周期性地產生發送端報告SR,該RTCP數據報含有不同媒體流間的同步信息,以及已經發送的數據報和字節的計數,接收端根據這些信息可以估計出實際的數據傳輸速率。另一方面,接收端會向所有已知的發送端發送接收端報告RR,該RTCP數據報含有已接收數據報的最大序列號、丟失的數據報數目、延時抖動和時間戳等重要信息,發送端應用根據這些信息可以估計出往返時延,并且可以根據數據報丟失概率和時延抖動情況動態調整發送速率,以改善網絡擁塞狀況,或者根據網絡狀況平滑地調整應用程序的服務質量。

?

2.3?RTSP實時流協議

?

作為一個應用層協議,RTSP提供了一個可供擴展的框架,它的意義在于使得實時流媒體數據的受控和點播變得可能。總的說來,RTSP是一個流媒體表示協議,主要用來控制具有實時特性的數據發送,但它本身并不傳輸數據,而是必須依賴于下層傳輸協議所提供的某些服務。RTSP?可以對流媒體提供諸如播放、暫停、快進等操作,它負責定義具體的控制消息、操作方法、狀態碼等,此外還描述了與RTP間的交互操作。

?

RTSP?在制定時較多地參考了HTTP/1.1協議,甚至許多描述與HTTP/1.1完全相同。RTSP之所以特意使用與HTTP/1.1類似的語法和操作,在很大程度上是為了兼容現有的Web基礎結構,正因如此,HTTP/1.1的擴展機制大都可以直接引入到RTSP?中。

?

由RTSP?控制的媒體流集合可以用表示描述(Presentation?Description)來定義,所謂表示是指流媒體服務器提供給客戶機的一個或者多個媒體流的集合,而表示描述則包含了一個表示中各個媒體流的相關信息,如數據編碼/解碼算法、網絡地址、媒體流的內容等。

?

雖然RTSP服務器同樣也使用標識符來區別每一流連接會話(Session),但RTSP連接并沒有被綁定到傳輸層連接(如TCP等),也就是說在整個?RTSP連接期間,RTSP用戶可打開或者關閉多個對RTSP服務器的可靠傳輸連接以發出RTSP?請求。此外,RTSP連接也可以基于面向無連接的傳輸協議(如UDP等)。

?

RTSP協議目前支持以下操作:?

?

  • 檢索媒體  允許用戶通過HTTP或者其它方法向媒體服務器提交一個表示描述。如表示是組播的,則表示描述就包含用于該媒體流的組播地址和端口號;如果表示是單播的,為了安全在表示描述中應該只提供目的地址。?
  • 邀請加入  媒體服務器可以被邀請參加正在進行的會議,或者在表示中回放媒體,或者在表示中錄制全部媒體或其子集,非常適合于分布式教學。?
  • 添加媒體  通知用戶新加入的可利用媒體流,這對現場講座來講顯得尤其有用。與HTTP/1.1類似,RTSP請求也可以交由代理、通道或者緩存來進行處理。?

三、流媒體編程?
RTP?是目前解決流媒體實時傳輸問題的最好辦法,如果需要在Linux平臺上進行實時流媒體編程,可以考慮使用一些開放源代碼的RTP庫,如LIBRTP、?JRTPLIB等。JRTPLIB是一個面向對象的RTP庫,它完全遵循RFC?1889設計,在很多場合下是一個非常不錯的選擇,下面就以JRTPLIB為例,講述如何在Linux平臺上運用RTP協議進行實時流媒體編程。

?

3.1?環境搭建

?

JRTPLIB?是一個用C++語言實現的RTP庫,目前已經可以運行在Windows、Linux、FreeBSD、?Solaris、Unix和VxWorks等多種操作系統上。要為Linux?系統安裝JRTPLIB,首先從JRTPLIB的網站(http:?//lumumba.luc.ac.be/jori/jrtplib/jrtplib.html)下載最新的源碼包,此處使用的是jrtplib-?2.7b.tar.bz2。假設下載后的源碼包保存在/usr/local/src目錄下,執行下面的命令可以對其進行解壓縮:

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

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

相關文章

深入理解Solidity

Solidity源文件布局 pragma(版本雜注) 用于指定源文件的版本,表明編譯器的版本,例如 pragma solidity ^0.4.0^用于指代版本號需要大于0.4.0但是不可以超過大的層級,必須小于0.5.0也可以使用大于等于小于來指定版本 i…

H264 流媒體 編碼匯總

實時傳輸協議(RTP)和實時控制協議(RTCP) RTP是一種提供端對端傳輸服務的實時傳輸協議,用來支持在單目標廣播和多目標廣播網絡服務中傳輸實時數據,而實時數據的傳輸則由RTCP協議來監視和控制。 RTP定義在RFC…

使用多線程的方式調用chineseocr_API

ChineseOCR在線API 網頁鏈接 界面 提供多種接口調用方式,比如在線調用、Javascript api調用、curl api調用和python api調用四種方式,本次使用javascript api調用的方式進行OCR識別代碼 import glob import base64 import os import requests import …

開源好代碼 音視頻

VirtualDub 一、簡介 圖1VirtualDub主界面 VirtualDub是一款開源的音視頻捕獲、處理軟件。VirtualDub也可稱為一款多媒體編輯軟件,因為它包含了多媒體輸入、編輯、處理、輸出等各個環節,但是作者并未將它定位為一款多媒體編輯軟件(參見官網&a…

MAC對于Excel表格換行操作

按住option之后,點擊Enter就可以完成換行操作

深入理解Solidity 二

Solidity數據位置 所有復雜的數據類型,即數組、結構和映射類型,都會有一個額外屬性“數據位置”,用來指定數據的存儲位置,即數據是存儲在memory還是存儲在storage里面根據上下文環境,IDE會自動指定數據的默認存儲位置…

VOIP簡介

一、什么是VOIP VOIP全稱為(VoiceOver Internet Protocol),是一種利用Internet網絡進行語音通信的技術,更通俗一點說,就是IP電話。就是以IP分組交換網為傳輸平臺,對模擬的語音信號進行編碼壓縮&#xff0c…

深入理解Solidity 三

Solidity函數聲明和類型 函數的值類型有兩類:內部(internal)類型和外部(external)類型內部函數只可以在當前合約內部被調用(即在當前代碼塊內,包括內部庫函數和繼承函數)&#xff0c…

HTTP狀態代碼及其定義

狀態行包含HTTP版本、狀態代碼、與狀態代碼對應的簡短說明信息。在大多數情況下,除了Content-Type之外的所有應答頭都是可選的。但Content-Type是必需的,它描述的是后面文檔的MIME類型。雖然大多數應答都包含一個文檔,但也有一些不包含&#…

安裝solc模塊4.25版本

使用國產阿里云的cnpm 如果不知道cnpm 參考鏈接 安裝solc模塊4.25版本 npm i solc0.4.25 --save -g查看安裝是否成功 可以配置軟連接使用solc,我的沒有配置 solcjs --version

conda關鍵命令

創建環境 創建名字為python3的虛擬環境,并且指定conda的python版本為3.6--name也可以縮寫為-namepython3.6 是指定python的版本號,如果不指定就默認為裝anaconda時python版本python3是創建的新的虛擬環境的名字,創建完,虛擬環境安裝在anacon…

GDB 調試程序 詳解 使用實例

用GDB調試程序 GDB概述 ———— GDB是GNU開源組織發布的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但如果你是在UNIX平臺下做軟件,你會發現GDB這個調試工具有比VC、BCB的圖形化…

在pycharm中使用conda虛擬環境(conda虛擬環境是已經創建好的),解決python安裝包文件很費勁的問題

查看conda的虛擬環境 使用PyCharm連接conda創建的虛擬環境,需要一個前提就是虛擬環境必須存在,使用conda env list命令查看虛擬環境列表打開PyCharm軟件 打開pycharm,選擇File->setting->Project:****->Project Interperter&#…

YUV測試序列下載地址

1、http://www.tkn.tu-berlin.de/research/vid/(此網站已經移走,正在尋找。) CIF: Akiyo、Bridge (far) 、Bridge (close) 、Bus 、Container 、Coastguard 、Flower 、Football 、Foreman 、Hall 、Highway 、Mobile & Calen…

flask 安裝flask_resultful

命令如下 conda install -c https://conda.anaconda.org/conda-forge flask-restful

完成一個H.265/HEVC碼流分析工具

經過大約一個月左右的業余時間,終于初步完成一個H.265/HEVC碼流分析工具。時間包括平時的周末、晚上,以及調休的集中時間。當然,中秋回家過節不寫代碼。截至今天,經過多種H.265序列測試,也有各種工具對比,基…

Linux中創建用戶并且配置sudo權限,百分百簡單有效

配置步驟如下: 登陸或切換到root用戶下;因為只有root用戶才具有權限進行用戶的添加,使用命令sudo su,切換為管理員用戶添加用戶 adduser -m youuser,并且在home路徑下創建同名的用戶文件夾passwd youuser,…

Java 計算兩個日期之間的相差天數

代碼如下 package com.data.dp;import org.apache.commons.lang3.StringUtils;import java.text.ParseException; import java.text.SimpleDateFormat;public class testDate {public static void main(String[] args) throws ParseException {SimpleDateFormat df new Simpl…

【HEVC】目前H265分析軟件推薦

2014-11-14liuwri本帖最后由 zxdaemon 于 2012-12-25 04:06 PM 編輯 1,Codecvisa: http://codecian.com/國產軟件,從最早的H264visa發展至今,感覺從剛開始的玩票,發展到今天專業級別的商業軟件,值得支持。軟…

將IPFS 配置服務器,電腦連接遠程服務器,環境配置

先前安裝配置的步驟省略,僅僅涉及后期的環境修改步驟 1,找到配置文件config,現需要使用命令ipfs init,從而生成.ipfs文件 ipfs init cd ~/.ipfs2,使用命令ls查看當前文件夾下面所包含的文件,正常情況小會…