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