在用FFmpeg与QT实现播放器之前,先看看QT自带的播放器示例,研究下,是怎么实现的。必然又需要看看需要使用哪些QT类来完成这个任务。
QMediaPlayer
QMediaPlayer
类的定义这里就不贴出来了,主要记录一下关于类如何使用的关键信息
QMediaPlayer
类的player播放状态:State
状态枚举名称 | 枚举值 | 说明 |
---|---|---|
StoppedState | 0 | 播放停止状态 |
PlayingState | 1 | 播放状态 |
PausedState | 2 | 播放暂停状态 |
QMediaPlayer
类的媒体状态:MediaStatus
状态枚举名称 | 枚举值 | 说明 |
---|---|---|
UnknownMediaStatus | 0 | 未知状态 |
NoMedia | 1 | 无媒体文件,player处于StoppedState |
LoadingMedia | 2 | 媒体文件加载中,player可以处于任何状态 |
LoadedMedia | 3 | 媒体文件已加载,player处于StoppedState |
StalledMedia | 4 | 媒体处于延迟或者暂时的中断状态,palyer处于 PlayingState或者PausedState |
BufferingMedia | 5 | 媒体正在缓冲数据,palyer处于 PlayingState或者PausedState |
BufferedMedia | 6 | 媒体缓冲数据完成,palyer处于 PlayingState或者PausedState |
EndOfMedia | 7 | 媒体结束,player处于StoppedState |
InvalidMedia | 8 | 非法的媒体文件,player处于StoppedState |
QMediaPlayer
类的player播放标志位:Flags
状态枚举名称 | 枚举值 | 说明 |
---|---|---|
LowLatency | 1 | 播放未压缩的音频数据,播放表现为低延时,主要播放beeps, ringtones等 |
StreamPlayback | 2 | 播放基于 QIODevice构建的媒体文件,QMediaPlayer或自动选择支持的流进行播放 |
VideoSurface | 4 | 渲染视频到QAbstractVideoSurface output |
QMediaPlayer
类的player错误标志位:Error
状态枚举名称 | 枚举值 | 说明 |
---|---|---|
NoError | 0 | 无错误 |
ResourceError | 1 | 媒体源错误 |
FormatError | 2 | 格式错误,播放可能会丢失音频或者视频 |
NetworkError | 3 | 网络错误 |
AccessDeniedError | 4 | 访问权限错误 |
ServiceMissingError | 5 | 服务丢失错误 |
QMediaPlayer
类的属性:
属性名称 | 取值类型 | 说明 | 访问函数 |
---|---|---|---|
audioAvailable | const bool | 音频是否可用,audioAvailableChanged信号函数用于监控其状态 | bool isAudioAvailable() const |
audioRole | QAudio::Role | 音频流播放role | QAudio::Role audioRole() const,void setAudioRole(QAudio::Role audioRole) |
bufferStatus | const int | 缓冲数据的百分比,在开始播放或者回复播放之前 | int bufferStatus() const, void bufferStatusChanged(int percentFilled) |
currentMedia | const QMediaContent | 当前激活的媒体,在使用Playlist时,可能与mdia属性不同 | QMediaContent currentMedia() const, void currentMediaChanged(const QMediaContent &media) |
duration | const qint64 | currentMedia的播放时长,单位ms | qint64 duration() const, void durationChanged(qint64 duration) |
media | QMediaContent | 激活的并被使用的媒体源 | QMediaContent media() const, void setMedia(const QMediaContent &media, QIODevice *stream = nullptr), void mediaChanged(const QMediaContent &media) |
playbackRate | qreal | 当前媒体的播放速度,默认为1.0 | qreal playbackRate() const, void setPlaybackRate(qreal rate), void playbackRateChanged(qreal rate) |
playlist | QMediaPlaylist* | 播放列表 | QMediaPlaylist * playlist() const, void setPlaylist(QMediaPlaylist *playlist), |
volume | int | 音量,取值范围0—100 | int volume() const, void setVolume(int volume), void volumeChanged(int volume |
播放音频步骤
player = new QMediaPlayer;
connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
player->setMedia(QUrl::fromLocalFile("./Music/test.mp3"));
player->setVolume(50);
player->play();
播放视频频步骤
QMediaPlayer
要播放视频需要使用辅助类QVideoWidget
、QGraphicsVideoItem
,将辅助类对象设置为QMediaPlayer
的视频输出窗口,就可以播放视频。
playlist = new QMediaPlaylist;
playlist->addMedia(QUrl("movie1.mp4"));
playlist->addMedia(QUrl("movie2.mp4"));
playlist->addMedia(QUrl("movie3.mp4"));
playlist->setCurrentIndex(1);
player = new QMediaPlayer;
player->setPlaylist(playlist);
videoWidget = new QVideoWidget;
player->setVideoOutput(videoWidget);
videoWidget->show();
player->play();
QMediaPlaylist
QMediaPlaylist
类,可以为QMediaPlayer
提供一个播放列表,它其实是QMediaContent
对象的列表,
QMediaPlayer
通过函数setPlayList
来设置一个播放列表
QMediaPlaylist
通过函数addMedia
想播放列表添加一个媒体文件
QMediaPlaylist
类的播放模式:PlaybackMode
状态枚举名称 | 枚举值 | 说明 |
---|---|---|
CurrentItemOnce |