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 de áudio). Estes são exemplos de formatos. Um arquivo de vídeo típico vai conter 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 armazena as amostras de mídia e os metadados associados. Esses são formatos de contêiner. Um arquivo de mídia tem um único formato de contêiner, geralmente indicado pela extensão do arquivo. Observe que, para alguns formatos somente de áudio (por exemplo, MP3), os formatos de amostra e de contêiner podem ser iguais.
- Tecnologias de streaming adaptável, como DASH, SmoothStreaming e HLS. Eles não são formatos de mídia, mas ainda é necessário definir o nível de suporte fornecido pelo ExoPlayer.
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 independentes e à reprodução de vídeo HDR.
Streaming adaptável
DASH
O ExoPlayer oferece suporte ao DASH com vários formatos de contêiner. As transmissões de mídia precisam ser
desmuxadas, 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 transmissões demuxadas |
WebM | SIM | Somente transmissões demuxadas |
Matroska | SIM | Somente transmissões demuxadas |
MPEG-TS | NÃO | Nenhum suporte planejado |
Legendas | ||
TTML | SIM | Raw ou incorporado em FMP4 de acordo com a ISO/IEC 14496-30 |
WebVTT | SIM | Raw ou incorporado em FMP4 de acordo com a ISO/IEC 14496-30 |
CEA-608 | SIM | Incorporado ao FMP4 quando indicado usando descritores de acessibilidade SCTE |
CEA-708 | SIM | Incorporado ao FMP4 quando indicado usando descritores de acessibilidade SCTE |
Metadados | ||
Metadados do EMSG | SIM | Incorporado no FMP4 |
Proteção de conteúdo | ||
Widevine | SIM | Esquema "cenc": API 19+; esquema "cbcs": API 25+ |
PlayReady SL2000 | SIM | Android TV, esquema "cenc" |
ClearKey | SIM | API 21+, esquema "cenc" |
Reprodução ao vivo | ||
Reprodução ao vivo normal | SIM | |
Reprodução ao vivo CMAF de 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. As streams de mídia precisam ser demuxadas, ou seja, vídeo, áudio e texto precisam ser definidos em elementos StreamIndex distintos no manifesto 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 transmissões demuxadas |
Legendas | ||
TTML | SIM | Incorporado no 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 ao HLS com 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). Recomendamos que os produtores de conteúdo HLS gerem streams HLS de alta qualidade, conforme descrito aqui.
Recurso | Compatível | Comentários |
---|---|---|
Contêineres | ||
MPEG-TS | SIM | |
FMP4/CMAF | SIM | |
ADTS (AAC) | SIM | |
MP3 | SIM | |
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 | |
Bloquear a recarga da playlist | SIM | |
Bloquear o carregamento de dicas de pré-carregamento | SIM | Exceto para byteranges 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) | NÃO | |
Dados comuns do cliente de mídia (CMCD, na sigla em inglês) | SIM | Guia de integração |
Formatos de contêiner progressivo
As transmissões nos formatos de contêiner a seguir podem ser reproduzidas diretamente pelo ExoPlayer. 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 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 streams só podem ser procurados usando a busca de taxa de bits constante** |
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 | Só é possível procurar usando a busca de taxa de bits constante** |
FLAC | SIM | Como usar a biblioteca FLAC ou o extrator FLAC na biblioteca ExoPlayer*** |
AMR | SIM | Só é possível procurar usando a busca de 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 realize uma busca de maneira eficiente. Se a busca for necessária, sugerimos usar um formato de contêiner mais adequado.
** 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 é ativada por padrão. A maneira mais simples de ativar essa
funcionalidade para todos os extratores compatíveis é 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 (obrigatório a partir do nível 27 da API) ou a
biblioteca FFmpeg com 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 oferece suporte a RTSP ao vivo e on demand. Confira abaixo os formatos e tipos de rede de exemplo compatíveis.
Formatos de amostra aceitos
- H264 (a descrição de mídia do SDP precisa incluir dados SPS/PPS no atributo fmtp para inicialização do decodificador).
- AAC (com bitstream ADTS).
- AC3.
Tipos de rede aceitos
- RTP sobre unicast UDP (não há suporte para multicast).
- RTSP intercalado, RTP sobre RTSP usando TCP.
Exemplos de formatos
Por padrão, o ExoPlayer usa decodificadores de plataforma do Android. Portanto, os formatos de amostra compatíveis dependem da plataforma em vez do ExoPlayer. Consulte Formatos de mídia compatíveis para documentação sobre formatos de amostra aceitos por dispositivos Android. Observe que dispositivos individuais podem oferecer suporte a 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 queiram usá-los. No momento, oferecemos bibliotecas de decodificador de software para AV1, VP9, FLAC, Opus, FFmpeg, MIDI e IAMF.
Biblioteca FFmpeg
A biblioteca FFmpeg oferece suporte à 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 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 | 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 fazer a integração com 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 ao Extractor |
JPEG | SIM | |
Foto em movimento JPEG | SIM | Suporte a imagem estática e vídeo |
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 | Parcialmente | Somente imagens estáticas são aceitas* |
AVIF (linha de base) | SIM | Decodificado apenas no Android 14 e em versões mais recentes |
* A parte de vídeo das fotos em movimento HEIC pode ser obtida com MetadataRetriever e reproduzida como um arquivo independente.
Formatos de legendas independentes
O ExoPlayer oferece suporte a arquivos de legendas independentes em vários formatos. Os arquivos de legenda podem ser transferidos por transferência lateral, 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 mais sobre a verificação de recursos de exibição/decodificação HDR e as limitações do suporte a HDR nas versões do Android.
Ao reproduzir um stream HDR que requer suporte a 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 oferece 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.