QMediaPlayer 类
QMediaPlayer 类允许播放媒体文件。更多...
头文件 | #include <QMediaPlayer> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
qmake | QT += multimedia |
实例化自 | MediaPlayer |
继承自 | QObject |
公共类型
枚举 | Error { NoError, ResourceError, FormatError, NetworkError, AccessDeniedError } |
枚举 | Loops { Infinite, Once } |
枚举 | MediaStatus { NoMedia, LoadingMedia, LoadedMedia, StalledMedia, BufferingMedia, …, InvalidMedia } |
枚举 | PlaybackState { StoppedState, PlayingState, PausedState } |
属性
|
|
公共函数
QMediaPlayer(QObject *parent = nullptr) | |
virtual | ~QMediaPlayer() |
int | activeAudioTrack() const |
int | activeSubtitleTrack() const |
int | activeVideoTrack() const |
QAudioOutput * | audioOutput() const |
QList«QMediaMetaData» | audioTracks() const |
float | bufferProgress() const |
QMediaTimeRange | bufferedTimeRange() const |
qint64 | duration() const |
QMediaPlayer::Error | error() const |
QString | errorString() const |
bool | hasAudio() const |
bool | hasVideo() const |
bool | isAvailable() const |
bool | isPlaying() const |
bool | isSeekable() const |
int | loops() const |
QMediaPlayer::MediaStatus | mediaStatus() const |
QMediaMetaData | metaData() const |
qreal | playbackRate() const |
QMediaPlayer::PlaybackState | playbackState() const |
qint64 | position() const |
void | setActiveAudioTrack(int index) |
void | setActiveSubtitleTrack(int index) |
void | setActiveVideoTrack(int index) |
void | setAudioOutput(QAudioOutput *output) |
void | setLoops(int loops) |
void | setVideoOutput(QObject *) |
void | setVideoSink(QVideoSink *sink) |
QUrl | source() const |
const QIODevice * | sourceDevice() const |
QList«QMediaMetaData» | subtitleTracks() const |
QObject * | videoOutput() const |
QVideoSink * | videoSink() const |
QList«QMediaMetaData» | videoTracks() const |
公开槽
void | 暂停() |
void | 播放() |
void | setPlaybackRate(qreal rate) |
void | setPosition(qint64 position) |
void | setSource(const QUrl &source) |
void | setSourceDevice(QIODevice *device, const QUrl &sourceUrl = QUrl()) |
void | 停止() |
信号
void | activeTracksChanged() |
void | audioOutputChanged() |
void | bufferProgressChanged(float filled) |
void | durationChanged(qint64 duration) |
void | errorChanged() |
void | errorOccurred(QMediaPlayer::Error error, const QString &errorString) |
void | hasAudioChanged(bool available) |
void | hasVideoChanged(bool videoAvailable) |
void | loopsChanged() |
void | mediaStatusChanged(QMediaPlayer::MediaStatus status) |
void | metaDataChanged() |
void | playbackRateChanged(qreal rate) |
void | playbackStateChanged(QMediaPlayer::PlaybackState newState) |
void | playingChanged(bool playing) |
void | positionChanged(qint64 position) |
void | seekableChanged(bool seekable) |
void | sourceChanged(const QUrl &media) |
void | tracksChanged() |
void | videoOutputChanged() |
详细描述
QMediaPlayer类是一个高级媒体播放类。它可以用于播放音频和视频媒体文件。要播放的内容指定为一个QUrl对象。
player = new QMediaPlayer; audioOutput = new QAudioOutput; player->setAudioOutput(audioOutput); connect(player, &QMediaPlayer::positionChanged, this, &MediaExample::positionChanged); player->setSource(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3")); audioOutput->setVolume(50); player->play();
QVideoWidget可用于与QMediaPlayer一起进行视频渲染。
另请参阅QVideoWidget。
成员类型文档
enum QMediaPlayer::Error
定义了一个媒体播放器错误条件。
常量 | 值 | 描述 |
---|---|---|
QMediaPlayer::NoError | 0 | 未发生错误。 |
QMediaPlayer::ResourceError | 1 | 无法解析媒体资源。 |
QMediaPlayer::FormatError | 2 | 媒体资源的格式(不完整)不受支持。播放可能仍然可行,但没有音频或视频组件。 |
QMediaPlayer::NetworkError | 3 | 发生了网络错误。 |
QMediaPlayer::AccessDeniedError | 4 | 没有播放媒体资源的适当权限。 |
enum QMediaPlayer::Loops
一些预定义的loops属性常数。
常量 | 值 | 描述 |
---|---|---|
QMediaPlayer::Infinite | -1 | 永远循环。 |
QMediaPlayer::Once | 1 | 播放一次(默认)。 |
enum QMediaPlayer::MediaStatus
定义了媒体播放器中当前媒体的状态。
常量 | 值 | 描述 |
---|---|---|
QMediaPlayer::NoMedia | 0 | 没有当前媒体。播放器处于停止状态。 |
QMediaPlayer::LoadingMedia | 1 | 正在加载当前媒体。播放器可能处于任何状态。 |
QMediaPlayer::LoadedMedia | 2 | 已加载当前媒体。播放器处于停止状态。 |
QMediaPlayer::StalledMedia | 3 | 由于缓冲不足或其他暂时中断,当前媒体的播放已受阻。播放器处于播放状态或暂停状态。 |
QMediaPlayer::BufferingMedia | 4 | 播放器正在缓冲数据,但已缓冲足够的数据,以便立即继续播放。播放器处于播放状态或暂停状态。 |
QMediaPlayer::BufferedMedia | 5 | 播放器已完全缓冲当前媒体。播放器处于播放状态或暂停状态。 |
QMediaPlayer::EndOfMedia | 6 | 播放已达到当前媒体结尾。播放器处于停止状态。 |
QMediaPlayer::InvalidMedia | 7 | 当前媒体无法播放。播放器处于停止状态。 |
enum QMediaPlayer::PlaybackState
定义了媒体播放器的当前状态。
常量 | 值 | 描述 |
---|---|---|
QMediaPlayer::StoppedState | 0 | 媒体播放器不在播放内容,播放将从当前轨道的开始处开始。 |
QMediaPlayer::PlayingState | 1 | 媒体播放器目前正在播放内容。这表示与playing属性相同。 |
QMediaPlayer::PausedState | 2 | 媒体播放器已暂停播放,当前轨道将恢复到暂停的位置继续播放。 |
属性文档
activeAudioTrack : int
返回当前活动的音频轨道。
默认情况下,将选择第一个可用的音频轨道。
将索引设置为-1
来禁用所有音频轨道。
访问函数
int | activeAudioTrack() const |
void | setActiveAudioTrack(int index) |
通知信号
void | activeTracksChanged() |
activeSubtitleTrack : int
返回当前活动的字幕轨道。
将索引设置为-1
来禁用字幕。
字幕默认是禁用的。
访问函数
int | activeSubtitleTrack() const |
void | setActiveSubtitleTrack(int index) |
通知信号
void | activeTracksChanged() |
activeVideoTrack : int
返回当前活动的视频轨道。
默认情况下,将选择第一个可用的音频轨道。
将索引设置为-1
来禁用所有视频轨道。
访问函数
int | activeVideoTrack() const |
void | setActiveVideoTrack(int index) |
通知信号
void | activeTracksChanged() |
audioOutput : QAudioOutput*
此属性包含媒体播放器使用的音频输出设备。
在播放媒体时将使用当前音频输出。设置新的音频输出将替换当前使用的输出。
将此属性设置为nullptr
将禁用任何音频输出。
访问函数
QAudioOutput * | audioOutput() const |
void | setAudioOutput(QAudioOutput *output) |
通知信号
void | audioOutputChanged() |
[只读]
audioTracks : const QList<QMediaMetaData>
列出媒体内部可用的音频轨道集。
返回的QMediaMetaData描述了各个轨道的特性。
不同的音频轨道可以包含不同语言的音频。
访问函数
QList«QMediaMetaData» | audioTracks() const |
通知信号
void | tracksChanged() |
[只读]
bufferProgress : const float
此属性在播放或恢复播放之前或开始填充临时缓冲区时,包含填充百分比,从0
(空)到1
(满)。
当播放器对象正在缓冲时,此属性包含已填充的临时缓冲区的百分比。缓冲区需要填充达到100%才能开始或恢复播放,此时mediaStatus()将返回BufferedMedia或BufferingMedia。如果值低于100
,mediaStatus()将返回StalledMedia。
访问函数
float | bufferProgress() const |
通知信号
void | bufferProgressChanged(float filled) |
另请参阅mediaStatus().
[只读]
duration : const qint64
此属性包含当前媒体的持续时间。
该值表示当前媒体的累计播放时间(毫秒)。此值可能在 QMediaPlayer 对象的生命周期内发生变化,且在初始播放开始时可能不可用。要接收状态通知,请连接到 durationChanged() 信号。
访问函数
qint64 | duration() const |
通知信号
void | durationChanged(qint64 duration) |
[只读]
error : const Error
此属性包含描述最后一个错误状态的字符串。
访问函数
QMediaPlayer::Error | error() const |
通知信号
void | errorChanged() |
另请参阅error。
[只读]
errorString : const QString
此属性包含更详细地描述当前错误状态的字符串。
访问函数
QString | errorString() const |
通知信号
void | errorChanged() |
[只读]
hasAudio : const bool
此属性表示媒体是否包含音频。
访问函数
bool | hasAudio() const |
通知信号
void | hasAudioChanged(bool available) |
[只读]
hasVideo : const bool
此属性表示媒体是否包含视频。
访问函数
bool | hasVideo() const |
通知信号
void | hasVideoChanged(bool videoAvailable) |
loops : int
确定在播放器停止之前媒体播放的次数。将此属性设置为 QMediaPlayer::Infinite 以无限循环当前媒体文件。
默认值为 1
。将此属性设置为 0
无任何效果。
访问函数
int | loops() const |
void | setLoops(int loops) |
通知信号
void | loopsChanged() |
[只读]
mediaStatus : const MediaStatus
此属性包含当前媒体流的当前状态。
流状态描述了当前流的播放进展情况。
默认情况下,此属性为 QMediaPlayer::NoMedia
访问函数
QMediaPlayer::MediaStatus | mediaStatus() const |
通知信号
void | mediaStatusChanged(QMediaPlayer::MediaStatus status) |
[只读]
metaData : const QMediaMetaData
返回由媒体播放器使用的当前媒体的元数据。
元数据可能包含视频标题或其创建日期等信息。
注意:Windows 实现仅为位于本地文件系统上的媒体提供元数据。
访问函数
QMediaMetaData | metaData() const |
通知信号
void | metaDataChanged() |
playbackRate : qreal
此属性包含当前媒体的播放速率。
此值是应用于媒体标准播放速率的乘数。默认情况下,此值为1.0,表示媒体以标准速度播放。大于1.0的值将增加播放速度,而介于0.0和1.0之间的值将导致播放速度减慢。不支持负播放速率。
并非所有播放服务都支持改变播放速率。在快进或快退时音频和视频的状态和品质由框架定义。
访问函数
qreal | playbackRate() const |
void | setPlaybackRate(qreal rate) |
通知信号
void | playbackRateChanged(qreal rate) |
[只读]
playbackState : const PlaybackState
访问函数
QMediaPlayer::PlaybackState | playbackState() const |
通知信号
void | playbackStateChanged(QMediaPlayer::PlaybackState newState) |
另请参阅playing。
[只读,自6.5起]
playing : const bool
此属性表示媒体是否在播放。
此属性在Qt 6.5中引入。
访问函数
bool | isPlaying() const |
通知信号
void | playingChanged(bool playing) |
另请参阅playbackState和PlayingState。
position : qint64
此属性包含当前媒体的播放位置。
值表示从媒体开始起的当前播放位置,单位为毫秒。使用positionChanged()信号表示位置变化。
如果seekable属性为真,则可以将此属性设置为毫秒。
访问函数
qint64 | position() const |
void | setPosition(qint64 position) |
通知信号
void | positionChanged(qint64 position) |
[只读]
seekable : const bool
此属性包含当前媒体的可搜索状态。
如果支持搜索,则此属性为真;否则为假。此属性的状态可能在整个QMediaPlayer对象的生命周期内发生变化,使用seekableChanged信号来监视变化。
访问函数
bool | isSeekable() const |
通知信号
void | seekableChanged(bool seekable) |
source : QUrl
此属性包含玩家对象正在使用的活动媒体源。
玩家对象将使用QUrl来选择要播放的内容。
默认情况下,此属性具有一个null QUrl。
将此属性设置为null QUrl将导致播放器放弃与当前媒体源相关的所有信息,并停止与该媒体相关的所有I/O操作。
访问函数
QUrl | source() const |
void | setSource(const QUrl &source) |
通知信号
void | sourceChanged(const QUrl &media) |
另见 QUrl.
[只读]
subtitleTracks : const QList<QMediaMetaData>
列出媒体中可用的字幕轨道集。
返回的QMediaMetaData描述了各个轨道的特性。
访问函数
QList«QMediaMetaData» | subtitleTracks() const |
通知信号
void | tracksChanged() |
videoOutput : QObject*
该属性包含媒体播放器要使用的视频输出。
媒体播放器只能连接一个视频输出,因此设置此属性将替换先前连接的视频输出。
将此属性设置为 nullptr
将禁用视频输出。
访问函数
QObject * | videoOutput() const |
void | setVideoOutput(QObject *) |
通知信号
void | videoOutputChanged() |
[只读]
videoTracks : const QList<QMediaMetaData>
列出媒体中可用的视频轨道集。
返回的QMediaMetaData描述了各个轨道的特性。
访问函数
QList«QMediaMetaData» | videoTracks() const |
通知信号
void | tracksChanged() |
成员函数文档
[显式]
QMediaPlayer::QMediaPlayer(QObject *parent = nullptr)
以 parent 为子对象构造 QMediaPlayer 实例。
[虚函数外包]
QMediaPlayer::~QMediaPlayer()
销毁播放器对象。
float QMediaPlayer::bufferProgress() const
当缓冲数据时,返回 0 到 1 之间的数字。
0 表示没有可用的缓冲数据,在此情况下,播放通常会停止。一旦缓冲达到 1,表示已缓冲足够的数据以能够恢复播放。
bufferProgress() 对于本地文件始终返回 1。
注意:bufferProgress 属性的 getter 函数。
[信号]
void QMediaPlayer::bufferProgressChanged(float filled)
当本地缓冲区填充到 0 到 1 之间的某个数值时发出此信号。
注意:bufferProgress 属性的通告信号。
QMediaTimeRange QMediaPlayer::bufferedTimeRange() const
返回描述当前缓冲数据的 QMediaTimeRange。
从远程源流式传输媒体时,媒体文件的不同部分可以在本地可用。返回的 QMediaTimeRange 对象描述了已缓冲并可立即播放的时间范围。
另见:QMediaTimeRange.
qint64 QMediaPlayer::duration() const
返回当前媒体时长(毫秒)。
如果媒体播放器没有有效的媒体文件或流,则返回0。对于直播流,随着更多数据的可用,时长通常在播放过程中发生变化。
注意:属性的duration的获取器函数。
[信号]
void QMediaPlayer::durationChanged(qint64 duration)
通知内容时长变更为 duration(以毫秒为单位)。
注意:属性的duration的通知信号。
QMediaPlayer::Error QMediaPlayer::error() const
返回当前的错误状态。
注意:属性的error的获取器函数。
[信号]
void QMediaPlayer::errorOccurred(QMediaPlayer::Error error, const QString &errorString)
通知发生错误条件,其中 errorString 包含错误描述。
另请参阅:errorString()。
[信号]
void QMediaPlayer::hasAudioChanged(bool available)
通知音频内容的可用性已变为 available。
注意:属性的hasAudio的通知信号。
[信号]
void QMediaPlayer::hasVideoChanged(bool videoAvailable)
通知视觉内容的可用性已变为 videoAvailable。
注意:属性的hasVideo的通知信号。
bool QMediaPlayer::isAvailable() const
如果此平台支持媒体播放器,则返回true。
bool QMediaPlayer::isSeekable() const
如果媒体可定位,则返回true。大多数基于文件的媒体文件都是可定位的,但直播流通常不是。
注意:属性的seekable的获取器函数。
另请参阅:position。
[信号]
void QMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status)
通知当前媒体的状态已改变。
注意:属性的mediaStatus的通知信号。
另请参阅mediaStatus().
[槽]
void QMediaPlayer::pause()
暂停播放当前源。
[槽]
void QMediaPlayer::play()
开始或继续播放当前源。
qreal QMediaPlayer::playbackRate() const
返回当前的播放速率。
注意:播放速率属性的获取器函数。
另请参阅 setPlaybackRate()。
[信号]
void QMediaPlayer::playbackRateChanged(qreal rate)
通知 playbackRate 已更改为 rate。
注意: playbackRate 属性的通知信号。
qint64 QMediaPlayer::position() const
返回正在播放的媒体中的当前位置(以毫秒为单位)。
如果媒体播放器没有有效的媒体文件或流,则返回0。对于直播流,随着更多数据的可用,时长通常在播放过程中发生变化。
注意: position 属性的获取函数。
另请参阅 setPosition。
[信号]
void QMediaPlayer::positionChanged(qint64 position)
通知内容的位置已更改为 position,单位为毫秒。
注意: position 属性的通知信号。
[信号]
void QMediaPlayer::seekableChanged(bool seekable)
通知播放器对象的 seekable 状态已更改。
注意: seekable 属性的通知信号。
[槽函数]
void QMediaPlayer::setSource(const QUrl &source)
设置当前 source。
将媒体设置为空 QUrl 将导致播放器丢弃与当前媒体源相关的所有信息,并停止所有相关的 I/O 操作。设置媒体将停止播放。
注意: 此函数将在记录媒体指定的源后立即返回。它不会等待媒体加载完成,也不会检查错误。请监听 mediaStatusChanged() 和 error() 信号,以便在媒体加载期间收到通知,以及在加载期间发生错误。
注意: 由于安全原因,FFmpeg(由 FFmpeg 媒体后端使用)限制使用嵌套协议。在所有输入都被信任的受控环境中,可以使用 QT_FFMPEG_PROTOCOL_WHITELIST 环境变量来覆盖受批准的协议列表。此环境变量是 Qt 的私有 API,并且可能在补丁版本之间更改,不会事先通知。
注意: source 属性的设置函数。
另请参阅 source。
[槽函数]
void QMediaPlayer::setSourceDevice(QIODevice *device, const QUrl &sourceUrl = QUrl())
设置当前 device 作为源。
媒体数据将从 device 中读取。可以提供 sourceUrl 来解析有关媒体、MIME 类型等额外的信息。必须保持 device 打开且可读。
对于 macOS,device 也应该是可寻址的。
注意: 此函数将在记录媒体指定的源后立即返回。它不会等待媒体加载完成,也不会检查错误。请监听 mediaStatusChanged() 和 error() 信号,以便在媒体加载时收到通知,以及加载期间是否发生错误。
另请参阅 sourceDevice()。
void QMediaPlayer::setVideoSink(QVideoSink *sink)
设置sink为获取视频数据的QVideoSink实例。
另请参阅 videoSink()。
[signal]
void QMediaPlayer::sourceChanged(const QUrl &media)
当媒体源改为media时发出信号。
注意:属性source的通知器信号。
const QIODevice *QMediaPlayer::sourceDevice() const
返回媒体数据的流源。
仅在将流传递到setSource()时有效。
另请参阅 setSourceDevice()和setSource()。
[slot]
void QMediaPlayer::stop()
停止播放,并将播放位置重置到开始。
QVideoSink *QMediaPlayer::videoSink() const
返回QVideoSink实例。
另请参阅 setVideoSink()。
© 2024 Qt公司。本文件中包含的文档贡献是各自所有者的版权。本文件提供的文档是在自由软件基金会发布的GNU自由文档许可证版本1.3的条款下授权的。Qt及其相关标志是芬兰以及其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。