天天看點

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

本文來自論文《基于 RTMP 協定的流媒體技術的原理與應用》,文中研究了基于 Flash 平台的流媒體系統中使用的 RTMP 協定的原理和應用,并對網絡上實時流媒體的各種傳輸方式的優缺點進行了分析。然後,重點分析了基于 RTMP 協定的流媒體技術的特點,并且介紹了 RTMP 協定封包的格式。最後,實作了一個基于 RTMP 協定的流媒體直播系統。

對于即時通訊開發人員來說,文中的相關理論和思路,對于研究即時通訊實時音視訊(IM聊天應用的視時音視訊通話)技術中的資料傳輸方案,原理是相通的,有一定的學習和借鑒意義,希望能給你帶來一定的啟發。

論文摘要

本文介紹了基于 Flash 平台的流媒體系統中使用的 RTMP 協定的原理和應用。首先,對網絡上流媒體的各種 傳輸方式的優缺點進行了分析。然後,重點分析了基于 RTMP 協定的流媒體技術的特點,并且介紹了 RTMP 協定 封包的格式。最後,實作了一個基于 RTMP 協定的流媒體直播系統。

1 引言

近年來,随着網絡帶寬的提升,以及多媒體壓縮編碼技術的發展,流媒體技術得到了非常廣泛的應用。全球的流媒體市場正在以極高的速度向前發展,并逐漸取代了以文本和圖檔為主的傳統網際網路。根據Cisco的VisualNetworkingIndex(VNI)統計,2005年流媒體流量僅占全球網際網路總流量的5%,而到了2011年這一比例已經提升到40%,預計到2015年這一比例将會進一步提升到62%。與此同時,流媒體技術也已經突破了電腦的限制,進入了平闆電腦和智能手機等領域,一個Video Every Where的時代即将到來[1]。

在這種流媒體快速發展的大環境下,各個地方的電視台,視訊服務提供商紛紛開始了自己的流媒體業務。在搭建業務平台的時候,如何選取合适自己的流媒體平台成為一個至關重要的問題。中國網絡電視台,中國教育電視台,河南電視台,深圳電視台等多家電視台,以及六間房,奇異網,威視網等流媒體服務商都選擇了Adobe公司的基于Flash平台的流媒體系統。該系統傳輸資料使用的RTMP協定[2]是以得到了非常廣泛的應用。本文将會對其特點進行詳細的分析,并搭建一個基于RTMP協定的流媒體直播系統。

【文章福利】小編推薦自己的linuxC/C++語言交流群:832218493,整理了一些個人覺得比較好的學習書籍、視訊資料以及一些源碼共享在裡面,有需要的可以自行添加哦!~

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

更多優秀文章和視訊在公衆号

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

2 流媒體

目前網際網路中的流媒體服務從傳輸方式上大體上可以分為兩種方式:順序流式傳輸和實時流式傳輸。

1順序流式傳輸

順序流式傳輸采用普通的HTTP伺服器作為存儲多媒體檔案的伺服器。當用戶端發起連接配接想要觀看多媒體資源的時候,直接通過HTTP協定把檔案下載下傳到用戶端本地系統的臨時檔案夾中,再使用播放器播放已經下載下傳好的檔案。它的與伺服器互動的流程如下圖所示。

順序流式傳輸的實質就是播放本地檔案。順序流式傳輸目前得到了十分廣泛的應用:YouTube、優酷網、洋芋網等視訊服務商都采用了該種方式提供多媒體服務。順序流式傳輸的好處主要是減輕了伺服器的壓力,即當多媒體檔案下載下傳完成後就可以斷開連接配接,進而節省出伺服器資源再為其他用戶端服務。此外,順序流式傳輸使用的是普通的HTTP伺服器,視訊服務商不必花費額外的資金購買流媒體伺服器,進而節省了一筆經費。

順序流式傳輸如下圖:

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

2實時流式傳輸

實時流式傳輸采用專門的流媒體伺服器存儲多媒體檔案。當用戶端發起連接配接想要觀看多媒體資源的時候,一般通過專有的實時流式傳輸協定把位于流媒體伺服器上的多媒體資料直接傳輸給用戶端的播放器,再實時播放。他與伺服器互動的流程如下圖所示。

實時流式傳輸的應用目前還處于發展階段,主要應用于網絡直播和正版影視的點播。使用實時流式傳輸方式觀看多媒體資源的時候,由于不會把檔案下載下傳到本地,可以防止視音頻提供商的内容被非法拷貝,進而保護了視音頻内容的版權。此外,使用實時流式傳輸方式觀看多媒體資源的時候,可以随意跳轉到該視音頻的任何位置,而不必像順序流式傳輸那樣隻能觀看已經下載下傳過的部分,是以大大增加了觀看時的自由度。

