Formatos compatibles

Consulta la página de formatos compatibles con ExoPlayer para obtener una introducción a los formatos multimedia en general. Las mismas limitaciones en cuanto a la carga, la extracción y la decodificación de transmisiones se aplican con Transformer, aunque Transformer no es compatible con los módulos de decodificador de software en paquetes de ExoPlayer.

Transformer también se basa en MediaCodec para la codificación y necesita multiplexar o mux archivos multimedia de salida, lo que limita los formatos de salida admitidos. Consulta Códecs de video de MediaCodec para obtener más información sobre las limitaciones de codificación y MediaMuxer para conocer las limitaciones que se aplican al contenedor de medios de salida. Transformer solo genera archivos MP4.

De forma predeterminada, Transformer usa MediaMuxer, pero, de forma opcional, hay un InAppMuxer de trabajo en curso disponible para evitar algunas de las limitaciones de MediaMuxer en torno a las estructuras de marcos de referencia y los formatos de muestra compatibles. El combinador predeterminado se convertirá en el combinador integrado en la app en una versión futura.

Compatibilidad con imágenes

Transformer usa BitmapFactory para cargar y decodificar todos los recursos de imagen, por lo que Transformer admite todos los formatos que BitmapFactory. Consulta Compatibilidad con imágenes para conocer los tipos de imágenes compatibles. En el caso de los formatos de varias imágenes (p.ej., GIF), se muestra un solo fotograma de imagen del contenedor si se usa DefaultAssetLoaderFactory.

Formatos especiales

Transformer admite el control de entrada en los formatos multimedia más recientes que proporcionan funciones especiales en comparación con los formatos convencionales.

Cómo manejar videos HDR

Cada vez más dispositivos admiten la captura de video HDR, lo que permite obtener colores más vívidos y precisos, así como un mayor rango de brillo.

Transformer admite la edición de videos HDR a partir de Android 13 (nivel de API 33) en dispositivos con la compatibilidad de codificación necesaria. Cuando edites videos HDR, los efectos de video GL deben controlar los componentes de color de punto flotante de 16 bits y el espacio de color BT.2020. HDR_MODE_KEEP_HDR es el modo predeterminado cuando se compila la Composition. Si no se admite la edición HDR, el transformador recurrirá a HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.

La conversión de HDR a SDR, también conocida como asignación de tonos, se admite a partir de Android 10 (nivel de API 29) en dispositivos con la decodificación y la compatibilidad con OpenGL requeridas. Esto es útil cuando compartes contenido multimedia HDR con otras apps o servicios que no admiten la transferencia de contenido HDR. Para habilitar la asignación de tono con OpenGL, llama a setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) cuando crees el Composition. A partir de Android 12 (nivel de API 31), MediaCodec también admite la asignación de tono en algunos dispositivos, incluidos todos los dispositivos con Android 13 o versiones posteriores que pueden capturar videos HDR. Para habilitar la asignación de tono con MediaCodec, llama a setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).

Cómo manejar contenido multimedia en cámara lenta

Los videos en cámara lenta incluyen metadatos que indican la velocidad a la que se debe reproducir cada sección de la transmisión. El compacto es el proceso de producir una transmisión de video por Internet nueva basada en el video en cámara lenta, pero en el que las secciones se aceleran o disminuyen en función de los metadatos, de modo que se reproduzcan correctamente incluso en reproductores que no aplican metadatos de cámara lenta.

Para compactar las transmisiones en cámara lenta, usa el método del compilador setFlattenForSlowMotion en 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);

Esto te permite admitir videos en cámara lenta sin tener que preocuparte por controlar estos formatos especiales. Lo único que debes hacer es almacenar y reproducir la versión reducida del video en lugar del original.