RTP概述

1.1.??RTP是什么

RTP全名是Real-time Transport Protocol(實時傳輸協議)。它是IETF提出的一個標準,對應的RFC文檔為RFC3550(RFC1889為其過期版本)。RFC3550不僅定義了RTP,而且定義了配套的相關協議RTCP(Real-time Transport ControlProtocol,即實時傳輸控制協議)。RTP用來為IP網上的語音、圖像、傳真等多種需要實時傳輸的多媒體數據提供端到端的實時傳輸服務。RTP為Internet上端到端的實時傳輸提供時間信息和流同步,但并不保證服務質量,服務質量由RTCP來提供。

1.2.??RTP的應用環境

RTP用于在單播或多播網絡中傳送實時數據。它們典型的應用場合有如下幾個。

簡單的多播音頻會議。語音通信通過一個多播地址和一對端口來實現。一個用于音頻數據(RTP),另一個用于控制包(RTCP)。

音頻和視頻會議。如果在一次會議中同時使用了音頻和視頻會議,這兩種媒體將分別在不同的RTP會話中傳送,每一個會話使用不同的傳輸地址(IP地址+端口)。如果一個用戶同時使用了兩個會話,則每個會話對應的RTCP包都使用規范化名字CNAME(CanonicalName)。與會者可以根據RTCP包中的CNAME來獲取相關聯的音頻和視頻,然后根據RTCP包中的計時信息(Network timeprotocol)來實現音頻和視頻的同步。

翻譯器和混合器。翻譯器和混合器都是RTP級的中繼系統。翻譯器用在通過IP多播不能直接到達的用戶區,例如發送者和接收者之間存在防火墻。當與會者能接收的音頻編碼格式不一樣,比如有一個與會者通過一條低速鏈路接入到高速會議,這時就要使用混合器。在進入音頻數據格式需要變化的網絡前,混合器將來自一個源或多個源的音頻包進行重構,并把重構后的多個音頻合并,采用另一種音頻編碼進行編碼后,再轉發這個新的RTP包。從一個混合器出來的所有數據包要用混合器作為它們的同步源(SSRC,見RTP的封裝)來識別,可以通過貢獻源列表(CSRC表,見RTP的封裝)可以確認談話者。

1.3.??相關概念

1.3.1.??流媒體

流媒體是指Internet上使用流式傳輸技術的連續時基媒體。當前在Internet上傳輸音頻和視頻等信息主要有兩種方式:下載和流式傳輸兩種方式。

下載情況下,用戶需要先下載整個媒體文件到本地,然后才能播放媒體文件。在視頻直播等應用場合,由于生成整個媒體文件要等直播結束,也就是用戶至少要在直播結束后才能看到直播節目,所以用下載方式不能實現直播。

流式傳輸是實現流媒體的關鍵技術。使用流式傳輸可以邊下載邊觀看流媒體節目。由于Internet是基于分組傳輸的,所以接收端收到的數據包往往有延遲和亂序(流式傳輸構建在UDP上)。要實現流式傳輸,就是要從降低延遲和恢復數據包時序入手。在發送端,為降低延遲,往往對傳輸數據進行預處理(降低質量和高效壓縮)。在接收端為了恢復時序,采用了接收緩沖;而為了實現媒體的流暢播放,則采用了播放緩沖。

使用接收緩沖,可以將接收到的數據包緩存起來,然后根據數據包的封裝信息(如包序號和時戳等),將亂序的包重新排序,最后將重新排序了的數據包放入播放緩沖播放。

為什么需要播放緩沖呢?容易想到,由于網絡不可能很理想,并且對數據包排序需要處理時耗,我們得到排序好的數據包的時間間隔是不等的。如果不用播放緩沖,那么播放節目會很卡,這叫時延抖動。相反,使用播放緩沖,在開始播放時,花費幾十秒鐘先將播放緩沖填滿(例如PPLIVE),可以有效地消除時延抖動,從而在不太損失實時性的前提下實現流媒體的順暢播放。

