Qt Multimedia
Qt Multimedia ist ein Zusatzmodul, das einen umfangreichen Satz von QML-Typen und C++-Klassen für den Umgang mit Multimedia-Inhalten bietet. Es enthält eine einfach zu verwendende API für die Wiedergabe von Audio- und Videodateien und deren Darstellung auf dem Bildschirm sowie eine umfassende API für die Aufnahme von Audio- und Videodaten aus verschiedenen Quellen, einschließlich Systemkameras und Mikrofonen, Bildschirm- oder Fensteraufnahmen und Audio- oder Videospeicherpuffern.
Die Funktionalität dieses Moduls ist in die folgenden Untermodule unterteilt:
Qt Multimedia | Bietet eine API für multimediaspezifische Anwendungsfälle. |
Qt Multimedia Widgets | Bietet eine Widget-basierte Multimedia-API. |
Qt Spatial Audio | Bietet eine API für die Implementierung von Schallfeldern im 3D-Raum. |
Erste Schritte
Wenn Sie von Qt 5 auf Qt 6 portieren, lesen Sie bitte Änderungen an Qt Multimedia.
Wenn Sie neu bei Qt Multimedia sind, können Sie die QML-Typen in eine Anwendung importieren, indem Sie die folgende Anweisung in Ihrer .qml
Datei verwenden.
import QtMultimedia
Um gegen die C++-Bibliotheken zu linken, fügen Sie die folgende Anweisung in die CMakeLists.txt
Datei Ihres Projekts ein. Ersetzen Sie my_project
durch den Namen Ihres Projekts.
find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(my_project PRIVATE Qt6::Multimedia)
Eine Anleitung zum Erstellen von Qt Multimedia aus den Quellen finden Sie unter Qt Multimedia aus den Quellen erstellen.
Übersichten und wichtige Themen
- Änderungen in Qt 6
- Multimedia-Übersicht
- Audio-Übersicht
- Überblick über Spatial Audio
- Video-Übersicht
- Kamera-Übersicht
- Unterstützte Medienformate
QML-Typen
In der folgenden Tabelle sind einige wichtige QML-Typen aufgeführt.
Typ | Beschreibung |
---|---|
MediaPlayer | Hinzufügen von Audio-/Videowiedergabefunktionen zu einer Szene. |
CaptureSession | Erstellen einer Sitzung zur Aufnahme von Audio/Video. |
Camera | Zugriff auf eine an das System angeschlossene Kamera. |
AudioInput | Zugriff auf einen Audioeingang (Mikrofon), der an das System angeschlossen ist. |
AudioOutput | Zugriff auf einen Audioausgang (Lautsprecher, Kopfhörer), der an das System angeschlossen ist. |
VideoOutput | Anzeige von Videoinhalten. |
MediaRecorder | Aufnehmen von Audio/Video von der CaptureSession. |
ImageCapture | Aufnehmen von Standbildern von der Kamera. |
Video | Hinzufügen von Videowiedergabefunktionen zu einer Szene. Verwendet die Typen MediaPlayer und VideoOutput, um die Videowiedergabefunktionalität bereitzustellen. |
ScreenCapture | Erfasst einen Bildschirm. |
WindowCapture | Erfasst ein Fenster der obersten Ebene. |
C++-Klassen
In der folgenden Tabelle sind einige wichtige C++-Klassen aufgeführt.
Klasse | Beschreibung |
---|---|
QMediaPlayer | Wiedergeben von Medien aus einer Quelle. |
QVideoWidget | Anzeige von Video aus einem Media Player oder einer Aufnahmesitzung. |
QMediaCaptureSession | Aufnehmen von Audio und Video. |
QCamera | Zugriff auf eine an das System angeschlossene Kamera |
QAudioInput | Zugriff auf einen Audioeingang (Mikrofon), der an das System angeschlossen ist. |
QAudioOutput | Zugriff auf einen Audioausgang (Lautsprecher, Kopfhörer), der an das System angeschlossen ist. |
QImageCapture | Erfassen von Standbildern mit einer Kamera. |
QMediaRecorder | Aufzeichnung von Medieninhalten aus einer Aufnahmesitzung. |
QVideoSink | Auf einzelne Videobilder zugreifen und diese rendern. |
QAudioSink | Sendet Audio-Rohdaten an ein Audio-Ausgabegerät. |
QScreenCapture | Erfasst einen Bildschirm. |
QWindowCapture | Erfasst ein Fenster der obersten Ebene. |
QVideoFrameInput | Dient zur Anzeige oder Aufzeichnung von Videobildern aus Speicherpuffern. |
QAudioBufferInput | Unterstützt die Wiedergabe oder Aufnahme von Audio aus Speicherpuffern. |
Für die Wiedergabe von Audio und Video enthalten die Klassen QMediaPlayer, QAudioOutput und QVideoWidget alle notwendigen Funktionen. Andere Klassen sind der Aufnahme von Audio- und Videoinhalten gewidmet, wobei QMediaCaptureSession als zentrale Klasse dient, die den gesamten Aufnahme- und Aufzeichnungsprozess verwaltet.
Lizenzen und Namensnennung
Das Modul Qt Multimedia ist unter kommerziellen Lizenzen von The Qt Company erhältlich. Darüber hinaus ist es unter freien Software-Lizenzen verfügbar. Seit Qt 5.6 sind diese Lizenzen für freie Software die GNU Lesser General Public License, Version 3, oder die GNU General Public License, Version 2. Siehe Qt Licensing für weitere Details.
Darüber hinaus kann Qt Multimedia in Qt 6.8.2 Module von Drittanbietern unter den folgenden zulässigen Lizenzen enthalten:
GNU Lesser General Public License v2.1 oder höher und BSD 3-Klausel "New" oder "Revised" License und BSD 2-Klausel "Simplified" License und BSD Source Code Attribution und ISC License und MIT License und Mozilla Public License 2.0 | |
Boost Software-Lizenz 1.0 | |
Unabhängige JPEG-Gruppen-Lizenz | |
zlib-Lizenz |
Beachten Sie, dass Videokompressionsstandards, wie z. B. der H.264-Medienkompressionsstandard, durch Patente abgedeckt sein können und Lizenzgebühren anfallen können. Dies kann für jede Implementierung gelten, auch wenn die Implementierung als Betriebssystemdienst, durch eine Bibliothek eines Drittanbieters oder eines der Backends von Qt Multimedia bereitgestellt wird. Die Qt-Lizenzen decken solche Gebühren nicht ab.
Hinweise zu Zielplattform und Backend
Qt Multimedia bietet benutzerfreundliche, plattformübergreifende APIs für Medienwiedergabe, Aufnahme und Geräteverwaltung. Die Implementierung der Kern-APIs, einschließlich QMediaDevices, QAudioDevice, QSoundEffect, QAudioSink und QAudioSource, sind in die Hauptbibliothek Qt Multimedia integriert, so dass keine zusätzlichen Bibliotheken erforderlich sind. Andere APIs von Qt Multimedia werden mithilfe von Plugin-Bibliotheken implementiert, die als Medien-Backends bekannt sind. Das Hauptmedien-Backend, das auf FFmpeg aufbaut, gewährleistet eine nahtlose plattformübergreifende Funktionalität und ist die Standardeinstellung auf allen Plattformen außer WebAssembly und Embedded Linux/Boot2Qt. Bei Boot2Qt basiert das Standard-Backend auf GStreamer, aber das FFmpeg-Media-Backend kann über die Umgebungsvariable QT_MEDIA_BACKEND
aktiviert werden.
Das FFmpeg-Backend
Das FFmpeg-Media-Backend basiert auf den FFmpeg 7.1-Bibliotheken, die in Qt Online Installer enthalten und von den Betreuern getestet sind. Die Binärpakete des Online-Installers verwenden dynamisches Linking zu FFmpeg. Daher müssen Anwendungen entweder FFmpeg-Binärdateien in ihrem Installationsprogramm bündeln oder davon abhängen, dass FFmpeg auf dem Betriebssystem installiert ist. Die FFmpeg-Bibliotheken werden automatisch mit den Qt-Bereitstellungswerkzeugen bereitgestellt, wie in der Dokumentation Bereitstellung von Qt-Anwendungen beschrieben, außer für Linux/X11. Anwendungen können auch ihren eigenen Build von FFmpeg bereitstellen, entweder als gemeinsam genutzte oder statische Bibliotheken, vorausgesetzt die FFmpeg-Hauptversion stimmt mit der von Qt verwendeten Version überein.
Während Qt Multimedia das FFmpeg Media Backend auf den meisten Betriebssystemen nutzt, können plattformspezifische funktionale oder visuelle Unterschiede zwischen Anwendungen auf verschiedenen Plattformen auftreten. FFmpeg bietet nicht auf allen Plattformen eine identische Codec- und Formatunterstützung, und die Leistung der Funktionen von Qt Multimedia kann von der Hardwareunterstützung abhängen, die nur auf bestimmten Plattformen verfügbar ist. So hat FFmpeg beispielsweise spezielle Probleme mit der Hardware-Beschleunigung auf Linux-Zielen mit ARM-Architekturen. Es wird daher empfohlen, Qt Multimedia Anwendungen auf allen Zielplattformen zu testen.
Hinweis: Das FFmpeg-Projekt bietet Funktionen unter verschiedenen Lizenzen an. Die vorgefertigten FFmpeg-Bibliotheken, die über den Online Installer bereitgestellt werden, enthalten nur Funktionen, die mit den unter Lizenzen und Attributionen aufgeführten zulässigen Lizenzen übereinstimmen.
Um die Entwicklung und Fehlersuche zu erleichtern, sind einige FFmpeg-Funktionen über Umgebungsvariablen konfigurierbar, die Teil der privaten Qt Multimedia API sind.
Native Backends
Um die Kompatibilität mit bestehenden Anwendungen zu gewährleisten, bieten wir native Medien-Backends für jedes Betriebssystem an:
- GStreamer unter Linux
- AVFoundation für macOS und iOS
- Windows Media Foundation für Windows
- MediaCodec-Framework für Android
Hinweis: Das FFmpeg Medien-Backend ist das Standard-Backend, aber native Backends sind weiterhin verfügbar, allerdings mit eingeschränkter Unterstützung. Das GStreamer-Backend ist nur unter Linux verfügbar und wird nur für eingebettete Anwendungen empfohlen.
Hinweis: MediaCodec auf Android ist ab Qt 6.8 veraltet und wird in der nächsten Hauptversion entfernt werden.
Die Qt-Maintainer bemühen sich, kritische Probleme mit den nativen Backends zu beheben, garantieren aber nicht die Behebung kleinerer Probleme, einschließlich inkonsistentem Verhalten auf verschiedenen Plattformen. Neue Funktionen werden nur im FFmpeg Media Backend implementiert.
Das GStreamer-Backend verfügt über einige private APIs, die eine feinere Steuerung ermöglichen. Es gibt jedoch bekannte Fehler im GStreamer-Backend. Weitere Einzelheiten finden Sie unter GStreamer.
Backend-Einschränkungen werden dokumentiert, und ihr Status wird in den jeweiligen Klassen gepflegt.
Wechseln von Backends
Im Falle von Problemen mit dem Standard-FFmpeg-Backend empfehlen wir, mit einem nativen Backend zu testen. Sie können zu nativen Backends wechseln, indem Sie die Umgebungsvariable QT_MEDIA_BACKEND
auf windows
, gstreamer
(unter Linux), darwin
(unter macOS und iOS) oder android
setzen:
export QT_MEDIA_BACKEND=darwin
Um die Zuweisung von FFmpeg als das verwendete Backend zu erzwingen, setzen Sie die Variable auf ffmpeg
:
export QT_MEDIA_BACKEND=ffmpeg
In der Kompilierungsphase Qt Multimedia kann das Standard-Medien-Backend über die cmake-Variable QT_DEFAULT_MEDIA_BACKEND
konfiguriert werden.
Hinweise zur Zielplattform
Auf den folgenden Seiten werden Probleme für bestimmte Zielplattformen aufgeführt, die nicht mit dem Multimedia-Backend zusammenhängen.
Berechtigungen
Ab Qt 6.6 verwendet das Qt Multimedia Modul die neue QPermission API, um camera und microphone Berechtigungen zu behandeln. Das bedeutet, dass Qt selbst diese Berechtigungen nicht mehr abfragt, so dass dies direkt in der Client-Anwendung erfolgen muss.
Auf der Seite Anwendungsberechtigungen finden Sie ein Beispiel für die Integration der neuen QPermission API in die Anwendung.
Referenz und Beispiele
© 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.