QMediaPlayer Class

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

Header: #include <QMediaPlayer>
CMake.QMediaPlayer find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
在 QML 中: MediaPlayer
继承: QObject

公共类型

enum Error { NoError, ResourceError, FormatError, NetworkError, AccessDeniedError }
enum Loops { Infinite, Once }
enum MediaStatus { NoMedia, LoadingMedia, LoadedMedia, StalledMedia, BufferingMedia, …, InvalidMedia }
enum PlaybackState { StoppedState, PlayingState, PausedState }

属性

公共功能

QMediaPlayer(QObject *parent = nullptr)
virtual ~QMediaPlayer() override
int activeAudioTrack() const
int activeSubtitleTrack() const
int activeVideoTrack() const
QAudioBufferOutput *audioBufferOutput() 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 setAudioBufferOutput(QAudioBufferOutput *output)
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 pause()
void play()
void setPlaybackRate(qreal rate)
void setPosition(qint64 position)
void setSource(const QUrl &source)
void setSourceDevice(QIODevice *device, const QUrl &sourceUrl = QUrl())
void stop()

信号

void activeTracksChanged()
void audioBufferOutputChanged()
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 可与 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无当前媒体。播放器处于StoppedState 状态。
QMediaPlayer::LoadingMedia1正在加载当前媒体。播放器可能处于任何状态。
QMediaPlayer::LoadedMedia2当前媒体已加载。播放器处于StoppedState
QMediaPlayer::StalledMedia3由于缓冲不足或其他临时中断,当前媒体的播放已停止。播放器处于PlayingStatePausedState
QMediaPlayer::BufferingMedia4播放器正在缓冲数据,但缓冲的数据足够继续播放。播放器处于PlayingStatePausedState
QMediaPlayer::BufferedMedia5播放器已完全缓冲当前媒体。播放器处于PlayingStatePausedState
QMediaPlayer::EndOfMedia6当前媒体播放已结束。播放器位于StoppedState
QMediaPlayer::InvalidMedia7无法播放当前媒体。播放器处于StoppedState

enum QMediaPlayer::PlaybackState

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

常数说明
QMediaPlayer::StoppedState0媒体播放器未播放内容,播放将从当前轨道的起点开始。
QMediaPlayer::PlayingState1媒体播放器当前正在播放内容。其指示与playing 属性相同。
QMediaPlayer::PausedState2媒体播放器已暂停播放,当前轨道的播放将从播放器暂停的位置重新开始。

属性文档

activeAudioTrack : int

返回当前激活的音轨。

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

index 设置为-1 可禁用所有音轨。

访问功能:

int activeAudioTrack() const
void setActiveAudioTrack(int index)

通知信号:

void activeTracksChanged()

activeSubtitleTrack : int

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

index 设为-1 可禁用字幕。

字幕默认为禁用。

访问功能:

int activeSubtitleTrack() const
void setActiveSubtitleTrack(int index)

通知信号:

activeVideoTrack : int

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

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

index 设置为-1 可禁用所有视频轨道。

访问功能:

int activeVideoTrack() const
void setActiveVideoTrack(int index)

通知信号:

[since 6.8] audioBufferOutput : QAudioBufferOutput*

该属性用于保存媒体播放器使用的输出音频缓冲区。

为媒体播放器设置音频缓冲区output

如果指定了QAudioBufferOutput ,且媒体源包含音频流,则媒体播放器将发出信号QAudioBufferOutput::audioBufferReceived ,并带有包含解码音频数据的音频缓冲区。在音频流结束时,QMediaPlayer 会发射一个空的QAudioBuffer

QMediaPlayer 如果指定了音频输出端,则在将匹配数据推送到音频输出端时,媒体播放器会同时发射输出音频缓冲区。不过,由于音频缓冲区化,声音播放可能会有少许延迟。

发射音频缓冲区的格式取自指定的output ,如果output 返回的格式无效,则取自匹配的音频流。发射的音频数据不会根据当前播放速率进行缩放。

利用QAudioBufferOutputQMediaPlayer 的潜在用例包括

  • 音频可视化。如果媒体播放器的播放速率不是1 ,则可根据可视化器的要求缩放输出图像的尺寸或图像更新间隔。
  • 任何人工智能声音处理,如语音识别。
  • 将数据发送到外部音频输出。应考虑改变播放速率、与视频同步以及在停止和搜索时手动冲洗。我们不建议将音频缓冲输出用于此目的,除非您有充分的理由这样做。

此属性在 Qt 6.8 中引入。

访问功能:

QAudioBufferOutput *audioBufferOutput() const
void setAudioBufferOutput(QAudioBufferOutput *output)

