<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于DirectFB的嵌入式播放器的設計與實(shí)現

基于DirectFB的嵌入式播放器的設計與實(shí)現

作者: 時(shí)間:2012-05-23 來(lái)源:網(wǎng)絡(luò ) 收藏

1 概述

本文引用地址:http://dyxdggzs.com/article/257491.htm

隨著(zhù)嵌入式的普及和發(fā)展,嵌入式設備的功能越來(lái)越強大,用戶(hù)對嵌入式設備的要求也越來(lái)越高。各種多媒體應用程序被移植到了嵌入式系統中,是否能夠播放音視頻是人們衡量和購買(mǎi)嵌入式設備的基本要求之一。本文提出了一種基于解決方案,有效地降低嵌入式系統的資源消耗,適用于CPU頻率小于400MHz的中低端嵌入式系統。是一個(gè)輕量級的GUI開(kāi)發(fā)庫,它通過(guò)Framebuffer以及回調函數,實(shí)現了對硬件設備的完全抽象,加速和簡(jiǎn)化了圖形操作。

本文首先對進(jìn)行了詳細的介紹,接著(zhù)提出了一種寬松的、可分解的設計方案。該方案資源消耗少、可移植性強、系統各個(gè)模塊間依賴(lài)度小,使得用戶(hù)能夠根據自己的系統需求快速設計滿(mǎn)足自己要求的播放器。

2 DirectFB簡(jiǎn)介

2.1 DirectFB的整體框架

DirectFB必須通過(guò)Linux下Framebuffer驅動(dòng)來(lái)訪(fǎng)問(wèn)硬件設備,它在Framebuffer的基礎上提供了圖形設備的加速、輸入設備處理提取、透明窗口和多重顯示層的功能。另外DirectFB設計之初就充分考慮了嵌入式系統的固有特性,體積小巧,資源消耗低。作為嵌入式系統中強大的圖形處理庫,DirectFB成為L(cháng)inux下一代處理的一個(gè)新標準(CELF AVG1.0標準)。圖1是DirectFB的整體框架。


2.2 DirectFB接口描述

DirectFB提供了一套C接口來(lái)方便用戶(hù)進(jìn)行界面開(kāi)發(fā),例如IDirectFBSurface接口提供了對于文本、BILT、畫(huà)線(xiàn)以及畫(huà)矩形的操作。IDir ectFBFont接口提供了對字體的操作,而IDirectFBVideo接口提供了對多媒體進(jìn)行播放控制的操作。表1對DirectFB接口進(jìn)行了詳細的描述。


3 播放器的框架

的架構如圖2所示。采用DirectFB開(kāi)發(fā)的Lite作為圖形界面,與用戶(hù)進(jìn)行直接交互;調用DirectFB的Video實(shí)現了音視頻的插件接口和解碼器模塊。該接口將FFmpeg、xine、libmpeg3等多媒體庫封裝成統一接口,具備很強的擴展性;基于Framebuffer的輸出,消除了對于特定架構的依賴(lài),有效地增強了系統的可移植性。

圖形界面是以L(fǎng)ite為基礎開(kāi)發(fā)的。Lite是基于DirectFB開(kāi)發(fā)的以box為基類(lèi)的對話(huà)框。通過(guò)調用Lite可以編寫(xiě)各種暫停、播放、音量等控件,用戶(hù)使用這些控件與播放器進(jìn)行直接交互。DirectFB本身并不提供窗口以及對話(huà)框管理功能,因而DirectFB更多地被用作底層圖形庫。參考文獻中選擇以DirectFB為后端的Cairo圖形庫進(jìn)行2D圖形開(kāi)發(fā);參考文獻中選擇基于GTK+on DirectFB進(jìn)行嵌入式開(kāi)發(fā)。如今,上層API支持DirectFB的有XDirectFB、DirectFBGL、DFBTerm、DFBSee、DFBPoint、QT on DireelFB、SDL等。采用Lite進(jìn)行開(kāi)發(fā)的目的,主要是因為它直接使用DirectFB開(kāi)發(fā)對話(huà)框,而且源代碼只有5 MB左右,具有很快的響應速度,能夠有效降低嵌入式設備資源的消耗。

插件接口將對解碼器的操作放到了Video統一的開(kāi)發(fā)式接口中,該接口實(shí)現了分離音視頻、解碼音視頻、播放、暫停、調節音量、調整播放速度等各種功能。通過(guò)該接口,播放器的擴展性得到了很大的提高,因此該接口是媒體播放器的核心。

3.1 插件接口以及編解碼

DirectFB通過(guò)對FFmpeg進(jìn)行封裝,形成一組統一接口方便用戶(hù)調用。插件接口通過(guò)以下方法來(lái)控制解碼器:

①Probe函數。通過(guò)檢查文件擴展名來(lái)確定播放器是否支持播放該文件,可以識別的擴展名有wav、au、snd、mp2、mp3、m2a、swf、wma、rm等。用戶(hù)可以通過(guò)添加新的解碼器來(lái)支持更多新的文件格式。

②Construct函數。通過(guò)調用FFmpeg的一些庫函數,首先將輸入的視頻文件頭信息讀取出來(lái),接著(zhù)把視頻文件分離成音頻和視頻流,并申請音頻和視頻流的緩沖區,然后識別出音視頻解碼器。該函數同時(shí)會(huì )將用戶(hù)寫(xiě)的一些非標準函數指針賦給標準API函數,方便用戶(hù)的調用。

③FFmpegInput函數。該函數管理將對解碼出的音視頻包送入各自的FIFO隊列,同時(shí)設置了一些標志位來(lái)管理FIFO隊列,例如音視頻隊列當前的狀態(tài),當用戶(hù)拖動(dòng)進(jìn)度條進(jìn)行偏移時(shí)用戶(hù)需要有一個(gè)拖動(dòng)標志位,拖動(dòng)的長(cháng)度用來(lái)重新計算播放時(shí)間。

④FFmpegVideo以及FFmpegAudio函數。這兩個(gè)函數主要用于播放音頻流和數據流,同時(shí)有一些用于音視頻的同步控制。

⑤FFmpeg_PlayTo函數。該函數是給用戶(hù)提供的接口函數,該接口函數在DirectFB中為PlayTo。在函數中,PlayTo同時(shí)啟動(dòng)了3個(gè)線(xiàn)程,這3個(gè)線(xiàn)程分別調用了FFmpegInpuIt、FFmpegVideo、FFmpegAudio函數,用于將將音視頻送入FIFO隊列,從FIFO隊列取出數據并播放。

播放器的數據流程如圖3所示。音視頻處理過(guò)程是同步進(jìn)行的。

此外還有一些控制函數,例如文件播放PlayTo、播放停止Stop、按時(shí)間跳轉SeekTo、調整音量SetVolume、獲取音量GetVolLume、調整播放速度SetSpeed、獲取播放速度GetSpeed等函數,這些函數在construct函數中被封裝成標準接口便于用戶(hù)涮用。

3.2 Lite和fusionsound

Video接口通過(guò)調用FFmpeg對音視頻解碼進(jìn)行了有效的封裝。通過(guò)Lite,用戶(hù)與播放器實(shí)現有效交互。Lite彌補DirectFB在工具箱以及窗口管理上的不足,相比于其他的GUI,它在提供對話(huà)框和按鈕的同時(shí),資源消耗較小,適合嵌入式開(kāi)發(fā)。Fusionsound是一個(gè)DirectFB的子庫,它基于oss或者alsa驅動(dòng)。Fusionsound將音頻數據輸出到了揚聲器上,該函數庫能夠支持一些基本操作,例如WAV格式文件的播放,同時(shí)它也提供一系列的聲音播放、調節播放速度、調高音量、聲音緩沖區管理等接口。

3.3 播放器的流程

程序運行流程如圖4所示。程序首先初始化Lite以及DirectFB庫,然后初始化對話(huà)框并設置回調函數;接下來(lái)初始化一系列的按鈕,例如播放、暫停、快進(jìn)、聲音、放大、縮小等,并設置消息觸發(fā)響應函數。接著(zhù)調用DirectFB接口中的video接口播放視頻文件,然后會(huì )進(jìn)入消息循環(huán),來(lái)響應用戶(hù)各種各樣的按鍵消息。


4 實(shí)驗結果

在本實(shí)驗中,采用TI公司OMAP-L138處理器、64M的內存開(kāi)發(fā)板做實(shí)驗,內存占用約為5M左右。通過(guò)內核設置,將CPU的主頻設置為300 MHz,播放器在運行期間CPU的占用率為70%,播放畫(huà)面十分流暢。DirectFB開(kāi)發(fā)的播放器如圖5所示。


結語(yǔ)

DirectFB是一個(gè)輕量、高效的庫,但是由于缺少必要的窗口系統導致其開(kāi)發(fā)效率低。搭配由DirectFB開(kāi)發(fā)出的,能很有效地進(jìn)行基于對話(huà)框的程序開(kāi)發(fā)。因為L(cháng)ite和DirectFB本身占用的資源極少,所以十分適合嵌入式開(kāi)發(fā)。本文提供了一套嵌入式開(kāi)發(fā)播放器的新思路,通過(guò)對編解碼代碼的優(yōu)化,搭載上輕量的圖形和窗口管理系統,使其能夠適用于各種中低端場(chǎng)合。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>