QMediaPlayer播放视频

 

要使用QMediaPlayer播放视频,必须在.pro文件中加入 multimedia  multimediawidgets,如下:

QT +=coregui widgets multimedia multimediawidgets

加入头文件

#include <QMediaPlayer>

#include <QVideoWidget>

 

 m_player在设置media前必须先设置videooutput(),也就是需要先设置输出的地方,如QVideoWidget,才能设置播放媒体,不然2个调换位置,将会只成功播放一次,第二次播放就会一次提示:DirectShowServices::DoRender() errcode 0x80040218,提示媒体无法载入。但实际媒体是没有问题的,能正常播放的。将这2个位置调回来就能一直正常播放了。

setMedia()函数是加载媒体,该函数一调用即返回,不等待加载完成或者不管错误,因此代码中播放媒体放到媒体准备完成时才播放(VideoAvaildableChange()中)

[slot]void QMediaPlayer::setMedia(constQMediaContent &media,QIODevice *stream = Q_NULLPTR)

This function returns immediately after recording the specified source of the media. It does not wait for the media to finish loading and does not check for errors. Listen for themediaStatusChanged() and error() signals to be notified when the media is loaded and when an error occurs during loading.

          QMediaPlayer*m_player;

[cpp]  view plain  copy
  1. QHBoxLayout *layout = new QHBoxLayout();  
  2.   
  3. QVideoWidget *videow = new QVideoWidget();  
  4. layout->addWidget(videow);  
  5. this->setLayout(layout);  
  6.   
  7. m_player = new QMediaPlayer();  
  8. //必须先设置videooutput才能设置media,否则media播放不了 0x80040218  
  9. m_player->setVideoOutput(videow);  
  10. m_player->setMedia(QUrl::fromLocalFile(QStringLiteral("video/123.mp4")));  
[cpp]  view plain  copy
  1. connect(m_player, SIGNAL(videoAvailableChanged(bool)), this, SLOT(VideoAvaildableChange(bool)));  
  2. videow->show();  
  3.   
  4.   
  5. void Guide::VideoAvaildableChange(bool bavial)  
  6. {  
  7. if(bavial)  
  8. {  
  9.     m_player->play();  
  10.     m_player->setVolume(50);  
  11. }  

       在干净的系统上运行qt的播放视频的程序,或者说运行使用了QMediaPlayer和QMediaPlayList的程序,需要将qt安装目录下的mediaservice、playlistformats文件夹复制到程序运行目录的同级目录下,(如我的安装了qt5.5.7,则这2个目录在C:\Qt\Qt5.7.0\5.7\mingw53_32\plugins下面,同时如果程序需要创建qt窗口,也要将platforms目录复制到程序运行目录同级目录下)。

      另qt默认是使用windows默认解码器,如果没有安装有相关DirectShowService解码器,则运行程序也是没法播放视频的,必须安装相关directshow解码器,如LAVFilters-0.65.exe才能正常解码。

    完全干净的系统上运行qt程序,需要在当前运行目录下放msvcp120.dll、msvcr120.dll 2个文件,否则运行程序会提示没有这2个动态库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值