基于 Red5 的流媒體服務器的搭建和應用
Red5 是一個采用 Java 開發的開源免費 Flash 流媒體服務器。Red5 基于 Java 和一些功能強大的開源框架,為企業級應用奠定了標準。它使用 RTMP,RTMPT,RTMPS 和 RTMPE 流媒體協議, 支持:將音頻(MP3)和視頻(FLV,MP4,F4V,3GP)轉換成播放流;錄制客戶端播放流;共享對象;現場直播流發布;遠程調用。Red5 為即時通信,遠程教育,流媒體開發,多人在線游戲等提供了一個簡單易行的方案。本文通過對 Red5 的介紹,讓讀者了解如何使用 Red5 快速搭建一個流媒體服務器和如何在服務器上開發部署相應的流媒體應用。
引言
流媒體文件是目前非常流行的網絡媒體格式之一,這種文件允許用戶一邊下載一邊播放,從而大大減少了用戶等待播放的時間。另外通過網絡播放流媒體文件時,文件本身不會在本地磁盤中存儲,這樣就節省了大量的磁盤空間開銷。正是這些優點,使得流媒體文件被廣泛應用于網絡播放。
流 媒體服務器是通過建立發布點來發布流媒體內容和管理用戶連接的。流媒體服務器能夠發布從視頻采集卡或攝像機等設備中傳來的實況流,也可以發布事先存儲的流 媒體文件,并且發布實況流和流媒體文件的結合體。一個媒體流可以由一個媒體文件構成,也可以由多個媒體文件組合而成,還可以由一個媒體文件目錄組成。
Flash Media Server,簡稱 FMS,是 Flash 大家庭里的一員,被稱為是目前開發 Web 音視頻應用程序(比如,視頻聊天室、視頻會議系統、播客系統、音視頻留言等等)的最方便最快捷的解決方案。也在 web 應用程序開發上有著越來越廣泛的應用。當然 FMS 這種優良功能并不是免費提供給廣大用戶的,幾千美金每個點的價格讓很多開發人員望而卻步。于是,大家開始嘗試尋找一種更合適的解決方案,開源的 Red5 便成為了人們的新寵。
Red5 是一個采用 Java 開發的開源的 Flash 流媒體服務器,功能上與 FMS 類似。它支持:把音頻(MP3)和視頻(FLV)轉換成播放流;錄制客戶端播放流(只支持 FLV);共享對象;現場直播流發布;遠程調用。Red5 使用 RSTP 作為流媒體傳輸協議,包括在線錄制,Flash 流媒體播放,在線聊天,視頻會議等一些基本功能。國內外基于 Red5 的流媒體應用產品也在不斷推廣,例如在線視頻會議 Openmeeting,大型 Flash 網游功夫之王 2。
流媒體簡介
隨 著 Internet 發展,單純的文字和圖形已經遠遠不能滿足需求,而是逐漸向聲音和視頻等多媒體方向過渡。目前在網絡上傳輸音頻/視頻等多媒體文件時,一般有下載和流式傳輸 兩種選擇。由于音頻/視頻包含大量的數據,所以他們占據的存儲空間都比較大,在帶寬受限的網絡環境中下載可能要耗費數分鐘甚至數小時,所以這種處理方法的 延遲很大。如果換用流式傳輸的話,聲音、影像、動畫等多媒體文件將由專門的流媒體服務器負責向用戶連續、實時地發送,這樣用戶可以不必等到整個文件全部下 載完畢,而只需要經過幾秒鐘的啟動延時就可以了,當這些多媒體數據在客戶機上播放時,文件的剩余部分將繼續從流媒體服務器下載。
流 (Streaming)是近年在 Internet 上出現的新概念,其定義非常廣泛,主要是指通過網絡傳輸多媒體數據的技術總稱。流媒體包含廣義和狹義兩種內涵:廣義上的流媒體指的是使音頻和視頻形成穩定 和連續的傳輸流和回放流的一系列技術、方法和協議的總稱,即流媒體技術;狹義上的流媒體是相對于傳統的下載-回放方式而言的,指的是一種從 Internet 上獲取音頻和視頻等多媒體數據的新方法,它能夠支持多媒體數據流的實時傳輸和實時播放。通過運用流媒體技術,服務器能夠向客戶機發送穩定和連續的多媒體數 據流,客戶機在接收數據的同時以一個穩定的速率回放,而不用等數據全部下載完之后再進行回放。
由于受網絡帶寬、計算機處理能力和協議規范等 方面的限制,要想從 Internet 上下載大量的音頻和視頻數據,無論從下載時間和存儲空間上來講都是不太現實的,而流媒體技術的出現則很好地解決了這一難題。目前實現流媒體傳輸主要有兩種 方法:順序流(progressive streaming)傳輸和實時流(realtime streaming)傳輸,它們分別適合于不同的應用場合。
順序流傳輸
順 序流傳輸采用順序下載的方式進行傳輸,在下載的同時用戶可以在線回放多媒體數據,但給定時刻只能觀看已經下載的部分,不能跳到尚未下載的部分,也不能在傳 輸期間根據網絡狀況對下載速度進行調整。由于標準的 HTTP 服務器就可以發送這種形式的流媒體,而不需要其他特殊協議的支持,因此也常常被稱作 HTTP 流式傳輸。順序流式傳輸比較適合于高質量的多媒體片段,如片頭、片尾或者廣告等。
實時流傳輸
實 時流式傳輸保證媒體信號帶寬能夠與當前網絡狀況相匹配,從而使得流媒體數據總是被實時地傳送,因此特別適合于現場事件。實時流傳輸支持隨機訪問,即用戶可 以通過快進或者后退操作來觀看前面或者后面的內容。從理論上講,實時流媒體一經播放就不會停頓,但事實上仍有可能發生周期性的暫停現象,尤其是在網絡狀況 惡化時更是如此。與順序流傳輸不同的是,實時流傳輸需要用到特定的流媒體服務器,而且還需要特定網絡協議的支持。
Red5 概述
Red5 是一個采用 Java 開發開源的 Flash 流媒體服務器。免費開源使軟件更加容易擴展,下載后你可以對源代碼進行修改;更加經濟,比起 FMS 高昂的費用,Red5 能為一般的應用節約大筆費用;同時服務器端的 Java 面向對象語言比起 FMS 服務器端的 ActionScript2 語言更加成熟。鑒于 Red5 的種種優勢,推出不久便被廣大用戶所接受。
Red 5 支持:
1. 把音頻(MP3)和視頻(FLV, F4V, MP4, 3GP)轉換成播放流;
2. 錄制客戶端播放流, 把攝像頭,麥克風等傳入的音頻視頻錄制保存到服務器;
3. 共享對象;
4. 現場直播流發布;
5. 遠程調用;
6. 協議:RTMP, RTMPT, RTMPS, and RTMPE。
為了便于開發人員進行二次開發,Red5 提供了很多接口。
表 1.Red5 常用接口
| 接口 | 描述 | </tr> </tbody>|||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| IConnection | 連接對象。每個連接都有一個關聯的客戶端和域。連接可能是持續型、輪詢型、或短暫型。建立此接口的目的,是為了給不同的子類,如 RTMPConnection,RemotingConnection,HttpConnection 等,提供基礎通用的方法。通過該接口提供的 getClient() 方法可以方便地獲取客服端對象。 | </tr>|||||||||||||||||||||||||
| IScope | 每個 Red5 應用程序至少有一個域,用來搭建處理器、環景、服務器之間的連接。域可以構成樹形結構,所有客戶端都可以作為其節點共享域內的對象(比如流和數據)。所有 的客服端 (client) 通過連接 (connection) 連接到域中。對于單一域,每個連接對應一個客戶端,每個客戶端對應一個 id,簡單的應用,操作就針對一個 id 和一個連接進行。 | </tr>|||||||||||||||||||||||||
| IServiceCapableConnection | 獲取有效連接。代碼中先獲取到連接實例,然后判斷是否是有效連接并強制類型轉換,之后調取客戶端相應函數。 | </tr>|||||||||||||||||||||||||
| IClient | 客戶端對象代表某單一客戶端。一個客戶端可以和同一主機下不同的域分別建立連接。客戶端對象和 HTTPSession 很相像。可以使用 IClientRegistry.newClient(Object[]) 方法來創建 IClient 對象。 | </tr>|||||||||||||||||||||||||
| ApplicationAdapter | ApplicationAdapter 是應用層級的 IScope。若要處理流進程,需實現 IStreamAwareScopeHandler 接口中的相應處理方法。ApplicationAdapter 還提供了有效的事件處理機制,來進行截取流、確認用戶等操作。同時,其子類中引入的方法均可在客戶端通過 NetConnection 調取。在 Aodbe 的 FMS 中必須在服務器端維護客戶端對象,與之相較,Red5 為您的遠程請求提供了更加方便快捷的操作方法。 | </tr> </tbody> </table>