Formatos compatibles

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

Transformer también depende de MediaCodec para la codificación y necesita multiplexar, o mux, los 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. El Transformer solo genera archivos MP4.

De forma predeterminada, Transformer usa MediaMuxer, pero, de manera opcional, se encuentra disponible un InAppMuxer en desarrollo para evitar algunas de las limitaciones de MediaMuxer en torno a las estructuras de los marcos de referencia y los formatos de muestra admitidos. El multiplexor predeterminado se convertirá en el multiplexor 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 admite todos los formatos que BitmapFactory. Consulta Compatibilidad con imágenes para conocer los tipos de imágenes admitidos. En el caso de 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 entrada en formatos de medios más recientes 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 permite obtener colores más vívidos y precisos, y 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 requerida. Cuando edites videos HDR, todos los efectos de video de 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 el Composition. Si no se admite la edición HDR, el transformador 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 a partir de Android 10 (nivel de API 29) en dispositivos con la decodificación y la compatibilidad con OpenGL necesarias. Esto es útil cuando se comparte contenido multimedia HDR a 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 el 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 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 aplanamiento es el proceso de producir un nuevo flujo de video basado en el video en cámara lenta, pero en el que las secciones se aceleran o se ralentizan según los metadatos, de modo que se reproduzcan correctamente incluso en los reproductores que no aplican metadatos de cámara lenta.

Para aplanar los flujos 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. Solo debes almacenar y reproducir la versión aplanada del video en lugar de la original.