详解 Qt phonon多媒体框架 基于播放器

  Qt phonon多媒体框架是本文要介绍的内容,先来了解一下 Phonon是什么? Qt从4.4 版本开始提供的一套 多媒体框架,提供 多媒体回放的 功能  。目前在Qt 4.6中 实现 多媒体播放 图形界面主要依赖于 phonon框架,其实qt中还有一个M ultimedia 模块帮助文档中对它的 描述是:实现底层的 多媒体播放功能,在一般情况下上层的 接口 phonon模块更适合实现这些功能  。

  phonon最初是 一个 源于KDE的项目,为使用音频视频应用程序开发提供的一个框架  。应用程序不用去管多媒体播放是通过什么实现的(如gstreamer、xine),只需调用相应的接口就行,但这中间需要一个中转,被称为backend  。Qt也是通过phonon来实现夸平台的多媒体播放  。

  详解 Qt phonon多媒体框架

  多媒体文件的播放主要过程包括:文件读取、分流、解码、输出  。

  这些在不同的系统中实现方式不同,如windows下的DirectX、Linux下的 gstreamer或xine及Mac下的QuickTime  。 而Qt中的phonon作为夸平台的多媒体解决方案,就因该为用户屏蔽掉这些差异  。而实际上它做得还不够好,因为用户还需要自己来安装相应的后端插件来完成播放任务  。

  详解 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  。

  当然也可以用一个简单的例子,如下:

 
 
  1. #include <QtGui> 
  2. #include <Phonon/MediaObject> 
  3. #include <Phonon/VideoPlayer> 
  4. #include <Phonon/BackendCapabilities> 
  5. int main(int argv, char **args)  
  6. {  
  7. QApplication app(argv, args);  
  8.  
  9. Phonon::MediaObject *music =  
  10. Phonon::createPlayer(Phonon::MusicCategory,  
  11. Phonon::MediaSource("/home/dlw/Music/mxshf.mp3"));  
  12. music->play();  
  13. /* 视频播放  
  14. Phonon::MediaObject *music =  
  15. Phonon::createPlayer(Phonon::VideoCategory,  
  16. Phonon::MediaSource("/media/DLW/movie/One.Night.in.Supermarket.avi"));   
  17. music->play();  
  18. */  
  19. return app.exec();   
  20. }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值