Medienspieler
Abspielen von Audio und Video mit Qt Quick.
Dieses Beispiel demonstriert einen einfachen Multimedia-Player, der Audio- und Videodateien mit verschiedenen Codecs abspielen kann.
Ausführen des Beispiels
Zum Ausführen des Beispiels von Qt Creatorauszuführen, öffnen Sie den Modus Welcome und wählen Sie das Beispiel aus Examples. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.
Projektstruktur
Diese Anwendungsarchitektur besteht aus drei benutzerdefinierten QML-Modulen:
MediaControl
MediaPlayer
Config
Dies spiegelt sich auch in der Top-Level-Datei CMakeLists.txt
wider:
add_subdirectory(MediaPlayer) add_subdirectory(MediaControls) add_subdirectory(Config) target_link_libraries(MediaPlayerApp PRIVATE Qt6::Core Qt6::Svg Qt6::Quick Qt6::Multimedia MediaControlsplugin MediaPlayerplugin Configplugin
Jedes QML-Modul wird mit dem Makro qt_add_qml_module erstellt, siehe z.B. wie das Config-Modul erstellt wird.
qt_add_library(Config STATIC) set_source_files_properties(Config.qml PROPERTIES QT_QML_SINGLETON_TYPE true ) qt_add_qml_module(Config URI "Config" OUTPUT_DIRECTORY Config QML_FILES "Config.qml" )
Qt Quick Anwendung
Im Kern handelt es sich um eine QML-Anwendung, siehe Erste Schritte in der Programmierung mit Qt Quick für spezielle Informationen dazu. Diese Dokumentation konzentriert sich darauf, wie dieses Beispiel die Qt Multimedia QML Types.
Das benutzerdefinierte Config QML-Modul
Dieser Typ steuert Themen und Layouts für eine Anwendung, abhängig vom Zielbetriebssystem.
Zuerst deklarieren wir ihn als Singleton, da er nur einmal instanziiert werden muss und die Erstellung von Kopien eine Verschwendung von Ressourcen wäre.
Zu diesem Zweck fügen wir folgendes am Anfang von Config.qml
pragma Singleton
Anschließend erstellen wir eine qmldir-Datei im Verzeichnis Config
mit dem Namen qmldir
, die Folgendes enthält:
module Config singleton Config 1.0 Config.qml
Um sie nun in unserer Anwendung zu verwenden, sehen Sie, wie sie in der Datei Main.qml von MediaPlayer referenziert wird:
color: Config.mainColor
Das benutzerdefinierte MediaControls QML-Modul
Dieses Modul enthält alle Typen, die zur Definition der Steuerelemente der Anwendung verwendet werden:
- AudioControl.qml
- Steuerelement-Bilder.qml
- BenutzerdefinierteSchaltfläche.qml
- BenutzerdefinierteRadioButton.qml
- BenutzerdefinierterSchieberegler.qml
- PlaybackControl.qml
- AbspielRateControl.qml
- PlaybackSeekControl.qml
Einzelheiten zur Implementierung dieser Steuerelemente finden Sie in der Definitionsdatei des jeweiligen Typs. Sie sind eine Weiterentwicklung der Steuerelemente im QML Media Player-Beispiel.
Das benutzerdefinierte MediaPlayer
QML-Modul
Dieses Modul enthält die Datei Main.qml, in der die meisten Typen der obersten Ebene für die Anwendung deklariert werden, und vor allem die QML-Typen Qt Multimedia MediaPlayer und VideoOutput.
MediaPlayer { id: mediaPlayer playbackRate: playbackControl.playbackRate videoOutput: videoOutput audioOutput: AudioOutput { id: audio volume: playbackControl.volume } source: new URL("https://download.qt.io/learning/videos/media-player-example/Qt_LogoMergeEffect.mp4") function updateMetadata() { root.metadataInfo.clear() root.metadataInfo.read(mediaPlayer.metaData) } onMetaDataChanged: updateMetadata() onActiveTracksChanged: updateMetadata() onErrorOccurred: { errorPopup.errorMsg = mediaPlayer.errorString errorPopup.open() } onTracksChanged: { settingsInfo.tracksInfo.selectedAudioTrack = mediaPlayer.activeAudioTrack settingsInfo.tracksInfo.selectedVideoTrack = mediaPlayer.activeVideoTrack settingsInfo.tracksInfo.selectedSubtitleTrack = mediaPlayer.activeSubtitleTrack updateMetadata() } onMediaStatusChanged: { if ((MediaPlayer.EndOfMedia === mediaStatus && mediaPlayer.loops !== MediaPlayer.Infinite) && ((root.currentFile < playlistInfo.mediaCount - 1) || playlistInfo.isShuffled)) { if (!playlistInfo.isShuffled) { ++root.currentFile } root.playMedia() } else if (MediaPlayer.EndOfMedia === mediaStatus && root.playlistLooped && playlistInfo.mediaCount) { root.currentFile = 0 root.playMedia() } } } VideoOutput { id: videoOutput anchors.top: fullScreen || Config.isMobileTarget ? parent.top : menuBar.bottom anchors.bottom: fullScreen ? parent.bottom : playbackControl.top anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: fullScreen ? 0 : 20 anchors.rightMargin: fullScreen ? 0 : 20 visible: mediaPlayer.hasVideo property bool fullScreen: false TapHandler { onDoubleTapped: { if (parent.fullScreen) { root.showNormal() } else { root.showFullScreen() } parent.fullScreen = !parent.fullScreen } onTapped: { root.closeOverlays() } } }
Das Modul enthält die anderen Zolltypen, die zum Abrufen und Anzeigen von Dateiinformationen sowie zum Aufrufen der Dateiauswahl verwendet werden.
- FehlerPopup.qml
- Bilder.qml
- MetadatenInfo.qml
- PlayerMenuBar.qml
- WiedergabelisteInfo.qml
- EinstellungenInfo.qml
- ThemeInfo.qml
- BerührungsMenü.qml
- TracksInfo.qml
- SpurenOptionen.qml
- UrlPopup.qml
In der Definitionsdatei des jeweiligen Typs finden Sie Einzelheiten zur Implementierung der Typen. Einige sind eine Weiterentwicklung der Typen, die im QML Media Player-Beispiel zu finden sind.
Neue Funktionalität
Diese Beispielanwendung verfügt über einige neue Funktionen, die durch Typen wie PlaylistInfo
und ThemeInfo
implementiert wurden. In den entsprechenden .qml-Dateien finden Sie Einzelheiten zur Implementierung dieser Funktionen.
© 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.