QMediaPlayer Class

The QMediaPlayer class allows the playing of a media source. More...

Header: #include <QMediaPlayer>
qmake: QT += multimedia
Inherits: QMediaObject

Public Types

enum Error { NoError, ResourceError, FormatError, NetworkError, AccessDeniedError, ServiceMissingError }
enum Flag { LowLatency, StreamPlayback, VideoSurface }
flags Flags
enum MediaStatus { UnknownMediaStatus, NoMedia, LoadingMedia, LoadedMedia, StalledMedia, …, InvalidMedia }
enum State { StoppedState, PlayingState, PausedState }

Properties

Public Functions

QMediaPlayer(QObject *parent = nullptr, QMediaPlayer::Flags flags = Flags())
virtual ~QMediaPlayer()
QAudio::Role audioRole() const
int bufferStatus() const
QMediaContent currentMedia() const
QString customAudioRole() const
qint64 duration() const
QMediaPlayer::Error error() const
QString errorString() const
bool isAudioAvailable() const
bool isMuted() const
bool isSeekable() const
bool isVideoAvailable() const
QMediaContent media() const
QMediaPlayer::MediaStatus mediaStatus() const
const QIODevice *mediaStream() const
qreal playbackRate() const
QMediaPlaylist *playlist() const
qint64 position() const
void setAudioRole(QAudio::Role audioRole)
void setCustomAudioRole(const QString &audioRole)
void setVideoOutput(QVideoWidget *output)
void setVideoOutput(QGraphicsVideoItem *output)
void setVideoOutput(QAbstractVideoSurface *surface)
void setVideoOutput(const QVector<QAbstractVideoSurface *> &surfaces)
QMediaPlayer::State state() const
QList<QAudio::Role> supportedAudioRoles() const
QStringList supportedCustomAudioRoles() const
int volume() const

Reimplemented Public Functions

virtual QMultimedia::AvailabilityStatus availability() const override

Public Slots

void pause()
void play()
void setMedia(const QMediaContent &media, QIODevice *stream = nullptr)
void setMuted(bool muted)
void setPlaybackRate(qreal rate)
void setPlaylist(QMediaPlaylist *playlist)
void setPosition(qint64 position)
void setVolume(int volume)
void stop()

Signals

void audioAvailableChanged(bool available)
void audioRoleChanged(QAudio::Role role)
void bufferStatusChanged(int percentFilled)
void currentMediaChanged(const QMediaContent &media)
void customAudioRoleChanged(const QString &role)
void durationChanged(qint64 duration)
void error(QMediaPlayer::Error error)
void mediaChanged(const QMediaContent &media)
void mediaStatusChanged(QMediaPlayer::MediaStatus status)
void mutedChanged(bool muted)
void playbackRateChanged(qreal rate)
void positionChanged(qint64 position)
void seekableChanged(bool seekable)
void stateChanged(QMediaPlayer::State state)
void videoAvailableChanged(bool videoAvailable)
void volumeChanged(int volume)

Static Public Members

QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs = QStringList(), QMediaPlayer::Flags flags = Flags())

Detailed Description

