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 os 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 / legendas | ||
TTML | SIM | Raw ou incorporado no FMP4 de acordo com a ISO/IEC 14496-30 |
WebVTT | SIM | Raw ou incorporado no FMP4 de acordo com a ISO/IEC 14496-30 |
CEA-608 | SIM | Incorporado no FMP4 quando indicado usando descritores de acessibilidade SCTE. |
CEA-708 | SIM | Incorporado no 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" |
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 servidor e do lado do cliente do IMA | SIM | Guia de inserção de anúncios |
Reprodução ao vivo | ||
Reprodução regular ao vivo | SIM | |
Reprodução ao vivo de CMAF com latência ultrabaixa | SIM | |
Dados comuns do cliente de mídia (CMCD, na sigla em inglês) | SIM | Guia de integração do CMCD |
SmoothStreaming
O ExoPlayer oferece suporte ao SmoothStreaming com o formato de contêiner FMP4. Os streams de mídia precisam ser desmuxados, 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 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 regular ao vivo | 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 saber mais. Recomendamos que os produtores de conteúdo HLS gerem 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 | |
Legendas ocultas / 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 | |
Como bloquear o carregamento de dicas de pré-carregamento | SIM | Exceto para byteranges 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
X-ASSET-LIST serão adicionadas
mais tarde. |
Anúncios do lado do servidor e do lado do cliente do IMA | SIM | Guia de inserção de anúncios |
Reprodução ao vivo | ||
Reprodução regular ao vivo | 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 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 flags 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 da
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 vai usar 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 amostra 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 com suporte
- 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, IAMF e MPEG-H.
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 oferece suporte aos 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 (valor de referência) | SIM | Decodificado apenas no Android 14 e 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ídeo 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 decodificação/exibiçã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.