Formatos compatibles

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 Solo transmisiones desmultiplexadas
WebM Solo transmisiones desmultiplexadas
Matroska Solo transmisiones desmultiplexadas
MPEG-TS NO No se planea brindar asistencia
Subtítulos
TTML Sin procesar o incorporado en FMP4 según ISO/IEC 14496-30
WebVTT Sin procesar o incorporado en FMP4 según ISO/IEC 14496-30
CEA-608 Se incorpora en FMP4 cuando se indica con descriptores de accesibilidad de SCTE.
CEA-708 Se incorpora en FMP4 cuando se indica con descriptores de accesibilidad de SCTE.
Metadatos
Metadatos de EMSG Incorporado en FMP4
Protección de contenido
Widevine Esquema "cenc": API 19 y versiones posteriores Esquema "cbcs": API 25 y versiones posteriores
PlayReady SL2000 Android TV, esquema "cenc" únicamente
ClearKey API 21 y versiones posteriores, solo esquema "cenc"
Inserción de anuncios
Reproducción de varios períodos
Inserción de anuncios guiada por el servidor (vínculos externos) NO
Anuncios de IMA del servidor y del cliente Guía de inserción de anuncios
Reproducción en vivo
Reproducción en vivo normal
Reproducción en vivo de CMAF con latencia ultrabaja
Datos comunes de clientes multimedia (CMCD) 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 Solo transmisiones desmultiplexadas
Subtítulos
TTML Incorporado en FMP4
Protección de contenido
PlayReady SL2000 Únicamente para Android TV
Reproducción en vivo
Reproducción en vivo normal
Datos comunes de clientes multimedia (CMCD) 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
FMP4/CMAF
ADTS (AAC)
MP3
Subtítulos
CEA-608
CEA-708
WebVTT
Metadatos
ID3
SCTE-35 NO
Protección de contenido
AES-128
Muestra de AES-128 NO
Widevine API 19+ (esquema "cenc") y 25+ (esquema "cbcs")
PlayReady SL2000 Únicamente para Android TV
Control del servidor
Actualizaciones delta
Se bloqueó la recarga de la playlist
Bloquea la carga de las sugerencias de precarga 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 Guía de inserción de anuncios
Reproducción en vivo
Reproducción en vivo normal
HLS de baja latencia (Apple)
HLS de baja latencia (comunidad) NO
Common Media Client Data CMCD 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
M4A
FMP4
WebM
Matroska
MP3 Algunas transmisiones solo se pueden buscar con la búsqueda de velocidad de bits constante**
Ogg Contiene Vorbis, Opus y FLAC
WAV
MPEG-TS
MPEG-PS
FLV No se puede buscar*
ADTS (AAC) Solo se puede buscar con una búsqueda de tasa de bits constante**
FLAC Usa la biblioteca FLAC o el extractor de FLAC en la biblioteca ExoPlayer.***
AMR 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
GIF NO Sin compatibilidad con el extractor
JPEG
Foto en movimiento JPEG Se admiten imágenes congeladas y videos
JPEG Ultra HDR Se revierte a SDR en versiones anteriores a Android 14 o en pantallas que no son HDR.
PNG
WebP
HEIF/HEIC
Foto en movimiento HEIC
AVIF (básico) 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 MimeTypes.TEXT_VTT
TTML / SMPTE-TT MimeTypes.APPLICATION_TTML
SubRip MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) 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.