Media2

Guia do usuário  Exemplo de código (link em inglês)
Compartilhe conteúdos e controles de mídia com outros apps.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
30 de junho de 2021 1.1.3 - 1.2.0-beta01 -

Como declarar dependências

Para adicionar uma dependência a Media2, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

Groovy

dependencies {
    def media2_version = "1.1.3"

    // Interacting with MediaSessions
    implementation "androidx.media2:media2-session:$media2_version"
    // optional - UI widgets for VideoView and MediaControlView
    implementation "androidx.media2:media2-widget:$media2_version"
    // optional - Implementation of a SessionPlayer
    implementation "androidx.media2:media2-player:$media2_version"
}

Kotlin

dependencies {
    val media2_version = "1.1.3"

    // Interacting with MediaSessions
    implementation("androidx.media2:media2-session:$media2_version")
    // optional - UI widgets for VideoView and MediaControlView
    implementation("androidx.media2:media2-widget:$media2_version")
    // optional - Implementation of a SessionPlayer
    implementation("androidx.media2:media2-player:$media2_version")
}

Para ver mais informações sobre dependências, consulte Adicionar dependências de compilação.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas existentes nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.2.0

Versão 1.2.0-beta01

30 de junho de 2021

Lançamento de androidx.media2:media2-*:1.2.0-beta01. A versão 1.2.0-beta01 contém essas confirmações.

Novos recursos

  • Compatibilidade com interoperabilidade de mídia do AndroidX de (prepare|play)From(MediaId|Uri|Search).

Mudanças na API

  • MEDIA_URI_PATH_SET_MEDIA_URI e MEDIA_URI_QUERY_URI foram adicionados a MediaConstants.

Versão 1.2.0-alpha01

21 de abril de 2021

Lançamento de androidx.media2:media2-*:1.2.0-alpha01. A versão 1.2.0-alpha01 contém essas confirmações (link em inglês).

Mudanças na API

  • Adição de compatibilidade para (prepare|play)From(MediaId|Uri|Search) (I13475, b/176949057)

Correções de bugs

  • Correção de um problema de impasse causado por blocos sincronizados desnecessários.
  • Redefinir o player quando não houver itens reproduzíveis
  • Permitir que OnCurrentMediaItemChanged use um item de mídia nulo
  • Fazer notificação atualizada quando o item de mídia atual for mudado
  • Corrigir a interoperabilidade com o controlador compatível logo após a sessão ser criada

Versão 1.1.3

Versão 1.1.3

21 de abril de 2021

Lançamento de androidx.media2:media2-*:1.1.3. A versão 1.1.3 contém essas confirmações.

Correções de bugs

  • Correção de um problema de impasse causado por blocos sincronizados desnecessários.

Versão 1.1.2

Versão 1.1.2

27 de janeiro de 2021

Lançamento de androidx.media2:media2-*:1.1.2. A versão 1.1.2 contém estas confirmações.

Correções de bugs

Versão 1.1.1

Versão 1.1.1

16 de dezembro de 2020

Lançamento de androidx.media2:media2-*:1.1.1. A versão 1.1.1 contém essas confirmações (link em inglês).

Correções de bugs

  • Fazer com que a notificação de mídia seja atualizada quando o item de mídia atual for alterado.

Versão 1.1.0

Versão 1.1.0

2 de dezembro de 2020

Lançamento de androidx.media2:media2-*:1.1.0. A versão 1.1.0 contém estas confirmações.

Principais mudanças desde a versão 1.0.0

  • Adição de mais APIs para gerenciar faixas de mídia.
  • Melhor compatibilidade com a interoperabilidade com a biblioteca de mídia do AndroidX.
    • Adição de MediaSession#setMediaUri.
    • Exposição de MediaSessionCompat.Token via MediaSession#getSessionCompatToken().

Versão 1.1.0-rc01

28 de outubro de 2020

androidx.media2:media2-*:1.1.0-rc01 é lançado. A versão 1.1.0-rc01 contém estas confirmações.

  • Correção de um problema em que MediaController notificava os callbacks enquanto mantinha um bloqueio, levando a possíveis impasses (I76c56).
  • Correção de um problema em que MediaSessionImplBase#isClosed() podia falhar ao chamar getCurrentControllerInfo() em um MediaSessionCompat lançado (aosp/1423291).
  • Correção de um problema em que MediaSession de media2 não definia o ID ativo do item da fila como PlaybackStateCompat (aosp/1421652).
  • Adição da sinalização BIND_INCLUDE_CAPABILITIES durante a vinculação ao serviço, o que permite que aplicativos de mídia headless acessem o local se tiverem a permissão. Isso é útil principalmente para apps Android Auto (aosp/1440731).

