當(dāng)前位置:首頁(yè) > 物聯(lián)網(wǎng) > 《物聯(lián)網(wǎng)技術(shù)》雜志
[導(dǎo)讀]摘要:針對(duì)傳統(tǒng)車載多媒體廣告機(jī)的局限性,提出了一種基于嵌入式Liunx與Qt/Embedded的車載多媒體廣告機(jī)的設(shè)計(jì)方案。該方案采用以ARM處理器S3C6410為核心的硬件平臺(tái)和以嵌入式Linux系統(tǒng)為核心的軟件平臺(tái),并在此基礎(chǔ)上采用開放源代碼的圖形界面庫(kù)Qt開發(fā)廣告機(jī)界面,同時(shí)利用開源播放軟件MPlayer作為播放器。經(jīng)實(shí)驗(yàn)驗(yàn)證,該多媒體廣告機(jī)具有成本較低、界面友好、反應(yīng)靈敏等特點(diǎn),并在跨平臺(tái)性、可擴(kuò)展性等方面比傳統(tǒng)方案有顯著改善。

引言

隨著科學(xué)技術(shù)的發(fā)展,越來(lái)越多的多媒體廣告機(jī)出現(xiàn)在出租車中。現(xiàn)有的出租車廣告機(jī)大多采用移動(dòng)數(shù)字電視和數(shù)字存儲(chǔ)播放兩種方式。移動(dòng)數(shù)字電視只能應(yīng)用在存在數(shù)字電視信號(hào)的地區(qū),在無(wú)信號(hào)或信號(hào)較弱的地區(qū)則無(wú)法播放,對(duì)于廣告的播出時(shí)段、播出內(nèi)容需要和廣電系統(tǒng)合作協(xié)商,導(dǎo)致效率低、成本高,而且播出的節(jié)目不能點(diǎn)播;數(shù)字存儲(chǔ)播放的方式需要將節(jié)目?jī)?nèi)容先期進(jìn)行制作,然后將節(jié)目?jī)?nèi)容刻錄成光盤或者存儲(chǔ)于播放設(shè)備的存儲(chǔ)器中,這種方式目前存在的缺點(diǎn)是節(jié)目更新較為困難、時(shí)效性較差,而且存在軟硬件成本較高的問(wèn)題%

針對(duì)現(xiàn)有的車載廣告機(jī)存在的不足,本文提出了一種新型的車載多媒體廣告機(jī)的設(shè)計(jì)方案。采用嵌入式Linux系統(tǒng)和ARM處理器S3C6410分別構(gòu)建多媒體廣告機(jī)的軟硬件平臺(tái),在此基礎(chǔ)上采用開放源代碼的圖形界面庫(kù)Qt/E設(shè)計(jì)廣告機(jī)的程序界面,在Qt設(shè)計(jì)的界面上顯示多媒體播放器MPlayer播放的視頻,結(jié)合FrameBuffer在視頻的上方和下方分別顯示Log。和字幕,最終完成應(yīng)用程序的開發(fā)。

1系統(tǒng)總體設(shè)計(jì)

車載廣告機(jī)的基本設(shè)計(jì)思想是在基于ARM的嵌入式平臺(tái)上完成多媒體文件的存儲(chǔ)、解析和處理,控制LCD模塊和音頻模塊完成多媒體廣告的播放,并采用Wi-Fi無(wú)線網(wǎng)絡(luò)完成多媒體廣告機(jī)系統(tǒng)中視頻文件的智能下載更新?;谇度胧杰洝⒂布h(huán)境,車載廣告機(jī)系統(tǒng)的整體結(jié)構(gòu)如圖1所示:

基于嵌入式Linux的車載多媒體廣告機(jī)設(shè)計(jì)

2系統(tǒng)硬件設(shè)計(jì)

車載廣告機(jī)系統(tǒng)的硬件結(jié)構(gòu)圖如圖2所示。系統(tǒng)的核心處理器采用基于ARM1176JZF-S核的S3C6410芯片,其主頻最高可達(dá)到667MHz,內(nèi)部集成了強(qiáng)大的多媒體處理單元,帶有3D圖形硬件加速器,并支持2D圖形圖像的平滑縮放等操作,有利于為用戶提供高靈敏度的汽車狀態(tài)動(dòng)態(tài)顯示;外接16GB的SD卡和2GBNANDFLASH,為多媒體文件的本地存儲(chǔ)提供了充足的硬件環(huán)境;顯示接口采用8寸TFT液晶顯示屏,處理器內(nèi)部集成的LCD控制器信號(hào)線經(jīng)過(guò)驅(qū)動(dòng)電路后即可連接LCD模塊,為多媒體廣告的顯示提供了硬件平臺(tái);外接觸摸屏,用戶可根據(jù)需要自主選擇喜愛(ài)的節(jié)目;外接音頻編解碼芯片CS42L50,為多媒體播放提供音頻支持;外接基于Marvell8686芯片的SDWi-Fi模塊,使廣告機(jī)終端能夠接入無(wú)線網(wǎng)絡(luò),連接到遠(yuǎn)端服務(wù)器,完成系統(tǒng)所需多媒體文件的智能下載更新。

