Qt中多媒体的实现
Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供了强大的支持。Qt5使用了全新的Qt Multimedia模块来实现多媒体应用,Qt4中用来实现多媒体功能的Phonon模块已经被移除。新的Qt Multimedia模块提供了丰富的接口,可以轻松地使用平台的多媒体功能。例如进行媒体播放、使用相机和收音机等。
Qt的对媒体接口建立在底层平台的多媒体框架之上,这就意味着对于各种编解码器的支持依赖于使用的平台。如果要访问一些平台相关的设置,或者将Qt多媒体接口移植到新的平台,可以参考Qt帮助中的Multimedia Backend Development文档。
要使用多媒体模块的内容,需要在.pro项目文件中添加如下代码
Qt += multimedia
一、mediaplayer
QMediaPlayer集成了底部包括音频输出和音频文件读取等等操作,是一个高层次的,封装好的播放器内核,通过调用它,你可以实现输入任意格式的视频、音频播放,并实现对其播放状态的调整。
下面我们用QMediaPlayer来播放一段音乐
player = new QMediaPlayer;
player->setMedia(QMediaContent(QUrl::fromLocalFile("/*****/test.mp3")));
player->play();
QMediaPlayer中几个重要属性
属性 | 类型 | 说明 |
---|---|---|
duration | qint64 | 当前播放媒体对象的持续时间(毫秒) |
mediaStatus | MediaStatus | 当前媒体的状态、枚举类型 |
state | State | 当前的播放状态,枚举类型 |
muted | bool | 是否静音 |
playlist | QMediaPlaylist | 当前的播放列表 |
position | qint64 | 保存当前播放的进度(毫秒) |
volume | int | 当前的音量 |
二、QVideoWidget
QMediaPlayer不仅可以播放音频,还可以播放视频。不过如果要视频在界面上显示出来,还需要其他类进行辅助,比如QVideoWidget、QGraphicsVideoItem或者自定义的类。QVideoWidget继承自QWidget,所有它可以作为一个普通窗口部件进行显示,也可以嵌入到其他窗口中。将QVideoWidget指定为QMediaPlayer的视频输出窗口后,就可以显示播放的视频画面。
而像GIF格式的动画类型,可以使用QMovie播放。
在项目文件的.pro中修改代码如下:
QT += core gui multimedia multimediawidgets
player = new QMediaPlayer(this);
videoWidget = new QVideoWidget(this);
player->setVideoOutput(videoWidget);
player->setMedia(QUrl::fromLocalFile("/******/test.wmv"));
player->play();
属性
属性 | 类型 | 说明 |
---|---|---|
brightness | int | 亮度 |
hue | int | 色调 |
contrast | int | 对比度 |
fullScreen | bool | 是否全屏 |
saturation | int | 饱和度 |
三、QMediaPlaylist
QMediaPlaylist是一个列表,它可以保存媒体文件,包括媒体路径等信息,它具有着列表的性质,比如添加删除插入等,但它能做的,比单纯的储存要多得多。设置播放顺序,对播放的控制,保存到本地,从本地读取,都可以很方便地实现。
用QMediaPlaylist添加媒体文件可以使用addMedia方法
playlist = new QMediaPlaylist;
playlist->addMedia(QUrl::fromLocalFile("/****/music1.mp3"));
playlist->addMedia(QUrl::fromLocalFile("/****/music2.mp3"));
playlist->addMedia(QUrl::fromLocalFile("/****/music3.mp3"));
playlist->setCurrentIndex(0);
playlist->setPlaybackMode(QMediaPlaylist::Loop);
player->setPlaylist(playlist);
属性
名称 | 枚举值 | 说明 |
---|---|---|
QMediaPlaylist::CurrentItemOnce | 0 | 单曲播放 |
QMediaPlaylist::CurrentItemInloop | 1 | 单曲循环 |
QMediaPlaylist::Sequential | 2 | 顺序播放 |
QMediaPlaylist::Loop | 3 | 列表循环 |
QmediaPlaylist::Random | 4 | 随机播放 |