The QMediaPlayer class is a high level media playback class. It can be used to playback such content as songs, movies and internet radio. The content to playback is specified as a QMediaContent object, which can be thought of as a main or canonical URL with additional information attached. When provided with a QMediaContent playback may be able to commence.

 player = new QMediaPlayer;
 connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
 player->setMedia(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
 player->setVolume(50);
 player->play();

QVideoWidget can be used with QMediaPlayer for video rendering and QMediaPlaylist for accessing playlist functionality.

 playlist = new QMediaPlaylist;
 playlist->addMedia(QUrl("http://example.com/movie1.mp4"));
 playlist->addMedia(QUrl("http://example.com/movie2.mp4"));
 playlist->addMedia(QUrl("http://example.com/movie3.mp4"));
 playlist->setCurrentIndex(1);

 player = new QMediaPlayer;
 player->setPlaylist(playlist);

 videoWidget = new QVideoWidget;
 player->setVideoOutput(videoWidget);
 videoWidget->show();

 player->play();

Since QMediaPlayer is a QMediaObject, you can use several of the QMediaObject functions for things like:

See also QMediaObject, QMediaService, QVideoWidget, and QMediaPlaylist.

Member Type Documentation

enum QMediaPlayer::Error

Defines a media player error condition.

ConstantValueDescription
QMediaPlayer::NoError0No error has occurred.
QMediaPlayer::ResourceError1A media resource couldn't be resolved.
QMediaPlayer::FormatError2The format of a media resource isn't (fully) supported. Playback may still be possible, but without an audio or video component.
QMediaPlayer::NetworkError3A network error occurred.
QMediaPlayer::AccessDeniedError4There are not the appropriate permissions to play a media resource.
QMediaPlayer::ServiceMissingError5A valid playback service was not found, playback cannot proceed.

enum QMediaPlayer::Flag
flags QMediaPlayer::Flags

ConstantValueDescription
QMediaPlayer::LowLatency0x01The player is expected to be used with simple audio formats, but playback should start without significant delay. Such playback service can be used for beeps, ringtones, etc.
QMediaPlayer::StreamPlayback0x02The player is expected to play QIODevice based streams. If passed to QMediaPlayer constructor, the service supporting streams playback will be chosen.
QMediaPlayer::VideoSurface0x04The player is expected to be able to render to a QAbstractVideoSurface output.

The Flags type is a typedef for QFlags<Flag>. It stores an OR combination of Flag values.

enum QMediaPlayer::MediaStatus

Defines the status of a media player's current media.

ConstantValueDescription
QMediaPlayer::UnknownMediaStatus0The status of the media cannot be determined.
QMediaPlayer::NoMedia1There is no current media. The player is in the StoppedState.
QMediaPlayer::LoadingMedia2The current media is being loaded. The player may be in any state.
QMediaPlayer::LoadedMedia3The current media has been loaded. The player is in the StoppedState.
QMediaPlayer::StalledMedia4Playback of the current media has stalled due to insufficient buffering or some other temporary interruption. The player is in the PlayingState or PausedState.
QMediaPlayer::BufferingMedia5The player is buffering data but has enough data buffered for playback to continue for the immediate future. The player is in the PlayingState or PausedState.
QMediaPlayer::BufferedMedia6The player has fully buffered the current media. The player is in the PlayingState or PausedState.
QMediaPlayer::EndOfMedia7Playback has reached the end of the current media. The player is in the StoppedState.
QMediaPlayer::InvalidMedia8The current media cannot be played. The player is in the StoppedState.

enum QMediaPlayer::State

Defines the current state of a media player.

ConstantValueDescription
QMediaPlayer::StoppedState0The media player is not playing content, playback will begin from the start of the current track.
QMediaPlayer::PlayingState1The media player is currently playing content.
QMediaPlayer::PausedState2The media player has paused playback, playback of the current track will resume from the position the player was paused at.

Property Documentation

audioAvailable : const bool

This property holds the audio availabilty status for the current media.

As the life time of QMediaPlayer can be longer than the playback of one QMediaContent, this property may change over time, the audioAvailableChanged signal can be used to monitor it's status.

Access functions:

bool isAudioAvailable() const

Notifier signal:

void audioAvailableChanged(bool available)

audioRole : QAudio::Role

This property holds the role of the audio stream played by the media player.

It can be set to specify the type of audio being played, allowing the system to make appropriate decisions when it comes to volume, routing or post-processing.

The audio role must be set before calling setMedia().

customAudioRole is cleared when this property is set to anything other than QAudio::CustomRole.

This property was introduced in Qt 5.6.

Access functions:

QAudio::Role audioRole() const
void setAudioRole(QAudio::Role audioRole)

Notifier signal:

void audioRoleChanged(QAudio::Role role)

See also supportedAudioRoles().

bufferStatus : const int

This property holds the percentage of the temporary buffer filled before playback begins or resumes, from 0 (empty) to 100 (full).

When the player object is buffering; this property holds the percentage of the temporary buffer that is filled. The buffer will need to reach 100% filled before playback can start or resume, at which time mediaStatus() will return BufferedMedia or BufferingMedia. If the value is anything lower than 100, mediaStatus() will return StalledMedia.

Access functions:

int bufferStatus() const

Notifier signal:

void bufferStatusChanged(int percentFilled)

See also mediaStatus().

currentMedia : const QMediaContent

This property holds the current active media content being played by the player object. This value could be different from QMediaPlayer::media property if a playlist is used. In this case currentMedia indicates the current media content being processed by the player, while QMediaPlayer::media property contains the original playlist.

Access functions:

QMediaContent currentMedia() const

Notifier signal:

void currentMediaChanged(const QMediaContent &media)

See also QMediaContent and media().

customAudioRole : QString

This property holds the role of the audio stream played by the media player.

It can be set to specify the type of audio being played when the backend supports audio roles unknown to Qt. Specifying a role allows the system to make appropriate decisions when it comes to volume, routing or post-processing.

The audio role must be set before calling setMedia().

audioRole is set to QAudio::CustomRole when this property is set.

This property was introduced in Qt 5.11.

Access functions:

QString customAudioRole() const
void setCustomAudioRole(const QString &audioRole)

Notifier signal:

void customAudioRoleChanged(const QString &role)

See also supportedCustomAudioRoles().

duration : const qint64

This property holds the duration of the current media.

The value is the total playback time in milliseconds of the current media. The value may change across the life time of the QMediaPlayer object and may not be available when initial playback begins, connect to the durationChanged() signal to receive status notifications.

Access functions:

qint64 duration() const

Notifier signal:

void durationChanged(qint64 duration)

error : const QString

This property holds a string describing the last error condition.

Access functions:

QString errorString() const

See also error().

media : QMediaContent

This property holds the active media source being used by the player object.

The player object will use the QMediaContent for selection of the content to be played.

By default this property has a null QMediaContent.

Setting this property to a null QMediaContent will cause the player to discard all information relating to the current media source and to cease all I/O operations related to that media.

Access functions:

QMediaContent media() const
void setMedia(const QMediaContent &media, QIODevice *stream = nullptr)

Notifier signal:

void mediaChanged(const QMediaContent &media)

See also QMediaContent and currentMedia().

mediaStatus : const MediaStatus

This property holds the status of the current media stream.

The stream status describes how the playback of the current stream is progressing.

By default this property is QMediaPlayer::NoMedia

Access functions:

QMediaPlayer::MediaStatus mediaStatus() const

Notifier signal:

void mediaStatusChanged(QMediaPlayer::MediaStatus status)

See also state.

muted : bool

This property holds the muted state of the current media.

The value will be true if the playback volume is muted; otherwise false.

Access functions:

bool isMuted() const
void setMuted(bool muted)

Notifier signal:

void mutedChanged(bool muted)

playbackRate : qreal

This property holds the playback rate of the current media.

This value is a multiplier applied to the media's standard play rate. By default this value is 1.0, indicating that the media is playing at the standard pace. Values higher than 1.0 will increase the rate of play. Values less than zero can be set and indicate the media should rewind at the multiplier of the standard pace.

Not all playback services support change of the playback rate. It is framework defined as to the status and quality of audio and video while fast forwarding or rewinding.

Access functions:

qreal playbackRate() const
void setPlaybackRate(qreal rate)

Notifier signal:

void playbackRateChanged(qreal rate)

playlist : QMediaPlaylist*

This property holds the media playlist being used by the player object.

The player object will use the current playlist item for selection of the content to be played.

By default this property is set to null.

If the media playlist is used as a source, QMediaPlayer::currentMedia is updated with a current playlist item. The current source should be selected with QMediaPlaylist::setCurrentIndex(int) instead of QMediaPlayer::setMedia(), otherwise the current playlist will be discarded.

Access functions:

QMediaPlaylist *playlist() const
void setPlaylist(QMediaPlaylist *playlist)

See also QMediaContent.

position : qint64

This property holds the playback position of the current media.

The value is the current playback position, expressed in milliseconds since the beginning of the media. Periodically changes in the position will be indicated with the signal positionChanged(), the interval between updates can be set with QMediaObject's method setNotifyInterval().

Access functions:

qint64 position() const
void setPosition(qint64 position)

Notifier signal:

void positionChanged(qint64 position)

seekable : const bool

This property holds the seek-able status of the current media

If seeking is supported this property will be true; false otherwise. The status of this property may change across the life time of the QMediaPlayer object, use the seekableChanged signal to monitor changes.

Access functions:

bool isSeekable() const

Notifier signal:

void seekableChanged(bool seekable)

state : const State

This property holds the media player's playback state.

By default this property is QMediaPlayer::Stopped

Access functions:

QMediaPlayer::State state() const

Notifier signal:

void stateChanged(QMediaPlayer::State state)

See also mediaStatus(), play(), pause(), and stop().

videoAvailable : const bool

This property holds the video availability status for the current media.

If available, the QVideoWidget class can be used to view the video. As the life time of QMediaPlayer can be longer than the playback of one QMediaContent, this property may change over time, the videoAvailableChanged signal can be used to monitor it's status.

Access functions:

bool isVideoAvailable() const

Notifier signal:

void videoAvailableChanged(bool videoAvailable)

See also QVideoWidget and QMediaContent.

volume : int

This property holds the current playback volume.

The playback volume is scaled linearly, ranging from 0 (silence) to 100 (full volume). Values outside this range will be clamped.

By default the volume is 100.

UI volume controls should usually be scaled nonlinearly. For example, using a logarithmic scale will produce linear changes in perceived loudness, which is what a user would normally expect from a volume control. See QAudio::convertVolume() for more details.

Access functions:

int volume() const
void setVolume(int volume)

Notifier signal:

void volumeChanged(int volume)

Member Function Documentation

QMediaPlayer::QMediaPlayer(QObject *parent = nullptr, QMediaPlayer::Flags flags = Flags())

Construct a QMediaPlayer instance parented to parent and with flags.

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

Signals the availability of audio content has changed to available.

Note: Notifier signal for property audioAvailable.

[signal] void QMediaPlayer::audioRoleChanged(QAudio::Role role)

Signals that the audio role of the media player has changed.

Note: Notifier signal for property audioRole.

This function was introduced in Qt 5.6.

[signal] void QMediaPlayer::bufferStatusChanged(int percentFilled)

Signal the amount of the local buffer filled as a percentage by percentFilled.

Note: Notifier signal for property bufferStatus.

[signal] void QMediaPlayer::currentMediaChanged(const QMediaContent &media)

Signals that the current playing content has been changed to media.

Note: Notifier signal for property currentMedia.

See also currentMedia() and mediaChanged().

[signal] void QMediaPlayer::customAudioRoleChanged(const QString &role)

Signals that the audio role of the media player has changed.

Note: Notifier signal for property customAudioRole.

This function was introduced in Qt 5.11.

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

Signal the duration of the content has changed to duration, expressed in milliseconds.

Note: Notifier signal for property duration.

[signal] void QMediaPlayer::error(QMediaPlayer::Error error)

Signals that an error condition has occurred.

Note: Signal error is overloaded in this class. To connect to this signal by using the function pointer syntax, Qt provides a convenient helper for obtaining the function pointer as shown in this example:

 connect(mediaPlayer, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error),
     [=](QMediaPlayer::Error error){ /* ... */ });

