QT播放视频QMediaPlayer

pro文件添加QT +=multimedia multimediawidgets;
UI界面拖拽一个QWidget,右键提升为QVideoWidget;

定义QMediaPlayer对象

QMediaPlayer *pMediaPlayer0;
pMediaPlayer0 = new QMediaPlayer(this);
ui->videowidget->setAspectRatioMode(Qt::IgnoreAspectRatio);//自适应铺满界面
pMediaPlayer0->setVideoOutput(ui->videowidget);//设置视频输出到QVideoWidget
ui->videowidget->setFullScreen(true); //全屏显示
pMediaPlayer0->setVolume(50);

pMediaPlayer0->setMedia(QUrl::fromLocalFile("./video/loop.mp4"));//加载视频文件
pMediaPlayer0->play();//播放视频

也可以通过QMediaPlaylist的方式播放,创建一个播放列表

mediaPlayerlist = new QMediaPlaylist(pMediaPlayer0);
mediaPlayerlist->addMedia(QUrl::fromLocalFile("./video/loop.mp4"));
mediaPlayerlist->setCurrentIndex(0);
mediaPlayerlist->setPlaybackMode(QMediaPlaylist::Loop);//循环播放
pMediaPlayer0->setPlaylist(pMediaPlayerlist);
pMediaPlayer0->play();

记录两个问题,以及解决方案
一、切换视频时加载时间过长
针对固定的视频,切换视频等待时间过长,有时几秒钟也是不可接受的,推荐一种解决方法,定义多个QMediaPlayer成员对象,每个对象只setMedia一个视频文件,同时也定义多个QVideoWidget与QMediaPlayer一一对应,当播放不同视频时对其他QVideoWidget进行隐藏。

二、QMediaPlayer播放视频短暂黑屏
当播放视频或切换视频时,即使视频已加载,还是会出现开头短暂黑屏现象,在某些展示性的窗口这种短暂黑屏也无法接受;
这里利用QT信号槽机制,当视频播放位置改变时QMediaPlayer会发送信号positionChanged(qint64 position),position是当前播放时间,单位毫秒,当视频播放play()时,如果position为0,则是黑屏状态,只有当position大于0时,才是真正的播放视频;
我们可以把界面设置一个背景图片,图片为视频开头的画面,这里注意QVideoWidget没法设置背景图,可以在后面的界面设置背景图,当position为0时隐藏QVideoWidget,当position大于0时显示QVideoWidget。

ui->videowidget->setVisible(false);
connect(pMediaPlayer0,&QMediaPlayer::positionChanged,this,&VideoPlayDlg::updatePosition0);

void VideoPlayDlg::updatePosition0(qint64 position)
{
    if(position > 0)
    {
        ui->videowidget->setVisible(true);
    }

	//不使用QMediaPlaylist时,实现循环播放
    if(position == pMediaPlayer0->duration())
    {
        if(pMediaPlayer0->duration() != 0)
        {
            pMediaPlayer0->play();
        }
    }
}

pMediaPlayer0->duration()可获得视频的总时长,当视频还没有加载完成时返回为0,因此排除pMediaPlayer0->duration() == 0的情况。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Qt WebAssembly中使用QMediaPlayer来播放音频或视频文件需要进行一些特殊的设置,因为WebAssembly环境与原生环境有一些差异。 以下是使用QMediaPlayerQt WebAssembly中播放音频的一般步骤: 1. 添加必要的模块和头文件: ```cpp #include <QMediaPlayer> #include <QUrl> #include <QWebChannel> #include <QWebEngineView> ``` 2. 创建一个QMediaPlayer对象并设置音频文件的URL: ```cpp QMediaPlayer* mediaPlayer = new QMediaPlayer(); QUrl audioUrl("path/to/audio.mp3"); mediaPlayer->setMedia(audioUrl); ``` 3. 创建一个QWebEngineView对象来显示音频播放器: ```cpp QWebEngineView* webView = new QWebEngineView(); webView->setHtml("<html><body><div id='player'></div></body></html>"); webView->setFixedSize(800, 600); ``` 4. 将QMediaPlayer对象注册到Qt WebChannel中,以便在JavaScript中访问: ```cpp QWebChannel* webChannel = new QWebChannel(); webChannel->registerObject("player", mediaPlayer); webView->page()->setWebChannel(webChannel); ``` 5. 将QWebEngineView对象添加到窗口或布局中,并显示出来: ```cpp webView->show(); ``` 6. 在JavaScript中,使用以下方式来控制音频播放器: ```javascript var player = new QWebChannel(qt.webChannelTransport, function(channel) { var mediaPlayer = channel.objects.player; mediaPlayer.play(); }); ``` 请注意,以上代码仅提供了基本的示例,实际使用时可能需要根据具体的需求进行调整。 希望这个回答能帮助到你。如果你还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值