Versão 1.1.0-beta01

16 de setembro de 2020

androidx.media2:media2-*:1.1.0-beta01 é lançado. A versão 1.1.0-beta01 contém essas confirmações.

Correções de bugs

  • Redefinição da posição atual quando o item de mídia for modificado.
  • Envio dos metadados e do estado de armazenamento em buffer quando conectado.
  • Correção de falhas ao enviar dados grandes entre uma sessão e um controlador.
  • Adição de <queries> ao manifesto para media e media2 para o Android 11.
  • Correção de NPE para MediaController.getPlaylist().
  • Desativação da barra de progresso de MediaControlView quando o comando de busca não for permitido.
  • Envio de notificação para PlaybackStateCompat quando o item de mídia atual de uma sessão é modificado.
  • Correção da criação de pacote de SessionPlayer.TrackInfo.

Versão 1.1.0-alpha01

24 de junho de 2020

androidx.media2:media2-*:1.1.0-alpha01 é lançado. A versão 1.1.0-alpha01 contém essas confirmações.

Correções de bugs

  • Correção do problema de tempo ao atualizar metadados (I45567 e b/143999611).
  • SessionResult preservará o MediaItem de PlayerResult (I927b0 e b/154885520).
  • Correção de um bug em que MediaController#setVolumeTo() poderia mudar o volume incorreto do fluxo (I76870, b/151204736, links em inglês).

Versão 1.0.3

Versão 1.0.3

19 de fevereiro de 2020

androidx.media2:media2-*:1.0.3 é lançado. A versão 1.0.3 do media2-{common,player,session} contém essas confirmações, e a Versão 1.0.3 do media2-widget contém essas confirmações (links em inglês).

Correções de bugs

  • Correção de uma NullPointerException ao criar MediaController com um callback nulo.
  • Correção de um problema em que onPlaylistChanged() não era chamado depois de MediaPlayer.setMediaItem.

Versão 1.0.2

Versão 1.0.2

5 de fevereiro de 2020

androidx.media2:media2-*:1.0.2 é lançado. A versão 1.0.2 do media2-{common,player,session} contém essas confirmações, e a Versão 1.0.2 do media2-widget contém essas confirmações (links em inglês).

Correções de bugs

  • Correção de uma IndexOutOfBoundsException no MediaPlayer#getSelectedTrack() (aosp/987003).
  • Melhoria no gerenciamento do caso em que o ExoPlayer chama getDuration() e o item de mídia não existe (aosp/987484).
  • Correção de um bug em que o ExoPlayer não gera uma IllegalStateException quando getDuration() é chamado em um estado IDLE (aosp/987246).
  • Proibição de Parcelables personalizados em media2 (aosp/1091056).
  • Correção de um problema que causava a suspensão em close() (aosp/1096455).
  • MediaBrowser: melhoria do gerenciamento de erros em subscribe() com MediaBrowserService (aosp/1158057).
  • Correção de uma falha do MediaController com o Framework MediaSession (aosp/1177663).
  • Ausência de notificações com informações da sessão por callbacks quando a conexão é estabelecida (aosp/1195030 e b/142925848).
  • Correção de um problema em que um SessionResult pode ser enviado inesperadamente mais de uma vez pelo MediaController (aosp/1198634).
  • Correção de um problema em que o MediaController podia enviar comandos não permitidos para o MediaSession. Portanto, o MediaSession agora envia RESULT_ERROR_PERMISSION_DENIED (aosp/1204183).
  • Correção de um problema de inconsistência com MediaControllerView#setPlayer (aosp/987004).

Versão 1.0.1

Versão 1.0.1

9 de outubro de 2019

androidx.media2:media2-*:1.0.1 é lançado. A versão 1.0.1 do androidx.media2:media2-{player, session}:1.0.1 contém essas confirmações, e a Versão 1.0.1 de androidx.media2:media2-widget:1.0.1 contém essas confirmações (links em inglês).