See also errorString().

[signal] void QMediaPlayer::mediaChanged(const QMediaContent &media)

Signals that the media source has been changed to media.

Note: Notifier signal for property media.

See also media() and currentMediaChanged().

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

Signals that the status of the current media has changed.

Note: Notifier signal for property mediaStatus.

See also mediaStatus().

[signal] void QMediaPlayer::mutedChanged(bool muted)

Signal the mute state has changed to muted.

Note: Notifier signal for property muted.

[slot] void QMediaPlayer::pause()

Pause playing the current source.

[slot] void QMediaPlayer::play()

Start or resume playing the current source.

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

Signals the playbackRate has changed to rate.

Note: Notifier signal for property playbackRate.

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

Signal the position of the content has changed to position, expressed in milliseconds.

Note: Notifier signal for property position.

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

Signals the seekable status of the player object has changed.

Note: Notifier signal for property seekable.

[slot] void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream = nullptr)

Sets the current media source.

If a stream is supplied; media data will be read from it instead of resolving the media source. In this case the url should be provided to resolve additional information about the media such as mime type. The stream must be open and readable. For macOS the stream should be also seekable.

Setting the media to a null QMediaContent will cause the player to discard all information relating to the current media source and to cease all I/O operations related to that media.

Note: This function returns immediately after recording the specified source of the media. It does not wait for the media to finish loading and does not check for errors. Listen for the mediaStatusChanged() and error() signals to be notified when the media is loaded and when an error occurs during loading.

