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);
}
运行后自行查看。