實時流式傳輸如下圖:

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

3 實時流式傳輸

流媒體系統中媒體資料傳輸需要相應的實時流 式傳輸協定支援。實時流式傳輸協定屬于網際網路 TCP/IP 五層體系結構中應用層的協定。在目前的網際網路中,很多實時流式傳輸協定的标準是公司私有的,是以這些協定規範并不公開。目前公開規範 的實時流式傳輸協定有以下幾種:

1RTSP+RTP

RTSP 是由 IETF( Internet 工程任務組) 提出 的[3]。RTSP 協定全稱是 Real Time Streaming Proto- col,即實時流傳輸協定,是 IETF 的 RFC 标準。

RTSP 用于控制流媒體的傳輸,比如建立連接配接,播放, 暫停等等,但本身并不傳輸多媒體資料。多媒體資料通常都是使用 RTP/RTCP 協定進行傳輸。RTP/ RTCP 協定全稱是 Real - time Transport Protocol / Real - time Transport Control Protocol,即實時傳送協定 / 實時傳送控制協定,也是 IETF 的 RFC 标準,專門用于傳輸多媒體資料。

雖然 RTSP + RTP 是一個國際标準的組合,但是在網際網路世界中卻沒能做到“一統天下”。這與網際網路的環境有很大關系。

RTP/ RTCP 作為傳輸多媒體資料的網絡協定,一般情況下使用 UDP 協定作為其傳輸層的網絡協定[3]。 UDP 是無連接配接的,不提供可靠傳遞,是以在網際網路上( 尤其是廣域網) 傳輸資料的時候極易産生丢包, 時延,抖動等問題。多媒體資料對丢包,時延,抖動 有很高的要求,一點點小問題就會極大的影響使用者的體驗品質(QoE)[4]。是以網際網路上采用RTSP + RTP 方式傳輸的流媒體并不是很多。

不過,也有例外,現在主流的即時通訊(即IM聊天應用)中的實時音視訊聊天中,多使用這種元件,原因在于實時音視訊聊天不同于影片播放這種場景,實時性比完整性更重要,播放影片網絡不好的時候可以加載一會,使用者可以等,但實時音視訊聊天時這就是大忌,好在實時音視訊聊天時網絡很爛的情況下,圖像幀丢失的情況并不會有實質性地影響,因而為了效率和實時體驗,RTP/RTCP的UDP方式相反卻是最佳的。

與在網際網路上傳輸的流媒體不同,IPTV 通常都采用 RTSP + RTP 的方式傳輸多媒體資料[5]。因為 IPTV 通常采用專網傳輸,網絡狀況較好,極少出現丢包,時延,抖動等問題,而 UDP 簡單的協定規則可以大幅提高傳輸效率,是以可以“放心大膽”的使用 RTSP + RTP 的方式傳輸。

2MMS

MMS 是由微軟公司提出的。MMS 協定全稱是 Microsoft Media Server protocol,即微軟媒體服務協定,用于通路 Windows Media 釋出點上的内容。

3HLS

HLS 是由蘋果公司提出的。HLS 全稱是 HTTP Live Streaming,即基于 HTTP 的實時流式傳輸協定, 可實作流媒體的直播和點播,主要應用在 iOS 系統, 為 iOS 裝置( 如 iPhone、iPad) 提供音視訊直播和點播方案。

4RTMP

RTMP 是由 Adobe 公司提出的。RTMP 協定全稱是 Real Time Messaging Protocol,即實時消息傳送協定,用于在 Flash 平台之間傳遞視音頻以及資料。 與 RTSP + RTP 組合提供流媒體服務的方式不同, RTMP 協定本身既可以傳輸多媒體資料也可以控制多媒體播放。

RTMP 協定使用 TCP 協定作為其傳輸層的網絡協定。TCP 是面向連接配接的[3],提供可靠傳遞的協定,是以在網際網路上傳輸時不會出現丢包情況,進而保證了使用者體驗( QoE) 。但是 TCP 協定提供可靠傳遞的代價就是增加了一些額外的開銷,占用了一些帶寬和處理機資源。随着網絡帶寬的提高和計算機硬體的發展,這些開銷會顯得越來越微不足道。是以 RTMP 協定在未來有很好的發展前景。

4 基于 RTMP 的系統的特點