基于嵌入式Linux的車載多媒體廣告機(jī)設(shè)計(jì)

3系統(tǒng)軟件設(shè)計(jì)

車載廣告機(jī)的軟件設(shè)計(jì)主要是開發(fā)基于嵌入式Linux系統(tǒng)的客戶端應(yīng)用程序。本系統(tǒng)采用嵌入式Linux作為操作系統(tǒng),在Linux平臺(tái)下編寫廣告機(jī)的驅(qū)動(dòng)程序;利用Qt/Embedded作為圖形界面解決方案實(shí)現(xiàn)廣告機(jī)的圖形界面,在此界面上顯示Mplayer播放器播放的視頻。

該系統(tǒng)軟件的開發(fā)主要有4個(gè)內(nèi)容:開發(fā)平臺(tái)的搭建、編譯Qt/Embedded庫(kù)、視頻播放器MPlayer的移植和廣告機(jī)應(yīng)用程序的實(shí)現(xiàn)。

3.1嵌入式Linux系統(tǒng)開發(fā)平臺(tái)的搭建

為了開發(fā)滿足要求的應(yīng)用程序,本文采用的軟件開發(fā)環(huán)境是VmwareWorkstation7虛擬機(jī)和Fedora9操作系統(tǒng),在此環(huán)境中安裝交叉編譯器ARM-linux-gcc4.3.2,用來(lái)完成包含相關(guān)驅(qū)動(dòng)程序的虛擬儀表系統(tǒng)內(nèi)核、QT庫(kù)和應(yīng)用程序的編譯;在Fedora9系統(tǒng)中安裝QtCreator軟件,用于完成虛擬儀表系統(tǒng)應(yīng)用程序的開發(fā);移植嵌入式設(shè)備的系統(tǒng)引導(dǎo)程序U-boot;編寫硬件平臺(tái)中音頻模塊、Wi-Fi模塊和SD卡等設(shè)備的驅(qū)動(dòng),然后裁剪編譯Linux2.6.29內(nèi)核并在其中加載已編譯的相關(guān)驅(qū)動(dòng)[5],制作硬件平臺(tái)需要的根文件系統(tǒng)。

3.2編譯Qt/Embedded庫(kù)

Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,其對(duì)象容易擴(kuò)展,可移植性較好,支持多個(gè)GUI平臺(tái)的交互開發(fā)。Qt/EmbeddedLinux是為嵌入式Linux優(yōu)化過(guò)的Qt版本,被廣泛應(yīng)用于各種嵌入式產(chǎn)品和設(shè)備當(dāng)中,其實(shí)現(xiàn)結(jié)構(gòu)如圖3所示。為了減少系統(tǒng)內(nèi)存占用量、提高系統(tǒng)性能,可以對(duì)Qt/EmbeddedLinux進(jìn)行重新裁剪編譯,去掉不需要的特性。

下載tslib1.4.tar.gz,在搭建好的開發(fā)平臺(tái)內(nèi)解壓后執(zhí)行配置、編譯和安裝命令,編譯安裝Tslib庫(kù),添加觸摸屏支持。然后通過(guò)./configure裁剪、配置Qt/Embedded庫(kù)。配置完成后采用make命令編譯,用makeinstall命令安裝Qt/EmbeddedLinux到指定的位置。

基于嵌入式Linux的車載多媒體廣告機(jī)設(shè)計(jì)

3.3移植視頻播放器MPlayer

MPlayer是一款開源的多媒體播放器,遵循GPL規(guī)范。該播放器可以在多種操作系統(tǒng)上運(yùn)行。MPlayer自帶的音頻、視頻解碼器可以支持許多流行的音頻和視頻格式。相對(duì)于其他播放器,MPlayer運(yùn)行過(guò)程中資源占用非常少,對(duì)系統(tǒng)硬件的配置要求比較低,故本系統(tǒng)采用MPlayer作為多媒體播放器。直接使用MPlayer作為播放器還可以節(jié)約開發(fā)成本,同時(shí)也增加了系統(tǒng)的可靠性[6]。

