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.