Qt 调用phonon 在xp下不能播放视频的解决方法

 

xp中用QT的phonon来播放视频时,编译时没有错误,但是播放不出视频,会提示以下warning信息:
 
    WARNING: Phonon::createPath: Cannot connect Phonon::MediaObject ( no objectName ) to MediaVideoWidget ( no objectName ).

 

解决方法:

    1、下载下面链接中的补丁文件 0001-Revert-Add-EVR-to-the-Phonon-DirectShow9-ds9-backend.patch,并对相应的修改文件打补丁;
    2、用QT重新编译源码src/plugins/phonon/ds9/ds9.pro;
    3、编译后将在 XX/qt/plugins/phonon_backend下生成新的动态库文件:libphonon_ds94.a,phonon_ds94.dll。将这两个文件拷贝到播放程序release版本所在目录下的phonon_backend文件夹下,xp就可以正常播放视频了。

 

      如果编译过程中报错:moc_backendnode.cpp: No such file or directory,将报错文件中 #include "moc_backend.cpp" 一行注释掉再编译就可以了。

 

补丁链接网页:http://bugreports.qt.nokia.com/browse/QTBUG-13062

下面是打补丁的过程:

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版本目录下就完成了。重新编译运行自己的应用程序,视频就能正常播放了。


 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值