Eine Einführung in Media-Formate im Allgemeinen finden Sie auf der Seite Von ExoPlayer unterstützte Formate. Für Transformer gelten dieselben Einschränkungen beim Laden, Extrahieren und Decodieren von Streams. Transformer unterstützt jedoch nicht die gebündelten Softwaredecoder-Module von ExoPlayer.
Transformer verwendet auch MediaCodec für die Codierung und muss Ausgabemediadateien multiplexen oder muxen, was die unterstützten Ausgabeformate einschränkt. Weitere Informationen zu den Einschränkungen bei der Codierung finden Sie unter MediaCodec-Videocodecs und zu den Einschränkungen, die für den Media-Container der Ausgabe gelten, unter MediaMuxer. Transformer gibt nur MP4-Dateien aus.
Standardmäßig verwendet Transformer MediaMuxer. Eine InAppMuxer in der Entwicklung ist optional verfügbar, um einige Einschränkungen von MediaMuxer in Bezug auf Referenzrahmenstrukturen und unterstützte Beispielformate zu vermeiden. Der Standard-Muxer wird in einer zukünftigen Version zum In-App-Muxer.
Bildunterstützung
Transformer verwendet BitmapFactory zum Laden und Decodieren aller Bild-Assets. Daher unterstützt Transformer alle Formate, die auch von BitmapFactory unterstützt werden. Informationen zu unterstützten Bildtypen finden Sie unter Bildunterstützung. 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 Mediaformaten, die im Vergleich zu herkömmlichen Formaten spezielle Funktionen bieten.
Umgang mit HDR-Videos
Immer mehr Geräte unterstützen jetzt die HDR-Videoaufnahme, die für lebendigere, genauere Farben und einen größeren Helligkeitsbereich sorgt.
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 unterstützen. HDR_MODE_KEEP_HDR ist der Standardmodus beim Erstellen des Composition. Wenn die HDR-Bearbeitung nicht unterstützt wird, greift der Transformer auf HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL zurück.
Die Konvertierung von HDR zu SDR, auch Tone-Mapping 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 Sie HDR-Medien für andere Apps oder Dienste freigeben, die die Aufnahme von HDR-Inhalten nicht unterstützen. Um das Tone-Mapping mit OpenGL zu aktivieren, rufen Sie beim Erstellen von 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 das Tone-Mapping auf einigen Geräten, einschließlich aller Geräte mit Android 13 oder höher, die HDR‑Videos aufnehmen können. Um das Tone-Mapping mit MediaCodec zu aktivieren, rufen Sie setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) auf.
Umgang mit Zeitlupenmedien
Zeitlupenvideos enthalten Metadaten, die angeben, mit welcher Geschwindigkeit die einzelnen Abschnitte des Streams wiedergegeben werden sollen. Flattening ist der Prozess, bei dem ein neuer Videostream auf Grundlage des Zeitlupenvideos erstellt wird. Dabei werden die Abschnitte anhand von Metadaten beschleunigt oder verlangsamt, sodass sie auch auf Playern, die keine Zeitlupen-Metadaten anwenden, richtig wiedergegeben werden.
Verwenden Sie die Builder-Methode setFlattenForSlowMotion für EditedMediaItem, um Zeitlupenstreams 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 können Sie Zeitlupenvideos unterstützen, ohne sich um die Verarbeitung dieser speziellen Formate kümmern zu müssen. Du musst nur die zusammengeführte Version des Videos anstelle des Originals speichern und abspielen.