| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Lesser General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Lesser |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
| ** packaging of this file. Please review the following information to |
| ** ensure the GNU Lesser General Public License version 3 requirements |
| ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 2.0 or (at your option) the GNU General |
| ** Public license version 3 or any later version approved by the KDE Free |
| ** Qt Foundation. The licenses are as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
| ** https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| import QtQuick 2.0 |
| import QtMultimedia 5.13 |
| |
| /*! |
| \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. |
| |
| \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.seek(video.position - 5000) |
| Keys.onRightPressed: video.seek(video.position + 5000) |
| } |
| \endqml |
| |
| \c Video supports untransformed, 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 |
| |
| /*** 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::flushMode |
| |
| Set this property to define what \c Video should show |
| when playback is finished or stopped. |
| |
| \list |
| \li VideoOutput.EmptyFrame - clears video output. |
| \li VideoOutput.FirstFrame - shows the first valid frame. |
| \li VideoOutput.LastFrame - shows the last valid frame. |
| \endlist |
| |
| The default flush mode is EmptyFrame. |
| \since 5.15 |
| */ |
| property alias flushMode: videoOut.flushMode |
| |
| /*! |
| \qmlproperty int Video::orientation |
| |
| The orientation of the \c Video in degrees. Only multiples of 90 |
| degrees is supported, that is 0, 90, 180, 270, 360, etc. |
| */ |
| property alias orientation: videoOut.orientation |
| |
| |
| /*** 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 bool Video::autoLoad |
| |
| This property indicates if loading of media should begin immediately. |
| |
| Defaults to true, if false media will not be loaded until playback is |
| started. |
| */ |
| property alias autoLoad: player.autoLoad |
| |
| /*! |
| \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 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 enumeration Video::availability |
| |
| Returns the availability state of the video instance. |
| |
| This is one of: |
| \table |
| \header \li Value \li Description |
| \row \li MediaPlayer.Available |
| \li The video player is available to use. |
| \row \li MediaPlayer.Busy |
| \li The video player is usually available, but some other |
| process is utilizing the hardware necessary to play media. |
| \row \li MediaPlayer.Unavailable |
| \li There are no supported video playback facilities. |
| \row \li MediaPlayer.ResourceMissing |
| \li There is one or more resources missing, so the video player cannot |
| be used. It may be possible to try again at a later time. |
| \endtable |
| */ |
| property alias availability: player.availability |
| |
| /*! |
| \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 object 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 {QMediaMetaData} |
| */ |
| property alias metaData: player.metaData |
| |
| /*! |
| \qmlproperty bool Video::muted |
| |
| This property holds whether the audio output is muted. |
| */ |
| property alias muted: player.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. |
| |
| To change this position, use the \l seek() method. |
| |
| \sa seek() |
| */ |
| property alias position: player.position |
| |
| /*! |
| \qmlproperty enumeration Video::audioRole |
| |
| This property holds the role of the audio stream. 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 setting the source property. |
| |
| Supported values can be retrieved with supportedAudioRoles(). |
| |
| The value can be one of: |
| \list |
| \li MediaPlayer.UnknownRole - the role is unknown or undefined. |
| \li MediaPlayer.MusicRole - music. |
| \li MediaPlayer.VideoRole - soundtrack from a movie or a video. |
| \li MediaPlayer.VoiceCommunicationRole - voice communications, such as telephony. |
| \li MediaPlayer.AlarmRole - alarm. |
| \li MediaPlayer.NotificationRole - notification, such as an incoming e-mail or a chat request. |
| \li MediaPlayer.RingtoneRole - ringtone. |
| \li MediaPlayer.AccessibilityRole - for accessibility, such as with a screen reader. |
| \li MediaPlayer.SonificationRole - sonification, such as with user interface sounds. |
| \li MediaPlayer.GameRole - game audio. |
| \li MediaPlayer.CustomRole - The role is specified by customAudioRole. |
| \endlist |
| |
| customAudioRole is cleared when this property is set to anything other than CustomRole. |
| |
| \since 5.6 |
| */ |
| property alias audioRole: player.audioRole |
| |
| /*! |
| \qmlproperty string Video::customAudioRole |
| |
| This property holds the role of the audio stream when the backend supports audio roles |
| unknown to Qt. 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 setting the source property. |
| |
| audioRole is set to CustomRole when this property is set. |
| |
| \since 5.11 |
| */ |
| property alias customAudioRole: player.customAudioRole |
| |
| /*! |
| \qmlproperty bool Video::seekable |
| |
| This property holds whether the playback position of the video can be |
| changed. |
| |
| If true, calling the \l seek() method 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. |
| |
| Setting the \l source property clears the current \l playlist, if any. |
| */ |
| property alias source: player.source |
| |
| /*! |
| \qmlproperty Playlist Video::playlist |
| |
| This property holds the playlist used by the media player. |
| |
| Setting the \l playlist property resets the \l source to an empty string. |
| |
| \since 5.6 |
| */ |
| property alias playlist: player.playlist |
| |
| /*! |
| \qmlproperty enumeration Video::status |
| |
| This property holds the status of media loading. It can be one of: |
| |
| \list |
| \li MediaPlayer.NoMedia - no media has been set. |
| \li MediaPlayer.Loading - the media is currently being loaded. |
| \li MediaPlayer.Loaded - the media has been loaded. |
| \li MediaPlayer.Buffering - the media is buffering data. |
| \li MediaPlayer.Stalled - playback has been interrupted while the media is buffering data. |
| \li MediaPlayer.Buffered - the media has buffered data. |
| \li MediaPlayer.EndOfMedia - the media has played to the end. |
| \li MediaPlayer.InvalidMedia - the media cannot be played. |
| \li MediaPlayer.UnknownStatus - the status of the media cannot be determined. |
| \endlist |
| */ |
| property alias status: player.status |
| |
| /*! |
| \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 {QtMultimedia::QtMultimedia::convertVolume()}{QtMultimedia.convertVolume()} |
| for more details. |
| */ |
| property alias volume: player.volume |
| |
| /*! |
| \qmlproperty bool Video::autoPlay |
| |
| This property determines whether the media should begin playback automatically. |
| |
| Setting to \c true also sets \l autoLoad to \c true. The default is \c false. |
| */ |
| property alias autoPlay: player.autoPlay |
| |
| /*! |
| \qmlproperty int Video::notifyInterval |
| |
| The interval at which notifiable properties will update. |
| |
| The notifiable properties are \l position and \l bufferProgress. |
| |
| The interval is expressed in milliseconds, the default value is 1000. |
| |
| \since 5.9 |
| */ |
| property alias notifyInterval: player.notifyInterval |
| |
| /*! |
| \qmlproperty int Video::loops |
| |
| This property holds the number of times the media is played. A value of \c 0 or \c 1 means |
| the media will be played only once; set to \c MediaPlayer.Infinite to enable infinite looping. |
| |
| The value can be changed while the media is playing, in which case it will update |
| the remaining loops to the new value. |
| |
| The default is \c 1. |
| |
| \since 5.9 |
| */ |
| property alias loops: player.loops |
| |
| /*! |
| \qmlsignal Video::paused() |
| |
| This signal is emitted when playback is paused. |
| |
| The corresponding handler is \c onPaused. |
| */ |
| signal paused |
| |
| /*! |
| \qmlsignal Video::stopped() |
| |
| This signal is emitted when playback is stopped. |
| |
| The corresponding handler is \c onStopped. |
| */ |
| signal stopped |
| |
| /*! |
| \qmlsignal Video::playing() |
| |
| This signal is emitted when playback is started or continued. |
| |
| The corresponding handler is \c onPlaying. |
| */ |
| signal playing |
| |
| VideoOutput { |
| id: videoOut |
| anchors.fill: video |
| source: player |
| } |
| |
| MediaPlayer { |
| id: player |
| onPaused: video.paused() |
| onStopped: video.stopped() |
| onPlaying: video.playing() |
| } |
| |
| /*! |
| \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. |
| |
| Seeking may be asynchronous, so the \l position property |
| may not be updated immediately. |
| |
| \sa seekable, position |
| */ |
| function seek(offset) { |
| player.seek(offset); |
| } |
| |
| /*! |
| \qmlmethod list<int> Video::supportedAudioRoles() |
| |
| Returns a list of supported audio roles. |
| |
| If setting the audio role is not supported, an empty list is returned. |
| |
| \since 5.6 |
| \sa audioRole |
| */ |
| function supportedAudioRoles() { |
| return player.supportedAudioRoles(); |
| } |
| |
| } |