Formatos compatíveis

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.