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.
Como usar o MediaItem
Para reproduzir um stream progressivo, crie um MediaItem
com o URI de mídia e transmita
ao player.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)); // Prepare the player. player.prepare();
Como usar ProgressiveMediaSource
Para mais opções de personalização, você pode criar um ProgressiveMediaSource
e
passá-lo diretamente para o jogador em vez de um MediaItem
.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a progressive media source pointing to a stream uri. val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a progressive media source pointing to a stream uri. MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
Como personalizar a reprodução
O ExoPlayer oferece várias maneiras de personalizar a experiência de reprodução de acordo com seu às necessidades do seu app. Consulte a página "Personalização" para ver exemplos.