Notifier 信号:

void audioBufferOutputChanged()

audioOutput : QAudioOutput*

此属性用于保存媒体播放器使用的音频输出设备。

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

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

访问功能:

QAudioOutput *audioOutput() const
void setAudioOutput(QAudioOutput *output)

通知信号:

void audioOutputChanged()

[read-only] audioTracks : const QList<QMediaMetaData>

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

返回的QMediaMetaData 描述了各个音轨的属性。

例如,不同的音轨可以包含不同语言的音频。

访问功能:

QList<QMediaMetaData> audioTracks() const

通知信号:

void tracksChanged()

[read-only] bufferProgress : const float

该属性表示播放开始或恢复前临时缓冲区已满的百分比,从0. (空)到1. (满)。

当播放器对象正在缓冲时,该属性表示临时缓冲区已满的百分比。在播放开始或恢复之前,缓冲区需要达到 100%,此时mediaStatus() 将返回BufferedMediaBufferingMedia 。如果该值低于100mediaStatus() 将返回StalledMedia

访问功能:

float bufferProgress() const

通知信号:

void bufferProgressChanged(float filled)

另请参阅 mediaStatus() 。

[read-only] duration : const qint64

该属性用于保存当前媒体的持续时间。

该值是当前媒体的总播放时间(以毫秒为单位)。该值可能会在QMediaPlayer 对象的整个生命周期内发生变化,初始播放开始时可能不可用,请连接到durationChanged() 信号以接收状态通知。

访问功能:

qint64 duration() const

Notifier 信号:

void durationChanged(qint64 duration)

[read-only] error : const Error

该属性包含一个字符串,描述最后一次出错的情况。

访问功能:

QMediaPlayer::Error error() const

Notifier 信号:

void errorChanged()

另请参见 error().

[read-only] errorString : const QString

该属性包含一个字符串,详细描述了当前的错误状况。

访问功能:

QString errorString() const

通知信号:

void errorChanged()

[read-only] hasAudio : const bool

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

访问功能:

bool hasAudio() const

通知信号:

void hasAudioChanged(bool available)

[read-only] 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()

[read-only] mediaStatus : const MediaStatus

该属性用于保存当前媒体流的状态。

流状态描述了当前流的播放进度。

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

访问功能:

QMediaPlayer::MediaStatus mediaStatus() const

Notifier 信号:

void mediaStatusChanged(QMediaPlayer::MediaStatus status)

[read-only] 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)

[read-only] playbackState : const PlaybackState

返回PlaybackState

访问功能:

QMediaPlayer::PlaybackState playbackState() const

Notifier 信号:

void playbackStateChanged(QMediaPlayer::PlaybackState newState)

另请参阅 playing

[read-only, since 6.5] playing : const bool

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

此属性在 Qt 6.5 中引入。

访问函数:

bool isPlaying() const

Notifier 信号:

void playingChanged(bool playing)

另请参阅 playbackStatePlayingState

position : qint64

该属性用于保存当前媒体的播放位置。

该值是当前的播放位置,以媒体开始后的毫秒为单位。位置的周期性变化将通过positionChanged() 信号显示。

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

访问功能:

qint64 position() const
void setPosition(qint64 position)

Notifier 信号:

void positionChanged(qint64 position)

[read-only] seekable : const bool

该属性表示当前媒体的可寻状态。

如果支持寻道,则此属性为 true;否则为 false。该属性的状态可能会在QMediaPlayer 对象的整个生命周期内发生变化,请使用seekableChanged 信号监控变化。

访问功能:

bool isSeekable() const

通知信号:

void seekableChanged(bool seekable)

source : QUrl

该属性用于保存播放器对象正在使用的活动媒体源。

播放器对象将使用QUrl 选择要播放的内容。

默认情况下,该属性为空QUrl

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

访问功能:

QUrl source() const
void setSource(const QUrl &source)

Notifier 信号:

void sourceChanged(const QUrl &media)

另请参阅 QUrl

[read-only] subtitleTracks : const QList<QMediaMetaData>

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

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

访问功能:

QList<QMediaMetaData> subtitleTracks() const

通知信号:

void tracksChanged()

videoOutput : QObject*

该属性用于保存媒体播放器使用的视频输出。

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

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

访问功能:

QObject *videoOutput() const
void setVideoOutput(QObject *)

通知信号:

void videoOutputChanged()

[read-only] videoTracks : const QList<QMediaMetaData>

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

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

访问功能:

QList<QMediaMetaData> videoTracks() const

Notifier 信号:

void tracksChanged()

成员函数 文档

[explicit] QMediaPlayer::QMediaPlayer(QObject *parent = nullptr)

