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 | SÍ | Solo transmisiones demuxidas |
WebM | SÍ | Solo transmisiones demuxidas |
Matroska | SÍ | Solo transmisiones demuxidas |
MPEG‐TS | NO | No hay asistencia planificada |
Subtítulos | ||
TTML | SÍ | Sin procesar o incorporado en FMP4 según la norma ISO/IEC 14496-30 |
WebVTT | SÍ | Sin procesar o incorporado en FMP4 según la norma ISO/IEC 14496-30 |
CEA-608 | SÍ | Se integra en FMP4 cuando se indica mediante descriptores de accesibilidad SCTE. |
CEA-708 | SÍ | Se integra en FMP4 cuando se indica mediante descriptores de accesibilidad SCTE. |
Metadatos | ||
Metadatos de EMSG | SÍ | Incorporado en FMP4 |
Protección de contenido | ||
Widevine | SÍ | Esquema “cenc”: API 19 o posterior; esquema “cbcs”: API 25+ |
PlayReady SL2000 | SÍ | Android TV, solo con esquema "cenc" |
ClearKey | SÍ | API 21+, solo con esquema "cenc" |
Reproducción en vivo | ||
Reproducción habitual en vivo | SÍ | |
Reproducción en vivo de CMAF de latencia ultrabaja | SÍ | |
Datos comunes de clientes multimedia (CMCD) | SÍ | 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 | SÍ | Solo transmisiones demuxidas |
Subtítulos | ||
TTML | SÍ | Incorporado en FMP4 |
Protección de contenido | ||
PlayReady SL2000 | SÍ | Únicamente para Android TV |
Reproducción en vivo | ||
Reproducción habitual en vivo | SÍ | |
Datos comunes de clientes multimedia (CMCD) | SÍ | 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 | 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Í | |
Ejemplo 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Í | |
Bloqueando la recarga de la playlist | SÍ | |
Bloqueo de la carga de sugerencias de precarga | SÍ | Excepto para rangos de bytes con longitudes indefinidas |
Reproducción en vivo | ||
Reproducción habitual en vivo | SÍ | |
HLS de baja latencia (Apple) | SÍ | |
HLS de baja latencia (comunidad) | NO | |
Datos comunes de clientes multimedia (CMCD) | SÍ | 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 | SÍ | |
M4A | SÍ | |
FMP4 | SÍ | |
WebM | SÍ | |
Matroska | SÍ | |
MP3 | SÍ | Algunas transmisiones solo se pueden buscar con una búsqueda con tasa de bits constante** |
OGG | SÍ | Contiene Vorbis, Opus y FLAC |
WAV | SÍ | |
MPEG‐TS | SÍ | |
MPEG‐PS | SÍ | |
FLV | SÍ | No permite búsquedas* |
ADTS (AAC) | SÍ | Solo se puede buscar con una tasa de bits constante** |
FLAC | SÍ | Usa la biblioteca FLAC o el extractor de FLAC en la biblioteca de ExoPlayer***. |
AMR | SÍ | Solo se puede buscar con una tasa de bits constante** |
Foto en movimiento JPEG | SÍ | 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 | SÍ | Tipos de MIME.TEXT_VTT |
TTML / SMPTE-TT | SÍ | Tipos de Mime.APPLICATION_TTML |
SubRip | SÍ | Tipos de Mime.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | SÍ | 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.