QMediaPlayer 类

QMediaPlayer 类允许播放媒体文件。更多...

头文件 #include <QMediaPlayer>
CMakefind_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmakeQT += 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()
intactiveAudioTrack() const
intactiveSubtitleTrack() const
intactiveVideoTrack() const
QAudioOutput *audioOutput() const
QList«QMediaMetaData»audioTracks() const
floatbufferProgress() const
QMediaTimeRangebufferedTimeRange() const
qint64duration() const
QMediaPlayer::Errorerror() const
QStringerrorString() const
boolhasAudio() const
boolhasVideo() const
boolisAvailable() const
boolisPlaying() const
boolisSeekable() const
intloops() const
QMediaPlayer::MediaStatusmediaStatus() const
QMediaMetaDatametaData() const
qrealplaybackRate() const
QMediaPlayer::PlaybackStateplaybackState() const
qint64position() const
voidsetActiveAudioTrack(int index)
voidsetActiveSubtitleTrack(int index)
voidsetActiveVideoTrack(int index)
voidsetAudioOutput(QAudioOutput *output)
voidsetLoops(int loops)
voidsetVideoOutput(QObject *)
voidsetVideoSink(QVideoSink *sink)
QUrlsource() const
const QIODevice *sourceDevice() const
QList«QMediaMetaData»subtitleTracks() const
QObject *videoOutput() const
QVideoSink *videoSink() const
QList«QMediaMetaData»videoTracks() const

公开槽

void暂停()
void播放()
voidsetPlaybackRate(qreal rate)
voidsetPosition(qint64 position)
voidsetSource(const QUrl &source)
voidsetSourceDevice(QIODevice *device, const QUrl &sourceUrl = QUrl())
void停止()

信号

voidactiveTracksChanged()
voidaudioOutputChanged()
voidbufferProgressChanged(float filled)
voiddurationChanged(qint64 duration)
voiderrorChanged()
voiderrorOccurred(QMediaPlayer::Error error, const QString &errorString)
voidhasAudioChanged(bool available)
voidhasVideoChanged(bool videoAvailable)
voidloopsChanged()
voidmediaStatusChanged(QMediaPlayer::MediaStatus status)
voidmetaDataChanged()
voidplaybackRateChanged(qreal rate)
voidplaybackStateChanged(QMediaPlayer::PlaybackState newState)
voidplayingChanged(bool playing)
voidpositionChanged(qint64 position)
voidseekableChanged(bool seekable)
voidsourceChanged(const QUrl &media)
voidtracksChanged()
voidvideoOutputChanged()

详细描述

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::NoError0未发生错误。
QMediaPlayer::ResourceError1无法解析媒体资源。
QMediaPlayer::FormatError2媒体资源的格式(不完整)不受支持。播放可能仍然可行,但没有音频或视频组件。
QMediaPlayer::NetworkError3发生了网络错误。
QMediaPlayer::AccessDeniedError4没有播放媒体资源的适当权限。

enum QMediaPlayer::Loops

一些预定义的loops属性常数。

常量描述
QMediaPlayer::Infinite-1永远循环。
QMediaPlayer::Once1播放一次(默认)。

enum QMediaPlayer::MediaStatus

定义了媒体播放器中当前媒体的状态。

常量描述
QMediaPlayer::NoMedia0没有当前媒体。播放器处于停止状态
QMediaPlayer::LoadingMedia1正在加载当前媒体。播放器可能处于任何状态。
QMediaPlayer::LoadedMedia2已加载当前媒体。播放器处于停止状态
QMediaPlayer::StalledMedia3由于缓冲不足或其他暂时中断,当前媒体的播放已受阻。播放器处于播放状态暂停状态
QMediaPlayer::BufferingMedia4播放器正在缓冲数据,但已缓冲足够的数据,以便立即继续播放。播放器处于播放状态暂停状态
QMediaPlayer::BufferedMedia5播放器已完全缓冲当前媒体。播放器处于播放状态暂停状态
QMediaPlayer::EndOfMedia6播放已达到当前媒体结尾。播放器处于停止状态
QMediaPlayer::InvalidMedia7当前媒体无法播放。播放器处于停止状态

