Os streams nos seguintes formatos de contêiner podem ser reproduzidos diretamente pelo ExoPlayer. Os formatos de amostra de áudio e vídeo também precisam ser compatíveis. Consulte a seção formatos de amostra para mais detalhes.
Formato do contêiner | Compatível | Comentários |
---|---|---|
MP4 | SIM | |
P4A | SIM | |
FMP4 | SIM | |
WebM | SIM | |
Matroska | SIM | |
MP3 | SIM | Alguns streams só podem ser buscados usando uma busca constante de 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 busca constante de taxa de bits** |
FLAC | SIM | Como usar a biblioteca FLAC ou o extrator FLAC na biblioteca ExoPlayer*** |
AMR | SIM | Pesquisável somente usando busca constante de taxa de bits** |
Foto com movimento JPEG | SIM | Somente o conteúdo MP4 é extraído |
* Não há suporte para a busca 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 o uso de 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 está 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 na API de nível 27) ou a
biblioteca FFmpeg com FLAC ativado. O DefaultExtractorsFactory
usará 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 MediaItem
Para reproduzir um stream progressivo, crie um MediaItem
com o URI de mídia e transmita-o
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 uma ProgressiveMediaSource
e
diretamente ao player, em vez de uma 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 as necessidades do app. Consulte a página Personalização para ver exemplos.