到目前為止,Internet?上使用較多的流式視頻格式主要有以下三種:RealNetworks?公司的RealMedia,Apple?公司的QuickTime?以及Microsoft?公司的AdvancedStreaming Format (ASF)?

上面在談接收緩沖時,說到了流媒體數據包的封裝信息(包序號和時戳等),這在后面的RTP封裝中會有體現。另外,RealMedia這些流式媒體格式只是編解碼有不同,但對于RTP來說,它們都是待封裝傳輸的流媒體數據而沒有什么不同。

第2章.?????RTP詳解

2.1.??RTP的協議層次

2.1.1.??傳輸層的子層

RTP(實時傳輸協議),顧名思義它是用來提供實時傳輸的,因而可以看成是傳輸層的一個子層。圖?1給出了流媒體應用中的一個典型的協議體系結構。

圖?1?流媒體體系結構

從圖中可以看出,RTP被劃分在傳輸層,它建立在UDP上。同UDP協議一樣,為了實現其實時傳輸功能,RTP也有固定的封裝形式。RTP用來為端到端的實時傳輸提供時間信息和流同步,但并不保證服務質量。服務質量由RTCP來提供。這些特點,在第4章可以看到。

2.1.2.??應用層的一部分

不少人也把RTP歸為應用層的一部分,這是從應用開發者的角度來說的。操作系統中的TCP/IP等協議棧所提供的是我們最常用的服務,而RTP的實現還是要靠開發者自己。因此從開發的角度來說,RTP的實現和應用層協議的實現沒不同,所以可將RTP看成應用層協議。

RTP實現者在發送RTP數據時,需先將數據封裝成RTP包,而在接收到RTP數據包,需要將數據從RTP包中提取出來。

2.2.??RTP的封裝

一個協議的封裝是為了滿足協議的功能需求的。從前面提出的功能需求,可以推測出RTP封裝中應該有同步源和時戳等字段,但更為完整的封裝是什么樣子呢?請看圖2。

圖?2?RTP的頭部格式

版本號(V):2比特,用來標志使用的RTP版本。

填充位(P):1比特,如果該位置位,則該RTP包的尾部就包含附加的填充字節。

擴展位(X):1比特,如果該位置位的話,RTP固定頭部后面就跟有一個擴展頭部。

CSRC計數器(CC):4比特,含有固定頭部后面跟著的CSRC的數目。

標記位(M):1比特,該位的解釋由配置文檔(Profile)來承擔.

載荷類型(PT):7比特,標識了RTP載荷的類型。

序列號(SN):16比特,發送方在每發送完一個RTP包后就將該域的值增加1,接收方可以由該域檢測包的丟失及恢復包序列。序列號的初始值是隨機的。

時間戳:32比特,記錄了該包中數據的第一個字節的采樣時刻。在一次會話開始時,時間戳初始化成一個初始值。即使在沒有信號發送時,時間戳的數值也要隨時間而不斷地增加(時間在流逝嘛)。時間戳是去除抖動和實現同步不可缺少的。

同步源標識符(SSRC):32比特,同步源就是指RTP包流的來源。在同一個RTP會話中不能有兩個相同的SSRC值。該標識符是隨機選取的?RFC1889推薦了MD5隨機算法。

貢獻源列表(CSRCList):0~15項,每項32比特,用來標志對一個RTP混合器產生的新包有貢獻的所有RTP包的源。由混合器將這些有貢獻的SSRC標識符插入表中。SSRC標識符都被列出來,以便接收端能正確指出交談雙方的身份。

2.3.??RTCP的封裝

RTP需要RTCP為其服務質量提供保證,因此下面介紹一下RTCP的相關知識。

