Qt phonon多媒體框架

    Phonon是什麼?Qt從4.4版本開始提供的一套多媒體框架,提供多媒體回放的功能。目前在Qt 4.6中實現多媒體播放圖形界面主要依賴於phonon框架,其實qt中還有一個Multimedia模塊,幫助文檔中對它的描述是:實現底層的多媒體播放功能,在一般情況下上層的接口phonon模塊更適合實現這些功能。phonon最初是 一個 源於KDE的項目,爲使用音頻和視頻的應用程序開發提供的一個框架。應用程序不用去管多媒體播放是通過什麼實現的(如gstreamer、xine),只需調用相應的接口就行,但這中間需要一箇中轉,被稱爲backend。Qt也是通過phonon來實現誇平臺的多媒體播放。

    多媒體文件的播放主要過程包括:文件讀取、分流、解碼、輸出。


    這些在不同的系統中實現方式不同,如windows下的DirectX、Linux下的 gstreamer或xine及Mac下的QuickTime。 而Qt中的phonon作爲誇平臺的多媒體解決方案,就因該爲用戶屏蔽掉這些差異。而實際上它做得還不夠好,因爲用戶還需要自己來安裝相應的後端插件來完成播放任務。


    看完上圖,你可以知道,應用Phonon框架實質上分4個部分,你的程序,Phonon庫,Phonon後端插件(phonon_backend),真正的後端。 Phonon其實什麼都不幹,他只是提供了一套API接口這套接口可以給你的程序調用,同時也是給編寫後端插件提供一個規範。程序完全不知道最後誰來放我的Mp3,誰來解碼我的視頻,播放的又是哪個設備。
    同樣,Phonon庫也不知道,他只管搜索符合自己規範的插件。並告訴這些插件,現在程序發出的指令是什麼,從插件返回給程序現在的媒體狀態和信息。而後端纔是實際進行讀入媒體、解碼並且播放的部分,他們和後端插件是一一對應的。後端可以是任何形式,只要你寫出了相應的後端插件。所以,你要使用Phonon必需要先做3件事:
(1) 編譯你的Phonon庫:通常情況下,Qt默認沒有編譯,你只需要configure後加好參數,然後單獨進入phonon的文件夾進行編譯就可以了 
(2) 編譯你的Phonon後端插件:Qt爲3大平臺分別提供了一個可用的後端插件,放在src\plugins\phonon目錄下。進入目錄編譯即可,Qt會自動選擇你當前系統的後端插件的。(出現phonon backend plugin could not be loaded就是這步沒有做) 
     如果你是MinGW用戶,那抱歉了,Windows下Qt只提供了DirectShow這個後端插件,而這個後端插件因爲調用了DX的SDK,所以只能由VC編譯。當然你其實有更好的選擇,比如這個phonon-vlc-mplayer插件,通過他,你可以將mplayer作爲你的後端,徹底拋棄臃腫的VS以及讀ID3v2都會出錯的DirectShow(其實也不能怪DirectShow,DirectShow同樣只是個框架,解碼還靠系統裏安的解碼器、濾鏡們,我用的播放器都太綠色了,於是DirectShow就很弱) 
(3) 你要保證你的後端正常運作:對於Qt提供默認提供插件的後端來說,基本不成問題。但要是你想做嵌入式播放器?恩,很大的問題。據做過GStreamer移植的人反映,這事惱火的很。想做Qt嵌入式播放器的還是老老實實的QProcess+Mplayer slave模式吧!(新的Qt4.5說是提供了CE上的DirectShow後端插件,有興趣的可以去試試看) 
    以上3點做完,你就可以拿demo裏那個mediaplayer去測試了,測試成功的話,你就可以非常容易的用Qt實現你自己的媒體回放了。想要更高級的操作,比如編碼、混音、儲存媒體文件?呵呵,等Phonon慢慢更新吧,現在來說,Phonon還只是個什麼都不能幹的傳聲筒

   如上所述,如果想要運行使用Qt中的phonon寫的程序,需要滿足一下條件:Qt基本庫、Qt phonon庫、phonon_backend(後端插件)和多媒體播放後臺。下面以linux(Fedora 12)系統、Qt 4.6、mplayer爲例,假設Qt基本庫已經安裝好,默認phonon是沒有被安裝的,介紹phonon和後端插件的安裝。
1. Phonon庫安裝 : 
進入源代碼的phonon目錄,如"/usr/src/qt-everywhere-opensource-src-4.6.0/src/phonon",實 際代碼並不在裏面,從phonon.pro文件可知源代碼在“/src/3rdparty/phonon/phonon”,但並不影響編譯。在終端輸入 “make;make install”即可,如果安裝時出錯,也可手動將lib、include下相關文件拷貝到安裝目錄。
2. 後端插件安裝 : 
(1)下載phonon-mplayer。
地址: http://websvn.kde.org/trunk/playground/multimedia/phonon-backends/mplayer/
使用svn下載: svn co svn://anonsvn.kde.org/home/kde/trunk/playground/multimedia/phonon-backends/mplayer
(2)返回phonon-mplayer目錄,編譯(qmake;make)生成phonon_backend/libphonon_mplayer.so動態鏈接庫。
(3)將libphonon_mplayer.so拷貝到$QTDIR/plugins/phonon_backend/
    說明:幫助文檔中介紹Linux下Qt默認只支持gstreamer,其它的不做保證。但實際中由於mplayer安裝比較方便,支持的文件格式全,使用的人也非常多,所以以mplayer爲例。而gstreamer的後端插件可以在系統的“/usr/lib64/kde4/plugins /phonon_backend”目錄直接找到(如果已經從源上安裝了的話)。
3. 測試 
examples/phonon/qmusicplayer下的例子用mplayer做後端播放音樂會有問題,這裏選擇使用demos/qmediaplayer。
當然也可以用一個簡單的例子,如下:
#include <QtGui>
#include <Phonon/MediaObject>
#include <Phonon/VideoPlayer>
#include <Phonon/BackendCapabilities>
int main(int argv, char **args)
{
QApplication app(argv, args);

Phonon::MediaObject *music =
Phonon::createPlayer(Phonon::MusicCategory,
Phonon::MediaSource("/home/dlw/Music/mxshf.mp3"));
music->play();
/* 視頻播放
Phonon::MediaObject *music =
Phonon::createPlayer(Phonon::VideoCategory,
Phonon::MediaSource("/media/DLW/movie/One.Night.in.Supermarket.avi"));
music->play();
*/
return app.exec(); 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章