Since Qt 5.12.2, the url scheme gst-pipeline provides custom pipelines for the GStreamer backend.

 player = new QMediaPlayer;
 player->setMedia(QUrl("gst-pipeline: videotestsrc ! autovideosink"));
 player->play();

If QAbstractVideoSurface is used as the video output, qtvideosink can be used as a video sink element directly in the pipeline. After that the surface will receive the video frames in QAbstractVideoSurface::present().

 class Surface : public QAbstractVideoSurface
 {
 public:
     Surface(QObject *p) : QAbstractVideoSurface(p) { }
     QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType) const override
     {
         // Make sure that the driver supports this pixel format.
         return QList<QVideoFrame::PixelFormat>() << QVideoFrame::Format_YUYV;
     }

     // Video frames are handled here.
     bool present(const QVideoFrame &) override { return true; }
 };

 player = new QMediaPlayer;
 player->setVideoOutput(new Surface(player));
 player->setMedia(QUrl("gst-pipeline: videotestsrc ! qtvideosink"));
 player->play();

If QVideoWidget is used as the video output and the pipeline contains a video sink element named qtvideosink, current QVideoWidget will be used to render the video.

 player = new QMediaPlayer;
 videoWidget = new QVideoWidget;
 videoWidget->show();
 player->setVideoOutput(videoWidget);
 player->setMedia(QUrl("gst-pipeline: videotestsrc ! xvimagesink name=\"qtvideosink\""));
 player->play();