RTCP的主要功能是:服務質量的監視與反饋、媒體間的同步,以及多播組中成員的標識。在RTP會話期?間,各參與者周期性地傳送RTCP包。RTCP包中含有已發送的數據包的數量、丟失的數據包的數量等統計資料,因此,各參與者可以利用這些信息動態地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,它們能以有效的反饋和最小的開銷使傳輸效率最佳化,因而特別適合傳送網上的實時數據。

從圖?1可以看到,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(SenderReport)用來使發送端以多播方式向所有接收端報告發送情況。SR分組的主要內容有:相應的RTP流的SSRC,RTP流中最新產生的RTP分組的時間戳和NTP,RTP流包含的分組數,RTP流包含的字節數。SR包的封裝如圖3所示。

圖?3?RTCP頭部的格式

版本(V):同RTP包頭域。

填充(P):同RTP包頭域。

接收報告計數器(RC):5比特,該SR包中的接收報告塊的數目,可以為零。

包類型(PT):8比特,SR包是200。

長度域(Length):16比特,其中存放的是該SR包以32比特為單位的總長度減一。

同步源(SSRC):SR包發送者的同步源標識符。與對應RTP包中的SSRC一樣。

NTP Timestamp(Network timeprotocol)SR包發送時的絕對時間值。NTP的作用是同步不同的RTP媒體流。

RTP Timestamp:與NTP時間戳對應,與RTP數據包中的RTP時間戳具有相同的單位和隨機初始值。

Sender’s packet count:從開始發送包到產生這個SR包這段時間里,發送者發送的RTP數據包的總數.SSRC改變時,這個域清零。

