| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- // Copyright (C) 2016 The Qt Company Ltd.
- // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
- import QtQuick
- import QtMultimedia
- /*!
- \qmltype Video
- \inherits Item
- \ingroup multimedia_qml
- \ingroup multimedia_video_qml
- \inqmlmodule QtMultimedia
- \brief A convenience type for showing a specified video.
- \c Video is a convenience type combining the functionality
- of a \l MediaPlayer and a \l VideoOutput into one. It provides
- simple video playback functionality without having to declare multiple
- types.
- The following is sample code to implement video playback in a scene.
- \qml
- Video {
- id: video
- width : 800
- height : 600
- source: "video.avi"
- MouseArea {
- anchors.fill: parent
- onClicked: {
- video.play()
- }
- }
- focus: true
- Keys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play()
- Keys.onLeftPressed: video.position = video.position - 5000
- Keys.onRightPressed: video.position = video.position + 5000
- }
- \endqml
- The source file, \c video.avi, plays when you click the parent
- of MouseArea. The video plays in an area of 800 by 600 pixels, and its \c id
- property has the value \b{video}.
- Notice that because signals for the \l Keys have been defined pressing the:
- \list
- \li \uicontrol Spacebar toggles the pause button.
- \li \uicontrol{Left Arrow} moves the current position in the video to 5 seconds
- previously.
- \li \uicontrol{Right Arrow} advances the current position in the video by 5 seconds.
- \endlist
- Video supports un-transformed, stretched, and uniformly scaled
- video presentation. For a description of stretched uniformly scaled
- presentation, see the \l fillMode property description.
- \sa MediaPlayer, VideoOutput
- \omit
- \section1 Screen Saver
- If it is likely that an application will be playing video for an extended
- period of time without user interaction, it may be necessary to disable
- the platform's screen saver. The \l ScreenSaver (from \l QtSystemInfo)
- may be used to disable the screensaver in this fashion:
- \qml
- import QtSystemInfo 5.0
- ScreenSaver { screenSaverEnabled: false }
- \endqml
- \endomit
- */
- // TODO: Restore Qt System Info docs when the module is released
- Item {
- id: video
- implicitWidth: videoOut.implicitWidth
- implicitHeight: videoOut.implicitHeight
- /*** Properties of VideoOutput ***/
- /*!
- \qmlproperty enumeration Video::fillMode
- Set this property to define how the video is scaled to fit the target
- area.
- \list
- \li VideoOutput.Stretch - the video is scaled to fit
- \li VideoOutput.PreserveAspectFit - the video is scaled uniformly to fit without
- cropping
- \li VideoOutput.PreserveAspectCrop - the video is scaled uniformly to fill, cropping
- if necessary
- \endlist
- Because this type is for convenience in QML, it does not
- support enumerations directly, so enumerations from \c VideoOutput are
- used to access the available fill modes.
- The default fill mode is preserveAspectFit.
- */
- property alias fillMode: videoOut.fillMode
- /*!
- \qmlproperty enumeration Video::endOfStreamPolicy
- \since 6.9
- This property specifies the policy to apply when the video stream ends.
- The \c endOfStreamPolicy can be one of:
- \value ClearOutput The video output is cleared.
- \value KeepLastFrame The video output continues displaying the last
- frame. Use the method \l clearOutput() to
- clear the output manually.
- The default value is \c VideoOutput.ClearOutput.
- */
- property alias endOfStreamPolicy: videoOut.endOfStreamPolicy
- /*!
- \qmlproperty int Video::orientation
- \since 6.9
- This property determines the angle, in degrees, at which the displayed video
- is rotated clockwise in video coordinates, where the Y-axis points
- downwards on the display.
- The orientation transformation is applied before \l mirrored.
- Only multiples of \c 90 degrees are supported, that is 0, 90, -90, 180, 270, etc.,
- otherwise, the specified value is ignored.
- The default value is \c 0.
- */
- property alias orientation: videoOut.orientation
- /*!
- \qmlproperty int Video::mirrored
- Determines whether the displayed video is mirrored around its vertical axis.
- The mirroring is applied after \l orientation.
- The default value is \c false.
- */
- property alias mirrored: videoOut.mirrored
- /*** Properties of MediaPlayer ***/
- /*!
- \qmlproperty enumeration Video::playbackState
- This read only property indicates the playback state of the media.
- \list
- \li MediaPlayer.PlayingState - the media is playing
- \li MediaPlayer.PausedState - the media is paused
- \li MediaPlayer.StoppedState - the media is stopped
- \endlist
- The default state is MediaPlayer.StoppedState.
- */
- property alias playbackState: player.playbackState
- /*!
- \qmlproperty real Video::bufferProgress
- This property holds how much of the data buffer is currently filled,
- from 0.0 (empty) to 1.0
- (full).
- */
- property alias bufferProgress: player.bufferProgress
- /*!
- \qmlproperty int Video::duration
- This property holds the duration of the media in milliseconds.
- If the media doesn't have a fixed duration (a live stream for example)
- this will be 0.
- */
- property alias duration: player.duration
- /*!
- \qmlproperty int Video::loops
- Determines how often the media is played before stopping.
- Set to MediaPlayer.Infinite to loop the current media file forever.
- The default value is \c 1. Setting this property to \c 0 has no effect.
- */
- property alias loops: player.loops
- /*!
- \qmlproperty enumeration Video::error
- This property holds the error state of the video. It can be one of:
- \list
- \li MediaPlayer.NoError - there is no current error.
- \li MediaPlayer.ResourceError - the video cannot be played due to a problem
- allocating resources.
- \li MediaPlayer.FormatError - the video format is not supported.
- \li MediaPlayer.NetworkError - the video cannot be played due to network issues.
- \li MediaPlayer.AccessDenied - the video cannot be played due to insufficient
- permissions.
- \li MediaPlayer.ServiceMissing - the video cannot be played because the media
- service could not be
- instantiated.
- \endlist
- */
- property alias error: player.error
- /*!
- \qmlproperty string Video::errorString
- This property holds a string describing the current error condition in more detail.
- */
- property alias errorString: player.errorString
- /*!
- \qmlproperty bool Video::hasAudio
- This property holds whether the current media has audio content.
- */
- property alias hasAudio: player.hasAudio
- /*!
- \qmlproperty bool Video::hasVideo
- This property holds whether the current media has video content.
- */
- property alias hasVideo: player.hasVideo
- /*!
- \qmlproperty mediaMetaData Video::metaData
- This property holds the meta data for the current media.
- See \l{MediaPlayer::metaData}{MediaPlayer.metaData} for details about each meta data key.
- \sa {mediaMetaData}
- */
- property alias metaData: player.metaData
- /*!
- \qmlproperty bool Video::muted
- This property holds whether the audio output is muted.
- */
- property alias muted: audioOutput.muted
- /*!
- \qmlproperty real Video::playbackRate
- This property holds the rate at which video is played at as a multiple
- of the normal rate.
- */
- property alias playbackRate: player.playbackRate
- /*!
- \qmlproperty int Video::position
- This property holds the current playback position in milliseconds.
- */
- property alias position: player.position
- /*!
- \qmlproperty bool Video::seekable
- This property holds whether the playback position of the video can be
- changed.
- If true, calling the \l seek() method or changing the \l position property
- will cause playback to seek to the new position.
- */
- property alias seekable: player.seekable
- /*!
- \qmlproperty url Video::source
- This property holds the source URL of the media.
- */
- property alias source: player.source
- /*!
- \since 6.7
- \qmlproperty bool Video::autoPlay
- This property controls whether the media begins to play automatically after it gets loaded.
- Defaults to \c false.
- */
- property alias autoPlay: player.autoPlay
- /*!
- \qmlproperty real Video::volume
- This property holds the audio volume.
- The volume is scaled linearly from \c 0.0 (silence) to \c 1.0
- (full volume). Values outside this range will be clamped.
- The default volume is \c 1.0.
- 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 \l {QtAudio::convertVolume()} for more details.
- */
- property alias volume: audioOutput.volume
- /*!
- \qmlsignal Video::paused()
- This signal is emitted when playback is paused.
- */
- signal paused
- /*!
- \qmlsignal Video::stopped()
- This signal is emitted when playback is stopped.
- */
- signal stopped
- /*!
- \qmlsignal Video::playing()
- This signal is emitted when playback is started or continued.
- */
- signal playing
- /*!
- \qmlsignal Video::errorOccurred(error, errorString)
- This signal is emitted when an \a error has occurred. The \a errorString
- parameter may contain more detailed information about the error.
- */
- signal errorOccurred(int error, string errorString)
- VideoOutput {
- id: videoOut
- anchors.fill: video
- }
- MediaPlayer {
- id: player
- onPlaybackStateChanged: function(newState) {
- if (newState === MediaPlayer.PausedState)
- video.paused();
- else if (newState === MediaPlayer.StoppedState)
- video.stopped();
- else
- video.playing();
- }
- onErrorOccurred: function(error, errorString) {
- video.errorOccurred(error, errorString);
- }
- videoOutput: videoOut
- audioOutput: AudioOutput {
- id: audioOutput
- }
- }
- /*!
- \qmlmethod Video::play()
- Starts playback of the media.
- */
- function play() {
- player.play();
- }
- /*!
- \qmlmethod Video::pause()
- Pauses playback of the media.
- */
- function pause() {
- player.pause();
- }
- /*!
- \qmlmethod Video::stop()
- Stops playback of the media.
- */
- function stop() {
- player.stop();
- }
- /*!
- \qmlmethod Video::seek(offset)
- If the \l seekable property is true, seeks the current
- playback position to \a offset.
- \sa seekable, position
- */
- function seek(offset) {
- player.position = offset;
- }
- /*!
- \qmlmethod Video::clearOutput()
- \since 6.9
- Clears the video output by removing the current video frame.
- This method is recommended when you need to remove the last video frame after
- the video stream ends with the \l endOfStreamPolicy Video property
- set to \c KeepLastFrame.
- */
- function clearOutput() {
- videoOut.clearOutput();
- }
- }
|