QT学习之QMediaPlayer


在用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要播放视频需要使用辅助类QVideoWidgetQGraphicsVideoItem,将辅助类对象设置为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
Qt WebAssembly中使用QMediaPlayer来播放音频或视频文件需要进行一些特殊的设置,因为WebAssembly环境与原生环境有一些差异。 以下是使用QMediaPlayerQt WebAssembly中播放音频的一般步骤: 1. 添加必要的模块和头文件: ```cpp #include <QMediaPlayer> #include <QUrl> #include <QWebChannel> #include <QWebEngineView> ``` 2. 创建一个QMediaPlayer对象并设置音频文件的URL: ```cpp QMediaPlayer* mediaPlayer = new QMediaPlayer(); QUrl audioUrl("path/to/audio.mp3"); mediaPlayer->setMedia(audioUrl); ``` 3. 创建一个QWebEngineView对象来显示音频播放器: ```cpp QWebEngineView* webView = new QWebEngineView(); webView->setHtml("<html><body><div id='player'></div></body></html>"); webView->setFixedSize(800, 600); ``` 4. 将QMediaPlayer对象注册到Qt WebChannel中,以便在JavaScript中访问: ```cpp QWebChannel* webChannel = new QWebChannel(); webChannel->registerObject("player", mediaPlayer); webView->page()->setWebChannel(webChannel); ``` 5. 将QWebEngineView对象添加到窗口或布局中,并显示出来: ```cpp webView->show(); ``` 6. 在JavaScript中,使用以下方式来控制音频播放器: ```javascript var player = new QWebChannel(qt.webChannelTransport, function(channel) { var mediaPlayer = channel.objects.player; mediaPlayer.play(); }); ``` 请注意,以上代码仅提供了基本的示例,实际使用时可能需要根据具体的需求进行调整。 希望这个回答能帮助到你。如果你还有其他问题,请随时提问。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值