Sender`s octetcount:從開始發送包到產生這個SR包這段時間里,發送者發送的凈荷數據的總字節數(不包括頭部和填充)。發送者改變其SSRC時,這個域要清零。

同步源n的SSRC標識符:該報告塊中包含的是從該源接收到的包的統計信息。

丟失率(FractionLost):表明從上一個SR或RR包發出以來從同步源n(SSRC_n)來的RTP數據包的丟失率。

累計的包丟失數目:從開始接收到SSRC_n的包到發送SR,從SSRC_n傳過來的RTP數據包的丟失總數。

收到的擴展最大序列號:從SSRC_n收到的RTP數據包中最大的序列號,

接收抖動(Interarrival jitter):RTP數據包接受時間的統計方差估計

上次SR時間戳(LastSR,LSR):取最近從SSRC_n收到的SR包中的NTP時間戳的中間32比特。如果目前還沒收到SR包,則該域清零。

上次SR以來的延時(Delay since last SR,DLSR):上次從SSRC_n收到SR包到發送本報告的延時。

2.4.??RTP的會話過程

當應用程序建立一個RTP會話時,應用程序將確定一對目的傳輸地址。目的傳輸地址由一個網絡地址和一對端口組成,有兩個端口:一個給RTP包,一個給RTCP包,使得RTP/RTCP數據能夠正確發送。RTP數據發向偶數的UDP端口,而對應的控制信號RTCP數據發向相鄰的奇數UDP端口(偶數的UDP端口+1),這樣就構成一個UDP端口對。?RTP的發送過程如下,接收過程則相反。

1)????????RTP協議從上層接收流媒體信息碼流(如H.263),封裝成RTP數據包;RTCP從上層接收控制信息,封裝成RTCP控制包。

2)????????RTP將RTP?數據包發往UDP端口對中偶數端口;RTCP將RTCP控制包發往UDP端口對中的接收端口。

第3章.?????相關的協議

3.1.??實時流協議RTSP

實時流協議RTSP(Real-Time StreamingProtocol)是IETF提出的協議,對應的RFC文檔為RFC2362。

從圖?1可以看出,RTSP是一個應用層協議(TCP/IP網絡體系中)。它以C/S模式工作,它是一個多媒體播放控制協議,主要用來使用戶在播放流媒體時可以像操作本地的影碟機一樣進行控制,即可以對流媒體進行暫停/繼續、后退和前進等控制。

3.2.??資源預定協議RSVP

資源預定協議RSVP(Resource ReservationProtocol)是IETF提出的協議,對應的RFC文檔為RFC2208。

從圖?1可以看出,RSVP工作在IP層之上傳輸層之下,是一個網絡控制協議。RSVP通過在路由器上預留一定的帶寬,能在一定程度上為流媒體的傳輸提供服務質量。在某些試驗性的系統如網絡視頻會議工具vic中就集成了RSVP。

第4章.?????常見的疑問

4.1.??怎樣重組亂序的數據包

可以根據RTP包的序列號來排序。

4.2.??怎樣獲得數據包的時序

可以根據RTP包的時間戳來獲得數據包的時序。

4.3.??聲音和圖像怎么同步

根據聲音流和圖像流的相對時間(即RTP包的時間戳),以及它們的絕對時間(即對應的RTCP包中的RTCP),可以實現聲音和圖像的同步。

4.4.??接收緩沖和播放緩沖的作用

如1.3.1所述,接收緩沖用來排序亂序了的數據包;播放緩沖用來消除播放的抖動,實現等時播放。

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

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

相關文章

Java需要注意的一些小細節

更加精確的鎖定時間 判定納秒維度的時間 //使用System.nanoTime(); //例子 long start System.nanoTime(); long end System.nanoTime(); System.out.println(start); System.out.println(end);

live555的安裝 RTSP點播消息流程實例(客戶端:VLC, RTSP服務器:LIVE555 Media Server)

live555是一個開源的軟件,主要用來生成rtsp,rtp和sip服務器和客戶端的軟件。前幾天需要看一下vlc中的rtsp的功能,在vlc中rtp和rtsp的功能都是使用live555中的函數來生成的。該開源軟件的編譯,可以使用vc,mingw和cygwin等軟件。我安裝的時候使…

算法入門篇五 鏈表

牛客網 算法入門篇 判斷一個鏈表是否為回文結構 給定一個單鏈表的頭節點head,請判斷這個鏈表是否為回文結構1->2->1,返回為True;1->2->3為False 思路: 1,遍歷鏈表,將所有元素壓入棧中,然后再…

實時流媒體編程基于Linux環境開發

一、流媒體簡介 隨著Internet的日益普及,在網絡上傳輸的數據已經不再局限于文字和圖形,而是逐漸向聲音和視頻等多媒體格式過渡。目前在網絡上傳輸音頻/視頻(Audio/Video,簡稱A/V)等多媒體文件時,基本上只有…

算法入門篇六 二叉樹

牛客網 算法入門篇 左程云老師 個人復習,如果侵全,設為私密 二叉樹遍歷(遞歸) 先序遍歷(中,左,右) 中序遍歷(左,中,右) 后序遍歷&a…

VLC詳細的使用說明以及配置說明綜合示范實例精通VLC開發

vlc的全名是Video LanClient,是一個開源的、跨平臺的視頻播放器。VLC支持大量的音視頻傳輸、封裝和編碼格式,完整的功能特性列表可以在這里獲得http://www.videolan.org/vlc/features.html,下面給出一個簡要的不完整的列表:操作系…

算法入門篇七 前綴樹

牛客網 左程云老師的算法入門課 找二叉樹的節點的后繼節點 原則 如果節點有右子樹,那么后繼節點就是右子樹的最左邊的第一個節點如果節點沒有右子樹,如果節點是父節點的右孩子,就繼續往上找,直到找到一個父節點是沿途節點的父節…

VLC視頻播放器原理詳細分析含TS流格式分析

vlc是一個功能強大的玩意,能做很多有意思的事情。最簡單的,從界面打開一個文件播放,也可以在命令行下使用,如C:\Program Files\VideoLAN\VLC>vlc.exe test.ts獲取內置的幫助,會寫到vlc-help.txtC:\Program Files\Vi…

算法入門篇八 貪心算法

牛客網 左程云老師的算法入門課 貪心算法 貪心算法的解題步驟 例子 題目要求 解題策略 按照結束時間早的會議先安排,比如先安排【2,4】,當4結束了,所有開始時間小于4的全部淘汰,【1,7】、【3&#xff…

算法入門篇九 暴力遞歸

牛客網 左程云老師的算法入門課 暴力遞歸 原則 漢諾塔問題 問題 打印n層漢諾塔從左邊移動到最右邊的過程 思想 一共六個過程,左到右、左到中,中到左,中到右,右到左,右到中,互相嵌套使用 左到右 將1…

rtsp和sdp

RTSP 是由Realnetwork 和Netscape共同提出的如何有效地在IP網絡上傳輸流媒體數據的應用層協議 。 實時流協議(RTSP)建立并控制一個或幾個時間同步的連續流媒體,如音頻和視頻。盡管連續媒體流與控制流交叉是可能的,RTSP本身并不發…

使用javascript實現對于chineseocr的API調用

ChineseOCR在線API 網頁地址 界面 提供多種接口調用方式,比如在線調用、Javascript api調用、curl api調用和python api調用四種方式,本次使用javascript api調用的方式進行OCR識別在線Javascript工具 在線工具網頁鏈接在線Base64 轉化工具 在線工具…

移動流媒體業務的技術與標準

1 引言   流媒體業務是從Internet上發展起來的一種多媒體應用,指使用流(Streaming)方式在網絡上傳輸的多媒體文件,包括音頻、視頻和動畫等。   流媒體傳輸技術的主要特點是以流(streaming)的形式進行多…

使用python實現對于chineseocr的API調用

ChineseOCR在線API 網頁鏈接 界面 提供多種接口調用方式,比如在線調用、Javascript api調用、curl api調用和python api調用四種方式,本次使用javascript api調用的方式進行OCR識別在線Base64 轉化工具 Base64在線小工具代碼修改 新增一個變量fill_w…

UDP穿透NAT

NAT(Network AddressTranslators),網絡地址轉換: 網絡地址轉換是在IP地址日益缺乏的情況下產生的,它的主要目的就是為了能夠地址重用。NAT分為兩大類,基本的NAT和NAPT(Network Address/Port Translator)。 最開始NAT是運行在路由器…

算法入門篇十 圖

圖的存儲方式 臨接表臨接矩陣 表達 點集/邊集有向圖/無向圖 Graph&#xff08;大結構就是圖&#xff09;&#xff08;包含點集合和邊集合&#xff09; import java.util.HashMap; import java.util.HashSet;public class Graph {public HashMap<Integer, Node> nodes;…

SDP協議 學習筆記

SDP:Session Description ProtocolSDP格式:Session descriptionv (protocolversion)o (owner/creatorand session identifier)s (sessionname)i* (sessioninformation)u* (URI ofdescription)e* (emailaddress)p* (phonenumber)c*(connection information - not required if in…

以太坊私有鏈 使用dev模式

dev 使用dev模式&#xff0c;創建一個管理員賬號&#xff0c;控制挖礦&#xff0c;將證明機制改為POA啟動dev模式&#xff0c;需要重新創建一個文件夾&#xff0c;重新搭建私有鏈條 命令 mkdir myDevChain cd myDevChain geth --datadir . --dev console 2>output.log 實…

超文本傳輸協議

超文本傳輸協議 超文本傳輸協議超文件傳輸協定(HTTP&#xff0c;HyperTextTransfer Protocol)是因特網上應用最為廣泛的一種網絡傳輸協定。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。 目錄 介紹請求信息請求方法安全方法超…

以太坊區塊鏈 JSON-RPC

RPC定義 以太坊客戶端提供了API和一組遠程調用的&#xff08;RPC&#xff09;命令&#xff0c;這些命令被編碼成json的格式&#xff0c;被叫做JSON-RPC-API。本質上&#xff0c;JSON-RPC API就是一個接口&#xff0c;允許我們編寫的程序使用以太坊客戶端作為網關&#xff0c;訪…