Formatos compatíveis

Ao definir os formatos compatíveis com o ExoPlayer, é importante observar que os "formatos de mídia" são definidos em vários níveis. Do nível mais baixo ao mais alto, são elas:

  • O formato das amostras de mídia individuais (como um frame de vídeo ou um frame de áudio). Estes são formatos de exemplo. Um arquivo de vídeo típico contém mídia em pelo menos dois formatos de amostra: um para vídeo (por exemplo, H.264) e um para áudio (por exemplo, AAC).
  • O formato do contêiner que armazena as amostras de mídia e os metadados associados. Esses são os formatos de contêiner. Um arquivo de mídia tem um único formato de contêiner (por exemplo, MP4), que geralmente é indicado pela extensão de arquivo. Para alguns formatos somente de áudio (por exemplo, MP3), os formatos de amostra e contêiner podem ser iguais.
  • Tecnologias de streaming adaptável, como DASH, SmoothStreaming e HLS. Esses não são formatos de mídia, mas ainda é necessário definir qual nível de suporte o ExoPlayer oferece.

As seções a seguir definem o suporte do ExoPlayer em cada nível, do mais alto ao mais baixo. As duas últimas seções descrevem o suporte a formatos de legenda independente e a reprodução de vídeo HDR.

Streaming adaptável

DASH

O ExoPlayer é compatível com DASH em vários formatos de contêiner. Os fluxos de mídia precisam ser demuxados, ou seja, vídeo, áudio e texto precisam ser definidos em elementos AdaptationSet distintos no manifesto DASH. A CEA-608 é uma exceção, conforme descrito na tabela abaixo. Os formatos de amostra de áudio e vídeo contidos também precisam ser compatíveis. Consulte a seção Formatos de amostra para mais detalhes.

Recurso Compatível Comentários
Contêineres
FMP4 SIM Somente streams demuxadas
WebM SIM Somente streams demuxadas
Matroska SIM Somente streams demuxadas
MPEG-TS NÃO Nenhum suporte planejado
Legendas / legendas descritivas
TTML SIM Bruto ou incorporado em FMP4 de acordo com ISO/IEC 14496-30
WebVTT SIM Bruto ou incorporado em FMP4 de acordo com ISO/IEC 14496-30
CEA-608 SIM Incorporado em FMP4 quando sinalizado usando descritores de acessibilidade SCTE
CEA-708 SIM Incorporado em FMP4 quando sinalizado usando descritores de acessibilidade SCTE
Metadados
Metadados EMSG SIM Incorporado em FMP4
Proteção de conteúdo
Widevine SIM Esquema "cenc": API 19 ou mais recente; Esquema "cbcs": API 25 ou mais recente
PlayReady SL2000 SIM Android TV, somente esquema "cenc"
ClearKey SIM API 21+, esquema "cenc" apenas
Inserção de anúncios
Reprodução de vários períodos SIM
Inserção de anúncios guiada pelo servidor (xlinks) NÃO
Anúncios do lado do cliente e do lado do servidor da IMA SIM Guia de inserção de anúncios
Reprodução ao vivo
Reprodução ao vivo normal SIM
Reprodução ao vivo de CMAF com latência ultrabaixa SIM
Dados comuns do cliente de mídia (CMCD) SIM Guia de integração do CMCD

SmoothStreaming

O ExoPlayer é compatível com SmoothStreaming no formato de contêiner FMP4. Os fluxos de mídia precisam ser demuxados, ou seja, vídeo, áudio e texto precisam ser definidos em elementos StreamIndex distintos no manifesto do SmoothStreaming. Os formatos de amostra de áudio e vídeo contidos também precisam ser compatíveis. Consulte a seção Formatos de amostra para mais detalhes.

Recurso Compatível Comentários
Contêineres
FMP4 SIM Somente streams demuxadas
Legenda descritiva
TTML SIM Incorporado em FMP4
Proteção de conteúdo
PlayReady SL2000 SIM Somente no Android TV
Reprodução ao vivo
Reprodução ao vivo normal SIM
Dados comuns do cliente de mídia (CMCD) SIM Guia de integração

