流媒體指的是在網(wǎng)絡中使用流技術(shù)傳輸?shù)倪B續(xù)時基媒體,其特點是在播放前不需要下載整個文件,而 是采用邊下載邊播放的方式,它是視頻會議、IP電話等應用場合的技術(shù)基礎。RTP是進行實時流媒體傳輸 的標準協(xié)議和關(guān)鍵技術(shù),本文介紹如何在Linux下利用JRTPLIB進行實時流媒體編程。
一、流媒體簡介
隨著Internet的日益普及,在網(wǎng)絡上傳輸?shù)臄?shù)據(jù)已經(jīng)不再局限于文字和圖形,而是逐漸向聲音和視頻等多
媒體格式過渡。目前在網(wǎng)絡上傳輸音頻/視頻(Audio/Video,簡稱A/V)等多媒體文件時,基本上只有下
載和流式傳輸兩種選擇。通常說來,A/V文件占據(jù)的存儲空間都比較大,在帶寬受限的網(wǎng)絡環(huán)境中下載可
能要耗費數(shù)分鐘甚至數(shù)小時,所以這種處理方法的延遲很大。如果換用流式傳輸?shù)脑挘曇簟⒂跋瘛赢?
等多媒體文件將由專門的流媒體服務器負責向用戶連續(xù)、實時地發(fā)送,這樣用戶可以不必等到整個文件全
部下載完畢,而只需要經(jīng)過幾秒鐘的啟動延時就可以了,當這些多媒體數(shù)據(jù)在客戶機上播放時,文件的剩
余部分將繼續(xù)從流媒體服務器下載。
流(Streaming)是近年在Internet上出現(xiàn)的新概念,其定義非常廣泛,主要是指通過網(wǎng)絡傳輸多媒體數(shù)
據(jù)的技術(shù)總稱。流媒體包含廣義和狹義兩種內(nèi)涵:廣義上的流媒體指的是使音頻和視頻形成穩(wěn)定和連續(xù)的
傳輸流和回放流的一系列技術(shù)、方法和協(xié)議的總稱,即流媒體技術(shù);狹義上的流媒體是相對于傳統(tǒng)的下載
-回放方式而言的,指的是一種從Internet上獲取音頻和視頻等多媒體數(shù)據(jù)的新方法,它能夠支持多媒體
數(shù)據(jù)流的實時傳輸和實時播放。通過運用流媒體技術(shù),服務器能夠向客戶機發(fā)送穩(wěn)定和連續(xù)的多媒體數(shù)據(jù)
流,客戶機在接收數(shù)據(jù)的同時以一個穩(wěn)定的速率回放,而不用等數(shù)據(jù)全部下載完之后再進行回放。
由于受網(wǎng)絡帶寬、計算機處理能力和協(xié)議規(guī)范等方面的限制,要想從Internet上下載大量的音頻和視頻數(shù)
據(jù),無論從下載時間和存儲空間上來講都是不太現(xiàn)實的,而流媒體技術(shù)的出現(xiàn)則很好地解決了這一難題。
目前實現(xiàn)流媒體傳輸主要有兩種方法:順序流(progressive streaming)傳輸和實時流(realtime
streaming)傳輸,它們分別適合于不同的應用場合。
順序流傳輸
順序流傳輸采用順序下載的方式進行傳輸,在下載的同時用戶可以在線回放多媒體數(shù)據(jù),但給定時刻只能
觀看已經(jīng)下載的部分,不能跳到尚未下載的部分,也不能在傳輸期間根據(jù)網(wǎng)絡狀況對下載速度進行調(diào)整。
由于標準的HTTP服務器就可以發(fā)送這種形式的流媒體,而不需要其他特殊協(xié)議的支持,因此也常常被稱作
HTTP流式傳輸。順序流式傳輸比較適合于高質(zhì)量的多媒體片段,如片頭、片尾或者廣告等。
實時流傳輸
實時流式傳輸保證媒體信號帶寬能夠與當前網(wǎng)絡狀況相匹配,從而使得流媒體數(shù)據(jù)總是被實時地傳送,因
此特別適合于現(xiàn)場事件。實時流傳輸支持隨機訪問,即用戶可以通過快進或者后退操作來觀看前面或者后
面的內(nèi)容。從理論上講,實時流媒體一經(jīng)播放就不會停頓,但事實上仍有可能發(fā)生周期性的暫停現(xiàn)象,尤
其是在網(wǎng)絡狀況惡化時更是如此。與順序流傳輸不同的是,實時流傳輸需要用到特定的流媒體服務器,而
且還需要特定網(wǎng)絡協(xié)議的支持。
二、流媒體協(xié)議
實時傳輸協(xié)議(Real-time Transport Protocol,PRT)是在Internet上處理多媒體數(shù)據(jù)流的一種網(wǎng)絡協(xié)
議,利用它能夠在一對一(unicast,單播)或者一對多(multicast,多播)的網(wǎng)絡環(huán)境中實現(xiàn)傳流媒體
數(shù)據(jù)的實時傳輸。RTP通常使用UDP來進行多媒體數(shù)據(jù)的傳輸,但如果需要的話可以使用TCP或者ATM等其它
協(xié)議,整個RTP協(xié)議由兩個密切相關(guān)的部分組成:RTP數(shù)據(jù)協(xié)議和RTP控制協(xié)議。實時流協(xié)議(Real Time
Streaming Protocol,RTSP)最早由Real Networks和Netscape公司共同提出,它位于RTP和RTCP之上,其
目的是希望通過IP網(wǎng)絡有效地傳輸多媒體數(shù)據(jù)。
2.1 RTP數(shù)據(jù)協(xié)議
RTP數(shù)據(jù)協(xié)議負責對流媒體數(shù)據(jù)進行封包并實現(xiàn)媒體流的實時傳輸,每一個RTP數(shù)據(jù)報都由頭部(Header)
和負載(Payload)兩個部分組成,其中頭部前12個字節(jié)的含義是固定的,而負載則可以是音頻或者視頻
數(shù)據(jù)。RTP數(shù)據(jù)報的頭部格式如圖1所示:
其中比較重要的幾個域及其意義如下:
CSRC記數(shù)(CC) 表示CSRC標識的數(shù)目。CSRC標識緊跟在RTP固定頭部之后,用來表示RTP數(shù)據(jù)報的來源,RTP協(xié)議允許在同一個會話中存在多個數(shù)據(jù)源,它們可以通過RTP混合器合并為一個數(shù)據(jù)源。例如,可以產(chǎn)生一個CSRC列表來表示一個電話會議,該會議通過一個RTP混合器將所有講話者的語音數(shù)據(jù)組合為一個RTP數(shù)據(jù)源。
負載類型(PT) 標明RTP負載的格式,包括所采用的編碼算法、采樣頻率、承載通道等。例如,類型2表明該RTP數(shù)據(jù)包中承載的是用ITU G.721算法編碼的語音數(shù)據(jù),采樣頻率為8000Hz,并且采用單聲道。
序列號 用來為接收方提供探測數(shù)據(jù)丟失的方法,但如何處理丟失的數(shù)據(jù)則是應用程序自己的事情,RTP協(xié)議本身并不負責數(shù)據(jù)的重傳。
時間戳 記錄了負載中第一個字節(jié)的采樣時間,接收方能夠時間戳能夠確定數(shù)據(jù)的到達是否受到了延遲抖動的影響,但具體如何來補償延遲抖動則是應用程序自己的事情。 從RTP數(shù)據(jù)報的格式不難看出,它包含了傳輸媒體的類型、格式、序列號、時間戳以及是否有附加數(shù)據(jù)等信息,這些都為實時的流媒體傳輸提供了相應的基礎。RTP協(xié)議的目的是提供實時數(shù)據(jù)(如交互式的音頻和視頻)的端到端傳輸服務,因此在RTP中沒有連接的概念,它可以建立在底層的面向連接或面向非連接的傳輸協(xié)議之上;RTP也不依賴于特別的網(wǎng)絡地址格式,而僅僅只需要底層傳輸協(xié)議支持組幀(Framing)和分段(Segmentation)就足夠了;另外RTP本身還不提供任何可靠性機制,這些都要由傳輸協(xié)議或者應用程序自己來保證。在典型的應用場合下,RTP一般是在傳輸協(xié)議之上作為應用程序的一部分加以實現(xiàn)的,如圖2所示:
2.2 RTCP控制協(xié)議
RTCP控制協(xié)議需要與RTP數(shù)據(jù)協(xié)議一起配合使用,當應用程序啟動一個RTP會話時將同時占用兩個端口,分別供RTP和RTCP使用。RTP本身并不能為按序傳輸數(shù)據(jù)包提供可靠的保證,也不提供流量控制和擁塞控制,這些都由RTCP來負責完成。通常RTCP會采用與RTP相同的分發(fā)機制,向會話中的所有成員周期性地發(fā)送控制信息,應用程序通過接收這些數(shù)據(jù),從中獲取會話參與者的相關(guān)資料,以及網(wǎng)絡狀況、分組丟失概率等反饋信息,從而能夠?qū)Ψ召|(zhì)量進行控制或者對網(wǎng)絡狀況進行診斷。
RTCP協(xié)議的功能是通過不同的RTCP數(shù)據(jù)報來實現(xiàn)的,主要有如下幾種類型:
SR 發(fā)送端報告,所謂發(fā)送端是指發(fā)出RTP數(shù)據(jù)報的應用程序或者終端,發(fā)送端同時也可以是接收端。
RR 接收端報告,所謂接收端是指僅接收但不發(fā)送RTP數(shù)據(jù)報的應用程序或者終端。
SDES 源描述,主要功能是作為會話成員有關(guān)標識信息的載體,如用戶名、郵件地址、電話號碼等,此外還具有向會話成員傳達會話控制信息的功能。
BYE 通知離開,主要功能是指示某一個或者幾個源不再有效,即通知會話中的其他成員自己將退出會話。
APP 由應用程序自己定義,解決了RTCP的擴展性問題,并且為協(xié)議的實現(xiàn)者提供了很大的靈活性。
RTCP數(shù)據(jù)報攜帶有服務質(zhì)量監(jiān)控的必要信息,能夠?qū)Ψ召|(zhì)量進行動態(tài)的調(diào)整,并能夠?qū)W(wǎng)絡擁塞進行有效的控制。由于RTCP數(shù)據(jù)報采用的是多播方式,因此會話中的所有成員都可以通過RTCP數(shù)據(jù)報返回的控制信息,來了解其他參與者的當前情況。
在一個典型的應用場合下,發(fā)送媒體流的應用程序?qū)⒅芷谛缘禺a(chǎn)生發(fā)送端報告SR,該RTCP數(shù)據(jù)報含有不同媒體流間的同步信息,以及已經(jīng)發(fā)送的數(shù)據(jù)報和字節(jié)的計數(shù),接收端根據(jù)這些信息可以估計出實際的數(shù)據(jù)傳輸速率。另一方面,接收端會向所有已知的發(fā)送端發(fā)送接收端報告RR,該RTCP數(shù)據(jù)報含有已接收數(shù)據(jù)報的最大序列號、丟失的數(shù)據(jù)報數(shù)目、延時抖動和時間戳等重要信息,發(fā)送端應用根據(jù)這些信息可以估計出往返時延,并且可以根據(jù)數(shù)據(jù)報丟失概率和時延抖動情況動態(tài)調(diào)整發(fā)送速率,以改善網(wǎng)絡擁塞狀況,或者根據(jù)網(wǎng)絡狀況平滑地調(diào)整應用程序的服務質(zhì)量。
2.3 RTSP實時流協(xié)議
作為一個應用層協(xié)議,RTSP提供了一個可供擴展的框架,它的意義在于使得實時流媒體數(shù)據(jù)的受控和點播變得可能。總的說來,RTSP是一個流媒體表示協(xié)議,主要用來控制具有實時特性的數(shù)據(jù)發(fā)送,但它本身并不傳輸數(shù)據(jù),而是必須依賴于下層傳輸協(xié)議所提供的某些服務。RTSP可以對流媒體提供諸如播放、暫停、快進等操作,它負責定義具體的控制消息、操作方法、狀態(tài)碼等,此外還描述了與RTP間的交互操作。
RTSP在制定時較多地參考了HTTP/1.1協(xié)議,甚至許多描述與HTTP/1.1完全相同。RTSP之所以特意使用與HTTP/1.1類似的語法和操作,在很大程度上是為了兼容現(xiàn)有的Web基礎結(jié)構(gòu),正因如此,HTTP/1.1的擴展機制大都可以直接引入到RTSP中。
由RTSP控制的媒體流集合可以用表示描述(Presentation Description)來定義,所謂表示是指流媒體服務器提供給客戶機的一個或者多個媒體流的集合,而表示描述則包含了一個表示中各個媒體流的相關(guān)信息,如數(shù)據(jù)編碼/解碼算法、網(wǎng)絡地址、媒體流的內(nèi)容等。
雖然RTSP服務器同樣也使用標識符來區(qū)別每一流連接會話(Session),但RTSP連接并沒有被綁定到傳輸層連接(如TCP等),也就是說在整個RTSP連接期間,RTSP用戶可打開或者關(guān)閉多個對RTSP服務器的可靠傳輸連接以發(fā)出RTSP 請求。此外,RTSP連接也可以基于面向無連接的傳輸協(xié)議(如UDP等)。
RTSP協(xié)議目前支持以下操作:
檢索媒體
允許用戶通過HTTP或者其它方法向媒體服務器提交一個表示描述。如表示是組播的,則表示描述就包含用于該媒體流的組播地址和端口號;如果表示是單播的,為了安全在表示描述中應該只提供目的地址。
邀請加入 媒體服務器可以被邀請參加正在進行的會議,或者在表示中回放媒體,或者在表示中錄制全部媒體或其子集,非常適合于分布式教學。
添加媒體 通知用戶新加入的可利用媒體流,這對現(xiàn)場講座來講顯得尤其有用。與HTTP/1.1類似,RTSP請求也可以交由代理、通道或者緩存來進行處理。
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