Correções de bugs

  • Correção de uma RuntimeException quando uma subclasse de MediaItem era enviada pelo do processo (aosp/1098971).
  • Correção de um problema em que o MediaPlayer só chamava onCurrentMediaItemChanged() uma vez ao tocar uma playlist.
  • Correção de problema em que o MediaPlayer podia tocar uma playlist com mais de dois itens (aosp/1108440).
  • Correção de um problema em que o player continuava a tocar no SurfaceView, mesmo que estivesse invisível.
  • Correção de um problema de reprodução que ocorria quando uma chamada era feita para setViewType antes de setPlayer.

Versão 1.0.0

5 de setembro de 2019

androidx.media2:media2-*:1.0.0 é lançado. Essas são as confirmações incluídas no media2-{player, session}:1.0.0, e essas são as confirmações incluídas no media2-widget:1.0.0 (links em inglês).

Principais recursos do Media2 1.0.0

Media2 é a última geração das seguintes APIs de mídia: MediaSession, MediaController, MediaBrowser, MediaBrowserService, VideoView e MediaControlView.

  • media2.player.MediaPlayer
    • Na maioria das vezes, as APIs correspondem a android.media.MediaPlayer, e o mecanismo por trás é o ExoPlayer.
    • Foco de áudio integrado e gerenciamento de ruídos.
    • Implementa SessionPlayer.
  • media2.session.MediaSession
    • Fornece controles de permissão refinados.
    • Compatível com layouts personalizados.
    • Fácil de usar com SessionPlayer, como androidx.media2.player.MediaPlayer.
    • Interoperável com MediaControllerCompat.
  • media2.session.MediaSessionService
    • Uma versão leve de MediaLibraryService.
    • Oferece gerenciamento do ciclo de vida do serviço para reprodução em segundo plano.
    • Interoperável com MediaControllerCompat e MediaBrowserServiceCompat.
  • media2.session.MediaLibraryService
    • Compatível com uma melhor paginação para navegar por itens de mídia ou resultados de pesquisa que contêm muitos itens.
    • Interoperável com MediaControllerCompat e MediaBrowserServiceCompat.
  • media2.session.MediaController
    • Pode se conectar a MediaSession, MediaSessionService e MediaLibraryService.
    • Interoperável com MediaSessionCompat e MediaBrowserServiceCompat.
  • media2.session.MediaBrowser
    • Herda MediaController.
    • Pode se conectar a MediaSession, MediaSessionService e MediaLibraryService.
    • Interoperável com MediaSessionCompat e MediaBrowserServiceCompat.
  • media2.widget.VideoView
    • Contém toda a funcionalidade de android.widget.VideoView.
    • Fornece alternância entre TextureView e SurfaceView.
    • Pode trabalhar com MediaSession.
  • media2.widget.MediaControlView
    • Melhor aparência.
    • Contém toda a funcionalidade de android.widget.MediaController.
    • Fornece a seleção de faixas de legenda, a seleção da velocidade de reprodução e o modo de tela inteira.

Versão 1.0.0-rc02

22 de agosto de 2019

O androidx.media2:media2-*:1.0.0-rc02 foi lançado, e as alterações incluídas nessa versão podem ser encontradas aqui. Essa versão inclui androidx.media2:media2-widget:1.0.0-rc02, e as alterações incluídas nessa versão podem ser encontradas aqui.

Novos recursos

  • setPlayer ou setController não podem mais ser chamados pela MediaControlView (MCV) quando a MediaControlView pertence a uma VideoView.

Correções de bugs

  • MediaControlView: os botões "Next" e "Previous" são clicáveis somente quando há itens de mídia seguintes ou anteriores.
  • MediaControlView: correção de uma NullPointerException inconsistente quando onAttachedToWindow() era chamado.
  • O Media2 Widget agora gerencia os metadados do novo item de mídia corretamente quando o item de mídia atual é alterado.

Media2-Widget Versão 1.0.0-beta01

2 de julho de 2019

androidx.media2:media2-widget:1.0.0-beta01 é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui.

Novos recursos

  • Reprodução em segundo plano: em vez de criar o player dentro do VideoView, o VideoView pode usar o SessionPlayer ou o MediaController para que o app passe para o modo de reprodução em segundo plano sem problemas.
  • Remoção da dependência da biblioteca media2-player.
  • onViewTypeChangedListener itens adicionados.