HLS

O ExoPlayer é compatível com HLS em vários formatos de contêiner. Os formatos de amostra de áudio e vídeo contidos também precisam ser compatíveis. Consulte a seção Formatos de amostra para mais detalhes. Incentivamos os produtores de conteúdo HLS a gerar transmissões HLS de alta qualidade, conforme descrito nesta postagem do blog.

Recurso Compatível Comentários
Contêineres
MPEG-TS SIM
FMP4/CMAF SIM
ADTS (AAC) SIM
MP3 SIM
Legenda descritiva / legendas
CEA-608 SIM
CEA-708 SIM
WebVTT SIM
Metadados
ID3 SIM
SCTE-35 NÃO
Proteção de conteúdo
AES-128 SIM
Exemplo de AES-128 NÃO
Widevine SIM API 19+ (esquema "cenc") e 25+ (esquema "cbcs")
PlayReady SL2000 SIM Somente no Android TV
Controle do servidor
Atualizações delta SIM
Bloqueio da atualização da playlist SIM
Bloqueio do carregamento de dicas de pré-carregamento SIM Exceto intervalos de bytes com comprimentos indefinidos
Inserção de anúncios
Inserção de anúncios guiada pelo servidor (intersticiais) Parcialmente Somente VOD com X-ASSET-URI. As transmissões ao vivo e o X-ASSET-LIST serão adicionados depois.
Anúncios do lado do cliente e do lado do servidor da IMA SIM Guia de inserção de anúncios
Reprodução ao vivo
Reprodução ao vivo normal SIM
HLS de baixa latência (Apple) SIM
HLS de baixa latência (comunidade) NÃO
Dados comuns do cliente de mídia CMCD SIM Guia de integração do CMCD

Formatos de contêiner progressivos

O ExoPlayer pode reproduzir streams nos seguintes formatos de contêiner: Os formatos de amostra de áudio e vídeo contidos também precisam ser compatíveis. Consulte a seção Formatos de amostra para mais detalhes. Para saber mais sobre suporte a contêineres e formatos de imagem, consulte Imagens.

Formato do contêiner Compatível Comentários
MP4 SIM
M4A SIM
FMP4 SIM
WebM SIM
Matroska SIM
MP3 SIM Alguns fluxos só podem ser pesquisados usando a busca de taxa de bits constante**
Ogg SIM Contendo Vorbis, Opus e FLAC
WAV SIM
MPEG-TS SIM
MPEG-PS SIM
FLV SIM Não é possível buscar*
ADTS (AAC) SIM Só é possível buscar usando taxa de bits constante**
FLAC SIM Usando a biblioteca FLAC ou o extrator FLAC na biblioteca ExoPlayer***
AMR SIM Só é possível buscar usando taxa de bits constante**

* A busca não é compatível porque o contêiner não fornece metadados (por exemplo, um índice de amostra) para permitir que um player de mídia faça uma busca de maneira eficiente. Se a busca for necessária, sugerimos usar um formato de contêiner mais adequado.

** Esses extratores têm flags FLAG_ENABLE_CONSTANT_BITRATE_SEEKING para ativar a busca aproximada usando uma taxa de bits constante. Essa funcionalidade não é ativada por padrão. A maneira mais simples de ativar essa funcionalidade para todos os extratores que a oferecem é usar DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, conforme descrito aqui.

*** O extrator da biblioteca FLAC gera áudio bruto, que pode ser processado pelo framework em todos os níveis de API. O extrator FLAC da biblioteca ExoPlayer gera frames de áudio FLAC e, portanto, depende de um decodificador FLAC. Por exemplo, um decodificador MediaCodec que processa FLAC (necessário a partir do nível 27 da API) ou a biblioteca FFmpeg com o FLAC ativado. O DefaultExtractorsFactory usa o extrator de extensão se o aplicativo foi criado com a biblioteca FLAC. Caso contrário, ele usa o extrator da biblioteca ExoPlayer.

