引言
交互式網(wǎng)絡(luò)電視(IPTV)的興起,可以為觀看者提供一種新的方式來(lái)選擇與控制他們的播放內(nèi)容,國(guó)內(nèi)外運(yùn)營(yíng)服務(wù)商紛紛投資建設(shè)自己的IPTV運(yùn)營(yíng)平臺(tái)。隨著Web2 o的興起,新型的視頻內(nèi)容服務(wù)商打破了IPTV內(nèi)容提供者與內(nèi)容使用者之間的界限,使得視頻內(nèi)容得以爆發(fā)式地增長(zhǎng)。諸如YouTube、優(yōu)酷以及類(lèi)似的網(wǎng)站,越來(lái)越多地沖擊著傳統(tǒng)電視媒體。這些視頻網(wǎng)站的高度流行,使更多的人開(kāi)始關(guān)注互聯(lián)網(wǎng)視頻,視頻內(nèi)容也得到了極大的豐富。
觀看者不僅希望能夠接收優(yōu)質(zhì)的IPTV的內(nèi)容,更希望能夠如同普通電視一股方便地觀看。IPv6網(wǎng)絡(luò)的發(fā)展使得帶寬越來(lái)越充足,嵌入式技術(shù)的發(fā)展則為方便地觀看這些內(nèi)容提供了基礎(chǔ)。本文就是基于這樣的現(xiàn)實(shí),設(shè)計(jì)了一種通過(guò)家用機(jī)頂盒播放互聯(lián)網(wǎng)視頻的應(yīng)用架構(gòu),解決播放這些互聯(lián)網(wǎng)視頻必須通過(guò)電腦的問(wèn)題,使得觀看這些視頻內(nèi)容變得簡(jiǎn)單易用。
技術(shù)原理
典型的互聯(lián)網(wǎng)視頻網(wǎng)站包括幾個(gè)基本的組成部分:視頻介紹、視頻分類(lèi)、視頻本身——通常是flv文件格式及相關(guān)視頻。我們?cè)谕ㄟ^(guò)瀏覽器或者專(zhuān)用軟件播放選定的視頻之前,首先要通過(guò)關(guān)鍵字搜索或者分類(lèi)搜索的方式找到對(duì)應(yīng)視頻,然后才能播放。大多數(shù)的視頻網(wǎng)站都采用流媒體播放方式,可以讓我們邊下載邊播放,少數(shù)需要下載后才能播放。我們?cè)O(shè)計(jì)的嵌入式應(yīng)用架構(gòu)包括如下幾個(gè)功能組成部分:
·通過(guò)網(wǎng)絡(luò)檢索并下載視頻內(nèi)容;
·設(shè)定過(guò)濾器分類(lèi)檢索視頻內(nèi)容;
·可以對(duì)下載后的視頻海報(bào)進(jìn)行
幻燈式播放:
·對(duì)伽視頻文件的編解碼、音視頻編碼及音畫(huà)同步:
·友好化用戶(hù)播放界面。
這套架構(gòu)的基本應(yīng)用結(jié)構(gòu)如圖1所示。
圖1視頻服務(wù)的嵌入式應(yīng)用架構(gòu)
應(yīng)用架構(gòu)的組成與實(shí)現(xiàn)
硬件系統(tǒng)的組成
流媒體編解碼單元是整個(gè)系統(tǒng)的核心部分,主要由嵌入式系統(tǒng)、嵌入式CPU及外圍部件組成。嵌入式CPU采用三星公司的S3C2440,400MHz主頻,內(nèi)部集成了ARM920T微處理器和常用夕卜圍組件、64M SDRAM及256MFLASH。通過(guò)S3C2440的GPIO與以太網(wǎng)控制器芯片DM9000的連接,擴(kuò)展了網(wǎng)絡(luò)接口,并接人互聯(lián)網(wǎng),單元結(jié)構(gòu)參見(jiàn)圖2。
圖2流媒體編碼單元結(jié)構(gòu)
嵌入式操作系統(tǒng)采用的是Linux,有如下特點(diǎn):開(kāi)放的源代碼,內(nèi)核小,執(zhí)行效率高,對(duì)IPv6的良好支持; Linux的高度模塊化使組件更容易加載和卸載; 內(nèi)置網(wǎng)絡(luò)支持,容易實(shí)現(xiàn)內(nèi)置的Web服務(wù)器等;支持多種硬件平臺(tái);提供完整的開(kāi)發(fā)工具和SDK(Software Development Kit),提供圖形化的定制和配置工具。
軟件設(shè)計(jì)與實(shí)現(xiàn)
嵌入式網(wǎng)絡(luò)視頻點(diǎn)播處理時(shí),需要進(jìn)行實(shí)時(shí)的圖像處理、音視頻解碼與同步、網(wǎng)絡(luò)傳輸、圖形用戶(hù)界面四部分協(xié)同處理。為了確倮軟件開(kāi)發(fā)、集成乃至最后測(cè)試時(shí)不至于過(guò)分復(fù)雜,我們對(duì)這四部分進(jìn)行分層處理。從功能的角度來(lái)看,整個(gè)軟件架構(gòu)包括四個(gè)部分:
·網(wǎng)絡(luò)功能庫(kù);
·流媒體處理庫(kù);
·音視頻解碼庫(kù);
·用戶(hù)界面庫(kù)。
架構(gòu)接口參見(jiàn)圖3。
圖3視頻播放應(yīng)用架構(gòu)
網(wǎng)絡(luò)功能庫(kù)
網(wǎng)絡(luò)功能庫(kù)在標(biāo)準(zhǔn)IPv6協(xié)議的基礎(chǔ)上設(shè)計(jì)了用于通過(guò)互聯(lián)網(wǎng)處理查詢(xún)/檢索音視頻內(nèi)容,同時(shí)負(fù)責(zé)實(shí)時(shí)流媒體內(nèi)容下載的應(yīng)用協(xié)議。圖4描述了網(wǎng)絡(luò)功能庫(kù)的處理過(guò)程:
圖4網(wǎng)絡(luò)功能庫(kù)流程圖
?、偻ㄟ^(guò)NETLIB_h(yuǎn)andlerlnit()創(chuàng)建NETLIB_Handler實(shí)例,完成初始化工作;②通過(guò)NETLIB_search()或NETLIB searchBylndex()進(jìn)行查詢(xún);③檢索的結(jié)果由Handler處理,亦可重新搜索;④NETLIB readContent ( )或NETLIB ̄getCount()可以從handler倮存的檢索信息中讀取指定內(nèi)容;⑤檢索完畢可通過(guò)NETLIB_h(yuǎn)andl erDestroy銷(xiāo)除緩存中的結(jié)果集。
下面介紹網(wǎng)絡(luò)功能庫(kù)主要功能函數(shù)說(shuō)明,包括下面幾個(gè)API。
int NETLIB_search(NETLIB_Handler handler, char* keyword,NETLIB_QueryType queryType,unsigned int maxCount)。描述:搜索給定關(guān)鍵字的視頻,并返回不超過(guò)maxCount指定數(shù)量的結(jié)果。
int NET LIB_readContent(NETLIB_Handler handler,int index,NETLIB VideoDetail*videoDetail)。摘述:從檢索結(jié)果中根據(jù)指定的順序(index)讀取相應(yīng)的內(nèi)容。
流媒體處理庫(kù)
流媒體處理庫(kù)負(fù)責(zé)處理流媒體數(shù)據(jù),它的功能包括:①?gòu)膶?shí)時(shí)媒體流中分解音視頻;②選定音視頻解碼庫(kù)對(duì)分解的音視頻進(jìn)行解碼;③對(duì)解碼后的音視頻進(jìn)行同步渲染,確保播放效果。處理流程參見(jiàn)圖5。
圖5流媒體處理庫(kù)流程圖
音視頻解碼庫(kù)
一個(gè)功能完善的FLv播放器必然包括以下三大核心功能模塊。
(1)標(biāo)簽解析模
塊:能夠按照Adobe公司制定的文檔格式規(guī)范對(duì)Fly文檔凵(結(jié)構(gòu)類(lèi)似swf文件)進(jìn)行解析。
(2)影片執(zhí)行模塊:能夠按照一定的時(shí)間順序執(zhí)行影片。
?。?)ActionScript解析引擎:能夠響應(yīng)用戶(hù)的交互行為并更好地控制Fly文檔的行為。
考慮到使用機(jī)頂盒播放flv視頻時(shí)操作交互類(lèi)flv文檔時(shí)的非便利性,故此我們當(dāng)前實(shí)現(xiàn)版本中主要解決了播放時(shí)必須的問(wèn)題,主要功能接口描述如下。
FLVDEC_create(Engine_Handlehandle,string name);用于創(chuàng)建FLV解碼器實(shí)例。
FLVDEC_control(FLVDEC_Handle, FLVDEC_Cmd id,F(xiàn)LVDEC ̄DynamicParams* params,F(xiàn)LVDEC_Status*status);用于在∏V解碼器實(shí)例中實(shí)現(xiàn)FLV播放控制。
FLVDEC_process(FLVDEC_Handle handle,XDM_BufDesc* inBufs,XDM BufDesc* outBufs,F(xiàn)LVDEC InArgs* inArgs,F(xiàn)LVDEC_OutArgs*outArgs);在FLV解碼器實(shí)例中實(shí)現(xiàn)FLV播放。
FLVDEC delete(FLVDEC_Handle handle);用于刪除FLV;解碼器實(shí)例。
用戶(hù)界面庫(kù)
用戶(hù)界面庫(kù)基于DirectFB。DirectFB是專(zhuān)門(mén)為滿(mǎn)足嵌入式設(shè)備要求而開(kāi)發(fā)的小巧、強(qiáng)大、靈活和易于使用的圖形系統(tǒng),并且試圖成為一個(gè)建構(gòu)于Linux Framebuffer Device之上的新圖形標(biāo)準(zhǔn)。它在FrameBuffer的基礎(chǔ)上提供了圖形加速、輸入設(shè)備處理提取、透明窗口和多重顯示層的功能,能夠?qū)η度胧较到y(tǒng)GUI有較好的支持。與那些通用的嵌人式GUI系統(tǒng)相比,它具有非常簡(jiǎn)潔、高效的體系結(jié)構(gòu)和硬件圖形加速功能。
運(yùn)行效果
在測(cè)試用的ΛRM2440板子上播放流暢,截圖參見(jiàn)圖6。
圖6 運(yùn)行效果圖
結(jié)論
本文設(shè)計(jì)并初步實(shí)現(xiàn)了IPv6環(huán)境下嵌入式互聯(lián)網(wǎng)視頻點(diǎn)播應(yīng)用架構(gòu)。在有限資源系統(tǒng)開(kāi)發(fā)中,使用軟件系統(tǒng)工程的思想,用分層結(jié)構(gòu)假設(shè)開(kāi)發(fā)架構(gòu),在實(shí)驗(yàn)環(huán)境中測(cè)試播放較為順暢。生產(chǎn)環(huán)境中,采用具備更好DSP性能的輔助CPU,配合本文的ARM芯片實(shí)現(xiàn)本架構(gòu),可以更為丌頁(yè)暢地播放網(wǎng)絡(luò)視頻,進(jìn)一步提高系統(tǒng)的性能。