Formatos com suporte

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

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

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

Streaming adaptável

DASH

O ExoPlayer oferece suporte a DASH com vários formatos de contêiner. Os streams de mídia precisam ser deemuxados, o que significa que vídeo, áudio e texto precisam ser definidos em elementos AdaptationSet distintos no manifesto DASH. O CEA-608 é uma exceção, conforme descrito na tabela abaixo. Os formatos de amostra de áudio e vídeo contidos aqui 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 cancelados
WebM SIM Somente streams cancelados
Matroska SIM Somente streams cancelados
MPEG-TS NO Nenhum suporte planejado
Legendas/legendas
TTML SIM Bruto ou incorporado em FMP4 de acordo com a norma ISO/IEC 14496-30
WebVTT SIM Bruto ou incorporado em FMP4 de acordo com a norma ISO/IEC 14496-30
CEA-608 SIM Incorporada ao FMP4 quando sinalizada com descritores de acessibilidade SCTE
CEA 708 SIM Incorporada ao FMP4 quando sinalizada com descritores de acessibilidade SCTE
Metadados
Metadados EMSG SIM Incorporado ao FMP4
Proteção de conteúdo
Widevine SIM Esquema "cenc": API 19+; esquema "cbcs": API 25+
PlayReady SL2000 SIM Android TV, apenas esquema "cenc"
ClearKey SIM API 21+, apenas esquema "cenc"
Reprodução ao vivo
Reprodução ao vivo normal SIM
Reprodução ao vivo do CMAF com latência ultrabaixa SIM
Dados comuns do cliente de mídia (CMCD, na sigla em inglês) SIM Guia de integração

SmoothStreaming

O ExoPlayer oferece suporte ao SmoothStreaming com o formato de contêiner FMP4. Os streams de mídia precisam ter o multiplexado, o que significa que vídeo, áudio e texto precisam ser definidos em elementos distintos StreamIndex no manifesto do SmoothStreaming. Os formatos de amostra de áudio e vídeo contidos nele 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 cancelados
Legendas/legendas
TTML SIM Incorporado ao 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, na sigla em inglês) SIM Guia de integração

HLS

O ExoPlayer oferece suporte a HLS em vários formatos de contêiner. Os formatos de amostra de áudio e vídeo contidos nele 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 streams HLS de alta qualidade, conforme descrito neste link.

Recurso Compatível Comentários
Contêineres
MPEG-TS SIM
FMP4/CMAF SIM
ADTS (AAC) SIM
MP3 SIM
Legendas/legendas
CEA-608 SIM
CEA 708 SIM
WebVTT SIM
Metadados
ID3 SIM
SCTE-35 NO
Proteção de conteúdo
AES-128 SIM
Amostra do AES-128 NO
Widevine SIM API 19+ ("esquema" cenc) e 25+ ("esquema" cbcs)
PlayReady SL2000 SIM Somente no Android TV
Controle do servidor
Atualizações da Delta SIM
Bloqueando a atualização da playlist SIM
Bloqueando o carregamento de dicas de pré-carregamento SIM Exceto para intervalos de bytes com comprimentos indefinidos
Reprodução ao vivo
Reprodução ao vivo normal SIM
HLS de baixa latência (Apple) SIM
HLS de baixa latência (Comunidade) NO
Dados comuns do cliente de mídia (CMCD, na sigla em inglês) SIM Guia de integração

Formatos de contêiner progressivos

Os streams nos seguintes formatos de contêiner podem ser reproduzidos diretamente pelo ExoPlayer. Os formatos de amostra de áudio e vídeo também precisam ser compatíveis. Consulte a seção formatos de amostra para mais detalhes.

Formato do contêiner Compatível Comentários
MP4 SIM
M4A SIM
FMP4 SIM
WebM SIM
Matroska SIM
MP3 SIM Alguns streams só podem ser pesquisados usando uma busca constante de taxa de bits**
Ogg SIM Contém Vorbis, Opus e FLAC
WAV SIM
MPEG-TS SIM
MPEG-PS SIM
FLV SIM Não pesquisável*
ADTS (AAC) SIM Pesquisável somente usando uma busca constante de taxa de bits**
FLAC SIM Como usar a biblioteca FLAC ou o extrator FLAC na biblioteca ExoPlayer***
RM SIM Pesquisável somente usando uma busca constante de taxa de bits**
Foto com movimento JPEG SIM Apenas o conteúdo MP4 é extraído

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

