董立志等
摘 要:本文研究了一種基于嵌入式Linux操作系統(tǒng)的Media Player播放器。應(yīng)用GTK+圖形開發(fā)工具完成播放界面的模塊化設(shè)計,利用視頻解碼器來增強對數(shù)字視頻進行壓縮、解壓縮的程序或者設(shè)備進行處理來實現(xiàn)對媒體格式和傳輸協(xié)議的可拓展能力,來實現(xiàn)播放系統(tǒng)的所有功能。通過嵌入式技術(shù)在播放器設(shè)計中的研究結(jié)果表明,嵌入式技術(shù)具有良好的可移植性和可拓展性。
關(guān)鍵詞:嵌入式;播放器;GTK+
背景意義
在眾多多媒體網(wǎng)絡(luò)播放器中,由于嵌入式系統(tǒng)的使用,linux系統(tǒng)上多媒體技術(shù)應(yīng)用要求有了更大的凸顯,為了研制一種基于linux的具有豐富的傳輸協(xié)議格式和多種相應(yīng)的嵌入式的媒體播放器,使其適應(yīng)何種傳輸協(xié)議和媒體格式以及即將出現(xiàn)的媒體格式和傳輸協(xié)議。
1.引言
在多媒體網(wǎng)絡(luò)播放器中,系統(tǒng)中有許多多媒體組件,都是不可缺少的組成部分,伴隨著嵌入式系統(tǒng)廣泛應(yīng)用,使得linux系統(tǒng)上多媒體技術(shù)應(yīng)用要求有了大幅提高。因此,研制一種基于linux的具有豐富的傳輸協(xié)議可拓展性高的格式的播放器,使其適應(yīng)各種傳輸協(xié)議和媒體格式,已經(jīng)成為當(dāng)今的主流研發(fā)趨勢。
2.嵌入式平臺搭建
2.1研究對象及需求
以嵌入式Linux系統(tǒng)媒體播放器開發(fā)為對象,根據(jù)用戶的具體應(yīng)用需求,首先應(yīng)選擇相應(yīng)的嵌入式處理器以及外圍設(shè)備來搭建硬件平臺,然后選擇適當(dāng)?shù)那度胧讲僮飨到y(tǒng),基于此操作系統(tǒng)進行相應(yīng)的用戶需求開發(fā),最后是整個系統(tǒng)測試,此系統(tǒng)開發(fā)流程圖.
2.2開發(fā)環(huán)境
建立和安裝交叉開發(fā)環(huán)境通常是開發(fā)嵌入式軟件首要做的事情。在嵌入式系統(tǒng)中,由于硬件能力有限,不可能在嵌入式系統(tǒng)上安裝編譯器、連接器,這樣就出現(xiàn)了交叉編譯器。編譯器可以生成在與編譯器本身所在的計算機和操作系統(tǒng)(平臺)相同環(huán)境下運行的目標(biāo)代碼,編譯器也可以生成用來在其它平臺上運行的目標(biāo)代碼,這種編譯器就叫做交叉編譯器。除此之外還需要其他工具:相關(guān)的二進制工具、針對目標(biāo)平臺的C頭文件,針對目標(biāo)平臺的C函數(shù)庫、網(wǎng)絡(luò)文件系統(tǒng)及其配置。
3.系統(tǒng)結(jié)構(gòu)設(shè)計
3.1嵌入式媒體播放器的基本步驟:
嵌入式操作系統(tǒng)的播放器的設(shè)計既要滿足設(shè)計發(fā)展的系統(tǒng)需求,所以就要做到以下幾點要求:第一是支持嵌入式Linux操作系統(tǒng),要具有友好的用戶圖形界面,操作快捷、方便;第二是播放器基本結(jié)構(gòu)是根據(jù)分層設(shè)計的原理,使得各個模塊功能層次上結(jié)構(gòu)分明,條理清晰;第三是提供更多的解碼器編譯接口,這樣可以快捷的添加解碼協(xié)議的擴展功能,對更方便的調(diào)節(jié)解碼格式。
3.2嵌入式媒體播放器的基本架構(gòu)
嵌入式Linux系統(tǒng)是通過使用C語言進行開發(fā)的;強大的用戶界面是由GTK+來提供的;而解碼工作是采用FFMpeg開源解碼庫來完成,其功能強大,并支持多種音視頻編解碼標(biāo)準(zhǔn);音視頻的輸出是利用SDL來完成的,并且可以免除對框架的依賴,保證可移植性的良好。
4.用戶圖形界面設(shè)計
圖形用戶界面(GraphicalUserInterface,GUI)是指采用圖形方式顯示的計算機操作環(huán)境用戶接口,主要完成用戶和播放系統(tǒng)的交互。對于GTK+總體而言,其是一個可移植性強、穩(wěn)定性好而且使用多平臺的用戶圖形界面支持系統(tǒng),在開發(fā)過程中可以保持桌面系統(tǒng)與嵌入式系統(tǒng)中相關(guān)界面功能處理模塊的統(tǒng)一設(shè)計與開發(fā)。
GTK+庫提供豐富的控件供編程使用,應(yīng)用開發(fā)系統(tǒng)功能界面作為主控制界面進行相應(yīng)的系統(tǒng)功能調(diào)用,如可使用窗口配合功能按鈕或菜單完成主控制界面,根據(jù)相應(yīng)控件的接口函數(shù)來搭建控件、設(shè)置屬性、創(chuàng)建好信號連接器并調(diào)用顯示函數(shù)gdk_show_all()顯示主體窗口,在調(diào)用函數(shù)gtk_main()進入主體函數(shù)進行循環(huán),當(dāng)調(diào)用到函數(shù)gtk_main_quit()退出循環(huán)體,程序運行結(jié)束,最后界面自動生成處理結(jié)構(gòu)。
對媒體播放器進行模塊劃分:window、control和PlayList。對任意的一個操作響應(yīng)都有相應(yīng)響應(yīng)函數(shù),即控制了對MPlayer的全部操作。當(dāng)window框架中的按鍵被點擊時,controll類中的相應(yīng)操作就會被調(diào)用。而Playlist類是對播放文件的操作,例如更新文件、下載文件、查找文件等操作。
5.音視頻解碼模塊設(shè)計
音視頻解碼模塊主要包括音視頻分離器、解碼器和數(shù)據(jù)的解碼選擇器等部分。網(wǎng)絡(luò)上存在各式各樣的數(shù)字化音頻、視頻、圖像,如果按照原數(shù)據(jù)進行傳輸,那么網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量是很大的。本播放器采用的解碼庫支持很多解碼編制。其對應(yīng)的操作解碼函數(shù)都被安放在一個鏈表中,其中表頭操作編碼存放靜態(tài)變量鏈表中,將需要應(yīng)用解碼器解碼接口函數(shù),把一個新AVCodec結(jié)構(gòu)將安放在這個添加鏈表中。
6.媒體播放器系統(tǒng)控制設(shè)計和實現(xiàn)
6.1媒體播放器的系統(tǒng)控制結(jié)構(gòu)設(shè)計
系統(tǒng)控制模塊首先通過用戶圖形界面模塊為用戶提供一個播放器的控制接口,然后負(fù)責(zé)協(xié)調(diào)管理用戶圖形界面、音視頻解碼模塊等模塊的協(xié)同工作。播放器在演放過程中會接觸到集中狀態(tài)的轉(zhuǎn)換,其中有播放、后退、快進、暫停、停止等操作,通過系統(tǒng)的控制模塊對這些操作進行協(xié)同調(diào)度,實現(xiàn)播放狀態(tài)的轉(zhuǎn)換。
6.2媒體播放器控制實現(xiàn)
系統(tǒng)控制模塊是媒體播放器核心模塊,它控制播放器所有功能。在用戶界面上進行點擊按鍵可以通過系統(tǒng)控制模塊發(fā)布的命令實現(xiàn)后臺播放器控制,如果主窗口的按鈕被點擊過后,Controll類函數(shù)會對相應(yīng)的action()函數(shù)所調(diào)用,相應(yīng)的操作就會被action函數(shù)命令來執(zhí)行,并且調(diào)用系統(tǒng)控制系統(tǒng)中發(fā)送命令函數(shù)。例如當(dāng)按下stop按鈕時,Controll類函數(shù)的actionStop()函數(shù)被調(diào)用進行相應(yīng)的處理,該函數(shù)又將調(diào)用操作系統(tǒng)中的quit()函數(shù),“quit”操作命令會被發(fā)送給后臺來進行管理,最后播放器將會停止當(dāng)前工作。
7.結(jié)論
7.1本文設(shè)計的嵌入式Linux媒體播放器通用控制系統(tǒng)兼顧了播放器的通用功能。
7.2將媒體編碼技相關(guān)技術(shù)和嵌入式Linux有機的融合在一起,通過媒體播放器的多種功能測試表明,能支持常用的傳輸協(xié)議和多種的媒體格式文件,滿足了設(shè)計規(guī)格說明書的需求。
7.3編程軟件是基于嵌入式Linux操作系統(tǒng)的,因很多開發(fā)能源都是開源的,有利于更好地創(chuàng)建和開發(fā)好用的操作系統(tǒng)。(作者單位:北方民族大學(xué))