现在的位置: 首页 > 综合 > 正文

PHONON的应用

2013年03月27日 ⁄ 综合 ⁄ 共 2215字 ⁄ 字号 评论关闭

目前在Qt 4.6中实现多媒体播放图形界面主要依赖于phonon框架,其实qt中还有一个Multimedia模块,帮助文档中对它的描述是:实现底层的多媒体播放功能,在一般情况下上层的接口phonon模块更适合实现这些功能。在官方博客上了解到Qt有放弃phonon的打算,将多媒体的功能放到正在进行的Mobility项目中实现。先不管那么多了吧,至少目前我们还只能选择phonon,那就先了解一下吧。

 

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

 

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

 

 

 

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

 

应用程序与phonon库及后端的关系如下:

 

 

 

 

 

如果想要运行使用Qt中的phonon写的程序,需要满足一下条件:Qt基本库、Qt phonon库、phonon_backend(后端插件)和多媒体播放后台。

下面以linux(Fedora 12)系统、Qt 4.6、mplayer为例,假设Qt基本库已经安装好,默认phonon是没有被安装的,介绍phonon和后端插件的安装。

 

Phonon库安装 :

进入源代码的phonon目录,如"/usr/src/qt-everywhere-opensource-src-4.6.0/src/phonon",实际代码并不在里面,从phonon.pro文件可知源代码在“/src/3rdparty/phonon/phonon”,但并不影响编译。在终端输入 “make;make install”即可,如果安装时出错,也可手动将lib、include下相关文件拷贝到安装目录。

 

后端插件安装 :

(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”目录直接找到(如果已经从源上安装了的话)。

 

 

 

测试

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();

}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/marxdenl/archive/2009/12/04/4939267.aspx

抱歉!评论已关闭.