Media3
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
10 de julho de 2024 | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.0-alpha02 |
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.4.1" // 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 SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$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" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$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 reading and writing media containers implementation "androidx.media3:media3-container:$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" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.1" // 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 SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$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") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$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 reading and writing media containers implementation("androidx.media3:media3-container:$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") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$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.4.0
Versão 1.4.0-rc01
10 de julho de 2024
Lançamento de androidx.media3:media3-*:1.4.0-rc01
.
A versão 1.4.0-rc01 contém estas confirmações.
- Biblioteca comum:
- Adição de
Format.customData
para armazenar informações personalizadas fornecidas pelo app sobre instâncias deFormat
.
- Adição de
- ExoPlayer:
- Algumas inconsistências de seleção de áudio foram corrigidas, como o não relato de perda de seleção completa ou temporária enquanto o player está pausado (#1436, link em inglês).
- Foi corrigido um possível
IndexOutOfBoundsException
causado por extratores que relatavam outras faixas após a etapa de preparação inicial (#1476). Effects
emExoPlayer.setVideoEffect()
receberá os carimbos de data/hora com o deslocamento do renderizador removido (#1098).- Uma possível
IllegalArgumentException
foi corrigida ao processar erros do player que aconteciam ao ler outro item da playlist (#1483).
- Texto:
- Foi corrigida uma
IllegalArgumentException
deLegacySubtitleUtil
quando uma amostra de legenda WebVTT não contém dicas, por exemplo, como parte de um stream DASH (#1516).
- Foi corrigida uma
- Sessão:
- Permita que a atividade da sessão seja definida por controlador para substituir a
atividade da sessão global. A atividade da sessão pode ser definida para um
controlador no momento da conexão criando um
ConnectionResult
comAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Após a conexão, a atividade da sessão poderá ser atualizada comMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - Melhoria na replicação de erros de chamadas para
MediaLibrarySession.Callback
. A replicação de erros agora pode ser configurada usandoMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
para escolher o tipo de erro ou desativar a replicação de erros, que é ativada por padrão.
- Permita que a atividade da sessão seja definida por controlador para substituir a
atividade da sessão global. A atividade da sessão pode ser definida para um
controlador no momento da conexão criando um
- Interface:
- Solução para um bug da plataforma que causa um vídeo esticado/cortado ao usar
SurfaceView
dentro de umAndroidView
do Compose na API 34 (1237, link em inglês).
- Solução para um bug da plataforma que causa um vídeo esticado/cortado ao usar
- App de demonstração:
- Use
HttpEngineDataSource
comoHttpDataSource
quando compatível com o dispositivo.
- Use
Versão 1.4.0-beta01
26 de junho de 2024
Lançamento de androidx.media3:media3-*:1.4.0-beta01
.
A versão 1.4.0-beta01 contém estas confirmações.
- ExoPlayer:
- Adicione
ExoPlayer.isReleased()
para verificar seExoplayer.release()
foi chamado. - O
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs
foi adicionado para configurar a posição máxima para a qualseekToPrevious()
busca o item anterior (#1425).
- Adicione
- Transformador:
- Remover o campo
ExportResult.processedInputs
. Se você usar esse campo para detalhes do codec, useDefaultDecoderFactory.listener
. No caso de uma exceção de codec, os detalhes do codec estarão disponíveis noExportException.codecInfo
.
- Remover o campo
- Extratores:
- Foi corrigida a extração do formato de áudio PCM em contêineres AVI.
- Imagem:
- Permita que
null
seja usado como parâmetro para queExoPlayer.setImageOutput
limpe umImageOutput
definido anteriormente.
- Permita que
- Efeito:
- Remova o
OverlaySettings.useHdr
não utilizado, porque o intervalo dinâmico de sobreposição e o frame precisam ser correspondentes. - Adicione suporte a HDR para
TextOverlay
. A luminância da sobreposição de texto pode ser ajustada comOverlaySettings.setHdrLuminanceMultiplier
.
- Remova o
- Sessão:
- Adição de
MediaSession.Callback.onPlayerInteractionFinished
para informar sessões quando uma série de interações do jogador de um controle específico for concluída. - Adicione
SessionError
e use-o emSessionResult
eLibraryResult
, em vez do código do erro, para fornecer mais informações sobre o erro e como resolvê-lo, se possível. - Publique o código do app de teste dos controles de mídia3 que pode ser usado para testar interações com apps que publicam uma sessão de mídia.
- Propagar extras transmitidos ao
MediaSession[Builder].setSessionExtras()
do media3 para oPlaybackStateCompat.getExtras()
de um controlador media1. - Mapear erros fatais e não fatais de e para a sessão da plataforma. Um
PlaybackException
é mapeado para um estado de erro fatal doPlaybackStateCompat
. UmSessionError
enviado ao controlador de notificações de mídia comMediaSession.sendError(ControllerInfo, SessionError)
é mapeado para um erro não fatal emPlaybackStateCompat
, o que significa que o código e a mensagem do erro são definidos, mas o estado da sessão da plataforma permanece diferente deSTATE_ERROR
.
- Adição de
- Interface:
- Extensão HLS:
- Foi corrigido um bug em que playlists não principais não são atualizadas durante a reprodução ao vivo (#1240).
- Símbolos descontinuados foram removidos:
- Remoção da interface
Bundleable
. Isso inclui a remoção de todos os campos constantesBundleable.Creator<Foo> CREATOR
. Os autores da chamada precisam usar os métodosBundle toBundle()
estatic Foo fromBundle(Bundle)
em cada tipo.
- Remoção da interface
Versão 1.4.0-alpha02
7 de junho de 2024
Lançamento de androidx.media3:media3-*:1.4.0-alpha02
.
A versão 1.4.0-alpha02 contém estas confirmações.
- Biblioteca comum:
- Encaminhar chamadas de busca de ambiente autônomo presumidas para os métodos protegidos
BasePlayer.seekTo
eSimpleBasePlayer.handleSeek
em vez de ignorá-las. Se você estiver implementando esses métodos em um player personalizado, talvez seja necessário processar essas outras chamadas commediaItemIndex == C.INDEX_UNSET
. - Remoção da dependência de compilação na simplificação aprimorada do Java 8 (#1312).
- Verifique se a duração transmitida para
MediaItem.Builder.setImageDurationMs
é ignorada para umMediaItem
que não seja de imagem, conforme documentado.
- Encaminhar chamadas de busca de ambiente autônomo presumidas para os métodos protegidos
- ExoPlayer:
- Adicione
reset
aBasePreloadManager
para liberar todas as origens de retenção e manter a instância do gerenciador de pré-carregamento. - Adicione
ExoPlayer.setPriority
(eBuilder.setPriority
) para definir o valor de prioridade usado emPriorityTaskManager
e para a importância do MediaCodec da API 35. - Correção do problema com a atualização do horário do último rebuffer que resultava na
chave
bs
(privação de buffer) incorreta no CMCD (#1124). - Adicione
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
para indicar que a origem foi carregada até o final. Isso permite queDefaultPreloadManager
e as implementações personalizadas doPreloadMediaSource.PreloadControl
pré-carreguem a próxima origem ou realizem outras ações. - O bug em que a ação de pular o silêncio no final dos itens pode acionar uma exceção de reprodução foi corrigido
- Adicione
clear
aPreloadMediaSource
para descartar o período de pré-carregamento - Adicione o novo código de erro
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
, que é usado quando os recursos de codec são recuperados para tarefas de prioridade mais alta. - Permita que
AdsMediaSource
carregue anúncios precedentes antes que a preparação inicial da mídia de conteúdo seja concluída (1358, link em inglês). - O bug em que a reprodução era movida para
STATE_ENDED
ao preparar novamente uma transmissão ao vivo DASH de vários períodos após o período original já ter sido removido do manifesto onTimelineRefreshed
foi renomeado comoonSourcePrepared
, eonPrepared
foi renomeado comoonTracksSelected
emPreloadMediaSource.PreloadControl
. Renomeie também os IntDefs emDefaultPreloadManager.Stage
.- Foi adicionado suporte experimental à programação dinâmica para alinhar melhor o trabalho
com ciclos de ativação da CPU e atrasar a ativação até o momento em que os renderizadores podem progredir
É possível ativar isso usando
experimentalSetDynamicSchedulingEnabled
ao configurar a instância do ExoPlayer. - Adição do
Renderer.getDurationToProgressMs
. UmRenderer
pode implementar esse método para retornar ao ExoPlayer pelo tempo que a reprodução precisa avançar para que o renderizador continue. SeExoPlayer
for definido comexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
vai chamar esse método ao calcular o tempo para agendar a tarefa de trabalho. - Adição de
MediaCodecAdapter#OnBufferAvailableListener
ao alerta quando buffers de entrada e saída estão disponíveis para uso porMediaCodecRenderer
.MediaCodecRenderer
sinalizaráExoPlayer
ao receber esses callbacks e, seExoPlayer
for definido comexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
vai programar o loop de trabalho conforme os renderizadores podem progredir. - Use a classe de dados para métodos
LoadControl
em vez de parâmetros individuais.
- Adicione
- Transformador:
- Resolva um bug do decodificador em que o número de canais de áudio era limitado em estéreo ao processar a entrada PCM.
- Ao selecionar faixas em
ExoPlayerAssetLoader
, ignore as restrições de contagem de canais de áudio, porque elas se aplicam apenas à reprodução. - Substitua a interface
androidx.media3.transformer.Muxer
porandroidx.media3.muxer.Muxer
e removaandroidx.media3.transformer.Muxer
. - Correção do carregamento de imagem HEIC de esquemas de URI de conteúdo. (#1373).
- Ajuste a duração da faixa de áudio no
AudioGraphInput
para melhorar a sincronização AV.
- Extratores:
- MPEG-TS: avance a mudança, garantindo que o último frame seja renderizado transmitindo a última unidade de acesso de um stream para a fila de amostra (#7909). Incorporação de correções para resolver os problemas que surgiram em streams HLS somente I-frame(#1150) e H.262 HLS (#1126).
- MP3: prefira o tamanho dos dados de um frame
Info
em vez do tamanho informado pelo stream subjacente (por exemplo, tamanho do arquivo ou cabeçalho HTTPContent-Length
). Isso ajuda a excluir dados do trailer que não podem ser reproduzidos (por exemplo, capa do álbum) dos cálculos constantes de busca da taxa de bits, tornando as buscas mais precisas (#1376). - MP3: usa a contagem de frames e outros dados em um frame
Info
(se houver) para calcular uma taxa de bits média para a busca constante de taxa de bits, em vez de extrair da taxa de bits do frame após o frameInfo
, que pode ser artificialmente pequeno, por exemplo, o framePCUT
(#1376).
- Áudio:
- Os atributos de codificação DTS:X Profile 2 foram corrigidos para a reprodução de passagem (#1299, link em inglês).
- Para reprodução descarregada, redefina o campo de acompanhamento para a conclusão do stream
em
DefaultAudioSink
antes de chamarAudioTrack.stop()
. Assim,AudioTrack.StreamEventCallback#onPresentationEnded
identifica corretamente quando todos os dados pendentes foram reproduzidos. - O bug no
SilenceSkippingAudioProcessor
foi corrigido em que as transições entre diferentes formatos de áudio (por exemplo, estéreo para mono) podem fazer com que o processador gere uma exceção (#1352). - Implemente
MediaCodecAudioRenderer.getDurationToProgressUs
para que o ExoPlayer programe dinamicamente o loop de trabalho principal para quando o MediaCodecAudioRenderer puder progredir.
- Vídeo:
- A lógica de substituição do decodificador para Dolby Vision foi corrigida para usar um decodificador AV1 compatível, se necessário (#1389, link em inglês).
- Texto:
- Corrigimos o problema em que as legendas que começavam antes de uma posição de busca eram puladas. Esse problema só foi introduzido na Media3 1.4.0-alpha01.
- O comportamento padrão de análise de legendas foi mudado para que aconteça durante a extração
em vez de durante a renderização. Consulte o
diagrama de arquitetura do ExoPlayer
para ver a diferença entre extração e renderização.
- Essa mudança pode ser substituída chamando ambos
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
eTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Consulte os documentos sobre personalização para saber como integrar esses componentes em uma instância doExoPlayer
. Esses métodos e todo o suporte à decodificação de legendas legada serão removidos em uma versão futura. - Apps com implementações personalizadas do
SubtitleDecoder
precisam ser atualizados para implementarSubtitleParser
(eSubtitleParser.Factory
em vez deSubtitleDecoderFactory
).
- Essa mudança pode ser substituída chamando ambos
- PGS: correção da decodificação do comprimento da execução para resolver
0
como um índice de cores, em vez de um valor de cor literal (#1367). - CEA-708: ignora o valor
rowLock
. A especificação CEA-708-E S-2023 afirma querowLock
ecolumnLock
precisam ser considerados verdadeiros, independentemente dos valores presentes no stream. O suporte acolumnLock
não está implementado, então é presumido que é sempre falso.- Ela foi incluída originalmente nas notas da versão
1.3.0-alpha01
, mas a mudança foi revertida acidentalmente antes da versão1.3.0-rc01
. Isso foi corrigido, então a mudança aparece de novo.
- Ela foi incluída originalmente nas notas da versão
- CEA-708: evita que novas linhas duplicadas sejam adicionadas pelo processamento simples do comando "set pen location" do ExoPlayer (#1315).
- Metadados:
- Corrige o mapeamento de tags de classificação MP4 para ID3. Anteriormente, as tags MP4 "classificação de álbum" (
soal
), "classificação de artista" (soar
) e "classificação de artista do álbum" (soaa
) eram mapeadas incorretamente para as tags ID3TSO2
,TSOA
eTSOP
(#1302). - Foi corrigida a leitura de tags numéricas
gnre
(gênero) etmpo
(tempo) MP4 (/iTunes) quando o valor tem mais de um byte. - Propagação do frame
TCON
ID3 paraMediaMetadata.genre
(#1305).
- Corrige o mapeamento de tags de classificação MP4 para ID3. Anteriormente, as tags MP4 "classificação de álbum" (
- Imagem:
- Foi adicionado suporte a grades de miniaturas DASH não quadradas (#1300).
- Foi adicionado suporte ao AVIF para a API 34+.
- Fonte de dados:
- O
ByteArrayDataSource
agora pode resolver um URI em uma matriz de bytes duranteopen()
, em vez de ser codificado na construção (#1405).
- O
- DRM:
- Permissão da configuração de um
LoadErrorHandlingPolicy
emDefaultDrmSessionManagerProvider
(#1271).
- Permissão da configuração de um
- Efeito:
- O bug em que
TimestampWrapper
falha quando usado comExoPlayer#setVideoEffects
(#821) foi corrigido. - Mudar o espaço de trabalho da cor padrão do SDR de cores lineares para vídeo elétrico BT 709 SDR Forneça também uma terceira opção para manter o espaço de cores original.
- Agora é possível definir a ordem z indeterminada de EditedMediaItemSequences (#1055).
- Mantenha um intervalo de luminância consistente em diferentes partes do conteúdo HDR (usa o intervalo de HLG).
- Adicione suporte a sobreposições Ultra HDR (bitmap) em conteúdo HDR.
- Permite que os efeitos
SeparableConvolution
sejam usados antes do nível 26 da API.
- O bug em que
- Extensão de IMA:
- Promover a API necessária para que os apps reproduzam streams de anúncios da DAI para a versão estável.
- Adição de
replaceAdTagParameters(Map <String, String>)
aImaServerSideAdInsertionMediaSource.AdLoader
, que permite substituir os parâmetros da tag de anúncio no momento da execução. - O bug em que
VideoAdPlayer.VideoAdPlayerCallback.onError
não era chamado quando ocorria um erro do player durante a reprodução do anúncio (#1334) foi corrigido. - A versão do SDK do IMA foi atualizada para 3.33.0 para corrigir uma
NullPointerException
ao usar URIs de tag de anúnciodata://
(#700).
- Sessão:
- A barra de busca foi ocultada na notificação de mídia das transmissões ao vivo, mas não definindo a duração nos metadados de sessão da plataforma (#1256, link em inglês).
- Alinhe a conversão de
MediaMetadata
paraMediaDescriptionCompat
para usar a mesma ordem e lógica preferidas ao selecionar propriedades de metadados como em media1. - Adição de
MediaSession.sendError()
, que permite enviar erros não fatais ao controlador Media3. Ao usar o controlador de notificações (consulteMediaSession.getMediaNotificationControllerInfo()
), o erro personalizado é usado para atualizar oPlaybackState
da sessão da plataforma para um estado de erro com as informações de erro fornecidas (#543).
- Extensão da Cronet:
- Corrija
SocketTimeoutException
emCronetDataSource
. Em algumas versões da Cronet, a solicitação fornecida pelo callback nem sempre é a mesma. Isso faz com que o callback não seja concluído e solicite que o tempo limite seja atingido (https://issuetracker.google.com/328442628).
- Corrija
- Extensão HLS:
- Foi corrigido um bug em que as amostras de EMSG pendentes que aguardavam uma descontinuidade eram
delegadas em
HlsSampleStreamWrapper
com um deslocamento incorreto, causando umaIndexOutOfBoundsException
ou umIllegalArgumentException
(#1002). - O bug em que playlists não principais continuam sendo atualizadas para streams LL-HLS (#1240) foi corrigido.
- Correção do bug em que a ativação do CMCD para HLS com segmentos de inicialização
resultava em
Source Error
eIllegalArgumentException
.
- Foi corrigido um bug em que as amostras de EMSG pendentes que aguardavam uma descontinuidade eram
delegadas em
- Extensão DASH:
- Extensão Cast:
- O bug que convertia o título do álbum de
MediaQueueItem
para o artista no item de mídia da Media3 (#1255) foi corrigido.
- O bug que convertia o título do álbum de
- App de demonstração:
- A configuração do modo de repetição com argumentos
Intent
da linha de comando (#1266) foi permitida.
- A configuração do modo de repetição com argumentos
- Símbolos descontinuados foram removidos:
- O método
setContentTypePredicate(Predicate)
foi removido deDefaultHttpDataSource
,OkHttpDataSource
eCronetDataSource
. Use o método equivalente em cadaXXXDataSource.Factory
. - Os construtores
OkHttpDataSource
eOkHttpDataSourceFactory
foram removidos. UseOkHttpDataSource.Factory
. - A
PlayerMessage.setHandler(Handler)
foi removida. UsesetLooper(Looper)
. - Remover o campo
Timeline.Window.isLive
. Use o métodoisLive()
. - Os construtores
DefaultHttpDataSource
foram removidos. UseDefaultHttpDataSource.Factory
- O
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
foi removido. UseDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
- A
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
foi removida. UseMediaCodecInfo.canReuseCodec(Format, Format)
. - Os métodos
DrmSessionManager.DUMMY
egetDummyDrmSessionManager()
foram removidos. UseDrmSessionManager.DRM_UNSUPPORTED
. - Remover
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
. Use as sobrecargas que usam umaDecoderReuseEvaluation
. - As constantes
RendererSupport.FormatSupport
IntDef eFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
eFORMAT_UNSUPPORTED_TYPE
foram removidas. Use o IntDef equivalente e as constantes emandroidx.media3.common.C
(por exemplo,C.FORMAT_HANDLED
).
- O método
Versão 1.4.0-alpha01
17 de abril de 2024
Lançamento de androidx.media3:media3-*:1.4.0-alpha01
.
A versão 1.4.0-alpha01 contém estas confirmações.
- ExoPlayer:
- Adicione
BasePreloadManager
, que coordena o pré-carregamento de várias origens com base nas prioridades definidas pelarankingData
. A personalização é possível estendendo essa classe. AdicioneDefaultPreloadManager
, que usaPreloadMediaSource
para pré-carregar amostras de mídia das origens na memória e usa umrankingData
inteiro que indica o índice de um item na interface. - Adição de
PlayerId
à maioria dos métodos deLoadControl
para permitir que as implementações deLoadControl
ofereçam suporte a vários jogadores. Buffer.isDecodeOnly()
eC.BUFFER_FLAG_DECODE_ONLY
foram removidos. Não é necessário definir essa flag, já que os renderizadores e decodificadores decidirão pular os buffers com base no carimbo de data/hora. Implementações personalizadas deRenderer
precisam verificar se o tempo de buffer é pelo menosBaseRenderer.getLastResetPositionUs()
para decidir se uma amostra será mostrada. As implementaçõesSimpleDecoder
personalizadas podem verificarisAtLeastOutputStartTimeUs
, se necessário, ou marcar outros buffers comDecoderOutputBuffer.shouldBeSkipped
para ignorá-los.- Permite que um valor nulo seja retornado por
TargetPreloadStatusControl.getTargetPreloadStatus(T)
para indicar que não é necessário pré-carregar umMediaSource
com orankingData
fornecido. remove(MediaSource)
foi adicionado aBasePreloadManager
.
- Adicione
- Transformador:
- Adicione
audioConversionProcess
evideoConversionProcess
aExportResult
, indicando como a respectiva faixa no arquivo de saída foi criada. - Relaxar as verificações no nível H.264 da otimização do corte.
- Foi adicionado suporte à troca entre mídia de entrada SDR e HDR em uma sequência.
- Foi adicionado suporte a efeitos de áudio no nível de composição.
- Foi adicionado suporte à transcodificação de imagens Ultra HDR em vídeos HDR.
- Foi corrigido um problema em que a
DefaultAudioMixer
não gerava a quantidade correta de bytes após ser redefinida e reutilizada.
- Adicione
- Vídeo:
- Foi corrigido um problema em que o
Listener.onRenderedFirstFrame()
chegava muito cedo ao alternar as plataformas no meio da reprodução.
- Foi corrigido um problema em que o
- Fonte de dados:
- Implemente o suporte para URIs de recursos brutos
android.resource://package/id
, em quepackage
é diferente do pacote do aplicativo atual. Isso não foi documentado anteriormente para funcionar, mas é uma maneira mais eficiente de acessar recursos em outro pacote do que pelo nome. - Verifique se
url
não é nulo nos construtoresDataSpec
. Esse parâmetro já estava anotado para não ser nulo.
- Implemente o suporte para URIs de recursos brutos
- Efeito:
- Ofereça suporte a várias mudanças de velocidade no mesmo
EditedMediaItem
ouComposition
emSpeedChangeEffect
. - Compatibilidade com saída HLG e PQ da entrada de bitmap Ultra HDR.
- Foi adicionado suporte a EGL_GL_COLORSPACE_BT2020_HLG_EXT, que melhora a saída da superfície HLG no ExoPlayer.setVideoEffect e na SurfaceView de depuração do Transformer.
- A implementação da matriz de sobreposição foi atualizada para torná-la consistente com a
documentação, invertendo os valores x e y aplicados em
setOverlayFrameAnchor()
. Se estiver usandoOverlaySettings.Builder.setOverlayFrameAnchor()
, inverta os valores x e y, multiplicando-os por-1
.
- Ofereça suporte a várias mudanças de velocidade no mesmo
- Sessão:
- Mude o padrão de
CommandButton.enabled
paratrue
e garanta que o valor possa permanecer falso para os controladores, mesmo que o comando associado esteja disponível. - Foram adicionadas constantes de ícone para
CommandButton
que precisam ser usadas em vez de recursos de ícones personalizados. - Adição de
MediaSessionService.isPlaybackOngoing()
para permitir que os apps consultem se o serviço precisa ser interrompido emonTaskRemoved()
(#1219). - Adição de
MediaSessionService.pauseAllPlayersAndStopSelf()
, que permite pausar a reprodução de todas as sessões e chamarstopSelf
para encerrar o ciclo de vida daMediaSessionService
. - Substitua
MediaSessionService.onTaskRemoved(Intent)
para fornecer uma implementação padrão segura que mantenha o serviço em execução em primeiro plano se a reprodução estiver em andamento ou interromper o serviço.
- Mude o padrão de
- Downloads:
- Verifique se
DownloadHelper
não vaza instânciasRenderer
não lançadas, o que pode resultar em uma falha do app comIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- Verifique se
- Utilitários de teste:
- Implemente
onInit()
eonRelease()
emFakeRenderer
. - Mude os métodos
TestPlayerRunHelper.runUntil/playUntil
para falhar em erros não fatais (por exemplo, aqueles informados aoAnalyticsListener.onVideoCodecError
). Use a nova cadeia de métodosTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
para desativar esse comportamento.
- Implemente
- App de demonstração:
- Use
DefaultPreloadManager
no app de demonstração em formato curto.
- Use
- Símbolos descontinuados foram removidos:
- Remoção de
CronetDataSourceFactory
. UseCronetDataSource.Factory
. - Remova alguns construtores
DataSpec
. UseDataSpec.Builder
.
- Remoção de
Versão 1.3.0
Versão 1.3.1
11 de abril de 2024
Lançamento de androidx.media3:media3-*:1.3.1
.
A versão 1.3.1 contém estas confirmações.
- Biblioteca comum:
- Adicione
Format.labels
para permitir rótulos localizados ou outros rótulos alternativos.
- Adicione
- ExoPlayer:
- Correção do problema em que o
PreloadMediaPeriod
não podia reter os streams quando é pré-carregado novamente - Aplique o
TrackSelectionResult
correspondente correto ao período de reprodução na nova seleção da faixa. - Os renderizadores habilitados com antecedência só são iniciados depois de avançar o período de reprodução ao fazer a transição entre itens de mídia (#1017, link em inglês).
- O tipo de retorno ausente foi adicionado à regra
-keepclasseswithmembers
do Proguard paraDefaultVideoFrameProcessor.Factory.Builder.build()
(1187).
- Correção do problema em que o
- Transformador:
- Foi adicionada uma solução alternativa para a exceção gerada porque
MediaMuxer
não é compatível com carimbos de data/hora de apresentação negativos anteriores ao nível 30 da API.
- Foi adicionada uma solução alternativa para a exceção gerada porque
- Seleção de faixas:
DefaultTrackSelector
: prefira faixas de vídeo com um frame rate razoável (>=10 fps) em vez de faixas com um frame rate menor ou não definido. Isso garante que o player selecione a faixa de vídeo "real" em MP4s extraídas de fotos com movimento que podem conter duas faixas HEVC, em que uma tem uma resolução mais alta, mas um número muito pequeno de frames (#1051).
- Extratores:
- Foi corrigido o problema em que o padding não era ignorado ao ler blocos de tamanho ímpar de arquivos WAV (#1117).
- MP3: preencha
Format.averageBitrate
a partir de frames de metadados, comoXING
eVBRI
. - MPEG-TS: reverte uma mudança que visa garantir que o último frame seja renderizado transmitindo a última unidade de acesso de um stream para a fila de amostra (#7909). Isso ocorre devido à mudança que causa novos problemas com streams HLS somente I-frame (#1150) e H.262 HLS (#1126).
- Áudio:
- Permitir a recuperação do renderizador desativando o descarregamento se a faixa de áudio não for inicializada no modo de descarregamento.
- Vídeo:
- Foi adicionada uma solução alternativa para um problema de dispositivo no Galaxy Tab S7 FE, no Chromecast com Google TV e no Lenovo M10 FHD Plus, que faz com que streams H265 de 60 QPS sejam marcados como não compatíveis.
- Foi adicionada uma solução alternativa que garante que o primeiro frame seja sempre renderizado durante o encapsulamento, mesmo que o dispositivo não faça isso automaticamente conforme exigido pela API (#1169). (#966, link em inglês).
- Foi corrigido um problema em que o processamento de informações de cor HDR causa um comportamento incorreto no codec e impede chaves de formato adaptativo para faixas de vídeo SDR (#1158, link em inglês).
- Texto:
- WebVTT: impede que dicas diretamente consecutivas criem
outras instâncias
CuesWithTiming
falsas deWebvttParser.parse
(#1177).
- WebVTT: impede que dicas diretamente consecutivas criem
outras instâncias
- DRM:
- Resolução de uma
NoSuchMethodError
que pode ser gerada pelo frameworkMediaDrm
em vez deResourceBusyException
ouNotProvisionedException
em alguns dispositivos Android 14 (#1145).
- Resolução de uma
- Efeito:
- Aprimoramos o mapeamento de tons de PQ para SDR convertendo espaços de cor.
- Sessão:
- Interface:
- O substituto para incluir o nome do idioma da faixa de áudio se
Locale
não puder identificar um nome de exibição (#988, link em inglês).
- O substituto para incluir o nome do idioma da faixa de áudio se
- Extensão DASH:
- Todos os elementos
Label
do manifesto foram preenchidos emFormat.labels
(#1054).
- Todos os elementos
- Extensão RTSP:
- Valores de informações de sessão vazios (i-tags) foram pulados na análise SDP (#1087).
- Extensões do decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Desativar a extensão MIDI como uma dependência local por padrão, porque ela exige que um repositório Maven extra seja configurado. Os usuários que precisam desse módulo de uma dependência local podem reativá-lo.
Versão 1.3.0
6 de março de 2024
Lançamento de androidx.media3:media3-*:1.3.0
.
A versão 1.3.0 contém estas confirmações.
- Biblioteca comum:
- Implemente suporte para URIs
de recursos brutos
android.resource://package/[type/]name
, em quepackage
é diferente do pacote do aplicativo atual. Isso sempre foi documentado para funcionar, mas não foi implementado corretamente até agora. - Normalize os tipos MIME definidos pelo código do app ou leia os conteúdos de mídia para que fiquem totalmente em minúsculas.
- Defina anúncios com um
MediaItem
completo, em vez de um únicoUri
noAdPlaybackState
. - Aumente o
minSdk
para 19 (Android KitKat). Isso está alinhado com todas as outras bibliotecas do AndroidX e é necessário para que possamos fazer upgrade para as versões mais recentes das dependências do AndroidX. artworkUri
eartworkData
foram preenchidos emMediaMetadata.Builder.populate(MediaMetadata)
quando pelo menos um deles não for nulo (#964).
- Implemente suporte para URIs
de recursos brutos
- ExoPlayer:
- Foram adicionados
PreloadMediaSource
ePreloadMediaPeriod
, que permitem que os apps pré-carreguem uma origem de mídia do conteúdo em uma posição inicial específica antes da reprodução. OPreloadMediaSource
prepara a origem de mídia de conteúdo para receber oTimeline
, preparando e armazenando em cache o período na posição inicial especificada, selecionando faixas e carregando dados de mídia para o período. Os apps controlam o progresso do pré-carregamento implementandoPreloadMediaSource.PreloadControl
e definem a origem pré-carregada para o player de reprodução. - Adição de
ExoPlayer.setImageOutput
, que permite que os apps definamImageRenderer.ImageOutput
. DefaultRenderersFactory
agora fornece umImageRenderer
ao jogador por padrão comImageOutput
eImageDecoder.Factory.DEFAULT
nulos.- O evento
Player.Listener.onPositionDiscontinuity
é emitido quando o silêncio é ignorado (#765, link em inglês). - Foi adicionado suporte experimental à análise de legendas durante a extração. É
possível ativar usando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Ofereça suporte a fontes de mídia adaptáveis com
PreloadMediaSource
. - Implemente
HttpEngineDataSource
, umHttpDataSource
usando a API HttpEngine. - Evitar a subclassificação
CompositeSequenceableLoader
. Esse componente anteriormente era extensível, mas nunca foi transformado em subclasse na biblioteca. As personalizações podem ser feitas encapsulando uma instância com o padrão de decorador e implementando umCompositeSequenceableLoaderFactory
personalizado. - Correção do problema em que repetir ao mesmo tempo faz com que os metadados desse item sejam apagados (#1007).
- Renomeie os métodos
experimentalSetSubtitleParserFactory
emBundledChunkExtractor.Factory
eDefaultHlsExtractorFactory
comosetSubtitleParserFactory
e proíba a transmissão denull
. Use os novos métodosexperimentalParseSubtitlesDuringExtraction(boolean)
para controlar o comportamento da análise. - Foi adicionado suporte à personalização do
SubtitleParser.Factory
usado durante a extração. Isso pode ser feito comMediaSource.Factory.setSubtitleParserFactory()
. - Adicione o prefixo de origem a todos os campos
Format.id
gerados deMergingMediaSource
. Isso ajuda a identificar qual origem produziu umFormat
(#883, link em inglês). - Foi corrigido o regex usado para validar nomes de chave personalizados de dados de cliente de mídia comuns (CMCD, na sigla em inglês), modificando-o para verificar apenas o hífen (#1028).
- A codificação dupla dos parâmetros de consulta CMCD (#1075) foi interrompida.
- Foram adicionados
- Transformador:
- Foi adicionado suporte à separação de vídeos em câmera lenta H.265/HEVC SEF.
- Aumente a velocidade de transmuxing, especialmente para edições "remover vídeo".
- A API foi adicionada para garantir que o arquivo de saída comece em um frame de vídeo. Isso pode tornar a saída das operações de corte mais compatível com as implementações do player que não mostram o primeiro frame de vídeo até o carimbo de data/hora da apresentação (#829).
- Foi adicionado suporte à otimização das operações de corte de MP4 com recurso único.
- Adicione suporte para garantir que um frame de vídeo tenha o primeiro carimbo de data/hora no arquivo de saída. Corrige arquivos de saída que começam com um frame preto em players iOS (#829, link em inglês).
- Seleção de faixas:
DefaultTrackSelector.selectImageTrack
foi adicionado para ativar a seleção de faixa de imagem.TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
foi adicionado para determinar se uma faixa de imagem será selecionada se uma e uma de vídeo estiverem disponíveis. O valor padrão éfalse
, o que significa que a seleção de uma faixa de vídeo é priorizada.
- Extratores:
- Foi adicionada mais análise AV1C ao extrator de MP4 para extrair
os valores de
ColorInfo.colorSpace
,ColorInfo.colorTransfer
eColorInfo.colorRange
(#692). - MP3: usa a busca de taxa de bits constante (CBR, na sigla em inglês) de arquivos com um cabeçalho
Info
(o equivalente à CBR do cabeçalhoXing
). Anteriormente, usamos a tabela de busca do cabeçalhoInfo
, mas isso resulta em uma busca menos precisa do que se ignorássemos e presumimos que o arquivo é CBR. - MPEG2-TS: foi adicionado suporte a DTS, DTS-LBR e DTS:X Profile2 (275, link em inglês).
- Extração de tipos de áudio de descritores de TS e mapeamento deles para flags de função, permitindo que os usuários façam seleções de faixa de áudio mais bem informadas (#973, link em inglês).
- Foi adicionada mais análise AV1C ao extrator de MP4 para extrair
os valores de
- Áudio:
- Vídeo:
- Mude o construtor
MediaCodecVideoRenderer
, que usa um argumentoVideoFrameProcessor.Factory
, e o substitua por um construtor que usa um argumentoVideoSinkProvider
. Os apps que quiserem injetar umVideoFrameProcessor.Factory
personalizado podem instanciar umCompositingVideoSinkProvider
que usa oVideoFrameProcessor.Factory
personalizado e transmitir o provedor do coletor de vídeo paraMediaCodecVideoRenderer
.
- Mude o construtor
- Texto:
- A serialização de dicas de bitmap foi corrigida para resolver o erro
Tried to marshall a Parcel that contained Binder objects
ao usarDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836, link em inglês). - CEA-708: ignora o valor
rowLock
. A especificação CEA-708-E S-2023 afirma querowLock
ecolumnLock
precisam ser considerados verdadeiros, independentemente dos valores presentes no stream. O suporte acolumnLock
não está implementado, então é presumido que é sempre falso.
- A serialização de dicas de bitmap foi corrigida para resolver o erro
- Imagem:
- Adicionar suporte a miniaturas DASH. As imagens de grade são cortadas, e miniaturas
individuais são fornecidas a
ImageOutput
perto do tempo de apresentação.
- Adicionar suporte a miniaturas DASH. As imagens de grade são cortadas, e miniaturas
individuais são fornecidas a
- DRM:
- Reproduzir amostras não criptografadas de "lead claro" em conteúdo DRM imediatamente por
padrão, mesmo que as chaves das amostras criptografadas posteriores ainda não estejam
prontas. Isso pode causar interrupções no meio da reprodução se as chaves ainda não estiverem prontas
quando a posição de reprodução atingir as amostras criptografadas, mas a reprodução
anteriormente não teria começado. Esse comportamento pode
ser desativado com
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
ouDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Reproduzir amostras não criptografadas de "lead claro" em conteúdo DRM imediatamente por
padrão, mesmo que as chaves das amostras criptografadas posteriores ainda não estejam
prontas. Isso pode causar interrupções no meio da reprodução se as chaves ainda não estiverem prontas
quando a posição de reprodução atingir as amostras criptografadas, mas a reprodução
anteriormente não teria começado. Esse comportamento pode
ser desativado com
- Extensão de IMA:
- Foi corrigido o problema em que anúncios DASH e HLS sem a extensão de arquivo adequada não podiam ser exibidos.
- Sessão:
- Desativação da detecção de clique duplo para apps para TV (#962, link em inglês).
- Correção do problema em que
MediaItem.RequestMetadata
apenas com extras não nulos não é transmitido entre controladores de mídia e sessões - Foi adicionado um construtor à
MediaLibrarySession.Builder
, que só usa umContext
em vez de umMediaLibraryService
.
- Extensão HLS:
- Reduza o
HlsMediaPeriod
para a visibilidade privada do pacote. Esse tipo não pode depender diretamente de fora do pacote HLS. - A resolução busca o início de um segmento com mais eficiência (#1031).
- Reduza o
- Extensões do decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Decodificador MIDI: ignora mensagens de eventos SysEx (#710).
- Utilitários de teste:
- Não pause a reprodução em
TestPlayerRunHelper.playUntilPosition
. O teste mantém a reprodução em estado de reprodução, mas suspende o progresso até que o teste possa adicionar declarações e outras ações.
- Não pause a reprodução em
- App de demonstração:
- Adicione um módulo de demonstração (versão abreviada) para mostrar o uso de
PreloadMediaSource
com o caso de uso de conteúdo de formato curto.
- Adicione um módulo de demonstração (versão abreviada) para mostrar o uso de
Versão 1.3.0-rc01
22 de fevereiro de 2024
Use a versão estável 1.3.0.
Versão 1.3.0-beta01
7 de fevereiro de 2024
Use a versão estável 1.3.0.
Versão 1.3.0-alpha01
15 de janeiro de 2024
Use a versão estável 1.3.0.
Versão 1.2.0
Versão 1.2.1
9 de janeiro de 2024
- ExoPlayer:
- Foi corrigido um problema em que as buscas manuais fora do
intervalo de
LiveConfiguration.min/maxOffset
continuam ajustando o deslocamento de volta paramin/maxOffset
- O problema em que os layouts de canal OPUS e VORBIS estavam errados para 3, 5, 6, 7 e 8 canais (#8396, link em inglês).
- Foi corrigido um problema em que as seleções de faixa após buscar o zero em uma transmissão ao vivo que deixavam o stream começar na posição padrão (#9347, link em inglês)
- Foi corrigido o problema em que novas instâncias de
CmcdData.Factory
recebiam valores negativos debufferedDurationUs
de origens de bloco, resultando em umaIllegalArgumentException
(#888).
- Foi corrigido um problema em que as buscas manuais fora do
intervalo de
- Transformador:
- Contorne um problema em que o codificador gerava no momento da configuração devido à definição de uma taxa de operação alta.
- Extratores:
- Marque as faixas HEVC secundárias (não reproduzíveis) em fotos com movimento JPEG como
ROLE_FLAG_ALTERNATE
para evitar que elas sejam selecionadas automaticamente para reprodução devido à resolução mais alta. - Foi corrigida a detecção incorreta de frames-chave para streams TS H264 (#864, link em inglês).
- A estimativa de duração dos streams de TS com mais de 47.721 segundos foi corrigida (#855, link em inglês).
- Marque as faixas HEVC secundárias (não reproduzíveis) em fotos com movimento JPEG como
- Áudio:
- O processamento de EOS para
SilenceSkippingAudioProcessor
quando chamado várias vezes foi corrigido (#712).
- O processamento de EOS para
- Vídeo:
- Foi adicionada uma solução alternativa para um problema de dispositivo no Galaxy Tab S7 FE, no Chromecast com Google TV e no Lenovo M10 FHD Plus, que faz com que streams AVC de 60 QPS sejam marcados como sem suporte (#693).
- Metadados:
- O bug em que
MediaMetadata
só era preenchido nos comentários do Vorbis com chaves em maiúsculas (#876) foi corrigido. - Capture
OutOfMemoryError
ao analisar frames ID3 muito grandes, o que significa que a reprodução pode continuar sem as informações da tag, em vez de falhar completamente.
- O bug em que
- DRM:
- Estendemos a solução alternativa para o URL de licença
https://default.url
falso da ClearKey para a API 33 ou versões mais recentes. Antes, a solução alternativa só era aplicada exatamente à API 33 (#837). - Correção de
ERROR_DRM_SESSION_NOT_OPENED
ao mudar de conteúdo criptografado para limpar sem uma superfície conectada ao player O erro ocorreu devido ao uso incorreto de um decodificador seguro para reproduzir o conteúdo claro.
- Estendemos a solução alternativa para o URL de licença
- Sessão:
- Coloque as chaves e os valores personalizados em
MediaMetadataCompat
emMediaMetadata.extras
eMediaMetadata.extras
emMediaMetadataCompat
(#756, #802). - A transmissão de
notifyChildrenChanged
para controles legados foi corrigida (#644). - Foi corrigido um bug em que a definição de um horário negativo para um timer
setWhen
desativado da notificação causava uma falha em alguns dispositivos (#903, link em inglês). IllegalStateException
foi corrigido quando o controlador de notificação de mídia não termina de se conectar quando a primeira atualização de notificação é solicitada (#917, link em inglês).
- Coloque as chaves e os valores personalizados em
- Interface:
- Extensão DASH:
- Análise de "f800" como contagem de canais de 5 para Dolby no manifesto DASH (#688, link em inglês).
- Extensões do decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Extensão Cast:
- A criação de um
Timeline
foi limpa para não causar falhas no app quando o carregamento de mídia falha no dispositivo de transmissão (#708).
- A criação de um
Versão 1.2.0
15 de novembro de 2023
- Biblioteca comum:
- Adicione um parâmetro
@Nullable Throwable
aos métodos na interfaceLog.Logger
. O parâmetromessage
desses métodos não contém mais informações sobre oThrowable
transmitido aos métodosLog.{d,i,w,e}()
. Portanto, as implementações precisarão anexar manualmente essas informações, se desejado (possivelmente usandoLogger.appendThrowableString(String, Throwable)
). - Foi corrigido um problema de compatibilidade do Kotlin em que parâmetros de tipo genérico anuláveis
e tipos de elementos de matriz anuláveis não eram detectados como anuláveis Exemplos
são os parâmetros dos métodos
TrackSelectorResult
eSimpleDecoder
(#6792). - Mude o comportamento padrão da interface e das notificações em
Util.shouldShowPlayButton
para mostrar um botão "Play" enquanto a reprodução estiver temporariamente suprimida (por exemplo, devido a uma perda temporária de seleção de áudio). O comportamento legado pode ser mantido usandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
ouMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Faça upgrade do
androidx.annotation:annotation-experimental
para1.3.1
para corrigir https://issuetracker.google.com/251172715. - Mova
ExoPlayer.setAudioAttributes
para a interfacePlayer
.
- Adicione um parâmetro
- ExoPlayer:
- Foram corrigidos problemas de busca em streams AC4 causados pela não identificação correta de amostras somente decodificação (#11000).
- Adicione supressão de reprodução em dispositivos de saída de áudio inadequados (por exemplo, o
alto-falante integrado em dispositivos Wear OS) quando esse recurso for ativado via
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. O motivo da supressão de reprodução será atualizado comoPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
se ocorrer uma tentativa de reprodução quando nenhuma saída de áudio adequada estiver disponível ou se todas as saídas adequadas forem desconectadas durante a reprodução. O motivo da supressão será removido quando uma saída adequada for conectada. - Adicione
MediaSource.canUpdateMediaItem
eMediaSource.updateMediaItem
para aceitar atualizações deMediaItem
após a criação usandoPlayer.replaceMediaItem(s)
. - Permissão de atualizações de
MediaItem
para todas as classesMediaSource
fornecidas pela biblioteca viaPlayer.replaceMediaItem(s)
(#33, #9978). - O
MimeTypes.TEXT_EXOPLAYER_CUES
foi renomeado comoMimeTypes.APPLICATION_MEDIA3_CUES
. - Adicione
PngExtractor
, que envia e lê um arquivo PNG inteiro aoTrackOutput
como uma amostra. - O método
SequenceableLoader.continueLoading(long)
foi aprimorado na interfaceSequenceableLoader
paraSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
contém outros parâmetros, incluindoplaybackSpeed
elastRebufferRealtimeMs
, além doplaybackPositionUs
existente. - O método
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
na interfaceChunkSource
foi aprimorado paraChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Foram adicionados mais campos à geração de registros de dados do cliente de mídia comum (CMCD): privação
de buffer (
bs
), prazo (dl
), taxa de reprodução (pr
) e inicialização (su
) (#8699). - Adição de luma e bitdepth de chroma a
ColorInfo
(#491). - Foram adicionados mais campos à geração de registros de dados do cliente de mídia comum (CMCD, na sigla em inglês): próxima
solicitação de objeto (
nor
) e próxima solicitação de intervalo (nrr
) (#8699). - Foi adicionada uma funcionalidade para transmitir dados de clientes de mídia comuns (CMCD, na sigla em inglês) usando parâmetros de consulta (#553).
- Correção de
ConcurrentModificationException
emExperimentalBandwidthMeter
(#612). - Adicione o parâmetro
MediaPeriodId
aCompositeMediaSource.getMediaTimeForChildMediaTime
. - Suporte a
ClippingMediaSource
(e outras origens com ajustes de horário de período/janela) emConcatenatingMediaSource2
(#11226). - Mude
BaseRenderer.onStreamChanged()
para receber também um argumentoMediaPeriodId
.
- Transformador:
- Analisa dados de rotação EXIF para entradas de imagem.
- O tipo de anotação
TransformationRequest.HdrMode
e as constantes associadas a ele foram removidos. UseComposition.HdrMode
e as constantes associadas. - Simplifique a
OverlaySettings
para corrigir problemas de rotação. - Mudança dos parâmetros
frameRate
edurationUs
deSampleConsumer.queueInputBitmap
paraTimestampIterator
.
- Seleção de faixas:
- Adição de
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
para permitir ou impedir explicitamente a adaptação não perfeita. O padrão permanece no comportamento atual detrue
.
- Adição de
- Extratores:
- MPEG-TS: o último frame é renderizado passando a última unidade de acesso de um stream para a fila de amostra (#7909).
- Corrija o erro de digitação ao determinar
rotationDegrees
. Mudança deprojectionPosePitch
paraprojectionPoseRoll
(#461). - Remova a suposição de que as instâncias
Extractor
podem ser inspecionadas diretamente cominstanceof
. Se você quiser acesso de execução aos detalhes de implementação de umExtractor
, primeiro chameExtractor.getUnderlyingInstance
. - Adição do
BmpExtractor
. - Adição do
WebpExtractor
. - Adição do
HeifExtractor
. - Adicione
o suporte do QuickTime clássico
a
Mp4Extractor
.
- Áudio:
- Foi adicionado suporte a PCM big-endian de 24/32 bits em MP4 e Matroska e analise
a codificação PCM para
lpcm
em MP4. - Foi adicionado suporte à extração de áudio Vorbis em MP4.
- Adição de
AudioSink.getFormatOffloadSupport(Format)
, que recupera o nível de suporte de descarga que o coletor pode fornecer para o formato usando umDefaultAudioOffloadSupportProvider
. Ela retorna o novoAudioOffloadSupport
que contémisFormatSupported
,isGaplessSupported
eisSpeedChangeSupported
. - Adicione
AudioSink.setOffloadMode()
, por meio do qual a configuração de descarga no coletor de áudio é definida. O padrão éAudioSink.OFFLOAD_MODE_DISABLED
. - O descarregamento pode ser ativado pelo
setAudioOffloadPreference
emTrackSelectionParameters
. Se a preferência definida for ativada, o dispositivo oferecerá suporte ao descarregamento para o formato e a seleção de faixa for uma única faixa de áudio, o descarregamento de áudio será ativado. - Se
audioOffloadModePreference
for definido comoAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
, oDefaultTrackSelector
selecionará apenas uma faixa de áudio e somente se o formato dessa faixa for compatível com o descarregamento. Se nenhuma faixa de áudio for compatível no descarregamento, nenhuma faixa será selecionada. - O suporte sem lacunas para descarregamento antes do nível 33 da API foi desativado devido a um problema de posição de reprodução após a transição da faixa.
- O parâmetro
enableOffload
foi removido da assinatura do métodoDefaultRenderersFactory.buildAudioSink
. - Remoção do método
DefaultAudioSink.Builder.setOffloadMode
. - O valor intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
foi removido. - Foi adicionado suporte a metadados sem lacunas do Opus durante a reprodução de descarregamento.
- A recuperação do renderizador é permitida desativando o descarregamento em caso de falha na primeira gravação (#627, link em inglês).
- Ativar programação de descarregamento por padrão para reprodução descarregada somente de áudio.
- Exclua
ExoPlayer.experimentalSetOffloadSchedulingEnabled
eAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
foi renomeado comoonSleepingForOffloadChanged
, eonExperimentalOffloadedPlayback
comoonOffloadedPlayback
.- As interfaces e definições
TrackSelectionParameters
relacionadas ao modo de descarga de áudio foram movidas para uma classeAudioOffloadPreferences
interna. - Adicione callbacks
onAudioTrackInitialized
eonAudioTrackReleased
aAnalyticsListener
,AudioRendererEventListener
eAudioSink.Listener
. - O problema de estouro do buffer de áudio do DTS Express foi corrigido (#650, link em inglês).
- O bug em que a verificação de recursos para E-AC3-JOC gera uma
IllegalArgumentException
(#677) foi corrigido.
- Foi adicionado suporte a PCM big-endian de 24/32 bits em MP4 e Matroska e analise
a codificação PCM para
- Vídeo:
- Permitir que
MediaCodecVideoRenderer
use umVideoFrameProcessor.Factory
personalizado. - Foi corrigido um bug em que o primeiro frame não podia ser renderizado se o stream de áudio começava com carimbos de data/hora negativos (#291).
- Permitir que
- Texto:
- A
ExoplayerCuesDecoder
foi removida. As faixas de texto comsampleMimeType = application/x-media3-cues
agora são processadas diretamente porTextRenderer
, sem a necessidade de uma instância deSubtitleDecoder
.
- A
- Metadados:
MetadataDecoder.decode
não será mais chamado para amostras "somente decodificação", porque a implementação precisa retornar um valor nulo de qualquer maneira.
- Efeito:
- Adicionamos
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
na fila de entrada de bitmap por carimbo de data/hora. - Mude
VideoFrameProcessor.registerInputStream()
para não causar bloqueio. Os apps precisam implementarVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Mudança dos parâmetros
frameRate
edurationUs
deVideoFrameProcessor.queueInputBitmap
paraTimestampIterator
.
- Adicionamos
- Extensão de IMA:
- O bug em que uma transmissão ao vivo DASH de vários períodos que não é o primeiro item de uma playlist pode gerar uma exceção (#571, link em inglês).
- Libere o StreamManager antes de chamar
AdsLoader.destroy()
. - Faça o upgrade da versão do SDK do IMA para 3.31.0.
- Sessão:
- A definição do comportamento do serviço em primeiro plano das notificações como
FOREGROUND_SERVICE_IMMEDIATE
emDefaultMediaNotificationProvider
(#167). - Use apenas
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
acima do nível 31 para evitar problemas com a API descontinuada em dispositivos Samsung (#167). - Use o controlador de notificações de mídia como proxy para definir os comandos disponíveis e o layout personalizado usado para preencher a notificação e a sessão da plataforma.
- Converta eventos de botão de mídia que são recebidos por
MediaSessionService.onStartCommand()
na Media3 em vez de roteá-los para a sessão da plataforma e de volta para a Media3. Com isso, o controlador do autor da chamada é sempre o controlador de notificações de mídia, e os apps podem reconhecer facilmente as chamadas provenientes da notificação da mesma forma em todos os níveis de API compatíveis. - Correção do bug em que o
MediaController.getCurrentPosition()
não avançava quando conectado a umMediaSessionCompat
legado. - Adicione
MediaLibrarySession.getSubscribedControllers(mediaId)
para maior comodidade. - Substitua
MediaLibrarySession.Callback.onSubscribe()
para declarar a disponibilidade do ID pai que assina o controle. Se for bem-sucedido, a assinatura será aceita enotifyChildrenChanged()
será chamado imediatamente para informar o navegador (#561). - Adicione o módulo de demonstração da sessão para o Automotive OS e ative-a para o Android Auto.
- Não defina a fila da sessão do framework quando
COMMAND_GET_TIMELINE
não estiver disponível para o controlador de notificações de mídia. Com o Android Auto como controlador do cliente lendo a sessão do framework, o botãoqueue
na interface do Android Auto não é mostrado (#339). - Use
DataSourceBitmapLoader
por padrão em vez deSimpleBitmapLoader
(#271, #327). - Adição de
MediaSession.Callback.onMediaButtonEvent(Intent)
, que permite que os apps substituam o processamento padrão de eventos do botão de mídia.
- A definição do comportamento do serviço em primeiro plano das notificações como
- Interface:
- Adicione uma implementação de
Player.Listener
para dispositivos Wear OS que processam a supressão de reprodução devido aPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
iniciando uma caixa de diálogo do sistema para permitir que o usuário conecte uma saída de áudio adequada (por exemplo, fones de ouvido Bluetooth). O listener retoma automaticamente a reprodução se um dispositivo adequado estiver conectado dentro de um tempo limite configurável (o padrão é cinco minutos).
- Adicione uma implementação de
- Downloads:
- Declare o tipo de serviço em primeiro plano "data sync" para
DownloadService
para compatibilidade com o Android 14. Ao usar esse serviço, o app também precisa adicionardataSync
comoforegroundServiceType
no manifesto e adicionar a permissãoFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- Declare o tipo de serviço em primeiro plano "data sync" para
- Extensão HLS:
- A playlist ao vivo de HLS foi atualizada com um intervalo calculado a partir do horário de início do último carregamento em vez do horário da conclusão do último carregamento (#663).
- Extensão DASH:
- Permitir vários identificadores DASH no URL do modelo de segmento.
- Foi adicionado suporte experimental à análise de legendas durante a extração. Esse
oferece um suporte melhor para a mesclagem de legendas sobrepostas, incluindo
a solução de oscilações ao fazer a transição entre segmentos de legendas. É
possível ativar isso usando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(288, link em inglês).
- Extensão RTSP:
- Foi corrigida uma disputa que poderia levar a
IndexOutOfBoundsException
ao voltar ao TCP ou travar a reprodução em algumas situações. - Verificação do estado na configuração do RTSP ao retornar o estado de carregamento de
RtspMediaPeriod
(#577). - Os métodos de solicitação de Rtsp personalizados foram ignorados no cabeçalho público de resposta de opções (#613).
- Uso do valor do tempo limite da resposta de configuração do RTSP no intervalo de tempo de envio de solicitações de opções do RTSP de sinal de atividade (#662, link em inglês).
- Foi corrigida uma disputa que poderia levar a
- Extensões do decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Libere o módulo decodificador MIDI, que oferece suporte à reprodução de arquivos MIDI padrão usando a biblioteca Jsyn para sintetizar áudio.
DecoderOutputBuffer.shouldBeSkipped
foi adicionado para marcar diretamente os buffers de saída que não precisam ser apresentados. Tem preferência sobreC.BUFFER_FLAG_DECODE_ONLY
, que será descontinuado.Decoder.setOutputStartTimeUs
eSimpleDecoder.isAtLeastOutputStartTimeUs
foram adicionados para permitir que os decodificadores eliminem amostras somente de decodificação antes do horário de início. Isso deve ter preferência sobreBuffer.isDecodeOnly
, que será descontinuado.- Correção do bug na publicação do artefato decodificador MIDI no repositório Maven. O
artefato foi renomeado como
media3-exoplayer-midi
(#734).
- Extensão do Leanback:
- O bug em que a desativação de uma plataforma poderia causar uma
ArithmeticException
no código de Leanback foi corrigido (#617).
- O bug em que a desativação de uma plataforma poderia causar uma
- Utilitários de teste:
- Tornar
TestExoPlayerBuilder
eFakeClock
compatíveis com testes de interface do Espresso e testes de interface do Compose. Isso corrige um bug em que a reprodução avança de forma não determinada durante as interações de visualização do Espresso ou do Compose.
- Tornar
- Símbolos descontinuados foram removidos:
- Remover
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
eTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. UseComposition.Builder.setHdrMode(int)
e transmitaComposition
paraTransformer.start(Composition, String)
. - Remoção do método
DownloadNotificationHelper.buildProgressNotification
descontinuado e use um método não descontinuado que use um parâmetronotMetRequirements
.
- Remover
Versão 1.2.0-rc01
1º de novembro de 2023
Usar a versão estável 1.2.0.
Versão 1.2.0-beta01
19 de outubro de 2023
Usar a versão estável 1.2.0.
Versão 1.2.0-alpha02
29 de setembro de 2023
Usar a versão estável 1.2.0.
Versão 1.2.0-alpha01
17 de agosto de 2023
Usar a versão estável 1.2.0.
Versão 1.1.0
Versão 1.1.1
16 de agosto de 2023
- Biblioteca comum:
- A dependência
multidex
adicionada acidentalmente foi removida de todos os módulos (#499, link em inglês).
- A dependência
- ExoPlayer:
- Foi corrigido um problema no
PlaybackStatsListener
, em quePlaybackStats
falso era criado depois que a playlist é apagada - Foram adicionados mais campos à geração de registros de dados do cliente de mídia comum (CMCD, na sigla em inglês): formato de streaming (sf), tipo de stream (st), versão (v), birate superior (tb), duração do objeto (d), capacidade medida (mtp) e tipo de objeto (ot) (#8699).
- Foi corrigido um problema no
- Áudio:
- Foi corrigido um bug em que o
Player.getState()
nunca fazia a transição paraSTATE_ENDED
ao reproduzir arquivos muito curtos (#538, link em inglês).
- Foi corrigido um bug em que o
- Descarregamento de áudio:
- Inclua as páginas de cabeçalho do ID do Ogg e de cabeçalho dos comentários como bitstream para reprodução Opus descarregada de acordo com a RFC 7845.
- Vídeo:
- H.265/HEVC: corrigir a análise de informações da imagem de referência de curto e longo prazo do SPS.
- Texto:
- CEA-608: muda a lógica de truncamento de sugestões para considerar apenas texto visível. Anteriormente, o recuo e o deslocamento de tabulação eram incluídos ao limitar o tamanho da indicação a 32 caracteres, o que estava tecnicamente correto pela especificação (#11019).
- Extensão de IMA:
- Faça o upgrade da versão do SDK do IMA para 3.30.3.
- Sessão:
- Adicione um layout personalizado ao estado do controle e forneça um getter para
acessá-lo. Quando o layout personalizado muda,
MediaController.Listener.onCustomLayoutChanged
é chamado. Apps que querem enviar layouts personalizados diferentes para diferentes controles da Media3 podem fazer isso emMediaSession.Callback.onConnect
usando umAcceptedResultBuilder
para garantir que o layout personalizado esteja disponível para o controle quando a conexão for concluída. - Os casos em que
MediaLibraryServiceLegacyStub
enviava um erro para umResult
sem suporte a isso, que produzia umUnsupportedOperationException
(#78) foram corrigidos - Foi corrigida a maneira como
PlayerWrapper
cria umVolumeProviderCompat
determinandovolumeControlType
por meio de comandos legados (COMMAND_ADJUST_DEVICE_VOLUME
eCOMMAND_SET_DEVICE_VOLUME
) e novos comandos (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
eCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Adicione um layout personalizado ao estado do controle e forneça um getter para
acessá-lo. Quando o layout personalizado muda,
Versão 1.1.0
5 de julho de 2023
- Biblioteca comum:
- Foi adicionado um motivo de supressão para rota de áudio inadequada e tocar quando estiver pronto o motivo da mudança para ser suprimido por muito tempo. (15).
- Adicione comandos ao player:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Adicionamos métodos sobrecarregados ao Player para permitir que os usuários especifiquem sinalizações de
volume:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Adicionamos
Builder
aDeviceInfo
e descontinuamos o construtor existente. DeviceInfo.routingControllerId
foi adicionado para especificar o ID do controlador de roteamento para reproduções remotas.Player.replaceMediaItem(s)
foi adicionado como um atalho para adicionar e remover itens na mesma posição (#8046).
- ExoPlayer:
- Permitir que o ExoPlayer tenha controle dos métodos de volume do dispositivo somente se
ativado explicitamente Use
ExoPlayer.Builder.setDeviceVolumeControlEnabled
para ter acesso a:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
esetDeviceVolume(int, int)
increaseDeviceVolume(int)
eincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
edecreaseDeviceVolume(int, int)
- Adição de
FilteringMediaSource
, que permite filtrar os tipos de faixa disponíveis em umMediaSource
. - Foi adicionado suporte à inclusão de dados do cliente de mídia comum (CMCD, na sigla em inglês) nas
solicitações enviadas de formatos de streaming adaptáveis DASH, HLS e
SmoothStreaming. Os campos a seguir,
br
,bl
,cid
,rtp
esid
, foram incorporados (#8699). Estrutura e métodos da API:- A geração de registros de CMCD está desativada por padrão. Use
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
para ativá-la. - Todas as chaves são ativadas por padrão. Substitua
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
para filtrar quais chaves são registradas. - Substitua
CmcdConfiguration.RequestConfig.getCustomData()
para ativar a geração de registros de chaves personalizadas.
- A geração de registros de CMCD está desativada por padrão. Use
- Foi adicionada outra ação ao manifesto da demonstração principal para facilitar
a inicialização do app de demonstração com um arquivo
*.exolist.json
personalizado (#439). - Adição de
ExoPlayer.setVideoEffects()
para usarEffect
durante a reprodução do vídeo. - Atualize
SampleQueue
para armazenarsourceId
como umlong
em vez de umint
. Isso muda as assinaturas dos métodos públicosSampleQueue.sourceId
eSampleQueue.peekSourceId
. - Adicione parâmetros aos métodos
shouldStartPlayback
eonTracksSelected
doLoadControl
que permitam associar esses métodos aoMediaPeriod
relevante. - Mude a assinatura de
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
adicionando um parâmetro de linha do tempo que contenha os períodos com os UIDs usados como chaves no mapa. Isso é necessário para evitar problemas de simultaneidade com transmissões ao vivo de vários períodos. - Suspensão do uso de
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. Em vez disso, a variante dos métodos sem omediaTimeOffsetUs
pode ser chamada. Mesmo para as variantes descontinuadas, o deslocamento não é mais adicionado astartTimeUs
eendTimeUs
dos objetosMediaLoadData
enviados pelo dispatcher. - Renomeie
ExoTrackSelection.blacklist
comoexcludeTrack
eisBlacklisted
comoisTrackExcluded
. - Foi corrigido um comportamento inconsistente entre
ExoPlayer.setMediaItem(s)
eaddMediaItem(s)
quando chamado em uma playlist vazia.
- Permitir que o ExoPlayer tenha controle dos métodos de volume do dispositivo somente se
ativado explicitamente Use
- Transformador:
- A
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
foi removida. UseExoPlayerAssetLoader.Factory(MediaSource.Factory)
eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - A
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
foi removida. - Foi corrigido um bug em que a transformação podia ficar travada, levando ao tempo limite do muxer, se o final do stream de vídeo fosse sinalizado no momento em que o processamento de um frame de entrada estava pendente.
- Consulte codecs usando
MediaCodecList
em vez de usar utilitáriosfindDecoder/EncoderForFormat
para expandir o suporte. - A configuração de frame B no
DefaultEncoderFactory
foi removida, já que ela não funciona em alguns dispositivos.
- A
- Seleção de faixas:
- Adição de
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
, que fica desativado por padrão. Quando ativada, oDefaultTrackSelector
acionará uma nova seleção de faixa quando os recursos do renderizador mudarem.
- Adição de
- Extratores:
- Áudio:
- O bug em que algumas reproduções falham quando o encapsulamento está ativado e
AudioProcessors
estão ativos, por exemplo, para corte sem lacunas (#10847, link em inglês). - Encapsule frames Opus em pacotes Ogg em reproduções diretas (descarregamento).
- Amplie a posição atual durante o sono com a programação de descarga.
Renderer.release()
eAudioSink.release()
foram adicionados para liberar os recursos ao final do ciclo de vida do jogador.- Ouvir as mudanças nos recursos de áudio em
DefaultAudioSink
. Adicione um parâmetro obrigatóriocontext
no construtor deDefaultAudioSink
, com o qualDefaultAudioSink
será registrado como listener para oAudioCapabilitiesReceiver
e atualizará a propriedadeaudioCapabilities
quando informado com uma mudança de recursos. - Propagar mudanças de recursos de áudio usando um novo evento
onAudioCapabilitiesChanged
na interfaceAudioSink.Listener
e uma nova interfaceRendererCapabilities.Listener
que aciona eventosonRendererCapabilitiesChanged
. - Adição de
ChannelMixingAudioProcessor
para aplicar escalonamento/mixagem a canais de áudio. - Foi adicionado o novo valor de int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
aDecoderDiscardReasons
para descartar o decodificador de áudio quando o modo de desvio for possível depois que os recursos de áudio mudarem. - Foi adicionado suporte à reprodução direta para DTS Express e DTS:X (#335, link em inglês).
- O bug em que algumas reproduções falham quando o encapsulamento está ativado e
- Vídeo:
- Faça com que
MediaCodecVideoRenderer
informe umVideoSize
com largura e altura de 0 quando o renderizador estiver desativado.Player.Listener.onVideoSizeChanged
é chamado adequadamente quandoPlayer.getVideoSize()
muda. Com essa mudança, o tamanho do vídeo do ExoPlayer comMediaCodecVideoRenderer
terá uma largura e altura de 0 quandoPlayer.getCurrentTracks
não oferecer suporte a vídeos ou o tamanho da faixa de vídeo com suporte ainda não for determinado.
- Faça com que
- DRM:
- Reduza a visibilidade de vários métodos somente internos no
DefaultDrmSession
que não precisam ser chamados de fora do pacote DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Reduza a visibilidade de vários métodos somente internos no
- Muxer:
- Adicione uma nova biblioteca multiplex que pode ser usada para criar um arquivo de contêiner MP4.
- Extensão de IMA:
- Ativar transmissões DASH ao vivo de vários períodos para DAI. A implementação atual ainda não oferece suporte à busca em transmissões ao vivo (#10912).
- Foi corrigido um bug em que um novo grupo de anúncios era inserido nas transmissões ao vivo porque a posição do conteúdo calculada em linhas do tempo consecutivas varia um pouco.
- Sessão:
- Foi adicionado um método auxiliar
MediaSession.getControllerForCurrentRequest
para receber informações sobre o controle que está chamando um métodoPlayer
. - O
androidx.media3.session.MediaButtonReceiver
foi adicionado para permitir que os apps implementem a retomada da reprodução com eventos do botão de mídia enviados por, por exemplo, um fone de ouvido Bluetooth (#167). - Foi adicionada a implementação padrão a
MediaSession.Callback.onAddMediaItems
para permitir que oMediaItems
solicitado seja transmitido paraPlayer
se ele tiverLocalConfiguration
(por exemplo, URI) (#282). - Os botões de comando "ir para o anterior" e "procurar para o próximo" foram adicionados à visualização de notificações de mídia compacta por padrão no Android 12 e versões anteriores (#410).
- Foi adicionada a implementação padrão a
MediaSession.Callback.onAddMediaItems
para permitir que oMediaItems
solicitado seja transmitido paraPlayer
se ele tiverLocalConfiguration
(por exemplo, URI) (#282). - Os botões de comando "ir para o anterior" e "procurar para o próximo" foram adicionados à visualização de notificações de mídia compacta por padrão no Android 12 e versões anteriores (#410).
- Foi adicionado um método auxiliar
- Interface:
- Os métodos utilitários
shouldShowPlayButton
ehandlePlayPauseButtonAction
foram adicionados para gravar elementos personalizados da interface com um botão de reproduzir/pausar.
- Os métodos utilitários
- Extensão RTSP:
- Extensão DASH:
- Removemos o ajuste de horário de mídia de
MediaLoadData.startTimeMs
eMediaLoadData.endTimeMs
para streams DASH de vários períodos. - Foi corrigido um bug em que a repreparação de uma fonte de mídia da Dash ao vivo de vários períodos
gerava um
IndexOutOfBoundsException
(#10838).
- Removemos o ajuste de horário de mídia de
- Extensão HLS:
- Adicione
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
para definir um tempo limite para que a linha de execução de carregamento aguarde aTimestampAdjuster
ser inicializada. Se a inicialização não for concluída antes do tempo limite, umaPlaybackException
será gerada para evitar a interrupção infinita da reprodução. O tempo limite é definido como zero por padrão (323, link em inglês).
- Adicione
- Utilitários de teste:
- Verifique se o esquema de URI não diferencia maiúsculas de minúsculas em
DataSourceContractTest
.
- Verifique se o esquema de URI não diferencia maiúsculas de minúsculas em
- Símbolos descontinuados foram removidos:
- Remova os construtores
DefaultAudioSink
e useDefaultAudioSink.Builder
. - Remova
HlsMasterPlaylist
e useHlsMultivariantPlaylist
. - A
Player.stop(boolean)
foi removida. UsePlayer.stop()
ePlayer.clearMediaItems()
(sereset
fortrue
). - Para melhorar o desempenho, remova dois construtores
SimpleCache
descontinuados e use um construtor não descontinuado que use umDatabaseProvider
. - Remova o construtor
DefaultBandwidthMeter
e useDefaultBandwidthMeter.Builder
. - Remova os construtores
DefaultDrmSessionManager
e useDefaultDrmSessionManager.Builder
. - Remova dois construtores
HttpDataSource.InvalidResponseCodeException
descontinuados e use um construtor não descontinuado que aceite campos adicionais(cause
,responseBody
) para melhorar a geração de registros de erros. - Remova
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
eDownloadHelper.forSmoothStreaming
. Em vez disso, useDownloadHelper.forMediaItem
. - O construtor
DownloadService
descontinuado foi removido e use um construtor não descontinuado que inclua a opção de fornecer um parâmetrochannelDescriptionResourceId
. - Remova as constantes de string descontinuadas dos conjuntos de caracteres (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
eUTF16LE_NAME
) e use os conjuntos de caracteres Kotlin do pacotekotlin.text
,java.nio.charset.StandardCharsets
oucom.google.common.base.Charsets
. - Remoção do construtor
WorkManagerScheduler
descontinuado e use um construtor não descontinuado que inclua a opção de fornecer um parâmetroContext
. - Removemos os métodos descontinuados
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
ecreateSampleFormat
, que foram usados para instanciar a classeFormat
. Em vez disso, useFormat.Builder
para criar instâncias deFormat
. - Remova os métodos descontinuados
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
ecopyWithVideoSize
. Use os métodosFormat.buildUpon()
e setter. - O
ExoPlayer.retry()
descontinuado foi removido. Useprepare()
- Remoção do construtor descontinuado
DefaultTrackSelector
de argumento zero. UseDefaultTrackSelector(Context)
- O construtor
OfflineLicenseHelper
descontinuado foi removido. UseOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - O construtor
DownloadManager
descontinuado foi removido e use o construtor que usa umExecutor
. - Remova os construtores
Cue
descontinuados e useCue.Builder
. - O construtor
OfflineLicenseHelper
descontinuado foi removido. UseOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Remova quatro métodos
AnalyticsListener
descontinuados:onDecoderEnabled
, useonAudioEnabled
e/ouonVideoEnabled
.onDecoderInitialized
, useonAudioDecoderInitialized
e/ouonVideoDecoderInitialized
.onDecoderInputFormatChanged
, useonAudioInputFormatChanged
e/ouonVideoInputFormatChanged
.onDecoderDisabled
, useonAudioDisabled
e/ouonVideoDisabled
.
- Remova os
Player.Listener.onSeekProcessed
eAnalyticsListener.onSeekProcessed
descontinuados. Em vez disso, useonPositionDiscontinuity
comDISCONTINUITY_REASON_SEEK
. - Remova
ExoPlayer.setHandleWakeLock(boolean)
e usesetWakeMode(int)
. - O
DefaultLoadControl.Builder.createDefaultLoadControl()
descontinuado foi removido. Usebuild()
. - Remova o
MediaItem.PlaybackProperties
descontinuado. Em vez dele, useMediaItem.LocalConfiguration
. O campo descontinuadoMediaItem.playbackProperties
agora é do tipoMediaItem.LocalConfiguration
.
- Remova os construtores
Versão 1.1.0-rc01
21 de junho de 2023
Use a versão estável 1.1.0.
Versão 1.1.0-beta01
7 de junho de 2023
Use a versão estável 1.1.0.
Versão 1.1.0-alpha01
10 de maio de 2023
Use a versão estável 1.1.0.
Versão 1.0.0
Versão 1.0.2
18 de maio de 2023
Lançamento de androidx.media3:media3-*:1.0.2
.
A versão 1.2.0 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.7 (link em inglês).
Esta versão contém as seguintes mudanças desde a versão 1.0.1:
- Biblioteca principal:
- Adicione
Buffer.isLastSample()
, que indica seBuffer
contém a sinalizaçãoC.BUFFER_FLAG_LAST_SAMPLE
. - Correção do problema em que o último frame pode não ser renderizado se a última amostra com frames for removida da fila sem ler a amostra "fim do stream". (#11079).
- Adicione
- Extratores:
- A análise de SPS H.265 em arquivos MPEG-TS foi corrigida reutilizando a lógica de análise já usada por extratores RTSP e MP4 (#303).
- Texto:
- SSA: foi adicionado suporte a arquivos UTF-16 se eles começarem com uma marca de ordem de bytes (#319).
- Sessão:
- Foi corrigido um problema em que
MediaController
não atualiza os comandos disponíveis quando conectado a umMediaSessionCompat
legado que atualiza as ações - O bug que impedia o
MediaLibraryService
de retornar nulo para uma chamada da interface do sistema paraCallback.onGetLibraryRoot
comparams.isRecent == true
na API 30 (#355) foi corrigido. - O vazamento de memória de
MediaSessionService
ouMediaLibraryService
foi corrigido (#346). - O bug em que uma
Timeline
e uma atualização de posição combinadas em umaMediaSession
podem fazer com que umaMediaController
gere umaIllegalStateException
- Foi corrigido um problema em que
Versão 1.0.1
18 de abril de 2023
Lançamento de androidx.media3:media3-*:1.0.1
.
A versão 1.0.1 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.6 (link em inglês).
- Biblioteca principal:
- A substituição da transmissão ao vivo desejada foi redefinida ao buscar a posição padrão (#11051).
- O bug em que os streams de amostra vazios na mídia podiam travar a reprodução foi corrigido
- Sessão:
- Foi corrigido um bug em que vários itens de fila idênticos publicados por um
MediaSessionCompat
legado resultam em uma exceção emMediaController
(#290). - Foi adicionado um encaminhamento ausente de
MediaSession.broadcastCustomCommand
aoMediaControllerCompat.Callback.onSessionEvent
legado (293). - Correção do bug em que chamar
MediaSession.setPlayer
não atualiza os comandos disponíveis. - Foi corrigido o problema em que instâncias
TrackSelectionOverride
enviadas de umMediaController
são ignoradas se referenciam um grupo comFormat.metadata
(#296). - Correção do problema em que
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
precisa estar disponível para acessar metadados por meio doMediaSessionCompat
legado. - Foi corrigido o problema em que instâncias
MediaSession
em uma linha de execução em segundo plano causavam falhas quando usadas emMediaSessionService
(#318). - Foi corrigido um problema em que um receptor de botão de mídia era declarado pela biblioteca sem a intenção do app (314, link em inglês).
- Foi corrigido um bug em que vários itens de fila idênticos publicados por um
- DASH:
- O processamento de linhas do tempo de segmentos vazios foi corrigido (#11014, link em inglês).
- RTSP:
- Tente novamente com TCP se a configuração do RTSP com o UDP falhar com o erro 461 supportedTransport (#11069).
Versão 1.0.0
22 de março de 2023
Lançamento de androidx.media3:media3-*:1.0.0
.
A versão 1.0.0 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.5 (link em inglês).
Não há mudanças desde a versão 1.0.0-rc02.
Versão 1.0.0-rc02
2 de março de 2023
Lançamento de androidx.media3:media3-*:1.0.0-rc02
.
A versão 1.0.0-rc02 contém estas confirmações.
Ela corresponde à versão do ExoPlayer 2.18.4 (link em inglês).
- Biblioteca principal:
- Downloads:
- A diferença máxima do horário de início de dois segmentos a serem
mesclados foi configurável em
SegmentDownloader
e subclasses (#248).
- A diferença máxima do horário de início de dois segmentos a serem
mesclados foi configurável em
- Áudio:
- Vídeo:
- Mapeie o formato HEVC HDR10 para
HEVCProfileMain10HDR10
em vez deHEVCProfileMain10
. - Foi adicionada uma solução alternativa para um problema do dispositivo no Chromecast com Google TV e no Lenovo M10 FHD Plus, que faz com que streams AVC de 60 QPS sejam marcados como incompatíveis (#10898).
- Foram corrigidos problemas de performance na liberação de frames ao abrir mídia com um frame rate muito mais alto que a taxa de atualização da tela.
- Mapeie o formato HEVC HDR10 para
- Transmissão:
- O
STATE_IDLE
temporário ao fazer a transição entre itens de mídia foi corrigido (245, link em inglês).
- O
- RTSP:
- Captura da ("A Criação do código de acesso") gerada na análise de mensagens de resposta de RTSP inválidas (#10971, link em inglês).
- Sessão:
- Foi corrigido um bug em que o botão de reprodução/pausa de notificação não é atualizado com o estado do player (#192, link em inglês).
- Extensão de IMA:
- Foi corrigido um bug que impedia a inicialização de streams da DAI sem anúncios
porque o primeiro (e, no caso sem anúncios, o único) evento
LOADED
não era recebido.
- Foi corrigido um bug que impedia a inicialização de streams da DAI sem anúncios
porque o primeiro (e, no caso sem anúncios, o único) evento
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
- Criação:
- 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:
- A
Transformer.Builder.setOutputMimeType(String)
foi removida. Esse recurso foi removido. O tipo MIME sempre será MP4 quando o multiplexador padrão for usado.
- A
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
- Transmissão:
Versão 1.0.0-beta01
16 de junho de 2022
Lançamento de androidx.media3:media3-*:1.0.0-beta01
.
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 interface detelevision
não têm essas restrições, e o formato com a maior contagem de canais vai ter preferência.television
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 interface 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úncios:
- 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 master, é preciso as adicionar à playlist master 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.