Mudanças na API

  • Mudança da visibilidade de pública para protegida:
    • VideoView.onMeasure(int, int)
    • VideoView.onAttachedToWindow()
    • VideoView.onDetachedFromWindow()
    • MediaControlView.onMeasure(int, int)
  • A função
      foi removida.
    • VideoView.getSessionToken()
    • VideoView.setAudioAttributes(AudioAttributesCompat)
    • VideoView.setMedaItem(MediaItem)
    • MediaControlView.setSessionToken(SessionToken)
  • Adicionado:
    • VideoView.setMediaController(MediaController)
    • VideoView.getMediaControlView()
    • VideoView.setMediaController(MediaController)
    • VideoView.setPlayer(SessionPlayer)
    • VideoView.setOnViewTypeChangedListener()
    • MediaControlView.setPlayer(SessionPlayer)
    • MediaControlView.setMediaController(MediaContoller)

Versão 1.0.0-rc01

18 de junho de 2019

Lançamento de androidx.media2:media2-common:1.0.0-rc01, androidx.media2:media2-player:1.0.0-rc01 e androidx.media2:media2-session:1.0.0-rc01. As confirmações incluídas nessa versão podem ser encontradas aqui.

Mudanças na API

  • As dependências de ListenableFuture foram migradas de volta para a implementação autônoma do Guava.

  • Se você tiver destinos de teste dependentes do artefato Guava completo, poderá encontrar um conflito de resolução de dependência ao usar determinadas versões do Plug-in do Android para Gradle. Se você encontrar um erro Could not resolve all artifacts envolvendo ListenableFuture, poderá solucionar o problema temporariamente adicionando android.dependency.useConstraints=false à configuração de compilação do projeto. No momento, estamos trabalhando em uma correção permanente no Plug-in do Android para Gradle que será lançada no futuro.

Versão 1.0.0-beta02

5 de junho de 2019

Lançamento de androidx.media2:media2-common:1.0.0-beta02, androidx.media2:media2-player:1.0.0-beta02 e androidx.media2:media2-session:1.0.0-beta02. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • A configuração da velocidade de reprodução negativa em androidx.media.player.MediaPlayer retornará RESULT_ERROR_BAD_VALUE.
  • Substituição do Guava ListenableFuture pela implementação do Jetpack (aosp/968828).

Versão 1.0.0-beta01

7 de maio de 2019

Lançamento de androidx.media2:media2-common:1.0.0-beta01, androidx.media2:media2-player:1.0.0-beta01 e androidx.media2:media2-session:1.0.0-beta01. As confirmações incluídas nessa versão podem ser encontradas aqui.

Novos recursos

  • Bibliotecas separadas em três partes: media2-common, media2-player e media2-session.
  • Alteração de IllegalPointerException para NullPointerException para os argumentos nulos marcados como @NonNull.

Mudanças na API

  • Lançamento de MediaController.Builder.
  • Adicionados métodos setter para os campos opcionais de FileMediaItem.Builder.
  • MediaController e MediaBrowser podem enviar dicas de conexão do aplicativo para MediaSession, MediaSessionService ou MediaLibraryService.
  • Renomeação de alguns métodos para seguir as APIs Media2 do Android 10.

Versão 1.0.0-alpha04

17 de dezembro de 2018

Mudanças na API

  • As seguintes classes foram renomeadas:
    • MediaPlayer2MediaPlayer
    • MediaSession2MediaSession
    • MediaController2MediaController
    • MediaSessionService2MediaSessionService
    • MediaLibraryService2MediaLibraryService
    • MediaBrowser2MediaBrowser
    • MediaMetadata2MediaMetadata
    • Rating2Rating
    • SessionToken2SessionToken
    • SessionCommand2SessionCommand
    • SessionCommandGroup2SessionCommandGroup
  • As seguintes classes foram mescladas:
    • DataSourceDesc2 e MediaItem2 foram combinadas em MediaItem.
    • MediaPlaylistAgent e MediaPlayerConnector foram combinadas em SessionPlayer.
  • Adicionadas as seguintes subclasses de Rating: HeartRating, PercentageRating, StarRating e ThumbRating.
  • Media2 agora usa ListenableFuture para métodos assíncronos.