Media3
Atualização mais recente | Versão estável | Candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
16 de fevereiro de 2023 | - | 1.0.0-rc01 | - | - |
Declarar dependências
Para adicionar uma dependência da Media3, 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 media3_version = "1.0.0-rc01" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.0.0-rc01" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
Para ver mais informações sobre dependências, consulte Adicionar dependências de build.
Feedback
Seu feedback ajuda a melhorar o Jetpack. Você pode usar o Issue Tracker da Media3 (link em inglês) para ver respostas a perguntas, problemas conhecidos e solicitações de recursos e relatar novos problemas.
Versão 1.0.0
Versão 1.0.0-rc01
16 de fevereiro de 2023
Lançamento de androidx.media3:media3-*:1.0.0-rc01
.
A versão 1.1.0-rc01 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.3.
- Biblioteca principal:
- Ajustar a lógica de ordem do decodificador do renderizador para manter as
preferências do
MediaCodecSelector
, mesmo se um decodificador informar que não consegue reproduzir a mídia de maneira eficiente. Por exemplo, com o seletor padrão, o decodificador de hardware com suporte apenas funcional terá preferência ao decodificador de software que tem suporte total para o formato (10604, link em inglês). - Foi adicionado o
ExoPlayer.Builder.setPlaybackLooper
, que define uma linha de execução de reprodução existente para uma nova instância do ExoPlayer. - Isso permite que os auxiliares do gerenciador de download sejam apagados (10776, link em inglês).
- Foi adicionado um parâmetro ao
BasePlayer.seekTo
para indicar o comando usado para a busca. - O tema é usado ao carregar drawables no nível 21 ou mais recente da API (220, link em inglês).
ConcatenatingMediaSource2
foi adicionado, o que permite combinar vários itens de mídia em uma única janela (247, link em inglês).
- Ajustar a lógica de ordem do decodificador do renderizador para manter as
preferências do
- Extratores:
- Uma
ParserException
é gerada em vez deNullPointerException
se a tabela de amostras (stbl) estiver sem a descrição necessária (stsd) ao analisar os átomos da lixeira. - Amostras são puladas corretamente ao buscar um frame de sincronização em fMP4 diretamente (10941).
- Uma
- Áudio:
- Use a taxa de bits do formato de áudio compactado para calcular o tamanho mínimo do buffer
para
AudioTrack
em reproduções diretas (passagem).
- Use a taxa de bits do formato de áudio compactado para calcular o tamanho mínimo do buffer
para
- Texto:
- O
TextRenderer
, que transmitia um índice inválido (negativo) paraSubtitle.getEventTime
se um arquivo de legenda não contivesse dicas, foi corrigido. - SubRip: foi adicionado suporte para arquivos UTF-16 que começarem com uma marca de ordem de byte.
- O
- Metadados:
- Análise de diversos valores separados por nulo de frames ID3, conforme permitido pelo ID3 v2.4.
MediaMetadata.mediaType
foi adicionado para indicar o tipo de conteúdo ou de pasta descrito pelos metadados.MediaMetadata.folderType
foi substituído porMediaMetadata.isBrowsable
. O tipo de pasta será descontinuado na próxima versão.
- DASH:
- Foi adicionada uma análise completa para conjuntos de adaptação de imagens, incluindo contagens de blocos (3752, link em inglês).
- Interface:
- O
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
descontinuado foi corrigido para garantir que as mudanças de visibilidade sejam transmitidas ao listener registrado (229, link em inglês). - Correção da ordem dos controles do player central em
PlayerView
ao usar um layout da direita para a esquerda (RTL, na sigla em inglês) (227, link em inglês).
- O
- Sessão:
- O abstrato
SimpleBasePlayer
foi adicionado para ajudar a implementar a interfacePlayer
para players personalizados. - O método auxiliar
SessionToken
foi adicionado para converter o token de sessão da plataforma em Media3 (171, link em inglês). - Uso de
onMediaMetadataChanged
para acionar atualizações da sessão de mídia da plataforma (219, link em inglês). - A sessão de mídia foi adicionada como argumento de
getMediaButtons()
doDefaultMediaNotificationProvider
e usa listas imutáveis para maior clareza (216, link em inglês). - O listener de callback
onSetMediaItems
foi adicionado para fornecer meios de modificar/definir a listaMediaItem
, iniciando o índice e a posição por sessão antes de definir no Player (156, link em inglês). - A detecção de toque duplo é evitada para eventos do botão de mídia que não são de Bluetooth (233, link em inglês).
- Agora, a
QueueTimeline
é mais robusta em caso de um estado de sessão legado sombreado (241, link em inglês).
- O abstrato
- Metadados:
- Análise de diversos valores separados por nulo de frames ID3, conforme permitido pelo ID3 v2.4.
MediaMetadata.mediaType
foi adicionado para indicar o tipo de conteúdo ou de pasta descrito pelos metadados.MediaMetadata.folderType
foi substituído porMediaMetadata.isBrowsable
. O tipo de pasta será descontinuado na próxima versão.
- Extensão do Google Cast:
- Atualização do SDK do Cast para a versão 21.2.0.
- Extensão de IMA:
- O listener do player foi removido do
ImaServerSideAdInsertionMediaSource
na linha de execução do app para evitar problemas. - Foi adicionada uma propriedade
focusSkipButtonWhenAvailable
aoImaServerSideAdInsertionMediaSource.AdsLoader.Builder
para solicitar o foco no botão "Pular" em dispositivos de TV e defini-lo como "true" por padrão. - Foi adicionado um método
focusSkipButton()
aoImaServerSideAdInsertionMediaSource.AdsLoader
para solicitar de maneira programática o foco no botão "Pular". - O SDK do IMA foi movido para a versão 3.29.0.
- O listener do player foi removido do
- App de demonstração:
- Agora é solicitada uma permissão para notificação de download durante a execução (10884, link em inglês).
Versão 1.0.0-beta03
22 de novembro de 2022
Lançamento de androidx.media3:media3-*:1.0.0-beta03
.
A versão 1.0.0-beta03 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.2.
- Biblioteca principal:
- O
ExoPlayer.isTunnelingEnabled
foi adicionado para verificar se o encapsulamento está ativado para as faixas selecionadas no momento (#2518). - O
WrappingMediaSource
foi adicionado para simplificar o encapsulamento de um únicoMediaSource
(#7279). - Descarte do buffer de retorno antes que a reprodução travasse devido à falta de memória.
- Quando o descarregamento estiver ativado, o bloco de rastreamento "doSomeWork" será fechado.
- Correção do problema de rastreamento de sessão com buscas rápidas no
PlaybackStatsListener
(#180). - O callback
onMediaItemTransition
ausente é enviado ao chamarseekToNext
ouseekToPrevious
em uma playlist de item único (#10667). - Novo
Player.getSurfaceSize
, que retorna o tamanho da superfície em que o vídeo é renderizado. - O bug em que a remoção de listeners durante a liberação do player poderia causar uma
IllegalStateException
(#10758) foi corrigido.
- O
- Build:
- O
compileSdkVersion
mínimo foi aplicado para evitar erros de compilação (#10684). - Evite publicar o bloco quando estiver incluído em outro build do Gradle.
- O
- Seleção de faixas:
- Uso de outras faixas no lugar de Dolby Vision caso não haja suporte para a exibição (#8944).
- Downloads:
- Correção de um possível loop infinito em
ProgressiveDownloader
causado por download e reprodução simultâneos com o mesmoPriorityTaskManager
(#10570). - A notificação de download aparecerá imediatamente (#183).
- A remoções de download paralelas foram limitadas a 1 para evitar a criação excessiva de linhas de execução (#10458).
- Correção de um possível loop infinito em
- Vídeo:
- Caso não haja suporte para a tela, um decodificador alternativo para o Dolby Vision será utilizado (#9794).
- Áudio:
SingleThreadExecutor
será usado para liberar instâncias deAudioTrack
e evitar erros de OutOfMemory ao liberar vários reprodutores ao mesmo tempo (#10057).- Novo
AudioOffloadListener.onExperimentalOffloadedPlayback
para o estado de descarga do AudioTrack (#134). - O
AudioTrackBufferSizeProvider
foi transformado em uma interface pública. - Novo
ExoPlayer.setPreferredAudioDevice
para definir o dispositivo de saída de áudio preferencial (#135). - O
androidx.media3.exoplayer.audio.AudioProcessor
foi renomeado comoandroidx.media3.common.audio.AudioProcessor
. - O áudio dos canais 8 e 12 foi mapeado para as máscaras de canal 7.1 e 7.1.4, respectivamente, em todas as versões do Android (#10701).
- Metadados:
- Agora,
MetadataRenderer
pode ser configurado para renderizar metadados assim que eles estiverem disponíveis. Foi criada uma instância comMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
para especificar se o renderizador vai gerar metadados de saída antecipadamente ou em sincronia com a posição do reprodutor.
- Agora,
- DRM:
- Resolução de um bug na implementação da ClearKey no Android 13, que retorna um URL de licença não vazio, mas inválido.
- Correção do erro
setMediaDrmSession failed: session not opened
ao alternar entre esquemas DRM em uma playlist, como mudar de Widevine para ClearKey.
- Texto:
- CEA-608: garante que os comandos de alternância do serviço no campo 2 sejam processados corretamente (#10666).
- DASH:
- Análise de
EventStream.presentationTimeOffset
dos manifestos (#10460).
- Análise de
- Interface:
- Uso de substituições atuais do reprodutor como predefinição em
TrackSelectionDialogBuilder
(#10429).
- Uso de substituições atuais do reprodutor como predefinição em
- Sessão:
- Os comandos serão sempre executados na ordem correta, mesmo se alguns precisarem de resolução assíncrona (#85).
DefaultMediaNotificationProvider.Builder
foi adicionado para criar instâncias deDefaultMediaNotificationProvider
. O builder pode configurar o ID de notificação, o ID do canal de notificação e o nome do canal de notificação usados pelo provedor. Além disso, foi incluído o novo métodoDefaultMediaNotificationProvider.setSmallIcon(int)
para definir o ícone pequeno de notificações (#104).- Comandos enviados antes de
MediaController.release()
não são descartados (#99). SimpleBitmapLoader
pode carregar bitmaps de URIsfile://
(#108).- A declaração que impede que
MediaController
busque um anúncio em um período foi corrigida (#122). - Quando a reprodução termina, o
MediaSessionService
é interrompido em primeiro plano e uma notificação é mostrada para reiniciar a reprodução do último item de mídia reproduzido (#112). - Serviços em primeiro plano não serão iniciados com uma intent pendente para pausa (#167).
- O "selo" associado à notificação criada por
DefaultNotificationProvider
foi ocultado nas APIs 26 e 27. O selo é oculto automaticamente na API 28 e mais recentes (#131). - Correção do bug em que uma segunda conexão do binder de uma MediaSession legada para uma MediaController Media3 causava IllegalStateExceptions (#49).
- RTSP:
- IMA:
- Inclusão de tempo limite para carregar informações do anúncio para lidar com casos em que o SDK do IMA travava ao carregar um anúncio (#10510).
- Anúncios intermediários não são mais pulados ao buscar o final do conteúdo (#10685).
- A duração da janela de transmissões ao vivo foi calculada corretamente com anúncios inseridos do lado do servidor, como DAI do IMA (#10764).
- Extensão FFmpeg:
- Novas flags necessárias foram adicionadas para vincular as bibliotecas do FFmpeg ao NDK 23.1.7779620 e versões mais recentes (#9933).
- Extensão AV1:
- A versão do CMake foi atualizada para evitar incompatibilidades com as versões mais recentes do Android Studio (#9933).
- Extensão do Google Cast:
- Implementação de
getDeviceInfo()
para poder identificarCastPlayer
ao controlar a reprodução com umMediaController
(#142).
- Implementação de
- Transformador:
- Novo timer de watchdog do multiplexador para detectar quando a geração de uma amostra de saída é muito lenta.
- Símbolos descontinuados foram removidos:
- O recurso
Transformer.Builder.setOutputMimeType(String)
foi removido. O tipo MIME sempre será MP4 quando o multiplexador padrão for usado.
- O recurso
Versão 1.0.0-beta02
21 de julho de 2022
Lançamento de androidx.media3:media3-*:1.0.0-beta02
.
A versão 1.0.0-beta02 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.1.
- Biblioteca principal:
- Garanta que mudar a
ShuffleOrder
comExoPlayer.setShuffleOrder
resulta em uma chamada paraPlayer.Listener#onTimelineChanged
comreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - Para mídias progressivas, inclua apenas faixas selecionadas na posição em buffer (#10361).
- Agora há um logger personalizado para toda a saída de registro do ExoPlayer (#9752).
- Correção da implementação de
setDataSourceFactory
emDefaultMediaSourceFactory
, que não funcionava em alguns casos (#116).
- Garanta que mudar a
- Extratores:
- DASH:
- Análise do URL da licença da ClearKey nos manifestos (#10246).
- Interface:
- Confirme se o TalkBack anuncia a opção de velocidade atualmente ativa no menu dos controles de mídia (#10298).
- RTSP:
- Adição do processamento de pacotes fragmentados VP8 (#110).
- Extensão do Leanback:
- Detecte mudanças no
playWhenReady
emLeanbackAdapter
(10420).
- Detecte mudanças no
- Transmitir:
Versão 1.0.0-beta01
16 de junho de 2022
androidx.media3:media3-*:1.0.0-beta01
é lançado.
A versão 1.0.0-beta01 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.0 (link em inglês).
- Biblioteca principal:
- Suporte adicionado ao diagnóstico da plataforma Android pelo
MediaMetricsManager
. O ExoPlayer vai encaminhar os eventos de reprodução e os dados de desempenho para a plataforma, o que ajuda a fornecer informações de desempenho e depuração do sistema no dispositivo. Esses dados também poderão ser coletados pelo Google se o compartilhamento de dados de uso e diagnóstico for ativado pelo usuário do dispositivo. Os apps podem desativar a contribuição de diagnósticos da plataforma para o ExoPlayer comExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Correção do bug em que as faixas eram redefinidas com muita frequência ao usar
MergingMediaSource
, por exemplo, ao carregar legendas e mudar a legenda intermediária selecionada (#10248). - O tipo de rede 5G-NSA nas APIs 29 e 30 não são mais detectados. Essas reproduções vão supor que é uma rede 4G.
null
eMediaSource.Factory.setDrmSessionManagerProvider
foram renomeados comoMediaSource.Factory.setLoadErrorHandlingPolicy
. As instâncias deDefaultDrmSessionManagerProvider
eDefaultLoadErrorHandlingPolicy
podem ser explicitamente transmitidas, se necessário.MediaItem.RequestMetadata
foi adicionado para representar os metadados necessários para reproduzir a mídia quandoLocalConfiguration
não for conhecido.MediaMetadata.mediaUrl
também foi removido, porque agora ele está incluído emRequestMetadata
.- Adicionamos
Player.Command.COMMAND_SET_MEDIA_ITEM
para que os jogadores possam permitir a configuração de um único item.
- Suporte adicionado ao diagnóstico da plataforma Android pelo
- Seleção de faixas:
- A classe
TrackSelectionOverrides
foi nivelada emTrackSelectionParameters
, eTrackSelectionOverride
foi promovida para uma classe de nível superior. TracksInfo
foi renomeado comoTracks
, eTracksInfo.TrackGroupInfo
foi renomeado comoTracks.Group
.Player.getCurrentTracksInfo
ePlayer.Listener.onTracksInfoChanged
também foram renomeados comoPlayer.getCurrentTracks
ePlayer.Listener.onTracksChanged
. Isso inclui o "cancelamento da descontinuação" do nome do métodoPlayer.Listener.onTracksChanged
, mas com diferentes tipos de parâmetro.DefaultTrackSelector.buildUponParameters
eDefaultTrackSelector.Parameters.buildUpon
foram alterados para retornarDefaultTrackSelector.Parameters.Builder
em vez doDefaultTrackSelector.ParametersBuilder
descontinuado.- Adicionado
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
, que é ativado por padrão. Quando ativado, oDefaultTrackSelector
prefere faixas de áudio cuja contagem de canais não exceda aos recursos de saída do dispositivo. Em dispositivos portáteis, oDefaultTrackSelector
tem preferência pelo formato estéreo/mono em vez de vários formatos de áudio multicanal, a menos que o formato multicanal possa ser espacializado (Android 12L+) ou o áudio está em um formato de som surround Dolby. Além disso, em dispositivos com suporte à espacialização de áudio, oDefaultTrackSelector
monitora as mudanças nas propriedades Spatializer e aciona uma nova seleção de faixas. Dispositivos com um Modo de IU detelevision
não têm essas restrições, e o formato com a maior contagem de canais vai ter preferência. Para ativar esse recurso, a instânciaDefaultTrackSelector
precisa ser criada com umContext
.
- A classe
- Vídeo:
DummySurface
foi renomeado comoPlaceholderSurface
.- Adicionado suporte a AV1 ao
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- Áudio:
- Use o decodificador de áudio LG AC3 anunciando o tipo MIME não padrão.
- Tipo de retorno de
AudioAttributes.getAudioAttributesV21()
alterado deandroid.media.AudioAttributes
para uma nova classe wrapperAudioAttributesV21
. Assim, é possível evitar uma verificação lenta da ART na API anterior a 21. - Consulte a plataforma (API 29 ou mais recente) ou suponha a contagem de canais de codificação para passagem de áudio quando o formato da contagem de canais de áudio não estiver configurado, o que ocorre com a preparação sem separações em blocos do HLS (10204).
- Configure a
AudioTrack
com a máscara de canalAudioFormat.CHANNEL_OUT_7POINT1POINT4
se o decodificador produzir áudio PCM de 12 canais (#10322).
- DRM
- Garanta que a sessão de DRM sempre seja atualizada corretamente ao pesquisar imediatamente após uma mudança de formato (10274).
- Texto:
Player.getCurrentCues()
foi alterado para retornarCueGroup
em vez deList<Cue>
.- SSA: adicionado suporte à configuração de estilo
OutlineColour
quandoBorderStyle == 3
, ou seja, aOutlineColour
define o plano de fundo do sinal (#8435). - CEA-708: analisa dados em vários blocos de serviços e ignora os blocos não associados ao número de serviço selecionado.
- O
RawCcExtractor
foi removido. Ele era usado apenas para processar um formato de legenda interno do Google.
- Extratores:
- Interface:
- Corrigida a entrega de eventos para os
OnClickListener
s definidos emPlayerView
casouseController=false
(#9605). Também foi corrigida a entrega de eventos aoOnLongClickListener
para todas as configurações de visualização. - Corrigido tratamento incorreto de uma sequência de eventos de toque que saem dos limites da
PlayerView
antes daACTION_UP
como um clique (#9861). - Corrigido problema de acessibilidade da
PlayerView
em que o toque podia alternar a reprodução em vez de ocultar os controles (#8627). TrackSelectionView
eTrackSelectionDialogBuilder
foram reescritos para trabalhar com a interfacePlayer
em vez deExoPlayer
. Isso permite que as visualizações sejam usadas com outras implementações doPlayer
e remove a dependência do módulo da IU para o módulo ExoPlayer. Essa é uma alteração interruptiva.- Não mostre faixas de texto forçadas no seletor de faixas da
PlayerView
e mantenha uma faixa de texto forçada adequada selecionada, se a opção "None" estiver selecionada (#9432).
- Corrigida a entrega de eventos para os
- DASH:
- Analisada contagem de canais dos elementos de
AudioChannelConfiguration
do DTS. Isso reativa a passagem de áudio para fluxos do DTS (#10159). - A transmissão de
null
paraDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
foi desativada. As instâncias deDefaultCompositeSequenceableLoaderFactory
podem ser transmitidas explicitamente, se necessário.
- Analisada contagem de canais dos elementos de
- HLS:
- A preparação com separações em blocos é substituída se o atributo CODECS da playlist não tem o codec de áudio (#10065).
- A transmissão de
null
paraHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
eHlsMediaSource.Factory.setPlaylistTrackerFactory
foi desativada. Instâncias deDefaultCompositeSequenceableLoaderFactory
eDefaultHlsPlaylistParserFactory
ou uma referência aDefaultHlsPlaylistTracker.FACTORY
podem ser transmitidas explicitamente, se necessário.
- Smooth Streaming:
- A transmissão de
null
paraSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
foi desativada. As instâncias deDefaultCompositeSequenceableLoaderFactory
podem ser transmitidas explicitamente, se necessário.
- A transmissão de
- RTSP:
- Adição do leitor RTP para H263 (#63).
- Adicionado leitor de RTP para MPEG4 (#35).
- Adicionado leitor de RTP para HEVC (#36).
- Adicionado leitor de RTP para AMR. Atualmente, há suporte apenas para os fluxos AMR de canal mono e não intercalados. Não há suporte para o payload de RTP do composto AMR (#46).
- Adicionado leitor de RTP para VP8 (#47).
- Adicionado leitor de RTP para WAV (#56).
- Correção do cabeçalho de autorização básico do RTSP (#9544).
- Os campos SDP obrigatórios não são mais verificados, porque o ExoPlayer não precisa deles (#10049).
- Geradas exceções verificadas ao analisar o tempo do RTSP (#10165).
- Adicionado leitor de RTP para VP9 (#47).
- Adicionado do leitor de RTP para OPUS (#53).
- Origens de dados:
DummyDataSource
foi renomeado comoPlaceholderDataSource
.- Foi criada uma solução alternativa de processamento para a interrupção OkHttp.
- Sessão:
MediaSession.MediaItemFiller
foi substituído porMediaSession.Callback.onAddMediaItems
para permitir a resolução assíncrona de solicitações.- Suporte aos métodos
setMediaItems(s)
quando oMediaController
se conecta a uma sessão de mídia legada. MediaController.setMediaUri
eMediaSession.Callback.onSetMediaUri
foram removidos. A mesma funcionalidade pode ser encontrada emMediaController.setMediaItem
eMediaSession.Callback.onAddMediaItems
.- Encaminhamento de chamadas do
MediaController
legadas para reproduzir mídia paraMediaSession.Callback.onAddMediaItems
em vez deonSetMediaUri
. MediaNotification.Provider
eDefaultMediaNotificationProvider
foram adicionados para fornecer personalização das notificações.BitmapLoader
eSimpleBitmapLoader
foram adicionados para fazer o download das imagens de arte.- Adicionamos
MediaSession.setCustomLayout()
para oferecer compatibilidade com versões anteriores da sessão legada. MediaSession.setSessionExtras()
foi adicionado para fornecer paridade de recursos com a sessão legada.MediaSession.MediaSessionCallback
foi renomeado comoMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
comoMediaLibrarySession.Callback
, eMediaSession.Builder.setSessionCallback
comosetCallback
.- Correção do NPE em
MediaControllerImplLegacy
(#59). - Atualizadas informações de posição da sessão ao realizar mudanças na linha do tempo (#51).
- NPE foi corrigido em
MediaControllerImplBase
após o lançamento do controlador (#74).
- Reprodução de anúncios / IMA:
- A taxa de pesquisa de anúncio foi reduzida de cada 100 ms para cada 200 ms, de acordo com as recomendações do Media Rating Council (MRC).
- Extensão FFmpeg:
- Atualizada versão do CMake para
3.21.0+
para evitar um bug no CMake que causava falha na sincronização do Gradle do Android Studio (#9933).
- Atualizada versão do CMake para
- Símbolos descontinuados foram removidos:
- Remoção de
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. UsePlayer.Listener.onTracksChanged(Tracks)
. - REmoção de
Player.getCurrentTrackGroups
ePlayer.getCurrentTrackSelections
. UsePlayer.getCurrentTracks
. Também é possível continuar usandoExoPlayer.getCurrentTrackGroups
eExoPlayer.getCurrentTrackSelections
, embora esses métodos permaneçam descontinuados. - As constantes
DownloadHelper
,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
eDEFAULT_TRACK_SELECTOR_PARAMETERS
foram removidas. UsegetDefaultTrackSelectorParameters(Context)
quando possível. Caso contrário, useDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Construtor
DefaultTrackSelector(ExoTrackSelection.Factory)
foi removido. UseDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. Transformer.Builder.setContext
foi removido. OContext
precisa ser transmitido para o construtorTransformer.Builder
.
- Remoção de
Versão 1.0.0-alpha03
14 de março de 2022
Lançamento de androidx.media3:media3-*:1.0.0-alpha03
.
A versão 1.0.0-alpha03 contém estas confirmações.
Ela corresponde à versão 2.17.1 do ExoPlayer (link em inglês).
- Áudio:
- Os recursos de áudio de verificação de erro para Dolby Atmos (E-AC3-JOC) no HLS foram corrigidos.
- Extratores:
- FMP4: o problema em que os metadados de exemplo do emsg podem ser emitidos na ordem errada para streams contendo átomos emsg v0 e v1 foi corrigido (#9996, link em inglês).
- Texto:
- A interação de
SingleSampleMediaSource.Factory.setTrackId
eMediaItem.SubtitleConfiguration.Builder.setId
foi corrigida para priorizar o campoSubtitleConfiguration
e voltar ao valor daFactory
se o campo não estiver definido (#10016, link em inglês).
- A interação de
- Reprodução de anúncio:
- Os underruns de áudio entre os períodos de anúncios em tempo real nos streams SSAI HLS foram corrigidos.
Versão 1.0.0-alpha02
2 de março de 2022
Lançamento de androidx.media3:media3-*:1.0.0-alpha02
.
A versão 1.0.0-alpha02 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.17.0 (link em inglês).
- Biblioteca principal:
- Adicione o método protegido
DefaultRenderersFactory.getCodecAdapterFactory()
para que as subclasses daDefaultRenderersFactory
que substituem os métodosbuildVideoRenderers()
oubuildAudioRenderers()
possam acessar a fábrica do adaptador de codec e a transmitir para instânciasMediaCodecRenderer
que eles criam. - Propague os campos de cabeçalho ICY
name
egenre
paraMediaMetadata.station
eMediaMetadata.genre
, respectivamente. Assim, eles chegam ao app viaPlayer.Listener.onMediaMetadataChanged()
(#9677, link em inglês). - As chaves nulas foram removidas de
DefaultHttpDataSource#getResponseHeaders
. - Quando a criação de uma instância do
MediaCodec
falhar, o dispositivo entra em suspensão e tenta novamente. Isso corrige um problema que ocorre em alguns dispositivos ao alternar uma superfície de um codec seguro para outro (#8696, link em inglês). - O método
MediaCodecAdapter.getMetrics()
foi adicionado para permitir que os usuários acessem os dados de métricas doMediaCodec
(#9766, link em inglês). - A resolução da dependência do Maven foi corrigida (#8353, link em inglês).
- O ajuste automático da velocidade foi desativado para transmissões ao vivo que não têm recursos de baixa latência nem uma solicitação do usuário que defina a velocidade (#9329, link em inglês).
DecoderCounters#inputBufferCount
foi renomeado comoqueuedInputBufferCount
.- Os
SimpleExoPlayer.renderers
agora são particulares. Os renderizadores podem ser acessados usando oExoPlayer.getRenderer
. - Atualização de alguns valores constantes das
AnalyticsListener.EventFlags
para corresponder aos valores nasPlayer.EventFlags
. - O
AnalyticsCollector
foi dividido em uma interface e implementação padrão para permitir que ele seja removido pelo R8 se um app não precisar dele.
- Adicione o método protegido
- Seleção de faixas:
- Suporte às sinalizações de vídeo preferidas na seleção de faixas (#9402, link em inglês).
- A lógica de seleção de faixa de vídeo foi atualizada para que os tipos MIME e as sinalizações preferidos sejam considerados ao selecionar várias faixas de vídeo para adaptação (#9519, link em inglês).
- A lógica de seleção de faixa de vídeo e áudio foi atualizada para escolher apenas formatos para seleções adaptáveis que têm o mesmo nível de suporte ao decodificador e ao hardware (#9565, link em inglês).
- A lógica de seleção de faixa de vídeo foi atualizada para preferir codecs mais eficientes se vários oferecerem suporte aos decodificadores com aceleração de hardware principais (#4835, link em inglês).
- As preferências de conteúdo de áudio são priorizadas, por exemplo, a faixa de áudio "padrão" ou uma faixa correspondente ao idioma da localidade do sistema, em vez de restrições técnicas de seleção de faixa, por exemplo, um tipo MIME preferido ou contagem máxima de canais.
- O problema com a seleção de faixas em que a modificação de um grupo de faixas não desativava outros grupos do mesmo tipo foi corrigido (#9675, link em inglês).
- Um problema com a seleção de faixa em que uma mistura das substituições de faixas não vazias e vazias não era aplicada corretamente foi corrigido (#9649, link em inglês).
TrackGroup
s duplicados são proibidos em umaTrackGroupArray
. OsTrackGroup
s sempre podem ser distinguíveis definindo umid
no construtor doTrackGroup
. Isso corrige uma falha ao retomar a reprodução após colocar o app em segundo plano com uma substituição da faixa ativa (#9718, link em inglês).- A lógica na
AdaptiveTrackSelection
mudou para permitir um aumento da qualidade em uma largura de banda de rede suficiente, mesmo que a reprodução esteja muito próxima da extremidade ativa (#9784, link em inglês).
- Vídeo:
- A lógica de substituição do decodificador para Dolby Vision foi corrigida a fim de usar um decodificador H264/H265 compatível, se necessário.
- Áudio:
- A lógica de substituição do decodificador para Dolby Atmos (E-AC3-JOC) foi corrigida a fim de usar um decodificador E-AC3 compatível, se necessário.
- As APIs
AudioCapabilities
foram alteradas para exigir a transmissão explícita deAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
em vez denull
. - A personalização do cálculo do tamanho do buffer da
AudioTrack
agora pode ser feita injetando umAudioTrackBufferSizeProvider
noDefaultAudioSink
(8891, link em inglês). - Tente criar a
AudioTrack
novamente se o tamanho do buffer solicitado for > 1 MB (9712, link em inglês).
- Extratores:
- Texto:
- Um campo
MediaItem.SubtitleConfiguration.id
, que é propagado para o campoFormat.id
da faixa de legenda criada com a configuração, foi adicionado (#9673, link em inglês). - Foi adicionado suporte básico para legendas WebVTT em contêineres Matroska (#9886, link em inglês).
- O
Cea708Decoder
não pode ler mais do que o tamanho declarado de um bloco de serviços.
- Um campo
- DRM:
- O
playbackLooper
foi removido deDrmSessionManager.(pre)acquireSession
Quando umDrmSessionManager
é usado por um app em umaMediaSource
personalizada, oplaybackLooper
precisa ser transmitido paraDrmSessionManager.setPlayer
.
- O
- Reprodução de anúncios / IMA:
- Agora é possível usar a Inserção de anúncios dinâmicos do IMA (DAI) (#8213, link em inglês).
- Um método foi adicionado ao
AdPlaybackState
para permitir a redefinição de um grupo de anúncios. Assim, ele pode ser reproduzido novamente (#9615, link em inglês). - A velocidade de reprodução de 1,0 é aplicada durante a reprodução do anúncio (#9018, link em inglês).
- O problema em que um grupo de anúncios falhava ao carregar e causava uma redefinição imediata da reprodução foi corrigido (#9929, link em inglês).
- Interface:
- DASH:
- As propriedades essenciais e complementares analisadas foram adicionadas ao arquivo
Representation
(#9579, link em inglês). - Suporte ao papel da faixa
forced-subtitle
(#9727, link em inglês). - O papel da faixa
main
não é mais interpretado comoC.SELECTION_FLAG_DEFAULT
. - A lógica de exclusão do URL base foi corrigida para manifestos que não declaram o namespace do DVB (#9856, link em inglês).
- Suporte aos URLs
MPD.Location
relativos (#9939, link em inglês).
- As propriedades essenciais e complementares analisadas foram adicionadas ao arquivo
- HLS:
- O
Format.label
é preenchido corretamente para streams HLS somente de áudio (#9608, link em inglês). - Use a preparação sem separações em blocos por padrão para melhorar o tempo de inicialização. Se as
renderizações contiverem faixas com legendas multiplexadas que não foram declaradas
na playlist principal, é preciso as adicionar à playlist principal para que
fiquem disponíveis para reprodução ou desativar a preparação sem separações em blocos com
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Suporte à busca de frame de chave com precisão em HLS (#2882, link em inglês).
- O
- RTSP:
- Uma API cliente é oferecida para substituir a
SocketFactory
usada para qualquer conexão com o servidor (#9606, link em inglês). - O método de autenticação DIGEST é usado em vez de BASIC se ambos estiverem presentes (#9800, link em inglês).
- Gerencie quando o tempo de rastreamento RTSP não está disponível (#9775, link em inglês).
- Os valores do cabeçalho das informações de RTP inválidos são ignorados (#9619, link em inglês).
- Uma API cliente é oferecida para substituir a
- Transformador:
- A versão mínima necessária da API aumentou para 21.
- A
TransformationException
agora é usada para descrever erros que ocorrem durante uma transformação. - A
TransformationRequest
foi adicionada para especificar as opções de transformação. - Agora, vários listeners podem ser registrados.
- O travamento do transformador quando a saída do codec é parcialmente lida foi corrigido.
- Uma possível NPE em
Transformer.getProgress
ao liberar a geração do multiplexador foi corrigida. - Um app de demonstração para aplicar transformações foi adicionado.
- Extensão MediaSession:
- Por padrão, o
MediaSessionConnector
agora limpa a playlist ao parar. Os apps que querem manter a playlist retida podem chamarsetClearMediaItemsOnStop(false)
no conector.
- Por padrão, o
- Extensão do Google Cast:
- Extensão FFmpeg:
- O
build_ffmpeg.sh
agora depende dos utilitários de agrupamento do LLVM em vez dos utilitários do GNU (#9933, link em inglês).
- O
- Compatibilidade com o Android 12:
- Upgrade da extensão do Google Cast para depender do
com.google.android.gms:play-services-cast-framework:20.1.0
. As versões anteriores doplay-services-cast-framework
não são compatíveis com apps destinados ao Android 12 e vão falhar com umaIllegalArgumentException
ao criarPendingIntent
s (#9528, link em inglês).
- Upgrade da extensão do Google Cast para depender do
- Símbolos descontinuados foram removidos:
- O
Player.EventListener
foi removido. UsePlayer.Listener
. MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
eMediaSourceFactory#setDrmUserAgent
foram removidos. UseMediaSourceFactory#setDrmSessionManagerProvider
.- O
MediaSourceFactory#setStreamKeys
foi removido. UseMediaItem.Builder#setStreamKeys
- O
MediaSourceFactory#createMediaSource(Uri)
foi removido. UseMediaSourceFactory#createMediaSource(MediaItem)
- O
setTag
foi removido deDashMediaSource
,HlsMediaSource
eSsMediaSource
. UseMediaItem.Builder#setTag
. - O
DashMediaSource#setLivePresentationDelayMs(long, boolean)
foi removido. UseMediaItem.Builder#setLiveConfiguration
eMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
para substituir o manifesto ouDashMediaSource#setFallbackTargetLiveOffsetMs
para fornecer um valor de substituição. - O
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
foi removido. Não é mais possível desativar a aplicação da linha de execução. ActionFile
eActionFileUpgradeUtil
foram removidos. Use o ExoPlayer 2.16.1 ou anterior para usarActionFileUpgradeUtil
a fim de mesclar arquivos de ações legadas noDefaultDownloadIndex
.- A
ProgressiveMediaSource#setExtractorsFactory
foi removida. Use o construtorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. ProgressiveMediaSource.Factory#setTag
eProgressiveMediaSource.Factory#setCustomCacheKey
foram removidos. UseMediaItem.Builder#setTag
eMediaItem.Builder#setCustomCacheKey
.- Os construtores
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
eDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
foram removidos. Use os construtoresDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
eDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Todos os construtores
CronetDataSource
públicos foram removidos. UseCronetDataSource.Factory
- O
- Mude o
IntDefs
para apenas@Target(TYPE_USE)
. Isso pode interromper a compilação de usos no Kotlin, que podem ser corrigida movendo a anotação para o tipo (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(no pacotecom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(no pacotecom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Versão 1.0.0-alpha01
27 de outubro de 2021
Lançamento de androidx.media3:media3-*:1.0.0-alpha01
.
A versão 1.0.0-alpha01 contém estas confirmações.
Novos recursos
A Media3 é o novo lar das bibliotecas de suporte de mídia, incluindo o ExoPlayer. A primeira versão Alfa contém implementações antecipadas e funcionais de bibliotecas para casos de uso de mídia, incluindo:
- o ExoPlayer, um player de mídia no nível do aplicativo para Android que é fácil de personalizar e estender;
- funcionalidade de sessão de mídia para expor e controlar reproduções. Esse novo
módulo de sessão usa a mesma interface de
Player
que o ExoPlayer; - componentes de IU para criar interfaces do usuário para reprodução de mídia;
- módulos que unem as funcionalidades em outras bibliotecas para uso com o ExoPlayer, por exemplo, a inserção de anúncios usando o SDK do IMA.
Para ver mais informações, consulte o projeto Media3 do GitHub (link em inglês).
O ExoPlayer era hospedado anteriormente em um
projeto separado do ExoPlayer no GitHub (link em inglês). Na Media3, o
nome do pacote é androidx.media3.exoplayer
. Planejamos continuar com a manutenção e
o lançamento do projeto ExoPlayer no GitHub por um certo período. Assim, os desenvolvedores vão ter tempo de migrar os aplicativos para a
Media3. A Media3 tem substituições para todos os módulos do ExoPlayer, exceto as
extensões de media2 e mediasession legadas, que foram substituídas pelo novo
módulo media3-session
. Esse módulo fornece integração direta entre os players de mídia e as
sessões de mídia sem precisar usar uma classe de adaptador/conector.