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

使用Qt多媒体库Phonon库的心得体会

2013年08月28日 ⁄ 综合 ⁄ 共 2176字 ⁄ 字号 评论关闭

使用Qt多媒体库Phonon库的心得体会

首先明确一点是Phonon不是Qt的主线(mainline)项目,它是KDE项目的一部分。所以我们看到它并不带有Q开头。但是这层封装实在是太好了,所以很多介绍Qt的书籍也一并介绍了Phonon库。

其次需要了解的是Phonon的地位。因为Phonon不是Qt项目,所以Qt项目为发展自己的多媒体库而提出了QtMultimedia模块。在最新的Qt5中,我没有看到Phonon的身影,甚至在Qt的新东家Digia的网站上,也鲜有介绍Phonon。这充分地说明Qt以后不会侧重于发展Phonon,而是发展QtMultimedia,同时也说明Phonon已经成熟。

最后说一下PhononQtMultimedia的关系。正如Qt文档中介绍,Phonon提供的是一系列高层的调用,而QtMultimedia是对媒体低层的调用。我曾经分别实现过使用微软的DirectMusicDirectSound,我发现使用DirectMusic的接口丰富,可支持的文件格式众多,而DirectSound则需要自己对特定格式(如ogg)进行解码转为原生支持的格式(wav格式)才能播放。其实Phonon就相当于DirectMusicQtMultimedia就相当于DirectSound

linux下使用Phonon库要比在Windows下使用要麻烦得多。因为在Linux下要使用特定的后端(backend)以插件的形式进行支持才行。Linux下的后端比较多,有VLCGstreamer等。这里以Ubuntu为例,因为默认的多媒体后端就是Gstreamer

开始没有留意,原来诺基亚时代的QtLinux安装包已经有了PhononGstreamer后端,如果编译Phonon出现了类似“cannotfind
-lpulse-mainloop-glib”
的错误,在Linux下可以执行“sudoapt-get
install libpulse-dev”
来安装libpulse,如果发现了

WARNING:bool Phonon::FactoryPrivate::createBackend() phonon backend plugincould not be loaded

WARNING:bool Phonon::FactoryPrivate::createBackend() phonon backend plugincould not
be loaded

WARNING:bool Phonon::FactoryPrivate::createBackend() phonon backend plugincould not
be loaded

WARNING:bool Phonon::FactoryPrivate::createBackend() phonon backend plugincould not
be loaded

WARNING:bool Phonon::FactoryPrivate::createBackend() phonon backend plugincould not
be loaded

WARNING:Phonon::createPath: Cannot connect Phonon::MediaObject ( noobjectName ) to
Phonon::AudioOutput ( no objectName ).

WARNING:bool Phonon::FactoryPrivate::createBackend() phonon backend plugincould not
be loaded

错误,那么需要安装gstreamer后端,命令是“sudoapt-get
installphonon-backend-gstreamer”
,安装完毕后找到phonon_backend文件夹(里面有libphonon_gstreamer.so文件,我的是在$QTDIR/plugins/里面找到的,诺基亚时自带的就是好)复制粘贴到生成程序的目录下。放心,应用程序会寻找到这个动态链接库的。

Phonon在各个平台的支持情况又如何?

我制作了一个小的实验程序,发现在新安装的WindowsXPghost版)下只能支持asfavimpeg等“古老”的格式,而在新安装的Windows8下可以支持mp4等新的格式。但是总的觉得Phonon的后端所支持的格式实在是有限。一般来说,WindowsMediaPlayer能支持的格式,使用Phonon开发的程序也能支持。不过像我一样的开发者要开发后端的插件真的很难。所以在Windows下使用Phonon不能满足我们对于新格式的解码需求,这迫使我们使用另外一个Qt的另外一个组件——QtMultimedia。目前我实现了QtMultimedia下载入Ogg文件并且播放的方法。

在Linux(我所熟悉的Ubuntu)下,由于Gstreamer的解码能力非常强,所以大部分主流格式都能够支持。

使用PhononVideoWidget时,需要注意它的虚成员函数paintEvent()是无法被重载,也就是说,你重载了了paintEvent()函数,也也无法让你的paintEvent()运行,可能因为VideoWidget不使用paintEvent()函数来负责渲染。

抱歉!评论已关闭.