构造一个 QMediaPlayer 实例,作为parent 的子实例。

[override virtual noexcept] QMediaPlayer::~QMediaPlayer()

销毁玩家对象。

float QMediaPlayer::bufferProgress() const

缓冲数据时,返回一个介于 0 和 1 之间的数字。

0 表示没有可用的缓冲数据,在这种情况下播放通常会停止。一旦缓冲区达到 1,即已缓冲了足够的数据,可以继续播放,播放就会恢复。

对于本地文件,bufferProgress() 将始终返回 1。

注: 属性 bufferProgress 的获取函数。

[signal] void QMediaPlayer::bufferProgressChanged(float filled)

本地缓冲区filled 的数量信号,数值介于 0 和 1 之间。

注: 属性bufferProgress 的通知信号。

QMediaTimeRange QMediaPlayer::bufferedTimeRange() const

返回一个描述当前缓冲数据的QMediaTimeRange

从远程源流式传输媒体时,媒体文件的不同部分可能在本地可用。返回的QMediaTimeRange 对象描述了已缓冲并可立即播放的时间范围。

另请参阅 QMediaTimeRange

qint64 QMediaPlayer::duration() const

返回当前媒体的持续时间(毫秒)。

如果媒体播放器没有有效的媒体文件或数据流,则返回 0。对于实时流,持续时间通常会随着可用数据的增加而在播放过程中发生变化。

注: 属性 duration 的获取函数。

[signal] void QMediaPlayer::durationChanged(qint64 duration)

表示内容的持续时间已更改为duration ,单位为毫秒。

注: 属性duration 的通知信号。

QMediaPlayer::Error QMediaPlayer::error() const

返回当前错误状态。

注: 属性错误的获取函数。

[signal] void QMediaPlayer::errorOccurred(QMediaPlayer::Error error, const QString &errorString)

发生error 情况的信号,其中errorString 包含错误描述。

另请参阅 errorString().

[signal] void QMediaPlayer::hasAudioChanged(bool available)

音频内容的可用性已更改为available 的信号。

注: 物业通知信号hasAudio

[signal] void QMediaPlayer::hasVideoChanged(bool videoAvailable)

可视内容的可用性已更改为videoAvailable 的信号。

注: 物业通知信号hasVideo

bool QMediaPlayer::isAvailable() const

如果该平台支持媒体播放器,则返回 true。

bool QMediaPlayer::isSeekable() const

如果媒体可寻址,则返回 true。大多数基于文件的媒体文件都是可寻的,但实时流媒体通常不是。

注: 属性seekable 的获取函数。

另请参阅 position

[signal] void QMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status)

当前媒体的status 已更改的信号。

注: 属性mediaStatus 的通知信号。

另请参阅 mediaStatus().

[slot] void QMediaPlayer::pause()

暂停播放当前信号源。

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

[slot] void QMediaPlayer::play()

开始或继续播放当前音源。

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

qreal QMediaPlayer::playbackRate() const

返回当前播放速率。

注: 属性 playbackRate 的获取函数。

另请参阅 setPlaybackRate().

[signal] void QMediaPlayer::playbackRateChanged(qreal rate)

表示playbackRate 已更改为rate

注: 物业playbackRate 的通知信号。

qint64 QMediaPlayer::position() const

以毫秒为单位返回正在播放的媒体的当前位置。

如果媒体播放器没有有效的媒体文件或数据流,则返回 0。对于实时流,持续时间通常会随着可用数据的增加而在播放过程中发生变化。

注: 属性 position 的获取函数。

另请参阅 setPosition().

[signal] void QMediaPlayer::positionChanged(qint64 position)

表示内容的位置已更改为position ,单位为毫秒。

注: 属性position 的通知信号。

[signal] void QMediaPlayer::seekableChanged(bool seekable)

表示seekable 播放器对象的状态已发生变化。

注: 属性seekable 的通知信号。

[slot] void QMediaPlayer::setSource(const QUrl &source)

设置当前source

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

注意: 录制指定媒体源后,此函数将立即返回。它不会等待介质加载完成,也不会检查错误。请留意mediaStatusChanged() 和error() 信号,以便在媒体已加载和加载过程中发生错误时收到通知。

注意: 出于安全考虑,FFmpeg 媒体后端使用的 FFmpeg 限制使用嵌套协议。在所有输入都受信任的受控环境中,可使用 QT_FFMPEG_PROTOCOL_WHITELIST 环境变量来覆盖已批准的协议列表。该环境变量是 Qt 的私有 API,在不同补丁发布时可能会发生变化,恕不另行通知。

注: 属性source 的设置函数。

另请参阅 source().

[slot] 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().

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.