Formatos compatíveis

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.