Cuando definas los formatos que admite ExoPlayer, es importante tener en cuenta que los "formatos multimedia" 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 los samples 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 uno para audio (por ejemplo, AAC).
- Es el formato del contenedor que aloja las muestras de contenido multimedia y los metadatos asociados. Estos son formatos de contenedor. Un archivo multimedia tiene un solo formato de contenedor (por ejemplo, MP4), que suele indicarse con la extensión del archivo. Ten en cuenta que, para algunos formatos de solo audio (por ejemplo, MP3), los formatos de muestra y contenedor pueden ser los mismos.
- Tecnologías de transmisión adaptables, como DASH, SmoothStreaming y HLS Estos no son formatos multimedia como tal, 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. Las transmisiones de contenido multimedia deben demuxarse, lo que significa que el video, el audio y el texto deben definirse en elementos AdaptationSet
distintos en el manifiesto DASH (CEA-608 es una excepción, como se describe en la siguiente tabla). Los formatos de muestra de audio y video contenidos también deben ser compatibles (consulta la sección Formatos de muestra para obtener más información).
Función | Compatible | Comentarios |
---|---|---|
Contenedores | ||
FMP4 | SÍ | Solo transmisiones demuxadas |
WebM | SÍ | Solo transmisiones demuxadas |
Matroska | SÍ | Solo transmisiones demuxadas |
MPEG-TS | NO | No hay asistencia planificada |
Subtítulos opcionales | ||
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 del contenido | ||
Widevine | SÍ | Esquema "cenc": API 19 y versiones posteriores; Esquema "cbcs": API 25 y versiones posteriores |
PlayReady SL2000 | SÍ | Android TV, solo esquema "cenc" |
ClearKey | SÍ | API 21 y versiones posteriores, solo esquema "cenc" |
Reproducción en vivo | ||
Reproducción en vivo normal | 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 de contenedor FMP4. Las transmisiones de contenido multimedia deben demuxarse, 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 contenidos también deben ser compatibles (consulta la sección Formatos de muestra para obtener más información).
Función | Compatible | Comentarios |
---|---|---|
Contenedores | ||
FMP4 | SÍ | Solo transmisiones demuxadas |
Subtítulos opcionales | ||
TTML | SÍ | Incorporado en FMP4 |
Protección del 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. Los formatos de muestra de audio y video contenidos también deben ser compatibles (consulta la sección Formatos de muestra para obtener más información). Recomendamos encarecidamente a los productores de contenido HLS que generen transmisiones HLS de alta calidad, como se describe aquí.
Función | Compatible | Comentarios |
---|---|---|
Contenedores | ||
MPEG-TS | SÍ | |
FMP4/CMAF | SÍ | |
ADTS (AAC) | SÍ | |
MP3 | SÍ | |
Subtítulos opcionales | ||
CEA-608 | SÍ | |
CEA-708 | SÍ | |
WebVTT | SÍ | |
Metadatos | ||
ID3 | SÍ | |
SCTE-35 | NO | |
Protección del contenido | ||
AES-128 | SÍ | |
Muestra de AES-128 | NO | |
Widevine | SÍ | Niveles de API 19 y superiores ("cenc") y 25 y superiores ("cbcs") |
PlayReady SL2000 | SÍ | Únicamente para Android TV |
Control de servidores | ||
Actualizaciones delta | SÍ | |
Cómo bloquear la recarga de una playlist | SÍ | |
Bloquea la carga de sugerencias de carga previa | SÍ | Excepto para los rangos de bytes con longitudes no definidas |
Reproducción en vivo | ||
Reproducción en vivo normal | SÍ | |
HLS de baja latencia (Apple) | SÍ | |
HLS de baja latencia (comunitario) | NO | |
Datos comunes de clientes multimedia (CMCD) | SÍ | Guía de integración |
Formatos de contenedor progresivo
ExoPlayer puede reproducir directamente las transmisiones en los siguientes formatos de contenedor. Los formatos de muestra de audio y video contenidos también deben ser compatibles (consulta la sección Formatos de muestra para obtener más información). Para obtener información sobre la compatibilidad con contenedores y formatos 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 tasa 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 búsqueda de tasa de bits constante** |
FLAC | SÍ | Con la biblioteca de FLAC o el extractor de FLAC en la biblioteca de ExoPlayer*** |
AMR | SÍ | Solo se puede buscar con búsqueda de tasa de bits constante** |
* No se admite el salto porque el contenedor no proporciona metadatos (por ejemplo, un índice de muestra) para permitir que un reproductor multimedia realice un salto de manera eficiente. Si se requiere el salto, te sugerimos que uses un formato de contenedor más adecuado.
** Estos extractores tienen marcas FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
para permitir 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 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 fotogramas de audio FLAC y, por lo tanto, depende de tener un decodificador FLAC (por ejemplo, un decodificador MediaCodec
que controle FLAC (obligatorio a partir del 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 enumeran los formatos de muestra y los tipos de red compatibles.
Formatos de muestra admitidos
- H264 (la descripción de contenido multimedia de 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 red admitidos
- RTP sobre unicast UDP (no se admite la multidifusión).
- RTSP intercalado, RTP sobre RTSP a través de TCP
Formatos de muestra
De forma predeterminada, ExoPlayer usa los decodificadores de la plataforma de Android. Por lo tanto, los formatos de muestra compatibles dependen de la plataforma subyacente en lugar 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 además de los que se indican.
Además de los decodificadores de plataforma de Android, ExoPlayer también puede usar extensiones de decodificadores de software. Estos deben compilarse de forma manual y deben incluirse en los proyectos que deseen usarlos. Actualmente, proporcionamos bibliotecas de decodificadores de software para AV1, VP9, FLAC, Opus, FFmpeg, MIDI y IAMF.
Biblioteca de FFmpeg
La biblioteca FFmpeg admite la decodificación de una variedad de formatos de muestras de audio diferentes. Puedes elegir qué decodificadores incluir cuando compilas la biblioteca, como se documenta en el archivo README.md de la biblioteca. La siguiente tabla 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 admitir un conjunto diferente de formatos.
Formato de imagen | Compatible | Notas |
---|---|---|
BMP | SÍ | |
GIF | NO | No es compatible con Extractor |
JPEG | SÍ | |
Foto en movimiento JPEG | SÍ | Se admiten imágenes fijas y videos |
JPEG Ultra HDR | SÍ | Recurre a SDR antes de Android 14 o en pantallas que no son HDR. |
PNG | SÍ | |
WebP | SÍ | |
HEIF/HEIC | SÍ | |
Foto en movimiento HEIC | Parcialmente | Solo se admiten imágenes fijas* |
AVIF (referencia) | SÍ | Solo se decodifica en Android 14 y versiones posteriores |
* La parte de video de las fotos en movimiento HEIC se puede obtener con MetadataRetriever y reproducir como un archivo independiente.
Formatos de subtítulos independientes
ExoPlayer admite archivos de subtítulos independientes en varios formatos. Los archivos de subtítulos se pueden transferir 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 videos de alto rango dinámico (HDR) en varios contenedores, incluidos 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 de Android. Consulta Reproducción de video HDR para obtener información sobre cómo verificar las capacidades de decodificación y visualización HDR, y las limitaciones de 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 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 supere las capacidades de un decodificador de hardware para el mismo tipo de MIME.