引 言 嵌入式系統(tǒng)是以應用為中心、以計算機技術(shù)為基礎,軟件硬件可裁剪,適應于應用系統(tǒng)的功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。我們將MPlayer移植到嵌入式系統(tǒng)中,是因為MPlayer播放器是Linux下最優(yōu)秀的多媒體播放器之一,它的播放速度最快,支持的文件格式也最多。隨著技術(shù)的不斷進步,媒體播放器已越來越多,選擇一款多功能播放器,實在不容易。MPlayer就是個好的媒體播放器,資源占用率極低,支持格式極廣,輸出設備支持極多,所以值得移植到嵌入式系統(tǒng)中。 配置與編譯安裝MPlayer MPlayer是Linux上的電影播放器,它的功能十分強大,能夠播放眾多格式的文件,在X86 PC機上運行很穩(wěn)定,也可以把它移植到非X86 CPU上的嵌入式系統(tǒng)中來。我們就是將MPlayer軟件移植到ARM9開發(fā)板中,讓MPlayer運行在ARM核上。MPlayer能使用眾多本地的、Xanim、RealPlayer和Win32 DLL編解碼器,播放大多數(shù)MPEG、VOB、AVI、OGG、VIVO、ASF/WMV、QT/MOV、FLI、RM、NuppelVideo、yuv4mpeg、FILM、RoQ文件。 借助于MPlayer你能觀看VideoCD、SVCD、DVD、3ivx、RealMedia和DivX格式的電影。MPlayer的另一個大的特色是支持廣泛的輸出設備,它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、Aalib、DirectFB下工作,而且你也能使用GGI和SDL(由此使用它們支持的各種驅(qū)動模式) 和一些低級的硬件相關(guān)的驅(qū)動模式。這個播放器能很穩(wěn)定地播放被破壞的MPEG文件,并且它能播放Windows media player 都打不開的有損壞的AVI文件,甚至,沒有索引部分的AVI文件也可以播放。 MEncoder的使用 MPlayer采用的編解碼器包是libavcodec,這個編解碼器包可以在多種平臺上對H263/MPES/RV10/ DivX4/DivX5/MP41/MP42/WMV1編碼格式的視頻流進行解碼,它同時也是已知完成這些任務最快的解碼器。MEncoder(MPlayer電影解碼器)可以生成MPEG(MPEG-PS)格式的輸出文件。它們只能用于libav codec的mpeg1video編解碼器,因為一般播放器(除了MPlayer) 認為MPEG文件中包含的是MPEG1視頻流和MPEG1 layer 2(MP2)音頻流。要改變MEncoder的輸出文件格式,可以使用-of mpeg選項。例如: mencoder -of mpeg -ovc lavc -lavcopts vcodec-mpeg1video -oac copy media.avi -o output.mpg。 MEncoder能用兩種方式處理輸入流:編碼和復制 a.視頻流(-ovc copy選項):MEncoder可以把FLI或者VIVO或者MPEG1的視頻放到AVI文件中;還可以將視頻流復制用于只有音頻流需要被編碼的情況。 b.音頻流(-oac copy選項): 可以把一個外部音頻文件(MP3,Vorbis)傳到輸出流中。使用-audiofile 選擇來實現(xiàn)這個功能。 MEncoder可以修復交錯損壞的AVI文件,我們可以簡單地復制視頻和音頻流,并用MEncoder產(chǎn)生索引。命令為:mencoder -idx input.avi -ovc copy -oac copy -o output.avi。MEncoder還可以用來修復兩個或多個AVI文件并將其合并成一個文件。 如果需要GUI圖形用戶界面,就要安裝gtk并且必須在運行./configure時使用_enable-gui來編譯代碼,然后在config文件中添加gui=yes;或者用-s $PREFIX/bin/MPlayer $PREFIX/bin/gmplayer,之后運行g(shù)mpalyer即可。目前MPlayer不自帶skin,所以要使用GUI,就必須到網(wǎng)上下載,將下載回來的文件解壓到$HOME/.mpslayer/skin下。 MPlayer有一個用戶定義的OSD菜單接口,在編譯MPlayer時,在./configure加上_enable-menu參數(shù),這樣確保安裝了OSD字體;把etc/menu.conf復制到./mplayer目錄下;把etc/input.conf復制到./mplayer目錄下;檢查并編輯input.conf來啟動菜單控制鍵;鍵入mplayer -menu file.avi,來使用mplayer。將上述步驟做好后,就可以編譯MPlayer,先到網(wǎng)上下載MPlayer0.91版本: tar xzvf mplayer-0.91.tgz ./configure make make install 如果進行順利的話,就可以運行你想看到的圖像和聲音了。 MPlayer在開發(fā)板上的實現(xiàn) 不過以上這些都是在X86 PC上實現(xiàn)的,要想在以ARM(開發(fā)板的CPU為S3C2410)為核心嵌入式開發(fā)板上實現(xiàn)此過程,還需要做下面的工作。首先要在交叉編譯環(huán)境中對MPlayer進行編譯,將Mplayer源代碼中關(guān)于視、音頻部分以及驅(qū)動部分寫入Makefile文件里。由于開發(fā)板只有64MB的SDRAM及16MB的FLASH,而且應用程序一般都燒寫到FLASH中,應用程序大概有16MB左右,所以直接將應用程序燒寫到開發(fā)板里的FLASH中的做法不可行,這樣開發(fā)板會因空間太小而拒絕運行應用程序。 當要在嵌入式系統(tǒng)中調(diào)試某個軟件時,可以將軟件應用代碼拷貝到移動存儲中,再將移動存儲里的文件加載到嵌入式開發(fā)板上進行調(diào)試,也可以將軟件應用代碼通過PC機上的Linux操作系統(tǒng)掛載到嵌入式系統(tǒng)的開發(fā)板中進行調(diào)試,運行正常后再將軟件應用代碼燒寫到開發(fā)板中,這樣就可以避免應用程序在FLASH上的重復擦寫。 我們所采用的方法是將宿主機和嵌入式開發(fā)板之間用以太網(wǎng)連接,在宿主機的Linux操作系統(tǒng)下的終端中運行minicom作為開發(fā)板的顯示終端,通過Linux下的NFS網(wǎng)絡文件系統(tǒng)將宿主機的硬盤安裝到開發(fā)板上的某個目錄下,然后再運行MPlayer的可執(zhí)行文件./mplayer。將你想要播放的圖像文件1.avi也放到宿主機的某個目錄下( 如:/home/1.avi),同時將mplayer可執(zhí)行文件也拷貝到此目錄下/home/mplayer。假設宿主機的IP地址為192.168.2.122,在目標板上輸入mount -o nolock 192.168.2.122:/home /mnt進入目標板的mnt目錄:cd/mnt,然后運行./mplayer 1.avi,即可以觀看在開發(fā)板的LCD上顯示1.avi的內(nèi)容。當然最后不要忘了播放完成后要從目標板上卸載宿主機的目錄,鍵入umount /mnt即可。 如果沒有NFS網(wǎng)絡系統(tǒng)的支持,也可以自己做一個10MB的文件系統(tǒng),開發(fā)板的FLASH為16MB,系統(tǒng)資源占去4MB左右FLASH的空間,而將ramdisk文件系統(tǒng)作為系統(tǒng)運行的最小文件系統(tǒng),容量大概限定在2MB以內(nèi),剩下的10MB左右的FLASH可以做成Cramfs文件系統(tǒng),它是一個壓縮文件系統(tǒng),實際容量可達到12MB"15MB,基本上滿足了用戶的應用要求。改變內(nèi)核的配置,將支持Cramfs文件系統(tǒng)的功能編譯到內(nèi)核中,重新編寫驅(qū)動程序并加到Makefile文件中,然后進行編譯,在燒寫ramdisk文件系統(tǒng)之后繼續(xù)燒寫Cramfs文件系統(tǒng)。燒寫完畢后啟動開發(fā)板,Cramfs就會作為ramdisk的子目錄出現(xiàn),直接調(diào)用該目錄下的應用文件即可。 此開發(fā)板可用于掌上PDA的前期設計和應用。嵌入式系統(tǒng)軟件的發(fā)展是以應用為中心,所以我們要利用國內(nèi)巨大的應用市場資源,將我國的軟件業(yè)發(fā)展成嵌入式系統(tǒng)軟件、支撐軟件、應用軟件共同發(fā)展的格局。 |