Qt Creator 模块学习 ——音视频播放(解决了DirectShowPlayerService::doSetUrlSource问题)

Qt Creator 模块学习 ——音视频播放

Qt对于音视频的播放和控制,相机拍照,收音机等多媒体应用提供了强大的支持。Qt5有了专门的模块Qt Multimedia来实现多媒体的应用。C++中多媒体模块可以实现的功能和对应的类如下图所示:

功能C++类
播放音效QSoundEffect
播放低延迟音频QAudioQutput
播放编码音频QMediaPlayer
播放视频QMedaPlayer,Qvideowidget,QGraphicsVideoItem
处理视频QMedaPlayer,QVideoFrame,QAbstractVideSurface
发现原始音频设备QAudioDeviceInfo
录制编码音频数据QAudioRecorder
访问相机取景器QCamera,QVideoWidget,QGraphicsVideoItem
处理取景器QCamera,QAbstractVideSurface,QVideoFrame
拍摄照片QCamera,QCameraImageCapture
拍摄视频

暂时就知道这么多了。好找书…

播放音频

在使用多媒体模块需要在.pro文件加入: QT += multimedia
随后,让我们直接上代码:

    player = new QMediaPlayer;
    player->setMedia(QUrl::fromLocalFile("D:/1.mp3"));

随后我们可以加入两个按钮一个播放一个暂停

player->play();//播放键
player->pause();//暂停键
player->stop();//停止键

以上三个请自行加入信号和槽函数使用。
那么大家是不是非常激动的点击了播放按钮发现…好像没有声音,把音量开到最大,好像还是没有声音,那么这是为什么呢?
我们此时问题框会发现下面这句话:
DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80070002 ()
这是为什么呢?Qt 中的多媒体播放,底层是使用DirectShowPlayerService,需要一个DirectShow解码器,例如LAV Filters
LAV Filters的下载地址如下:http://files.1f0.de/lavf/LAVFilters-0.65.exe
安装位置在QT的文件夹里就可以了。

视频播放

player = new QMediaPlayer(this);
    video = new QVideoWidget(this);
    video->resize(600,300);
    
    player->setVideoOutput(video);
    player->setMedia(QUrl::fromLocalFile("D:/c.mp4"));
    player->play();

音视频的播放到这里就说完了,如果还是无法对文件进行解码,我们可以直接播放wav(音乐)wmv(视频)这两个应该不会出错。

播放进度条

在ui界面拿到horizontalSlider,转到槽sliderMoved,在自定义槽updateposition
然后连接在构造函数加入

connect(player,&QMediaPlayer::positionChanged,this,&MainWindow::updatePosition);
void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
    player->setPosition(position*1000);
}
void MainWindow::updatePosition(qint64 position){
    ui->horizontalSlider->setMaximum(player->duration()/1000);
    ui->horizontalSlider->setValue(position/1000);
}

运行后自行查看。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值