If the pipeline contains appsrc element, it will be used to push data from stream.

 QImage img("images/qt-logo.png");
 img = img.convertToFormat(QImage::Format_ARGB32);
 QByteArray ba(reinterpret_cast<const char *>(img.bits()), img.sizeInBytes());
 QBuffer buffer(&ba);
 buffer.open(QIODevice::ReadOnly);
 player = new QMediaPlayer;
 player->setMedia(QUrl("gst-pipeline: appsrc blocksize=4294967295 ! \
     video/x-raw,format=BGRx,framerate=30/1,width=200,height=147 ! \
     coloreffects preset=heat ! videoconvert ! video/x-raw,format=I420 ! jpegenc ! rtpjpegpay ! \
     udpsink host=127.0.0.1 port=5000"), &buffer);
 player->play();

 QMediaPlayer *receiver = new QMediaPlayer;
 videoWidget = new QVideoWidget;
 receiver->setVideoOutput(videoWidget);
 receiver->setMedia(QUrl("gst-pipeline: udpsrc port=5000 ! \
     application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! \
     xvimagesink name=qtvideosink"));
 receiver->play();
 // Content will be shown in this widget.
 videoWidget->show();

Note: Setter function for property media.

See also media().

[signal] void QMediaPlayer::stateChanged(QMediaPlayer::State state)

Signal the state of the Player object has changed.

Note: Notifier signal for property state.

[slot] void QMediaPlayer::stop()

Stop playing, and reset the play position to the beginning.

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

Signal the availability of visual content has changed to videoAvailable.

Note: Notifier signal for property videoAvailable.

[signal] void QMediaPlayer::volumeChanged(int volume)

Signal the playback volume has changed to volume.

Note: Notifier signal for property volume.

[virtual] QMediaPlayer::~QMediaPlayer()

Destroys the player object.

[override virtual] QMultimedia::AvailabilityStatus QMediaPlayer::availability() const

Reimplements: QMediaObject::availability() const.

QMediaPlayer::Error QMediaPlayer::error() const

Returns the current error state.

[static] QMultimedia::SupportEstimate QMediaPlayer::hasSupport(const QString &mimeType, const QStringList &codecs = QStringList(), QMediaPlayer::Flags flags = Flags())

Returns the level of support a media player has for a mimeType and a set of codecs.

The flags argument allows additional requirements such as performance indicators to be specified.

const QIODevice *QMediaPlayer::mediaStream() const

Returns the stream source of media data.

This is only valid if a stream was passed to setMedia().

See also setMedia().

void QMediaPlayer::setVideoOutput(QVideoWidget *output)

Attach a QVideoWidget video output to the media player.

If the media player has already video output attached, it will be replaced with a new one.

void QMediaPlayer::setVideoOutput(QGraphicsVideoItem *output)

Attach a QGraphicsVideoItem video output to the media player.

If the media player has already video output attached, it will be replaced with a new one.

void QMediaPlayer::setVideoOutput(QAbstractVideoSurface *surface)

Sets a video surface as the video output of a media player.

If a video output has already been set on the media player the new surface will replace it.

void QMediaPlayer::setVideoOutput(const QVector<QAbstractVideoSurface *> &surfaces)

Sets multiple video surfaces as the video output of a media player. This allows the media player to render video frames on different surfaces.

All video surfaces must support at least one shared QVideoFrame::PixelFormat.

If a video output has already been set on the media player the new surfaces will replace it.

This function was introduced in Qt 5.15.

See also QAbstractVideoSurface::supportedPixelFormats.

QList<QAudio::Role> QMediaPlayer::supportedAudioRoles() const

Returns a list of supported audio roles.

If setting the audio role is not supported, an empty list is returned.

This function was introduced in Qt 5.6.

See also audioRole.

QStringList QMediaPlayer::supportedCustomAudioRoles() const

Returns a list of supported custom audio roles. An empty list may indicate that the supported custom audio roles aren't known. The list may not be complete.

This function was introduced in Qt 5.11.

See also customAudioRole.