在Qt5中使用Qt Multimedia 模块来实现多媒体应用(音视频播放和控制,相机拍照。收音等)。
使用多媒体模块时需要在pro文件中添加:
QT += multimedia
不追求低延迟的话使用QMediaPlayer(占用资源少)
play() | 播放 |
pause() | 暂停 |
stop() | 停止 |
setMuted(bool) | 设置是否静音 |
setVolume() | 设置音量 |
setPlaybackRate() | 设置播放速率 |
setMedia() | 设置播放源 |
setPlaylist() | 设置播放列表 |
duration() | 音频持续时间 |
state() | 音频状态 |
position() | 播放的当前位置 |
setVideoOutput() | 设置视频播放器 |
常用的信号:
audioRoleChanged | 媒体播放器的音频角色已更改 |
currentMediaChanged | 当前播放的内容已更改为媒体 |
durationChanged | 内容的持续时间已更改为持续时间的信号 |
error | 发生了错误情况 |
mediaChanged | 媒体源已更改为媒体 |
mutedChanged | 已更改为静音 |
playbackRateChanged | 速率已更改 |
positionChanged | 内容的位置已更改为位置,以毫秒表示 |
stateChanged | 播放器对象的状态已更改 |
volumeChanged | 播放音量已更改 |
QMediaPlayer::Error(错误的种类)
QMediaPlayer::NoError | 未发生错误。 |
QMediaPlayer::ResourceError | 无法解析媒体资源。 |
QMediaPlayer::FormatError | 媒体资源的格式不受(完全)支持。播放可能仍然可以,但没有音频或视频组件。 |
QMediaPlayer::NetworkError | 发生网络错误 |
QMediaPlayer::AccessDeniedError | 没有播放媒体资源的适当权限。 |
QMediaPlayer::ServiceMissingError | 找不到有效的播放服务,无法继续播放。 |
在pro文件中添加:
QT += multimedia
在widget.h中添加一个QMediaPlayer对象
QMediaPlayer *player;//需要添加头文件#include<QMediaPlayer>
在ui界面中添加以下控件:
lineEdit label*2 pushButton*3
构造函数的内容为:
- QUrl url("F:/music/That Girl - Olly Murs.mp3");//获取文件路径
- player=new QMediaPlayer;
- player->setMedia(url);//设置播放对象
- ui->lineEdit->setText(url.toString());//设置对象名
- connect(ui->pushButton,&QPushButton::clicked,[=]()
- {
- player->play();//播放
- });
- connect(ui->pushButton_2,&QPushButton::clicked,[=]()
- {
- player->pause();//暂停
- });
- connect(ui->pushButton_3,&QPushButton::clicked,[=]()
- {
- player->stop();//停止(会重置到开头)
- });
- connect(player,&QMediaPlayer::durationChanged,[=](){//获取总时间
-
- QTime time;//创建一个时间
- time.setHMS(0,0,0,0);//初始化为0
- time=time.addMSecs(player->duration());//获取播放的总时间,添加毫秒数
- ui->label_2->setText(time.toString("mm:ss:zzz"));//显示总时间
- });
- connect(player,&QMediaPlayer::positionChanged,[=]()//获取播放时间
- {
- QTime time1;
- time1.setHMS(0,0,0,0);//初始化为0
- time1=time1.addMSecs(player->position());//添加毫秒数
- ui->label->setText(time1.toString("mm:ss:zzz"));//显示总时间
- });
功能的展示:
初始状态:
点击播放:
点击暂停的话,就是正常的暂停
点击停止:(音乐回到开头,时间置为0)
QSoundEffect使用低延迟方式来播放为压缩的音频文件,如wav文件,常用于播放用户交互时的音效,弹出框提示音、虚拟键盘敲击声等
play() | 开始 |
stop() | 停止 |
source() | 返回资源位置 |
stutas() | 返回当前状态 |
setVolume() | 设置音量(0.0-1.0) |
setSource() | 设置资源 |
setMuted() | 设置静音 |
setLoopCount() | 设置播放次数 |
播放一个音效:
- QSoundEffect *Sound=new QSoundEffect(this);
- Sound->setSource(QUrl::fromLocalFile("F:/music/y1361.wav"));//设置资源
- Sound->setLoopCount(5);
- Sound->setVolume(1.0);
- Sound->play();//播放
持续播放一个音效的方法:
将循环计数设置为 0 或 1 表示声音效果将仅播放一次,传递无限期地重复。可以在播放音效时更改循环计数,在这种情况下,它会将剩余的循环更新为新的循环计数QSoundEffect::Infinite
Sound->setLoopCount(QSoundEffect::Infinite);