Qt的Phonon在XP下播放视频警告Phonon::createPath: Cannot connect……的解决方法

本文介绍了解决Qt Phonon模块中视频播放问题的过程,包括遇到的bug、查找解决方案及应用补丁的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天开始用Qt中的第三方插件——Phonon模块进行多媒体应用程序的编写。Phonon提供了很方便的方法来实现音频视频文件的播放,在实现音频播放器的功能时没有问题,但是在使用VideoWidget类实现视频文件播放功能时遇到一个莫名其妙的问题:在编译链接过程中没有提示任何警告和错误,而程序运行起来之后,QtCreator在Starting提示之后多了一条警告:

WARNING: Phonon::createPath: Cannot connectPhonon::MediaObject ( no objectName ) to Phonon::VideoWidget ( no objectName ).

这是第一次看到在ApplicationOutput中出现WARNING而build issues和compile output完全没有异常信息。然后添加文件等功能正常,点击播放后却没有反应。检查代码,类的用法和Qt帮助文档中的例子完全一样。确信代码没有问题之后,尝试运行demos下的qmediaplayer样例,也是同样的情况。

将WARNING信息在百度上搜索之后,发现这果然是Qt库本身存在的bug,着实让人对其有点小失望。VideoWidget类的源代码实现有问题。优快云上有一篇博客讲到了这个问题并提供了解决办法,可惜关于补丁文件的使用方法没有说明,令我这种菜鸟级的人相当无奈。原文地址http://blog.youkuaiyun.com/hanzengyi/article/details/6319120。

根据所给的链接在Qt官网下载了补丁文件后,发现是txt格式的,打开一看,无从下手,不知道怎么把这个补丁打上去。只好再求助百度,结果出来的搜索结果几乎全都是某某游戏补丁怎么装=.=顿时觉得自己勤奋得不行了……勤奋归勤奋,问题还是摆在那里,从网上找不到关于txt格式补丁怎么用的方法,一下子没有了办法。

今天早上试图用Qt自己的低端的多媒体类来重写代码,但是看帮助文档和自带的例子发现这貌似是一件很麻烦的事情,用起来比较复杂,不知道要搞到神马时候才能搞出来,于是乎一懒,又回到了那个补丁文件上面。换着说法在百度和谷歌上搜索,然后一页页往后翻,终于搜到了一篇关于Linux下生成源码补丁文件的日志。早该想到了,不应该搜txt补丁文件怎么用,既然是人做的补丁文件,那就应该搜它是被怎么做出来的,知道怎么做的也就知道了怎么用。

其实那个补丁文件的用法还是比较简单的(主要是因为文件改动的地方比较集中比较少),对文件内容如何修改的描述其实很清楚。我直接把修改方法说明如下:

1.删除Qt安装目录下 src/3rdparty/phonon/ds9/videorenderer_evr.cpp与 src/3rdparty/phonon/ds9/videorenderer_evr.h这两个文件;

2.找到Qt安装目录下src/3rdparty/phonon/ds9/videowidget.cpp,首先删除或者注释掉#include "videorenderer_evr.h",然后在第360行左右,将

        AbstractVideoRenderer*renderer = 0;

              if (type == Native) {

#ifndef Q_OS_WINCE

                  renderer = newVideoRendererEVR(m_widget);

                  if (renderer->getFilter() == 0) {

                      delete renderer;

                     //EVR not present,let's try VMR

                     renderer = new VideoRendererVMR9(m_widget);

                     if (renderer->getFilter() == 0) {

                         //instanciating the renderermight fail

                         m_noNativeRendererSupported = true;

                         delete renderer;

                         renderer = 0;

                     }

                  }

#else

                  renderer = newVideoRendererDefault(m_widget);

这段代码修改为:

        AbstractVideoRenderer*renderer = 0;

              if (type == Native) {

#ifndef Q_OS_WINCE

                  renderer = newVideoRendererVMR9(m_widget);

                  if (renderer->getFilter() == 0) {

                     m_noNativeRendererSupported = true;

                     delete renderer;

                     renderer = 0;

                  }

#else

                  renderer = newVideoRendererDefault(m_widget);

3.找到Qt安装目录下src/plugins/phonon/ds9/ds9.prob/src/plugins/phonon/ds9/ds9.pro,将第54行开始的

#the EVR renderer (onlyavailable on desktop)

!wince*:SOURCES += $$PHONON_DS9_DIR/videorenderer_evr.cpp \

                  $$PHONON_DS9_DIR/videorenderer_vmr9.cpp

!wince*:HEADERS += $$PHONON_DS9_DIR/qevr9.h \

                   $$PHONON_DS9_DIR/videorenderer_evr.h \

                  $$PHONON_DS9_DIR/videorenderer_vmr9.h

wince*:SOURCES  +=$$PHONON_DS9_DIR/videorenderer_default.cpp

wince*:HEADERS  +=$$PHONON_DS9_DIR/videorenderer_default.h

这一段改为:

#the EVR renderer (only available on desktop)

!wince*:SOURCES += $$PHONON_DS9_DIR/videorenderer_vmr9.cpp

!wince*:HEADERS += $$PHONON_DS9_DIR/qevr9.h \

                  $$PHONON_DS9_DIR/videorenderer_vmr9.h

wince*:SOURCES  +=$$PHONON_DS9_DIR/videorenderer_default.cpp

wince*:HEADERS  +=$$PHONON_DS9_DIR/videorenderer_default.h

    源代码文件的修改就这样,然后重新编译经修改的ds9.pro工程。编译过程中会一次次报错:moc_xxx.cpp: No such file or directory,只需要定位错误的位置然后将那个#include语句注释掉便可,继续编译。编译通过后会弹出提示说没有可执行文件,需要手动选择,不用管,直接点OK或者cancal。最后就像刚才那篇日志所说,将新生成的动态库文件拷到工程的release版本目录下就完成了。重新编译运行自己的应用程序,视频就能正常播放了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值