【摘要】通過剖析支持隨機播放HTTP協(xié)議流式視頻點播系統(tǒng)在服務(wù)器端、客戶端以及內(nèi)容源的關(guān)鍵要求,提出對應(yīng)實現(xiàn)技術(shù)特點,全面介紹了一種基于HTTP協(xié)議傳輸flv流式視頻并且支持隨機定位播放的視頻點播系統(tǒng)搭建技術(shù)。
【關(guān)鍵詞】HTTP協(xié)議;流式視頻;點播系統(tǒng);隨機播放
【中圖分類號】G40-057【文獻標(biāo)識碼】A【論文編號】1009—8097(2010)08—0052—03
引言
視頻點播系統(tǒng)(Video On Demand ,VOD)是當(dāng)前媒體應(yīng)用的一個熱點,在現(xiàn)代遠程教育中也是一項重要應(yīng)用。采用流式視頻點播系統(tǒng)來支持教學(xué)視頻的傳輸,是大多數(shù)遠程教育試點高校正在使用的技術(shù)。當(dāng)前普遍的流式視頻點播系統(tǒng)都是基于一些專用網(wǎng)絡(luò)傳輸協(xié)議搭建的,主要有mms協(xié)議、rtsp協(xié)議和rtmp協(xié)議等,這些協(xié)議都可以實現(xiàn)流式視頻點播系統(tǒng),但因為其是私有協(xié)議,在一些網(wǎng)絡(luò)環(huán)境中使用會遇到一些因為協(xié)議不支持而不能正常使用的麻煩,此外采用了這類實現(xiàn)方式就不得不采用其專門軟件,特別是昂貴的專門服務(wù)器軟件。為了突破這樣一些困難,現(xiàn)在逐漸興起了HTTP協(xié)議流式視頻點播系統(tǒng),這些系統(tǒng)不采用專門的服務(wù)器軟件,對客戶端要求也只是一些基于普遍應(yīng)用的嵌入式小程序,供點播的流式視頻源也可以方便的獲得,所以逐漸成為了當(dāng)前流式視頻點播應(yīng)用的主流。本文就將介紹這類系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)。
一 流式視頻點播應(yīng)用與點播系統(tǒng)簡介
一個流式視頻點播應(yīng)用的過程是客戶端發(fā)起一個對某段內(nèi)容的點播請求,服務(wù)器響應(yīng)該請求,依據(jù)請求向客戶端傳輸視頻內(nèi)容,客戶端接收到內(nèi)容后進行解碼播放。不同于非流式視頻點播就在于客戶端不需要接受完所有的文件內(nèi)容就可以開始播放。
可見視頻點播系統(tǒng)實現(xiàn)主要包括3個要素:服務(wù)器端、客戶端、流式視頻內(nèi)容,其系統(tǒng)結(jié)構(gòu)圖如圖1所示。
服務(wù)器端主要提供響應(yīng)客戶端請求,向客戶端傳輸流式視頻數(shù)據(jù);客戶端向服務(wù)器發(fā)起對具體內(nèi)容的請求,在接受到傳輸來的流式視頻數(shù)據(jù)后實時解碼,實現(xiàn)內(nèi)容展示;流式視頻內(nèi)容是以一定格式編碼的視頻數(shù)據(jù)文件,其在服務(wù)器端表現(xiàn)為獨立存儲的專門文件。
流式視頻點播系統(tǒng)與視頻實時廣播系統(tǒng)主要區(qū)別就在于流式視頻內(nèi)容不同,流式視頻點播系統(tǒng)中的流式視頻內(nèi)容是預(yù)先編碼存儲好的,而實時廣播系統(tǒng)是由專門的實時編碼軟件實時傳輸過來的。
流式點播應(yīng)用還分支持隨機定位播放和不支持隨機定位播放兩種形式。不支持隨機定位播放的點播指文件數(shù)據(jù)只能嚴格按照固有的順序進行傳輸,客戶端只能看到已經(jīng)傳輸并緩沖在本地的內(nèi)容,不能隨意的請求更后面的內(nèi)容。反之,支持隨機定位播放的點播就可以不嚴格依照固有順序,能從播放內(nèi)容中隨意的一個時間點開始播放。
二 支持隨機定位播放的HTTP協(xié)議流式視頻點播系統(tǒng)搭建的三個關(guān)鍵
要實現(xiàn)支持隨機定位播放的HTTP協(xié)議流式視頻點播系統(tǒng)需要使視頻點播系統(tǒng)的三個要素都滿足一定的要求,這就成為了系統(tǒng)實現(xiàn)的三個關(guān)鍵點。
1 服務(wù)器端要求:服務(wù)器端的關(guān)鍵是能在普通HTTP流式傳輸基礎(chǔ)上,能根據(jù)特殊的請求隨機從內(nèi)容文件中定位開始傳輸新的數(shù)據(jù),即能響應(yīng)帶隨機定位標(biāo)記的點播請求。其實這就類似于支持斷點續(xù)傳的HTTP服務(wù),只不過斷點續(xù)傳中的續(xù)傳標(biāo)記是數(shù)據(jù)傳輸中隨機分隔的,這里的定位標(biāo)記需要按一定計算才能獲得,使得播放能夠重新建立。
2客戶端的要求:客戶端的關(guān)鍵是能在普通流式播放基礎(chǔ)上能夠通過計算提出正確的請求定位參數(shù),并能夠?qū)崿F(xiàn)隨機定位后的播放——從中途開始的播放。
3 流式視頻內(nèi)容方面要求:流式視頻內(nèi)容的關(guān)鍵是能夠支持服務(wù)器和客戶端隨機定位的請求,這一般需要特殊的內(nèi)部數(shù)據(jù)組織。
三 系統(tǒng)實現(xiàn)
分析了系統(tǒng)的關(guān)鍵點,實現(xiàn)系統(tǒng)就變得比較簡單了,主要涉及三個方面。
1 流式視頻內(nèi)容格式的選擇 在系統(tǒng)實現(xiàn)中我們以flv(FLASH VIDEO)視頻作為流式視頻內(nèi)容格式。流式flv是當(dāng)前最流行的視頻格式,廣泛被各大視頻網(wǎng)站采用,比如YouTube、土豆網(wǎng)等等。其可以方便地采用免費開源轉(zhuǎn)換軟件如ffmpeg和mencoder等從各類其他視頻格式轉(zhuǎn)換獲得。需要注意的是經(jīng)過轉(zhuǎn)換的flv其實還不能滿足隨機定位播放的要求,還需要采用yamdi或者flv tools2 工具對flv文件進行metadata數(shù)據(jù)注入修正,經(jīng)過metadata注入,flv文件上就有了整個視頻文件播放總時間以及視頻每秒對應(yīng)的文件位置數(shù)據(jù)等信息,這為后面在客戶端計算出隨機播放定位時的文件頭位置提供了條件。metadata數(shù)據(jù)還包括了視頻原始分辨率、采用的編碼格式等信息,這都為實現(xiàn)視頻的播放提供了保障。
2 客戶端的實現(xiàn) 客戶端就是可嵌入普通web頁面內(nèi)的flash小程序,程序可以用很多工具開發(fā),為了使程序小巧,推薦直接采用ActionScript3開發(fā),使用Flex SDK編譯生成swf格式程序,這可以使得最后程序為10k左右。ActionScript3編程時采用Flash9的原生播放器庫中的NetConnection 類、NetStream類以及Video類等就可以創(chuàng)建采用漸進式流媒體方式播放flv格式視頻的播放類了,但要實現(xiàn)隨機定位還需要進行專門的定制處理,這也不復(fù)雜,主要有這樣的2個步驟:
(1) 首次開始播放時加載flv文件metadata數(shù)據(jù),提取并緩存總播放時間和每秒對應(yīng)文件頭信息等數(shù)據(jù);另根據(jù)metadata中視頻分辨率、編碼格式等信息建立播放環(huán)境開始播放視頻;
(2) 按時間的定位操作分成兩種形式:形式一是數(shù)據(jù)已經(jīng)緩沖到客戶端,直接使用NetStream類提供的seek函數(shù)實現(xiàn)定位播放;形式二是數(shù)據(jù)還未緩沖到,則需要計算出定位時間所對應(yīng)的文件頭,向服務(wù)器發(fā)出新的數(shù)據(jù)請求,重新緩沖后開始播放。
這里判斷是否已經(jīng)緩沖到定位時間的條件有:
StartOff < SeekOff ————條件1
SeekOff < StartOff + BufferLoaded————條件2
StartOff是此次請求的文件頭偏移地址,首次定位前為0;
SeekOff是對應(yīng)定位時間的文件頭偏移地址,這個通過來源于metadata數(shù)據(jù)查表獲得;
BufferLoaded是本次播放已經(jīng)緩沖的數(shù)據(jù)量。
如果條件1和條件2同時滿足,即StartOff
3 服務(wù)器端的選用。服務(wù)器端可以采用常見的開源HTTP服務(wù)器,只要其支持HTTP流式數(shù)據(jù)即可,推薦使用Nginx或者lighttpd,因為這兩種服務(wù)器對flv格式有專門的優(yōu)化,而且對隨機播放支持也已經(jīng)有了相應(yīng)的服務(wù)器擴展實現(xiàn),我們采用的是Nginx。 默認Nginx實現(xiàn)flv點播支持時采用“start”為定位頭參數(shù)標(biāo)記,如果你想定義自己的標(biāo)記可以修改 ngx_http_flv_module 模塊并編譯替換系統(tǒng)默認的。在Nginx中的相關(guān)配置是在某個server配置中添加:
Location ~ \\.flv {
root<服務(wù)端數(shù)據(jù)路徑>; #<服務(wù)端數(shù)據(jù)路徑>需要指向真實目錄
flv;
}
至此一個完整的支持隨機定位播放HTTP協(xié)議流式視頻點播系統(tǒng)已經(jīng)搭建起來。
小結(jié)
本文介紹的支持隨機定位播放HTTP協(xié)議流式視頻點播系統(tǒng)實際搭建比較方便,應(yīng)用范圍廣泛。且該系統(tǒng)支持Linux和win32平臺等可跨平臺部署和使用,這進一步拓展了系統(tǒng)的應(yīng)用空間。因為數(shù)據(jù)傳輸只采用了HTTP協(xié)議,所以有最好的網(wǎng)絡(luò)適應(yīng)性,而且管理更方便。此外使用到的軟件都是開源免費的,這也降低了系統(tǒng)部署成本。囿于系統(tǒng)形式的不足,這個系統(tǒng)只支持秒級的隨機定位,而不支持毫秒等更精細的定位,但筆者認為這在大多數(shù)的點播應(yīng)用中是完全能夠滿足要求的。在這一系統(tǒng)基礎(chǔ)上進行擴展能夠建立起更廣泛的應(yīng)用,例如現(xiàn)在網(wǎng)絡(luò)教育中常見的教師講授視頻和展示同步顯示的點播應(yīng)用就可以在此基礎(chǔ)上擴展實現(xiàn)。此外這一系統(tǒng)還可以很方便地擴展為支持mp4流式格式。
參考文獻
[1] W3C .HTTP - Hypertext Transfer Protocol[EB/OL].
< http://www.w3.org/Protocols.>
[2] Ing. Fabio Sonnati. Flash Video Technology[M].美國: Progetto Sinergia, 2006 .
[3] ADOBE. ActionScript 3.0 編程[M].美國:Adobe Systems Incorporated,2008:439-473.
[4] ADOBE.使用ActionScript3.0組件[M].美國:Adobe Systems Incorporated,2008:117-147.
[5] Nginx Community. NginxhttpFlvStreamModule[EB/OL].