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 o 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.
Usar MediaItem
Para reproduzir um stream progressivo, crie um MediaItem com o URI da mídia e transmita
para o 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, crie um ProgressiveMediaSource e transmita diretamente para o player 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();
Personalizar a reprodução
O ExoPlayer oferece várias maneiras de personalizar a experiência de reprodução de acordo com as necessidades do seu app. Consulte a página de personalização para ver exemplos.