Para casos de uso simples, começar a usar ExoPlayer
consiste em implementar
as seguintes etapas:
- Adicione o ExoPlayer como uma dependência do projeto.
- Crie uma instância
ExoPlayer
. - Conecte o player a uma visualização (para saída de vídeo e entrada do usuário).
- Prepare o player com uma
MediaItem
para jogar. - Solte o player quando terminar.
Essas etapas são descritas em mais detalhes abaixo. Para um exemplo completo, consulte
PlayerActivity
no app de demonstração principal.
Adicionar o ExoPlayer como uma dependência
Adicionar módulos do ExoPlayer
A maneira mais fácil de começar a usar o AndroidX Media3 é adicionando o Gradle.
dependências nas bibliotecas necessárias no arquivo build.gradle
do app
mais tarde neste módulo.
Por exemplo, para depender do ExoPlayer com suporte a reprodução DASH e componentes de interface. é possível adicionar dependências aos módulos desta forma:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.4.1") implementation("androidx.media3:media3-exoplayer-dash:1.4.1") implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer-dash:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"
em que 1.4.1 é sua versão preferida (a versão mais recente pode ser encontrada em consulte as notas da versão). Todos os módulos precisam ter a mesma versão.
O AndroidX Media3 tem módulos de biblioteca que dependem bibliotecas externas para fornecer funcionalidades adicionais. Alguns são disponíveis no repositório Maven, enquanto outros precisam ser criados manualmente. Procure o diretório bibliotecas e consulte os arquivos README individuais para saber mais detalhes.
Mais informações sobre os módulos de biblioteca disponíveis podem ser encontradas na Página Google Maven AndroidX Media.
Ativar a compatibilidade com Java 8
Se esse recurso ainda não estiver ativado, ative a compatibilidade com Java 8 em todos os build.gradle
arquivos que dependem do ExoPlayer, adicionando o seguinte à seção android
:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Ativar multidex
Se a minSdkVersion
do Gradle for 20 ou anterior, você vai precisar
ativar o multidex para
para evitar erros de build.
Criar o player
É possível criar uma instância ExoPlayer
usando ExoPlayer.Builder
, que fornece
uma variedade de opções de personalização. O código a seguir é o exemplo mais simples de
criar uma instância.
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
Observação sobre linhas de execução
As instâncias do ExoPlayer precisam ser acessadas em uma única linha de execução do aplicativo. Para o na grande maioria dos casos, ela deve ser a linha de execução principal do aplicativo. Usar o A linha de execução principal do aplicativo é um requisito ao usar os componentes de interface do ExoPlayer. ou a extensão do IMA.
A linha de execução em que uma instância do ExoPlayer precisa ser acessada pode ser
especificado transmitindo um Looper
na criação do player. Se nenhum Looper
for
especificado, o Looper
da sequência em que o player é criado será
usado, ou se essa linha de execução não tiver um Looper
, o Looper
do
e a linha de execução principal do aplicativo seja usada. Em todos os casos, o Looper
da linha de execução de
que o player deve ser acessado, pode ser consultado usando
Player.getApplicationLooper
.
Para mais informações sobre o modelo de linhas de execução do ExoPlayer, consulte a seção "Modelo de linha de execução" do Javadoc do ExoPlayer (em inglês).
Anexar o player a uma visualização
A biblioteca do ExoPlayer oferece vários componentes de interface pré-criados para mídia.
a reprodução. Isso inclui PlayerView
, que encapsula uma
PlayerControlView
, um SubtitleView
e um Surface
no qual o vídeo
renderizado. Uma PlayerView
pode ser incluída no XML de layout do aplicativo.
Por exemplo, para vincular o jogador à visualização:
Kotlin
// Bind the player to the view. playerView.player = player
Java
// Bind the player to the view. playerView.setPlayer(player);
Você também pode usar PlayerControlView
como um componente independente, que é
útil para casos de uso somente de áudio.
O uso dos componentes de interface pré-criados do ExoPlayer é opcional. Para apps de vídeo
que implementam a própria interface, a SurfaceView
de destino, TextureView
,
SurfaceHolder
ou Surface
podem ser definidos usando o
setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
e
setVideoSurface
, respectivamente. O método addTextOutput
do ExoPlayer pode
ser usada para receber legendas que devem ser renderizadas durante a reprodução.
Preencher a playlist e preparar o player
No ExoPlayer, cada mídia é representada por uma MediaItem
. Para reproduzir um
parte da mídia, você precisa criar um MediaItem
correspondente, adicioná-lo ao
player, preparar o player e chamar play
para iniciar a reprodução:
Kotlin
// Build the media item. val mediaItem = MediaItem.fromUri(videoUri) // Set the media item to be played. player.setMediaItem(mediaItem) // Prepare the player. player.prepare() // Start the playback. player.play()
Java
// Build the media item. MediaItem mediaItem = MediaItem.fromUri(videoUri); // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
O ExoPlayer oferece suporte a playlists diretamente, então é possível preparar o player com vários itens de mídia para serem reproduzidos um após o outro:
Kotlin
// Build the media items. val firstItem = MediaItem.fromUri(firstVideoUri) val secondItem = MediaItem.fromUri(secondVideoUri) // Add the media items to be played. player.addMediaItem(firstItem) player.addMediaItem(secondItem) // Prepare the player. player.prepare() // Start the playback. player.play()
Java
// Build the media items. MediaItem firstItem = MediaItem.fromUri(firstVideoUri); MediaItem secondItem = MediaItem.fromUri(secondVideoUri); // Add the media items to be played. player.addMediaItem(firstItem); player.addMediaItem(secondItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
A playlist pode ser atualizada durante a reprodução sem a necessidade de preparar o de novo. Leia mais sobre como preencher e manipular a lista de reprodução na página de playlists. Leia mais sobre as diferentes opções disponíveis criar itens de mídia, como recorte e anexação de arquivos de legenda, no Página de itens de mídia.
Controlar o player
Assim que o player estiver preparado, a reprodução pode ser controlada chamando métodos no player. Aqui estão alguns dos métodos mais usados:
play
epause
iniciam e pausam a reprodução.seekTo
permite a busca na mídia.hasPrevious
,hasNext
,previous
enext
permitem a navegação pelo lista de reprodução.setRepeatMode
controla se e como a mídia é repetida.setShuffleModeEnabled
controla o embaralhamento de playlists.- O
setPlaybackParameters
ajusta a velocidade do vídeo e o tom do áudio.
Se o jogador estiver vinculado a uma PlayerView
ou PlayerControlView
,
a interação do usuário com esses componentes causará métodos correspondentes
o player que será invocado.
Solte o player
É importante liberar o player quando não for mais necessário para liberar
recursos limitados, como decodificadores de vídeo para uso por outros aplicativos. Isso
pode ser feito chamando ExoPlayer.release
.