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);
}

运行后自行查看。

你可能感兴趣的:(Qt,Creator模块学习)