Ao definir os formatos com suporte no ExoPlayer, é importante observar que "formatos de mídia" são definidos em vários níveis. Do nível mais baixo ao mais alta, elas são:
- 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. Observe que um arquivo de vídeo comum conter mídia em pelo menos dois exemplos de formatos; uma para vídeo (por exemplo, H.264) e uma para áudio (por exemplo, AAC).
- O formato do contêiner que hospeda as amostras de mídia e associadas metadados. Esses são formatos de contêiner. Um arquivo de mídia tem um único contêiner formato (por exemplo, MP4), que é normalmente indicado pela extensão do arquivo. Observação para alguns formatos somente de áudio (por exemplo, MP3), a amostra e os formatos de contêiner podem ser iguais.
- Tecnologias de streaming adaptáveis, como DASH, SmoothStreaming e HLS. Esses não são formatos de mídia como tal. No entanto, ainda é necessário definir quais o nível de suporte que o ExoPlayer oferece.
As seções a seguir definem o suporte do ExoPlayer em cada nível, do mais alto ao mais baixa. As duas últimas seções descrevem o suporte para formatos de legendas independentes. e a reprodução de vídeos em HDR.
Streaming adaptável
DASH
O ExoPlayer oferece suporte ao DASH com vários formatos de contêiner. Os streams de mídia precisam ser
com multiplexação, ou seja, vídeo, áudio e texto precisam ser definidos de maneira
AdaptationSet
no manifesto DASH (o CEA-608 é uma exceção,
descritos na tabela abaixo). Os formatos de amostra de áudio e vídeo contidos devem
tenham suporte (consulte a
exemplos de formatos para mais detalhes).
Recurso | Compatível | Comentários |
---|---|---|
Contêineres | ||
FMP4 | SIM | Somente streams duplicados |
WebM | SIM | Somente streams duplicados |
Matroska | SIM | Somente streams duplicados |
MPEG-TS | NÃO | 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 |
Certificado CEA-608 | SIM | Incorporado no FMP4 quando sinalizado usando descritores de acessibilidade SCTE |
Certificado CEA 708 | SIM | Incorporado no FMP4 quando sinalizado usando descritores de acessibilidade SCTE |
Metadados | ||
Metadados EMSG | SIM | Incorporado ao FMP4 |
Proteção de conteúdo | ||
Widevine | SIM | "cenc" schema: API 19+; "cbcs" esquema: API 25 ou mais recente |
PlayReady SL2000 | SIM | Android TV, "cenc" Somente esquema |
ClearKey | SIM | API 21+, "cenc" Somente esquema |
Reprodução ao vivo | ||
Reprodução ao vivo regular | SIM | |
Reprodução ao vivo do 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. Streams de mídia deve ser desmuxado, ou seja, vídeo, áudio e texto devem ser definidos de forma Elementos StreamIndex no manifesto do SmoothStreaming. O áudio contido e formatos de exemplo de vídeo também devem ser suportados (consulte a exemplos de formatos para mais detalhes).
Recurso | Compatível | Comentários |
---|---|---|
Contêineres | ||
FMP4 | SIM | Somente streams duplicados |
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 regular | 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 com vários formatos de contêiner. O áudio contido e formatos de exemplo de vídeo também devem ser suportados (consulte a exemplos de formatos para mais detalhes). Qa incentivar os produtores de conteúdo HLS a gerar transmissões 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 legendas | ||
Certificado CEA-608 | SIM | |
Certificado 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 | |
Bloqueando a atualização da playlist | SIM | |
Bloqueio do carregamento de dicas de pré-carregamento | SIM | Exceto para intervalos de bytes com comprimentos indefinidos |
Reprodução ao vivo | ||
Reprodução ao vivo regular | 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 progressivos
Os streams nos formatos de contêiner abaixo podem ser reproduzidos 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 exemplo para mais detalhes). Para suporte a formato e contêiner 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 pesquisados usando a busca constante da taxa de bits** |
Ogg | SIM | Contendo 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 a busca constante da taxa de bits** |
FLAC | SIM | Usando a biblioteca FLAC ou o extrator FLAC na biblioteca do ExoPlayer*** |
AMR | SIM | Pesquisável somente usando a busca constante da taxa de bits** |
* 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 apropriado.
** Esses extratores têm sinalizações FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
para
permitindo a busca aproximada usando uma suposição de taxa de bits constante. Isso
não está ativada por padrão. A maneira mais simples de ativar
para todos os extratores com suporte é usar
DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, conforme descrito
aqui.
*** O extrator da biblioteca FLA gera áudio bruto, que pode ser processado
pela biblioteca em todos os níveis de API. As saídas do extrator FLAC da biblioteca ExoPlayer são geradas
frames de áudio FLAC e, portanto, depende de um decodificador FLAC (por exemplo, um MediaCodec
decodificador que lida com FLAC (exigido do nível 27 da API) ou o
biblioteca FFmpeg com FLAC ativado). O DefaultExtractorsFactory
usa 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.
RTSP
O ExoPlayer oferece suporte a RTSP ao vivo e sob demanda. Formatos de amostra e tipos de rede estão listados abaixo.
Formatos de amostra compatíveis
- H264 (a descrição de mídia SDP deve incluir dados SPS/PPS no fmtp atributo para inicialização do decodificador).
- AAC (com bitstream ADTS).
- AC3.
Tipos de rede compatíveis
- RTP sobre unicast UDP (multicast não é compatível).
- RTSP intercalado, RTP sobre RTSP usando TCP.
Formatos de exemplo
Por padrão, o ExoPlayer usa os decodificadores da plataforma do Android. Daí o suporte formatos de amostra dependem da plataforma subjacente em vez do ExoPlayer. Consulte Formatos de mídia compatíveis para documentação sobre exemplos de formatos compatíveis com dispositivos Android. Observe que cada dispositivo pode aceitar outros formatos além dos listados.
Além dos decodificadores da plataforma Android, o ExoPlayer também pode usar decodificadores de software. Eles precisam ser criados manualmente e incluídos projetos que queiram usá-los. No momento, fornecemos software decodificador bibliotecas para AV1 VP9, FLAC, Opus, e FFmpeg.
Biblioteca FFmpeg
A biblioteca FFmpeg é compatível com decodificando vários formatos diferentes de amostras de áudio. É possível escolher quais decodificadores para incluir ao criar a biblioteca, conforme documentado nas README.md da biblioteca. A a tabela a seguir fornece um mapeamento do formato de amostra de áudio para os Nome do decodificador do FFmpeg.
Formato de amostra | Nomes do decodificador |
---|---|
Vorbis | Vorbis |
Opus | Opus |
FLAC | flac |
ALAC | alac |
Lei μ do PCM | pcm_mulaw |
Lei do PCM | pcm_alaw |
MP1, MP2 e MP3 | mp3 |
AMR-NB | Amrnb |
AMR-WB | Amrwb |
AAC | AAC |
CA-3 | ac3 |
E-AC-3 | EC3 |
DTS e 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 integrar-se com bibliotecas externas que podem oferecer suporte para um diferentes formatos.
Formato da imagem | Compatível | Observações |
---|---|---|
BMP | SIM | |
GIF | NÃO | Sem suporte ao extrator |
JPEG | SIM | |
Foto com movimento JPEG | SIM | Compatível com imagens estáticas e vídeos |
JPEG Ultra HDR | SIM | Volta para o SDR antes do Android 14 ou versões mais recentes telas não HDR |
PNG | SIM | |
WebP | SIM | |
HEIF/HEIC | SIM | |
Foto com movimento HEIC | Parcialmente | Compatível apenas com imagens estáticas* |
AVIF (linha de base) | SIM | Decodificados apenas no Android 14 e versões mais recentes |
* A parte de vídeo das fotos com movimento HEIC pode ser obtida com MetadataRetriever (link em inglês) e reproduzido como um arquivo independente.
Formatos de legendas independentes
O ExoPlayer oferece suporte a arquivos de legenda autônomos em vários formatos. 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 lida com a extração de vídeos em High Dynamic Range (HDR) em várias contêineres, incluindo Dolby Vision em MP4 e HDR10+ em Matroska/WebM. Decodificação e a exibição de conteúdo HDR depende do suporte da plataforma Android e dispositivo. Consulte Reprodução de vídeo HDR para saber mais sobre a verificação dos recursos e limitações de decodificação/exibição de HDR Compatibilidade com HDR em todas as versões do Android.
Ao reproduzir uma transmissão em HDR que exige suporte para um perfil de codec específico,
O seletor MediaCodec
padrão do ExoPlayer vai escolher um decodificador com suporte a essa
(se disponível), mesmo que outro decodificador para o mesmo tipo MIME que
não tiver suporte para esse perfil aparecer mais acima na lista de codecs. Isso pode resultar
na seleção de um decodificador de software nos casos em que a transmissão excede
de um decodificador de hardware para o mesmo tipo MIME.