下載libmad后解壓,使用./configure配置libmad,然后分別使用make命令和makeinstall命令安裝libmad。下載解壓MPlayer源文件,使用./configure命令進(jìn)行配置,注意一定要添加一target=arm-linux,標(biāo)明為ARM平臺(tái)配置,然后使用make命令進(jìn)行編譯,使用makeinstall命令安裝至當(dāng)前目錄。生成的可執(zhí)行文件Mplayer即為MPlayer播放器,將其拷貝至開發(fā)板/bin目錄下,完成MPlayer的移植。

3.4設(shè)計(jì)廣告機(jī)應(yīng)用程序

3.4.1廣告機(jī)界面的實(shí)現(xiàn)

廣告機(jī)界面的實(shí)現(xiàn)較為簡(jiǎn)單,只需要在屏幕的右側(cè)顯示一排可以點(diǎn)擊的圖形按鈕,左側(cè)用于廣告視頻的顯示。對(duì)于圖形按鈕的設(shè)計(jì),需要首先準(zhǔn)備好每一個(gè)按鈕未點(diǎn)擊和點(diǎn)擊后的圖片素材并將他們添加到程序的資源文件advertise.qrc中,程序運(yùn)行時(shí)會(huì)加載這些圖片到內(nèi)存中,然后在窗口的paintEvent()函數(shù)中進(jìn)行按鈕的繪制,在用戶點(diǎn)擊圖形按鈕時(shí),在mousePressEvent()函數(shù)中處理按鈕的點(diǎn)擊事件;視頻采用全屏顯示,需要在main函數(shù)中,用showFullScreen()函數(shù)顯示窗口即可實(shí)現(xiàn)全屏;為了在視頻播放的同時(shí)顯示Log。和字幕,應(yīng)用程序使用了4個(gè)FrameBuffer,分別用于顯示Qt程序界面、MPlayer視頻圖像、Log。和字幕,實(shí)現(xiàn)四者的疊加顯示。

3.4.2實(shí)現(xiàn)視頻的播放

要實(shí)現(xiàn)廣告視頻文件在Qt窗口上播放,需要使用戶界面通過(guò)QProcess類啟動(dòng)一個(gè)新程序來(lái)實(shí)現(xiàn)對(duì)MPlayer的控制,如圖4所示。QProcess類使應(yīng)用程序在Qt程序中調(diào)用另外一個(gè)進(jìn)程。其實(shí)現(xiàn)代碼如下:

mplayerProcess=newQProcess(this);//創(chuàng)建一個(gè)QProcess對(duì)象

connect(mplayerProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(mplayerEnded(int,QProcess::ExitStatus)));//finished信號(hào)在MPlayer程序結(jié)束時(shí)發(fā)射,標(biāo)志著一個(gè)視頻已播放完成,用此信號(hào)可通知程序自動(dòng)播放下一個(gè)視頻,實(shí)現(xiàn)視頻的循環(huán)播放

基于嵌入式Linux的車載多媒體廣告機(jī)設(shè)計(jì)

3.4.3界面與MPlayer的交互

MPlayer與Qt4程序之間使用管道方式進(jìn)行通信,QProcess類隱藏了具體的通信細(xì)節(jié),將新建立的進(jìn)程當(dāng)做主程序的一個(gè)I/O設(shè)備,因此需要使用QProcess類提供的read()/write()函數(shù)來(lái)調(diào)用這個(gè)進(jìn)程的標(biāo)準(zhǔn)輸入/輸出[7],如下所示:

mplayerProcess->write(“quit\nv);//通知MPlayer退出

當(dāng)QProcess啟動(dòng)MPlayer后,應(yīng)用程序可以將控制命令寫入MPlayer的標(biāo)準(zhǔn)輸入,MPlayer從標(biāo)準(zhǔn)輸入讀到數(shù)據(jù)后會(huì)執(zhí)行相應(yīng)的功能。其實(shí)現(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。);//計(jì)算顯示視頻的區(qū)域

args<<screenRect;//位置傳遞

args<<"-slave";//使用MPlayer的slave模式,在此模式下,MPlayer在運(yùn)行過(guò)程中能夠接收用戶的輸入命令。

m_mplayerProcess->start(MPLAYER_PATH,args);//寫入命令

3.4.4視頻文件的更新

