The QMediaPlayer class allows the playing of a media source. 更多...
| 頭: | #include <QMediaPlayer> |
| qmake: | QT += multimedia |
| 繼承: | QMediaObject |
| enum | Error { NoError, ResourceError, FormatError, NetworkError, AccessDeniedError, ServiceMissingError } |
| enum | Flag { LowLatency, StreamPlayback, VideoSurface } |
| flags | Flags |
| enum | MediaStatus { UnknownMediaStatus, NoMedia, LoadingMedia, LoadedMedia, ..., InvalidMedia } |
| enum | State { StoppedState, PlayingState, PausedState } |
|
|
| QMediaPlayer (QObject * parent = nullptr, QMediaPlayer::Flags flags = Flags()) | |
| virtual | ~QMediaPlayer () |
| QAudio::Role | audioRole () const |
| int | bufferStatus () const |
| QMediaContent | currentMedia () const |
| QNetworkConfiguration | currentNetworkConfiguration () 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 ) |
| QMediaPlayer::State | state () const |
| QList<QAudio::Role> | supportedAudioRoles () const |
| QStringList | supportedCustomAudioRoles () const |
| int | volume () const |
| virtual QMultimedia::AvailabilityStatus | availability () const override |
| void | pause () |
| void | play () |
| void | setMedia (const QMediaContent & media , QIODevice * stream = nullptr) |
| void | setMuted (bool muted ) |
| void | setNetworkConfigurations (const QList<QNetworkConfiguration> & configurations ) |
| void | setPlaybackRate (qreal rate ) |
| void | setPlaylist (QMediaPlaylist * playlist ) |
| void | setPosition (qint64 position ) |
| void | setVolume (int volume ) |
| void | stop () |
| 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 | networkConfigurationChanged (const QNetworkConfiguration & configuration ) |
| 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 ) |
| QMultimedia::SupportEstimate | hasSupport (const QString & mimeType , const QStringList & codecs = QStringList(), QMediaPlayer::Flags flags = Flags()) |
| const QMetaObject | staticMetaObject |
The QMediaPlayer class allows the playing of a media source.
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 對象,可以認為是附加瞭額外信息的主 URL 或典型 URL。當提供采用 QMediaContent 迴放也許可以開始。
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 可以使用 QMediaPlayer for video rendering and QMediaPlaylist 為訪問播放列錶功能。
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();
由於 QMediaPlayer 是 QMediaObject ,可以使用幾個 QMediaObject 函數對於像這樣的事情:
另請參閱 QMediaObject , QMediaService , QVideoWidget ,和 QMediaPlaylist .
定義媒體播放器錯誤條件。
| 常量 | 值 | 描述 |
|---|---|---|
QMediaPlayer::NoError
|
0
|
沒有齣現錯誤。 |
QMediaPlayer::ResourceError
|
1
|
無法解析媒體資源。 |
QMediaPlayer::FormatError
|
2
|
不 (完全) 支持媒體資源格式。仍可能可以迴放,但沒有音頻或視頻組件。 |
QMediaPlayer::NetworkError
|
3
|
發生網絡錯誤。 |
QMediaPlayer::AccessDeniedError
|
4
|
沒有適當權限來播放媒體資源。 |
QMediaPlayer::ServiceMissingError
|
5
|
找不到有效迴放服務,無法繼續進行播放。開頭 |
| 常量 | 值 | 描述 |
|---|---|---|
QMediaPlayer::LowLatency
|
0x01
|
播放器期望用於簡單音頻格式,但迴放應該始於沒有顯著延遲。這種迴放服務可以用於蜂鳴聲、鈴聲、等。 |
QMediaPlayer::StreamPlayback
|
0x02
|
播放器期望播放 QIODevice 基流。若傳遞給 QMediaPlayer 構造函數,將選擇支持流迴放的服務。 |
QMediaPlayer::VideoSurface
|
0x04
|
播放器期望能夠渲染到 QAbstractVideoSurface output . |
Flags 類型是 typedef 對於 QFlags <Flag>。它存儲 Flag 值的 OR (或) 組閤。
定義媒體播放器當前媒體的狀態。
| 常量 | 值 | 描述 |
|---|---|---|
QMediaPlayer::UnknownMediaStatus
|
0
|
無法確定媒體狀態。 |
QMediaPlayer::NoMedia
|
1
|
當前沒有媒體。播放器處於 StoppedState . |
QMediaPlayer::LoadingMedia
|
2
|
正加載當前媒體。播放器可能處於任何狀態。 |
QMediaPlayer::LoadedMedia
|
3
|
當前媒體已加載。播放器處於 StoppedState . |
QMediaPlayer::StalledMedia
|
4
|
當前媒體的迴放已失速,由於緩衝不足或某些其它臨時中斷。播放器在 PlayingState or PausedState . |
QMediaPlayer::BufferingMedia
|
5
|
播放器在緩衝數據,但已緩衝足夠數據為未來能立即繼續迴放。播放器在 PlayingState or PausedState . |
QMediaPlayer::BufferedMedia
|
6
|
播放器已完全緩衝當前媒體。播放器處於 PlayingState or PausedState . |
QMediaPlayer::EndOfMedia
|
7
|
迴放已到達當前媒體結尾。播放器處於 StoppedState . |
QMediaPlayer::InvalidMedia
|
8
|
當前媒體無法播放。播放器處於 StoppedState . |
定義媒體播放器的當前狀態。
| 常量 | 值 | 描述 |
|---|---|---|
QMediaPlayer::StoppedState
|
0
|
媒體播放器未播放內容,迴放將從當前軌道的起始開始。 |
QMediaPlayer::PlayingState
|
1
|
媒體播放器目前正在播放內容。 |
QMediaPlayer::PausedState
|
2
|
媒體播放器已暫停迴放,當前軌道的迴放將從播放器暫停位置處再繼續。 |
此特性保持當前媒體的音頻可用性狀態。
由於存活時間對於 QMediaPlayer 可以長於迴放的某個 QMediaContent ,此特性可能隨時間推移改變, audioAvailableChanged 信號可以用於監視其狀態。
訪問函數:
| bool | isAudioAvailable () const |
通知程序信號:
| void | audioAvailableChanged (bool available ) |
此特性保持由媒體播放器播放的音頻流角色。
可以把它設為正播放的指定音頻類型,允許係統做齣適當決定,當涉及到音量、路由、或後期處理時。
必須設置音頻角色,先於調用 setMedia ().
customAudioRole 被清零,當把此特性設為任何值除瞭 QAudio::CustomRole .
該特性在 Qt 5.6 引入。
訪問函數:
| QAudio::Role | audioRole () const |
| void | setAudioRole (QAudio::Role audioRole ) |
通知程序信號:
| void | audioRoleChanged (QAudio::Role role ) |
另請參閱 supportedAudioRoles ().
此特性保持填充臨時緩衝的百分比,在迴放開始 (或再繼續) 前。從
0
(空) 到
100
(完整)。
當緩衝播放器對象時,此特性保持填充臨時緩衝的百分比。在迴放可以開始 (或再繼續) 前,填充緩衝需要達到 100%,此時
mediaStatus
() 會返迴
BufferedMedia
or
BufferingMedia
。若是任何值小於
100
,
mediaStatus
() 會返迴
StalledMedia
.
訪問函數:
| int | bufferStatus () const |
通知程序信號:
| void | bufferStatusChanged (int percentFilled ) |
另請參閱 mediaStatus ().
此特性保持由播放器對象,正播放的當前活動媒體內容。該值可以不同於 QMediaPlayer::media 特性,若使用播放列錶。在此情況下,currentMedia 指示播放器正處理的當前媒體內容,當 QMediaPlayer::media 特性包含原始播放列錶。
訪問函數:
| QMediaContent | currentMedia () const |
通知程序信號:
| void | currentMediaChanged (const QMediaContent & media ) |
另請參閱 QMediaContent and media ().
此特性保持由媒體播放器播放的音頻流角色。
可以設置它以指定正播放的音頻類型,當後端支持 Qt 未知的音頻角色時。指定角色允許係統做齣適當決定,當涉及音量、路由、或後處理時。
必須設置音頻角色,先於調用 setMedia ().
audioRole 被設為 QAudio::CustomRole 當此特性有設置。
該特性在 Qt 5.11 引入。
訪問函數:
| QString | customAudioRole () const |
| void | setCustomAudioRole (const QString & audioRole ) |
通知程序信號:
| void | customAudioRoleChanged (const QString & role ) |
另請參閱 supportedCustomAudioRoles ().
此特性保持當前媒體的持續時間。
值是當前媒體的總迴放時間 (以毫秒為單位)。值可能跨存活時間改變對於 QMediaPlayer 對象且可能不可用 (當初始迴放開始時),連接到 durationChanged () 信號以接收狀態通知。
訪問函數:
| qint64 | duration () const |
通知程序信號:
| void | durationChanged (qint64 duration ) |
此特性保持描述最後一個錯誤條件的字符串。
訪問函數:
| QString | errorString () const |
另請參閱 error ().
此特性保持播放器對象正在使用的活動媒體源。
播放器對象將使用 QMediaContent 為選擇要播放的內容。
默認情況下,此特性擁有 null QMediaContent .
將此特性設為 null QMediaContent 將導緻播放器丟棄與當前媒體源相關的所有信息,並停息與該媒體相關的所有 I/O 操作。
訪問函數:
| QMediaContent | media () const |
| void | setMedia (const QMediaContent & media , QIODevice * stream = nullptr) |
通知程序信號:
| void | mediaChanged (const QMediaContent & media ) |
另請參閱 QMediaContent and currentMedia ().
此特性保持當前媒體流的狀態。
流狀態描述當前流的迴放進展。
默認情況下此特性為 QMediaPlayer::NoMedia
訪問函數:
| QMediaPlayer::MediaStatus | mediaStatus () const |
通知程序信號:
| void | mediaStatusChanged (QMediaPlayer::MediaStatus status ) |
另請參閱 state .
此特性保持當前媒體的靜音狀態。
值將為 true 若迴放音量靜音;否則 false。
訪問函數:
| bool | isMuted () const |
| void | setMuted (bool muted ) |
通知程序信號:
| void | mutedChanged (bool muted ) |
此特性保持當前媒體的迴放速率。
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 will rewind at the multiplier of the standard pace.
並非所有迴放服務,都支持迴放速率的改變。它由音頻和視頻狀態和品質的框架定義,當快進 (或倒帶) 時。
訪問函數:
| qreal | playbackRate () const |
| void | setPlaybackRate (qreal rate ) |
通知程序信號:
| void | playbackRateChanged (qreal rate ) |
此特性保持播放器對象正使用的媒體播放列錶。
播放器對象將使用當前播放列錶項,為選擇要播放的內容。
默認情況下,此特性被設為 null。
若把媒體播放列錶用作源, 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.
訪問函數:
| QMediaPlaylist * | playlist () const |
| void | setPlaylist (QMediaPlaylist * playlist ) |
另請參閱 QMediaContent .
此特性保持當前媒體的迴放位置。
值是當前迴放位置,以從媒體開始起的毫秒數錶達。將指示位置的周期性變化采用信號 positionChanged (),可以設置更新間隔采用 QMediaObject 的方法 setNotifyInterval ().
訪問函數:
| qint64 | position () const |
| void | setPosition (qint64 position ) |
通知程序信號:
| void | positionChanged (qint64 position ) |
此特性保持當前媒體的可尋址狀態
若支持尋址,此特性為 true;否則為 false。此特性的狀態可能改變,當跨存活時間在 QMediaPlayer 對象,使用 seekableChanged 信號以監視改變。
訪問函數:
| bool | isSeekable () const |
通知程序信號:
| void | seekableChanged (bool seekable ) |
此特性保持媒體播放器的迴放狀態。
默認情況下此特性為 QMediaPlayer::Stopped
訪問函數:
| QMediaPlayer::State | state () const |
通知程序信號:
| void | stateChanged (QMediaPlayer::State state ) |
另請參閱 mediaStatus (), play (), pause (),和 stop ().
此特性保持用於當前媒體的視頻可用性狀態。
若可用, QVideoWidget 類可以用於查看視頻。由於存活時間對於 QMediaPlayer 可以長於迴放的某個 QMediaContent ,此特性可能隨時間推移改變, videoAvailableChanged 信號可以用於監視其狀態。
訪問函數:
| bool | isVideoAvailable () const |
通知程序信號:
| void | videoAvailableChanged (bool videoAvailable ) |
另請參閱 QVideoWidget and QMediaContent .
此特性保持當前迴放音量。
播放音量是按綫性比例縮放的,範圍從
0
(無聲) 到
100
(全音量)。將鉗製超齣此範圍的值。
默認情況下,音量為
100
.
通常,UI 音量控件應按非綫性比例縮放。例如,使用對數比例縮放將産生感知響度的綫性變化,這通常是用戶期望的音量控製。見 QAudio::convertVolume () 瞭解更多細節。
訪問函數:
| int | volume () const |
| void | setVolume (int volume ) |
通知程序信號:
| void | volumeChanged (int volume ) |
構造 QMediaPlayer instance parented to parent 和采用 flags .
[虛擬]
QMediaPlayer::
~QMediaPlayer
()
銷毀播放器對象。
[signal]
void
QMediaPlayer::
audioAvailableChanged
(
bool
available
)
發射信號,當音頻內容的可用性已變成 available .
注意: 通知程序信號對於特性 audioAvailable .
[signal]
void
QMediaPlayer::
audioRoleChanged
(
QAudio::Role
role
)
發射信號,當音頻 role 為媒體播放器已改變。
該函數在 Qt 5.6 引入。
注意: 通知程序信號對於特性 audioRole .
[override virtual]
QMultimedia::AvailabilityStatus
QMediaPlayer::
availability
() const
重實現自 QMediaObject::availability ().
[signal]
void
QMediaPlayer::
bufferStatusChanged
(
int
percentFilled
)
發射信號,當以百分比方式錶示本地緩衝填充量通過 percentFilled .
注意: 通知程序信號對於特性 bufferStatus .
[signal]
void
QMediaPlayer::
currentMediaChanged
(const
QMediaContent
&
media
)
發射信號,當當前播放內容已變為 media .
注意: 通知程序信號對於特性 currentMedia .
另請參閱 currentMedia () 和 mediaChanged ().
Returns the current network access point in use. If a default contructed QNetworkConfiguration is returned this feature is not available or that none of the current supplied configurations are in use.
[signal]
void
QMediaPlayer::
customAudioRoleChanged
(const
QString
&
role
)
發射信號,當音頻 role 為媒體播放器已改變。
該函數在 Qt 5.11 引入。
注意: 通知程序信號對於特性 customAudioRole .
[signal]
void
QMediaPlayer::
durationChanged
(
qint64
duration
)
發射信號,當內容持續時間已變成 duration ,錶達 (以毫秒為單位)。
注意: 通知程序信號對於特性 duration .
返迴當前錯誤狀態。
[signal]
void
QMediaPlayer::
error
(
QMediaPlayer::Error
error
)
發射信號,當 error 條件齣現。
注意: 信號 error 在此類中被重載。通過使用函數指針句法連接到此信號,Qt 提供用於獲得如此範例展示的函數指針的方便幫助程序:
connect(mediaPlayer, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error), [=](QMediaPlayer::Error error){ /* ... */ });
另請參閱 errorString ().
[static]
QMultimedia::SupportEstimate
QMediaPlayer::
hasSupport
(const
QString
&
mimeType
, const
QStringList
&
codecs
= QStringList(),
QMediaPlayer::Flags
flags
= Flags())
返迴支持的級彆,媒體播放器擁有 mimeType 和一組 codecs .
The flags 自變量允許指定額外要求,譬如:性能指示器。
[signal]
void
QMediaPlayer::
mediaChanged
(const
QMediaContent
&
media
)
發射信號,當媒體源已變成 media .
注意: 通知程序信號對於特性 media .
另請參閱 media () 和 currentMediaChanged ().
[signal]
void
QMediaPlayer::
mediaStatusChanged
(
QMediaPlayer::MediaStatus
status
)
發射信號,當 status 若當前媒體已改變。
注意: 通知程序信號對於特性 mediaStatus .
另請參閱 mediaStatus ().
返迴媒體數據的流源。
這纔有效,若把流傳遞給 setMedia ().
另請參閱 setMedia ().
[signal]
void
QMediaPlayer::
mutedChanged
(
bool
muted
)
發射信號,當靜音狀態已變成 muted .
注意: 通知程序信號對於特性 muted .
[signal]
void
QMediaPlayer::
networkConfigurationChanged
(const
QNetworkConfiguration
&
configuration
)
Signal that the active in use network access point has been changed to configuration and all subsequent network access will use this configuration .
[slot]
void
QMediaPlayer::
pause
()
暫停播放當前源。
[slot]
void
QMediaPlayer::
play
()
開始 (或再繼續) 播放當前源。
[signal]
void
QMediaPlayer::
playbackRateChanged
(
qreal
rate
)
信號 playbackRate 已變成 rate .
注意: 通知程序信號對於特性 playbackRate .
[signal]
void
QMediaPlayer::
positionChanged
(
qint64
position
)
發射信號,當內容位置已變成 position ,錶達 (以毫秒為單位)。
注意: 通知程序信號對於特性 position .
[signal]
void
QMediaPlayer::
seekableChanged
(
bool
seekable
)
信號 seekable 播放器對象狀態已改變。
注意: 通知程序信號對於特性 seekable .
[slot]
void
QMediaPlayer::
setMedia
(const
QMediaContent
&
media
,
QIODevice
*
stream
= nullptr)
設置當前 media 源。
若 stream is supplied; media data will be read from it instead of resolving the media source. In this case the media source may still be used to resolve additional information about the media such as mime type. The stream must be open and readable.
將媒體設為 null QMediaContent 將導緻播放器丟棄與當前媒體源相關的所有信息,並停息與該媒體相關的所有 I/O 操作。
注意: 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 () 和 error () signals to be notified when the media is loaded and when an error occurs during loading.
從 Qt 5.12.2 起,URL 方案
gst-pipeline
provides custom pipelines for the GStreamer backend.
player = new QMediaPlayer; player->setMedia(QUrl("gst-pipeline: videotestsrc ! autovideosink")); player->play();
If the pipeline contains a video sink element named
qtvideosink
,當前
QVideoWidget
can be used to render the video.
若管道包含 appsrc 元素,將使用它來推送數據從 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();
注意: setter 函數對於特性 media .
另請參閱 media ().
[slot]
void
QMediaPlayer::
setNetworkConfigurations
(const
QList
<
QNetworkConfiguration
> &
configurations
)
Sets the network access points for remote media playback. configurations contains, in ascending preferential order, a list of configuration that can be used for network access.
This will invalidate the choice of previous configurations.
附加 QVideoWidget 視頻 output 到媒體播放器。
若媒體播放器已經有附加視頻輸齣,將以新的替換它。
附加 QGraphicsVideoItem 視頻 output 到媒體播放器。
若媒體播放器已經有附加視頻輸齣,將以新的替換它。
設置視頻 surface 作為媒體播放器的視頻輸齣。
若媒體播放器已經有設置,新錶麵將替換視頻輸齣。
[signal]
void
QMediaPlayer::
stateChanged
(
QMediaPlayer::State
state
)
發射信號,當 state 對於播放器對象已改變。
注意: 通知程序信號對於特性 state .
[slot]
void
QMediaPlayer::
stop
()
停止播放,然後將播放位置重置到起始。
返迴支持的音頻角色列錶。
若不支持設置的音頻角色,返迴空列錶。
該函數在 Qt 5.6 引入。
另請參閱 audioRole .
返迴支持的自定義音頻角色列錶。空列錶可以指示支持的自定義音頻角色未知。列錶可能並不完整。
該函數在 Qt 5.11 引入。
另請參閱 customAudioRole .
[signal]
void
QMediaPlayer::
videoAvailableChanged
(
bool
videoAvailable
)
發射信號,當視覺內容的可用性已變成 videoAvailable .
注意: 通知程序信號對於特性 videoAvailable .
[signal]
void
QMediaPlayer::
volumeChanged
(
int
volume
)
發射信號,當迴放音量已變成 volume .
注意: 通知程序信號對於特性 volume .