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库也不知道,他只管搜索符合自己规范的插件。并告诉这些插件,现在程序发出的指令是什么,从插件返回给程序现在的媒体状态和信息。而后端才是实际进行读入媒体、解码并且播放的部分,他们和后端插件是一一对应的 。后端可以是任何形式,只要你写出了相应的后端插件。
假设Qt基本库已经安装好,默认phonon是没有被安装的,介绍phonon和后端插件的安装。
安装完毕后可以在/usr/lib/kde4/plugins /phonon_backend目录中找到libphonon_xine.so或libphonon_gstreamer.so。
简单的测试例子如下:
#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();
}