Cuando definas los formatos que admite ExoPlayer, es importante tener en cuenta que los "formatos de medios" se definen en varios niveles. Se describen a continuación los niveles, desde el más bajo hasta el más alto:
- Es el formato de las muestras de medios individuales (por ejemplo, un fotograma de video o un fotograma de audio). Estos son formatos de muestra. Ten en cuenta que un archivo de video típico contendrá contenido multimedia en al menos dos formatos de muestra: uno para el video (por ejemplo, H.264) y otro para el audio (por ejemplo, AAC).
- Es el formato del contenedor que alberga las muestras de medios y los metadatos asociados. Estos son formatos de contenedor. Un archivo multimedia tiene un solo formato de contenedor (por ejemplo, MP4), que se indica comúnmente con la extensión del archivo. Ten en cuenta que, para algunos formatos solo de audio (por ejemplo, MP3), los formatos de muestra y contenedor pueden ser los mismos.
- Tecnologías de transmisión adaptable, como DASH, SmoothStreaming y HLS Estos no son formatos de medios como tales, pero aún es necesario definir qué nivel de compatibilidad proporciona ExoPlayer.
En las siguientes secciones, se define la compatibilidad de ExoPlayer en cada nivel, del más alto al más bajo. En las últimas dos secciones, se describe la compatibilidad con formatos de subtítulos independientes y la reproducción de video HDR.
Transmisión adaptable
DASH
ExoPlayer admite DASH con varios formatos de contenedor. Los flujos de medios deben estar desmultiplexados, lo que significa que el video, el audio y el texto deben definirse en elementos AdaptationSet distintos en el manifiesto de DASH (CEA-608 es una excepción, como se describe en la siguiente tabla). Los formatos de muestras de audio y video incluidos también deben ser compatibles (consulta la sección formatos de muestras para obtener más detalles).
| Función | Compatible | Comentarios |
|---|---|---|
| Contenedores | ||
| FMP4 | SÍ | Solo transmisiones desmultiplexadas |
| WebM | SÍ | Solo transmisiones desmultiplexadas |
| Matroska | SÍ | Solo transmisiones desmultiplexadas |
| MPEG-TS | NO | No se planea brindar asistencia |
| Subtítulos | ||
| TTML | SÍ | Sin procesar o incorporado en FMP4 según ISO/IEC 14496-30 |
| WebVTT | SÍ | Sin procesar o incorporado en FMP4 según ISO/IEC 14496-30 |
| CEA-608 | SÍ | Se incorpora en FMP4 cuando se indica con descriptores de accesibilidad de SCTE. |
| CEA-708 | SÍ | Se incorpora en FMP4 cuando se indica con descriptores de accesibilidad de SCTE. |
| Metadatos | ||
| Metadatos de EMSG | SÍ | Incorporado en FMP4 |
| Protección de contenido | ||
| Widevine | SÍ | Esquema "cenc": API 19 y versiones posteriores Esquema "cbcs": API 25 y versiones posteriores |
| PlayReady SL2000 | SÍ | Android TV, esquema "cenc" únicamente |
| ClearKey | SÍ | API 21 y versiones posteriores, solo esquema "cenc" |
| Inserción de anuncios | ||
| Reproducción de varios períodos | SÍ | |
| Inserción de anuncios guiada por el servidor (vínculos externos) | NO | |
| Anuncios de IMA del servidor y del cliente | SÍ | Guía de inserción de anuncios |
| Reproducción en vivo | ||
| Reproducción en vivo normal | SÍ | |
| Reproducción en vivo de CMAF con latencia ultrabaja | SÍ | |
| Datos comunes de clientes multimedia (CMCD) | SÍ | Guía de integración de CMCD |
SmoothStreaming
ExoPlayer admite SmoothStreaming con el formato de contenedor FMP4. Los flujos de medios deben estar desmultiplexados, lo que significa que el video, el audio y el texto deben definirse en elementos StreamIndex distintos en el manifiesto de SmoothStreaming. También se deben admitir los formatos de muestras de audio y video incluidos (consulta la sección formatos de muestras para obtener más detalles).
| Función | Compatible | Comentarios |
|---|---|---|
| Contenedores | ||
| FMP4 | SÍ | Solo transmisiones desmultiplexadas |
| Subtítulos | ||
| TTML | SÍ | Incorporado en FMP4 |
| Protección de contenido | ||
| PlayReady SL2000 | SÍ | Únicamente para Android TV |
| Reproducción en vivo | ||
| Reproducción en vivo normal | SÍ | |
| Datos comunes de clientes multimedia (CMCD) | SÍ | Guía de integración |
HLS
ExoPlayer admite HLS con varios formatos de contenedor. También se deben admitir los formatos de muestras de audio y video incluidos (consulta la sección de formatos de muestras para obtener más detalles). Recomendamos a los productores de contenido de HLS que generen transmisiones de HLS de alta calidad, como se describe en esta entrada de blog.
| Función | Compatible | Comentarios |
|---|---|---|
| Contenedores | ||
| MPEG-TS | SÍ | |
| FMP4/CMAF | SÍ | |
| ADTS (AAC) | SÍ | |
| MP3 | SÍ | |
| Subtítulos | ||
| CEA-608 | SÍ | |
| CEA-708 | SÍ | |
| WebVTT | SÍ | |
| Metadatos | ||
| ID3 | SÍ | |
| SCTE-35 | NO | |
| Protección de contenido | ||
| AES-128 | SÍ | |
| Muestra de AES-128 | NO | |
| Widevine | SÍ | API 19+ (esquema "cenc") y 25+ (esquema "cbcs") |
| PlayReady SL2000 | SÍ | Únicamente para Android TV |
| Control del servidor | ||
| Actualizaciones delta | SÍ | |
| Se bloqueó la recarga de la playlist | SÍ | |
| Bloquea la carga de las sugerencias de precarga | SÍ | Excepto para los rangos de bytes con longitudes indefinidas |
| Inserción de anuncios | ||
| Inserción de anuncios guiada por el servidor (anuncios intersticiales) | Parcialmente | Solo VOD con X-ASSET-URI.
Las transmisiones en vivo y los X-ASSET-LIST se agregarán más adelante. |
| Anuncios de IMA del servidor y del cliente | SÍ | Guía de inserción de anuncios |
| Reproducción en vivo | ||
| Reproducción en vivo normal | SÍ | |
| HLS de baja latencia (Apple) | SÍ | |
| HLS de baja latencia (comunidad) | NO | |
| Common Media Client Data CMCD | SÍ | Guía de integración de CMCD |
Formatos de contenedor progresivos
ExoPlayer puede reproducir directamente los flujos en los siguientes formatos de contenedor. También se deben admitir los formatos de muestras de audio y video incluidos (consulta la sección Formatos de muestras para obtener más detalles). Para obtener información sobre la compatibilidad con formatos y contenedores de imágenes, consulta Imágenes.
| Formato del contenedor | Compatible | Comentarios |
|---|---|---|
| MP4 | SÍ | |
| M4A | SÍ | |
| FMP4 | SÍ | |
| WebM | SÍ | |
| Matroska | SÍ | |
| MP3 | SÍ | Algunas transmisiones solo se pueden buscar con la búsqueda de velocidad de bits constante** |
| Ogg | SÍ | Contiene Vorbis, Opus y FLAC |
| WAV | SÍ | |
| MPEG-TS | SÍ | |
| MPEG-PS | SÍ | |
| FLV | SÍ | No se puede buscar* |
| ADTS (AAC) | SÍ | Solo se puede buscar con una búsqueda de tasa de bits constante** |
| FLAC | SÍ | Usa la biblioteca FLAC o el extractor de FLAC en la biblioteca ExoPlayer.*** |
| AMR | SÍ | Solo se puede buscar con una búsqueda de tasa de bits constante** |
* La búsqueda no es compatible porque el contenedor no proporciona metadatos (por ejemplo, un índice de muestras) para permitir que un reproductor multimedia realice una búsqueda de manera eficiente. Si se requiere la búsqueda, te sugerimos que uses un formato de contenedor más adecuado.
** Estos extractores tienen marcas FLAG_ENABLE_CONSTANT_BITRATE_SEEKING para habilitar la búsqueda aproximada con una suposición de tasa de bits constante. Esta función no está habilitada de forma predeterminada. La forma más sencilla de habilitar esta función para todos los extractores que la admiten es usar DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, como se describe aquí.
*** El extractor de la biblioteca FLAC genera audio sin procesar, que el framework puede controlar en todos los niveles de API. El extractor de FLAC de la biblioteca de ExoPlayer genera fotogramas de audio FLAC y, por lo tanto, depende de tener un decodificador de FLAC (por ejemplo, un decodificador MediaCodec que controle FLAC [obligatorio desde el nivel de API 27] o la biblioteca de FFmpeg con FLAC habilitado). DefaultExtractorsFactory usa el extractor de extensiones si la aplicación se compiló con la biblioteca FLAC.
De lo contrario, usa el extractor de la biblioteca de ExoPlayer.
RTSP
ExoPlayer admite RTSP en vivo y on demand. A continuación, se indican los formatos de muestras y los tipos de redes admitidos.
Formatos de muestras compatibles
- H264 (la descripción de medios del SDP debe incluir datos de SPS/PPS en el atributo fmtp para la inicialización del decodificador).
- AAC (con flujo de bits ADTS)
- AC3.
Tipos de redes admitidos
- RTP a través de UDP unicast (no se admite la multidifusión).
- RTSP intercalado, RTP a través de RTSP con TCP.
Formatos de muestra
De forma predeterminada, ExoPlayer usa los decodificadores de la plataforma de Android. Por lo tanto, los formatos de muestra admitidos dependen de la plataforma subyacente y no de ExoPlayer. Consulta Formatos de medios compatibles para obtener documentación sobre los formatos de muestra compatibles con los dispositivos Android. Ten en cuenta que los dispositivos individuales pueden admitir formatos adicionales más allá de los que se indican.
Además de los decodificadores de plataforma de Android, ExoPlayer también puede usar extensiones de decodificador de software. Estos deben compilarse manualmente y se deben incluir en los proyectos que deseen utilizarlos. Actualmente, proporcionamos bibliotecas de decodificadores de software para AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF y MPEG-H.
Biblioteca de FFmpeg
La biblioteca de FFmpeg admite la decodificación de una variedad de formatos de muestras de audio diferentes. Puedes elegir qué decodificadores incluir cuando compiles la biblioteca, como se documenta en el archivo README.md de la biblioteca. En la siguiente tabla, se proporciona una asignación del formato de muestra de audio al nombre del decodificador de FFmpeg correspondiente.
| Formato de la muestra | Nombres de los decodificadores |
|---|---|
| Vorbis | vorbis |
| Opus | opus |
| FLAC | flac |
| ALAC | alac |
| PCM μ-law | pcm_mulaw |
| PCM A-law | pcm_alaw |
| MP1, MP2, MP3 | mp3 |
| AMR-NB | amrnb |
| AMR-WB | amrwb |
| AAC | aac |
| AC-3 | ac3 |
| E-AC-3 | eac3 |
| DTS y DTS-HD | dca |
| TrueHD | mlp truehd |
Imágenes
ExoPlayer admite los siguientes formatos de imagen. Consulta Bibliotecas de carga de imágenes para obtener información sobre cómo realizar la integración con bibliotecas externas que pueden proporcionar compatibilidad con un conjunto diferente de formatos.
| Formato de imagen | Compatible | Notas |
|---|---|---|
| BMP | SÍ | |
| GIF | NO | Sin compatibilidad con el extractor |
| JPEG | SÍ | |
| Foto en movimiento JPEG | SÍ | Se admiten imágenes congeladas y videos |
| JPEG Ultra HDR | SÍ | Se revierte a SDR en versiones anteriores a Android 14 o en pantallas que no son HDR. |
| PNG | SÍ | |
| WebP | SÍ | |
| HEIF/HEIC | SÍ | |
| Foto en movimiento HEIC | SÍ | |
| AVIF (básico) | SÍ | Solo se decodifica en Android 14 y versiones posteriores |
Formatos de subtítulos independientes
ExoPlayer admite archivos de subtítulos independientes en una variedad de formatos. Los archivos de subtítulos se pueden transferir de forma lateral, como se describe en la página de elementos multimedia.
| Formato del contenedor | Compatible | tipo de MIME |
|---|---|---|
| WebVTT | SÍ | MimeTypes.TEXT_VTT |
| TTML / SMPTE-TT | SÍ | MimeTypes.APPLICATION_TTML |
| SubRip | SÍ | MimeTypes.APPLICATION_SUBRIP |
| SubStationAlpha (SSA/ASS) | SÍ | MimeTypes.TEXT_SSA |
Reproducción de video HDR
ExoPlayer controla la extracción de video de alto rango dinámico (HDR) en varios contenedores, incluido Dolby Vision en MP4 y HDR10+ en Matroska/WebM. La decodificación y la visualización de contenido HDR dependen de la compatibilidad de la plataforma y el dispositivo Android. Consulta Reproducción de video HDR para obtener información sobre cómo verificar las capacidades de decodificación y visualización de HDR, y las limitaciones de la compatibilidad con HDR en las diferentes versiones de Android.
Cuando se reproduce una transmisión en HDR que requiere compatibilidad con un perfil de códec en particular, el selector MediaCodec predeterminado de ExoPlayer elegirá un decodificador que admita ese perfil (si está disponible), incluso si otro decodificador para el mismo tipo de MIME que no admite ese perfil aparece más arriba en la lista de códecs. Esto puede provocar que se seleccione un decodificador de software en los casos en que la transmisión supera las capacidades de un decodificador de hardware para el mismo tipo de MIME.