很多網絡電視台,流媒體服務提供商之是以會選擇 RTMP 協定作為其提供流媒體服務的應用層協 議,在于它有以下幾個特點::無須安裝用戶端程式, 保證了媒體傳輸品質。

1無須安裝用戶端程式

收看采用 RTMP 協定提供的流媒體無需安裝客 戶端程式,大大簡化了客戶操作的複雜度。一般收 看流媒體都需要相應的用戶端軟體的支援,使用者需 要收看流媒體就必須下載下傳相應的軟體( 或插件) 。 而支援 RTMP 協定的流媒體用戶端可以制作成一個普通的 Flash 檔案,隻要安裝過 Flash Player 的網頁浏覽器就可以自動下載下傳該檔案并運作它。而 Flash Player 是一個上網必備的插件。據統計,全世界 98% 的網頁浏覽器都安裝了 Flash Player。是以,普通使用者不需要任何操作,隻要使用網頁浏覽器打開播放頁面,就可以收看流媒體[6]。

2保證了媒體傳輸品質

RTMP 協定有效的保證了媒體傳輸品質,使使用者可以觀看到高品質的多媒體。RTMP 采用 TCP 協定作為其在傳輸層的協定,避免了多媒體資料在廣域網傳輸過程中的丢包對品質造成的損失。此外 RTMP 協定傳輸的 FLV 封裝格式支援的 H. 264 視訊編碼方式可以在很低的碼率下顯示品質還不錯的畫面,非常适合網絡帶寬不足的情況下收看流媒體。

5 RTMP 的規範

1RTMP 的規範 協 議 格 式

RTMP 協定是一個網際網路 TCP/IP 五層體系結構中應用層的協定。RTMP 協定中基本的資料單元稱為消息( Message) 。當 RTMP 協定在網際網路中傳 輸資料的時候,消息會被拆分成更小的單元,稱為消 息塊( Chunk) 。

消息:

消息是 RTMP 協定中基本的資料單元。不同種 類的消息包含不同的 Message Type ID,代表不同的 功能。RTMP 協定中一共規定了十多種消息類型, 分别發揮着不同的作用。例如,Message Type ID 在 1 - 7 的消息用于協定控制,這些消息一般是 RTMP 協定自身管理要使用的消息,使用者一般情況下無需操作其中的資料。Message Type ID 為 8,9 的消息分别用于傳輸音頻和視訊資料。Message Type ID 為 15-20的消息用于發送AMF編碼[8]的指令,負責 使用者與伺服器之間的互動,比如播放,暫停等等。消息首部( Message Header) 有四部分組成: 标志消息 類型的 Message Type ID,标 志 消 息 長 度 的 Payload Length,辨別時間戳的 Timestamp,辨別消息所屬媒 體流的 Stream ID。消息的封包結構如下圖所示。

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

消息塊:

在網絡上傳輸資料時,消息需要被拆分成較小的資料塊,才适合在相應的網絡環境上傳輸。RTMP 協定中規定,消息在網絡上傳輸時被拆分成消息塊 ( Chunk) 。消息塊首部( Chunk Header) 有三部分組成: 用于辨別本塊的 Chunk Basic Header,用于辨別 本塊負載所屬消息的 Chunk Message Header,以及當 時間戳溢出時才出現的 Extended Timestamp。消息 塊的封包結構如下圖所示。

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

消息分塊:

在消息被分割成幾個消息塊的過程中,消息負載部分( Message Body) 被分割成大小固定的資料塊 ( 預設是 128 位元組,最後一個資料塊可以小于該固定長度) ,并在其首部加上消息塊首部( Chunk Head- er) ,就組成了相應的消息塊。消息分塊過程如下圖所示,一個大小為 307 位元組的消息被分割成 128 字 節的消息塊( 除了最後一個) 。

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)
基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

RTMP 傳輸媒體資料的過程中,發送端首先把媒體資料封裝成消息,然後把消息分割成消息塊,最後将分割後的消息塊通過 TCP 協定發送出去。接收端在通過 TCP 協定收到資料後,首先把消息塊重新組合成消息,然後通過對消息進行解封裝處理就 可以恢複出媒體資料。

2連接配接方式

RTMP 協定規定,釋出一個媒體流之前需要創 建兩個邏輯結構: 第一步,建立一個網絡連接配接( Net- Connection) ; 第二步,基于該網絡連接配接建立一個網絡 流( NetStream) 。其中,網絡連接配接代表伺服器端和用戶端之間基礎的聯系; 網絡流代表了發送多媒體數 連接配接,但是基于該連接配接可以建立很多網絡流。他們據的通道。伺服器和用戶端之間隻能建立一個網絡 的關系如下圖所示:

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