應(yīng)用程序通過(guò)廣告機(jī)內(nèi)置的無(wú)線網(wǎng)卡訪問(wèn)遠(yuǎn)程服務(wù)器即可實(shí)現(xiàn)廣告視頻文件的更新。廣告機(jī)終端在系統(tǒng)開機(jī)運(yùn)行時(shí)通過(guò)QThread類新建一個(gè)線程,通過(guò)無(wú)線網(wǎng)卡定期向遠(yuǎn)程服務(wù)器查詢是否需要更新視頻文件,在廣告機(jī)準(zhǔn)備好更新時(shí),服務(wù)器通過(guò)無(wú)線網(wǎng)可將封裝后的視頻發(fā)送到無(wú)線局域網(wǎng)中去。接收端系統(tǒng)通過(guò)驅(qū)動(dòng)程序接收數(shù)據(jù)包,進(jìn)行解封裝得到需要更新的視頻目錄和視頻數(shù)據(jù),終端則根據(jù)更新目錄進(jìn)行視頻文件的刪除或下載等操作。其實(shí)現(xiàn)代碼如下:

classDownLoad:publicQThread

{Q_OBJECTprotected:voidrun();//開機(jī)即開啟一個(gè)QTimer定時(shí)器,定時(shí)向遠(yuǎn)程服務(wù)器查詢是否需要更新視頻文件。

signals:voidupDates();//在需要進(jìn)行視頻更新時(shí),以信號(hào)與槽(signals/slot)的方式,通知主程序進(jìn)行視頻文件的更新。

3.4.5畫面閃爍問(wèn)題的解決

畫面的動(dòng)態(tài)刷新顯示,會(huì)使屏幕出現(xiàn)閃爍。本設(shè)計(jì)釆用雙緩沖機(jī)制解決畫面閃爍的問(wèn)題,將整個(gè)窗口部件在屏幕外的像素映射中繪制,然后把這個(gè)像素映射復(fù)制到顯示窗口中叫其實(shí)現(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());//對(duì)像素映射中繪制矩形的畫筆進(jìn)行坐標(biāo)轉(zhuǎn)換

bitBlt(this,rect.x(),rect.y(),&pixmap,0,0,rect.width(),rect.height());//利用bitBlt()把像素映射復(fù)制到顯示窗口部件上}

4運(yùn)行發(fā)布程序

將裁剪、編譯過(guò)的內(nèi)核與制作的帶QT庫(kù)的文件系統(tǒng)燒寫到開發(fā)板。在開發(fā)環(huán)境內(nèi)交叉編譯編寫的應(yīng)用程序,得到可執(zhí)行二進(jìn)制文件,將此文件移植到開發(fā)板,即可實(shí)現(xiàn)應(yīng)用程序的發(fā)布。重新開機(jī),運(yùn)行應(yīng)用程序即可啟動(dòng)廣告機(jī),其啟動(dòng)后的畫面如圖5所示。

基于嵌入式Linux的車載多媒體廣告機(jī)設(shè)計(jì)

5結(jié)語(yǔ)

本文提出了一種新型的車載多媒體廣告機(jī)的設(shè)計(jì)方案,以ARM和嵌入式Linux為基礎(chǔ)平臺(tái),通過(guò)定制移植QT和MPlayer并設(shè)計(jì)應(yīng)用程序?qū)崿F(xiàn)多媒體廣告機(jī)系統(tǒng)的設(shè)計(jì)。通過(guò)本設(shè)計(jì)方案設(shè)計(jì)的廣告機(jī),采用開放源代碼軟件設(shè)計(jì),使系統(tǒng)的成本降低,同時(shí)采用雙緩沖技術(shù)消除頁(yè)面閃爍,使其更具有市場(chǎng)競(jìng)爭(zhēng)力;采用Qt插件的方式設(shè)計(jì)系統(tǒng)的各個(gè)模塊,增強(qiáng)了系統(tǒng)的可擴(kuò)展性和可定制性;通過(guò)Wi-Fi與服務(wù)器交互實(shí)現(xiàn)視頻文件的更新,解決了大批量設(shè)備同時(shí)進(jìn)行大容量視頻數(shù)據(jù)更新的問(wèn)題,提高了更新速度。經(jīng)實(shí)驗(yàn)測(cè)試,該系統(tǒng)所有功能模塊都能正常運(yùn)行,達(dá)到了預(yù)期的效果,隨著信息化的發(fā)展,有著廣闊的前景。

20211120_6197d6ce9384e__基于嵌入式Linux的車載多媒體廣告機(jī)設(shè)計(jì)

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