Formatos compatibles

Cuando se definen los formatos que admite ExoPlayer, es importante tener en cuenta que los "formatos multimedia" se definen en varios niveles. Estos son los niveles más bajos al más alto:

  • Es el formato de las muestras de contenido multimedia individuales (como 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 video (por ejemplo, H.264) y otro para audio (por ejemplo, AAC).
  • Es el formato del contenedor que contiene las muestras de contenido multimedia y los metadatos asociados. Estos son formatos de contenedores. Un archivo multimedia tiene un solo formato de contenedor (por ejemplo, MP4), que, en general, se indica mediante la extensión de archivo. Ten en cuenta que, para algunos formatos de solo audio (por ejemplo, MP3), los formatos de muestra y de contenedor pueden ser iguales.
  • Tecnologías de transmisión adaptables, como DASH, SmoothStreaming y HLS. Si bien no son formatos multimedia como tales, es necesario definir el nivel de compatibilidad que proporciona ExoPlayer.

En las siguientes secciones, se define la compatibilidad de ExoPlayer en cada nivel, de mayor a menor. En las últimas dos secciones, se describe la compatibilidad con los formatos de subtítulos independientes y la reproducción de videos HDR.

Transmisión adaptable

DASH

ExoPlayer admite DASH con varios formatos de contenedor. Las transmisiones de contenido multimedia se deben demuxear, 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 muestra de audio y video también deben ser compatibles (consulta la sección de formatos de muestra para obtener más información).

Función Corroborado Comentarios
Contenedores
FMP4 Solo transmisiones demuxidas
WebM Solo transmisiones demuxidas
Matroska Solo transmisiones demuxidas
MPEG‐TS NO No hay asistencia planificada
Subtítulos
TTML Sin procesar o incorporado en FMP4 según la norma ISO/IEC 14496-30
WebVTT Sin procesar o incorporado en FMP4 según la norma ISO/IEC 14496-30
CEA-608 Se integra en FMP4 cuando se indica mediante descriptores de accesibilidad SCTE.
CEA-708 Se integra en FMP4 cuando se indica mediante descriptores de accesibilidad SCTE.
Metadatos
Metadatos de EMSG Incorporado en FMP4
Protección de contenido
Widevine Esquema “cenc”: API 19 o posterior; esquema “cbcs”: API 25+
PlayReady SL2000 Android TV, solo con esquema "cenc"
ClearKey API 21+, solo con esquema "cenc"
Reproducción en vivo
Reproducción habitual en vivo
Reproducción en vivo de CMAF de latencia ultrabaja
Datos comunes de clientes multimedia (CMCD) Guía de integración

SmoothStreaming

ExoPlayer admite SmoothStreaming con el formato contenedor FMP4. Las transmisiones de contenido multimedia deben estar demuxidas, lo que significa que el video, el audio y el texto deben definirse en elementos StreamIndex distintos en el manifiesto de SmoothStreaming. Los formatos de muestra de audio y video también deben ser compatibles (consulta la sección de formatos de muestra para obtener más información).

Función Corroborado Comentarios
Contenedores
FMP4 Solo transmisiones demuxidas
Subtítulos
TTML Incorporado en FMP4
Protección de contenido
PlayReady SL2000 Únicamente para Android TV
Reproducción en vivo
Reproducción habitual en vivo
Datos comunes de clientes multimedia (CMCD) Guía de integración

HLS

ExoPlayer admite HLS con varios formatos de contenedor. Los formatos de muestra de audio y video también deben ser compatibles (consulta la sección de formatos de muestra para obtener más información). Recomendamos a los productores de contenido de HLS que generen transmisiones HLS de alta calidad, como se describe aquí.

Función Corroborado 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
Ejemplo de AES-128 NO
Widevine API 19+ (esquema "cenc") y 25+ (esquema "cbcs")
PlayReady SL2000 Únicamente para Android TV
Control del servidor
Actualizaciones delta
Bloqueando la recarga de la playlist
Bloqueo de la carga de sugerencias de precarga Excepto para rangos de bytes con longitudes indefinidas
Reproducción en vivo
Reproducción habitual en vivo
HLS de baja latencia (Apple)
HLS de baja latencia (comunidad) NO
Datos comunes de clientes multimedia (CMCD) Guía de integración

Formatos de contenedor progresivos

ExoPlayer puede reproducir directamente las transmisiones en los siguientes formatos de contenedor. Los formatos de muestra de audio y video también deben ser compatibles (consulta la sección Formatos de muestra para obtener más información).

Formato del contenedor Corroborado Comentarios
MP4
M4A
FMP4
WebM
Matroska
MP3 Algunas transmisiones solo se pueden buscar con una búsqueda con tasa de bits constante**
OGG Contiene Vorbis, Opus y FLAC
WAV
MPEG‐TS
MPEG‐PS
FLV No permite búsquedas*
ADTS (AAC) Solo se puede buscar con una tasa de bits constante**
FLAC Usa la biblioteca FLAC o el extractor de FLAC en la biblioteca de ExoPlayer***.
AMR Solo se puede buscar con una tasa de bits constante**
Foto en movimiento JPEG Solo se extrae el contenido MP4

* No se admite la búsqueda porque el contenedor no proporciona metadatos (por ejemplo, un índice de muestra) 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 funcionalidad no está habilitada de forma predeterminada. La forma más sencilla de habilitar esta funcionalidad para todos los extractores compatibles es usar DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, como se describe aquí.

*** El extractor de la biblioteca de 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 marcos de audio FLAC y, por lo tanto, depende de tener un decodificador FLAC (por ejemplo, un decodificador MediaCodec que controla FLAC (obligatorio a partir del nivel de API 27) o la biblioteca FFmpeg con FLAC habilitado). DefaultExtractorsFactory usa el extractor de extensiones si la aplicación se compiló con la biblioteca de FLAC. De lo contrario, usa el extractor de la biblioteca de ExoPlayer.

RTSP

ExoPlayer admite RTSP en vivo y a pedido. A continuación, se indican los formatos de muestra y los tipos de redes compatibles.

Formatos de muestra admitidos

  • H264 (la descripción de medios del SDP debe incluir datos SPS/PPS en el atributo fmtp para la inicialización del decodificador)
  • AAC (con flujo de bits ADTS)
  • AC3

Tipos de red compatibles

  • RTP a través de unicast UDP (no se admite la multidifusión).
  • RTSP, RTP intercalado en RTSP mediante 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 en lugar de ExoPlayer. Consulta la sección Formatos multimedia compatibles para ver la documentación sobre los formatos de muestra compatibles con dispositivos Android. Ten en cuenta que los dispositivos individuales pueden admitir formatos adicionales aparte de los indicados.

Además de los decodificadores de la plataforma de Android, ExoPlayer también puede usar extensiones de decodificador de software. Estos deben compilarse manualmente y, luego, incluirse en los proyectos que deseen usarlos. Actualmente, proporcionamos bibliotecas de decodificador de software para AV1, VP9, FLAC, Opus y FFmpeg.

Biblioteca FFmpeg

La biblioteca FFmpeg admite la decodificación de diferentes formatos de muestra de audio. Puedes elegir qué decodificadores incluir cuando compilas la biblioteca, como se indica 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 correspondiente del decodificador de FFmpeg.

Formato de la muestra Nombres de los decodificadores
Vorbis vorbis
Opus opus
FLAC flac
ALAC alac
Ley μ de PCM pcm_mulaw
Ley A-MC pcm_alaw
MP1, MP2 y MP3 mp3
AMR-NB amrnb
AMR-WB Amrwb
AAC aac
CA-3 AC3
E-AC-3 eAC3
DTS y DTS-HD DMCA
TrueHD mlp truehd

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 como se describe en la página de elementos multimedia.

Formato del contenedor Corroborado Tipo de MIME
WebVTT Tipos de MIME.TEXT_VTT
TTML / SMPTE-TT Tipos de Mime.APPLICATION_TTML
SubRip Tipos de Mime.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) Tipos de MIME.TEXT_SSA

Reproducción de video HDR

ExoPlayer se encarga de extraer videos de alto rango dinámico (HDR) en varios contenedores, incluidos Dolby Vision en MP4 y HDR10+ en Matroska/WebM. La decodificación y visualización de contenido HDR depende de la compatibilidad con la plataforma y el dispositivo de 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 versiones de Android.

Cuando se reproduce una transmisión HDR que requiere compatibilidad con un perfil de códec en particular, el selector MediaCodec predeterminado de ExoPlayer elegirá un decodificador compatible con 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 resultar en la selección de un decodificador de software en los casos en que la transmisión supere las capacidades de un decodificador de hardware para el mismo tipo de MIME.