洪耀球,胡繼平,陳玉明
HONG Yao-qiu,HU Ji-ping,CHEN Yu-ming
(景德鎮(zhèn)高等??茖W(xué)校 數(shù)學(xué)與信息工程系,景德鎮(zhèn) 333000)
隨著我國(guó)經(jīng)濟(jì)的騰飛,人民生活水平的不斷提高,我國(guó)汽車保有量迅速攀升,汽車保有量的提高同時(shí)帶動(dòng)了汽車相關(guān)附屬品需求量的增大,尤其是車載影音設(shè)備。車載影音設(shè)備,這一車內(nèi)娛樂系統(tǒng)漸漸將成為一輛汽車中不可或缺一部分。開車聽歌已經(jīng)成為一種時(shí)尚,一種潮流。乘車人也可在車上看電影,放松精神,消除坐車的疲憊。一款時(shí)尚的車載媒體設(shè)備會(huì)成為個(gè)性車主的汽車飾品。相對(duì)于傳統(tǒng)的車載播放器,新型的車載影音設(shè)備從各個(gè)方面進(jìn)行了改進(jìn),功能上出來常見的影音播放外,增加了實(shí)用性很強(qiáng)的倒車視頻監(jiān)控功能以及防疲勞駕駛的定時(shí)報(bào)警功能,另外還增加了電子書閱讀和電子相冊(cè)等附屬功能。
1.1 硬件平臺(tái)選擇
本系統(tǒng)三星S3C2440(ARM9)處理器作為硬件平臺(tái)核心,ARM9系列具有良好的性能,能夠流暢的進(jìn)行音樂、視頻的播放,其低功耗性也能為車載平臺(tái)提供良好的續(xù)航能力。由于要用于視頻播放,所以需要一個(gè)相對(duì)較為寬大的屏幕,我們將用戶的輸入設(shè)備定位為觸摸屏,決定選取480像素*272像素的觸摸屏,綜合以上條件選取TQ2440平臺(tái)為開發(fā)硬件載體。在倒車視頻方面,為了具有更好的通用性,方便用戶更換,選取市場(chǎng)常見的USB攝像頭作為視頻捕捉設(shè)備,最后選定由集成了中微星(ZC3XX)芯片的USB攝像頭作為倒車視頻輸入設(shè)備。
1.2 開發(fā)環(huán)境選擇
在軟件平臺(tái)選取上,選擇了Linux嵌入式操作系統(tǒng)作為軟件開發(fā)平臺(tái),Linux為開源平臺(tái),在開發(fā)成本上較為低廉,同時(shí)Linux具有豐富硬件驅(qū)動(dòng),對(duì)于USB攝像頭、SD閃存等設(shè)備支持良好,最重要的是Linux平臺(tái)的可裁剪性,通過對(duì)內(nèi)核和硬件驅(qū)動(dòng)的裁剪,可以實(shí)現(xiàn)系統(tǒng)的小巧化。圖形界面方面,選取了諾基亞公司的Qt圖形界面開發(fā)框架,進(jìn)行用戶交互圖形界面的開發(fā)。Qt擁有良好的跨平臺(tái)性,具有專門用于嵌入式Linux的版本,在嵌入式環(huán)境下Qt直接訪問Frame Buffer,執(zhí)行效率高,而且Qt具有豐富的類庫,通過調(diào)用API可實(shí)現(xiàn)設(shè)計(jì)的全部功能。
1.3 系統(tǒng)功能整體規(guī)劃
基于S3C2440(AM9)的車載影音系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)功能:支持多種格式的音頻、視頻文件的媒體播放功能,倒車視頻功能,防瞌睡定時(shí)提醒功能、TXT文本閱讀功能、相冊(cè)功能。
根據(jù)設(shè)計(jì)功能將整體設(shè)計(jì)分為三大部分(如圖1所示)。
1)影音基本功能部分,此部分為音樂播放、視頻播放兩個(gè)模塊;
2)特色功能部分,此部分分為倒車視頻、定時(shí)提醒兩個(gè)模塊;
3)附加功能部分,此部分分為TXT閱讀器、電子相冊(cè)兩個(gè)模塊;
圖1 整體設(shè)計(jì)框圖
圖2 系統(tǒng)運(yùn)行效果圖
2.1 音樂播放器模塊
音樂播放器的實(shí)現(xiàn)利用了Qt類庫中QProcess類。通過這個(gè)類調(diào)用Mplayer播放器,使用QProcess類中的write()、readLine()這兩個(gè)方法與Mplayer進(jìn)行管道通信,實(shí)現(xiàn)對(duì)Mplayer的控制。主要用到的類還有QPushButton,QTimer,QSlider等。通過點(diǎn)擊不同的QPushButton的實(shí)例所發(fā)出的clicked()信號(hào)和相應(yīng)的槽相聯(lián)實(shí)現(xiàn)相應(yīng)的功能,這些槽實(shí)現(xiàn)的功能有:播放/暫停,快進(jìn)/快退,調(diào)節(jié)音量 ,停止等。另外,音樂播放器還有上一曲/下一曲,播放模式的切換(如圖3所示)。
1)與Mplayer的交互:對(duì)Mplayer的控制主要是通過QProcess類的write()方法向Mplayer發(fā)送命令,Mplayer得到命令后執(zhí)行相應(yīng)的操作,對(duì)于Mplayer的輸出進(jìn)行如下處理:Mplayer的輸出被QProcess捕獲,每捕獲一行,QProcess就將捕獲到信息寫進(jìn)QProcess輸出緩沖隊(duì)列中,然后發(fā)送一個(gè)readyReadStandardOutput()信號(hào)通知應(yīng)用程序有輸出可以提取,最后應(yīng)用程序通過readLine()方法從QProcess的輸出緩沖隊(duì)列中讀取一行輸出。
圖3 音樂播放模塊流程
2)播放控制:播放開始時(shí),讀取播放文件的播放時(shí)間長(zhǎng)度并將這個(gè)時(shí)間值設(shè)定位QSlider滑動(dòng)塊類的最大值,然后通過Qtimer類的實(shí)例定期的發(fā)送timeOut()信號(hào),將這個(gè)信號(hào)和特定的槽相聯(lián),此功能槽調(diào)用QProcess的write()方法向Mplayer播放器發(fā)送命令,當(dāng)QProcess將Mplayer的輸出數(shù)據(jù)收集完畢后,發(fā)送readyReadStandardOutput()信號(hào)來調(diào)用用于解析輸出的槽函數(shù)獲得Mplayer播放器當(dāng)前的時(shí)間,并將當(dāng)前時(shí)間值傳給滑動(dòng)塊實(shí)現(xiàn)播放進(jìn)度條。
3)播放列表的實(shí)現(xiàn):在啟動(dòng)播放器前先遍歷特定的目錄,獲取目錄下的文件名稱并添加到QStringList實(shí)例中,然后結(jié)合QListWidget類制作成播放列表。播放模式共有四種:?jiǎn)吻シ拧吻h(huán)、列表循環(huán)、隨機(jī)播放。這四種播放由一個(gè)整形變量來表示,每次播放完一首歌曲之后QProcess就會(huì)發(fā)送一個(gè)finished(int,QProcess::Exit Status)信號(hào),將這個(gè)信號(hào)和相應(yīng)槽鏈接在一起,這個(gè)槽實(shí)現(xiàn)播放下一曲的功能,在播放前先檢查播放模式以確定下一曲的文件名。播放/暫停,快進(jìn)/快退,調(diào)節(jié)音量,停止這幾項(xiàng)功能均利用QPushButton實(shí)現(xiàn),當(dāng)一個(gè)QPushButton被點(diǎn)擊時(shí)就會(huì)發(fā)送一個(gè)clicked()信號(hào),與其對(duì)應(yīng)的槽就會(huì)向Mplayer發(fā)送相應(yīng)的命令,實(shí)現(xiàn)相應(yīng)功能。
2.2 視頻播放器模塊
圖4 視頻播放模塊流程
視頻播放器的實(shí)現(xiàn)是利用QProcess和Mplayer的slave模式實(shí)現(xiàn)的。首先是利用QDir類、QStringList類和QListWidget類將指定目錄下的視頻文件做成文件列表的形式,然后為每個(gè)列表項(xiàng)的itemDoubleClicked(QListWidgetItem *)信號(hào)設(shè)計(jì)一個(gè)槽,并且將這個(gè)槽和itemDoubleClicked(QLis tWidgetItem *)信號(hào)連接在一起。當(dāng)列表項(xiàng)被雙擊之后就激發(fā)列表項(xiàng)的itemDoubleClicked(QListWid getItem *)信號(hào),此時(shí)與這個(gè)信號(hào)相聯(lián)的槽就會(huì)被調(diào)用,在這個(gè)槽里面可以啟動(dòng)QProcess播放選中的視頻文件。在播放的同時(shí)就會(huì)出現(xiàn)相應(yīng)的控制按鈕,用來控制視頻播放的進(jìn)度。這些控制功能的實(shí)現(xiàn)是利用QPushButton類,通過QPushButton類發(fā)送的clicked()信號(hào)來調(diào)用實(shí)現(xiàn)相關(guān)功能的槽。在播放結(jié)束后QProcess就會(huì)發(fā)送一個(gè)finished(int,QProc ess::ExitStatus),然后設(shè)計(jì)一個(gè)與這個(gè)信號(hào)相聯(lián)的槽,在這個(gè)槽里面釋放Mplayer播放上次所占用的資源并返回文件列表。
2.3 倒車視頻模塊
在視頻的獲取方面通過調(diào)用Linux中的Vidoe4Linux視頻接口訪問USB攝像頭驅(qū)動(dòng)。所用到Video4Linux提供的結(jié)構(gòu)體有,video_capability用于設(shè)定攝像頭的基本信息、vidoe_picture用于設(shè)定采集圖像的各種屬性、vidoe_windows用于設(shè)定采集圖片的坐標(biāo)和大小。采集方式為內(nèi)存地址映射,主要用到video_mbuf和video_mmap結(jié)構(gòu)體,通過調(diào)用Linux系統(tǒng)調(diào)用mmap進(jìn)行內(nèi)存地址映射。讀取視頻數(shù)據(jù)采用的方法是雙緩沖技術(shù),即一幀圖片采集時(shí),另一幀圖片進(jìn)行顯示。具體采集過程如下:
1)打開USB攝像頭設(shè)備
2)設(shè)定video_picture圖片色彩、對(duì)比度等信息
3)內(nèi)存地址映射,將內(nèi)存映射地址與video_ mbuf綁定。
4)開始采集,同步,等待一幀采集的結(jié)束。
5)采集的數(shù)據(jù)傳送給前臺(tái)顯示程序。
圖5 倒車視頻模塊流程
視頻顯示時(shí),使用Qt中的QImage類讀取內(nèi)存中由視頻獲取使程序傳遞來的圖像信息,利用QTimer定時(shí)器定時(shí)循環(huán)激活QWidget中的PaintEvent事件,通過Painter類中的paintImage函數(shù)將圖片顯示在指定坐標(biāo)區(qū)域內(nèi),同時(shí)通知視頻獲取程序獲取下一幀信息,如此循環(huán),實(shí)現(xiàn)倒車視頻的顯示。運(yùn)行流程如圖5所示。
2.4 定時(shí)提醒模塊
圖6 定時(shí)提醒模塊流程
定時(shí)提醒的實(shí)現(xiàn)方法為使用定時(shí)器進(jìn)行周期性的循環(huán)播放音樂。運(yùn)行流程見圖3-4具體實(shí)現(xiàn)利用Qt中的Qtimer類進(jìn)行定時(shí),QTimer類為Qt的定時(shí)器類,對(duì)其初始化一個(gè)時(shí)間量后其可以實(shí)現(xiàn)倒計(jì)時(shí)功能。在用戶輸入周期時(shí)間并開啟定時(shí)提醒后,程序會(huì)通過一個(gè)啟動(dòng)信號(hào)激活Qtimer類開始進(jìn)行倒計(jì)時(shí),當(dāng)Qtimer類倒計(jì)時(shí)減為0時(shí),會(huì)通過信號(hào)和槽的機(jī)制發(fā)送一個(gè)信號(hào)給已構(gòu)造好的槽函數(shù),此函數(shù)功能為調(diào)用后臺(tái)的mplayer播放提醒音樂并重新對(duì)QTimer類進(jìn)行賦值,使其從新進(jìn)行倒計(jì)時(shí),如此循環(huán),實(shí)現(xiàn)了定時(shí)播放音樂進(jìn)行提醒的功能。
2.5 TXT文本閱讀器
圖7 TXT閱讀器流程
TXT閱讀器功能為一個(gè)可以加載TXT格式文本并顯示的電子書閱讀器。主要使用Qt類庫中的QTextEdit類作為文本顯示的載體,將QTextEdit類屬性置為只讀,屏蔽QTextEdit的編輯功能,只是使用其文本的顯示和文本屬性設(shè)置的功能。TXT文本閱讀器模塊運(yùn)行流程如圖7所示。在文件選擇器中,使用QDir和QListWidget類,利用QDir類讀取文本文件夾路徑下的文件,并使用“*.txt”過濾字符串對(duì)文件名進(jìn)行過濾,只讀取TXT文檔的文件名并將返回值傳送給QListWidget類;QListWidget類為可選擇列表類,使用QListWidget類顯示由QDir類返回的文本名列表,供用戶選擇要閱讀的文本。當(dāng)用戶選擇某一文件時(shí),QListWidget將文件已選擇信號(hào)發(fā)送給openfile槽函數(shù),openfile函數(shù)使用QFile類接收已選文件的文件名,再利用QTextStream類讀取文件中的內(nèi)容,最后使用QTextEdit中的setText方法使QTextEdit顯示所選文件的文字內(nèi)容。
圖8 電子相冊(cè)模塊流程
利用Qt類庫中的QColorDialog顏色選擇對(duì)話框?qū)崿F(xiàn)字體與背景顏色改變的功能,QColorDialo提供給用戶顏色選擇界面,并把用戶選擇的顏色返回給QTextEdit,QTextEdit最終利用Qt類庫中QPalette調(diào)色板類設(shè)置文字顏色和背景顏色,達(dá)到顏色的改變效果。
2.6 電子相冊(cè)
電子相冊(cè)功能的實(shí)現(xiàn)主要是利用Qt類庫中的QPixmap類,QPixmap為2D圖形界面類,使用QPixmap顯示圖片可以方便的調(diào)整顯示大小,并利用QPainter中的drawPixmap方法繪制到電子相冊(cè)界面上,進(jìn)行圖片顯示,實(shí)現(xiàn)圖片顯示功能。同時(shí)對(duì)圖片顯示位置添加鼠標(biāo)事件響應(yīng)QMouseEvent,當(dāng)鼠標(biāo)在圖片矩陣內(nèi)點(diǎn)擊時(shí),對(duì)此鼠標(biāo)事件進(jìn)行響應(yīng),進(jìn)入圖片瀏覽模式。圖片瀏覽模式是利用QPushButton按鈕類,響應(yīng)按鈕按下事件,按照字母順序讀取圖片目錄下的下一個(gè)圖片文件,并加載到電子相冊(cè)窗口中進(jìn)行顯示,實(shí)現(xiàn)圖片的切換和瀏覽功能。讀取圖片目錄中文件信息時(shí)同樣使用了QDir類。電子相冊(cè)運(yùn)行流程如圖8所示。
本系統(tǒng)在設(shè)計(jì)方面,人性化設(shè)計(jì)是本系統(tǒng)的特色:
1)操作界面設(shè)定為觸摸屏,操作界面直觀;
2)按鈕大小與手指尖接近,操作方便。
在功能方面最大的特色在于以下兩相功能:
1)倒車視頻模塊
道路上的汽車越來越多也越來越大,目前對(duì)很多大型的車輛來說倒車是一件很麻煩的是,像拖車、長(zhǎng)途大巴等等那些特別長(zhǎng)的汽車駕駛員根本看不見后面倒車時(shí)很容易出現(xiàn)事故。倒車視頻主要是解決這樣的問題,為司機(jī)朋友,倒車提供了方便。
2)定時(shí)提醒模塊
定時(shí)提醒功能,是針對(duì)開車疲勞易引發(fā)交通事故這一現(xiàn)象設(shè)計(jì)的,對(duì)那些夜間駕車的駕駛員來說由于過度疲勞可能會(huì)注意力不集中,我們的定時(shí)提醒功能可以定時(shí)的放出一段聲音用來提醒駕駛員朋友們。
[1]蔡志明,等.精通Qt4編程[M].電子工業(yè)出版社,2008.
[2]華清遠(yuǎn)見嵌入式培訓(xùn)中心.嵌入式Linux應(yīng)用程序開發(fā)[M].人民郵電出版社,2010.
[3]任宏.車載視頻播放系統(tǒng)的設(shè)計(jì)[D].中國(guó)優(yōu)秀碩士學(xué)位論文全文數(shù)據(jù)庫.
[4]李昔華,丁明勇,李德文.基于嵌入式平臺(tái)的車載數(shù)碼系統(tǒng)[J].重慶工商大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,(02).
[5]劉步中,張曦煌,王慶磊,等.基于嵌入式Linux的視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,(08).