嵌入式掌上娛樂系統設計方案
3.1 播放器的實現
對于音頻和視頻的播放,本系統使用QT 設計一個前端播放、控制界面,并使用Mplayer 作為后端程序,能播放mp3、ogg、ogm、wma、wav、asf、au、avi、mpeg、mpg、mv1、mov、wmv、pls、m3u、mp4、 m4a 等音頻和視頻格式。播放器模塊的結構圖如圖3 所示,播放器使用Mplayer 作為后端程序(紅色部分),使用QT4開發前端程序(綠色部分)。
圖3 播放器結構圖
3.1.1 后端程序簡介
本系統使用Mplayer 作為其后端程序。MPlayer被評為Linux 下的最佳媒體播放工具,不需要任何系統解碼器就可以播放包括視頻、音頻、流媒體、廣播、電視等各種媒體。
Mplayer 另一個重要特點在于其開源性。
Realplayer,Windows Media Player,Quick Time 等許多播放軟件都是性能優秀的播放軟件,但由于它們都不開放源代碼,給移植帶來了麻煩。同時MPlayer 還具有良好的移植性,可以移植到許多非X86 平臺上,MPlayer 軟件包中含有針對ARM 架構的優化代碼,這些代碼利用ARM 的特性加快了對媒體的處理速度。
基于以上多個原因,本系統選擇了MPlayer 作為娛樂終端的播放軟件。本系統通過移植Mplayer 來實現對視頻的播放功能。Mplayer 編、解碼模塊,是系統的音、視頻處理中心,在mplayer 的編解碼庫中,包含的大量的音、視頻格式處理程序,經過編譯優化過的mplayer 可以完成對大多數音、視頻格式高效的編解碼工作。
3.1.2 前端程序的設計與播放器的實現
主界面窗口有一個顯示屏和一些控制按鈕,包括播放、暫停、下一首、上一首、音量調整以及播放進度條。文件操作窗口可以使用戶選擇要播放的文件。
播放列表用來播放用戶加載的多媒體文件。
MPlayer 默認全屏播放,但在GUI 中一般都是指定區域或者控制來播放。這樣顯得美觀,MPlayer 支持在指定的X 窗口播放的功能。用-wid 參數告訴窗口ID即可。例如:mplayer test.mpg -wid 0x00029 #0x0029是XID,而QT 的控件都是從QWidget 繼承下來,因此它本身也有wid,這樣只要用 QWidget::winID() 取出WID,即可實現在指定窗口播放視頻的功能。
本模塊是建立一個Qt GUI 程序。然后用一個label控件來播放視屏,用一個進度條顯示播放的進度,用按鍵顯播放,暫停,上一首,下一首,停止和添加資源文件。然后用一個Qprocess 在后臺執行MPlayer,并把label 的WID 傳給它。然后把MPlayer 的輸入輸出重定向,把原本從標準輸入接收命令變成從GUI 的接收命令。
3.1.3 播放功能設計
播放器實現的軟件流程圖如圖4 所示:
圖4 播放器軟件流程圖。
通過定義一個QProcess 對象調用已編譯好的Mplayer。
QProcess *process = new QProcess();
process->setProcessChannelMode(QProcess::MergedChannels);
Process->start("mplayer –ac –mad xxxxx");
在命令中添加 -slave 和 -quiet 就可以通過命令設置Mplayer 實現相應的功能。Process->start("mplayer–slave –quiet –ac –mad xxxxx")。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論