Phonon MinGW 编译指南
时间:2011-02-26 来源:深海的小鱼儿
也就是说MinGW可以编译Phonon!不能编译的仅仅是后端插件。至于原因,大概是因为DirectX 的SDK和MinGW的兼容性不怎么好吧。后端问题下面另有解决方案!
所以用MinGW编译Phonon很简单,在Qt做configure的时候加上phonon的选项就可以,编译phonon-backend的选项最好还是去掉,加了也只会给之后的编译造成麻烦,具体参数用configure --help查询。
configure完成之后,如果你做出改动的只有Phonon库,那你完全不必把Qt的其他部分一一编译,只需进入src/phonon/,把phonon编译即可。在这过程中一般不会发生问题,编译完成后,你就在lib/里得到了phonon的库文件了(默认是动态库)
此时,你的phonon程序已经可以编译了。你可以把Qt demo中的mediaplayer和musicplayer拿来编译,都可以生产可执行文件,也可以执行。但是运行时会弹出phonon backend plugin could not be loaded 。这就是缺少后端插件的情况,这时的程序除了显示出界面什么都不能干。
接下去我们就要想办法找一个可以控制音视频解码播放的后端,并且写一个插件让phonon可以调用这个后端。基本上,这是一件相当麻烦的事情。幸好有高人已经替我们把烦人的事情都做了。
phonon-vlc-mplayer是一个用vlc或者mplayer来做phonon后端的项目,他提供了vlc/mplayer的后端插件源码。现在发布的版本只支持mplayer了,因为支持vlc的版本另外有人写了,链接可以在上面找。详细的情况都可以在该项目主页上查到。
但这个项目不能直接拿来用,因为他使用了比Qt所带的更新版本的phonon库,和Qt自带库不匹配。要么替换掉Qt的phonon库到最新版,要么就是改插件。其实最新版的增加功能也就字幕和声道切换,为了保证最大兼容性,咱们还是改插件吧。
这里提供改好的插件源代码:phonon-mplayer.zip
项目管理我已经改成qmake了。首先进入libmplayer子目录编译,将mplaye的控制端编译成静态库。
qmake
make
在release文件夹下生成的libmplayer.a就是静态库。把这个文件copy到libmplayer子目录下。
然后再到回到phonon-mplayer目录编译即可得到插件。
把编译完的插件(dll文件)拷贝到Qt主目录下的plugins/phonon_backend。之后你的程序中的Phonon就能找到他了。
但这时你还不能用,因为你还没有作为后端的mplayer。
网上去找个好用的mplayer下载了,把mplayer.exe和相关文件拷贝到 程序主目录/mplayer/ 下,你的插件就能调用mplayer了。这时,你的程序就能正常地播放音频视频了。
其他的注意事项:
- 例程中的capabilities我一直无法编译,每次都是gcc出段错误,这是MinGW的问题。或许换4.0+版本的MinGW可以解决。
- mplayer不提供音效选项
- Qt的插件机制非常严格,在加载时会核对库版本和编译器版本,不同的不会加载,所以你如果更换了编译器,可能仅仅是很小的版本变化,你的程序也可能出现phonon backend plugin could not be loaded 的情况。请保证你的phonon库,你的程序,以及你的后端插件由同一编译器编译,不然可能造成不可知的错误。
- phonon-mplayer在编译后会产生debug和release2个版本。如上条,插件检查机制非常严格,所以这两个版本就分别对应你自己程序的编译形式。好在phonon的插件检查是不按照文件名的,所以你把2个dll改成不重名都拷贝到插件目录中去,程序是会自动识别对应的插件的。
- 发布程序时请将插件放在 程序主目录/phonon_backend/ 下即可,注意只需要release版就可以了,如果你还没蛋疼到发布debug版的话