基于嵌入式Linux的車載多媒體廣告機設(shè)計
引言
隨著科學(xué)技術(shù)的發(fā)展,越來越多的多媒體廣告機出現(xiàn)在出租車中?,F(xiàn)有的出租車廣告機大多采用移動數(shù)字電視和數(shù)字存儲播放兩種方式。移動數(shù)字電視只能應(yīng)用在存在數(shù)字電視信號的地區(qū),在無信號或信號較弱的地區(qū)則無法播放,對于廣告的播出時段、播出內(nèi)容需要和廣電系統(tǒng)合作協(xié)商,導(dǎo)致效率低、成本高,而且播出的節(jié)目不能點播;數(shù)字存儲播放的方式需要將節(jié)目內(nèi)容先期進(jìn)行制作,然后將節(jié)目內(nèi)容刻錄成光盤或者存儲于播放設(shè)備的存儲器中,這種方式目前存在的缺點是節(jié)目更新較為困難、時效性較差,而且存在軟硬件成本較高的問題%
針對現(xiàn)有的車載廣告機存在的不足,本文提出了一種新型的車載多媒體廣告機的設(shè)計方案。采用嵌入式Linux系統(tǒng)和ARM處理器S3C6410分別構(gòu)建多媒體廣告機的軟硬件平臺,在此基礎(chǔ)上采用開放源代碼的圖形界面庫Qt/E設(shè)計廣告機的程序界面,在Qt設(shè)計的界面上顯示多媒體播放器MPlayer播放的視頻,結(jié)合FrameBuffer在視頻的上方和下方分別顯示Log。和字幕,最終完成應(yīng)用程序的開發(fā)。
1系統(tǒng)總體設(shè)計
車載廣告機的基本設(shè)計思想是在基于ARM的嵌入式平臺上完成多媒體文件的存儲、解析和處理,控制LCD模塊和音頻模塊完成多媒體廣告的播放,并采用Wi-Fi無線網(wǎng)絡(luò)完成多媒體廣告機系統(tǒng)中視頻文件的智能下載更新?;谇度胧杰?、硬件環(huán)境,車載廣告機系統(tǒng)的整體結(jié)構(gòu)如圖1所示:
2系統(tǒng)硬件設(shè)計
車載廣告機系統(tǒng)的硬件結(jié)構(gòu)圖如圖2所示。系統(tǒng)的核心處理器采用基于ARM1176JZF-S核的S3C6410芯片,其主頻最高可達(dá)到667MHz,內(nèi)部集成了強大的多媒體處理單元,帶有3D圖形硬件加速器,并支持2D圖形圖像的平滑縮放等操作,有利于為用戶提供高靈敏度的汽車狀態(tài)動態(tài)顯示;外接16GB的SD卡和2GBNANDFLASH,為多媒體文件的本地存儲提供了充足的硬件環(huán)境;顯示接口采用8寸TFT液晶顯示屏,處理器內(nèi)部集成的LCD控制器信號線經(jīng)過驅(qū)動電路后即可連接LCD模塊,為多媒體廣告的顯示提供了硬件平臺;外接觸摸屏,用戶可根據(jù)需要自主選擇喜愛的節(jié)目;外接音頻編解碼芯片CS42L50,為多媒體播放提供音頻支持;外接基于Marvell8686芯片的SDWi-Fi模塊,使廣告機終端能夠接入無線網(wǎng)絡(luò),連接到遠(yuǎn)端服務(wù)器,完成系統(tǒng)所需多媒體文件的智能下載更新。
3系統(tǒng)軟件設(shè)計
車載廣告機的軟件設(shè)計主要是開發(fā)基于嵌入式Linux系統(tǒng)的客戶端應(yīng)用程序。本系統(tǒng)采用嵌入式Linux作為操作系統(tǒng),在Linux平臺下編寫廣告機的驅(qū)動程序;利用Qt/Embedded作為圖形界面解決方案實現(xiàn)廣告機的圖形界面,在此界面上顯示Mplayer播放器播放的視頻。
該系統(tǒng)軟件的開發(fā)主要有4個內(nèi)容:開發(fā)平臺的搭建、編譯Qt/Embedded庫、視頻播放器MPlayer的移植和廣告機應(yīng)用程序的實現(xiàn)。
3.1嵌入式Linux系統(tǒng)開發(fā)平臺的搭建
為了開發(fā)滿足要求的應(yīng)用程序,本文采用的軟件開發(fā)環(huán)境是VmwareWorkstation7虛擬機和Fedora9操作系統(tǒng),在此環(huán)境中安裝交叉編譯器ARM-linux-gcc4.3.2,用來完成包含相關(guān)驅(qū)動程序的虛擬儀表系統(tǒng)內(nèi)核、QT庫和應(yīng)用程序的編譯;在Fedora9系統(tǒng)中安裝QtCreator軟件,用于完成虛擬儀表系統(tǒng)應(yīng)用程序的開發(fā);移植嵌入式設(shè)備的系統(tǒng)引導(dǎo)程序U-boot;編寫硬件平臺中音頻模塊、Wi-Fi模塊和SD卡等設(shè)備的驅(qū)動,然后裁剪編譯Linux2.6.29內(nèi)核并在其中加載已編譯的相關(guān)驅(qū)動[5],制作硬件平臺需要的根文件系統(tǒng)。
3.2編譯Qt/Embedded庫
Qt是一個跨平臺的C++圖形用戶界面應(yīng)用程序框架,其對象容易擴展,可移植性較好,支持多個GUI平臺的交互開發(fā)。Qt/EmbeddedLinux是為嵌入式Linux優(yōu)化過的Qt版本,被廣泛應(yīng)用于各種嵌入式產(chǎn)品和設(shè)備當(dāng)中,其實現(xiàn)結(jié)構(gòu)如圖3所示。為了減少系統(tǒng)內(nèi)存占用量、提高系統(tǒng)性能,可以對Qt/EmbeddedLinux進(jìn)行重新裁剪編譯,去掉不需要的特性。
下載tslib1.4.tar.gz,在搭建好的開發(fā)平臺內(nèi)解壓后執(zhí)行配置、編譯和安裝命令,編譯安裝Tslib庫,添加觸摸屏支持。然后通過./configure裁剪、配置Qt/Embedded庫。配置完成后采用make命令編譯,用makeinstall命令安裝Qt/EmbeddedLinux到指定的位置。
3.3移植視頻播放器MPlayer
MPlayer是一款開源的多媒體播放器,遵循GPL規(guī)范。該播放器可以在多種操作系統(tǒng)上運行。MPlayer自帶的音頻、視頻解碼器可以支持許多流行的音頻和視頻格式。相對于其他播放器,MPlayer運行過程中資源占用非常少,對系統(tǒng)硬件的配置要求比較低,故本系統(tǒng)采用MPlayer作為多媒體播放器。直接使用MPlayer作為播放器還可以節(jié)約開發(fā)成本,同時也增加了系統(tǒng)的可靠性[6]。
下載libmad后解壓,使用./configure配置libmad,然后分別使用make命令和makeinstall命令安裝libmad。下載解壓MPlayer源文件,使用./configure命令進(jìn)行配置,注意一定要添加一target=arm-linux,標(biāo)明為ARM平臺配置,然后使用make命令進(jìn)行編譯,使用makeinstall命令安裝至當(dāng)前目錄。生成的可執(zhí)行文件Mplayer即為MPlayer播放器,將其拷貝至開發(fā)板/bin目錄下,完成MPlayer的移植。
3.4設(shè)計廣告機應(yīng)用程序
3.4.1廣告機界面的實現(xiàn)
廣告機界面的實現(xiàn)較為簡單,只需要在屏幕的右側(cè)顯示一排可以點擊的圖形按鈕,左側(cè)用于廣告視頻的顯示。對于圖形按鈕的設(shè)計,需要首先準(zhǔn)備好每一個按鈕未點擊和點擊后的圖片素材并將他們添加到程序的資源文件advertise.qrc中,程序運行時會加載這些圖片到內(nèi)存中,然后在窗口的paintEvent()函數(shù)中進(jìn)行按鈕的繪制,在用戶點擊圖形按鈕時,在mousePressEvent()函數(shù)中處理按鈕的點擊事件;視頻采用全屏顯示,需要在main函數(shù)中,用showFullScreen()函數(shù)顯示窗口即可實現(xiàn)全屏;為了在視頻播放的同時顯示Log。和字幕,應(yīng)用程序使用了4個FrameBuffer,分別用于顯示Qt程序界面、MPlayer視頻圖像、Log。和字幕,實現(xiàn)四者的疊加顯示。
3.4.2實現(xiàn)視頻的播放
要實現(xiàn)廣告視頻文件在Qt窗口上播放,需要使用戶界面通過QProcess類啟動一個新程序來實現(xiàn)對MPlayer的控制,如圖4所示。QProcess類使應(yīng)用程序在Qt程序中調(diào)用另外一個進(jìn)程。其實現(xiàn)代碼如下:
mplayerProcess=newQProcess(this);//創(chuàng)建一個QProcess對象
connect(mplayerProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(mplayerEnded(int,QProcess::ExitStatus)));//finished信號在MPlayer程序結(jié)束時發(fā)射,標(biāo)志著一個視頻已播放完成,用此信號可通知程序自動播放下一個視頻,實現(xiàn)視頻的循環(huán)播放
3.4.3界面與MPlayer的交互
MPlayer與Qt4程序之間使用管道方式進(jìn)行通信,QProcess類隱藏了具體的通信細(xì)節(jié),將新建立的進(jìn)程當(dāng)做主程序的一個I/O設(shè)備,因此需要使用QProcess類提供的read()/write()函數(shù)來調(diào)用這個進(jìn)程的標(biāo)準(zhǔn)輸入/輸出[7],如下所示:
mplayerProcess->write(“quit\nv);//通知MPlayer退出
當(dāng)QProcess啟動MPlayer后,應(yīng)用程序可以將控制命令寫入MPlayer的標(biāo)準(zhǔn)輸入,MPlayer從標(biāo)準(zhǔn)輸入讀到數(shù)據(jù)后會執(zhí)行相應(yīng)的功能。其實現(xiàn)代碼如下:
QStringListargs;
args<<v-framebuffer-indexv<<”1”;//MPlayer不支持將視頻顯示在Qt/E的串口上,而是直接顯示在FrameBuffer上,在這里結(jié)合多FrameBuffer特性,以及screenrect參數(shù),將視頻定位到Qt繪制的窗口的劃定區(qū)域上面
QStringscreenRect=QString("%1,%2,%3,%4").arg(m_videoWindowRect.left()).arg(m_videoWindowRect.top()).arg(m_videoWindowRect.width()).arg(m_videoWindowRect.height。);//計算顯示視頻的區(qū)域
args<<screenRect;//位置傳遞
args<<"-slave";//使用MPlayer的slave模式,在此模式下,MPlayer在運行過程中能夠接收用戶的輸入命令。
m_mplayerProcess->start(MPLAYER_PATH,args);//寫入命令
3.4.4視頻文件的更新
應(yīng)用程序通過廣告機內(nèi)置的無線網(wǎng)卡訪問遠(yuǎn)程服務(wù)器即可實現(xiàn)廣告視頻文件的更新。廣告機終端在系統(tǒng)開機運行時通過QThread類新建一個線程,通過無線網(wǎng)卡定期向遠(yuǎn)程服務(wù)器查詢是否需要更新視頻文件,在廣告機準(zhǔn)備好更新時,服務(wù)器通過無線網(wǎng)可將封裝后的視頻發(fā)送到無線局域網(wǎng)中去。接收端系統(tǒng)通過驅(qū)動程序接收數(shù)據(jù)包,進(jìn)行解封裝得到需要更新的視頻目錄和視頻數(shù)據(jù),終端則根據(jù)更新目錄進(jìn)行視頻文件的刪除或下載等操作。其實現(xiàn)代碼如下:
classDownLoad:publicQThread
{Q_OBJECTprotected:voidrun();//開機即開啟一個QTimer定時器,定時向遠(yuǎn)程服務(wù)器查詢是否需要更新視頻文件。
signals:voidupDates();//在需要進(jìn)行視頻更新時,以信號與槽(signals/slot)的方式,通知主程序進(jìn)行視頻文件的更新。
3.4.5畫面閃爍問題的解決
畫面的動態(tài)刷新顯示,會使屏幕出現(xiàn)閃爍。本設(shè)計釆用雙緩沖機制解決畫面閃爍的問題,將整個窗口部件在屏幕外的像素映射中繪制,然后把這個像素映射復(fù)制到顯示窗口中叫其實現(xiàn)代碼如下:
voidMainwidow::paintEvent(QPaintEvent*event)
{??????
QsizenewSize=rect.size().expandedTo(pixmap.size());//創(chuàng)建至少和所繪區(qū)域一樣大的繪圖緩沖
QPainterpainter(&pixmap,this);//創(chuàng)建操作像素映射的QPainter
Painter.translate.(-rect.x(),-rect.y());//對像素映射中繪制矩形的畫筆進(jìn)行坐標(biāo)轉(zhuǎn)換
bitBlt(this,rect.x(),rect.y(),&pixmap,0,0,rect.width(),rect.height());//利用bitBlt()把像素映射復(fù)制到顯示窗口部件上}
4運行發(fā)布程序
將裁剪、編譯過的內(nèi)核與制作的帶QT庫的文件系統(tǒng)燒寫到開發(fā)板。在開發(fā)環(huán)境內(nèi)交叉編譯編寫的應(yīng)用程序,得到可執(zhí)行二進(jìn)制文件,將此文件移植到開發(fā)板,即可實現(xiàn)應(yīng)用程序的發(fā)布。重新開機,運行應(yīng)用程序即可啟動廣告機,其啟動后的畫面如圖5所示。
5結(jié)語
本文提出了一種新型的車載多媒體廣告機的設(shè)計方案,以ARM和嵌入式Linux為基礎(chǔ)平臺,通過定制移植QT和MPlayer并設(shè)計應(yīng)用程序?qū)崿F(xiàn)多媒體廣告機系統(tǒng)的設(shè)計。通過本設(shè)計方案設(shè)計的廣告機,采用開放源代碼軟件設(shè)計,使系統(tǒng)的成本降低,同時采用雙緩沖技術(shù)消除頁面閃爍,使其更具有市場競爭力;采用Qt插件的方式設(shè)計系統(tǒng)的各個模塊,增強了系統(tǒng)的可擴展性和可定制性;通過Wi-Fi與服務(wù)器交互實現(xiàn)視頻文件的更新,解決了大批量設(shè)備同時進(jìn)行大容量視頻數(shù)據(jù)更新的問題,提高了更新速度。經(jīng)實驗測試,該系統(tǒng)所有功能模塊都能正常運行,達(dá)到了預(yù)期的效果,隨著信息化的發(fā)展,有著廣闊的前景。
20211120_6197d6ce9384e__基于嵌入式Linux的車載多媒體廣告機設(shè)計