** Esses extratores têm sinalizações FLAG_ENABLE_CONSTANT_BITRATE_SEEKING para ativar a busca aproximada usando uma suposição de taxa de bits constante. Essa funcionalidade não está ativada por padrão. A maneira mais simples de ativar essa funcionalidade para todos os extratores com suporte é 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 de FLAC da biblioteca ExoPlayer gera frames de áudio FLAC e, portanto, depende de um decodificador FLAC (por exemplo, um decodificador MediaCodec que lida com FLAC (obrigatório do nível 27 da API) ou a biblioteca FFmpeg com esse recurso ativado. O DefaultExtractorsFactory usará o extrator de extensão se o aplicativo tiver sido criado com a biblioteca FLAC. Caso contrário, ele usará o extrator da biblioteca ExoPlayer (link em inglês).

RTSP

O ExoPlayer oferece suporte a RTSP ao vivo e sob demanda. Confira abaixo os formatos de amostra e os tipos de rede compatíveis.

Formatos de amostra compatíveis

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

Tipos de rede compatíveis

  • RTP sobre unicast UDP (o multicast não é compatível).
  • RTSP intercalado, RTP sobre RTSP usando TCP.

Formatos de amostra

Por padrão, o ExoPlayer usa os decodificadores da plataforma do Android. Os formatos de exemplo com suporte dependem da plataforma, e não do ExoPlayer. Consulte Formatos de mídia compatíveis para ver a documentação sobre exemplos de formatos compatíveis com dispositivos Android. Dispositivos individuais podem oferecer suporte a outros formatos além dos listados.

Além dos decodificadores da plataforma do Android, o ExoPlayer também pode usar extensões de decodificador de software. Elas precisam ser criadas manualmente e incluídas nos projetos que pretendem usá-las. No momento, fornecemos bibliotecas de decodificadores de software para AV1, VP9, FLAC, Opus e FFmpeg.

Biblioteca do FFmpeg

A biblioteca FFmpeg oferece suporte para a decodificação de vários formatos diferentes de amostras de áudio. Você pode escolher quais decodificadores incluir ao criar a biblioteca, conforme documentado no README.md da biblioteca. 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 álaco
Lei μ-le do PCM "pcm_mulaw"
Lei A do PCM Alaw
MP1, MP2 e MP3 mp3
AMR-NB Amrnb
AMR-WB amrwb
AAC AC
Ac-3 AC3
E-AC 3 eac3
DTS e DTS-HD dca
TrueHD mlp truehd

Formatos de legenda autônomos

O ExoPlayer é compatível com arquivos de legenda independentes em vários formatos. Os arquivos de legenda 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
Subestação Alpha (SSA/ASS) SIM MimeTypes.TEXT_SSA

Reprodução de vídeo HDR

O ExoPlayer processa a extração de vídeo de High Dynamic Range (HDR) em vários contêineres, incluindo Dolby Vision em MP4 e HDR10+ em Matroska/WebM. Decodificar e exibir conteúdo HDR depende do suporte da plataforma e do dispositivo Android. Consulte Reprodução de vídeo HDR para saber mais sobre a verificação dos recursos de decodificação/exibição HDR e as limitações do suporte a HDR em todas as versões do Android.

Ao reproduzir uma transmissão HDR que exige suporte a um perfil de codec específico, o seletor padrão MediaCodec do ExoPlayer escolhe um decodificador que oferece suporte a esse perfil (se disponível), mesmo que outro decodificador para o mesmo tipo MIME que não ofereça suporte a esse perfil apareça mais acima na lista de codecs. Isso pode resultar na seleção de um decodificador de software nos casos em que o stream excede os recursos de um decodificador de hardware para o mesmo tipo MIME.