Eine Einführung zu Media-Formaten im Allgemeinen findest du auf der ExoPlayer supported formats Seite. Für das Laden, Extrahieren und Decodieren von Streams gelten mit Transformer dieselben Einschränkungen. Allerdings werden die gebündelten Software-Decoder-Module von ExoPlayer nicht unterstützt.
Transformer verwendet außerdem MediaCodec für die Codierung, wodurch die unterstützten Ausgabeformate eingeschränkt werden. Weitere Informationen zu den Einschränkungen bei der Codierung findest du unter MediaCodec-Videocodecs.
Standardmäßig gibt Transformer Standard-MP4-Dateien mit
InAppMp4Muxer aus. Wenn deine App fragmentierte MP4-Dateien erfordert, kannst du beim Initialisieren deiner Transformer Instanz eine InAppFragmentedMp4Muxer.Factory übergeben. Media3 unterstützt auch andere Formate
wie WebM, AAC, Ogg und WAV mit speziellen Muxern wie
WebmMuxer, AacMuxer, OggMuxer und
WavMuxer. Diese müssen in eine benutzerdefinierte
Muxer.Factory eingebunden werden, um eingefügt zu werden. Zukünftige Versionen werden jedoch
sofort einsatzbereite Factory-Implementierungen enthalten, um diesen Prozess zu vereinfachen.
Bildunterstützung
Transformer verwendet BitmapFactory zum Laden und Decodieren aller Bild-Assets. Daher werden alle Formate unterstützt, die auch von BitmapFactory unterstützt werden. Unter
Bildunterstützung
findest du eine Liste der unterstützten Bildtypen. Bei Formaten mit mehreren Bildern (z.B. GIFs) wird ein einzelner Bildframe aus dem Container angezeigt, wenn DefaultAssetLoaderFactory verwendet wird.
Sonderformate
Transformer unterstützt die Verarbeitung von Eingaben in neueren Media-Formaten, die im Vergleich zu herkömmlichen Formaten spezielle Funktionen bieten.
HDR-Videos verarbeiten
Immer mehr Geräte unterstützen die HDR-Video aufnahme, die lebendigere, genauere Farben und einen größeren Helligkeitsbereich ermöglicht.
Transformer unterstützt die Bearbeitung von HDR-Videos ab Android 13 (API-Level 33) auf Geräten mit der erforderlichen Codierungsunterstützung. Beim Bearbeiten von HDR-Videos müssen alle GL-Videoeffekte 16-Bit-Gleitkomma-Farbkomponenten und den BT.2020-Farbraum verarbeiten. HDR_MODE_KEEP_HDR ist der Standardmodus beim Erstellen der Composition. Wenn die HDR-Bearbeitung nicht unterstützt wird, greift Transformer auf HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL zurück.
Die Konvertierung von HDR in SDR, auch Tonemapping genannt, wird ab Android
10 (API-Level 29) auf Geräten mit der erforderlichen Decodierungs- und OpenGL
Unterstützung unterstützt. Das ist nützlich, wenn du HDR-Medien für andere Apps oder Dienste freigeben möchtest, die die Aufnahme von HDR-Inhalten nicht unterstützen. Wenn du Tonemapping mit OpenGL aktivieren möchtest, rufe beim Erstellen der Composition die Funktion setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) auf. Ab Android 12 (API-Level 31) unterstützt MediaCodec auch Tonemapping auf einigen Geräten, einschließlich aller Geräte mit Android 13 oder höher, die HDR-Videos aufnehmen können. Wenn du Tonemapping mit MediaCodec aktivieren möchtest, rufe setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) auf.
Transformer unterstützt auch erweiterte Transcodierungsszenarien wie die folgenden:
- Ultra-HDR-Video in HDR-Video konvertieren:Du kannst Ultra-HDR-Bildeingaben in HDR-Videos konvertieren und dabei den Dynamikbereich und den großen Farbraum des Bildes beibehalten. So passen Standbilder in gemischten Zeitachsen zur Spitzenhelligkeit und Lebendigkeit von HDR-Videos.
- Dolby Vision-Transcodierung und -Transmuxing:Transformer unterstützt das Transmuxing der abwärtskompatiblen Basisebene (z. B. HEVC) aus Dolby Vision-Medien (Profil 8) ohne erneute Codierung oder die Transcodierung mit Tonemapping in Standard-SDR-Formate.
Zeitlupenmedien verarbeiten
Zeitlupenvideos enthalten Metadaten, die die Geschwindigkeit angeben, mit der die einzelnen Abschnitte des Streams wiedergegeben werden sollen. Flattening ist der Prozess, bei dem ein neuer Videostream auf Grundlage des Zeitlupenvideos erstellt wird. Die Abschnitte werden jedoch anhand der Metadaten beschleunigt oder verlangsamt, sodass sie auch auf Playern korrekt wiedergegeben werden, die keine Zeitlupen-Metadaten anwenden.
Verwende die Builder-Methode setFlattenForSlowMotion für EditedMediaItem, um Zeitlupen-Streams zu glätten.
Kotlin
val editedMediaItem = EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build() val transformer = Transformer.Builder(context).addListener(transformerListener).build() transformer.start(editedMediaItem, outputPath)
Java
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build(); Transformer transformer = new Transformer.Builder(context).addListener(transformerListener).build(); transformer.start(editedMediaItem, outputPath);
So kannst du Zeitlupenvideos unterstützen, ohne dich um die Verarbeitung dieser Sonderformate kümmern zu müssen. Du musst nur die geglättete Version des Videos anstelle des Originals speichern und wiedergeben.