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 depende de 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 Transformer instancia. Media3 también admite otros formatos
como WebM, AAC, Ogg y WAV, con multiplexores dedicados como
WebmMuxer, AacMuxer, OggMuxer y
WavMuxer. 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 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 procesar 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 editas videos HDR, cualquier efecto de video GL debe 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, Transformer vuelve a usar HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
La conversión de HDR a SDR, también conocida como mapeo 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 el mapeo de tonos con OpenGL, llama a setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) cuando crees la Composition. A partir de Android 12 (nivel de API 31), MediaCodec también admite el mapeo de tonos en algunos dispositivos, incluidos todos los dispositivos que ejecutan Android 13 o versiones posteriores que pueden capturar video HDR. Para habilitar el mapeo de tonos con MediaCodec, llama a setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).
Transformer también admite situaciones avanzadas de transcodificación, como las siguientes:
- Video Ultra HDR a HDR: Puedes convertir entradas de imágenes Ultra HDR en video HDR, lo que preserva el rango dinámico y la amplia gama de colores de la imagen para que las fotos fijas coincidan con el brillo máximo y la intensidad del video HDR en líneas de tiempo combinadas.
- Transcodificación y transmuxing de Dolby Vision: Transformer admite el transmuxing de la capa base compatible con versiones anteriores (como HEVC) de medios Dolby Vision (perfil 8) sin volver a codificarla o transcodificarla con mapeo de tonos en formatos SDR estándar.
Cómo procesar 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 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.