Formatos compatibles

Consulta la página de formatos compatibles con ExoPlayer para obtener una introducción general a los formatos de medios. Las mismas limitaciones para cargar, extraer y decodificar transmisiones se aplican a Transformer, aunque Transformer no admite los módulos de decodificador de software agrupados de ExoPlayer.

Transformer también se basa en MediaCodec para la codificación, lo que limita los formatos de salida compatibles. Consulta Códecs de video de MediaCodec para obtener más información sobre las limitaciones de codificación.

De forma predeterminada, Transformer genera archivos MP4 estándar con InAppMp4Muxer. Si tu app requiere MP4 fragmentado, puedes pasar un InAppFragmentedMp4Muxer.Factory cuando inicializas tu instancia de Transformer. Media3 también admite otros formatos, como WebM, AAC y Ogg, con multiplexores dedicados como WebmMuxer , AacMuxer y OggMuxer. Estos deben incluirse en un Muxer.Factory personalizado para insertarse, pero las versiones futuras incluirán implementaciones de fábrica listas para usar para simplificar este proceso.

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 admite BitmapFactory. Consulta Compatibilidad con imágenes para ver los tipos de imágenes compatibles. Para los formatos de varias imágenes (p.ej., GIFs), se muestra un solo fotograma de imagen del contenedor si se usa DefaultAssetLoaderFactory.

Formatos especiales

Transformer admite el procesamiento de entradas en formatos de medios más nuevos que proporcionan funciones especiales en comparación con los formatos convencionales.

Cómo controlar videos HDR

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

Transformer admite la edición de videos HDR desde Android 13 (nivel de API 33) en adelante en dispositivos con la compatibilidad de codificación requerida. Cuando edites videos HDR, cualquier efecto de video GL deberá 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 Composition. Si no se admite la edición HDR, Transformer recurre 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 desde Android 10 (nivel de API 29) en adelante en dispositivos con la decodificación y la compatibilidad con OpenGL requeridas. Esto es útil cuando se comparten medios HDR con otras apps o servicios que no admiten la transferencia de contenido HDR. Para habilitar la asignación de tonos con OpenGL, llama a setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) cuando crees Composition. A partir de Android 12 (nivel de API 31), MediaCodec también admite la asignación de tonos en algunos dispositivos, incluidos todos los dispositivos que ejecutan Android 13 o versiones posteriores que pueden capturar video HDR. Para habilitar la asignación de tonos con MediaCodec, llama a setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).

Cómo controlar medios 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 aplanamiento es el proceso de producir una nueva transmisión de video basada en el video en cámara lenta, pero en la que las secciones se aceleran o ralentizan según los metadatos, de modo que se reproduzcan correctamente incluso en reproductores que no aplican metadatos en cámara lenta.

Para aplanar 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. Todo lo que debes hacer es almacenar y reproducir la versión aplanada del video en lugar de la original.