馮新宇
(黑龍江科技學(xué)院 電氣與信息工程學(xué)院,哈爾濱 150027)
嵌入式Linux多媒體播放器的改進(jìn)及實(shí)現(xiàn)
馮新宇
(黑龍江科技學(xué)院 電氣與信息工程學(xué)院,哈爾濱 150027)
針對(duì)現(xiàn)有播放器的功能,以目前流行的嵌入式 Linux操作系統(tǒng)及 Qtopia環(huán)境下的開(kāi)源多媒體播放器代碼為基礎(chǔ),改進(jìn)原播放器源碼,實(shí)現(xiàn)了支持包含MP3音頻文件和MPEG4視頻文件播放的媒體播放器及文件加載模塊的多媒體文件瀏覽功能,通過(guò)制作新的播放器皮膚,來(lái)美化顯示界面。調(diào)試結(jié)果顯示,各種功能在硬件開(kāi)發(fā)平臺(tái) GT2440上得以驗(yàn)證。
嵌入式 Linux;多媒體播放器;Qt;C++
Abstract:Aimed at the function of the currently used multimedia player,this paper introduces the im provement in original code recoding,drawing on embedded Linux operating system in prevailing use and the multimedia player open-code resource underQtopia environment.The improvement is associated with bothMP3 audio files andMPEG4 video files,and MP3 and MPEG4 media players,along with the browsing function ofmultimedia files by loading the documents load module and the embellished outlook by modifying the skin of the player.The paper endswith the verification of all functions on the hardware development platfo rm GT2440.
Key words:embedded Linux;multimedia player;Qt;C++
MP3和MPEG4是現(xiàn)有嵌入式多媒體播放器中應(yīng)用最廣泛的兩種格式?,F(xiàn)有嵌入式媒體播放器的多媒體文件加載方式,是當(dāng)文件存儲(chǔ)在 CF卡中,一旦卡被插入開(kāi)發(fā)板,卡會(huì)被自動(dòng)掃描,多媒體文件會(huì)自動(dòng)被加載到播放器中并形成播放列表[1]。
Qtopia的嵌入式應(yīng)用中有一個(gè)文件瀏覽器應(yīng)用,它可以實(shí)現(xiàn)文件檢索和高級(jí)文件編輯,如文件或文件夾的復(fù)制、粘貼、刪除。而且,搜索的文件為多媒體文件,它對(duì)多媒體文件的加載節(jié)點(diǎn)與播放器中多媒體文件的加載節(jié)點(diǎn)相同。想利用文件瀏覽器這個(gè)嵌入式應(yīng)用的代碼,刪掉高級(jí)文件編輯等播放器中用不到的功能,將剩下的代碼與播放器中的 playlistwidget文件中的代碼糅合在一起,形成具有文件瀏覽功能的 playlist窗口,考慮到原播放器代碼文件間交叉關(guān)系比較復(fù)雜,即使原 playlist窗口中的子窗口部件及其很多功能函數(shù)均不再使用,其中的一些全局變量還是有很多被其他相關(guān)聯(lián)的文件訪問(wèn)[2]。筆者試圖采用不改變?cè)シ牌鞔蟛糠执a,只改變窗口顯示部分的代碼的方法來(lái)加以改進(jìn),開(kāi)發(fā)出播放器文件加載模塊瀏覽文件系統(tǒng)找到多媒體文件的功能。
1.1 原播放器文件加載模塊
從兩方面分析原播放器文件加載模塊,先了解實(shí)現(xiàn)此模塊的文件依賴關(guān)系,再進(jìn)一步分析該文件實(shí)現(xiàn)的功能,找出需改動(dòng)的文件,注意文件加載節(jié)點(diǎn)的位置。圖 1顯示了原有文件加載模塊文件的依賴關(guān)系[3]。
圖 1 原文件加載模塊文件依賴關(guān)系Fig.1 Dependence relationship of original load module file
由于 playlistU I要整體改變,并且文件加載方式變成了文件瀏覽器的文件系統(tǒng)路徑下文件和文件夾加載方式,因此,除 playlistwidget文件要改變以外,其他文件仍保留,因?yàn)榧词垢淖兾募虞d方式 playlistwidget中引用其他文檔時(shí)也會(huì)相應(yīng)做賦值,其他文檔在播放器工作過(guò)程中仍起到很重要的作用。
1.2 文件加載模塊改進(jìn)
改進(jìn)部分主要研究 playlistwidget文檔如何改動(dòng)及其中加入的函數(shù)的作用,主要涉及三部分:
Main.cpp:該文件中建立了 QPE應(yīng)用程序,實(shí)例化 FileBrowser類并傳入初始路徑,設(shè)置顯示屬性,運(yùn)行程序。此部分用到的是實(shí)例化 FileBrowser時(shí)輸入的初始路徑QDir::current().canonicaiPath()。
Inlineedit.h.cpp:該文件主要實(shí)現(xiàn)高級(jí)文件操作時(shí)的鼠標(biāo)選中文件或文檔的功能,這部分用不到,可刪去。
Filebrowser.h.cpp:該文件實(shí)現(xiàn)了主要的文件瀏覽功能,所以重點(diǎn)參考此文檔。
由于文件瀏覽功能函數(shù)須有初始路徑的傳入,按照 filebrowser構(gòu)造函數(shù)的形式重新定義 playliswidgett類的構(gòu)造函數(shù),為了統(tǒng)一風(fēng)格,將原 playlistwidget的構(gòu)造函數(shù)部分全部移到 filebrowser中的init()函數(shù)中,而且也要改動(dòng) init()函數(shù),其中有關(guān)下拉菜單、可激活項(xiàng)、工具條及列表實(shí)現(xiàn)等子窗口的初始定義要移到 Playlis twidgetprivate類中,在 init()函數(shù)中還要將原播放器中的 tab子窗口實(shí)例化,但不顯示,設(shè)置文件瀏覽器的文件列表窗口為中央窗口部件,可設(shè)置播放器皮膚的 skin菜單、播放器控制的 option菜單。將 filebrowser功能函數(shù)移植過(guò)來(lái)后要將所屬域改為 playlis twidget。
1.3 嵌入式L inux多媒體播放器界面美化
播放器原有兩套皮膚,每一套皮膚都包括音頻播放界面、視頻播放界面和播放器出示窗口的一些功能按鈕的圖標(biāo)。由于個(gè)人的愛(ài)好,制作一套新的播放器皮膚,改變?cè)胁シ牌鞯娘L(fēng)格,以體現(xiàn)出個(gè)性化的特點(diǎn)。
在制作播放器皮膚時(shí),同時(shí)也更換了 Qtopia的歡迎界面和等待時(shí)的時(shí)鐘圖標(biāo),有整體統(tǒng)一的風(fēng)格。
皮膚的制作過(guò)程是:首先構(gòu)思皮膚風(fēng)格,確定以向日葵為主線的太陽(yáng)花系列;其次尋找相關(guān)圖片,再根據(jù)原有皮膚的圖片大小,用 PS選出圖片,設(shè)計(jì)出美觀的播放器界面;然后更新設(shè)計(jì)的播放器界面,重新生成相應(yīng)按鈕的觸點(diǎn)圖片文件;最后制作好整套皮膚后替換掉原皮膚的文檔,重新編譯 Qtopia即可。
嵌入式應(yīng)用的軟件調(diào)試平臺(tái)又稱為軟件調(diào)試環(huán)境,一般由嵌入式應(yīng)用的軟件開(kāi)發(fā)平臺(tái)和嵌入式應(yīng)用的運(yùn)行平臺(tái)兩部分組成。
PC機(jī)上的嵌入式應(yīng)用的軟件開(kāi)發(fā)及調(diào)試平臺(tái)也就是播放器代碼的交叉編譯平臺(tái),建立這個(gè)平臺(tái)需要找到版本相互兼容的開(kāi)發(fā)工具包、編譯連接庫(kù)及嵌入式應(yīng)用源碼包。最后確定的開(kāi)發(fā)包是:
cross-3.3.2.tar.gz:交叉編譯工具;
t
make-1.11.tar.gz:用以得到跨平臺(tái)的Makefile生成器;
qt-x11-2.3.2.tar.gz:提供 Designer、U IC、MOC等 PC機(jī)上的嵌入式應(yīng)用開(kāi)發(fā)工具及編譯時(shí)所需的編譯工具;
qt-embedded-2.3.7:交叉編譯之后生成嵌入式應(yīng)用交叉編譯時(shí)需要用的庫(kù);
qtopia-free-1.7.0:播放器源碼的載體,交叉編譯之后生成開(kāi)發(fā)板的桌面環(huán)境及包括多媒體播放器應(yīng)用的嵌入式應(yīng)用集。
3.1 PC機(jī)上播放器代碼的調(diào)試過(guò)程
編譯過(guò)程也就是第一個(gè)調(diào)試階段,是在開(kāi)發(fā)編譯環(huán)境建立的前提下進(jìn)行的,具體過(guò)程如下:
編譯時(shí)的調(diào)試流程如圖 2所示。
圖 2 代碼編譯時(shí)的調(diào)試流程Fig.2 Debugg ing flowchart of compile code
代碼成功編譯后,進(jìn)入了 PC即開(kāi)發(fā)平臺(tái)的第二個(gè)調(diào)試過(guò)程,利用 qvfb虛擬緩存,通過(guò)命令行輸入運(yùn)行Qtopia桌面環(huán)境及相應(yīng)的應(yīng)用程序,在此只能檢驗(yàn) GU I的一些功能 (下拉菜單響應(yīng)),如果圖形用戶界面的一些操作沒(méi)有正常響應(yīng),修改相應(yīng)代碼,繼續(xù)編譯—PC機(jī)第一次調(diào)試—PC機(jī)第二次調(diào)試的過(guò)程,直到 GU I的一些功能沒(méi)有問(wèn)題[4]。
3.2 目標(biāo)機(jī)上嵌入式應(yīng)用運(yùn)行平臺(tái)的調(diào)試過(guò)程
用觸摸筆點(diǎn)擊觸摸屏,檢驗(yàn)對(duì)觸摸屏支持的功能,如果不能支持觸摸屏則追溯到 Qte針對(duì) Qpe的相關(guān)配置文檔及 Qpe庫(kù)中的與觸摸屏相關(guān)文件的修改和配置,然后再重復(fù)以上所有的編譯調(diào)試過(guò)程,直到支持觸摸屏功能為止。
通過(guò)觸摸屏校正進(jìn)入 Qtopia桌面環(huán)境,點(diǎn)擊多媒體播放器圖標(biāo)運(yùn)行此應(yīng)用程序,在顯示多媒體播放器界面后,可進(jìn)行文件瀏覽選擇多媒體文件來(lái)播放,在播放過(guò)程中針對(duì)音視頻文件分別驗(yàn)證各種播放控制,并檢驗(yàn)播放結(jié)束后是否返回播放器的初始界面[5]。在此過(guò)程中驗(yàn)證播放器從圖形用戶界面—播放控制各方面功能,如有問(wèn)題,則返回 PC機(jī)修改播放器相應(yīng)源碼的部分,重復(fù)以上所有過(guò)程,直到嵌入式多媒體播放器成功實(shí)現(xiàn)預(yù)期的所有功能為止。
觸摸屏校正后,選擇語(yǔ)言、時(shí)間等設(shè)置后進(jìn)入Qtopia的桌面環(huán)境,在桌面上可以看到多媒體播放器的圖標(biāo),點(diǎn)擊后可進(jìn)入多媒體播放器界面,如圖 3所示。多媒體播放器的主窗口具有文件瀏覽功能,可在文件系統(tǒng)的路徑下搜索到多媒體文件。找到多媒體文件后可單擊選中,再點(diǎn)擊工具欄里的播放按鈕,也可雙擊多媒體文件進(jìn)行播放,當(dāng)選中音頻文件時(shí)就會(huì)調(diào)出音頻播放窗口如圖 4所示。
在音頻播放窗口,可以實(shí)現(xiàn)播放與進(jìn)度條同步、音量控制、播放暫??刂啤⒖爝M(jìn)退控制、進(jìn)度條定位播放等,下面以音量控制為例作以說(shuō)明。
當(dāng)點(diǎn)擊音量增加或減少按鈕時(shí),播放器會(huì)出現(xiàn)音量顯示條,按鈕在釋放時(shí)顯示條隱藏,音頻文件播放后會(huì)返回到選擇此文件時(shí)的播放器界面,見(jiàn)圖 5。
選擇視頻文件后,會(huì)調(diào)出視頻顯示窗口,如圖 6所示。視頻播放窗口中也可進(jìn)行播放控制,如暫停/播放控制、快進(jìn)退控制、循環(huán)播放、進(jìn)度條定位播放以及進(jìn)度條同步播放等,視頻播放時(shí)還可以點(diǎn)擊視頻顯示窗口拐角處的隱藏按鈕來(lái)設(shè)置全屏播放。
(1)通過(guò)改進(jìn)后代碼的編輯、交叉編譯,文件系統(tǒng)的定制、移植,實(shí)現(xiàn)了嵌入式 Linux多媒體播放器在開(kāi)發(fā)平臺(tái)上的運(yùn)行,各種功能得到驗(yàn)證。
(2)實(shí)現(xiàn)了嵌入式 Linux多媒體播放器的改進(jìn),在實(shí)現(xiàn)播放器播放多媒體文件、播放控制等功能的基礎(chǔ)上,開(kāi)發(fā)出新的具有文件瀏覽功能的播放器的文件加載模塊。制作的新的播放器皮膚,美化了界面,具有獨(dú)特的顯示風(fēng)格。
[1] 聶愛(ài)箐,王心豐,崔散華,等.在 Linux下用 Qt開(kāi)發(fā)新一代DTS圖形數(shù)據(jù)系統(tǒng)的分析與設(shè)計(jì)[J].機(jī)電工程技術(shù),2004(5):12-15.
[2] 陳云鶴,徐 晶.基于 QT/Embedded的媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)[J].微型電腦應(yīng)用,2006,22(8):33-34.
[3] 楊 著,郝 丹,范太華.高性能硬件平臺(tái)與嵌入式 Linux的建構(gòu)[J].西安科技大學(xué)學(xué)報(bào),2006,26(2):250-252.
[4] 李 勇.嵌入式 Linux集成開(kāi)發(fā)環(huán)境的研究[J].安陽(yáng)師范學(xué)院學(xué)報(bào),2005(5):59-61.
[5] 桑 江,陳 震.嵌入式 Linux系統(tǒng)在 PDA設(shè)備中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(4):1 016-1 019.
(編輯 徐 巖)
Improvement and implementation of embedded Linux mult imedia player
FENG X inyu
(College of Electric&Infor mation Engineering,Heilongjiang Institute of Science&Technology,Harbin 150027,China)
TN919.82
A
1671-0118(2011)01-0074-03
2011-01-07
黑龍江省教育廳科學(xué)技術(shù)研究面上項(xiàng)目(11541308)
馮新宇 (1978-),男,黑龍江省北安人,講師,碩士,研究方向:嵌入式系統(tǒng),E-mail:88574099@163.com。