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 um frame de áudio). Estes são formatos de exemplo. Um arquivo de vídeo típico contém mídia em pelo menos dois formatos de amostra: um para vídeo (por exemplo, H.264) e um 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 (por exemplo, MP4), que geralmente é indicado pela extensão de arquivo. Para alguns formatos somente de áudio (por exemplo, MP3), os formatos de amostra e contêiner podem ser iguais.
- Tecnologias de streaming adaptável, como DASH, SmoothStreaming e HLS. Esses não são formatos de mídia, mas ainda é necessário definir qual nível de suporte o ExoPlayer oferece.
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 independente e a reprodução de vídeo HDR.
Streaming adaptável
DASH
O ExoPlayer é compatível com DASH em vários formatos de contêiner. Os fluxos de mídia precisam ser demuxados, 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 streams demuxadas |
| WebM | SIM | Somente streams demuxadas |
| Matroska | SIM | Somente streams demuxadas |
| MPEG-TS | NÃO | Nenhum suporte planejado |
| Legendas / legendas descritivas | ||
| TTML | SIM | Bruto ou incorporado em FMP4 de acordo com ISO/IEC 14496-30 |
| WebVTT | SIM | Bruto ou incorporado em FMP4 de acordo com ISO/IEC 14496-30 |
| CEA-608 | SIM | Incorporado em FMP4 quando sinalizado usando descritores de acessibilidade SCTE |
| CEA-708 | SIM | Incorporado em FMP4 quando sinalizado usando descritores de acessibilidade SCTE |
| Metadados | ||
| Metadados EMSG | SIM | Incorporado em FMP4 |
| Proteção de conteúdo | ||
| Widevine | SIM | Esquema "cenc": API 19 ou mais recente; Esquema "cbcs": API 25 ou mais recente |
| PlayReady SL2000 | SIM | Android TV, somente esquema "cenc" |
| ClearKey | SIM | API 21+, esquema "cenc" apenas |
| 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 cliente e do lado do servidor da IMA | SIM | Guia de inserção de anúncios |
| Reprodução ao vivo | ||
| Reprodução ao vivo normal | SIM | |
| Reprodução ao vivo de CMAF com latência ultrabaixa | SIM | |
| Dados comuns do cliente de mídia (CMCD) | SIM | Guia de integração do CMCD |
SmoothStreaming
O ExoPlayer é compatível com SmoothStreaming no formato de contêiner FMP4. Os fluxos de mídia precisam ser demuxados, 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 streams demuxadas |
| Legenda descritiva | ||
| TTML | SIM | Incorporado em 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) | SIM | Guia de integração |
HLS
O ExoPlayer é compatível com HLS em 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. Incentivamos os produtores de conteúdo HLS a gerar 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 | |
| Legenda descritiva / 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 | |
| Bloqueio da atualização da playlist | SIM | |
| Bloqueio do carregamento de dicas de pré-carregamento | SIM | Exceto intervalos de bytes 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 o
X-ASSET-LIST serão adicionados
depois. |
| Anúncios do lado do cliente e do lado do servidor da IMA | SIM | Guia de inserção de anúncios |
| 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 | SIM | Guia de integração do CMCD |
Formatos de contêiner progressivos
O ExoPlayer pode reproduzir streams nos seguintes 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. Para saber mais sobre 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 fluxos só podem ser pesquisados usando a busca de taxa de bits constante** |
| Ogg | SIM | Contendo Vorbis, Opus e FLAC |
| WAV | SIM | |
| MPEG-TS | SIM | |
| MPEG-PS | SIM | |
| FLV | SIM | Não é possível buscar* |
| ADTS (AAC) | SIM | Só é possível buscar usando taxa de bits constante** |
| FLAC | SIM | Usando a biblioteca FLAC ou o extrator FLAC na biblioteca ExoPlayer*** |
| AMR | SIM | Só é possível buscar usando 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 faça 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 taxa de bits constante. Essa
funcionalidade não é ativada por padrão. A maneira mais simples de ativar essa funcionalidade para todos os extratores que a oferecem é 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 (necessário a partir do nível 27 da API) ou a biblioteca FFmpeg com o 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 é compatível com RTSP ao vivo e on demand. Confira abaixo os formatos de amostra e tipos de rede compatíveis.
Formatos de amostra compatíveis
- H264 (a descrição de mídia SDP precisa incluir dados SPS/PPS no atributo fmtp para inicialização do decodificador).
- AAC (com fluxo de bits ADTS).
- AC3.
Tipos de rede compatíveis
- RTP por unicast UDP (multicast está indisponível).
- RTSP intercalado, RTP sobre RTSP usando TCP.
Formatos de amostra
Por padrão, o ExoPlayer usa os decodificadores de plataforma do Android. Portanto, os formatos de amostra compatíveis dependem da plataforma subjacente, e não do ExoPlayer. Consulte Formatos de mídia compatíveis para documentação sobre formatos de amostra compatíveis com dispositivos Android. Dispositivos individuais podem ser compatíveis com outros 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 querem 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 é compatível com a 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 dela. 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 integrar 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 para extrator |
| JPEG | SIM | |
| Foto em movimento JPEG | SIM | Imagens estáticas e vídeos são aceitos |
| 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 | SIM | |
| AVIF (valor de referência) | SIM | Decodificado apenas no Android 14 e versões mais recentes |
Formatos de legendas independentes
O ExoPlayer é compatível com arquivos de legendas independentes em vários formatos. Os arquivos de legendas 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 |
| 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 como verificar os recursos e as limitações de decodificação/exibição de HDR em diferentes versões do Android.
Ao reproduzir um stream HDR que exige suporte para 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 seja compatível com esse perfil apareça mais acima na lista de codecs. Isso pode resultar
na seleção de um decodificador de software em casos em que o stream excede as
capacidades de um decodificador de hardware para o mesmo tipo MIME.