6 基于 RTMP 的直播系統的搭建

1系統結構

本文将會實作一個基于 RTMP 協定的流媒體直 播系統。一個完整的流媒體直播系統包括以下幾個 部分: 視訊源,流媒體伺服器和用戶端,系統的構成如下圖所示。視訊源将視訊資料經過 RTMP 協定發 布到流媒體伺服器上; 視訊成功釋出以後,用戶端通 過 RTMP 連接配接到流媒體伺服器,就可以播放相應的 視訊。其中,視訊源和用戶端都是使用 ActionScript 語言編寫的 Flash 程式[10],流媒體伺服器使用 Ado- be 公司的 Flash Media Server 軟體

基于RTMP資料傳輸協定的實時流媒體技術研究(論文全文)

2視訊源

視訊源是一個提供視訊流的應用程式。本系統 中使用一個 ActionScript 代碼編寫的 Flash 程式作為 視訊源。該程式采集本機攝像頭資料,将資料壓縮 編碼後使用 RTMP 協定将資料釋出到流媒體伺服器 相應的應用程式( Application) 上面。

下面簡要介紹一下視訊源部分重要代碼含義:

// 建立一個 RTMP 網絡連接配接
var nc: NetConnection = new NetConnection( ) ; 
//連接配接到 IP 為 222. 31. 64. 249 的流媒體伺服器上名字為 publishlive 的應用程式 
nc.connect("rtmp://222.31.64.249/publish-live" ) ;
// 建立一個基于該連接配接的網絡流
ns = new NetStream( nc) ; 
// 調用本機的攝像頭
cam = Camera. getCamera( ) ;
// 把攝像頭添加到建立的流上 
ns. attachCamera( cam) ;
//把一個多媒體流釋出到伺服器的應用程式 上,取名為“myCamera”
ns. publish( " myCamera" ," live" ) ;
           

3流媒體伺服器

流媒體伺服器是存儲( 或接收) 媒體流并且等 待用戶端連接配接的軟體。本系統采用 Adobe 公司的 Flash Media Server 作為流媒體伺服器。媒體流必需 釋出到已經在流媒體伺服器上注冊過的應用程式 上。在 Flash Media Server 的 安 裝 目 錄 的“Applica- tion”檔案 夾 下 新 建 一 個“publishlive ”文 件 夾,即 可 注冊一個名為“publishlive”的應用程式,不需要編寫 任何代碼。

4用戶端

用戶端是播放視訊流的應用程式。本系統采用一個 ActionScript 語言編寫的 Flash 程式作為播放實時流的用戶端。使用 RTMP 協定從流媒體伺服器獲 得視訊資料并顯示播放。

下面簡要介紹一下用戶端的部分關鍵代碼的含義:

// 建立一個 RTMP 網絡連接配接
var nc: NetConnection = new NetConnection( ) ;
//連接配接到 IP 為 222. 31. 64. 249 的流媒體服務 器上名字為 publishlive 的應用程式
nc.connect( "rtmp://222.31.64.249/publish- live" ) ;
// 建立一個基于該連接配接的多媒體流 
nsPlayer = new NetStream( nc) ;
// 播放名為“myCamera”的多媒體流 
nsPlayer. play( " myCamera" ) ;
// 建立一個 Video 對象用于顯示視訊
vidPlayer = new Video ( cam. width,cam.height) ;
// 将多媒體流添加到 Video 類上
vidPlayer. attachNetStream( nsPlayer) ; 
// 在 Flash 舞台上顯示 Video 對象
addChild( vidPlayer) ;
           

7 小結和展望

本文分析了流媒體的兩種基本傳輸方式: 順序 流式傳輸和實時流式傳輸的差別。并重點分析了幾 種主要的實時流式傳輸協定的特點。以 RTMP 協定 為基礎,分析了它的特點和格式,最後實作了一個的 基于 RTMP 協定的流媒體直播系統。對于全面了解 RTMP 協定的原理有很大的幫助,同時可以為設計 與實作更為複雜的基于 RTMP 協定的流媒體系統提 供一個參考。

今年以來,随着網際網路電視( Over - The - Top TV) 逐漸興起,流媒體技術将會随之迎來一個大發 展階段。可以預見,以流媒體技術為支撐的流媒體 在未來将會占據傳統電視的部分市場并獲得相當數量的客戶群。而不需要使用者安裝用戶端,視音頻質 量良好的基于 RTMP 協定的流媒體系統,也将會在 衆多流媒體系統中凸現出來,獲得很大的市場佔有率。