enum QMediaPlayer::PlaybackState

定义了媒体播放器的当前状态。

常量描述
QMediaPlayer::StoppedState0媒体播放器不在播放内容,播放将从当前轨道的开始处开始。
QMediaPlayer::PlayingState1媒体播放器目前正在播放内容。这表示与playing属性相同。
QMediaPlayer::PausedState2媒体播放器已暂停播放,当前轨道将恢复到暂停的位置继续播放。

属性文档

activeAudioTrack : int

返回当前活动的音频轨道。

默认情况下,将选择第一个可用的音频轨道。

索引设置为-1来禁用所有音频轨道。

访问函数

intactiveAudioTrack() const
voidsetActiveAudioTrack(int index)

通知信号

activeSubtitleTrack : int

返回当前活动的字幕轨道。

索引设置为-1来禁用字幕。

字幕默认是禁用的。

访问函数

intactiveSubtitleTrack() const
voidsetActiveSubtitleTrack(int index)

通知信号

activeVideoTrack : int

返回当前活动的视频轨道。

默认情况下,将选择第一个可用的音频轨道。

索引设置为-1来禁用所有视频轨道。

访问函数

intactiveVideoTrack() const
voidsetActiveVideoTrack(int index)

通知信号

audioOutput : QAudioOutput*

此属性包含媒体播放器使用的音频输出设备。

在播放媒体时将使用当前音频输出。设置新的音频输出将替换当前使用的输出。

将此属性设置为nullptr将禁用任何音频输出。

访问函数

QAudioOutput *audioOutput() const
voidsetAudioOutput(QAudioOutput *output)

通知信号

voidaudioOutputChanged()

[只读] audioTracks : const QList<QMediaMetaData>

列出媒体内部可用的音频轨道集。

返回的QMediaMetaData描述了各个轨道的特性。

不同的音频轨道可以包含不同语言的音频。

访问函数

QList«QMediaMetaData»audioTracks() const

通知信号

[只读] bufferProgress : const float

此属性在播放或恢复播放之前或开始填充临时缓冲区时,包含填充百分比,从0(空)到1(满)。

当播放器对象正在缓冲时,此属性包含已填充的临时缓冲区的百分比。缓冲区需要填充达到100%才能开始或恢复播放,此时mediaStatus()将返回BufferedMediaBufferingMedia。如果值低于100mediaStatus()将返回StalledMedia

访问函数

floatbufferProgress() const

通知信号

voidbufferProgressChanged(float filled)

另请参阅mediaStatus().

[只读] duration : const qint64

此属性包含当前媒体的持续时间。

该值表示当前媒体的累计播放时间(毫秒)。此值可能在 QMediaPlayer 对象的生命周期内发生变化,且在初始播放开始时可能不可用。要接收状态通知,请连接到 durationChanged() 信号。

访问函数

qint64duration() const

通知信号

voiddurationChanged(qint64 duration)

[只读] error : const Error

此属性包含描述最后一个错误状态的字符串。

访问函数

QMediaPlayer::Errorerror() const

通知信号

voiderrorChanged()

另请参阅error

[只读] errorString : const QString

此属性包含更详细地描述当前错误状态的字符串。

访问函数

QStringerrorString() const

通知信号

voiderrorChanged()

[只读] hasAudio : const bool

此属性表示媒体是否包含音频。

访问函数

boolhasAudio() const

通知信号

voidhasAudioChanged(bool available)

[只读] hasVideo : const bool

此属性表示媒体是否包含视频。

访问函数

boolhasVideo() const

通知信号

voidhasVideoChanged(bool videoAvailable)

loops : int

确定在播放器停止之前媒体播放的次数。将此属性设置为 QMediaPlayer::Infinite 以无限循环当前媒体文件。

默认值为 1。将此属性设置为 0 无任何效果。

访问函数

intloops() const
voidsetLoops(int loops)

通知信号

voidloopsChanged()

[只读] mediaStatus : const MediaStatus

此属性包含当前媒体流的当前状态。

流状态描述了当前流的播放进展情况。

默认情况下,此属性为 QMediaPlayer::NoMedia

访问函数

QMediaPlayer::MediaStatusmediaStatus() const

通知信号