RTSP

O ExoPlayer é compatível com RTSP ao vivo e on demand. Confira abaixo os formatos de amostra e tipos de rede compatíveis.

Formatos de amostra compatíveis

  • H264 (a descrição de mídia SDP precisa incluir dados SPS/PPS no atributo fmtp para inicialização do decodificador).
  • AAC (com fluxo de bits ADTS).
  • AC3.

Tipos de rede compatíveis

  • RTP por unicast UDP (multicast está indisponível).
  • RTSP intercalado, RTP sobre RTSP usando TCP.

Formatos de amostra

Por padrão, o ExoPlayer usa os decodificadores de plataforma do Android. Portanto, os formatos de amostra compatíveis dependem da plataforma subjacente, e não do ExoPlayer. Consulte Formatos de mídia compatíveis para documentação sobre formatos de amostra compatíveis com dispositivos Android. Dispositivos individuais podem ser compatíveis com outros formatos além dos listados.

Além dos decodificadores de plataforma do Android, o ExoPlayer também pode usar extensões de decodificador de software. Eles precisam ser criados e incluídos manualmente em projetos que querem usá-los. No momento, oferecemos bibliotecas de decodificador de software para AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF e MPEG-H.

Biblioteca FFmpeg

A biblioteca FFmpeg é compatível com a decodificação de vários formatos de amostra de áudio. Você pode escolher quais decodificadores incluir ao criar a biblioteca, conforme documentado no README.md dela. A tabela a seguir fornece um mapeamento do formato de amostra de áudio para o nome do decodificador FFmpeg correspondente.

Formato de amostra Nomes dos 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, DTS-HD dca
TrueHD mlp truehd

Imagens

O ExoPlayer é compatível com os seguintes formatos de imagem. Consulte Bibliotecas de carregamento de imagens para saber como integrar bibliotecas externas que podem oferecer suporte a um conjunto diferente de formatos.

Formato da imagem Compatível Observações
BMP SIM
GIF NÃO Sem suporte para extrator
JPEG SIM
Foto em movimento JPEG SIM Imagens estáticas e vídeos são aceitos
JPEG Ultra HDR SIM Volta para SDR antes do Android 14 ou em telas não HDR
PNG SIM
WebP SIM
HEIF/HEIC SIM
Foto com movimento HEIC SIM
AVIF (valor de referência) SIM Decodificado apenas no Android 14 e versões mais recentes

Formatos de legendas independentes

O ExoPlayer é compatível com arquivos de legendas independentes em vários formatos. Os arquivos de legendas podem ser transferidos por sideload conforme descrito na página de itens de mídia.

Formato do contêiner Compatível Tipo MIME
WebVTT SIM MimeTypes.TEXT_VTT
TTML / SMPTE-TT SIM MimeTypes.APPLICATION_TTML
SubRip SIM MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) SIM MimeTypes.TEXT_SSA

Reprodução de vídeo HDR

O ExoPlayer processa a extração de vídeos em High Dynamic Range (HDR) em vários contêineres, incluindo Dolby Vision em MP4 e HDR10+ em Matroska/WebM. A decodificação e a exibição de conteúdo HDR dependem do suporte da plataforma Android e do dispositivo. Consulte Reprodução de vídeo HDR para saber como verificar os recursos e as limitações de decodificação/exibição de HDR em diferentes versões do Android.

Ao reproduzir um stream HDR que exige suporte para um perfil de codec específico, o seletor MediaCodec padrão do ExoPlayer vai escolher um decodificador compatível com esse perfil (se disponível), mesmo que outro decodificador para o mesmo tipo MIME que não seja compatível com esse perfil apareça mais acima na lista de codecs. Isso pode resultar na seleção de um decodificador de software em casos em que o stream excede as capacidades de um decodificador de hardware para o mesmo tipo MIME.