QMediaPlayer播放视频

 

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

QT +=coregui widgets multimedia multimediawidgets

加入头文件

#include

#include 

 

 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;

    QHBoxLayout *layout = new QHBoxLayout();

    QVideoWidget *videow = new QVideoWidget();
    layout->addWidget(videow);
    this->setLayout(layout);

    m_player = new QMediaPlayer();
    //必须先设置videooutput才能设置media,否则media播放不了 0x80040218
    m_player->setVideoOutput(videow);
    m_player->setMedia(QUrl::fromLocalFile(QStringLiteral("video/123.mp4")));
    
    connect(m_player, SIGNAL(videoAvailableChanged(bool)), this, SLOT(VideoAvaildableChange(bool)));
    videow->show();


    void Guide::VideoAvaildableChange(bool bavial)
    {
    if(bavial)
    {
        m_player->play();
        m_player->setVolume(50);
    }
   }

       在干净的系统上运行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个动态库。

你可能感兴趣的:(qt)