voidmediaStatusChanged(QMediaPlayer::MediaStatus status)

[只读] metaData : const QMediaMetaData

返回由媒体播放器使用的当前媒体的元数据。

元数据可能包含视频标题或其创建日期等信息。

注意:Windows 实现仅为位于本地文件系统上的媒体提供元数据。

访问函数

QMediaMetaDatametaData() const

通知信号

voidmetaDataChanged()

playbackRate : qreal

此属性包含当前媒体的播放速率。

此值是应用于媒体标准播放速率的乘数。默认情况下,此值为1.0,表示媒体以标准速度播放。大于1.0的值将增加播放速度,而介于0.0和1.0之间的值将导致播放速度减慢。不支持负播放速率。

并非所有播放服务都支持改变播放速率。在快进或快退时音频和视频的状态和品质由框架定义。

访问函数

qrealplaybackRate() const
voidsetPlaybackRate(qreal rate)

通知信号

voidplaybackRateChanged(qreal rate)

[只读] playbackState : const PlaybackState

返回PlaybackState

访问函数

QMediaPlayer::PlaybackStateplaybackState() const

通知信号

voidplaybackStateChanged(QMediaPlayer::PlaybackState newState)

另请参阅playing

[只读,自6.5起] playing : const bool

此属性表示媒体是否在播放。

此属性在Qt 6.5中引入。

访问函数

boolisPlaying() const

通知信号

voidplayingChanged(bool playing)

另请参阅playbackStatePlayingState

position : qint64

此属性包含当前媒体的播放位置。

值表示从媒体开始起的当前播放位置,单位为毫秒。使用positionChanged()信号表示位置变化。

如果seekable属性为真,则可以将此属性设置为毫秒。

访问函数

qint64position() const
voidsetPosition(qint64 position)

通知信号

voidpositionChanged(qint64 position)

[只读] seekable : const bool

此属性包含当前媒体的可搜索状态。

如果支持搜索,则此属性为真;否则为假。此属性的状态可能在整个QMediaPlayer对象的生命周期内发生变化,使用seekableChanged信号来监视变化。

访问函数

boolisSeekable() const

通知信号

voidseekableChanged(bool seekable)

source : QUrl

此属性包含玩家对象正在使用的活动媒体源。

玩家对象将使用QUrl来选择要播放的内容。

默认情况下,此属性具有一个null QUrl

将此属性设置为null QUrl将导致播放器放弃与当前媒体源相关的所有信息,并停止与该媒体相关的所有I/O操作。

访问函数

QUrlsource() const
voidsetSource(const QUrl &source)

通知信号

voidsourceChanged(const QUrl &media)

另见 QUrl.

[只读] subtitleTracks : const QList<QMediaMetaData>

列出媒体中可用的字幕轨道集。

返回的QMediaMetaData描述了各个轨道的特性。

访问函数

QList«QMediaMetaData»subtitleTracks() const

通知信号

videoOutput : QObject*

该属性包含媒体播放器要使用的视频输出。

媒体播放器只能连接一个视频输出,因此设置此属性将替换先前连接的视频输出。

将此属性设置为 nullptr 将禁用视频输出。

访问函数

QObject *videoOutput() const
voidsetVideoOutput(QObject *)

通知信号

voidvideoOutputChanged()

[只读] videoTracks : const QList<QMediaMetaData>

列出媒体中可用的视频轨道集。

返回的QMediaMetaData描述了各个轨道的特性。

访问函数

QList«QMediaMetaData»videoTracks() const

通知信号

成员函数文档

[显式] 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()

暂停播放当前源。

另请参阅:play() 和 stop()。

[槽] void QMediaPlayer::play()

开始或继续播放当前源。

另请参阅:pause() 和 stop()。

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()

停止播放,并将播放位置重置到开始。

另请参阅 play()和pause()。

QVideoSink *QMediaPlayer::videoSink() const

返回QVideoSink实例。

另请参阅 setVideoSink()。

© 2024 Qt公司。本文件中包含的文档贡献是各自所有者的版权。本文件提供的文档是在自由软件基金会发布的GNU自由文档许可证版本1.3的条款下授权的。Qt及其相关标志是芬兰以及其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。