Unterstützte Formate

Eine allgemeine Einführung in Medienformate finden Sie auf der Seite mit den von ExoPlayer unterstützten Formaten. Für Transformer gelten die gleichen Einschränkungen beim Laden, Extrahieren und Decodieren von Streams, auch wenn Transformer die gebündelten Software-Decodierer-Module von ExoPlayer nicht unterstützt.

Transformer verwendet außerdem MediaCodec zur Codierung und muss Mediendateien mit Multiplexverfahren (Mux) ausgeben, wodurch die unterstützten Ausgabeformate eingeschränkt werden. Weitere Informationen zu Einschränkungen bei der Codierung finden Sie unter MediaCodec-Video-Codecs. Informationen zu Einschränkungen für den Ausgabemediencontainer finden Sie unter MediaMuxer. Der Transformer gibt nur MP4-Dateien aus.

Standardmäßig verwendet Transformer MediaMuxer. Es ist jedoch optional eine noch in Arbeit befindliche InAppMuxer verfügbar, um einige der Einschränkungen von MediaMuxer in Bezug auf Referenz-Frame-Strukturen und unterstützte Beispielformate zu umgehen. In einer zukünftigen Version wird der Standard-Muxer zum In-App-Muxer.

Bildunterstützung

Transformer verwendet BitmapFactory, um alle Bild-Assets zu laden und zu decodieren. Transformer unterstützt daher alle Formate, die BitmapFactory bietet. Informationen zu den unterstützten Image-Typen finden Sie unter Image-Unterstützung. Bei Mehrbildformaten (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 Medienformaten, die im Vergleich zu herkömmlichen Formaten besondere Funktionen bieten.

HDR-Videos verarbeiten

Immer mehr Geräte unterstützen jetzt die HDR-Videoaufnahme. Dadurch sind lebendigere, präzisere Farben und ein größerer Helligkeitsbereich möglich.

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 die 16-Bit-Gleitkomma-Farbkomponenten und den BT.2020-Farbraum verarbeiten können. HDR_MODE_KEEP_HDR ist der Standardmodus beim Erstellen von Composition. Wenn die HDR-Bearbeitung nicht unterstützt wird, verwendet der Transformer wieder HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.

Die Konvertierung von HDR in SDR, auch als Tonzuordnung bezeichnet, wird ab Android 10 (API-Level 29) auf Geräten mit der erforderlichen Decodierung und OpenGL-Unterstützung unterstützt. Das ist nützlich, wenn HDR-Medien für andere Apps oder Dienste freigegeben werden, die die Aufnahme von HDR-Inhalten nicht unterstützen. Zur Aktivierung der Tonzuordnung mit OpenGL rufen Sie beim Erstellen von Composition setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) auf. Ab Android 12 (API-Level 31) unterstützt MediaCodec auf einigen Geräten auch die Tonzuordnung. Dazu gehören alle Geräte mit Android 13 oder höher, auf denen HDR-Videos aufgenommen werden können. Rufen Sie zum Aktivieren der Tonzuordnung mit MediaCodec setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) auf.

Umgang mit Zeitlupenmedien

Videos in Zeitlupe enthalten Metadaten, die die Geschwindigkeit angeben, mit der die einzelnen Abschnitte des Streams abgespielt werden sollen. Bei der Vereinfachung wird ein neuer Videostream basierend auf dem Video in Zeitlupe erstellt. Dabei werden die Abschnitte aufgrund der Metadaten beschleunigt oder verlangsamt, sodass sie auch bei Playern, die keine Metadaten in Zeitlupe verwenden, korrekt wiedergegeben werden.

Wenn Sie Streams in Zeitlupe vereinfachen möchten, verwenden Sie die Builder-Methode setFlattenForSlowMotion für EditedMediaItem.

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 Videos in Zeitlupe unterstützen, ohne dir Gedanken über die speziellen Formate machen zu müssen. Sie müssen lediglich die vereinfachte Version des Videos statt der Originalversion speichern und abspielen.