Media3
| Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
|---|---|---|---|---|
| 21 de outubro de 2026 | 1.11.1 | - | - | 1.12.0-alpha01 |
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.11.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 using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views 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 inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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.11.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 using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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.
Version 1.12.0
Versão 1.12.0-alpha01
21 de outubro de 2026
A versão 1.12.0-alpha01 contém as seguintes confirmações.
- Biblioteca comum:
- Adição de
C.COLOR_SPACE_DISPLAY_P3e suporte ao espaço de cores Display P3 nos mapeamentos de cores ISOMediaFormatUtileColorInfo. - Adicionamos um registro central de
Flagspara gerenciar flags de recursos experimentais e lançamento gradual (Flags.setCanaryModeEnabled). Migramos muitos métodos@ExperimentalApipara usar a nova API de flags. - Adicione
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categorieseMediaMetadata.Builder.setCategories(List<String>). - Substitua
androidx.media3.common.util.NonNullApipororg.jspecify.annotations.NullMarkeddo JSpecify.
- Adição de
- ExoPlayer:
- Correção de um problema em que a reprodução de vários períodos do DASH ficava travada quando o primeiro bloco do próximo período não era carregado (#3396).
- Informa
wasCanceled = trueemAnalyticsListener.onLoadErroreMediaSourceEventListener.onLoadErrorquando as novas tentativas de carregamento se esgotam. - Suporte ao registro de várias instâncias de
VideoFrameMetadataListenerusandoExoPlayer.addVideoFrameMetadataListenereExoPlayer.removeVideoFrameMetadataListener, descontinuandoExoPlayer.setVideoFrameMetadataListenereExoPlayer.clearVideoFrameMetadataListener. - Adicione suporte a anúncios em conteúdo de vários períodos (por exemplo, DASH) dividindo
e compensando o
AdPlaybackStatepara cada período. - Correção de uma disputa em
PreCacheHelperem que o cancelamento de uma solicitação de preparação em andamento ainda podia iniciar downloads em segundo plano. - Limite
setLoadOnlySelectedTracks(true)emProgressiveMediaSourceeDefaultMediaSourceFactorypara filtrar apenas faixas de vídeo e imagem não selecionadas. As faixas de áudio e texto são sempre carregadas para permitir a troca de faixas sem interrupções e sem novo armazenamento em buffer. - Ative
setLoadOnlySelectedTracks(true)por padrão emProgressiveMediaSourceeDefaultMediaSourceFactory. Isso economiza memória e permite que os cálculos de alocação de buffer doDefaultLoadControlfuncionem com mais precisão quando nem todas as faixas são selecionadas. Isso pode causar mais armazenamento em buffer se as faixas de vídeo ou imagem não selecionadas forem ativadas no meio da reprodução. - Correção de um problema em que
Player.getCurrentPosition()podia retornar valores desatualizados (atualizando apenas algumas vezes por segundo) quando a programação dinâmica estava ativada (#3286). - Correção de um problema em que uma diminuição ou redefinição inesperada na posição do cabeçote de reprodução
AudioTrackpoderia ser tratada incorretamente como um estouro de número inteiro, fazendo com que a reprodução ficasse travada no armazenamento em buffer (#3407). - Remova o experimental
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean). - Evitamos reativações desnecessárias do renderizador e falhas ao retornar de intersticiais ou anúncios para conteúdo cortado no final (#3371).
- Correção de um problema em que um erro de renderização em um item de playlist futuro podia
interromper prematuramente a reprodução atual quando
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONestava ativado. - Correção de um
NullPointerExceptionque poderia ocorrer seExoPlayerfizesse a transição de renderizadores para um período de mídia não preparado quandoFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONestivesse ativado. - Correção de um problema em que os frames de vídeo podiam ser pulados ou descartados inesperadamente
durante a programação dinâmica quando
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSestá ativado. - Correção de uma
ArrayIndexOutOfBoundsExceptionem listeners de análise ao interromper a reprodução durante um anúncio em uma transmissão ao vivo (#3423). - Correção de um problema em que
PreloadMediaSourcepodia postar inesperadamente um evento de pré-carregamento quandopreload()nunca era chamado (#3408). - Correção de um problema em que
Format.subsampleOffsetUsera ignorado para faixas de metadados, causando carimbos de data/hora de reprodução incorretos em comandos de emenda SCTE-35 decodificados (#3413). - Correção de um vazamento de memória em
PreloadMediaSourceeDefaultPreloadManagerquandopreload()é chamado várias vezes na mesma origem (link em inglês). - Correção de uma
NullPointerExceptionao liberarAdsMediaSourceenquanto uma atualização da linha do tempo do conteúdo está pendente (#3442). - Correção de um problema em que a reprodução de mídia progressiva podia pular para a posição errada quando um carregamento após uma busca (ou ao iniciar a reprodução em uma posição diferente de zero) falhava e era repetido (#3440).
- Adicionamos uma solução alternativa para o congelamento do decodificador H.264 do Xiaomi TV Stick 4K (MiTV-AYFR0) em mudanças de resolução sem interrupções (#3457).
- Correção de um
NullPointerExceptionemSteeringManifestTrackerquando o rastreador é interrompido antes que uma conclusão de carregamento postada ou um callback de erro seja executado (#3443). - Suporte à reprodução de metadados programados HAGC (ST 2094-50) de faixas de metadados
em caixas
mebxem arquivos MP4. - Correção de um problema em que períodos de mídia de preparação lenta em uma playlist podiam ser pulados.
- CompositionPlayer:
- Suporte à configuração da taxa de frames da agregação de frames de vídeo usando
Composition.Builder.setVideoFrameAggregationParameterspara fluxos de trabalho de reprodução. - Correção de quedas de frames em composições de várias sequências causadas por incompatibilidades de quantização ou arredondamento de carimbo de data/hora, selecionando o frame com o carimbo de data/hora mais próximo durante a agregação de frames. Isso é ativado apenas na API 29, porque requer um frame adicional em andamento por sequência de vídeo.
- Suporte à configuração da taxa de frames da agregação de frames de vídeo usando
- Transformador:
- Suporte à configuração do frame rate da agregação de frames de vídeo usando
Composition.Builder.setVideoFrameAggregationParameterspara fluxos de trabalho de exportação. - Correção de quedas de frames em composições de várias sequências causadas por incompatibilidades de quantização ou arredondamento de carimbo de data/hora, selecionando o frame com o carimbo de data/hora mais próximo durante a agregação de frames. Isso é ativado apenas na API 29, porque requer um frame adicional em andamento por sequência de vídeo.
- Respeite
Transformer#setAudioMimeType(AUDIO_RAW)quandoAudioProcessorsfor usado. Antes dessa correção, solicitarMimeTypes.AUDIO_RAWe aplicar umAudioProcessorresultava em uma saída compactada.
- Suporte à configuração do frame rate da agregação de frames de vídeo usando
- Seleção de faixas:
- Correção de um problema em que uma faixa SDR era incorretamente preferida em relação a uma faixa Dolby Vision compatível em alguns dispositivos (#3135).
- Extratores:
- Mp4Extractor: correção da análise da caixa
dOpspara Opus em MP4, em quePreSkip,InputSampleRateeOutputGainnão eram convertidos de big-endian para little-endian, fazendo com que os primeiros ~299 ms de áudio fossem descartados quando nenhuma lista de edição estava presente (#3431). - Remova
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESeFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265, já que a análise de dependência de amostra dentro do GOP para H.264 e H.265 está ativada por padrão. - Mp4Extractor: foi corrigida a análise de metadados de local de caixas
xyzque contêm coordenadas de altitude para preencherMp4LocationData. - Adição de
ExtractorUtil.getFramesPerEncodedSamplepara calcular o número de frames de áudio por amostra para formatos de áudio codificados (#3367). - Adição de
FLAG_READ_XMP_METADATAaMp4Extractorpara extrair metadados XMP de caixas UUID de nível superior. - Correção de áudio AC-3, DTS e LPCM corrompido ao reproduzir conteúdo MPEG-PS
no estilo DVD, removendo o cabeçalho do subfluxo
private_stream_1de cada pacote PES emPsExtractorantes que o payload seja transmitido ao leitor de áudio (#3327). - Correção de falha em
FragmentedMp4Extractorquando uma caixatfdtda versão 1 codifica umbaseMediaDecodeTimenegativo (#3412). - MPEG-TS: suporte à análise de mensagens SEI de arranjo de empacotamento de frames H.264 e H.265 para preencher
Format.stereoMode(#3419). - Analisar os dados de configuração do perfil 20 do Dolby Vision e rejeitar perfis não compatíveis em vez de reproduzir como HEVC padrão com cores incorretas (#3427).
- MP3: o ajuste de metadados de atraso e preenchimento do codificador LAME/Xing foi revertido
porque é incompatível com muitos decodificadores MP3
MediaCodec(#3425). - Matroska: correção de
NullPointerExceptionao analisar elementosChapterAtomaninhados (#3438). - Ogg: correção de um bug em que um pacote com tamanho múltiplo de 255 bytes e que termina em um limite de página é mesclado com o pacote seguinte.
- MP4: analise as faixas de metadados com marcação de tempo em caixas
mebxemMp4ExtractoreFragmentedMp4Extractor. As faixas que têm uma chaveit35são expostas comoMimeTypes.APPLICATION_ITUT_T35(ativando a reprodução de HAGC). Outras faixasmebxsão ignoradas, a menos queFLAG_EMIT_RAW_MEBX_DATAesteja definido. Nesse caso, todas as faixasmebxsão emitidas comoMimeTypes.APPLICATION_MEBXbrutos. - Ogg: suporte à extração de preenchimento final do Opus para reprodução sem interrupções (#2576) e correção de carimbos de data/hora de amostra após buscar uma página que começa com um pacote contínuo.
- Ogg: correção de erros de decodificação e saltos de carimbo de data/hora de aproximadamente 1s em streams encadeados do Ogg Opus, ignorando os pacotes de cabeçalho de comentário e ID do Opus no meio do stream.
- Mp4Extractor: correção da análise da caixa
- Inspetor:
- Suporte à recuperação de metadados XMP de arquivos MP4 usando
MetadataRetriever. - Suporte à extração de faixas de metadados temporizados em caixas
mebxemMediaExtractorCompatcomoMimeTypes.APPLICATION_MEBX.
- Suporte à recuperação de metadados XMP de arquivos MP4 usando
- Frame do inspetor:
- Correção do corte de cores BT.2020 de ampla gama na imagem de base SDR ao
extrair frames Ultra HDR com
FrameExtractor. As cores fora da gama agora são levemente compactadas na gama sRGB em vez de serem fixadas.
- Correção do corte de cores BT.2020 de ampla gama na imagem de base SDR ao
extrair frames Ultra HDR com
- Áudio:
- Adição de uma solução alternativa para dispositivos que invocam
android.media.AudioDeviceCallbackna linha de execução errada (#3386). - Correção de possíveis travamentos de reprodução após transições de faixa com descarregamento compactado.
- Contornamos um problema nos dispositivos Amazon Fire TV em que o áudio AC-3 podia congelar durante as transições de período (#3448).
- Foi adicionado suporte para cortar o padding do codificador de fim de stream para reprodução contínua do Opus Ogg e WebM/Matroska (#2576, link em inglês).
- Correção de atualizações de atraso e preenchimento sem interrupções de descarregamento dinâmico durante transições de faixa para que sejam aplicadas à faixa de entrada, e não à que está sendo reproduzida.
- O preenchimento final do codificador foi cortado em streams únicos e no stream final de uma playlist, além de transições sem interrupções no meio da playlist (#2576).
- Evite cópias desnecessárias de buffer de áudio em
TrimmingAudioProcessordepois que o corte de atraso do codificador de início de stream for concluído e nenhum preenchimento de fim de stream precisar ser cortado.
- Adição de uma solução alternativa para dispositivos que invocam
- Vídeo:
- Corrigimos o relatório de frames de vídeo atrasados com carimbos de data/hora de lançamento idênticos para que sejam informados como descartados em vez de ignorados.
- Texto:
- Adicione
MediaItem.SubtitleConfiguration.timeOffsetUspara mudar os carimbos de data/hora das legendas transferidas por sideload em relação à mídia. O deslocamento pode ser alterado durante a reprodução comPlayer.replaceMediaItem(int, MediaItem)sem interromper a reprodução (#1976). - SubRip: foi adicionado suporte para injetar um
CharsetDetectoremDefaultSubtitleParserFactorypara detectar a codificação de caracteres de legendas SubRip independentes sem uma marca de ordem de byte (#2247).
- Adicione
- Efeito:
- Implemente
SoundSeparationAudioProcessorpara separação de fontes de áudio usando o módulo GMSCore do StudioSound.
- Implemente
- Muxers:
- Correção da gravação da caixa
dOpspara Opus emMp4MuxereFragmentedMp4Muxer, em quePreSkip,InputSampleRateeOutputGaineram gravados em little-endian em vez de big-endian (#3431). - Suporte para gravar a altitude do GPS em
Mp4LocationDatausandoMp4Muxer. - Adição de
Muxer.Factory.create(ParcelFileDescriptor)para permitir a multiplexação diretamente em umParcelFileDescriptor. - Grava a caixa
tfdt(Track Fragment Base Media Decode Time) por padrão em caixastrafde arquivos MP4 fragmentados para fornecer carimbos de data/hora de decodificação de mídia. - Suporte à gravação de caixas de contêiner
dec3E-AC-3 e E-AC-3 JOC (Dolby Atmos) emMp4Muxer. - Adicionamos suporte ao formato WebM ao
MediaMuxerCompat. - Grave a caixa
mfra(Movie Fragment Random Access) no final de arquivos MP4 fragmentados para permitir a busca emFragmentedMp4ExtractorusandoFLAG_READ_MFRA_FOR_SEEK_MAP. - Correção de uma falha em
Mp4WritereFragmentedMp4Writerao gravar uma amostra de EOS antes de qualquer outra amostra. - Correção da conformidade do contêiner ao multiplexar conteúdo Dolby em arquivos MP4 ou
MP4 fragmentados, anunciando a marca compatível com
dby1no cabeçalho do contêiner (#3369). - Suporte a faixas de áudio PCM flutuantes de 32 bits em
Mp4MuxereFragmentedMp4Muxer(#3389). - Rejeitar perfis Dolby Vision incompatíveis em
Mp4MuxereFragmentedMp4Muxerao adicionar faixas. - Suporte a faixas de áudio PCM de números inteiros de 24 e 32 bits em
Mp4MuxereFragmentedMp4Muxer.
- Correção da gravação da caixa
- Extensão de IMA:
- Encaminhe os eventos de pausa e retomada do player para o SDK do IMA em
ImaServerSideAdInsertionMediaSource.
- Encaminhe os eventos de pausa e retomada do player para o SDK do IMA em
- Sessão:
- Adicione
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIeMediaConstants.EXTRAS_KEY_CATEGORIESpara preencher os metadados da playlist e do item com base em metadados e descrições legados, eMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEeMediaConstants.EXTRAS_KEY_TTL_SECONDSpara sugestõesLibraryParams.extras. - Correção da falha de
SecurityExceptionao criar ou liberar umMediaSessionem dispositivos que aplicam limites estritos dePendingIntent. - Correção de um problema em que
MediaSession.getControllerForCurrentRequest()retornavanulldurante solicitações de reprodução no Android 12 (APIs 31 e 32) quandoMediaSessionServiceainda não estava em primeiro plano. - Correção de uma falha de
IllegalArgumentExceptionquando umMediaControllerse conecta a uma sessão legada que informa um volume máximo negativo. - Correção de um problema em que chamar
MediaController.setMediaItemousetMediaItemsseguido porplay()em umMediaSessionCompatlegado pausado podia enviar um callbackonPrepareFrom*não compatível em vez deonPlayFrom*ou enviaronPlay()sem reinicializar o item de mídia solicitado. - Correção de
NullPointerExceptionnoMediaBrowserlegado ao receber uma resposta de comando personalizado (#3432). - Correção de uma falha de
IllegalArgumentExceptionao receber metadados legados com chaves duplicadas noBundlesubjacente. - Unir chamadas
MediaControllerCompat.TransportControlsde saída feitas na mesma iteraçãoLooperao controlar umMediaSessionCompatlegado. Por exemplo, chamarsetMediaItem,prepareeplayjuntos agora envia um único callbackonPlayFrom*.
- Adicione
- Interface:
- Correção do posicionamento da pontuação de legendas RTL e da preservação do intervalo de span quando o ajuste de texto bidirecional está ativado (#3454, #3455).
- Adicione as classes
TrackSelectionStateeTrackSelectionParametersStatee as funções de estado de lembrança combináveis correspondentes ao módulomedia3-ui-compose. - Introdução de
PresentationState.videoAspectRatioe alteração deModifier.resizeWithContentScalepara usaraspectRatio: Float?em vez desourceSizeDp: Size?. - Adicione a classe
CuesStatee o elemento combinávelrememberCuesStateao módulomedia3-ui-composepara detectar as indicações atuais do player. - Adicione suporte ao modo de limpeza ao
ProgressSliderse ele for baseado emExoPlayerouCompositionPlayer. - Adição de suporte a
showArtworkemPresentationStatee uso para cronometrar a renderização do elemento combinável opcionalartworkfornecido emContentFrameePlayer. Adicione o elemento combinávelArtworkpara ser usado como o valor padrão do slotartwork. - Adicione novos campos a
PlayPauseButtonState(showBuffering,showRetry,showReplay) e use-os emPlayPauseButtonpara renderizar mais ícones e um indicador de buffer. - Adicionamos a classe
PlaybackStatepara permitir a observação personalizada do estado de reprodução e introduzimosBufferingIndicatorcomo um componente independente de botão. - Correção de um problema em que
PlayerViewePlayerControlViewmostravam marcadores de anúncio nos limites de período para marcadores de posição de pós-roll ao vivo em transmissões ao vivo de vários períodos. - Os slots combináveis de
Player,ContentFrame,PlayerDefaultseMiniControllernão recebem mais o player ou a visibilidade dos controles como parâmetros. Em vez disso, capture-os do escopo de chamada (por exemplo,topControlsagora é@Composable BoxScope.() -> Unit). Essa é uma alteração interruptiva em uma API instável. - Adicione o parâmetro
alignmentaContentFrame,PlayereModifier.resizeWithContentScalepara posicionar o conteúdo dimensionado no contêiner e corte o conteúdo deContentFramenos limites para que o vídeo dimensionado comContentScale.Cropnão seja mais desenhado fora dele. - Adicionamos suporte à interface de transmissão ao vivo para
ProgressSlider,ProgressStateWithTickCounteProgressStateWithTickIntervalexpondoisLiveeliveOffsetMs. Adição do elemento combinávelLiveButtonamedia3-ui-compose-material3(#2213).
- Extensão do Ktor:
- Correção de um problema em que o
KtorDataSourcepodia tratar falhas de conexão no meio do stream como fim da entrada em vez de gerar umaHttpDataSourceException(#3460).
- Correção de um problema em que o
- Extensão HLS:
- Análise de
VIDEO-RANGE(PQeHLG) emEXT-X-STREAM-INFeEXT-X-I-FRAME-STREAM-INFemFormat.colorInfo(#3441). - Correção de
NullPointerExceptionao analisar segmentos de inicializaçãoEXT-X-MAPMPEG-TS que contêm amostras de mídia PES (#3456). - Correção de regressão em que
Format.ideFormat.metadataeramnullpara faixas HLS expostas (#3402). - Corte os anúncios de lista de recursos para
X-PLAYOUT-LIMITe pule aqueles que ultrapassam totalmente o limite. Além disso, defina o deslocamento de retomada de conteúdo como 0 quando um intersticial omitirX-RESUME-OFFSETe a duração dele for desconhecida, mesmo queX-PLAYOUT-LIMITesteja definido. - Correção de um problema em que a resolução de um intersticial
X-ASSET-LISTsubstituía as contribuições de deslocamento de retomada de conteúdo de outros intersticiais no mesmo grupo de anúncios.
- Análise de
- Extensão DASH:
- Suporte à análise de eventos de inserção de MPD alternativo
(
urn:mpeg:dash:event:alternativeMPD:insert:2025) e substituição (urn:mpeg:dash:event:alternativeMPD:replace:2025) emDashManifestParsere exposição deles como instânciasAlternativeMpdEventemPeriod.alternativeMpdEvents. Essa é uma alteração interruptiva para apps que usam subclasses deDashManifestParser:DashManifestParser.buildPeriodagora usa um parâmetroList<AlternativeMpdEvent>adicional, e a sobrecarga anterior foi removida. Os apps que substituemDashManifestParser.parseEventStream(XmlPullParser)precisam substituirDashManifestParser.parseEventStream(XmlPullParser, String), já que o primeiro foi descontinuado e será tornado particular em uma versão futura. - Análise de informações de cor do CICP (
ColourPrimaries,TransferCharacteristics,MatrixCoefficientseVideoFullRangeFlag) de descritoresEssentialPropertyeSupplementalPropertyemFormat.colorInfo(#3426). - Suporte a listas separadas por espaços em branco de valores
@idem atributos@valuedo descritor do modo de truque (http://dashif.org/guidelines/trickmode) (#3315). - Suporte à análise de
<ProducerReferenceTime>emDashManifestParser, expondo-o emAdaptationSet.producerReferenceTimese usando-o para preencherTimeline.Window.presentationStartTimeMseTimeline.Window.windowStartTimeMspara streams de VOD. - Adição de suporte à distribuição de conteúdo DASH (#1689).
- Correção de uma
NullPointerExceptionque poderia ocorrer ao analisar um manifesto DASH com um atributo ausente no elemento<UTCTiming>(#3436).
- Suporte à análise de eventos de inserção de MPD alternativo
(
- Extensão RTSP:
- Correção de uma falha de
IllegalStateExceptionque ocorria ao processar respostas de rede atrasadas após o fechamento do cliente RTSP. - Correção de um problema em que a limpeza rápida podia acionar incorretamente o mecanismo de fallback do protocolo TCP.
- Correção de uma falha do
IllegalStateExceptionque pode ocorrer ao processar respostas de rede atrasadas depois que o cliente RTSP redefine o estado durante a nova seleção de faixa, a remoção da sessão ou o redirecionamento de URI. - Correção de um problema em que buscar novamente antes de reiniciar a reprodução podia causar uma falha do
IllegalStateException. - Correção de um problema em que retroceder enquanto uma busca já estava pendente podia causar queda de áudio e congelamento da reprodução de vídeo.
- Correção de um problema em que as unidades de acesso de frames-chave H.264 e H.265 que terminavam com um pacote de agregação ou não IDR não eram sinalizadas como frames-chave, fazendo com que a reprodução ficasse travada no armazenamento em buffer (#3434).
- Correção de uma falha de
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Extensão Opus: correção de falha de JNI ao decodificar dados Opus inválidos.
- Extensão Opus: correção do preenchimento de descarte que era ignorado quando o pré-pulo e o preenchimento de descarte caíam no mesmo pacote (#2576).
- Extensão do Google Cast:
- Introdução de
SessionAvailabilityListener.SessionUnavailableReasonpara representar o motivo da indisponibilidade da sessão e fornecimento de um método sobrecarregado paraSessionAvailabilityListener.onCastSessionUnavailablepara expor isso. - Correção de um problema em que a reprodução era retomada inesperadamente no dispositivo local após interromper uma sessão do Cast.
- Registrar um erro quando as operações de
RemoteMediaClient(como reproduzir, pausar, mudar a velocidade, modo de repetição, volume, silenciar ou seleção de faixa) falharem emRemoteCastPlayer(#3373). - Correção de
ArrayIndexOutOfBoundsExceptionemRemoteCastPlayerquando a fila do receptor do Cast muda ou diminui enquanto uma operação de busca está pendente (#3372). - Foi corrigido um problema com o receptor padrão do Cast em que a linha do tempo só preenchia os itens de mídia imediatamente ao redor do item ativo, em vez de toda a playlist (#3129).
- Atualize a linha do tempo e a posição de reprodução imediatamente ao modificar a
playlist (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) ou ao buscar emRemoteCastPlayer, e coloque em fila as operações sucessivas da playlist para que sejam executadas de forma confiável em ordem (#2639, #3272). - Correção de um problema em que a chamada de
addMediaItemsem uma fila vazia emRemoteCastPlayernão carregava os itens de mídia no receptor do Cast (#2402). - Correção de um problema no
RemoteCastPlayerem que chegar ao fim da fila do receptor do Cast limpava a linha do tempo em vez de manter a playlist. - Correção de um problema em que
playWhenReady,repeatModeeplaybackParametersnão eram transferidos ou aplicados quando definidos emRemoteCastPlayerantes de carregar itens de mídia (por exemplo, durante a transferência de reprodução local para remota emCastPlayer) (#889).
- Introdução de
- App de demonstração:
- Adicionamos suporte a itens de mídia protegidos por DRM e um stream de amostra HLS adicional ao catálogo do app de demonstração da sessão.
- Configure
RemoteCastPlayercom umCastTrackSelectorno app de demonstração da sessão para ativar a seleção de legendas e faixas de áudio durante a transmissão.
- Símbolos descontinuados foram removidos:
DashUtil.buildDataSpec(Representation, RangedUri, int)eDashUtil.buildDataSpec(Representation, String, RangedUri, int)foram removidos. UseDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
- Build:
- Aumente o
minSdkdo Gradle para 24.
- Aumente o
Versão 1.11.0
1.11.1
10 de setembro de 2026
- ExoPlayer:
- Mova a flag para ativar/desativar os metadados do HAGC para mídia progressiva de
MediaSource.FactoryparaExtractorsFactory. O métodosetExperimentalEnableHagcPlaybackanterior foi removido e substituído porExtractorsFactory.setParseHagcMetadata. Isso também resolve um problema em que a desativação não funcionava para contêineres Matroska/WebM. - Correção de uma interrupção na reprodução causada pelo pré-aquecimento de um renderizador secundário que não está em transição.
- Correção de um problema de pré-aquecimento em que o
Surfaceprecisa ser retornado ao renderizador principal quando uma busca redefine e desativa os dois renderizadores. - Correção de
ArrayIndexOutOfBoundsExceptionquando uma atualização da linha do tempo ao vivo move a posição padrão para além de um anúncio inserido do lado do servidor que está sendo reproduzido (#3348). - Correção de um problema no modo de ajuste em que frames de vídeo desatualizados podiam ser exibidos brevemente
ao buscar com o
ScrubbingModeParameters.allowSkippingMediaCodecFlushativado.
- Mova a flag para ativar/desativar os metadados do HAGC para mídia progressiva de
- Extratores:
- Matroska: correção do problema em que as faixas colocadas após os clusters não resultavam em uma linha do tempo pesquisável (#3377).
- Áudio:
- Correção do cálculo do tamanho do buffer em
SilenceSkippingAudioProcessorpara que a duração mínima do silêncio não seja reduzida incorretamente pelo tamanho do frame (#3271). - Correção do processamento de PCM de 8 bits em
PcmAudioUtilpara tratar amostras como não assinadas, conforme definido pelo Android (#3271). - Correção de um problema de descarregamento em que a reprodução podia travar durante transições contínuas ou de anúncios precedentes devido a tamanhos limitados de buffer de hardware.
- Correção de um bug em
DefaultAudioSinkem que a contagem de versões não diminui quando a linha de execução de reprodução não está mais ativa (#3338).
- Correção do cálculo do tamanho do buffer em
- Sessão:
- Correção de
NullPointerExceptionquando umMediaControllerem processo é liberado de um callbackPlayer.Listener(#3375). - Correção de um deadlock na linha de execução principal quando um
MediaBrowserlegado se conecta a um serviço que retorna um resultado assíncrono deonGetLibraryRoot()ouonConnectAsync()(#3393).
- Correção de
- Extensão HLS:
- Extensão DASH:
- Correção do cálculo incorreto do carimbo de data/hora de amostra para faixas de imagem com um
presentationTimeOffset(#3334).
- Correção do cálculo incorreto do carimbo de data/hora de amostra para faixas de imagem com um
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Opus: correção da corrupção de memória quando várias instâncias de
OpusDecodersão inicializadas simultaneamente. - MPEG-H: correção de vazamento de memória, truncamento de caracteres não ASCII e
possível falha nativa em condições de pouca memória ao enviar comandos
para o
MpeghUiManager(#3365).
- Opus: correção da corrupção de memória quando várias instâncias de
Versão 1.11.0
5 de agosto de 2026
- Biblioteca comum:
- Adição de
Format.channelMaskpara representar explicitamente a máscara do canal de áudio e uma nova sobrecarga deUtil.getAudioTrackChannelConfig(Format)para resolvê-la com segurança. - O Kotlin foi atualizado da versão 2.0.20 para a 2.2.0.
- Adição de
- ExoPlayer:
- Correção de um bug de simultaneidade dependente de tempo que poderia causar um
IllegalStateExceptionouIndexOutOfBoundsExceptionno ExoPlayer. - Flexibilize as verificações de contagem de grupos de anúncios em
AdsMediaSourcepara permitir que a contagem diminua quando um grupo de anúncios for totalmente processado (hasUnplayedAds()éfalse), acomodando o redimensionamento de grupos de anúncios dinâmicos durante os fluxos de trabalho de redefinição. - Adição de
getFlags()eFLAG_STRICT_DURATIONaSampleStreampara permitir que os streams informem sinalizações de relatórios e atualização dos renderizadores para verificar essas sinalizações dinamicamente. - Volte para o estimador de frame rate em
MediaCodecVideoRenderere para o formato de saída do codec emMediaCodecAudioRendererpara calcular a taxa de operação do codec quando os formatos de stream não fornecerem um valor válido e evitar redefinições desnecessárias do codec. - Remova o corte de conteúdo para anúncios inseridos do lado do cliente no player
principal. Em vez disso, o
AdsMediaSourcecuida da lógica de corte. As origens de anúncios personalizados inseridos do lado do cliente precisam ser atualizadas para implementar o corte de conteúdo internamente. - Marque as faixas com um perfil ou nível de codec bem formado, mas não reconhecido,
como
supported=NO_EXCEEDS_CAPABILITIESem vez desupported=YES(que é como as faixas com informações de perfil ou nível ausentes ou corrompidas são marcadas). Isso garante que essas faixas (que provavelmente não são compatíveis com o dispositivo) não sejam selecionadas quando houver alternativas com melhor suporte. - Adicione
DefaultPreloadManager.SimpleRankingDataComparator, que é umRankingDataComparatorque compara as classificações dos itens de mídia com base nas distâncias deles até o índice do item de mídia em reprodução. Os apps podem modificar o métodocompare(Integer, Integer)se uma lógica de comparação mais ajustada for necessária. OSimpleRankingDataComparatorpersonalizado pode ser injetado por um novo construtor deDefaultPreloadManager.Builder. - Reduza o risco de falta de memória de
DefaultLoadControl.prioritizeTimeOverSizeThresholdsvoltando aos limites de tamanho de byte do buffer se a memória heap disponível parecer insuficiente. - Alinhamento do processamento de imagens estáticas quando
MediaItem.imageDurationUsnão está definido: as imagens estáticas JPEG e HEIC agora são "reproduzidas" com uma duração padrão muito curta (da mesma forma que as imagens PNG e outras se comportavam anteriormente). - Adicione
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)para conectarBandwidthMeteraMediaSource. No entanto, o método descontinuado com implementação personalizada ainda será chamado por padrão. Recomendamos implementar o novo método e usarBandwidthMeter.getTransferListener()para ter paridade com o método antigo. - Em
DefaultBandwidthMeter, foi adicionado suporte a umInitialBitrateSupplierpersonalizado. Isso permite que os apps forneçam a própria lógica para determinar a estimativa inicial de taxa de bits, que será usada na criação deDefaultBandwidthMetere em mudanças no tipo de rede. O fornecedor pode ser definido usandoDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - Ativar a programação dinâmica por padrão. O loop de trabalho de reprodução do
ExoPlayerserá executado dinamicamente, em vez de em um intervalo estático. - Remoção de uma redefinição desnecessária que pode ocorrer ao mesclar faixas com amostras de anúncio precedente à reprodução ativa.
- Em
DefaultBandwidthMeter, otimizegetInitialBitrateCountryGroupAssignmentpara retornar as atribuições de grupo de países empacotadas em um número inteiro de 32 bits em vez de uma matriz, reduzindo o tamanho do código e evitando alocações. - Correção de falhas de inicialização de
AudioTrackem alguns dispositivos, garantindo que a lógica de nova tentativa sempre tente um tamanho de buffer mínimo de 1 segundo se outras novas tentativas (reduzindo o tamanho do buffer pela metade) não forem bem-sucedidas (#3207). - Correção de um problema de codec em alguns dispositivos em que o codec engolia todas as amostras se fosse limpo antes de receber buffers de entrada.
- Adição do
ExoPlayer.Builder.enablePerStreamMediaProgression()experimental para permitir o avanço do processamento de mídia por stream. Isso reduz a latência de inicialização entre os itens da playlist e evita que a reprodução fique "travada" com conteúdo muito curto (#3122). - Correção de uma disputa relacionada ao uso do ID da sessão de áudio em que o ID inicial
gerado automaticamente pelo
ExoPlayerera usado em vez do valor definido pelosetAudioSessionId(#3241). - Adição de suporte experimental à reprodução de metadados programados do HAGC (ST 2094-50) para
mídia progressiva (por exemplo, MP4, Matroska). O player mescla automaticamente
as faixas de metadados do HAGC com a faixa de vídeo associada e envia os
metadados fora de banda para o decodificador em dispositivos com a API 37+. Esse comportamento
pode ser desativado por meio de
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - Adição de
Format.selectionPriority, que representa a preferência relativa doFormatna seleção de faixas (#3236). - Correção de um possível problema no modo de limpeza em que a limpeza poderia ser interrompida ao buscar o "fim do stream".
- Correção de um bug de simultaneidade dependente de tempo que poderia causar um
- CompositionPlayer:
- Correção de um problema em que as instâncias de
TrackSelectornão eram liberadas.
- Correção de um problema em que as instâncias de
- Transformador:
- Correção de um problema em que
ExportResult.fileSizeBytespode ser informado em excesso.
- Correção de um problema em que
- Seleção de faixas:
- Exponha
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORe adicioneAdaptiveTrackSelection.Factory.setTrackFormatComparatorpara permitir a ordenação de formatos personalizados e a prioridade de seleção de ABR além da ordenação somente por taxa de bits. - Correção de um problema de simultaneidade dependente de tempo em que atualizações sequenciais rápidas para rastrear parâmetros de seleção poderiam resultar na perda ou substituição de algumas atualizações.
- Exponha
- Extratores:
- MP4, MP3 e FLAC: adicionamos
FLAG_DISABLE_ARTWORK_METADATApara permitir o descarte de imagens anexadas e metadados de arte da capa durante a análise do contêiner para reduzir o consumo de memória do ambiente de execução (#2077). Isso também pode ser ativado de forma centralizada usandoDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4: foi adicionado suporte à extração de faixas de metadados com marcação de tempo ITU-T T.35 (
it35). - MP4: foi adicionado suporte para extrair metadados de capítulos (formatos Nero e
QuickTime). Os capítulos do QuickTime são preferidos se ambos estiverem
presentes. As informações de capítulo extraídas são expostas como entradas
ChapternoMetadatada faixa, permitindo a navegação nativa de capítulos em arquivos MP4, M4A e M4B (como audiolivros e podcasts) (#2803). - WAV, Matroska e MP4: foi adicionado suporte ao áudio PCM de ponto flutuante de 64 bits (#3090).
- Matroska: use metadados de bitstream do codec para preencher
ColorInfocom precisão. - MP4: foi adicionado suporte à busca em arquivos MP4 fragmentados usando a caixa
mfraquando uma caixasidxnão está presente. Para ativar essa opção, forneçaFLAG_READ_MFRA_FOR_SEEK_MAPpara oFragmentedMp4Extractor, que agora é feito por padrão emDefaultExtractorsFactory(#3088). - Ignorar dados de
av1Ccom versão não compatível. - MP4: adicionamos suporte para PCM de ponto flutuante big-endian em caixas
fpcm. - Matroska: analisa as informações do capítulo para entradas
ChapternoMetadatade uma faixa. - MPEG-TS: melhoramos a extração de streams DTS-HD e DTS Express combinando o sub-stream principal e de extensão em uma única amostra, corrigindo problemas de reprodução em que os dois eram mostrados como amostras separadas (#3147).
- MP4: evitamos loops infinitos e leituras fora dos limites ao analisar itens de tag de metadados
ilstvazios (link em inglês). - MPEG-TS: o último frame é renderizado para streams em que o último pacote PES tem uma duração conhecida (#3206).
- MP3: correção do relatório de taxa de bits para arquivos com cabeçalho Xing e VBRI.
- Matroska: processa faixas definidas no último cluster (#3250).
- Matroska: adição de suporte ao ALAC (#3268).
- MP4: permite caixas
sgpdde tamanho variável em arquivos MP4 fragmentados (#3243). - AVI: correção de um problema em que a reprodução de arquivos sem flags de frame-chave em faixas de áudio
causava perda de áudio e
OutOfMemoryError. - MP3: use durações sem intervalos dos cabeçalhos Xing/Info (#3183).
- MP3: ajuste o atraso do codificador LAME/Xing e os metadados de preenchimento para corresponder ao corte de PCM decodificado (#3200).
- MP4, MP3 e FLAC: adicionamos
- Áudio:
- Adição de um período de carência de 100 ms nos renderizadores de áudio do ExoPlayer ao fazer a transição do estado pronto para o estado não pronto, para eliminar o debounce de underruns transitórios e evitar estados de buffer inesperados durante a reprodução ativa (#3210).
- Mudança da lógica de tamanho do buffer PCM padrão em
DefaultAudioTrackBufferSizeProviderpara usar um buffer fixo de 500 ms para torná-lo menos dependente do dispositivo. - Atualize
MediaCodecAudioRendererpara extrair a channelMask espacial do decodificador da plataforma, permitindo queDefaultAudioSinkuse essa máscara explícita em vez de inferir uma com base na contagem de canais. - Converter os parâmetros de
AudioSink.configureem uma classe de dados. As substituições personalizadas deForwardingAudioSink.configureprecisam ser migradas para a nova assinatura do método. - Adição de suporte para manter o tom ao estender o tempo de um stream de áudio
com
EditedMediaItem.Builder#setSpeed(SpeedParameters). - Melhoramos o
ToFloatPcmAudioProcessorpara oferecer suporte à conversão de PCM de 8 bits, PCM big-endian de 16 bits e PCM de ponto flutuante de 64 bits para PCM de ponto flutuante de 32 bits (#3090). - Mude o valor de retorno de
DecoderAudioRenderer.getChannelMappingparaImmutableIntArray. - Correção de um bug em que a reprodução travava ao tocar uma playlist de áudio sem interrupções no modo de descarregamento compactado.
- Encaminhe
Timelinee o UID do período paraAudioSink.configureeAudioProcessor.StreamMetadatapara fornecer o contexto da playlist aos processadores de áudio (#418). - Definição do
AudioProcessor.StreamMetadata.positionOffsetUscorreto para permitir o processamento de áudio com base no tempo (#418). - Adição de suporte para PCM de ponto flutuante de 32 e 64 bits big-endian.
- Remoção do caminho de fallback de EAC3-JOC para EAC3 para reprodução em dispositivos Google Pixel, já que os decodificadores EAC3 padrão não podem decodificar streams EAC3-JOC (#3257).
- Vídeo:
- Corrigimos a lógica de mesclagem de vídeos para contar os buffers descartados durante a mesclagem como pulados, em vez de descartados.
- Correção da decisão de renderização imediata ao definir uma nova superfície para evitar quedas de frames em dispositivos que não são compatíveis com superfícies de marcador de posição.
- Correção da estimativa de frame rate em
MediaCodecVideoRendererpara ser mais precisa, considerando frames descartados ou ignorados. - Permite a configuração do limite usado para programar frames com antecedência. O
padrão é 50 ms, mas é possível personalizar o valor usando
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - Correção de um bug em
VideoFrameReleaseHelperem que as mudanças na tela podiam acionar callbacksChoreographerredundantes e ativações excessivas da CPU na linha de execução principal.
- Texto:
- TTML: fallback para
displayAligndestylepara regiões (#2559). - TTML: herdar o horário de início da sugestão do elemento pai de
<p>(link em inglês).
- TTML: fallback para
- Metadados:
- Adição do campo
MediaMetadata.discSubtitlee análise dele com base nos dados ID3v2.4TSSTe VorbisDISCSUBTITLE. - Analise o número e a contagem de discos do frame ID3
TPOS.
- Adição do campo
- Efeito:
- Limpar o estado de redesenho em
FinalShaderProgramWrapperao limpar para evitar que o player congele ao buscar.
- Limpar o estado de redesenho em
- Muxers:
- Adição de suporte a referências de faixa (a caixa
tref) emMp4Muxerusando uma nova APIaddTrackReference. Isso permite estabelecer relações entre faixas, como vincular uma faixa de metadados à faixa de vídeo que ela descreve. - Adicione
OggMuxerpara permitir a multiplexação de streams de mídiaOPUSouVORBISno formato do arquivoogg. - Adição de
WavMuxerpara geração de arquivos WAV (com suporte a PCM de números inteiros e pontos flutuantes). - Adicione
setAttemptStreamableOutputEnabledaInAppMp4Muxer.Factorypara permitir a gravação de arquivos menores não transmissíveis sem espaço reservado. - Adição de suporte ao áudio IAMF em
Mp4MuxereFragmentedMp4Muxer.
- Adição de suporte a referências de faixa (a caixa
- Extensão de IMA:
- Adicione
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotpara permitir que um espaço do anúncio seja usado para anúncios de pausa. - Correção de um bug em que anúncios VAST puláveis consecutivos mostravam o botão de pular imediatamente no segundo anúncio (#3165).
- Adicione
- Sessão:
- Correção de possíveis impasses e falhas de
IllegalStateExceptiondentro deMediaNotificationManagerao usar uma sessão com um looper de player de linha de execução em segundo plano. - Aplique requisitos de linha de execução mais rígidos para métodos
MediaSession. Os métodos void agora postam automaticamente a execução na linha de execução do looper do aplicativo, e os acessadores de estado (getters) geram explicitamente umaIllegalStateExceptionse forem chamados de uma linha de execução diferente do looper do aplicativo. - Correção de uma falha de mesclagem de linha do tempo fora dos limites (
IllegalStateExceptionemMediaUtils.mergePlayerInfo) rastreando a consistência do estado por controlador no lado da sessão. - Adicionamos
androidx.media3.session.MediaSessionManagerpara oferecer suporte à consulta de sessões de mídia ativas e retornar instânciasSessionTokendo Media3. - Mude o comportamento padrão de
MediaSession.Callback.onConnectse o método não for substituído para fornecer apenas acesso de leitura a controladores não confiáveis. - Adição de suporte para substituir o nome do pacote ao criar
MediaSessionusando uma nova APIMediaSession.Builder#setPackageNameOverride. O autor da chamada precisa ter a permissãoandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERpara substituir o nome do pacote da sessão. - Adição do
MediaSession.Callback.onConnectAsync(). O novo método permite processar de forma assíncrona a tentativa de conexão de um controlador. Os apps podem retornar umFutureimediato comFutures.immediateFuture(ConnectionResult)para alcançar o comportamento anterior. É recomendável migrar para o novo método porqueCallback.onConnecté um candidato à descontinuação. - Correção de um problema em que a navegação AVRCP do Bluetooth não reconhecia
MediaLibraryServicenas APIs 36 e 37. - Foi corrigido o problema de redução dupla de escala de arte em
MediaSessionquando o tamanho da imagem está próximo do limite da plataforma, resolvendo o desfoque nas notificações (#3134). - Correção da falha de
ForegroundServiceStartNotAllowedExceptionemMediaNotificationManagerquando um callback de carregamento de bitmap de arte assíncrono tenta iniciar o serviço em primeiro plano enquanto o app está em segundo plano (#3270). - Correção de um problema em que os objetos
PositionInforecebidos por umMediaControllernão tinham os UIDs originais deTimeline. A sessão agora traduz e propaga esses UIDs de maneira confiável durante as atualizações de estado. - Correção de falha ao capturar
ForegroundServiceStartNotAllowedExceptionemMediaSessionService.stopSelfSafely()(#3310). - Correção do callback
onMediaItemTransition()inesperado emMediaControllerao buscar no mesmo item de mídia (#3248).
- Correção de possíveis impasses e falhas de
- Interface:
- Correção da renderização do primeiro frame no tamanho errado quando
ContentFrameé recomposto no meio da reprodução (#3238). - Adicione a classe
CurrentMediaItemStatee o elemento que pode ser compostorememberCurrentMediaItemStatecorrespondente ao módulomedia3-ui-compose. Esse detentor de estado é usado emdemo-composepara mostrar várias informações de metadados sobre oMediaItemem reprodução. - Adicione a classe
PlaylistStatee o elemento combinávelrememberPlaylistStatecorrespondente ao módulomedia3-ui-compose. Esse detentor de estado é usado emdemo-composepara mostrar várias informações de metadados sobre oMediaItemsdefinido no player. - Adicionamos a API de avanço rápido/câmera lenta a
PlaybackSpeedState. Use essa funcionalidade emdemo-composepara mostrar o avanço rápido com um toque longo. - Adicione o elemento combinável
MiniControllerao módulomedia3-ui-compose-material3. Ele oferece uma affordance compacta para controlar oPlayerenquanto mostra o título, o artista, a arte e o progresso do item de mídia atual. - Adicione a classe
ErrorStatee o elemento combinávelrememberErrorStatecorrespondente ao módulomedia3-ui-compose. Adicione o elemento combinávelErrorTextamedia3-ui-compose-material3e o defina como uma sobreposição padrão noPlayer. - Publicar o objeto
PlayerDefaultscom elementos combináveis paraTopControls,CenterControls,BottomControlseErrorOverlay. - Adicione
FocusRequesterao elemento combinávelPlayere aos slots de conteúdo dele. - Publicação de
PlayerPool(common-ktx) erememberPooledPlayer(ui-compose) para oferecer suporte ao pré-carregamento deMediaItemsem ambientes de interface de janela deslizante. Mostre essa funcionalidade emdemo-composecom um novoShortFormPlayerScreen. - Correção de um bug de supressão de obturador em
PlayerViewe no ComposePresentationStateque causava falhas em linhas do tempo que não oferecem suporte à pesquisa de UID de período (#3264).
- Correção da renderização do primeiro frame no tamanho errado quando
- Downloads:
- Resolva as variáveis HLS na playlist de mídia quando buscadas para download (#3258).
- Extensão do Ktor:
- Extensão HLS:
- Adição de suporte para direcionamento de conteúdo HLS e clonagem de caminho (#1689).
- Adição de
setWithAssetListResetaHlsInterstitialsAdsLoaderpara permitir que os apps redefinam os intersticiais de lista de recursos totalmente processados para um estado indisponível para nova resolução sob demanda. - Análise do atributo
SCOREdeEXT-X-STREAM-INFeEXT-X-I-FRAME-STREAM-INFe preenchimento dele emFormat.selectionPriority(#3236). - Correção de um bug em que as atualizações programadas da playlist de HLS continuavam mesmo que ela não fosse mais principal ou ativa (#3254).
- Foi corrigido o cálculo do deslocamento de retomada de conteúdo ao resolver listas de recursos intersticiais (#3322).
- Correção da descontinuidade inesperada do carimbo de data/hora da faixa de áudio ao retomar a reprodução ao vivo de baixa latência após uma falha na solicitação de playlist (#3311).
- Correção de bug em
HlsMediaPeriod.getStreamKeys()em que a faixa ID3 em representações de áudio é considerada como legendas (#3333).
- Extensão DASH:
- As legendas descritivas da CEA foram separadas em diferentes
TrackGroups com base no idioma (#3113). - Adição de suporte para analisar vários elementos
Locationdo manifesto (MPD) e realizar o substituto de local emDashMediaSourcequando as cargas do manifesto falharem. - Correção de uma falha (
IndexOutOfBoundsException) ao abrir manifestos com um elemento<SegmentTimeline/>vazio (#3326).
- As legendas descritivas da CEA foram separadas em diferentes
- Extensão RTSP:
- Correção de travamentos ou falhas temporárias durante a preparação da reprodução RTSP causadas por erros de vinculação de porta UDP.
- Extensão do Google Cast:
- Adição da nova classe
CastParamspara permitir a configuração do Cast chamandoCast.initialize(CastParams). - Adição da nova opção
CastParams.getShowSystemOutputSwitcherOnCastIconClick(), que aciona o uso do seletor de saída da SystemUI em vez do seletor de dispositivos de transmissão no app, quando disponível. - Adição de
MediaRouteButtonStateerememberMediaRouteButtonStatepara oferecer suporte à observação do estado de visibilidade do seletor de rota de mídia e adição do parâmetrostateaMediaRouteButton(#3172). - Correção de um bug em que
RemoteCastPlayerpoderia ficar permanentemente travado em um estado de mascaramento de faixa após uma seleção de faixa, fazendo com que ele ignorasse as atualizações de faixa subsequentes do receptor do Cast (#3237). - Correção de um bug em que
DefaultMediaItemConvertergera umaNullPointerExceptionao tentar participar de uma sessão de transmissão iniciada por um remetente que não é do Media3. - Impedimento de que
CastPlayertransfiraMediaItemsque não podem ser reproduzidos ao mudar o player ativo (#3199). - Correção de um bug em que transmissões ao vivo não configuradas (
liveConfiguration == UNSET) eram colocadas na fila comoSTREAM_TYPE_BUFFERED(#3318).
- Adição da nova classe
- Utilitários de teste:
- Expanda
DataSourceContractTestpara incluir suporte a solicitaçõesPOSTcom cabeçalhos e corpos, adicione alguns recursosPOSTaHttpDataSourceTestEnve adicione declarações para o método HTTP, cabeçalhos e corpo esperados emWebServerDispatcher. - Restringir as declarações em
DataSourceContractTestpara comprimentos retornados deDataSource.open(). Os recursos que podem resultar emC.LENGTH_UNSETprecisam indicar isso usandoTestResource.Builder.setMayResolveToUnknownLength(boolean). setPlaybackLooperfoi adicionada aTestExoPlayerBuilder.
- Expanda
- Símbolos descontinuados foram removidos:
androidx.media3.exoplayer.MetadataRetrieverfoi removido. Useandroidx.media3.inspector.MetadataRetriever- O
androidx.media3.exoplayer.MediaExtractorCompatfoi removido. Useandroidx.media3.inspector.MediaExtractorCompat - O
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATAfoi removido. UseHeifExtractorpara extrair metadados de fotos com movimento de arquivos HEIC. - O
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadatafoi removido. Useandroidx.media3.extractor.metadata.MotionPhotoMetadata - O
androidx.media3.extractor.DummyTrackOutputfoi removido. Useandroidx.media3.extractor.DiscardingTrackOutput - O
androidx.media3.extractor.DummyExtractorOutputfoi removido. Useandroidx.media3.extractor.NoOpExtractorOutput - O
androidx.media3.common.C.generateAudioSessionIdV21foi removido. Useandroidx.media3.common.util.Util.generateAudioSessionId
- Criar
- Atualizamos as instruções de
README.mdpara depender do Media3 localmente para usar builds compostos do Gradle (includeBuild). O scriptcore_settings.gradlefoi removido, e as propriedadesandroidxMediaModulePrefixeandroidxMediaEnableMidiModulenão são mais usadas.
- Atualizamos as instruções de
1.11.0-rc01
Use a versão estável 1.11.0.
1.11.0-beta01
7 de julho de 2026
Use a versão estável 1.11.0.
1.11.0-alpha01
24 de junho de 2026
Use a versão estável 1.11.0.
Versão 1.10.0
1.10.1
12 de maio de 2026
- Biblioteca comum:
- Correção do processamento de
onAudioSessionIdChangedemSimpleBasePlayereForwardingSimpleBasePlayer.
- Correção do processamento de
- ExoPlayer:
- Correção de uma disputa relacionada à geração de IDs de sessão de áudio que poderia levar a um
IllegalStateExceptioncom o modo de túnel. (#3099). - Correção de possíveis falhas do app ao se recuperar de erros do decodificador com o pré-aquecimento do renderizador.
- Correção de um problema em que artefatos de vídeo eram causados pelo fornecimento de dados de inicialização ao usar um codec Dolby Vision baseado em AV1 (#3153).
- Correção de uma disputa relacionada à geração de IDs de sessão de áudio que poderia levar a um
- Seleção de faixas:
- Ajustamos a lógica de seleção de faixas em
VideoTrackInfopara resolver tipos MIME de substituição e mover as preferências de HDR e pontuação de codec para as preferências de qualidade (#3135).
- Ajustamos a lógica de seleção de faixas em
- Extratores:
- MP3: o tamanho dos dados do Xing será ignorado se for maior que o tamanho conhecido do stream (#3117).
- Correção de
ArrayIndexOutOfBoundsExceptionemMp4ExtractorquandoFLAG_OMIT_TRACK_SAMPLE_TABLEestá definido e a faixa não tem uma caixa de amostra de sincronização (stss).
- Áudio:
- Correção de um bug em que os eventos de áudio podiam ser roteados incorretamente se vários renderizadores de áudio fossem adicionados ao player.
- Vídeo:
- A lógica de reutilização de codec em mudanças de frame rate na API abaixo de 30 foi ajustada para evitar redefinições de codec quando elas não são benéficas (#3120).
- Desativamos a solução alternativa de sincronização forçada em
queueSecureInputBufferpara a API 31+. A solução alternativa era um gargalo artificial que forçava a execução em série da descriptografia, o que impedia vídeos distorcidos devido a um problema de framework que existia antes da API 31.
- Imagem:
- Correção de um problema no modo de limpeza em que as atualizações de imagem só entravam em vigor quando o usuário "parava a limpeza" (#2815).
- Sessão:
- Correção de um bug em que
ForegroundServiceStartNotAllowedExceptionnão era propagado entre os limites da linha de execução caso a linha de execução do aplicativo não fosse a principal (#2499). - Correção do bug em que
COMMAND_SEEK_TO_MEDIA_ITEMnão está disponível em umMediaControllerao se conectar a uma sessão somente de plataforma que permite buscar outros itens, mas não modificar playlists. - Correção do problema em que o
MediaControllernão pode definir itens de mídia em sessões de mídia da plataforma que não permitem ações dePREPARE_FROM. - Correção de um bug em que o próprio processo não era marcado com
Controller.isTrusted()na API 27 ou anterior ao se conectar por controladores de plataforma.
- Correção de um bug em que
- Extensão HLS:
- Correção de um bug em que uma
ArrayIndexOutOfBoundsExceptionera gerada durante o fallback de stream se a seleção de faixa fosse um subconjunto das faixas disponíveis (#3161). - Correção de um problema em que o segmento de inicialização não era transferido
entre as atualizações da playlist de mídia se a tag
#EXT-X-MAPnão fosse repetida nas atualizações seguintes (#3105).
- Correção de um bug em que uma
- Extensão DASH:
- Correção de uma falha em
SampleQueueao buscar um bloco que está sendo cancelado.
- Correção de uma falha em
1.10.0
26 de março de 2026
- Biblioteca comum:
- O
Player.mute()e oPlayer.unmute()foram promovidos deUnstableApipara estável. - O
Format.pcmEncodinge oC.PcmEncodingforam promovidos deUnstableApipara estável. - Adição de
Format.primaryTrackGroupIdpara identificar o grupo principal de instânciasFormatincorporadas (link em inglês).
- O
- ExoPlayer:
- Adicionamos recursos de corte ao
AdsMediaSource. - Adicionamos suporte à programação dinâmica em
MediaCodecVideoRendererpara alinhar melhor o trabalho de programação e os ciclos de ativação da CPU com o momento em que os frames de vídeo podem ser processados. Para ativar esse recurso, useexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()noDefaultRenderersFactory. - Permitir a definição de um
DataSource.Factorypersonalizado emDefaultPreloadManager.Builder. - Permitir que
ExoPlayerseja simulado sem o Robolectric movendo algumas constantes padrão paraExoPlayer.Builder. A simulação dessa interface complexa geralmente não é recomendada, apenas quando o uso é mínimo/simples/incidental (#2985).- Isso exigiu a mudança de
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSdeExoPlayerparaExoPlayer.Builder(sem descontinuação).
- Isso exigiu a mudança de
- Correção de um bug em que o
ProgressiveMediaSourcepropagava informações desatualizadas da linha do tempo para o player, e os períodos na fila eram removidos inesperadamente (#3016). - Correção de um problema em que o ExoPlayer não solicitava o foco de áudio atrasado quando a reprodução era solicitada durante ligações.
- Correção de um bug em que as transições de conteúdo on demand para conteúdo ao vivo podiam causar novos armazenamentos em buffer no final do conteúdo on demand (#3052).
- Adição de suporte ao Dolby Vision Profile 10 (#2830).
- Correção de um bug em que um anúncio precedente não inicializado produzia um
ArrayIndexOutOfBoundsException(#3125).
- Adicionamos recursos de corte ao
- CompositionPlayer:
- Adição de suporte para
EditedMediaItem.removeVideo.
- Adição de suporte para
- Transformador:
- O
EditedMediaItem.Builder.setFrameRate()agora pode definir uma taxa de frames de saída máxima para vídeo, o que é particularmente útil ao aumentar a velocidade de mídia comsetSpeed().
- O
- Seleção de faixas:
- Mude a assinatura de
DefaultTrackSelector.selectAllTrackspara incluir a matriz de saída como um parâmetro, pré-preenchida com substituições de faixa. - Correção de um problema em que as faixas de metadados incorporadas eram selecionadas, independentemente de a faixa principal correspondente estar selecionada (#294).
- Estabilização das opções de
TrackSelectionParametersparapreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelseselectTextByDefault.
- Mude a assinatura de
- Extratores:
- MP4: suporte a arquivos com caixas
uuidgrandes antes de outras caixas, comomoov(#3046). - MP4: adicionamos suporte a faixas de codificação de vídeo versátil (VVC, na sigla em inglês) em contêineres MP4.
- MP4: suporte a arquivos com caixas
- Inspetor:
- Alteração interruptiva: remoção de
FrameExtractor. Os usuários agora precisam depender do novo módulo:media3-inspector-framee atualizar as importações paraandroidx.media3.inspector.frame.FrameExtractor. - Introduzir um novo módulo para extrair e processar frames de vídeo decodificados.
- Alteração interruptiva: remoção de
- Áudio:
- Mudança da biblioteca de decodificação subjacente para a extensão do decodificador IAMF de
libiamfparaiamf_tools. - A decodificação IAMF oferece suporte à saída binaural pelo decodificador (ao usar a extensão do decodificador IAMF) ou pelo Spatializer do Android.
- Remoção correta do suporte a
AC4Profile22e outros perfis legados ao avaliar o suporte ao decodificador AC-4 em cenários automotivos (#2609). - Melhoria na lógica de repetição da inicialização de
AudioOutputemDefaultAudioSink(#2905). - Tentar corresponder ao layout de saída dos alto-falantes (ou do espacializador, se aplicável) ao decodificar o IAMF, tanto com a extensão IAMF quanto com os decodificadores de codec de mídia, com suporte de novos campos e lógica em AudioCapabilities e AudioCapabilitiesReceiver.
- Correção de um bug em que a reprodução travava ao tocar uma playlist de áudio sem interrupções no modo de descarregamento compactado.
- Mudança da biblioteca de decodificação subjacente para a extensão do decodificador IAMF de
- Texto:
- VobSub: use os comandos de controle SPU
STARTeSTOPpara derivar a duração da sugestão, em vez de usar sempre o padrão de 5 segundos (#2935).
- VobSub: use os comandos de controle SPU
- Metadados:
- Aumentamos a contagem padrão de renderizadores de metadados para quatro para cobrir todas as possíveis faixas de metadados publicadas por variantes e representações de HLS (#3043).
- Efeito:
- Mover
LottieOverlaypara um novo módulo:media3-effect-lottie, o que também envolveu renomeá-lo deandroidx.media3.effect.LottieOverlayparaandroidx.media3.effect.lottie.LottieOverlay.
- Mover
- Efeito Lottie:
- Introdução de um novo módulo
:media3-effect-lottieque oferece funcionalidades para aplicar efeitos do Lottie a frames de vídeo.
- Introdução de um novo módulo
- Extensão de IMA:
- Atualize o SDK do IMA para a versão 3.39.0 para ter acesso à API de informações de mídia de anúncio mais recente.
- Correção de um bug em que o tipo MIME do anúncio não correspondia ao tipo MIME fornecido no evento IMA LOADED. A correção agora mapeia o tipo MIME do anúncio usando as informações de mídia do anúncio fornecidas pelo IMA.
- Adição de
setEnableCustomTabsaImaAdsLoadereImaServerSideAdInsertionMediaSource, permitindo que os usuários controlem se os URLs de clique no anúncio são iniciados usando guias personalizadas. - Adicione a
ImaAdTagUriBuilder, uma classe que oferece uma maneira alternativa de construir umadTagUri. Ele contém a APIsetPreferredLinearOrientation. Essa é uma API em teste Alfa que permite definir a orientação preferencial para anúncios lineares. Se quiser participar do grupo de testes Alfa, entre em contato com o parceiro da sua conta.
- Sessão:
- Correção de um bug em que matrizes grandes em
MediaMetadata.artworkDatapodiam causar falhas no app. - Use o tipo int para o argumento
@Player.Commandna interfaceActionFactory(#2933). - Transforme
MediaSessionServiceeMediaLibraryServiceem umLifecycleService, permitindo anexar operações com reconhecimento de ciclo de vida ao ciclo de vida do serviço (#187). - Parar de oferecer suporte a comandos de mudança de volume do dispositivo de
MediaControllereMediaBrowserpara reproduções locais. Os apps não podem mudar o volume do dispositivo local e, se necessário, podem usar as APIsAudioManagerpara essa finalidade. - Detectar instâncias
Intentdesatualizadas que iniciaram o serviço em primeiro plano. Isso evita que umaForegroundServiceDidNotStartInTimeExceptionseja gerada pelo sistema. Essa é uma alteração interruptiva em uma API instável para apps que implementam umMediaNotification.Providerpersonalizado, já que há um novo método obrigatório. - Adição de builders para instâncias
PendingIntenta serem usadas com widgets da tela inicial (#2933). - Adição de métodos estáticos para criar instâncias de
Intentpara widgets da tela inicial baseados no Compose (#2933). - Correção de um bug em que a transição do item de mídia não era informada aos controladores quando a reprodução passava de um determinado índice de item de mídia para outro com o mesmo item de mídia por motivo de descontinuidade "AUTO" e "SEEK" (#2997).
- Correção de um problema em que a solução alternativa de posicionamento do botão da interface do sistema afeta negativamente outras superfícies de interface, como o Android Auto ou fabricantes que não precisam da solução alternativa (#3041).
- Correção do problema em que o acesso às assinaturas não era sincronizado (#3056).
- Solução alternativa para o bug da SysUI na API 29, em que a arte da sessão de mídia em um tamanho específico pode causar falhas na SysUI e forçar a reinicialização do dispositivo (#3118).
- Foi corrigido o dimensionamento do ícone de arte da notificação no Android Q (#3084).
- Correção de um bug em que matrizes grandes em
- Interface:
- Adicione o elemento combinável
PlaybackSpeedControlamedia3-ui-composepara mostrar e modificar a velocidade do vídeo. - Adicione o elemento combinável
PlaybackSpeedToggleButtonamedia3-ui-compose-material3para controlar a velocidade do vídeo. - Adição do elemento combinável
ProgressSlideramedia3-ui-compose-material3para mostrar o progresso do player e realizar buscas usando ações de arrastar e tocar (#2288). - Evite um buffer grande fora da tela ao animar PlayerControlView.
- Adicione o elemento combinável
Playeramedia3-ui-compose-material3, que combina umContentFramecom controles personalizáveis alinhados à parte de cima, ao centro e à parte de baixo. - Oculta a posição de reprodução do serviço de acessibilidade para evitar
a atualização contínua do anúncio quando
PlayerControlViewestiver visível.
- Adicione o elemento combinável
- Extensão HLS:
- Adição de suporte a X-PLAYOUT-LIMIT com intersticiais HLS (#2484).
- Suporte ao atributo
QUERYPARAMcom#EXT-X-DEFINE(#1854). - Otimização da análise de playlists HLS com o armazenamento em cache de correspondências de expressões regulares (#3008).
- Exposição da faixa de metadados ID3 (EMSG) em renderizações de áudio (#3043).
- Permitir o fallback de local ao encontrar erros de carregamento, se streams redundantes de locais diferentes estiverem disponíveis (#1988).
- Correção do comportamento de X-SNAP para anúncios intersticiais HLS para calcular corretamente as posições de início e retomada (#3013).
- Extensão DASH:
- Extensão RTSP:
- Correção de regressão no streaming H.264 e H.265 que analisava incorretamente amostras da mesma unidade de acesso que abrangia vários pacotes RTP. Isso resultava em artefatos visuais e corrupção no vídeo (#3121).
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Adição de suporte ao gerenciador de interface MPEG-H à extensão do decodificador MPEG-H (#3066).
- Extensão do Google Cast:
- Adição do método
RemoteCastPlayer.Builder#setTrackSelector, que permite a implementação da seleção de faixas para reproduções do Cast.
- Adição do método
- Símbolos descontinuados foram removidos:
ExperimentalFrameExtractorfoi removido. Useandroidx.media3.inspector.frame.FrameExtractor- O
ChannelMixingMatrix.create()foi removido. UseChannelMixingMatrix.createForConstantGain() - O
androidx.media3.extractor.metadata.flac.VorbisCommentfoi removido. Useandroidx.media3.extractor.metadata.vorbis.VorbisComment - O
MediaSource.prepareSource(MediaSourceCaller, TransferListener)foi removido. UseMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId).
1.10.0-rc03
25 de março de 2026
Use a versão estável 1.10.0.
1.10.0-rc02
16 de março de 2026
Use a versão estável 1.10.0.
1.10.0-rc01
10 de março de 2026
Use a versão estável 1.10.0.
1.10.0-beta01
25 de fevereiro de 2026
Use a versão estável 1.10.0.
1.10.0-alpha01
6 de fevereiro de 2026
Use a versão estável 1.10.0.
Versão 1.9.0
1.9.4
16 de maio de 2026
A versão 1.9.4 contém os seguintes commits.
- Efeito:
- Defina explicitamente
GL_DRAW_BUFFEReGL_READ_BUFFERao fazer a transição do contexto sem superfície.
- Defina explicitamente
1.9.3
16 de março de 2026
A versão 1.9.3 contém os seguintes commits.
- Áudio:
- Correção de um bug em que a reprodução travava ao tocar uma playlist de áudio sem interrupções no modo de descarregamento compactado.
1.9.2
6 de fevereiro de 2026
A versão 1.9.2 contém os seguintes commits.
- ExoPlayer:
- Correção do bug em que o
ProgressiveMediaSourcepropagava informações desatualizadas da linha do tempo para o player e os períodos na fila eram removidos inesperadamente (#3016).
- Correção do bug em que o
- Sessão:
- Correção de um problema em que a solução alternativa de posicionamento do botão da interface do sistema afeta negativamente outras superfícies de interface, como o Android Auto ou fabricantes que não precisam da solução alternativa (#3041).
- Extensão do Google Cast:
- Correção de um bug em que a transferência do Cast para a reprodução local não funcionava.
1.9.1
26 de janeiro de 2026
A versão 1.9.1 contém estes commits.
- Biblioteca comum:
- Suporte a strings de data e hora com apenas horas no deslocamento de fuso horário (#2929).
- ExoPlayer:
- Permitir que a programação dinâmica desacelere o intervalo de
doSomeWorksomente depois que o áudio começar a oferecer suporte a uma sincronização de áudio e vídeo mais suave no início da reprodução. - Correção de um bug em
DefaultLoadErrorHandlingPolicyem queFileNotFoundExceptione tipos de exceção semelhantes eram repetidos várias vezes. - Correção de um bug com programação dinâmica em que o tempo calculado para o próximo
doSomeWorkera reduzido por engano pelo tempo decorrido da iteração atual dedoSomeWork. Isso aumenta o tempo de inatividade da CPU e economiza energia. - Correção de um problema em que algumas reproduções de arquivos Dolby Vision falhavam ao tentar usar um codec AVC ou HEVC de substituição.
- Correção do bug em que o carregamento continuava após o fim da reprodução ao remover o item em reprodução de uma playlist (#2873).
- Evitamos o vazamento de instâncias de
MediaItemao usar repetidamenteExoPlayer.replaceMediaItemno mesmo item (#2993). - Evitamos possíveis ANRs causados por liberações de wake lock de emergência (#2979).
- Permitir que a programação dinâmica desacelere o intervalo de
- Extratores:
- MP3: análise de dados do ReplayGain do LAME (#2840).
- Áudio:
- Remoção correta do suporte para
AC4Profile22e outros perfis legados ao avaliar o suporte ao decodificador AC-4 em cenários automotivos (#2609).
- Remoção correta do suporte para
- Vídeo:
- Descarte codecs de vídeo em dispositivos abaixo da API 30 quando a taxa de frames do conteúdo mudar para evitar travamentos na reprodução (#2941).
- Texto:
- VobSub: correção de algumas legendas ausentes ao processar corretamente SPUs que contêm apenas uma única sequência de controle ou têm informações críticas divididas em várias sequências de controle (#2935).
- Extensão de IMA:
- Correção de bug: corrigimos um problema em que o tipo MIME do anúncio não correspondia ao tipo MIME fornecido no evento IMA LOADED. A correção agora mapeia o tipo MIME do anúncio usando o índice do pod de anúncios e a posição do anúncio.
- Adicione uma verificação de nulo antes de acessar o resultado de
getAdsManager()eAdEvent.getAd().
- Sessão:
- Correção de um bug em que a interrupção de um
MediaControllerconectado a uma sessão de plataforma causava uma falha no app se a interrupção ocorresse durante a reprodução do anúncio (#2948). - Adicionamos outras verificações em instâncias
extrasBundleem várias classes para proteção contra instânciasBundlemalformadas enviadas de outros processos. - Correção de um problema em que comandos ausentes para
COMMAND_SEEK_NEXTouCOMMAND_SEEK_BACKpodiam causar lacunas na notificação de mídia do sistema (#2976). - O escalonamento de bitmap para o ícone de notificação foi removido da linha de execução principal (#2829).
- Correção do bug em que o autor, o escritor e o compositor não eram usados como substitutos
ao converter de
MediaMetadataCompateMediaDescriptionCompatlegados (#3018).
- Correção de um bug em que a interrupção de um
- Downloads:
- Correção de possíveis loops infinitos quando um
PriorityTooLowExceptioné processado porSegmentDownloader(para DASH, HLS e SmoothStreaming). As substituições personalizadas deSegmentDownloaderque usam o método protegidoexecuteprecisam fornecer a tarefa encapsulada em umSupplierpara que ela possa ser recriada (#2931).
- Correção de possíveis loops infinitos quando um
- Extensão HLS:
- Transmita o documento JSON da lista de recursos brutos para o callback
Listener.onAssetListLoadCompleted. Essa é uma alteração interruptiva em uma API instável que exige que os apps que implementam esse callback adicionem um argumento extra do tipoJSONObject(#2950).
- Transmita o documento JSON da lista de recursos brutos para o callback
- Extensão RTSP:
- Os pacotes RTP com carimbos de data/hora que se repetem agora são processados corretamente (#2930).
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Correção de um possível
NullPointerExceptionque pode ocorrer ao buscar antes de processar o primeiro frame de vídeo (#2965).
- Correção de um possível
- Extensão do Google Cast:
- Correção de um bug que impedia a atualização correta da linha do tempo do
RemoteCastPlayerao substituir a playlist.
- Correção de um bug que impedia a atualização correta da linha do tempo do
1.9.0
17 de dezembro de 2025
- Biblioteca comum:
- Atualização de
minSdkpara23de acordo com outras bibliotecas do AndroidX. - Adição de
PlayerTransferState, que facilita a transferência do estado de reprodução entre instâncias dePlayer. - Adicione os métodos
void mute()evoid unmute()ao Player que preservam e, consequentemente, restauram o volume do Player antes e depois de defini-lo como zero. - Publicação das classes de utilitário
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagereStuckPlayerDetector, usadas anteriormente peloExoPlayerinternamente para permitir a reutilização em outros players (#1893). - Correção do processamento do listener
ForwardingPlayerquando o player delegado subjacente usa a igualdade de referência para comparar instâncias de listener (#2675). - Adicione uma função de extensão de suspensão
Player.listenTona bibliotecamedia3-common-ktxque especifica oPlayer.Eventsem que a ação será realizada. - Correção de uma falha em
BasePlayer.getBufferedPercentageresultante de um estouro de números inteiros quando a posição em buffer informada é muito maior do que a duração informada (#2750). - Correção da detecção automática do tipo de faixa
TrackGroupao não ignorar o tipo MIME de amostra personalizado e voltar a usar o tipo de faixa potencialmente errado do tipo MIME do contêiner (#2860).
- Atualização de
- ExoPlayer:
- Adicionamos uma detecção de player travado que aciona um erro de player
StuckPlayerExceptionse o player parecer travado. Isso acontece nos seguintes casos, em que cada tempo limite padrão pode ser configurado emExoPlayer.Builder, se necessário:- Após 10 minutos de
STATE_BUFFERINGao tentar reproduzir e sem progresso de armazenamento em buffer. - Após 10 segundos de
STATE_READYao tentar reproduzir e nenhum progresso de reprodução. - Após 1 minuto de
STATE_READYalém da duração declarada sem chegar ao fim do item. - Após 10 minutos com um motivo de supressão de reprodução ao tentar reproduzir.
- Após 10 minutos de
- Ativação do processamento de wake lock por padrão para corrigir problemas de armazenamento em buffer durante
a reprodução em segundo plano. Isso equivale a definir
ExoPlayer.Builder.setWakeModecomoC.WAKE_MODE_LOCAL. - Adicione uma lógica de detecção para atualizar automaticamente o ID do dispositivo virtual quando uma
mudança for informada ao
Contextoriginalmente transmitido paraExoPlayer.Builder. - Adicione
ExoPlayer.setVirtualDeviceIdpara atualizar manualmente o ID do dispositivo virtual recebido doContexttransmitido paraExoPlayer.Builder. - Garantir que os renderizadores não consumam dados do próximo item da playlist mais de 10 segundos antes do fim do item atual.
- Adição de
setSeekBackIncrementMs,setSeekForwardIncrementMsesetMaxSeekToPreviousPositionMsaExoPlayerpara atualizar essas configurações após a construção (#2736). - Adicione a funcionalidade de pré-armazenamento em cache em
DefaultPreloadManager. Agora os apps podem retornarDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)ouDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)viaTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)para indicar que um item de mídia precisa ser pré-armazenado em cache. - Use a funcionalidade de pré-armazenamento em cache de
DefaultPreloadManagerno app de demonstração de formato curto. - Adição de setters de
DefaultLoadControl.Builderpara reprodução local e ajuste dos valores padrão deDefaultLoadControlpara funcionar bem com uma ampla variedade de arquivos locais. - Correção de um bug em que a definição de uma playlist vazia pode deixar o player em
STATE_READYouSTATE_BUFFERING. - Melhoria das APIs do gerenciador de pré-carregamento:
- Adicione
addMediaItems(List<MediaItem>, List<T>)eaddMediaSources(List<MediaSource>, List<T>), que adicionam os itens ou as fontes de mídia em lote e chamaminvalidate()automaticamente depois. - Adicione
removeMediaItems((List<MediaItem>)eremoveMediaSources(List<MediaSource>)que removem os itens ou as fontes de mídia em lote e verifique se o gerenciador de pré-carregamento não começa a pré-carregar ou continua pré-carregando nenhum deles após a remoção. - Permita que
DefaultPreloadManager.setCurrentPlayingIndex(int)se invalide automaticamente. Os apps não precisam mais chamarinvalidate()explicitamente depois de atualizar o índice de reprodução atual.
- Adicione
- Adicionamos a capacidade de pular a redefinição de frame-chave para buscas para frente no mesmo grupo de imagens no modo de limpeza.
- Adição de
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)para que os apps definam um valor de bytes de buffer de destino para um player com oplayerNameespecificado. ODefaultLoadControlagora pode tomar decisões para cada player separadamente com base nos próprios bytes alocados e nos bytes de buffer de destino. - Adicione
SkipInfoaoAdPlaybackState.AdGrouppara transmitir informações de pulo de cada anúncio no grupo. - Correção do bug em que chamar
removeMediaItems(List)durante a reprodução de um anúncio final causava uma falha (#2746). - Correção de algumas interrupções na reprodução de playlists em que os frames eram sempre definidos como a última amostra e renderizados por engano.
- Ative o caminho de nova tentativa se o player não conseguir gerar o ID da sessão de áudio (#2382, #2678).
- Adição de suporte para controlar o total de bytes de buffer para as origens em
DefaultPreloadManagerpara evitar que o total de bytes de buffer para pré-carregamento cresça arbitrariamente. Para usar a lógica de controle padrão, os apps podem definir os bytes de buffer de destino para pré-carregamento usandoDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)para umplayerNamedePlayerId.Preload.name("preload") e injetar oDefaultLoadControlcriado usandoDefaultPreloadManager.Builder.setLoadControl(LoadControl). - Adição de
cloneAndSet(int, int)aShuffleOrdercom uma implementação padrão (#2834). - Adição do deslocamento de retomada de conteúdo ao pular a reprodução de anúncios após o ajuste de busca ou a transição automática (#2484).
- Adição de uma API para definir e observar parâmetros de codec para faixas de áudio e vídeo.
Esse recurso é implementado para renderizadores baseados em
MediaCodece requer a API 29 ou mais recente.- Use
ExoPlayer.setAudioCodecParameters()eExoPlayer.setVideoCodecParameters()para aplicar parâmetros. - Use
ExoPlayer.addAudioCodecParametersChangeListener()eExoPlayer.addVideoCodecParametersChangeListener()para detectar mudanças. A observação de chaves específicas do fornecedor requer a API 31 ou mais recente.
- Use
- Correção de
IllegalStateExceptioncausado pela definição de uma fonte de mídia vazia depois de buscar uma posição diferente de zero e preparar o player com uma fonte de mídia não vazia. - Correção do bug em que a busca em outros itens de mídia no modo de limpeza
podia causar
IllegalStateException. - Correção de um possível
NullPointerExceptionemDefaultPlaybackSessionManager(#2885). - Ative as melhorias no desempenho de busca para vídeos qualificados.
- Reativamos o uso da descriptografia assíncrona no MediaCodec na API 36+, em que os problemas de tempo limite com essa API de plataforma foram corrigidos (#1641).
- Mude o valor padrão de
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUspara 15 ms e ative a remoção mais eficiente de frames de vídeo antes da decodificação para vídeos qualificados. - Adicione o limite máximo de memória ao cálculo automático de memória em
DefaultLoadControl. Isso só vai acontecer se um número excessivo de faixas for selecionado (#2860). - Correção de um bug em que, ao reproduzir em uma playlist ou no modo de repetição, a busca no modo de arraste perto do final podia causar uma busca pelo próximo item de mídia.
- Adicionamos uma detecção de player travado que aciona um erro de player
- CompositionPlayer:
- Publique
CompositionPlayerem uma nova anotação@ExperimentalApipara indicar que ele está disponível para testes, mas ainda está em desenvolvimento. É provável que algumas APIs mudem significativamente em versões futuras, e há problemas e limitações conhecidos em alguns casos de uso (alguns não documentados). - Adição de suporte para
COMMAND_SET_AUDIO_ATTRIBUTESe processamento de foco de áudio emCompositionPlayer. - Adição de suporte para mudança de velocidade em sequências secundárias em
CompositionPlayer. - Adição de suporte para
EditedMediaItem.removeVideo.
- Publique
- Transformador:
- Use
InAppMp4Muxercomo o muxer padrão. - Adição de
EditedMediaItem.Builder#setSpeed()e descontinuação deEffects#createExperimentalSpeedChangingEffects(). - Substitua
forceAudioTrackeforceVideoTrackportrackTypesemEditedMediaItemSequence.
- Use
- Seleção de faixas:
- Adicione
TrackSelectionParameters.selectTextByDefaultpara priorizar a seleção de qualquer faixa de texto sem especificar outras preferências mais específicas. - Adição de
preferredVideoLabels,preferredAudioLabelsepreferredTextLabelsemTrackSelectionParameterspara especificar uma preferência por faixas com um rótulo específico, por exemplo, aquelas lidas de tags de nome HLS (#1666).
- Adicione
- Extratores:
- FLAC: a detecção de cabeçalho foi reforçada para reduzir a chance de encontrar cabeçalhos falsos nos dados FLAC codificados, o que resulta em erros de decodificação (link em inglês#558).
- MP3: permite lacunas entre (e antes de) tags ID3 no início de arquivos MP3 (#811, #5718).
- MP3: aumento do limite de detecção para 128 kB para corresponder ao limite de pesquisa atual de um byte de sincronização (link em inglês).
- MP3: mudamos
FLAG_ENABLE_INDEX_SEEKINGpara priorizar a busca de informações em cabeçalhos de metadados (como Xing e VBRI), quando disponíveis, voltando para a busca baseada em índice se não houver outras informações de busca. Isso melhora o desempenho de arquivos com metadados de busca (#2839). - MP3: mudamos
Mp3Extractorpara usar como padrão uma suposição de taxa de bits constante (CBR, na sigla em inglês) quando nenhum metadado de busca (por exemplo, Xing, VBRI) é encontrado, mesmo quandoFLAG_ENABLE_INDEX_SEEKINGestá definido. Isso se baseia no histórico de especificações do MP3, em que a CBR era padrão e a VBR exige cabeçalhos explícitos. Isso melhora a capacidade de busca imediata de arquivos sem metadados, mas pode afetar a precisão de arquivos VBR sem cabeçalhos. A busca de índice agora é usada como substituto se a suposição de CBR não for pesquisável (por exemplo, para streams de tamanho desconhecido) (#2848). - MP4: elimine a ambiguidade entre os tipos MIME
audio/mpeg(MP3),audio/mpeg-L1eaudio/mpeg-L2ao analisar o valor da camada da primeira amostra antes de emitir um formato de faixa do extrator (#2683). - MP4: melhoria na eficiência de detecção de arquivos muito grandes, presumindo que uma
caixa
stblmaior que 1 MB implica que o arquivo não pode ser fragmentado (#2650). - MP4: adicionamos suporte aos metadados
©mvn(nome do movimento) e©mvi(índice do movimento), que agora são emitidos como objetosTextInformationFrameemFormat.metadatacom IDs deMVNMeMVIN, respectivamente (#2754). - MP4: ignora faixas com caixa
stsdausente (em vez de falhar ao analisar o arquivo inteiro). - Matroska: adição de suporte à detecção de DTS-HD (#6225).
- Correção de um problema no
MatroskaExtractorem que a busca podia ser imprecisa para arquivos com várias faixas. Os pontos de inserção agora estão associados corretamente às respectivas faixas, o que resulta em uma busca mais precisa. - MPEG-TS: correção de
IllegalArgumentExceptiondeReorderingBufferQueuecausado por pacotes PES sem carimbo de data/hora (#2764). - Adição de suporte para extrair fotos com movimento HEIC. O
HeifExtractoragora pode analisar arquivos HEIC que contêm faixas de vídeo e áudio incorporadas.
- Inspetor:
- Introduzimos um novo módulo
:media3-inspectorpara servir como o local dedicado para utilitários de inspeção de mídia. Esse módulo agora abriga um novoandroidx.media3.inspector.MetadataRetriever, que vai fornecer uma API unificada para extração de metadados e frames. Oandroidx.media3.exoplayer.MetadataRetrieveratual foi descontinuado em favor da nova versão. - Introdução da
androidx.media3.inspector.FrameExtractor, uma nova API pública para extração de frames. Essa classeAutoCloseableoferece uma maneira de extrair frames com suporte a vídeo HDR, efeitos de vídeo e seleção de decodificador personalizado. Ele precisa ser criado usando oBuilderpara umMediaItemespecífico. - FrameExtractor: adicionamos
getThumbnail()para extrair um frame de miniatura representativo de um arquivo de mídia sem exigir um carimbo de data/hora específico. - Adição de
androidx.media3.inspector.MediaExtractorCompat, um substituto para oandroid.media.MediaExtractorda plataforma que oferece uma maneira de extrair amostras de mídia codificadas e brutas de um arquivo de mídia. Aandroidx.media3.exoplayer.MediaExtractorCompatatual foi descontinuada em favor dessa nova classe.
- Introduzimos um novo módulo
- Áudio:
- Faça com que as instâncias de
AudioProcessorfiquem cientes da busca. - Permitir a injeção da nova interface
AudioOutputProvideremDefaultAudioSink.Builderpara oferecer suporte a caminhos de saída de áudio personalizados. O padrão éAudioTrackAudioOutputProvider. - Processar buscas em
GainProcessor. - Utilização dos recursos de perfil e nível do decodificador AC-4 na avaliação de suporte ao formato de faixa (#2580).
- Evitamos possíveis atrasos causados pelo processamento de callbacks de mudança de roteamento no início da reprodução (#2646).
- Permitir a reutilização de codec para os formatos EAC3, EAC3-JOC e AC-4 (#1346).
- Adição de suporte para amostras de PCM flutuantes em
Sonic. - Adição de suporte a amostras de PCM de 16 bits em
ToFloatPcmAudioProcessor.
- Faça com que as instâncias de
- Vídeo:
- Desativar a reutilização de codec para conteúdo Dolby-Vision com perfis diferentes.
- Reativamos a solução alternativa para pontos de desempenho informados incorretamente para codecs seguros (#2856).
- Texto:
- Correção da análise de legendas CEA-6/708 em conteúdo Dolby Vision (#2775).
- Imagem:
- Correção do problema do ScrubbingMode em que o player fica travado ao arrastar uma faixa de miniatura DASH (#2815).
- DRM:
- Mude o tipo de retorno dos métodos
MediaDrmCallbackdebyte[]para um novo tipoMediaDrmCallback.Response, para permitir o retorno de outras informações opcionais. Essa é uma alteração interruptiva de origem, mas as falhas podem ser facilmente resolvidas ao unir o valor de retornobyte[]anterior comnew Responseantes de retornar. - Adição de informações importantes sobre solicitações, como URL e latência, a
AnalyticsListener.onDrmKeysLoaded(#1001). - Mova os dados da solicitação de provisionamento de um parâmetro de URL para o corpo do POST.
- Mude o tipo de retorno dos métodos
- Efeito:
- Adição de
Presentation.copyWithUnsetSideRoundedTopara arredondar o lado de saída não definido quandoPresentationé criado com um único comprimento lateral.
- Adição de
- Muxers:
- Adição de
MediaMuxerCompat, uma substituição direta para o frameworkMediaMuxer. MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()foi adicionado para permitir a criação de fotos com movimento.- Adição de
WebmMuxerpara permitir a multiplexação de streams de mídiaOPUS,VORBIS,VP8eVP9em um formato de arquivowebm.
- Adição de
- Extensão de IMA:
- Remoção de regras personalizadas do ProGuard para que os apps possam usar as regras lançadas no arquivo do IMA para Android.
- Adicionamos
ImaServerSideAdInsertionUriBuilder.setNetworkCode, uma nova API para definir o código de rede do Google Ad Manager para que o SDK do IMA processe identificadores de anúncios conforme especificado nas configurações do Google Ad Manager. Os códigos de rede são opcionais, mas recomendados para solicitações de stream de serviço completo. Para encontrar o código de rede, consulte este artigo. - A dependência do IMA foi atualizada para a versão 3.37.0, que exige a ativação da simplificação da biblioteca principal. Isso também precisa ser ativado pelos apps dependentes. Consulte as observações de configuração do IMA. * Suporte a opções de interface personalizada de DAI do IMA no criador de URI de SSAI. As opções de interface personalizada para inserção de anúncios do lado do servidor incluem suporte à renderização de "Pulável" e "Sobre este anúncio". No momento, o recurso está disponível para editores selecionados em uma lista de permissões. Essa mudança também atualiza a versão do SDK do IMA para 3.38.0 (notas da versão) para acessar a API de opções de interface personalizada.
- Correção de um problema em que o erro de preparação de conteúdo após um anúncio era informado incorretamente como um erro de reprodução de anúncio (#2656).
- Sessão:
- Adição de um novo parâmetro a
MediaSession.Callback.onPlaybackResumptionpara indicar se a chamada acontece apenas para coletar informações ou para iniciar a reprodução (#1764). - Atualização de
MediaSession.ControllerInfo.isTrustedpara também declarar os controladores do próprio app como confiáveis (#2542). - Adição de
MediaSessionService.triggerNotificationUpdatepara acionar manualmente uma atualização de notificação (#1833). - Adicione
ProgressListeneraos métodos de comando personalizados. - Mude o valor padrão de
MediaLibrarySession.Builder.setLibraryErrorReplicationModepara não fatal. - Adição de um parâmetro
ContextaMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Ler o ID de controle de volume da plataforma
PlaybackInfoem vez de buscá-lo pelo binder. Isso garante que o tipo de reprodução e o ID de controle de volume sejam lidos de forma atômica e correspondam um ao outro. - Correção de um bug em que os eventos de tecla
ACTION_UPeram filtrados antes de serem transmitidos ao callback para processamento personalizado. Isso traz paridade com o que o media1 e a plataforma fazem (#2637). - Correção de um bug em que
getCurrentTimeline()era chamado porPlayerWrappermesmo quando o comando não estava disponível (#2665). - Correção de um bug em que uma mensagem era deixada na fila de mensagens do looper principal, o que causava um vazamento de memória após o encerramento do serviço (#2692).
- Quando conectado a um app de sessão legado com um
MediaBrowser, os comandos personalizados são enviados para a sessão apenas se a ação personalizada for anunciada como uma ação personalizada emPlaybackStateCompatda sessão legada. Todas as outras ações personalizadas são enviadas ao serviço. - Implementação de
onAudioSessionIdChangedpara notificar os controladores de mídia quando um ID de sessão de áudio é definido pela sessão (#244). - Correção de um bug em que o
KEYCODE_HEADSETHOOKnão iniciava o player e o evento de tecla de mídiaIntentchegava emonStartCommand(). Isso foi corrigido processando "KEYCODE_HEADSETHOOK" comoKEYCODE_MEDIA_PLAY_PAUSE(#2816). - Correção de um bug em que o tamanho da superfície não era comunicado entre a sessão
e o controlador, resultando na falha ao aplicar efeitos de vídeo na
sessão de demonstração. Se você estiver usando um controlador, isso pode ser uma alteração interruptiva
se o player não puder processar uma chamada
setVideoSurfaceHolder. - Correção da propagação de valores de metadados
CharSequenceque não sãoString, como strings com estilo de span (#2853). - Adição de
CommandButton.executeActionpara que os controles possam acionar a ação pretendida com mais facilidade. Também permitem especificar parâmetros para alguns comandos de player e sessão para definir qual ação acionar. - Adicione compatibilidade com versões anteriores para instâncias de
CommandButtonusandoPlayer.CommandouSessionCommandnão personalizado para definir a ação. Agora, eles são representados corretamente nas sessões de mídia da plataforma, por exemplo, para a interface do sistema ou o Android Auto. - Correção de um problema em que o mesmo
Bitmapé compactado várias vezes ao conectar umMediaControllera uma sessão de mídia da plataforma.
- Adição de um novo parâmetro a
- Interface:
- Adicione a classe
ProgressStateWithTickIntervale o elemento combinávelrememberProgressStateWithTickIntervalcorrespondente ao módulomedia3-ui-compose. Esse detentor de estado é usado emdemo-composepara mostrar a posição e a duração atuais em formato de texto. - Adicione
MuteButtonStateaui-compose, que processa o silenciamento do volume dePlayer. Esse detentor de estado é usado emdemo-composepara mostrar o botão ativar/desativar som. - Adicione classes
ProgressStateWithTickCounte o elemento que pode ser compostorememberProgressStateWithTickCountcorrespondente ao módulomedia3-ui-compose. Esse detentor de estado é usado emdemo-composepara mostrar o progresso como uma barra de progresso horizontal somente leitura. - Adicione o elemento combinável
ContentFrameamedia3-ui-compose, que combina o gerenciamento dePlayerSurfacecom o redimensionamento da proporção e a cobertura com um obturador. - Contornamos um bug conhecido da plataforma da API 34 que causava vídeos esticados/cortados
ao usar
SurfaceViewdentro de umAndroidViewdo Compose e, portanto, afetava os elementos combináveisContentFrameePlayerSurfacecomSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - Crie um novo módulo
media3-ui-compose-material3e adicione elementos combináveis com o tema do Material 3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - Adicione o elemento combinável
TimeTextamedia3-ui-compose-material3para mostrar o progresso do jogador em formato de texto. Ele pode ser configurado para mostrar a posição atual, a duração ou o tempo restante. - Adição de suporte para colocar um botão de rota de mídia na
PlayerView. - Uso de
BidiFormatterpara mostrar corretamente a pontuação em legendas de texto RTL (#11214).
- Adicione a classe
- Extensão HLS:
- Analisar os atributos de pulo de intersticial do HLS.
- Mapeie os atributos de controle de pulo da playlist HLS e do documento da lista de recursos
no
AdPlaybackStatepara acesso público. - Correção de bug em que o horário de início da playlist era descartado quando a tag EXT-X-PROGRAM-START-DATE que definia a data de início era removida de uma playlist (#2760).
- Use a pesquisa binária para encontrar o índice de segmento de uma determinada posição na playlist (#2826).
- Adição de
HlsInterstitialsAdsLoader.skipCurrentAd()eskipCurrentAdGroup()e métodos correspondentes para pular anúncios e grupos de anúncios por índice. - Adição de
HlsInterstitialsAdsLoader.Listener.onAdStartedpara informar o início de um período de anúncio (#2859). - Aceitar espaço como separador de data/hora em strings de data/hora ISO 8601.
- Processamento correto da busca do próximo bloco para um
HlsMediaPlaylistsem segmentos (#2821). - Use a posição inicial padrão para anúncios precedentes em transmissões ao vivo.
- Extensão DASH:
- Correção de
UnsupportedOperationExceptionao reproduzir streams DASH com um manifesto de URIdata:não hierárquico (#2688). - Redefina
LiveConfigurationpara o valor fornecido peloMediaItemdoDashMediaSourcequando liberado e quando o item de mídia for atualizado pelo usuário (#2606). - Evitamos falhas causadas por atualizações de manifesto inválidas que não foram informadas como erros do player (#2805).
- Correção de
- Extensão RTSP:
- Tratamento de erros de pacotes RTP ausentes ao processar unidades NAL fragmentadas para H264 e H265 (#2613).
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Extensão AV1: o decodificador de software AV1 agora usa a biblioteca
dav1dde alto desempenho, substituindo a implementação anterior delibgav1para melhorar a velocidade de decodificação. - Extensão FFmpeg: correção de um problema que impedia a reprodução de alguns arquivos FLAC,
garantindo que o bloco
STREAMINFOseja analisado e transmitido corretamente para o decodificador (#2887).
- Extensão AV1: o decodificador de software AV1 agora usa a biblioteca
- Extensão do Google Cast:
- Adicione
CastPlayer.Builder, que permite que oCastPlayerfaça a reprodução local e de transmissão. Para manter o comportamento antigo doCastPlayerde oferecer suporte apenas à reprodução do Cast, useRemoteCastPlayer. Os construtoresCastPlayerpreexistentes mantêm o comportamento antigo, mas foram descontinuados em favor do uso dos buildersCastPlayerouRemoteCastPlayer. - Parar de aplicar um tipo MIME não nulo em
DefaultMediaItemConverter. - Use
MediaItem.mediaMetadata.mediaTypepara inferir o MEDIA_TYPE do Cast a ser usado emDefaultCastOptionsProvider#toMediaQueueItem, quando disponível. - Ative as transferências remotas para locais em
DefaultCastOptionsProvider. - Adicione suporte ao Cast na demonstração da sessão.
- Adição de suporte para mostrar um botão de rota de mídia em uma interface combinável.
- Adicione suporte para mostrar um botão de rota de mídia em um menu da barra de ações.
- Adição de suporte para mostrar um botão de rota de mídia como uma interface de visualização.
- Adicione
- Utilitários de teste:
- Adicione a diferença de tempo máxima para o comportamento de avanço automático de
FakeClock. O padrão é 1 segundo, mas é configurável por meio deFakeClock.Builder. - Adição da diferença máxima de tempo entre mensagens para
RobolectricUtil.runMainLooperUntil(erunLooperUntil). O padrão é 1 segundo, mas é configurável usando novas sobrecargas desses métodos. - Mova
CapturingRenderersFactorydetest-utilsparatest-utils-robolectric.
- Adicione a diferença de tempo máxima para o comportamento de avanço automático de
- Símbolos descontinuados foram removidos:
- Remoção do construtor
DefaultPreloadManagerdescontinuado. UseDefaultPreloadManager.Builder - Os construtores
EditedMediaItemSequencedescontinuados foram removidos. UseEditedMediaItemSequence.Builder - O
BitmapFactoryImageDecoder.BitmapDecoderfoi removido. UseExternallyLoadedImageDecoder - Remoção do
ShadowMediaCodecConfig.forAllSupportedMimeTypes()descontinuado. UseShadowMediaCodecConfig.withAllDefaultSupportedCodecs(). - Remoção de
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes(), que foi descontinuado. UseShadowMediaCodecConfig.withNoDefaultSupportedCodecs()
- Remoção do construtor
1.9.0-rc01
1º de dezembro de 2025
Use a versão estável 1.9.0.
1.9.0-beta01
20 de novembro de 2025
Use a versão estável 1.9.0.
1.9.0-alpha01
22 de outubro de 2025
Use a versão estável 1.9.0.
Versão 1.8.0
1.8.1
21 de maio de 2026
A versão 1.8.1 contém os seguintes commits.
- Efeito:
- Defina explicitamente
GL_DRAW_BUFFEReGL_READ_BUFFERao fazer a transição do contexto sem superfície.
- Defina explicitamente
Versão 1.8.0
30 de julho de 2025
A versão 1.8.0 contém estes commits.
- Biblioteca comum:
- Adição de suporte para substituir o player em
ForwardingSimpleBasePlayer.
- Adição de suporte para substituir o player em
- ExoPlayer:
- Adição de getter para o modo de ordem aleatória à interface
ExoPlayer(#2522). - Gera uma exceção de forma mais clara se
DefaultAudioSinkfor acessado de várias linhas de execução. Se isso acontecer devido a uma chamada paraRendererCapabilities.getFormatSupportfora do player, chame esse método na mesma linha de execução de reprodução do ExoPlayer ou use uma instância diferente da usada para reprodução (#1191). - Correção de um bug em que formatos de áudio não estéreo em TVs podiam ser marcados como
não compatíveis com
DefaultTrackSelector. - Verifique se o último frame é renderizado corretamente ao usar a flag
DECODE_ONLYdo MediaCodec, que é ativada por padrão no modo de limpeza. - Adicionamos suporte ao uso do ID do dispositivo virtual do
Contexttransmitido paraExoPlayer.Builder. - Ativar a programação dinâmica por padrão no modo de limpeza.
- Evite o recarregamento desnecessário de uma fonte ao buscar o final de um item.
- Use
MediaCodec.BUFFER_FLAG_DECODE_ONLYpor padrão no modo de limpeza. - Geração de
IllegalStateExceptionquandoPreloadMediaSourceé reproduzido por umExoPlayercom uma linha de execução de reprodução diferente da linha de execução de pré-carregamento (#2495). - Adição de
cloneAndMoveaShuffleModecom uma implementação padrão (#2226). - Mude o comportamento padrão de
Renderer.getMinDurationToProgressUspara retornar um valor maior se nenhuma chamada pararenderfor necessária. - Correção de um bug em que a programação interna atrasava o último frame ao buscar o
fim durante uma pausa. Por enquanto, a correção de bug só entra em vigor se
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledestiver ativado. - Adicione o método
ExoPlayer.setScrubbingModeEnabled(boolean). Isso otimiza o player para muitas buscas frequentes (por exemplo, de um usuário arrastando uma barra de rolagem). O comportamento do modo de limpeza pode ser personalizado comsetScrubbingModeParameters(..)emExoPlayereExoPlayer.Builder. - Permitir a personalização da tolerância de busca fracionária no modo de limpeza.
- Aumente a taxa de operação do codec no modo de limpeza.
- Correção de um bug em que os erros de preparação no conteúdo de
AdsMediaSourcepodem nunca ser informados (#2337). - Correção do vazamento de memória em
MergingMediaSource, por exemplo, usado ao carregar legendas (#2338). - Permitir que
CmcdConfiguration.Factoryretornenullpara desativar a geração de registros de CMCD para itens de mídia específicos (#2386). - O tamanho padrão do buffer de imagem foi aumentado de 128 kB (erro de copiar e colar de faixas de texto) para 26 MB, o que é suficiente para imagens Ultra HDR de 50 MP (#2417).
- Adicionamos
PreCacheHelper, que permite que os apps pré-armazenem em cache uma única mídia com posição inicial e duração especificadas. - Adição de suporte ao pré-carregamento de uma posição especificada em
DefaultPreloadManager.
- Adição de getter para o modo de ordem aleatória à interface
- Transformador:
- Adição de
CodecDbLite, que permite otimizações específicas do chipset para as configurações de codificação de vídeo. - Adicione a flag
setEnableCodecDbLiteaoDefaultEncoderFactorypara ativar a otimização das configurações do CodecDB Lite. Por padrão, essa sinalização é definida como falsa. - O preenchimento de uma lacuna inicial (adicionada usando
addGap()) com áudio silencioso agora requer a definição explícita deexperimentalSetForceAudioTrack(true)emEditedMediaItemSequence.Builder. Se a lacuna estiver no meio da sequência, essa flag não será necessária. - Mover a interface
Muxerdemedia3-transformerparamedia3-muxer. - Torne a configuração
MediaItem.Builder().setImageDuration(long)obrigatória para importar um item de mídia como uma imagem. - Adicione
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean), que inclui uma lista de edição de MP4 ao cortar para instruir os players a ignorar amostras entre o frame-chave antes do ponto de início do corte e o ponto de início do corte. - Atualize o app de demonstração de composição para usar o Kotlin e o Jetpack Compose e adicione um
VideoCompositorSettingspersonalizado para organizar sequências em um layout 2x2 ou PiP.
- Adição de
- Extratores:
- Análise de metadados de arquivos MP4 fragmentados (#2084).
- JPEG: suporte a fotos com movimento que não têm um segmento Exif no início (link em inglês).
- Adição de suporte para busca em MP4 fragmentado com vários átomos
sidx. Esse comportamento pode ser ativado usando a flagFLAG_MERGE_FRAGMENTED_SIDXemFragmentedMp4Extractor(#9373). - Ignorar tabelas de busca vazias em arquivos FLAC (incluindo aquelas que contêm apenas pontos de busca de marcador de posição) e voltar para a busca binária se a duração do arquivo for conhecida (#2327).
- Correção da análise de unidades SEI H.265 para pular totalmente os tipos de SEI não reconhecidos (#2456).
- Atualização de
WavExtractorpara usar os dados de SubFormat da extensão de cabeçalho para o formato de áudio ao analisar um arquivo do tipoWAVE_FORMAT_EXTENSIBLE. - MP4: adicionamos suporte às caixas
ipcmefpcmque definem faixas de áudio PCM brutas (o PCM de ponto flutuante de 64 bits não é compatível). - MP4: processar a parte de rotação das matrizes de transformação
tkhdque giram e refletem o vídeo. Isso garante que os vídeos refletidos feitos pela câmera frontal do iPhone sejam mostrados da maneira correta, mas refletidos incorretamente no eixo y (link em inglês). - MP3: use a duração e o tamanho dos dados de metadados de taxa de bits variável
Xing, VBRI e similares não pesquisáveis ao voltar para a busca de taxa de bits constante
devido a
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Áudio:
- Correção de um bug em que
AnalyticsListener.onAudioPositionAdvancingnão é chamado quando a reprodução de áudio é iniciada muito perto do fim da mídia. - Adição de suporte para todos os formatos de amostra de PCM linear em
ChannelMappingAudioProcessoreTrimmingAudioProcessor. - Adição de suporte para lacunas de áudio em
CompositionPlayer. - Remoção da chamada espúria para
BaseAudioProcessor#flush()deBaseAudioProcessor#reset(). - Permitir upmixing/downmixing de energia constante no DefaultAudioMixer.
- Tornar
ChannelMappingAudioProcessor,TrimmingAudioProcessoreToFloatPcmAudioProcessorpúblicos (#2339). - Use
AudioTrack#getUnderrunCount()emAudioTrackPositionTrackerpara detectar underruns emDefaultAudioSinkem vez de estimativa de melhor esforço. - Melhoria na suavização do carimbo de data/hora de áudio para desvios de posição inesperados do dispositivo de saída de áudio.
- Correção de um bug em que a sincronização de áudio/vídeo é interrompida nos primeiros 10 segundos após a retomada da pausa quando conectado a dispositivos Bluetooth.
- Correção do bug em que
AnalyticsListener.onAudioPositionAdvancingnão informava o horário em que o áudio começou a avançar, mas o horário da primeira medição. - Correção da recuperação para áudio multicanal após o fallback para áudio estéreo em alguns dispositivos (#2258).
- Correção de um bug em que
- Vídeo:
- Estendemos a solução alternativa de superfície separada para dispositivos "lenovo" e "motorola" (#2059).
- Melhoria na liberação de frames de vídeo suaves na inicialização quando as amostras de áudio não começam exatamente na posição solicitada.
- A solução alternativa de superfície separada foi estendida para dispositivos "realme" (#2059).
- Adição da API experimental
ExoPlayerpara incluir a flagMediaCodec.BUFFER_FLAG_DECODE_ONLYao colocar em fila buffers de entrada somente de decodificação. Essa flag sinaliza ao decodificador para pular os buffers somente de decodificação, resultando em uma busca mais rápida. Ative-o comDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * Melhoria nas verificações de desempenho de codecs de vídeo de software. Isso pode fazer com que algumas faixas adicionais sejam marcadas comoEXCEEDS_CAPABILITIES. - Correção de erros de reprodução do VP9 Widevine em alguns dispositivos (#2408).
- Texto:
- Adição de suporte a faixas VobSub em arquivos MP4 (#2510).
- Correção de uma interrupção de reprodução quando um segmento de legenda não é carregado inicialmente e, depois, é carregado com sucesso, seguido por vários segmentos de legenda vazios (#2517).
- Correção do SSA e do SubRip para mostrar uma indicação em andamento ao ativar legendas (#2309).
- Correção do travamento da reprodução ao mudar de uma transmissão com um erro de legenda para uma transmissão ao vivo com uma faixa de legenda vazia (#2328).
- Correção de legendas CEA-608 distorcidas ao reproduzir streams H.262 que contêm frames B (#2372).
- Foi adicionado suporte a legendas SSA com
CodecId = S_TEXT/SSAem arquivos Matroska. Anteriormente, oMatroskaExtractorsó oferecia suporte aCodecId = S_TEXT/ASS, que representa a variante "avançada" (v4+) das legendas do SubStation Alpha (mas a lógica de análise do ExoPlayer é a mesma para as duas variantes) (#2384). - Adição de suporte à propriedade
layerem arquivos de legenda SubStation Alpha (SSA), usada para definir a ordem Z de indicações quando mais de uma é mostrada na tela ao mesmo tempo (#2124).
- Metadados:
- Adicionamos suporte para recuperar a duração da mídia e
TimelineparaMetadataRetrievere migramos para uma APIAutoCloseablebaseada em instância. Use o novoBuilderpara criar uma instância para umMediaIteme, em seguida, chameretrieveTrackGroups(),retrieveTimeline()eretrieveDurationUs()para receberListenableFutures para os metadados. Os métodos estáticos anteriores foram descontinuados (#2462).
- Adicionamos suporte para recuperar a duração da mídia e
- Imagem:
- Limite os bitmaps decodificados ao tamanho de exibição em
BitmapFactoryImageDecoderpara evitar que um app falhe comCanvas: trying to draw too large bitmap.dePlayerViewao tentar mostrar imagens muito grandes (por exemplo, 50 MP). - Mude a assinatura de
DefaultRenderersFactory.getImageDecoderFactory()para usar um parâmetroContext. - Alinhamos o tamanho máximo de saída do bitmap usado em
CompositionPlayercom o já usado emTransformer. Isso significa queCompositionPlayernão considera o tamanho da tela ao decodificar bitmaps, ao contrário deExoPlayer.
- Limite os bitmaps decodificados ao tamanho de exibição em
- DRM:
- Adição de uma nova sobrecarga de
OfflineLicenseHelper.newWidevineInstanceque aceita umMediaItem.DrmConfigurationpara que os cabeçalhos da solicitação HTTP possam ser aplicados corretamente (#2169).
- Adição de uma nova sobrecarga de
- Efeito:
- Adição de
Presentation.createForShortSide(int), que cria umPresentationque garante que o lado mais curto sempre corresponda ao valor fornecido, independentemente da orientação de entrada.
- Adição de
- Muxers:
- Correção de um bug em que as flags de amostra corretas não eram definidas para amostras de áudio em MP4 fragmentado.
- A API
writeSampleData()agora usa a classeBufferInfoespecífica do muxer, em vez deMediaCodec.BufferInfo. - Adicione
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, que tem como padrão "false".
- Extensão de IMA:
- Correção de um bug em que um erro de carregamento em um anúncio podia invalidar acidentalmente outro grupo de anúncios.
- Correção de um bug em que os grupos de anúncios após o fim de uma janela de VOD travavam a reprodução.
Os grupos de anúncios com um horário de início após a janela não são mais colocados na fila do
MediaPeriodQueue(link em inglês).
- Sessão:
- Correção do bug em que as conexões de controladores Media3 de terceiros não privilegiados são ignoradas.
- Remoção da verificação de comandos disponíveis ao enviar comandos personalizados para um
MediaBrowserServiceCompatlegado. Isso é equivalente ao comportamento de controladores/navegadores legados quando conectados a um app legado. - Correção de um bug que fazia com que o primeiro erro de reprodução de um player fosse tratado incorretamente como uma exceção personalizada persistente. Isso impede que o aplicativo se recupere.
- Correção de um bug em que algumas mudanças no controlador que não são processadas pela
sessão podem causar
IllegalStateExceptions. - Correção de um bug em que as ações do controle que não são processadas pela sessão podem deixar o controle em um estado inválido.
- Correção do aviso de violação de inicialização não segura do StrictMode (#2330).
- Correção do bug em que chamar
setSessionExtrasda linha de execução principal ao executar o player de uma linha de execução de aplicativo diferente da linha de execução principal causava umIllegalStateException(#2265). - Não mostrar automaticamente uma notificação se um player estiver configurado com itens
de mídia sem prepará-los ou reproduzi-los
(#2423https://github.com/androidx/media/issues/2423). Esse comportamento
pode ser configurado por meio de
MediaSessionService.setShowNotificationForIdlePlayer. - Adicione
PlaybackExceptionpersonalizados para todos os controladores ou os selecionados. - Correção de um bug em que a busca em uma transmissão ao vivo em um
MediaControllerpode causar umIllegalArgumentException. - Para transmissões ao vivo, interrompa a publicação de uma posição de reprodução e a capacidade de buscar no item atual para controladores de mídia da plataforma, para evitar artefatos de posição na interface do Android Auto (e outros controladores que usam essas informações da sessão de mídia da plataforma) (#1758).
- Correção de um bug em que a transmissão de nulo para
getLibraryRootde umMediaBrowserconectado a umMediaBrowserServiceCompatlegado produzia umNullPointerException. - Correção de um bug em que o envio de ações personalizadas, um resultado da pesquisa ou uma solicitação getItem
causava falhas no app de sessão legado com um
ClassNotFoundException. - Correção de um bug em que
MediaItem.LocalConfiguration.uriera compartilhado com oMediaMetadatadas sessões da plataforma. Para compartilhar intencionalmente um URI e permitir que os controladores solicitem a mídia novamente, definaMediaItem.RequestMetadata.mediaUri.
- Interface:
- Correção de um bug em que o
PlayerSurfacedentro de componentes reutilizáveis, comoLazyColumn, não funcionava corretamente (#2493). - Correção de um bug do Compose que resultava em uma lacuna entre a definição dos estados iniciais do botão e a observação da mudança de estado (por exemplo, formas de ícones ou ativação). As mudanças feitas no Player fora do período de observação agora são detectadas (#2313).
- Adicione detentores de estado e elementos combináveis ao módulo
media3-ui-composeparaSeekBackButtonStateeSeekForwardButtonState. - Adição de suporte ao modo de limpeza do ExoPlayer para
PlayerControlView. Quando ativado, o player entra no modo de arrasto quando o usuário começa a arrastar a barra de arrasto, emite uma chamadaplayer.seekTopara cada movimento e sai do modo de arrasto quando o toque é levantado da tela. Essa integração pode ser ativada comtime_bar_scrubbing_enabled = trueem XML ou o métodosetTimeBarScrubbingEnabled(boolean)em Java/Kotlin. - Faça com que
PlayerSurfaceaceite um argumentoPlayeranulável.
- Correção de um bug em que o
- Downloads:
- Adição de suporte a download parcial para streams progressivos. Os apps podem preparar um
stream progressivo com
DownloadHelpere solicitar umDownloadRequestdo auxiliar especificando as posições de início e término da mídia com base no tempo que o download precisa cobrir. ODownloadRequestretornado carrega o intervalo de bytes resolvido, com o qual umProgressiveDownloaderpode ser criado para baixar o conteúdo correspondente. - Adicione
DownloadHelper.Factory, que substitui os métodos estáticosDownloadHelper.forMediaItem(). - Adicione
Factorypara implementações deSegmentDownloader. - Adição de suporte a download parcial para streams adaptativos. Os apps podem preparar um
stream adaptável com
DownloadHelpere solicitar umDownloadRequestdo auxiliar especificando as posições de início e término da mídia com base no tempo que o download precisa cobrir. ODownloadRequestretornado contém o período resolvido, com o qual umSegmentDownloaderconcreto pode ser criado para fazer o download do conteúdo correspondente.
- Adição de suporte a download parcial para streams progressivos. Os apps podem preparar um
stream progressivo com
- Extensão do Cronet:
- Adição do processamento automático de cookies (#5975).
- Extensão HLS:
- Correção de um bug em que o
HlsSampleStreamWrappertenta buscar dentro do buffer quando não há blocos disponíveis no buffer #2598. - Correção do bug em que as mudanças na seleção de faixas após o carregamento de partes de baixa latência e as dicas de pré-carregamento podiam fazer com que a reprodução ficasse travada ou congelasse (#2299).
- Evitamos recargas excessivas aguardando metade da duração desejada quando
CAN-BLOCK-RELOAD=YESnão é respeitado pelo servidor (#2317). - Correção de um bug em que a reprodução era interrompida ao iniciar um stream de intersticiais antes de um anúncio intermediário e a resolução da lista de recursos era tentada para o anúncio errado (#2558).
- Correção da análise de playlists para aceitar
\f(alimentação de formulário) em valores de atributos de string entre aspas (#2420). - Suporte à atualização de intersticiais com o mesmo ID (#2427).
- Correção do bug em que os erros de carregamento da playlist às vezes não eram propagados quando uma transmissão ao vivo ficava sem segmentos para carregar (#2401https://github.com/androidx/media/issues/2401).
- Agrupar renderizações de legendas pela tag de nome, de forma semelhante ao agrupamento de renderizações de áudio (#1666).
- Suporte a X-ASSET-LIST e transmissões ao vivo com
HlsInterstitialsAdsLoader.
- Correção de um bug em que o
- Extensão DASH:
- Correção do problema em que o conjunto de adaptação de reprodução rápida é mesclado com o conjunto de adaptação principal para formar um
TrackGroupinválido (#2148). - Correção de um bug em que reduzir a duração de um período DASH pode gerar uma exceção quando amostras além da nova duração já foram lidas pelo pipeline de renderização (#2440).
- Correção do bug em que o redirecionamento não era seguido ao usar parâmetros de consulta CMCD (#2475).
- Correção do problema em que o conjunto de adaptação de reprodução rápida é mesclado com o conjunto de adaptação principal para formar um
- Extensão RTSP:
- Adição de suporte ao pacote de agregação RTP para H265 de acordo com a RFC 7798#4.4.2 (#2413).
- Correção de
RtspClientpara usar o URI de local fornecido ao processar uma resposta HTTP 302 (#2398). - Adicionamos suporte à análise para SessionDescriptions que contêm linhas com caracteres de espaço em branco no final (#2357).
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Correção de um bug em que
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangenão tem efeito para extensões de decodificador de áudio (#2258).
- Correção de um bug em que
- Extensão do Google Cast:
- Utilitários de teste:
- Adicionamos
advance(player).untilPositionAtLeasteuntilMediaItemIndexaTestPlayerRunHelperpara avançar o player até que uma posição específica seja alcançada. Na maioria dos casos, esses métodos são mais confiáveis do que os métodosuntilPositioneuntilStartOfMediaItematuais. - Mova
FakeDownloaderpara o módulotest-utils-robolectricpara reutilização em outros testes. transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)etransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)foram removidos. UseShadowMediaCodecConfigpara configurar codificadores e decodificadores de sombra.- O prefixo "exotest" foi substituído por "media3" em nomes de codec informados por
ShadowMediaCodecConfig.
- Adicionamos
- Símbolos descontinuados foram removidos:
- O construtor
SegmentDownloaderdescontinuadoSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)e os construtores correspondentes nas subclassesDashDownloader,HlsDownloadereSsDownloaderforam removidos. - Remoção de
Player.hasNext()ePlayer.hasNextWindow(), que foram descontinuados. UsePlayer.hasNextMediaItem(). - Remoção de
Player.next(), que foi descontinuado. UsePlayer.seekToNextMediaItem(). - Remoção de
Player.seekToPreviousWindow(), que foi descontinuado. UsePlayer.seekToPreviousMediaItem() - Remoção de
Player.seekToNextWindow(), que foi descontinuado. UsePlayer.seekToNextMediaItem() - O
BaseAudioProcessordescontinuado foi removido do móduloexoplayer. UseBaseAudioProcessorno módulocommon. - Remoção do construtor
MediaCodecVideoRendererdescontinuadoMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- O construtor
Versão 1.8.0-rc02
24 de julho de 2025
Use a versão estável 1.8.0.
Versão 1.8.0-rc01
16 de julho de 2025
Use a versão estável 1.8.0.
Versão 1.8.0-beta01
2 de julho de 2025
Use a versão estável 1.8.0.
Versão 1.8.0-alpha01
19 de maio de 2025
Use a versão estável 1.8.0.
Versão 1.7.0
Versão 1.7.1
16 de maio de 2025
Esta versão tem o mesmo código que a 1.6.1 e está sendo lançada para garantir que apareça como uma versão "mais recente" que a 1.7.0, que era uma versão Alfa acidentalmente marcada como estável (veja abaixo).
Versão 1.7.0
16 de maio de 2025
Esta versão deveria ser 1.7.0-alpha01, mas foi marcada acidentalmente como
1.7.0 (ou seja, estável) em maven.google.com. Não a use. Permaneça na
versão 1.6.1 ou faça upgrade para a 1.7.1 (que tem o mesmo código da 1.6.1).
Versão 1.6.0
1.6.1
14 de abril de 2025
Lançamento de androidx.media3:media3-*:1.6.1. A versão 1.6.1 contém estes
commits.
- Biblioteca comum:
- Adição do método
PlaybackParameters.withPitch(float)para copiar facilmente umPlaybackParameterscom um novo valorpitch(#2257).
- Adição do método
- ExoPlayer:
- Correção do problema em que a transição do item de mídia falhava devido a um erro recuperável do renderizador durante a inicialização do próximo item de mídia (#2229).
- Correção de um problema em que
ProgressiveMediaPeriodgera umIllegalStateExceptionquandoPreloadMediaSourcetenta chamar ogetBufferedDurationUs()antes de ser preparado (#2315). - Correção do envio de
CmcdDataem solicitações de manifesto para DASH, HLS e SmoothStreaming (#2253). - Verifique se
AdPlaybackState.withAdDurationsUs(long[][])pode ser usado depois que os grupos de anúncios forem removidos. O usuário ainda precisa transmitir uma matriz de durações para grupos de anúncios removidos, que pode estar vazia ou nula (#2267).
- Extratores:
- MP4: analisa
alternate_groupda caixatkhde o expõe como uma entradaMp4AlternateGroupDatanoFormat.metadatade cada faixa (link em inglês).
- MP4: analisa
- Áudio:
- Correção de um problema de descarregamento em que a posição podia ficar travada ao reproduzir uma playlist de conteúdo curto (#1920).
- Sessão:
- Reduzimos o tempo limite de agregação para callbacks da plataforma
MediaSessionde 500 para 100 milissegundos e adicionamos um setter experimental para permitir que os apps configurem esse valor. - Correção de um problema em que as notificações reapareciam depois de serem dispensadas pelo usuário (#2302).
- Correção de um bug em que a sessão retornava uma linha do tempo de item único quando o
player encapsulado estava vazio. Isso acontecia quando o player encapsulado
não tinha
COMMAND_GET_TIMELINEdisponível enquantoCOMMAND_GET_CURRENT_MEDIA_ITEMestava disponível e o player encapsulado estava vazio (#2320). - Correção de um bug em que a chamada de
MediaSessionService.setMediaNotificationProvideré ignorada silenciosamente após outras interações com o serviço, comosetForegroundServiceTimeoutMs(#2305).
- Reduzimos o tempo limite de agregação para callbacks da plataforma
- Interface:
- Ative o
PlayerSurfacepara trabalhar comExoPlayer.setVideoEffectseCompositionPlayer. - Correção de um bug em que o
PlayerSurfacenão podia ser recomposto com um novoPlayer.
- Ative o
- Extensão HLS:
- Correção de um problema em que a duração do bloco não era definida em
CmcdDatapara mídia HLS, causando uma falha de declaração ao processar segmentos de mídia criptografados (#2312).
- Correção de um problema em que a duração do bloco não era definida em
- Extensão RTSP:
- Adição de suporte a URI com esquema RTSPT como uma forma de configurar a sessão RTSP para usar TCP (#1484).
- Extensão do Google Cast:
- Adição de suporte para metadados de playlist (#2235).
1.6.0
26 de março de 2025
Lançamento de androidx.media3:media3-*:1.6.0. A versão 1.6.0 contém estes
commits.
- Biblioteca comum:
- Adição de
AudioManagerCompateAudioFocusRequestCompatpara substituir as classes equivalentes emandroidx.media. - Faça upgrade do Kotlin da versão 1.9.20 para a 2.0.20 e use o plug-in do Gradle do compilador do Compose. Fazer upgrade da biblioteca de corrotinas KotlinX da versão 1.8.1 para a 1.9.0.
- Remova o método
Format.toBundle(boolean excludeMetadata)e useFormat.toBundle(). - Correção de um bug em
SimpleBasePlayerem que a definição de um novocurrentMediaItemIndexemStateapóssetPlaylistcomnullMediaMetadatanão reavalia os metadados (#1940). - O acesso de
SimpleBasePlayer.Statefoi alterado de protegido para público para facilitar o processamento de atualizações em outras classes (#2128).
- Adição de
- ExoPlayer:
- Adição de
MediaExtractorCompat, uma nova classe que oferece recursos equivalentes à plataformaMediaExtractor. - Adição de suporte experimental de pré-aquecimento do ExoPlayer para reprodução usando
MediaCodecVideoRenderer. É possível configurarDefaultRenderersFactorypor meio deexperimentalSetEnableMediaCodecVideoRendererPrewarmingpara fornecer umMediaCodecVideoRenderersecundário paraExoPlayer. Se ativado, oExoPlayerpré-processa o vídeo de itens de mídia consecutivos durante a reprodução para reduzir a latência de transição de itens de mídia. - Reduza os valores padrão de
bufferForPlaybackMsebufferForPlaybackAfterRebufferMsemDefaultLoadControlpara 1.000 e 2.000 ms, respectivamente. - Inicialize o
DeviceInfoe o volume do dispositivo de forma assíncrona (se ativado usandosetDeviceVolumeControlEnabled). Esses valores não ficam disponíveis imediatamente apósExoPlayer.Builder.build(), ePlayer.Listenernotifica as mudanças usandoonDeviceInfoChangedeonDeviceVolumeChanged. - O ID da sessão de áudio inicial não fica mais disponível imediatamente após
a criação do player. Use
AnalyticsListener.onAudioSessionIdChangedpara ouvir a atualização inicial, se necessário. - Considere o idioma ao selecionar uma faixa de vídeo. Por padrão, selecione uma
faixa de vídeo "principal" que corresponda ao idioma da faixa de áudio
selecionada, se disponível. As preferências explícitas de idioma do vídeo podem ser
expressas com
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Adição do parâmetro
selectedAudioLanguageao métodoDefaultTrackSelector.selectVideoTrack(). - Adição do parâmetro
retryCountaMediaSourceEventListener.onLoadStartede aos métodosMediaSourceEventListener.EventDispatchercorrespondentes. - Correção de um bug em que itens de playlist ou períodos em streams DASH de vários períodos com durações que não correspondiam ao conteúdo real podiam causar congelamentos de frames no final do item (#1698).
- Mova
BasePreloadManager.Listenerpara umPreloadManagerListenerde nível superior. RenderersFactory.createSecondaryRendererpode ser implementado para fornecer renderizadores secundários para pré-aquecimento. O pré-aquecimento permite transições mais rápidas de itens de mídia durante a reprodução.- Ativação do envio de
CmcdDatapara solicitações de manifesto em formatos de streaming adaptável DASH, HLS e SmoothStreaming (#1951). - Forneça o
MediaCodecInfodo codec que será inicializado emMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Mude
AdsMediaSourcepara permitir que oAdPlaybackStatescresça adicionando grupos de anúncios. Modificações inválidas são detectadas e geram uma exceção. - Correção de um problema em que outros frames somente de decodificação podiam ser mostrados em rápida sucessão ao fazer a transição para a mídia de conteúdo após um anúncio intermediário.
- Faça com que
DefaultRenderersFactoryadicione duas instâncias deMetadataRendererpara permitir que os apps recebam dois esquemas diferentes de metadados por padrão. - Reavaliar se o carregamento em andamento de um bloco precisa ser cancelado quando a reprodução é pausada (link em inglês).
- Adicionamos uma opção a
ClippingMediaSourcepara permitir o corte em mídias não pesquisáveis. - Correção de um bug em que a busca com pré-aquecimento podia bloquear a transição do item de mídia seguinte.
- Correção de um bug em que
ExoPlayer.isLoading()permaneciatrueenquanto havia transição paraSTATE_IDLEouSTATE_ENDED(#2133). - Adição de
lastRebufferRealtimeMsaLoadControl.Parameter(#2113).
- Adição de
- Transformador:
- Adição de suporte à transmutação em formatos alternativos compatíveis com versões anteriores.
- Adição de suporte para transcodificação e transmuxing do formato Dolby Vision (perfil 8).
- Atualize os parâmetros de
VideoFrameProcessor.registerInputStreameVideoFrameProcessor.Listener.onInputStreamRegisteredpara usarFormat. - Gerar metadados estáticos de HDR ao usar
DefaultEncoderFactory. - Suporte adicionado ao diagnóstico da plataforma Android usando
MediaMetricsManager. O Transformer encaminha eventos de edição e dados de performance para a plataforma, o que ajuda a fornecer informações de performance 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 Transformer comTransformer.Builder.setUsePlatformDiagnostics(false). - Divida
InAppMuxeremInAppMp4MuxereInAppFragmentedMp4Muxer. UseInAppMp4Muxerpara produzir um arquivo MP4 não fragmentado, enquantoInAppFragmentedMp4Muxeré para produzir um arquivo MP4 fragmentado. - Mover a interface
Muxerdemedia3-muxerparamedia3-transformer. - Adição de
MediaProjectionAssetLoader, que fornece mídia de umMediaProjectionpara gravação de tela, e adição de suporte à gravação de tela ao app de demonstração do Transformer. - Adicione
#getInputFormat()à interfaceCodec. - A responsabilidade de liberar o
GlObjectsProviderfoi transferida para o autor da chamada emDefaultVideoFrameProcessoreDefaultVideoCompositorquando possível.
- Extratores:
- AVI: correção do processamento de arquivos com áudio compactado de taxa de bits constante em que o cabeçalho do stream armazena o número de bytes em vez do número de blocos.
- Corrigimos o processamento de unidades NAL com comprimentos expressos em 1 ou 2 bytes (em vez de 4).
- Correção de
ArrayIndexOutOfBoundsExceptionem listas de edição MP4 quando a lista começa em um frame não sincronizado sem um frame de sincronização anterior (#2062). - Correção de um problema em que os streams de TS podiam ficar travados em alguns dispositivos (#2069).
- FLAC: foi adicionado suporte para arquivos FLAC de 32 bits. Anteriormente, eles não eram reproduzidos com
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Áudio:
- Correção de
onAudioPositionAdvancingpara ser chamado quando a reprodução é retomada (antes, ele era chamado quando a reprodução era pausada). - Não ignore
SonicAudioProcessorquandoSpeedChangingAudioProcessorestiver configurado com parâmetros padrão. - Correção de um underflow em
Sonic#getOutputSize()que poderia causar a interrupção deDefaultAudioSink. - Corrigimos
MediaCodecAudioRenderer.getDurationToProgressUs()eDecoderAudioRenderer.getDurationToProgressUs()para que as buscas redefinam corretamente as durações fornecidas. - Defina
androidx.media3.common.audio.SonicAudioProcessorcomo final. - Adição de suporte para PCM flutuante a
ChannelMappingAudioProcessoreTrimmingAudioProcessor.
- Correção de
- Vídeo:
- Mudança de
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacepara protegido, para que os aplicativos possam substituir para bloquear o uso de superfícies de marcador de posição (#1905). - Adicionamos a análise experimental de dependência de amostra AV1 de
ExoPlayerpara acelerar a busca. Ative-o com a nova APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - Adição da API experimental
ExoPlayerpara descartar buffers de entrada do decodificadorMediaCodecVideoRendereratrasados que não são dependentes. Ative-o comDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * Correção de um problema em que um player sem uma superfície ficava pronto imediatamente e decodificava muito lentamente os frames pendentes (#1973). - Os dispositivos Xiaomi e OPPO foram excluídos do modo de superfície separada para evitar a oscilação da tela (#2059).
- Mudança de
- Texto:
- Adição de suporte a legendas VobSub (#8260).
- Interrompa o carregamento antecipado de todos os arquivos de legenda configurados com
MediaItem.Builder.setSubtitleConfigurationse, em vez disso, carregue apenas um se ele for selecionado pela seleção de faixa (#1721). - TTML: foi adicionado suporte para referenciar
tts:originetts:extentusandostyle(#2953). - Restrinja as marcações de tempo do WebVTT e do SubRip a exatamente três casas decimais. Antes, analisávamos incorretamente qualquer número de casas decimais, mas sempre presumíamos que o valor estava em milissegundos, o que levava a carimbos de data/hora incorretos (#1997).
- Correção do travamento da reprodução quando uma playlist contém itens cortados com legendas CEA-608 ou CEA-708.
- Correção de
IllegalStateExceptionquando um arquivo SSA contém uma indicação com duração zero (horário de início e término iguais) (#2052). - Suprimir (e registrar) erros de análise de legendas quando elas são multiplexadas no mesmo contêiner que o áudio e o vídeo (#2052).
- Correção do processamento de caracteres UTF-8 de vários bytes em arquivos WebVTT usando finais de linha CR (#2167).
- DRM:
- Correção do erro
MediaCodec$CryptoException: Operation not supported in this configurationao reproduzir conteúdo ClearKey em dispositivos com API anterior à 27 (link em inglês nº 1732).
- Correção do erro
- Efeito:
- A funcionalidade de
OverlaySettingsfoi movida paraStaticOverlaySettings.OverlaySettingspode ser uma subclasse para permitir configurações de sobreposição dinâmica.
- A funcionalidade de
- Muxers:
MuxerExceptionfoi movido para fora da interfaceMuxerpara evitar um nome totalmente qualificado muito longo.- O método
setSampleCopyEnabled()foi renomeado comosetSampleCopyingEnabled()emMp4Muxer.BuildereFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()eFragmentedMp4Muxer.addTrack()agora retornam um ID de rastreamentointem vez de umTrackToken.Mp4MuxereFragmentedMp4Muxernão implementam mais a interfaceMuxer.- Desativar o lote e a cópia de amostras de
Mp4Muxerpor padrão. - Correção de um bug em
FragmentedMp4Muxerque cria muitos fragmentos quando apenas a faixa de áudio é gravada.
- Sessão:
- Manter o estado do serviço em primeiro plano por mais 10 minutos quando a reprodução
for pausada, interrompida ou falhar. Isso permite que os usuários retomem a reprodução dentro desse
tempo limite sem correr o risco de restrições de serviço em primeiro plano em vários
dispositivos. Não é mais possível chamar
player.pause()para interromper o serviço em primeiro plano antes destopSelf()ao substituironTaskRemoved. UseMediaSessionService.pauseAllPlayersAndStopSelf(). - Mantenha a notificação visível quando a reprodução entrar em um estado de erro ou interrompido. A notificação só é removida se a playlist for limpa ou o player for liberado.
- Melhoramos o processamento das ações ACTION_PLAY e ACTION_PAUSE da MediaSession da plataforma Android para definir apenas uma delas de acordo com os comandos disponíveis e também aceitar se apenas uma delas estiver definida.
- Adição de
Contextcomo um parâmetro paraMediaButtonReceiver.shouldStartForegroundService(#1887). - Correção de um bug em que a chamada de um método
Playerem umMediaControllerconectado a uma sessão legada descartava as mudanças de uma atualização pendente. MediaSession.setSessionActivity(PendingIntent)agora aceita valores nulos (#2109).- Correção de um bug em que uma notificação desatualizada permanecia visível quando a playlist era limpa (#2211).
- Manter o estado do serviço em primeiro plano por mais 10 minutos quando a reprodução
for pausada, interrompida ou falhar. Isso permite que os usuários retomem a reprodução dentro desse
tempo limite sem correr o risco de restrições de serviço em primeiro plano em vários
dispositivos. Não é mais possível chamar
- Interface:
- Adicione detentores de estado e elementos combináveis ao módulo
media3-ui-composeparaPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateePlaybackSpeedState.
- Adicione detentores de estado e elementos combináveis ao módulo
- Downloads:
- Correção do bug em
CacheWriterque deixa as fontes de dados abertas e as áreas de cache bloqueadas caso a fonte de dados gere umExceptiondiferente deIOException(#9760).
- Correção do bug em
- Extensão HLS:
- Adicione uma primeira versão de
HlsInterstitialsAdsLoader. O carregador de anúncios lê os intersticiais de uma playlist de mídia HLS e os mapeia para oAdPlaybackStateque é transmitido para oAdsMediaSource. Essa versão inicial é compatível apenas com streams de VOD HLS com atributosX-ASSET-URI. - Adição do
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Os apps podem usá-la para criar instâncias deAdsMediaSourceque usam umHlsInterstitialsAdsLoaderde maneira conveniente e segura. - Analisar a tag
SUPPLEMENTAL-CODECSda playlist HLS para detectar formatos Dolby Vision (#1785). - A condição para buscar posições de sincronização em um stream HLS foi flexibilizada (#2209).
- Adicione uma primeira versão de
- Extensão DASH:
- Adição de suporte ao formato AC-4 Level-4 para DASH (#1898).
- Correção de um problema ao calcular o intervalo de atualização para inserção de anúncios em transmissões ao vivo de vários períodos (#1698).
- Análise do atributo
scte214:supplementalCodecsdo manifesto DASH para detectar formatos Dolby Vision (#1785). - Melhoria no processamento de transições de período em transmissões ao vivo em que o período contém amostras de mídia além da duração declarada (#1698).
- Correção de um problema em que conjuntos de adaptação marcados com
adaptation-set-switching, mas com idiomas ou sinalizações de função diferentes, são mesclados (#2222).
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Adição do módulo decodificador MPEG-H, que usa o decodificador MPEG-H integrado para decodificar áudio MPEG-H (#1826).
- Extensão MIDI:
- Conecte instâncias personalizadas de
AudioSinkeAudioRendererEventListeneraoMidiRenderer.
- Conecte instâncias personalizadas de
- Extensão do Google Cast:
- A dependência
play-services-cast-frameworkfoi atualizada para a versão 21.5.0 para corrigir uma falha deFLAG_MUTABLEem apps destinados à API 34 ou mais recente em dispositivos com o Google Play Services instalado, mas desativado (#2178).
- A dependência
- App de demonstração:
- Estenda
demo-composecom mais botões e melhore a integração dePlayerSurfacecom suporte a dimensionamento e obturador.
- Estenda
- Símbolos descontinuados foram removidos:
- O método
AudioMixer.create()descontinuado foi removido. UseDefaultAudioMixer.Factory().create() - Remova os seguintes métodos
Transformer.Builderdescontinuados:setTransformationRequest(), usesetAudioMimeType(),setVideoMimeType()esetHdrMode().setAudioProcessors(), defina o processador de áudio em umEditedMediaItem.Builder.setEffects()e transmita-o paraTransformer.start().setVideoEffects(), defina o efeito de vídeo em umEditedMediaItem.Builder.setEffects()e transmita-o paraTransformer.start().setRemoveAudio(), useEditedMediaItem.Builder.setRemoveAudio()para remover o áudio doEditedMediaItemtransmitido paraTransformer.start().setRemoveVideo(), useEditedMediaItem.Builder.setRemoveVideo()para remover o vídeo doEditedMediaItemtransmitido paraTransformer.start().setFlattenForSlowMotion(), useEditedMediaItem.Builder.setFlattenForSlowMotion()para nivelar oEditedMediaItemtransmitido paraTransformer.start().setListener(), useaddListener(),removeListener()ouremoveAllListeners().
- Remova os seguintes métodos
Transformer.Listenerdescontinuados:onTransformationCompleted(MediaItem), useonCompleted(Composition, ExportResult).onTransformationCompleted(MediaItem, TransformationResult), useonCompleted(Composition, ExportResult).onTransformationError(MediaItem, Exception), useonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationException), useonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationResult, TransformationException), useonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), useonFallbackApplied(Composition, TransformationRequest, TransformationRequest).
- Remoção da classe
TransformationResultdescontinuada. UseExportResult. - Remoção da classe
TransformationExceptiondescontinuada. UseExportException. - Remoção do
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONdescontinuado. UseTransformer.PROGRESS_STATE_NOT_STARTED - Remoção do
Transformer.setListener()descontinuado. UseTransformer.addListener(),Transformer.removeListener()ouTransformer.removeAllListeners(). - Remoção do
Transformer.startTransformation()descontinuado. UseTransformer.start(MediaItem, String) - Remoção do
SingleFrameGlShaderProgramdescontinuado. UseBaseGlShaderProgram - O
Transformer.flattenForSlowMotionfoi removido. UseEditedMediaItem.flattenForSlowMotion ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponenteExoPlayer.DeviceComponentforam removidos.- Contato removido:
androidx.media3.exoplayer.audio.SonicAudioProcessor. - Os seguintes métodos
DownloadHelperdescontinuados foram removidos:- Construtor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), useDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). getRendererCapabilities(RenderersFactory), é possível alcançar uma funcionalidade equivalente criando umDefaultRendererCapabilitiesListcom umRenderersFactorye chamandoDefaultRendererCapabilitiesList.getRendererCapabilities().- O método
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)foi removido. UsePlayerNotificationManager.setMediaSessionToken(MediaSession.Token)e transmita(MediaSession.Token) compatToken.getToken().
- Construtor
- O método
1.6.0-rc02
19 de março de 2025
Use a versão estável 1.6.0.
1.6.0-rc01
12 de março de 2025
Use a versão estável 1.6.0.
1.6.0-beta01
26 de fevereiro de 2025
Use a versão estável 1.6.0.
Versão 1.6.0-alpha03
6 de fevereiro de 2025
Use a versão estável 1.6.0.
Versão 1.6.0-alpha02
30 de janeiro de 2025
Use a versão estável 1.6.0.
Versão 1.6.0-alpha01
20 de dezembro de 2024
Use a versão estável 1.6.0.
Versão 1.5
Versão 1.5.1
December 19, 2024
Lançamento de androidx.media3:media3-*:1.5.1. A versão 1.5.1 contém estes
commits.
- ExoPlayer:
- Desativação do uso da descriptografia assíncrona no MediaCodec para evitar problemas de tempo limite de codec com essa API de plataforma (#1641).
- Extratores:
- MP3: não interrompa a reprodução antes do tempo quando o sumário de um frame
VBRInão cobrir todos os dados de MP3 em um arquivo (link em inglês nº 1904).
- MP3: não interrompa a reprodução antes do tempo quando o sumário de um frame
- Vídeo:
- Reversão do uso de valores de proporção de pixels fornecidos por
MediaCodecAdapterao processaronOutputFormatChanged(link em inglês).
- Reversão do uso de valores de proporção de pixels fornecidos por
- Texto:
- Correção de um bug em
ReplacingCuesResolver.discardCuesBeforeTimeUsem que a indicação ativa emtimeUs(iniciada antes, mas ainda não encerrada) era descartada incorretamente (#1939).
- Correção de um bug em
- Metadados:
- Extraia a numeração de disco/faixa e o gênero dos comentários do Vorbis em
MediaMetadata(#1958).
- Extraia a numeração de disco/faixa e o gênero dos comentários do Vorbis em
Versão 1.5.0
27 de novembro de 2024
Lançamento de androidx.media3:media3-*:1.5.0. A versão 1.5.0 contém estes
commits.
- Biblioteca comum:
- Adição de
ForwardingSimpleBasePlayer, que permite o encaminhamento para outro player com pequenos ajustes, garantindo total consistência e processamento de listeners (#1183). - Substitua o método
SimpleBasePlayer.State.playlistporgetPlaylist(). - Adicione uma substituição para
SimpleBasePlayer.State.Builder.setPlaylist()para especificar diretamente umTimelinee osTrackseMetadataatuais, em vez de criar uma estrutura de playlist. - Aumente o
minSdkpara 21 (Android Lollipop). Isso está alinhado com todas as outras bibliotecas do AndroidX. - Adição do artefato
androidx.media3:media3-common-ktx, que oferece funcionalidades específicas do Kotlin criadas com base na biblioteca Common. - Adição da função de extensão de suspensão
Player.listenpara criar uma corrotina que detectaPlayer.Eventsna bibliotecamedia3-common-ktx. - Remoção de anotações
@DoNotInlinede classes internas manualmente fora de linha projetadas para evitar falhas de verificação de classe no momento da execução. As versões recentes do R8 agora fazem automaticamente chamadas fora de linha como essas para evitar falhas no ambiente de execução. Portanto, a remoção manual não é mais necessária. Todos os usuários do Gradle da biblioteca já precisam estar usando uma versão do Plug-in do Android para Gradle que use uma versão do R8 que faça isso, devido acompileSdk = 35. Os usuários da biblioteca com sistemas de build que não são do Gradle precisam garantir que a etapa de redução/ofuscação equivalente ao R8 faça um processo de out-of-lining automático semelhante para evitar falhas de verificação de classe no ambiente de execução. Essa mudança já foi feita em outras bibliotecas do AndroidX.
- Adição de
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()agora pode ser chamado para cada item de mídia. Antes, ele não era chamado para o primeiro. UseMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()para ativar.- Adição de
PreloadMediaSource.PreloadControl.onPreloadErrorpara permitir que as implementações dePreloadMediaSource.PreloadControlrealizem ações quando ocorrer um erro. - Adicione
BasePreloadManager.Listenerpara propagar eventos de pré-carregamento para apps. - Permitir a mudança do tempo limite do cliente SNTP e tentar novamente endereços alternativos no tempo limite (#1540).
- Remova
MediaCodecAdapter.Configuration.flags, já que o campo sempre era zero. - Permitir que o usuário selecione o alto-falante integrado para reprodução no Wear OS API 35+ (em que o dispositivo anuncia suporte para isso).
- Adie a chamada de bloqueio para
Context.getSystemService(Context.AUDIO_SERVICE)até que o processamento do foco de áudio seja ativado. Isso garante que a chamada de bloqueio não seja feita se o processamento de foco de áudio não estiver ativado (link em inglês). - Permitir a reprodução, independente da duração do buffer, quando o carregamento falhar (#1571).
- Adição de
AnalyticsListener.onRendererReadyChanged()para sinalizar quando renderizadores individuais permitem que a reprodução esteja pronta. - Correção de
MediaCodec.CryptoException, que às vezes é relatado como um "erro de tempo de execução inesperado" quandoMediaCodecé operado no modo assíncrono (comportamento padrão na API 31+). - Transmita
bufferedDurationUsem vez debufferedPositionUscomPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Também mudaDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSparaDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS. Os apps precisam transmitir um valor que represente uma duração específica da posição inicial padrão para que a fonte de mídia correspondente seja pré-carregada com esse IntDef, em vez de uma posição. - Adição da implementação de
ForwardingRendererque encaminha todas as chamadas de método para outro renderizador (1703). - Adicione o pré-carregamento de playlist para o próximo item na playlist. Os apps podem
ativar o pré-carregamento chamando
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)de acordo. Por padrão, o pré-carregamento está desativado. Quando ativado, para não interferir na reprodução, oDefaultLoadControlrestringe o pré-carregamento para iniciar e continuar somente quando o player não estiver carregando para reprodução. Os apps podem mudar esse comportamento implementandoLoadControl.shouldContinuePreloading()de acordo (como ao substituir esse método emDefaultLoadControl). A implementação padrão deLoadControldesativa o pré-carregamento caso um app esteja usando uma implementação personalizada deLoadControl. - Adição do método
MediaSourceEventListener.EventDispatcher.dispatchEvent()para permitir a invocação de eventos de listeners de subclasse (1736). - Adicione
DefaultPreloadManager.Builder, que cria as instânciasDefaultPreloadManagereExoPlayercom configurações compartilhadas de forma consistente. - Remoção do parâmetro
Renderer[]deLoadControl.onTracksSelected(), já que a implementação deDefaultLoadControlpode recuperar os tipos de stream deExoTrackSelection[]. - O
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])foi descontinuado e o método foi marcado como final para evitar substituições. Use o novoDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]). - Informar eventos
MediaSourceEventListenerde fontes secundárias emMergingMediaSource. Isso vai resultar em eventos de início/erro/cancelamento/conclusão de carregamento sendo relatados para legendas de sideload (adicionadas comMediaItem.LocalConfiguration.subtitleConfigurations), que podem aparecer como eventos de carregamento duplicados emitidos porAnalyticsListener. - Evitar que erros de legenda e metadados interrompam completamente a reprodução.
Em vez disso, a faixa problemática é desativada, e a reprodução das faixas restantes
continua
(#1722).
- No novo processamento de legendas (durante a extração), os erros de análise associados (por exemplo,
dados de legenda inválidos) e de carregamento (por exemplo, HTTP 404) são emitidos
por callbacks
onLoadError. - No processamento de legendas legado (durante a renderização), apenas os erros de carregamento
associados são emitidos por callbacks
onLoadError, enquanto os erros de análise são ignorados silenciosamente (esse é um comportamento preexistente).
- No novo processamento de legendas (durante a extração), os erros de análise associados (por exemplo,
dados de legenda inválidos) e de carregamento (por exemplo, HTTP 404) são emitidos
por callbacks
- Correção de um bug em que itens de playlist ou períodos em streams DASH de vários períodos com durações que não correspondiam ao conteúdo real podiam causar congelamentos de frames no final do item (#1698).
- Adição de um setter a
SntpClientpara definir o tempo máximo decorrido desde a última atualização após a qual o cliente é reinicializado (#1794).
- Transformador:
- Adição de
SurfaceAssetLoader, que oferece suporte ao enfileiramento de dados de vídeo para o Transformer usando umSurface. ImageAssetLoaderinforma entrada sem suporte usandoAssetLoader.onErrorem vez de gerar umIllegalStateException.- Defina a duração da imagem usando
MediaItem.Builder.setImageDurationMsobrigatório para exportação de imagens. - Adição de suporte à exportação para lacunas em sequências de EditedMediaItems de áudio.
- Adição de
- Seleção de faixas:
DefaultTrackSelector: prioriza o áudio baseado em objetos em relação ao áudio baseado em canais quando outros fatores são iguais.
- Extratores:
- Permitir que
Mp4ExtractoreFragmentedMp4Extractoridentifiquem amostras H264 que não são usadas como referência por amostras subsequentes. - Adicionamos uma opção para ativar a busca baseada em índice em
AmrExtractor. - Tratar arquivos MP3 com mais de 128 kB entre frames válidos como truncados
(em vez de inválidos). Isso significa que os arquivos com dados que não são MP3 no final,
sem outros metadados para indicar o tamanho dos bytes de MP3, agora interrompem
a reprodução no final dos dados de MP3 em vez de falhar com
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Correção do processamento de amostras de pré-lançamento para posições de início de mídia que não são de frames-chave ao processar listas de edição em arquivos MP4 (#1659).
- Melhoramos o cálculo da taxa de frames usando a duração da mídia da caixa
mdhdemMp4ExtractoreFragmentedMp4Extractor(#1531). - Correção do dimensionamento incorreto de
media_timeem listas de edição de MP4. Emborasegment_durationjá tenha sido dimensionado corretamente usando a escala de tempo do filme,media_timeagora é dimensionado corretamente usando a escala de tempo da faixa, conforme especificado pelo padrão de formato MP4 (#1792). - Processamento de frames fora de ordem no cálculo de
endIndicespara MP4 com lista de edição (#1797). - Correção da análise de duração de mídia na caixa
mdhdde arquivos MP4 para processar valores-1(#1819). - Adição de suporte para identificar a caixa
h263em arquivos MP4 para vídeo H.263 (#1821). - Adição de suporte ao formato do arquivo de mídia de base ISO AC-4 Level-4 (#1265).
- Permitir que
- DataSource:
- Atualização de
HttpEngineDataSourcepara permitir o uso a partir da versão S da extensão 7 em vez do nível 34 da API (#1262). DataSourceContractTest: declara queDataSource.getUri()retorna o URI resolvido (conforme documentado). Quando isso for diferente do URI solicitado, os testes poderão indicar isso usando o novo métodoDataSourceContractTest.TestResource.Builder.setResolvedUri().DataSourceContractTest: declara queDataSource.getUri()egetResponseHeaders()retornam o valor "open" após uma chamada com falha paraopen()(devido a um recurso "not found") e antes de uma chamadaclose()subsequente.- Substituir
DataSourceContractTest.getNotFoundResources()permite que as subclasses de teste forneçam vários recursos "não encontrados" e também os cabeçalhos esperados. Isso permite distinguir entre HTTP 404 (com cabeçalhos) e "servidor não encontrado" (sem cabeçalhos).
- Substituir
- Atualização de
- Áudio:
- Configura automaticamente os metadados de volume CTA-2075 no codec se estiverem presentes na mídia.
- Garantir uma redução suave do volume ao buscar.
- Correção de sons de estalo que podem ocorrer durante buscas.
- Correção do acúmulo de erros de truncamento para o algoritmo de alongamento de tempo/mudança de tom do Sonic.
- Correção de um bug em
SpeedChangingAudioProcessorque causava a perda de frames de saída.
- Vídeo:
- O
MediaCodecVideoRendererevita decodificar amostras que não são renderizadas nem usadas como referência por outras amostras. - Na API 35 e em versões mais recentes,
MediaCodecAdapteragora pode receber umnullSurfaceemconfiguree chamadas para um novo métododetachOutputSurfacepara remover umSurfacedefinido anteriormente se o codec oferecer suporte a isso (MediaCodecInfo.detachedSurfaceSupported). - Use os valores de proporção de pixel fornecidos por
MediaCodecAdapter, se houver, ao processaronOutputFormatChanged(#1371). - Adicionamos uma solução alternativa para um problema no Galaxy Tab S7 FE que faz com que streams H264 seguros de 60 fps sejam marcados como incompatíveis (#1619).
- Adicionamos uma solução alternativa para codecs que travam após a última amostra sem retornar um sinal de fim de stream.
- O
- Texto:
- Adição de um
VoiceSpanpersonalizado e preenchimento para intervalos de voz do WebVTT (#1632). - Garantimos que o WebVTT em HLS com carimbos de data/hora de legenda muito grandes (que excedem
um
longde 64 bits quando representados como microssegundos e multiplicados pela base de tempo MPEG90,000) seja exibido (#1763). - Suporte a legendas CEA-608 em conteúdo Dolby Vision (#1820).
- Correção do travamento da reprodução em transmissões de vários períodos do DASH quando as legendas CEA-608 estão ativadas (#1863).
- Adição de um
- Metadados:
- Atribua o tipo
C.TRACK_TYPE_METADATAa faixas que contenham conteúdo icy ou vnd.dvb.ait.
- Atribua o tipo
- Imagem:
- Adicione
ExternallyLoadedImageDecoderpara simplificar a integração com bibliotecas externas de carregamento de imagens, como Glide ou Coil.
- Adicione
- DataSource:
- Adição de
FileDescriptorDataSource, um novoDataSourceque pode ser usado para ler de umFileDescriptor(#3757).
- Adição de
- Efeito:
- Adição de uma solução alternativa de
DefaultVideoFrameProcessorpara o escalonamento menor deSurfaceTexture.SurfaceTexturepode incluir um pequeno escalonamento que corta uma borda de 1 texel ao redor de um buffer cortado. Agora, isso é processado para que a saída seja mais próxima do esperado. - Acelerar
DefaultVideoFrameProcessor.queueInputBitmap(). Como resultado, a exportação de imagens para vídeos comTransformeré mais rápida.
- Adição de uma solução alternativa de
- Extensão de IMA:
- Correção de um bug em que limpar a playlist podia causar um
ArrayIndexOutOfBoundsExceptionemImaServerSideAdInsertionMediaSource. - Correção do bug em que as transmissões de DAI inseridas do lado do servidor sem um anúncio precedente podiam
resultar em um
ArrayIndexOutOfBoundsExceptionao reproduzir após o último anúncio intermediário (#1741).
- Correção de um bug em que limpar a playlist podia causar um
- Sessão:
- Adicione
MediaButtonReceiver.shouldStartForegroundService(Intent)para permitir que os apps suprimam um comando de reprodução recebido para retomar a reprodução substituindo esse método. Por padrão, o serviço é sempre iniciado, e a reprodução não pode ser suprimida sem que o sistema cause uma falha no serviço com umForegroundServiceDidNotStartInTimeException(#1528). - Correção de um bug que fazia com que comandos personalizados enviados de um
MediaBrowserfossem enviados para oMediaSessionCompat.Callbackem vez da varianteMediaBrowserServiceCompatdo método quando conectados a um serviço legado. Isso impedia que oMediaBrowserrecebesse o valor de retorno real enviado pelo serviço legado (link em inglês). - Processamento de
IllegalArgumentExceptiongerado por dispositivos de determinados fabricantes ao definir o broadcast receiver para intents de botão de mídia (#1730). - Adicione botões de comando para itens de mídia. Isso adiciona a API Media3 para o que
era conhecido como
Custom browse actionscom a biblioteca legada comMediaBrowserCompat. Com o Media3, os botões de comando para itens de mídia estão disponíveis paraMediaBrowsereMediaController. Consulte Implementar ações de navegação personalizadas. * Correção de um bug em que um controlador do Media3 às vezes não permitia que um app de sessão iniciasse um serviço em primeiro plano depois de solicitarplay(). - Restrinja
CommandButton.Builder.setIconUripara aceitar apenas URIs de conteúdo. - Transmitir dicas de conexão de um navegador Media3 para o
MediaBrowserCompatinicial ao se conectar a umMediaBrowserCompatlegado. O serviço pode receber as dicas de conexão transmitidas como dicas raiz com a primeira chamada paraonGetRoot(). - Correção de um bug em que um
MediaBrowserconectado a um serviço de navegador legado não recebia um erro enviado pelo serviço depois que o navegador se inscrevia em umparentid. - Melhoria do comportamento de interoperabilidade para que um navegador do Media3
conectado a um
MediaBrowserServicelegado não solicite os filhos de umparentIdduas vezes ao se inscrever em um pai.
- Adicione
- Interface:
- Ajuste o vídeo esticado/cortado na
solução alternativa
PlayerView-in-Compose-AndroidViewpara que seja opcional, devido a problemas com transições compartilhadas baseadas em XML. Os apps que usamPlayerViewdentro deAndroidViewprecisam chamarPlayerView.setEnableComposeSurfaceSyncWorkaroundpara ativar (#1237, #1594). - Adição de
setFullscreenButtonStateaPlayerViewpara permitir atualizações do ícone do botão de tela cheia sob demanda, ou seja, fora de banda e não de forma reativa a uma interação de clique (#1590, #184). - Correção de um bug em que a opção "None" na seleção de texto não funciona se houver preferências de seleção de faixa de texto definidas pelo app.
- Ajuste o vídeo esticado/cortado na
solução alternativa
- Extensão DASH:
- Adição de suporte para períodos que começam no meio de um segmento (#1440).
- Extensão Smooth Streaming:
- Correção de um erro
Bad magic number for Bundleao reproduzir streams do SmoothStreaming com faixas de texto (#1779).
- Correção de um erro
- Extensão RTSP:
- Extensões de decodificador (FFmpeg, VP9, AV1 etc.):
- Adicionamos o módulo decodificador IAMF, que oferece suporte à reprodução de arquivos MP4
com faixas IAMF usando a biblioteca nativa libiamf para
sintetizar áudio.
- A reprodução é ativada com um layout estéreo e 5.1 com espacialização, além do rastreamento da cabeça opcional, mas o suporte à reprodução binaural não está disponível no momento.
- Adição de suporte a páginas de 16 KB para extensões de decodificador no Android 15 (#1685).
- Adicionamos o módulo decodificador IAMF, que oferece suporte à reprodução de arquivos MP4
com faixas IAMF usando a biblioteca nativa libiamf para
sintetizar áudio.
- Extensão do Google Cast:
- Interrompa a limpeza da linha do tempo após a desconexão da CastSession, o que permite que o app remetente retome a reprodução localmente após uma desconexão.
- Preencha o
DeviceInfodo CastPlayer quando umContextfor fornecido. Isso permite vincular oMediaSessiona umRoutingSession, o que é necessário para integrar o seletor de saída (#1056).
- Utilitários de teste:
DataSourceContractTestagora inclui testes para verificar:- O stream de entrada
read positionfoi atualizado. - O buffer de saída
offseté aplicado corretamente.
- O stream de entrada
- App de demonstração
- Os vazamentos de memória no app de demonstração de formato curto foram resolvidos (#1839).
- Símbolos descontinuados foram removidos:
- Remoção de
Player.hasPreviousePlayer.hasPreviousWindow(), que foram descontinuados. Em vez disso, usePlayer.hasPreviousMediaItem(). - Remoção do método
Player.previous()descontinuado. UsePlayer.seekToPreviousMediaItem() - O método
DrmSessionEventListener.onDrmSessionAcquireddescontinuado foi removido. - Os construtores
DefaultEncoderFactorydescontinuados foram removidos. UseDefaultEncoderFactory.Builder
- Remoção de
Versão 1.5.0-rc02
19 de novembro de 2024
Use a versão estável 1.5.0.
Versão 1.5.0-rc01
13 de novembro de 2024
Use a versão estável 1.5.0.
Versão 1.5.0-beta01
30 de outubro de 2024
Use a versão estável 1.5.0.
Versão 1.5.0-alpha01
10 de setembro de 2024
Use a versão estável 1.5.0.
Versão 1.4.0
Versão 1.4.1
27 de agosto de 2024
Lançamento de androidx.media3:media3-*:1.4.1. A versão 1.4.1 contém estes
commits.
- ExoPlayer:
- Extratores:
- MP3: correção do erro
Searched too many bytesao ignorar corretamente os dados finais que não são MP3 com base no campo de duração em um frameInfo(#1480).
- MP3: correção do erro
- Texto:
- TTML: correção do processamento de valores percentuais de
tts:fontSizepara garantir que sejam herdados corretamente de nós pai com valores percentuais detts:fontSize. - Correção de
IndexOutOfBoundsExceptionemLegacySubtitleUtildevido ao tratamento incorreto do caso em que o horário de início da saída solicitado é maior ou igual ao horário do evento final noSubtitle(#1516).
- TTML: correção do processamento de valores percentuais de
- DRM:
- Correção do erro
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEem dispositivos com API 31 ou mais recente que reproduzem conteúdo L1 Widevine. Esse erro é causado por uma implementação incompleta do métodoMediaDrm.requiresSecureDecoderdo framework (#1603).
- Correção do erro
- Efeito:
- Adicione um método
release()aGlObjectsProvider.
- Adicione um método
- Sessão:
- Transforme um toque duplo de
KEYCODE_HEADSETHOOKem uma ação de "buscar o próximo", conforme documentado (#1493). - Trate
KEYCODE_HEADSETHOOKcomo um comando "play" emMediaButtonReceiverao decidir se ele deve ser ignorado para evitar umForegroundServiceDidNotStartInTimeException(#1581).
- Transforme um toque duplo de
- Extensão RTSP:
- As descrições de mídia inválidas são ignoradas na análise de SDP (#1087).
Versão 1.4.0
25 de julho de 2024
Lançamento de androidx.media3:media3-*:1.4.0. A versão 1.4.0 contém estes
commits.
- Biblioteca comum:
- Encaminhamento de chamadas de busca presumidas sem operação 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 chamadas adicionais 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 umMediaItemque não é de imagem (conforme documentado). - Adicione
Format.customDatapara armazenar informações personalizadas fornecidas pelo app sobre instâncias deFormat.
- Encaminhamento de chamadas de busca presumidas sem operação para os métodos protegidos
- ExoPlayer:
- Adição de
BasePreloadManager, que coordena o pré-carregamento de várias fontes com base nas prioridades definidas porrankingData. É possível personalizar estendendo essa classe. AdicioneDefaultPreloadManager, que usaPreloadMediaSourcepara pré-carregar amostras de mídia das origens na memória, e usa um número inteirorankingDataque indica o índice de um item na interface. - Adicionamos
PlayerIdà maioria dos métodos deLoadControlpara que as implementações deLoadControlofereçam suporte a vários jogadores. Buffer.isDecodeOnly()eC.BUFFER_FLAG_DECODE_ONLYforam removidos. Não é necessário definir essa flag, porque os renderizadores e decodificadores decidem pular buffers com base no carimbo de data/hora. As implementações personalizadas deRendererprecisam verificar se o tempo de intervalo é de pelo menosBaseRenderer.getLastResetPositionUs()para decidir se uma amostra precisa ser mostrada. As implementações personalizadas deSimpleDecoderpodem verificarisAtLeastOutputStartTimeUs(), se necessário, ou marcar outros buffers comDecoderOutputBuffer.shouldBeSkippedpara ignorá-los.- Permita que um valor nulo seja retornado por
TargetPreloadStatusControl.getTargetPreloadStatus(T)para indicar que não é necessário pré-carregar umMediaSourcecom orankingDatafornecido. remove(MediaSource)foi adicionada aBasePreloadManager.- Adicione
reset()aBasePreloadManagerpara liberar todas as fontes de retenção enquanto mantém a instância do gerenciador de pré-carregamento. - Adição de
ExoPlayer.setPriority()(eBuilder.setPriority()) para definir o valor de prioridade usado emPriorityTaskManagere para a importância do MediaCodec da API 35. - Correção do problema com a atualização do último tempo de rebuffer, que resultava em uma chave
bs(falta de buffer) incorreta no CMCD (#1124). - Adicione
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)para indicar que a fonte foi carregada até o fim. Isso permite que as implementações deDefaultPreloadManagere dePreloadMediaSource.PreloadControlpersonalizadas pré-carreguem a próxima fonte ou realizem outras ações. - Correção de um bug em que pular o silêncio no final dos itens podia acionar uma exceção de reprodução.
- Adicione
clearaPreloadMediaSourcepara descartar o período de pré-carregamento. - Adição do novo código de erro
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED, que é usado quando os recursos do codec são recuperados para tarefas de maior prioridade. - Permitir que o
AdsMediaSourcecarregue anúncios precedentes antes que a preparação inicial da mídia de conteúdo seja concluída (#1358). - Correção de um bug em que a reprodução era movida para
STATE_ENDEDao preparar novamente uma transmissão ao vivo DASH de vários períodos depois que o período original já havia sido removido do manifesto. onTimelineRefreshed()foi renomeado comoonSourcePrepared(), eonPrepared()foi renomeado comoonTracksSelected()emPreloadMediaSource.PreloadControl. Renomeie também os IntDefs emDefaultPreloadManager.Stagede acordo.- Adição de suporte experimental para programação dinâmica para alinhar melhor o trabalho
com os ciclos de ativação da CPU e atrasar a ativação até que os renderizadores possam progredir.
Para ativar esse recurso, use
experimentalSetDynamicSchedulingEnabled()ao configurar a instância do ExoPlayer. - Adição do
Renderer.getDurationToProgressUs(). UmRendererpode implementar esse método para retornar ao ExoPlayer a duração que a reprodução precisa avançar para que o renderizador progrida. SeExoPlayerfor definido comexperimentalSetDynamicSchedulingEnabled(),ExoPlayervai chamar esse método ao calcular o tempo para programar a tarefa de trabalho. - Adição de
MediaCodecAdapter#OnBufferAvailableListenerpara alertar quando os buffers de entrada e saída estiverem disponíveis para uso porMediaCodecRenderer. OMediaCodecRenderervai sinalizar oExoPlayerao receber esses callbacks e, se oExoPlayerestiver definido comexperimentalSetDynamicSchedulingEnabled(), oExoPlayervai programar o loop de trabalho conforme os renderizadores avançarem. - Use a classe de dados para métodos
LoadControlem vez de parâmetros individuais. - Adicione
ExoPlayer.isReleased()para verificar seExoplayer.release()foi chamado. - Adição de
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()para configurar a posição máxima em queseekToPrevious()busca o item anterior (#1425). - Correção de algumas inconsistências de foco de áudio, por exemplo, não informar a perda de foco total ou temporária enquanto o player está pausado (link em inglês).
- Correção de um possível
IndexOutOfBoundsExceptioncausado por extratores que informam outras faixas após a etapa de preparação inicial (#1476). EffectsemExoPlayer.setVideoEffect()vai receber as marcações de tempo com o deslocamento do renderizador removido (#1098).- Correção de um possível
IllegalArgumentExceptionao processar um erro do player que ocorreu ao ler antecipadamente outro item da playlist (#1483).
- Adição de
- Transformador:
- Adicione
audioConversionProcessevideoConversionProcessaExportResult, indicando como a respectiva faixa no arquivo de saída foi criada. - As verificações de nível H.264 da otimização de corte foram flexibilizadas.
- Adicionamos suporte para alternar entre mídia de entrada SDR e HDR em uma sequência.
- Adição de suporte a efeitos de áudio no nível da composição.
- Adição de suporte para transcodificar imagens Ultra HDR em vídeos HDR.
- Correção de um problema em que o
DefaultAudioMixernão gera a quantidade correta de bytes depois de ser redefinido e reutilizado. - Contornamos um bug do decodificador em que o número de canais de áudio era limitado ao estéreo ao processar a entrada PCM.
- Ao selecionar faixas em
ExoPlayerAssetLoader, ignore as restrições de contagem de canais de áudio, já que elas se aplicam apenas à reprodução. - Substitua a interface
androidx.media3.transformer.Muxerporandroidx.media3.muxer.Muxere removaandroidx.media3.transformer.Muxer. - Correção do carregamento de imagens HEIC de esquemas de URI de conteúdo. (#1373).
- Ajuste a duração da faixa de áudio em
AudioGraphInputpara melhorar a sincronização de áudio e vídeo. - 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.
- Adicione
- Extratores:
- MPEG-TS: avance a mudança que garante que o último frame seja renderizado transmitindo a última unidade de acesso de um stream para a fila de amostras (#7909). Incorporação de correções para resolver os problemas que surgiram em streams HLS somente de frame I(#1150) e streams HLS H.262 (#1126).
- MP3: prefira o tamanho dos dados de um frame
Infoao tamanho informado pelo stream de base (por exemplo, tamanho do arquivo ou cabeçalho HTTPContent-Length). Isso ajuda a excluir dados de trailer não reproduzíveis (por exemplo, arte do álbum) dos cálculos de busca de taxa de bits constante, tornando as buscas mais precisas (#1376). - MP3: use a contagem de frames e outros dados em um frame
Info(se houver) para calcular uma taxa de bits média para busca de taxa de bits constante, em vez de extrapolar da taxa de bits do frame após o frameInfo, que pode ser artificialmente pequena, por exemplo, framePCUT(link em inglês). - Correção da extração do formato de áudio PCM em contêineres AVI.
- Áudio:
- Correção dos atributos de codificação do DTS:X Profile 2 para reprodução de passagem (#1299).
- Para reprodução descarregada, redefina o campo de rastreamento para conclusão do stream
em
DefaultAudioSinkantes de chamarAudioTrack.stop()para queAudioTrack.StreamEventCallback#onPresentationEndedidentifique corretamente quando todos os dados pendentes forem reproduzidos. - Correção de um bug em
SilenceSkippingAudioProcessorem 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:
- Correção do problema em que
Listener.onRenderedFirstFrame()chega muito cedo ao alternar superfícies durante a reprodução. - Correção da lógica de substituição do decodificador para Dolby Vision para usar um decodificador AV1 compatível, se necessário (#1389).
- Correção da exceção de codec que pode ser causada pela ativação de um renderizador de vídeo durante a reprodução.
- Correção do problema em que
- Texto:
- Correção de um problema em que as legendas que começavam antes de uma posição de busca eram puladas. Esse problema foi introduzido apenas no Media3 1.4.0-alpha01.
- Mudança do comportamento padrão de análise de legendas para que ela ocorra durante a extração,
e não durante a renderização. Consulte o diagrama de arquitetura do ExoPlayer
para entender 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 a documentação sobre personalização para saber como conectar esses componentes a uma instância doExoPlayer. Esses métodos (e todo o suporte para decodificação de legendas legadas) serão removidos em uma versão futura. - Os apps com implementações personalizadas de
SubtitleDecoderprecisam ser atualizados para implementarSubtitleParser(eSubtitleParser.Factoryem vez deSubtitleDecoderFactory).
- Essa mudança pode ser substituída chamando ambos
- PGS: a decodificação de comprimento de execução foi corrigida para resolver
0como um índice de cor, em vez de um valor de cor literal (#1367). - CEA-708: ignorar o valor
rowLock. A especificação CEA-708-E S-2023 afirma querowLockecolumnLockprecisam ser considerados verdadeiros, independentemente dos valores presentes no stream. O suporte acolumnLocknão está implementado, então ele é considerado sempre falso.- Isso foi incluído 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 já foi corrigido, então a mudança está presente novamente.
- Isso foi incluído originalmente nas notas da versão
- CEA-708: evita que novas linhas duplicadas sejam adicionadas pelo processamento simples do ExoPlayer do comando "set pen location" (#1315).
- Correção de um
IllegalArgumentExceptiondeLegacySubtitleUtilquando uma amostra de legenda WebVTT não contém dicas, por exemplo, como parte de uma transmissão DASH (link nº 1516).
- Metadados:
- Correção do mapeamento de MP4 para tags de classificação ID3. Anteriormente, as tags MP4 "classificação do álbum"
(
soal), "classificação do artista" (soar) e "classificação do artista do álbum" (soaa) eram mapeadas incorretamente para as tags ID3TSO2,TSOAeTSOP(#1302). - Correção da leitura de tags numéricas MP4 (/iTunes)
gnre(gênero) etmpo(tempo) quando o valor tem mais de um byte. - Propagação do frame ID3
TCONparaMediaMetadata.genre(#1305).
- Correção do mapeamento de MP4 para tags de classificação ID3. Anteriormente, as tags MP4 "classificação do álbum"
(
- Imagem:
- Adição de suporte a grades de miniaturas DASH não quadradas (#1300).
- Adição de suporte a AVIF para a API 34+.
- Permitir
nullcomo parâmetro paraExoPlayer.setImageOutput()para limpar umImageOutputdefinido anteriormente.
- DataSource:
- Implemente suporte para URIs de recursos brutos
android.resource://package/id, em quepackageé diferente do pacote do aplicativo atual. Isso não estava documentado anteriormente, mas é uma maneira mais eficiente de acessar recursos em outro pacote do que pelo nome. - Verifique se
urlnão é nulo nos construtoresDataSpec. Esse parâmetro já foi anotado como não nulo. - Permitir que
ByteArrayDataSourceresolva um URI para uma matriz de bytes duranteopen(), em vez de ser codificado na construção (#1405).
- Implemente suporte para URIs de recursos brutos
- DRM:
- Permitir a configuração de um
LoadErrorHandlingPolicyemDefaultDrmSessionManagerProvider(#1271).
- Permitir a configuração de um
- Efeito:
- Suporte a várias mudanças de velocidade no mesmo
EditedMediaItemouCompositionemSpeedChangeEffect. - Suporte para saída HLG e PQ de entrada de bitmap Ultra HDR.
- Adição de suporte para EGL_GL_COLORSPACE_BT2020_HLG_EXT, que melhora a saída de superfície HLG em ExoPlayer.setVideoEffect e na SurfaceView de depuração do Transformer.
- Atualizamos a implementação da matriz de sobreposição para que ela seja 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. - Correção do bug em que o
TimestampWrapperfalhava quando usado comExoPlayer#setVideoEffects(#821). - Mudar o espaço de trabalho de cores SDR padrão de cores lineares para vídeo elétrico BT 709 SDR. Também forneça uma terceira opção para manter o espaço de cores original.
- Permitir a definição de ordem z indeterminada de EditedMediaItemSequences (#1055).
- Manter um intervalo de luminância consistente em diferentes partes do conteúdo HDR (usa o intervalo HLG).
- Adição de suporte a sobreposições Ultra HDR (bitmap) em conteúdo HDR.
- Permite que os efeitos de
SeparableConvolutionsejam usados antes da API 26. - Remova o
OverlaySettings.useHdrnão utilizado, já que o intervalo dinâmico da sobreposição e do frame precisam ser iguais. - Adição de suporte a HDR para
TextOverlay. A luminância da sobreposição de texto pode ser ajustada comOverlaySettings.Builder.setHdrLuminanceMultiplier().
- Suporte a várias mudanças de velocidade no mesmo
- Extensão de IMA:
- Promover a API necessária para que os apps reproduzam streams de anúncios de DAI para estável.
- Adição de
replaceAdTagParameters(Map <String, String>)aImaServerSideAdInsertionMediaSource.AdLoader, que permite substituir parâmetros de tag de anúncio no ambiente de execução. - Correção de um bug em que
VideoAdPlayer.VideoAdPlayerCallback.onError()não era chamado quando ocorria um erro do player durante a reprodução do anúncio (#1334). - O SDK do IMA foi movido para a versão 3.33.0 para corrigir um
NullPointerExceptionao usar URIs de tag de anúnciodata://(#700).
- Sessão:
- Mude o padrão de
CommandButton.enabledparatruee garanta que o valor possa permanecer falso para os controladores, mesmo que o comando associado esteja disponível. - Adição de constantes de ícone para
CommandButtonque precisam ser usadas em vez de recursos de ícone personalizados. - Adição de
MediaSessionService.isPlaybackOngoing()para permitir que os apps consultem se o serviço precisa ser interrompido emonTaskRemoved()(#1219). - Adicione
MediaSessionService.pauseAllPlayersAndStopSelf(), que permite pausar a reprodução de todas as sessões e chamarstopSelf()para encerrar o ciclo de vida doMediaSessionService. - 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 interrompa o serviço caso contrário. - Ocultar a barra de busca na notificação de mídia para transmissões ao vivo, não definindo a duração nos metadados de sessão da plataforma (#1256).
- Alinhar a conversão de
MediaMetadataparaMediaDescriptionCompatpara usar a mesma ordem e lógica preferenciais ao selecionar propriedades de metadados como em media1. - Adição de
MediaSession.sendError(), que permite enviar erros não fatais ao controlador do Media3. Ao usar o controlador de notificações (consulteMediaSession.getMediaNotificationControllerInfo()), o erro personalizado é usado para atualizar oPlaybackStateda sessão da plataforma para um estado de erro com as informações de erro fornecidas (#543). - Adicione
MediaSession.Callback.onPlayerInteractionFinished()para informar às sessões quando uma série de interações do player de um controlador específico for concluída. - Adicione
SessionErrore use-o emSessionResulteLibraryResultem vez do código do erro para fornecer mais informações sobre o erro e como resolvê-lo, se possível. - Publicar o código do app de teste do controlador do Media3, que pode ser usado para testar interações com apps que publicam uma sessão de mídia.
- Propagar extras transmitidos para o
MediaSession[Builder].setSessionExtras()do media3 para oPlaybackStateCompat.getExtras()de um controlador do media1. - Mapeie erros fatais e não fatais de e para a sessão da plataforma. Um
PlaybackExceptioné mapeado para um estado de erro fatal doPlaybackStateCompat. UmSessionErrorenviado ao controlador de notificação de mídia comMediaSession.sendError(ControllerInfo, SessionError)é mapeado para um erro não fatal emPlaybackStateCompat, o que significa que o código do erro e a mensagem são definidos, mas o estado da sessão da plataforma permanece diferente deSTATE_ERROR. - Permitir que a atividade da sessão seja definida por controlador para substituir a
atividade global da sessão. A atividade da sessão pode ser definida para um
controlador no momento da conexão criando um
ConnectionResultcomAcceptedResultBuilder.setSessionActivivty(PendingIntent). Depois de conectada, a atividade da sessão pode ser atualizada comMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - Melhoria na replicação de erros de chamadas para
MediaLibrarySession.Callback. Agora é possível configurar a replicação de erros usandoMediaLibrarySession.Builder.setLibraryErrorReplicationMode()para escolher o tipo de erro ou desativar a replicação de erros, que está ativada por padrão.
- Mude o padrão de
- Interface:
- Adição de suporte à exibição de imagens ao
PlayerViewquando conectado a umExoPlayer(#1144). - Adicionamos a personalização de vários ícones em
PlayerControlViewusando atributos XML para permitir diferentes drawables por instância dePlayerView, em vez de substituições globais (#1200). - Foi corrigido um bug da plataforma que causava vídeos esticados/cortados ao usar
SurfaceViewdentro de umAndroidViewdo Compose na API 34 (#1237).
- Adição de suporte à exibição de imagens ao
- Downloads:
- Garantimos que o
DownloadHelpernão vaze instâncias não lançadas deRenderer, o que pode resultar em uma falha do app comIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- Garantimos que o
- Extensão Cronet:
- Correção de
SocketTimeoutExceptionemCronetDataSource. Em algumas versões do Cronet, a solicitação fornecida pelo callback nem sempre é a mesma. Isso faz com que o callback não seja concluído e a solicitação expire (https://issuetracker.google.com/328442628).
- Correção de
- Extensão HLS:
- Correção de um bug em que amostras de EMSG pendentes que aguardavam uma descontinuidade eram
delegadas em
HlsSampleStreamWrappercom um deslocamento incorreto, causando umIndexOutOfBoundsExceptionou umIllegalArgumentException(#1002). - Correção de um bug em que playlists não primárias continuavam sendo recarregadas para streams LL-HLS (#1240).
- Correção de um bug em que a ativação do CMCD para HLS com segmentos de inicialização
resultava em
Source ErroreIllegalArgumentException. - Correção do bug em que as playlists não principais não eram atualizadas durante a reprodução ao vivo (#1240).
- Correção de um bug em que a ativação do CMCD para transmissões ao vivo HLS causava
ArrayIndexOutOfBoundsException(#1395).
- Correção de um bug em que amostras de EMSG pendentes que aguardavam uma descontinuidade eram
delegadas em
- Extensão DASH:
- Extensão do Google Cast:
- Correção do bug que convertia o título do álbum do
MediaQueueItempara o artista no item de mídia do Media3 (#1255).
- Correção do bug que convertia o título do álbum do
- Utilitários de teste:
- Implemente
onInit()eonRelease()emFakeRenderer. - Mudança nos 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
DefaultPreloadManagerno app de demonstração de formato curto. - Permitir a configuração do modo de repetição com argumentos
Intentna linha de comando (#1266). - Use
HttpEngineDataSourcecomoHttpDataSourcequando houver suporte do dispositivo.
- Use
- Símbolos descontinuados foram removidos:
- Remoção de
CronetDataSourceFactory. UseCronetDataSource.Factory. - Alguns construtores
DataSpecforam removidos. UseDataSpec.Builder. - O método
setContentTypePredicate(Predicate)foi removido deDefaultHttpDataSource,OkHttpDataSourceeCronetDataSource. Em vez disso, use o método equivalente em cadaXXXDataSource.Factory. - Os construtores
OkHttpDataSourceeOkHttpDataSourceFactoryforam removidos. Em vez disso, useOkHttpDataSource.Factory. - O
PlayerMessage.setHandler(Handler)foi removido. UsesetLooper(Looper). - Remover o campo
Timeline.Window.isLive. Use o métodoisLive(). - Os construtores
DefaultHttpDataSourceforam removidos. UseDefaultHttpDataSource.Factory - O
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MSfoi removido. UseDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS - O
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)foi removido. UseMediaCodecInfo.canReuseCodec(Format, Format). - Os métodos
DrmSessionManager.DUMMYegetDummyDrmSessionManager()foram removidos. Em vez disso, useDrmSessionManager.DRM_UNSUPPORTED. - Remova
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Use as sobrecargas que usam umDecoderReuseEvaluation. - Remoção de
RendererSupport.FormatSupportIntDef e das constantesFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPEeFORMAT_UNSUPPORTED_TYPE. Use o IntDef equivalente e as constantes emandroidx.media3.common.C(por exemplo,C.FORMAT_HANDLED). - Remova a interface
Bundleable. Isso inclui remover todos os campos constantesBundleable.Creator<Foo> CREATOR. Os autores de chamada precisam usar os métodosBundle toBundle()estatic Foo fromBundle(Bundle)em cada tipo.
- Remoção de
Versão 1.4.0-rc01
10 de julho de 2024
Use a versão estável 1.4.0.
Versão 1.4.0-beta01
26 de junho de 2024
Use a versão estável 1.4.0.
Versão 1.4.0-alpha02
7 de junho de 2024
Use a versão estável 1.4.0.
Versão 1.4.0-alpha01
17 de abril de 2024
Use a versão estável 1.4.0.
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.labelspara permitir rótulos localizados ou alternativos.
- Adicione
- ExoPlayer:
- Correção de um problema em que o
PreloadMediaPeriodnão conseguia reter os streams quando era pré-carregado novamente. - Aplique o
TrackSelectionResultcorrespondente correto ao período de reprodução na nova seleção de faixa. - Inicie renderizadores ativados antecipadamente somente após avançar o período de reprodução ao fazer a transição entre itens de mídia (#1017).
- Adição do tipo de retorno ausente à regra
-keepclasseswithmembersdo ProGuard paraDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- Correção de um problema em que o
- Transformador:
- Adicionamos uma solução alternativa para a exceção gerada porque o
MediaMuxernão oferece suporte a carimbos de data/hora de apresentação negativos antes da API 30.
- Adicionamos uma solução alternativa para a exceção gerada porque o
- Seleção de faixas:
DefaultTrackSelector: prioriza faixas de vídeo com um frame rate "razoável" (>=10 fps) em relação àquelas com um frame rate menor ou não definido. Isso garante que o player selecione a faixa de vídeo "real" em MP4s extraídos 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:
- Correção de um problema em que o padding não era ignorado ao ler blocos de tamanho ímpar de arquivos WAV (#1117).
- MP3: preencha
Format.averageBitratecom base em frames de metadados, comoXINGeVBRI. - MPEG-TS: foi revertida uma mudança que tinha como objetivo garantir que o último frame fosse renderizado ao transmitir a última unidade de acesso de um stream para a fila de amostras (link em inglês#7909). Isso ocorre porque a mudança causa novos problemas com streams HLS somente de frame I (#1150) e streams HLS H.262 (#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:
- Adicionamos uma solução alternativa para um problema no Galaxy Tab S7 FE, no Chromecast com Google TV e no Lenovo M10 FHD Plus que faz com que as transmissões H265 de 60 qps sejam marcadas como incompatíveis.
- Adição de uma solução alternativa que garante que o primeiro frame seja sempre renderizado durante o tunelamento, mesmo que o dispositivo não faça isso automaticamente, conforme exigido pela API (#1169). (#966).
- Correção do problema em que o processamento de informações de cores HDR causava um comportamento inadequado do codec e impedia mudanças de formato adaptável para faixas de vídeo SDR (#1158).
- Texto:
- WebVTT: evitamos que indicações consecutivas criem instâncias
CuesWithTimingfalsas adicionais deWebvttParser.parse(link em inglês).
- WebVTT: evitamos que indicações consecutivas criem instâncias
- DRM:
- Contornamos um
NoSuchMethodErrorque pode ser gerado pelo frameworkMediaDrmem vez deResourceBusyExceptionouNotProvisionedExceptionem alguns dispositivos Android 14 (#1145).
- Contornamos um
- Efeito:
- Melhoria no mapeamento de tons de PQ para SDR com a conversão de espaços de cores.
- Sessão:
- Interface:
- O nome do idioma da faixa de áudio é usado como substituto se o
Localenão conseguir identificar um nome de exibição (#988).
- O nome do idioma da faixa de áudio é usado como substituto se o
- Extensão DASH:
- Preenchimento de todos os elementos
Labeldo manifesto emFormat.labels(#1054).
- Preenchimento de todos os elementos
- Extensão RTSP:
- Os valores de informações de sessão vazios (i-tags) são ignorados na análise de SDP (#1087).
- Extensões de decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Desativar a extensão MIDI como uma dependência local por padrão, porque ela requer a configuração de um repositório Maven adicional. 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 estes
commits.
- Biblioteca comum:
- Implemente suporte para URIs de recursos brutos
android.resource://package/[type/]nameem quepackageé diferente do pacote do aplicativo atual. Isso sempre foi documentado para funcionar, mas não foi implementado corretamente até agora. - Normaliza os tipos MIME definidos pelo código do app ou lidos da mídia para que fiquem totalmente em letras minúsculas.
- Defina anúncios com um
MediaItemcompleto em vez de um únicoUriemAdPlaybackState. - Aumente
minSdkpara 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 nossas dependências do AndroidX. - Preencha
artworkUrieartworkDataemMediaMetadata.Builder.populate(MediaMetadata)quando pelo menos um deles não for nulo (#964).
- Implemente suporte para URIs de recursos brutos
- ExoPlayer:
- Adição de
PreloadMediaSourceePreloadMediaPeriod, que permitem que os apps pré-carreguem uma fonte de mídia de conteúdo em uma posição inicial específica antes da reprodução. OPreloadMediaSourcecuida da preparação da fonte 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.PreloadControle definem a origem pré-carregada para o player para reprodução. - Adição de
ExoPlayer.setImageOutput, que permite que os apps definamImageRenderer.ImageOutput. - O
DefaultRenderersFactoryagora fornece umImageRendererao player por padrão comImageOutputeImageDecoder.Factory.DEFAULTnulos. - Emita o evento
Player.Listener.onPositionDiscontinuityquando o silêncio for pulado (#765). - Adição de suporte experimental para analisar legendas durante a extração. É possível
ativar isso usando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - Oferecer suporte a fontes de mídia adaptáveis com
PreloadMediaSource. - Implemente
HttpEngineDataSource, umHttpDataSourceque usa a API HttpEngine. - Evite a subclasse
CompositeSequenceableLoader. Esse componente foi tornado extensível anteriormente, mas nunca foi subclassificado na biblioteca. As personalizações podem ser feitas envolvendo uma instância usando o padrão decorador e implementando umCompositeSequenceableLoaderFactorypersonalizado. - Correção do problema em que repetir o mesmo horário faz com que os metadados desse item sejam apagados (#1007).
- Os métodos
experimentalSetSubtitleParserFactoryemBundledChunkExtractor.FactoryeDefaultHlsExtractorFactoryforam renomeados comosetSubtitleParserFactory, e a transmissão denullfoi proibida. Use os novos métodosexperimentalParseSubtitlesDuringExtraction(boolean)para controlar o comportamento de análise. - Adicionamos suporte para personalizar o
SubtitleParser.Factoryusado durante a extração. Isso pode ser feito comMediaSource.Factory.setSubtitleParserFactory(). - Adicione o prefixo de origem a todos os campos
Format.idgerados deMergingMediaSource. Isso ajuda a identificar qual origem produziu umFormat(#883). - Correção da regex usada para validar nomes de chaves personalizados de dados comuns do cliente de mídia (CMCD, na sigla em inglês) modificando-a para verificar apenas o hífen (#1028).
- Os parâmetros de consulta CMCD não são mais codificados duas vezes (#1075).
- Adição de
- Transformador:
- Adicionamos suporte para nivelar vídeos em câmera lenta H.265/HEVC SEF.
- Aumentamos a velocidade de transmuxing, especialmente para edições de "remover vídeo".
- Adicionamos uma API 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 implementações de player que não mostram o primeiro frame do vídeo até o carimbo de data/hora da apresentação (#829).
- Adicionamos suporte para otimizar as operações de corte de MP4 de um único recurso.
- Adição de suporte para garantir que um frame de vídeo tenha o primeiro carimbo de data/hora no arquivo de saída. Correção de arquivos de saída que começam com um frame preto em players baseados em iOS (link em inglês).
- Seleção de faixas:
- Adicione
DefaultTrackSelector.selectImageTrackpara ativar a seleção de faixa de imagem. - Adicione
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledpara determinar se uma faixa de imagem será selecionada quando uma faixa de imagem e uma faixa 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.
- Adicione
- Extratores:
- Adição de mais análise de AV1C ao extrator de MP4 para recuperar os valores
ColorInfo.colorSpace,ColorInfo.colorTransfereColorInfo.colorRange(#692). - MP3: use a busca de taxa de bits constante (CBR, na sigla em inglês) para arquivos com um cabeçalho
Info(o equivalente em CBR do cabeçalhoXing). Antes, usávamos a tabela de busca do cabeçalhoInfo, mas isso resulta em uma busca exata menos precisa do que se a ignorarmos e presumirmos que o arquivo é CBR. - MPEG2-TS: adição de suporte a DTS, DTS-LBR e DTS:X Profile2 (#275).
- Extraia tipos de áudio de descritores TS e os mapeie para sinalizações de função, permitindo que os usuários façam seleções de faixas de áudio mais informadas (#973).
- Adição de mais análise de AV1C ao extrator de MP4 para recuperar os valores
- Áudio:
- Melhoria do algoritmo de pulo de silêncio com rampa de volume suave, silêncio mínimo retido e durações de silêncio mais naturais (#7423).
- O silêncio ignorado é informado de forma mais determinista (link em inglês).
- Vídeo:
- Mude o construtor
MediaCodecVideoRendererque usa um argumentoVideoFrameProcessor.Factorye o substitua por um construtor que usa um argumentoVideoSinkProvider. Os apps que querem injetar umVideoFrameProcessor.Factorypersonalizado podem instanciar umCompositingVideoSinkProviderque usa oVideoFrameProcessor.Factorypersonalizado e transmitir o provedor de coletor de vídeo paraMediaCodecVideoRenderer.
- Mude o construtor
- Texto:
- Correção da serialização de marcações de bitmap para resolver o erro
Tried to marshall a Parcel that contained Binder objectsao usarDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: ignorar o valor
rowLock. A especificação CEA-708-E S-2023 afirma querowLockecolumnLockprecisam ser considerados verdadeiros, independentemente dos valores presentes no stream. O suporte acolumnLocknão está implementado, então ele é considerado sempre falso.
- Correção da serialização de marcações de bitmap para resolver o erro
- Imagem:
- Adição de suporte a miniaturas DASH. As imagens da grade são cortadas, e as miniaturas individuais são fornecidas ao
ImageOutputperto dos horários de apresentação.
- Adição de suporte a miniaturas DASH. As imagens da grade são cortadas, e as miniaturas individuais são fornecidas ao
- DRM:
- Reproduza amostras não criptografadas de "clear lead" em conteúdo de DRM imediatamente por
padrão, mesmo que as chaves para as amostras criptografadas posteriores ainda não estejam
prontas. Isso pode levar a interrupções no meio da reprodução se as chaves ainda não estiverem prontas
quando a posição de reprodução alcançar as amostras criptografadas (mas, antes,
a reprodução não teria começado de jeito nenhum até esse ponto). Esse comportamento pode
ser desativado com
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyouDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- Extensão de IMA:
- Correção de um problema em que anúncios DASH e HLS sem a extensão de arquivo adequada não podiam ser reproduzidos.
- Reproduza amostras não criptografadas de "clear lead" em conteúdo de DRM imediatamente por
padrão, mesmo que as chaves para as amostras criptografadas posteriores ainda não estejam
prontas. Isso pode levar a interrupções no meio da reprodução se as chaves ainda não estiverem prontas
quando a posição de reprodução alcançar as amostras criptografadas (mas, antes,
a reprodução não teria começado de jeito nenhum até esse ponto). Esse comportamento pode
ser desativado com
- Sessão:
- A detecção de clique duplo foi desativada para apps de TV (link em inglês nº 962).
- Correção de um problema em que
MediaItem.RequestMetadatacom extras não nulos não é transmitido entre controladores de mídia e sessões. - Adição de um construtor a
MediaLibrarySession.Builderque usa apenas umContextem vez de umMediaLibraryService.
- Extensão HLS:
- Reduza
HlsMediaPeriodpara a visibilidade privada do pacote. Esse tipo não pode ser dependente diretamente de fora do pacote HLS. - As buscas no início de um segmento são resolvidas de forma mais eficiente (#1031).
- Reduza
- Extensões de decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Decodificador MIDI: as mensagens de evento SysEx foram ignoradas (#710).
- Utilitários de teste:
- Não pausar a reprodução em
TestPlayerRunHelper.playUntilPosition. O teste mantém a reprodução em um estado de reprodução, mas suspende o progresso até que seja possível adicionar declarações e outras ações.
- Não pausar a reprodução em
- App de demonstração:
- Adicione um módulo de demonstração de formato curto para demonstrar o uso de
PreloadMediaSourcecom o caso de uso de conteúdo de formato curto.
- Adicione um módulo de demonstração de formato curto para demonstrar 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:
- Correção de um problema em que as buscas manuais fora do
intervalo
LiveConfiguration.min/maxOffsetcontinuavam ajustando o deslocamento de volta paramin/maxOffset. - Correção do problema em que os layouts de canal OPUS e VORBIS estavam incorretos para 3, 5, 6, 7 e 8 canais (#8396).
- Foi corrigido um problema em que as seleções de faixa após a busca por zero em uma transmissão ao vivo permitiam incorretamente que a transmissão começasse na posição padrão (#9347, link em inglês).
- Correção do problema em que novas instâncias de
CmcdData.Factoryrecebiam valores negativos parabufferedDurationUsde fontes de blocos, resultando em umIllegalArgumentException(#888).
- Correção de um problema em que as buscas manuais fora do
intervalo
- Transformador:
- Contornamos um problema em que o codificador era gerado no momento da configuração devido à definição de uma alta taxa de operação.
- Extratores:
- Marque as faixas HEVC secundárias (não reproduzíveis) em fotos com movimento JPEG como
ROLE_FLAG_ALTERNATEpara evitar que sejam selecionadas automaticamente para reprodução devido à resolução mais alta. - Correção da detecção incorreta de frames-chave para streams TS H264 (#864).
- Correção da estimativa de duração de streams de TS com mais de 47.721 segundos (#855).
- Marque as faixas HEVC secundárias (não reproduzíveis) em fotos com movimento JPEG como
- Áudio:
- Correção do processamento de EOS para
SilenceSkippingAudioProcessorquando chamado várias vezes (#712).
- Correção do processamento de EOS para
- Vídeo:
- Adicionamos 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 fps sejam marcados como incompatíveis (#693).
- Metadados:
- Correção de um bug em que
MediaMetadataera preenchido apenas com comentários do Vorbis com chaves em maiúsculas (#876). - Captura de
OutOfMemoryErrorao 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.
- Correção de um bug em que
- DRM:
- Estendemos a solução alternativa para o URL de licença
https://default.urlespúrio do ClearKey para a API 33+ (antes, a solução alternativa só era aplicada na API 33) (#837). - Correção de
ERROR_DRM_SESSION_NOT_OPENEDao alternar de conteúdo criptografado para conteúdo limpo sem uma superfície anexada ao player. O erro ocorreu devido ao uso incorreto de um decodificador seguro para reproduzir o conteúdo sem criptografia.
- Estendemos a solução alternativa para o URL de licença
- Sessão:
- Coloque as chaves e os valores personalizados em
MediaMetadataCompatparaMediaMetadata.extraseMediaMetadata.extrasparaMediaMetadataCompat(#756, #802). - Correção da transmissão de
notifyChildrenChangedpara controladores legados (#644). - Correção de um bug em que a definição de um tempo negativo para um timer
setWhendesativado da notificação causava uma falha em alguns dispositivos (#903). - Correção de
IllegalStateExceptionquando o controlador de notificação de mídia não conclui a conexão quando a primeira atualização de notificação é solicitada (#917).
- 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).
- Extensões de decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Extensão do Google Cast:
- A criação de um
Timelinefoi limpa para não causar falhas no app quando o carregamento de mídia falhar 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 Throwableaos métodos na interfaceLog.Logger. O parâmetromessagedesses métodos não contém mais informações sobre oThrowabletransmitido 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)). - Correção de 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 são detectados como anuláveis. Exemplos
são os parâmetros de método
TrackSelectorResulteSimpleDecoder(#6792). - Mudar a interface padrão e o comportamento de notificação em
Util.shouldShowPlayButtonpara mostrar um botão "Reproduzir" enquanto a reprodução estiver temporariamente suprimida (por exemplo, devido à perda temporária de foco de áudio). O comportamento legado pode ser mantido usandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)ouMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Fazer upgrade de
androidx.annotation:annotation-experimentalpara1.3.1para corrigir https://issuetracker.google.com/251172715. - Mova
ExoPlayer.setAudioAttributespara a interfacePlayer.
- Adicione um parâmetro
- ExoPlayer:
- Correção de problemas de busca em streams AC4 causados pela não identificação correta de amostras somente de decodificação (#11000).
- Adição da 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 é ativado usando
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. O motivo da supressão da reprodução será atualizado comoPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTse houver uma tentativa de reprodução quando não houver saídas de áudio adequadas disponíveis 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.canUpdateMediaItemeMediaSource.updateMediaItempara aceitar atualizações deMediaItemapós a criação usandoPlayer.replaceMediaItem(s). - Permitir atualizações de
MediaItempara todas as classesMediaSourcefornecidas pela biblioteca usandoPlayer.replaceMediaItem(s)(#33, #9978). - O
MimeTypes.TEXT_EXOPLAYER_CUESfoi renomeado comoMimeTypes.APPLICATION_MEDIA3_CUES. - Adicione
PngExtractorque envia e lê um arquivo PNG inteiro noTrackOutputcomo uma amostra. - Melhoria do método
SequenceableLoader.continueLoading(long)na interfaceSequenceableLoaderparaSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfocontém parâmetros adicionais, incluindoplaybackSpeedelastRebufferRealtimeMs, além doplaybackPositionUs. - Melhoria do método
ChunkSource.getNextChunk(long, long, List, ChunkHolder)na interfaceChunkSourceparaChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Adição de mais campos à geração de registros de dados comuns do cliente de mídia (CMCD, na sigla em inglês): falta de buffer (
bs), prazo (dl), velocidade do vídeo (pr) e inicialização (su) (#8699). - Adição de profundidade de bits de luma e croma a
ColorInfo(#491). - Adição de mais campos à geração de registros de dados comuns do cliente de mídia (CMCD, na sigla em inglês): próxima
solicitação de objeto (
nor) e próxima solicitação de intervalo (nrr) (#8699). - Adição de funcionalidade para transmitir dados de Common Media Client Data (CMCD) usando parâmetros de consulta (#553).
- Correção de
ConcurrentModificationExceptionemExperimentalBandwidthMeter(#612). - Adição do parâmetro
MediaPeriodIdaCompositeMediaSource.getMediaTimeForChildMediaTime. - Suporte a
ClippingMediaSource(e outras fontes com ajustes de tempo de período/janela) emConcatenatingMediaSource2(#11226). - Mude
BaseRenderer.onStreamChanged()para também receber um argumentoMediaPeriodId.
- Transformador:
- Analisar dados de rotação EXIF para entradas de imagem.
- O tipo de anotação
TransformationRequest.HdrModee as constantes associadas foram removidos. UseComposition.HdrModee as constantes associadas. - Simplifique o
OverlaySettingspara corrigir problemas de rotação. - Os parâmetros
frameRateedurationUsdeSampleConsumer.queueInputBitmapforam alterados paraTimestampIterator.
- Seleção de faixas:
- Adicione
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenesspara permitir ou proibir explicitamente a adaptação não integrada. O padrão permanece no comportamento atual detrue.
- Adicione
- Extratores:
- MPEG-TS: garanta que o último frame seja renderizado transmitindo a última unidade de acesso de um stream para a fila de amostras (link em inglês#7909).
- Correção de um erro de digitação ao determinar
rotationDegrees. Mudança deprojectionPosePitchparaprojectionPoseRoll(#461). - Remoção da suposição de que as instâncias de
Extractorpodem ser inspecionadas diretamente cominstanceof. Se você quiser acesso ao ambiente de execução para os detalhes de implementação de umExtractor, primeiro chameExtractor.getUnderlyingInstance. - Adição do
BmpExtractor. - Adição do
WebpExtractor. - Adição do
HeifExtractor. - Adição de suporte ao QuickTime clássico
ao
Mp4Extractor.
- Áudio:
- Adição de suporte para PCM big-endian de 24/32 bits em MP4 e Matroska e análise da
codificação PCM para
lpcmem MP4. - Adição de suporte para extrair áudio Vorbis em MP4.
- Adição de
AudioSink.getFormatOffloadSupport(Format), que recupera o nível de suporte de descarregamento que o coletor pode fornecer para o formato usando umDefaultAudioOffloadSupportProvider. Ele retorna o novoAudioOffloadSupportque contémisFormatSupported,isGaplessSupportedeisSpeedChangeSupported. - Adição de
AudioSink.setOffloadMode(), que configura o descarregamento no coletor de áudio. O padrão é 1AudioSink.OFFLOAD_MODE_DISABLED. - A transferência pode ser ativada por meio de
setAudioOffloadPreferenceemTrackSelectionParameters. Se a preferência definida for ativar, 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
audioOffloadModePreferencefor definido comoAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, oDefaultTrackSelectorvai selecionar apenas uma faixa de áudio e somente se o formato dela for compatível com o descarregamento. Se nenhuma faixa de áudio for compatível com o descarregamento, nenhuma faixa será selecionada. - Desativação do suporte sem interrupções para descarregamento em níveis da API anteriores ao 33 devido a um problema de posição de reprodução após a transição da faixa.
- Remova o parâmetro
enableOffloadda assinatura do métodoDefaultRenderersFactory.buildAudioSink. - Remover o método
DefaultAudioSink.Builder.setOffloadMode. - Remova o valor intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Adição de suporte para metadados sem interrupções do Opus durante a reprodução de descarregamento.
- Permitida a recuperação do renderizador desativando o descarregamento se houver falha na primeira gravação (#627).
- Ative a programação de descarregamento por padrão para a reprodução descarregada somente de áudio.
- Exclua
ExoPlayer.experimentalSetOffloadSchedulingEnabledeAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. onExperimentalSleepingForOffloadChangedfoi renomeado comoonSleepingForOffloadChanged, eonExperimentalOffloadedPlaybackfoi renomeado comoonOffloadedPlayback.- Mova as interfaces e definições de
TrackSelectionParametersrelacionadas ao modo de descarregamento de áudio para uma classeAudioOffloadPreferencesinterna. - Adicione callbacks
onAudioTrackInitializedeonAudioTrackReleasedaAnalyticsListener,AudioRendererEventListenereAudioSink.Listener. - Correção do problema de subfluxo do buffer de áudio do DTS Express (#650).
- Foi corrigido o bug em que a verificação de recursos para E-AC3-JOC gera uma
IllegalArgumentException(#677).
- Adição de suporte para PCM big-endian de 24/32 bits em MP4 e Matroska e análise da
codificação PCM para
- Vídeo:
- Permitir que
MediaCodecVideoRendereruse umVideoFrameProcessor.Factorypersonalizado. - Correção do bug em que o primeiro frame não podia ser renderizado se o stream de áudio começasse com carimbos de data/hora negativos (#291).
- Permitir que
- Texto:
- O
ExoplayerCuesDecoderfoi removido. As faixas de texto comsampleMimeType = application/x-media3-cuesagora são processadas diretamente porTextRenderer, sem precisar de uma instânciaSubtitleDecoder.
- O
- Metadados:
MetadataDecoder.decodenão será mais chamado para amostras "somente decodificação", já que a implementação precisa retornar nulo de qualquer maneira.
- Efeito:
- Adicione
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>), que enfileira a entrada de bitmap por carimbo de data/hora. - Mude
VideoFrameProcessor.registerInputStream()para que não seja de bloqueio. Os apps precisam implementarVideoFrameProcessor.Listener#onInputStreamRegistered(). - Os parâmetros
frameRateedurationUsdeVideoFrameProcessor.queueInputBitmapforam alterados paraTimestampIterator.
- Adicione
- Extensão de IMA:
- Correção do bug em que uma transmissão ao vivo DASH de vários períodos que não é o primeiro item em uma playlist pode gerar uma exceção (#571).
- Libere o StreamManager antes de chamar
AdsLoader.destroy(). - O SDK do IMA foi movido para a versão 3.31.0.
- Sessão:
- Defina o comportamento do serviço em primeiro plano de notificações como
FOREGROUND_SERVICE_IMMEDIATEemDefaultMediaNotificationProvider(#167). - Uso apenas de
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()acima da API 31 para evitar problemas com a API descontinuada em dispositivos Samsung (#167). - Use o controlador de notificação 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.
- Converter eventos de botão de mídia recebidos por
MediaSessionService.onStartCommand()no Media3 em vez de encaminhá-los para a sessão da plataforma e de volta para o Media3. Com isso, o controlador de chamadas é sempre o controlador de notificações de mídia, e os apps podem reconhecer facilmente as chamadas que vêm da notificação da mesma forma em todos os níveis da API compatíveis. - Correção do bug em que
MediaController.getCurrentPosition()não avançava quando conectado a umaMediaSessionCompatlegada. - Adicione
MediaLibrarySession.getSubscribedControllers(mediaId)para facilitar. - Substitua
MediaLibrarySession.Callback.onSubscribe()para declarar a disponibilidade do ID pai em que o controlador se inscreve. Se for bem-sucedida, a assinatura será aceita enotifyChildrenChanged()será chamado imediatamente para informar o navegador (#561). - Adição do módulo de demonstração de sessão para o Automotive OS e ativação da demonstração de sessão para o Android Auto.
- Não defina a fila da sessão do framework quando
COMMAND_GET_TIMELINEnão estiver disponível para o controlador de notificação de mídia. Com o Android Auto como o controlador do cliente lendo da sessão do framework, o botãoqueuena interface do Android Auto não é mostrado (#339). - Use
DataSourceBitmapLoaderpor padrão em vez deSimpleBitmapLoader(#271, #327). - Adição de
MediaSession.Callback.onMediaButtonEvent(Intent), que permite que os apps substituam o processamento de eventos padrão do botão de mídia.
- Defina o comportamento do serviço em primeiro plano de notificações como
- Interface:
- Adicione uma implementação de
Player.Listenerpara dispositivos Wear OS que lide com a supressão de reprodução devido aPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTiniciando 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 com Bluetooth). O listener vai retomar automaticamente a reprodução se um dispositivo adequado for conectado dentro de um tempo limite configurável (o padrão é 5 minutos).
- Adicione uma implementação de
- Downloads:
- Declare o tipo de serviço em primeiro plano "data sync" para
DownloadServicepara compatibilidade com o Android 14. Ao usar esse serviço, o app também precisa adicionardataSynccomoforegroundServiceTypeno 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:
- Atualize a playlist ao vivo do HLS com um intervalo calculado com base no último horário de início do carregamento, em vez do último horário de conclusão do carregamento (#663).
- Extensão DASH:
- Permitir vários identificadores DASH iguais no URL do modelo de segmento.
- Adição de suporte experimental para analisar legendas durante a extração. Isso
oferece melhor suporte para mesclar legendas sobrepostas, incluindo
a resolução de oscilações ao fazer a transição entre segmentos de legenda. É
possível ativar isso usando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288).
- Extensão RTSP:
- Correção de uma disputa que poderia levar a
IndexOutOfBoundsExceptionao recorrer ao TCP ou ao travamento da reprodução em algumas situações. - Verifique o estado na configuração do RTSP ao retornar o estado de carregamento de
RtspMediaPeriod(#577). - Ignoramos os métodos de solicitação RTSP personalizados no cabeçalho público de resposta de opções (#613).
- Use o valor de tempo limite da resposta de configuração do RTSP no intervalo de tempo de envio de solicitações de opções de RTSP de atividade (#662).
- Correção de uma disputa que poderia levar a
- Extensões de decodificador (FFmpeg, VP9, AV1, MIDI etc.):
- Lançamento do módulo decodificador MIDI, que oferece suporte à reprodução de arquivos MIDI padrão usando a biblioteca Jsyn para sintetizar áudio.
- Adição de
DecoderOutputBuffer.shouldBeSkippedpara marcar diretamente os buffers de saída que não precisam ser apresentados. Essa é a opção recomendada em vez deC.BUFFER_FLAG_DECODE_ONLY, que será descontinuado. - Adição de
Decoder.setOutputStartTimeUseSimpleDecoder.isAtLeastOutputStartTimeUspara permitir que os decodificadores descartem amostras somente de decodificação antes do horário de início. Essa é a opção recomendada em vez deBuffer.isDecodeOnly, que será descontinuado. - Correção de um bug que publicava o artefato do decodificador MIDI no repositório Maven. O
artefato foi renomeado como
media3-exoplayer-midi(#734).
- Extensão do Leanback:
- Foi corrigido o bug em que a desativação de uma superfície podia causar uma
ArithmeticExceptionno código do Leanback (#617).
- Foi corrigido o bug em que a desativação de uma superfície podia causar uma
- Utilitários de teste:
- Tornar
TestExoPlayerBuildereFakeClockcompatíveis com os testes de interface do Espresso e do Compose. Isso corrige um bug em que a reprodução avança de forma não determinística durante as interações de visualização do Espresso ou do Compose.
- Tornar
- Símbolos descontinuados foram removidos:
- Remova
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)eTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). UseComposition.Builder.setHdrMode(int)e transmita oCompositionparaTransformer.start(Composition, String). - Remoção do método
DownloadNotificationHelper.buildProgressNotificationdescontinuado. Use um método não descontinuado que use um parâmetronotMetRequirements.
- Remova
Versão 1.2.0-rc01
1º de novembro de 2023
Use a versão estável 1.2.0.
Versão 1.2.0-beta01
19 de outubro de 2023
Use a versão estável 1.2.0.
Versão 1.2.0-alpha02
29 de setembro de 2023
Use a versão estável 1.2.0.
Versão 1.2.0-alpha01
17 de agosto de 2023
Use 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:
- Remoção da dependência
multidexadicionada acidentalmente de todos os módulos (#499).
- Remoção da dependência
- ExoPlayer:
- Correção de um problema em
PlaybackStatsListenerem quePlaybackStatss falsos são criados depois que a playlist é limpa. - Adição de mais campos à geração de registros de dados comuns de clientes de mídia (CMCD, na sigla em inglês): formato de streaming (sf), tipo de stream (st), versão (v), taxa de bits máxima (tb), duração do objeto (d), capacidade de processamento medida (mtp) e tipo de objeto (ot) (#8699).
- Correção de um problema em
- Áudio:
- Correção de um bug em que
Player.getState()nunca fazia a transição paraSTATE_ENDEDao reproduzir arquivos muito curtos (#538).
- Correção de um bug em que
- Descarregamento de áudio:
- Adicione as páginas de cabeçalho de ID e de comentário do Ogg ao bitstream para reprodução do Opus descarregado de acordo com a RFC 7845.
- Vídeo:
- H.265/HEVC: correção da análise de informações de imagens de referência de curto e longo prazo do SPS.
- Texto:
- CEA-608: mudamos a lógica de truncamento de dicas para considerar apenas o texto visível. Antes, o recuo e o deslocamento de tabulação eram incluídos ao limitar o tamanho da sugestão a 32 caracteres, o que estava tecnicamente correto de acordo com a especificação (#11019).
- Extensão de IMA:
- O SDK do IMA foi movido para a versão 3.30.3.
- Sessão:
- Adicione o layout personalizado ao estado do controlador e forneça um getter para
acessá-lo. Quando o layout personalizado muda,
MediaController.Listener.onCustomLayoutChangedé chamado. Os apps que querem enviar layouts personalizados diferentes para controladores Media3 diferentes podem fazer isso emMediaSession.Callback.onConnectusando umAcceptedResultBuilderpara garantir que o layout personalizado esteja disponível para o controlador quando a conexão for concluída. - Correção de casos em que
MediaLibraryServiceLegacyStubenviava um erro para umResultque não oferecia suporte a isso, o que produzia umUnsupportedOperationException(#78). - Correção da maneira como
PlayerWrappercria umVolumeProviderCompatdeterminandovolumeControlTypepor comandos legados (COMMAND_ADJUST_DEVICE_VOLUMEeCOMMAND_SET_DEVICE_VOLUME) e novos comandos (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSeCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- Adicione o layout personalizado ao estado do controlador 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:
- Adicionar motivo de supressão para rota de áudio inadequada e tocar quando estiver pronto mudar o motivo da supressão por muito tempo. (#15).
- Adicione comandos ao Player:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Adição de métodos sobrecarregados ao Player que permitem aos usuários especificar flags de volume:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- Adição de
BuilderparaDeviceInfoe descontinuação do construtor atual. - Adicione
DeviceInfo.routingControllerIdpara especificar o ID do controlador de roteamento para reproduções remotas. - Adição de
Player.replaceMediaItem(s)como um atalho para adicionar e remover itens na mesma posição (#8046).
- ExoPlayer:
- Permita que o ExoPlayer controle os métodos de volume do dispositivo apenas se
isso for explicitamente ativado. Use
ExoPlayer.Builder.setDeviceVolumeControlEnabledpara ter acesso a:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)esetDeviceVolume(int, int)increaseDeviceVolume(int)eincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)edecreaseDeviceVolume(int, int)
- Adicionamos
FilteringMediaSource, que permite filtrar os tipos de faixa disponíveis em umMediaSource. - Adição de suporte para incluir dados comuns do cliente de mídia (CMCD, na sigla em inglês) nas
solicitações de saída dos formatos de streaming adaptável DASH, HLS e
SmoothStreaming. Os campos
br,bl,cid,rtpesidforam incorporados (#8699). Estrutura da API e métodos de 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 as chaves que são registradas. - Substitua
CmcdConfiguration.RequestConfig.getCustomData()para ativar o registro de chaves personalizadas.
- A geração de registros de CMCD está desativada por padrão. Use
- Adição de uma ação ao manifesto da demonstração principal para facilitar
a inicialização do app de demonstração com um arquivo
*.exolist.jsonpersonalizado (#439). - Adicione
ExoPlayer.setVideoEffects()para usarEffectdurante a reprodução de vídeo. - Atualize
SampleQueuepara armazenarsourceIdcomo umlongem vez de umint. Isso muda as assinaturas dos métodos públicosSampleQueue.sourceIdeSampleQueue.peekSourceId. - Adição de parâmetros aos métodos
shouldStartPlaybackeonTracksSelecteddeLoadControlque permitem associar esses métodos aoMediaPeriodrelevante. - 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. - Descontinuação de
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). Em vez disso, é possível chamar a variante dos métodos sem omediaTimeOffsetUs. Mesmo para as variantes descontinuadas, o deslocamento não é mais adicionado astartTimeUseendTimeUsdos objetosMediaLoadDataque são enviados pelo despachante. ExoTrackSelection.blacklistfoi renomeado comoexcludeTrack, eisBlacklistedfoi renomeado comoisTrackExcluded.- Correção do comportamento inconsistente entre
ExoPlayer.setMediaItem(s)eaddMediaItem(s)quando chamados em uma playlist vazia.
- Permita que o ExoPlayer controle os métodos de volume do dispositivo apenas se
isso for explicitamente ativado. Use
- Transformador:
- O
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)foi removido. UseExoPlayerAssetLoader.Factory(MediaSource.Factory)eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - O
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)foi removido. - Correção de um bug em que a transformação podia ficar travada (levando ao tempo limite do muxer) se o fim do stream de vídeo fosse sinalizado no momento em que um frame de entrada estava com o processamento pendente.
- Consultar codecs usando
MediaCodecListem vez de utilitáriosfindDecoder/EncoderForFormatpara ampliar o suporte. - Remoção da configuração de frame B em
DefaultEncoderFactoryporque ela não funciona em alguns dispositivos.
- O
- Seleção de faixas:
- Adição de
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, que é desativado por padrão. Quando ativado, oDefaultTrackSelectoraciona uma nova seleção de faixa quando as capacidades do renderizador mudam.
- Adição de
- Extratores:
- Áudio:
- Correção do bug em que algumas reproduções falhavam quando o tunelamento estava ativado e
AudioProcessorsestava ativo, por exemplo, para corte sem intervalos (#10847). - Encapsule frames Opus em pacotes Ogg em reproduções diretas (descarregamento).
- Extrapolar a posição atual durante o sono com a programação de descarregamento.
- Adicione
Renderer.release()eAudioSink.release()para liberar os recursos no final do ciclo de vida do player. - Detecte mudanças nos recursos de áudio em
DefaultAudioSink. Adicione um parâmetro obrigatóriocontextno construtor deDefaultAudioSink, com o qual oDefaultAudioSinkvai se registrar como o listener doAudioCapabilitiesReceivere atualizar a propriedadeaudioCapabilitiesquando informado sobre uma mudança de recursos. - Propagar mudanças nos recursos de áudio usando um novo evento
onAudioCapabilitiesChangedna interfaceAudioSink.Listenere uma nova interfaceRendererCapabilities.Listenerque aciona eventosonRendererCapabilitiesChanged. - Adição de
ChannelMixingAudioProcessorpara aplicar dimensionamento/mixagem a canais de áudio. - Adicionamos um novo valor int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEaDecoderDiscardReasonspara descartar o decodificador de áudio quando o modo de desvio for possível após a mudança nos recursos de áudio. - Adição de suporte à reprodução direta para DTS Express e DTS:X (#335).
- Correção do bug em que algumas reproduções falhavam quando o tunelamento estava ativado e
- Vídeo:
- Faça com que
MediaCodecVideoRendererinforme umVideoSizecom largura e altura de 0 quando o renderizador estiver desativado.Player.Listener.onVideoSizeChangedé chamado de acordo quandoPlayer.getVideoSize()muda. Com essa mudança, o tamanho do vídeo do ExoPlayer comMediaCodecVideoRenderertem largura e altura de 0 quandoPlayer.getCurrentTracksnão oferece suporte a vídeo ou o tamanho da faixa de vídeo com suporte ainda não foi determinado.
- Faça com que
- DRM:
- Reduzimos a visibilidade de vários métodos somente internos em
DefaultDrmSessionque não devem ser chamados de fora do pacote de DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Reduzimos a visibilidade de vários métodos somente internos em
- Muxer:
- Adicionamos uma nova biblioteca de muxer que pode ser usada para criar um arquivo de contêiner MP4.
- Extensão de IMA:
- Ative as transmissões ao vivo DASH de vários períodos para a DAI. A implementação atual ainda não oferece suporte à busca em transmissões ao vivo (#10912).
- Correção de um bug em que um novo grupo de anúncios é inserido em transmissões ao vivo porque a posição de conteúdo calculada em linhas do tempo consecutivas varia um pouco.
- Sessão:
- Adicione o método auxiliar
MediaSession.getControllerForCurrentRequestpara receber informações sobre o controlador que está chamando um métodoPlayer. - Adição de
androidx.media3.session.MediaButtonReceiverpara permitir que os apps implementem a retomada da reprodução com eventos de botão de mídia enviados, por exemplo, por um fone de ouvido Bluetooth (#167). - Adição da implementação padrão a
MediaSession.Callback.onAddMediaItemspara permitir que oMediaItemssolicitado seja transmitido paraPlayerse tiverLocalConfiguration(por exemplo, URI) (#282). - Adição dos botões de comando "buscar anterior" e "buscar próximo" na visualização compacta de notificação de mídia por padrão para o Android 12 e versões anteriores (#410).
- Adição da implementação padrão a
MediaSession.Callback.onAddMediaItemspara permitir que oMediaItemssolicitado seja transmitido paraPlayerse tiverLocalConfiguration(por exemplo, URI) (#282). - Adição dos botões de comando "buscar anterior" e "buscar próximo" na visualização compacta de notificação de mídia por padrão para o Android 12 e versões anteriores (#410).
- Adicione o método auxiliar
- Interface:
- Adição dos métodos utilitários
shouldShowPlayButtonehandlePlayPauseButtonActionpara criar elementos de interface personalizados com um botão de tocar/pausar.
- Adição dos métodos utilitários
- Extensão RTSP:
- Extensão DASH:
- Remoção do ajuste de tempo de mídia de
MediaLoadData.startTimeMseMediaLoadData.endTimeMspara streams DASH de vários períodos. - Correção de um bug em que a nova preparação de uma fonte de mídia DASH ao vivo de vários períodos
produzia uma
IndexOutOfBoundsException(#10838).
- Remoção do ajuste de tempo 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 a inicialização doTimestampAdjuster. Se a inicialização não for concluída antes do tempo limite, umaPlaybackExceptionserá gerada para evitar que a reprodução seja interrompida indefinidamente. O tempo limite é definido como zero por padrão (#323).
- 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:
- Os construtores
DefaultAudioSinkforam removidos. UseDefaultAudioSink.Builder. - Remova
HlsMasterPlayliste useHlsMultivariantPlaylist. - O
Player.stop(boolean)foi removido. UsePlayer.stop()ePlayer.clearMediaItems()(seresetfortrue). - Remoção de dois construtores
SimpleCachedescontinuados. Use um construtor não descontinuado que use umDatabaseProviderpara melhorar o desempenho. - O construtor
DefaultBandwidthMeterfoi removido. UseDefaultBandwidthMeter.Builder. - Os construtores
DefaultDrmSessionManagerforam removidos. UseDefaultDrmSessionManager.Builder. - Remoção de dois construtores
HttpDataSource.InvalidResponseCodeExceptiondescontinuados. Use um construtor não descontinuado que aceite campos adicionais(cause,responseBody) para melhorar o registro de erros. - Remova
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDasheDownloadHelper.forSmoothStreaminge useDownloadHelper.forMediaItem. - Remoção do construtor
DownloadServicedescontinuado. Use um construtor não descontinuado que inclua a opção de fornecer um parâmetrochannelDescriptionResourceId. - Remova as constantes de string descontinuadas para Charsets (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEeUTF16LE_NAME). Use os Charsets do Kotlin do pacotekotlin.text,java.nio.charset.StandardCharsetsoucom.google.common.base.Charsets. - Remoção do construtor
WorkManagerSchedulerdescontinuado. Use um construtor não descontinuado que inclua a opção de fornecer um parâmetroContext. - Remoção dos métodos descontinuados
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatecreateSampleFormat, que eram usados para instanciar a classeFormat. Em vez disso, useFormat.Builderpara criar instâncias deFormat. - Remova os métodos descontinuados
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateecopyWithVideoSize. UseFormat.buildUpon()e métodos setter. - Remoção do
ExoPlayer.retry()descontinuado. Useprepare(). - O construtor
DefaultTrackSelectorde argumento zero descontinuado foi removido. UseDefaultTrackSelector(Context). - Remoção do construtor
OfflineLicenseHelperdescontinuado. UseOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Remoção do construtor
DownloadManagerdescontinuado. Use o construtor que usa umExecutor. - Os construtores
Cuedescontinuados foram removidos. UseCue.Builder. - Remova o construtor
OfflineLicenseHelperdescontinuado e useOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Remoção de quatro métodos
AnalyticsListenerdescontinuados:onDecoderEnabled, useonAudioEnablede/ouonVideoEnabled.onDecoderInitialized, useonAudioDecoderInitializede/ouonVideoDecoderInitialized.onDecoderInputFormatChanged, useonAudioInputFormatChangede/ouonVideoInputFormatChanged.onDecoderDisabled, useonAudioDisablede/ouonVideoDisabled.
- Remova os elementos descontinuados
Player.Listener.onSeekProcessedeAnalyticsListener.onSeekProcessede useonPositionDiscontinuitycomDISCONTINUITY_REASON_SEEK. - Remova
ExoPlayer.setHandleWakeLock(boolean)e usesetWakeMode(int). - Remova o
DefaultLoadControl.Builder.createDefaultLoadControl()descontinuado e usebuild(). - Remova o
MediaItem.PlaybackPropertiesdescontinuado e useMediaItem.LocalConfiguration. O campo descontinuadoMediaItem.playbackPropertiesagora é do tipoMediaItem.LocalConfiguration.
- 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 2013
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.0.2 contém estas
confirmações.
Ela corresponde à versão do ExoPlayer 2.18.7.
Esta versão contém as seguintes mudanças desde a versão 1.0.1:
- Biblioteca principal:
- Adição de
Buffer.isLastSample(), que indica seBuffercontém a flagC.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 de "fim do stream". (#11079).
- Adição de
- Extratores:
- Correção da análise de H.265 SPS em arquivos MPEG-TS ao reutilizar a lógica de análise já usada pelos extratores RTSP e MP4 (#303).
- Texto:
- SSA: foi adicionado suporte para arquivos UTF-16 que começarem com uma marca de ordem de byte (#319).
- Sessão:
- Correção de um problema em que o
MediaControllernão atualizava os comandos disponíveis quando conectado a umMediaSessionCompatlegado que atualiza as ações. - Correção de um bug que impedia que o
MediaLibraryServiceretornasse nulo para uma chamada da interface do sistema paraCallback.onGetLibraryRootcomparams.isRecent == truena API 30 (#355). - Correção do vazamento de memória de
MediaSessionServiceouMediaLibraryService(#346). - Correção de um bug em que uma atualização combinada de
Timelinee posição em umMediaSessionpode fazer com que umMediaControllergere umaIllegalStateException.
- Correção de um problema em que o
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 2.18.6 do ExoPlayer.
- Biblioteca principal:
- A substituição da transmissão ao vivo de destino é redefinida ao buscar a posição padrão (#11051).
- Correção de um bug em que streams de amostra vazios na mídia podiam fazer com que a reprodução ficasse travada.
- Sessão:
- Correção de um bug em que vários itens de fila idênticos publicados por um
MediaSessionCompatlegado resultavam em uma exceção emMediaController(#290). - Adição do encaminhamento ausente de
MediaSession.broadcastCustomCommandpara oMediaControllerCompat.Callback.onSessionEventlegado (#293). - Correção de um bug em que chamar
MediaSession.setPlayernão atualiza os comandos disponíveis. - Correção do problema em que as instâncias de
TrackSelectionOverrideenviadas de umMediaControllereram ignoradas se fizessem referência a um grupo comFormat.metadata(#296). - Correção do problema em que
Player.COMMAND_GET_CURRENT_MEDIA_ITEMprecisa estar disponível para acessar metadados peloMediaSessionCompatlegado. - Correção do problema em que as instâncias de
MediaSessionem uma linha de execução em segundo plano causam falhas quando usadas emMediaSessionService(#318). - Correção de um problema em que um receptor de botão de mídia era declarado pela biblioteca sem que o app pretendesse isso (#314).
- Correção de um bug em que vários itens de fila idênticos publicados por um
- DASH:
- Correção do processamento de linhas do tempo de segmentos vazios (#11014).
- RTSP:
- Tente novamente com TCP se a configuração do RTSP com UDP falhar com o erro 461 do RTSP UnsupportedTransport (#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.
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.
- Biblioteca principal:
- Downloads:
- Tornar a diferença máxima do horário de início de dois segmentos a serem
mesclados configurável em
SegmentDownloadere subclasses (#248).
- Tornar a diferença máxima do horário de início de dois segmentos a serem
mesclados configurável em
- Áudio:
- Vídeo:
- Mapeie o formato HEVC HDR10 para
HEVCProfileMain10HDR10em vez deHEVCProfileMain10. - Adicionamos uma solução alternativa para um problema no Chromecast com Google TV e no Lenovo M10 FHD Plus que faz com que streams AVC de 60 qps sejam marcados como não compatíveis (#10898).
- Correção de problemas de desempenho de liberação de frames ao reproduzir mídia com uma taxa de frames muito maior que a taxa de atualização da tela.
- Mapeie o formato HEVC HDR10 para
- Transmitir:
- Correção de
STATE_IDLEtemporário ao fazer a transição entre itens de mídia (#245).
- Correção de
- RTSP:
- Captura a IllegalArgumentException gerada na análise de mensagens de resposta Describe do RTSP inválidas (#10971).
- Sessão:
- Correção de um bug em que o botão de reproduzir/pausar da notificação não era atualizado com o estado do player (#192).
- Extensão de IMA:
- Correção de um bug que impedia o início de transmissões de DAI sem anúncios
porque o primeiro evento
LOADED(e, no caso sem anúncios, o único) não era recebido.
- Correção de um bug que impedia o início de transmissões de DAI sem anúncios
porque o primeiro 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.0.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.seekTopara 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).
ConcatenatingMediaSource2foi 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 deNullPointerExceptionse 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
AudioTrackem 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.getEventTimese 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.mediaTypefoi adicionado para indicar o tipo de conteúdo ou de pasta descrito pelos metadados.MediaMetadata.folderTypefoi 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
PlayerViewao usar um layout da direita para a esquerda (RTL, na sigla em inglês) (227, link em inglês).
- O
- Sessão:
- O abstrato
SimpleBasePlayerfoi adicionado para ajudar a implementar a interfacePlayerpara players personalizados. - O método auxiliar
SessionTokenfoi adicionado para converter o token de sessão da plataforma em Media3 (171, link em inglês). - Uso de
onMediaMetadataChangedpara 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()doDefaultMediaNotificationProvidere usa listas imutáveis para maior clareza (216, link em inglês). - O listener de callback
onSetMediaItemsfoi 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.mediaTypefoi adicionado para indicar o tipo de conteúdo ou de pasta descrito pelos metadados.MediaMetadata.folderTypefoi 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
ImaServerSideAdInsertionMediaSourcena linha de execução do app para evitar problemas. - Foi adicionada uma propriedade
focusSkipButtonWhenAvailableaoImaServerSideAdInsertionMediaSource.AdsLoader.Builderpara 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.AdsLoaderpara 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.isTunnelingEnabledfoi adicionado para verificar se o encapsulamento está ativado para as faixas selecionadas no momento (#2518). - O
WrappingMediaSourcefoi 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
onMediaItemTransitionausente é enviado ao chamarseekToNextouseekToPreviousem uma playlist de item único (#10667). - Novo
Player.getSurfaceSize, que retorna o tamanho da superfície em que o vídeo é renderizado. - O bug em que a remoção de listeners durante a liberação do player poderia causar uma
IllegalStateException(#10758) foi corrigido.
- O
- Build:
- O
compileSdkVersionmí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
ProgressiveDownloadercausado 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:
SingleThreadExecutorserá usado para liberar instâncias deAudioTracke evitar erros de OutOfMemory ao liberar vários reprodutores ao mesmo tempo (#10057).- Novo
AudioOffloadListener.onExperimentalOffloadedPlaybackpara o estado de descarga do AudioTrack (#134). - O
AudioTrackBufferSizeProviderfoi transformado em uma interface pública. - Novo
ExoPlayer.setPreferredAudioDevicepara definir o dispositivo de saída de áudio preferencial (#135). - O
androidx.media3.exoplayer.audio.AudioProcessorfoi 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,
MetadataRendererpode 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 openedao 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.presentationTimeOffsetdos 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.Builderfoi 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). SimpleBitmapLoaderpode carregar bitmaps de URIsfile://(#108).- A declaração que impede que
MediaControllerbusque 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
DefaultNotificationProviderfoi 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 identificarCastPlayerao controlar a reprodução com umMediaController(#142).
- Implementação de
- Transformador:
- Novo timer de watchdog do multiplexador para detectar quando a geração de uma amostra de saída é muito lenta.
- Símbolos descontinuados foram removidos:
- O
Transformer.Builder.setOutputMimeType(String)foi removido. Esse recurso foi removido. O tipo MIME sempre será MP4 quando o multiplexador padrão for usado.
- O
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
ShuffleOrdercomExoPlayer.setShuffleOrderresulta em uma chamada paraPlayer.Listener#onTimelineChangedcomreason=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
setDataSourceFactoryemDefaultMediaSourceFactory, 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
playWhenReadyemLeanbackAdapter(10420).
- Detecte mudanças no
- Transmitir:
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.
- 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.
nulleMediaSource.Factory.setDrmSessionManagerProviderforam renomeados comoMediaSource.Factory.setLoadErrorHandlingPolicy. As instâncias deDefaultDrmSessionManagerProvidereDefaultLoadErrorHandlingPolicypodem ser explicitamente transmitidas, se necessário.MediaItem.RequestMetadatafoi adicionado para representar os metadados necessários para reproduzir a mídia quandoLocalConfigurationnão for conhecido.MediaMetadata.mediaUrltambém foi removido, porque agora ele está incluído emRequestMetadata.- Adicionamos
Player.Command.COMMAND_SET_MEDIA_ITEMpara 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
TrackSelectionOverridesfoi nivelada emTrackSelectionParameters, eTrackSelectionOverridefoi promovida para uma classe de nível superior. TracksInfofoi renomeado comoTracks, eTracksInfo.TrackGroupInfofoi renomeado comoTracks.Group.Player.getCurrentTracksInfoePlayer.Listener.onTracksInfoChangedtambém foram renomeados comoPlayer.getCurrentTracksePlayer.Listener.onTracksChanged. Isso inclui o "cancelamento da descontinuação" do nome do métodoPlayer.Listener.onTracksChanged, mas com diferentes tipos de parâmetro.DefaultTrackSelector.buildUponParameterseDefaultTrackSelector.Parameters.buildUponforam alterados para retornarDefaultTrackSelector.Parameters.Builderem vez doDefaultTrackSelector.ParametersBuilderdescontinuado.- Adicionado
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities, que é ativado por padrão. Quando ativado, oDefaultTrackSelectorprefere faixas de áudio cuja contagem de canais não exceda aos recursos de saída do dispositivo. Em dispositivos portáteis, oDefaultTrackSelectortem 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, oDefaultTrackSelectormonitora as mudanças nas propriedades Spatializer e aciona uma nova seleção de faixas. Dispositivos com um modo de interface detelevisionnão têm essas restrições, e o formato com a maior contagem de canais vai ter preferência.televisionPara ativar esse recurso, a instânciaDefaultTrackSelectorprecisa ser criada com umContext.
- A classe
- Vídeo:
DummySurfacefoi 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.AudioAttributespara 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
AudioTrackcom a máscara de canalAudioFormat.CHANNEL_OUT_7POINT1POINT4se 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 retornarCueGroupem vez deList<Cue>.- SSA: adicionado suporte à configuração de estilo
OutlineColourquandoBorderStyle == 3, ou seja, aOutlineColourdefine 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
RawCcExtractorfoi removido. Ele era usado apenas para processar um formato de legenda interno do Google.
- Extratores:
- Interface:
- Corrigida a entrega de eventos para os
OnClickListeners definidos emPlayerViewcasouseController=false(#9605). Também foi corrigida a entrega de eventos aoOnLongClickListenerpara todas as configurações de visualização. - Corrigido tratamento incorreto de uma sequência de eventos de toque que saem dos limites da
PlayerViewantes daACTION_UPcomo um clique (#9861). - Corrigido problema de acessibilidade da
PlayerViewem que o toque podia alternar a reprodução em vez de ocultar os controles (#8627). TrackSelectionVieweTrackSelectionDialogBuilderforam reescritos para trabalhar com a interfacePlayerem vez deExoPlayer. Isso permite que as visualizações sejam usadas com outras implementações doPlayere 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
PlayerViewe 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
AudioChannelConfigurationdo DTS. Isso reativa a passagem de áudio para fluxos do DTS (#10159). - A transmissão de
nullparaDashMediaSource.Factory.setCompositeSequenceableLoaderFactoryfoi desativada. As instâncias deDefaultCompositeSequenceableLoaderFactorypodem 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
nullparaHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryeHlsMediaSource.Factory.setPlaylistTrackerFactoryfoi desativada. Instâncias deDefaultCompositeSequenceableLoaderFactoryeDefaultHlsPlaylistParserFactoryou uma referência aDefaultHlsPlaylistTracker.FACTORYpodem ser transmitidas explicitamente, se necessário.
- Smooth Streaming:
- A transmissão de
nullparaSsMediaSource.Factory.setCompositeSequenceableLoaderFactoryfoi desativada. As instâncias deDefaultCompositeSequenceableLoaderFactorypodem 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).
- Fontes de dados:
DummyDataSourcefoi renomeado comoPlaceholderDataSource.- Foi criada uma solução alternativa de processamento para a interrupção OkHttp.
- Sessão:
MediaSession.MediaItemFillerfoi substituído porMediaSession.Callback.onAddMediaItemspara permitir a resolução assíncrona de solicitações.- Suporte aos métodos
setMediaItems(s)quando oMediaControllerse conecta a uma sessão de mídia legada. MediaController.setMediaUrieMediaSession.Callback.onSetMediaUriforam removidos. A mesma funcionalidade pode ser encontrada emMediaController.setMediaItemeMediaSession.Callback.onAddMediaItems.- Encaminhamento de chamadas do
MediaControllerlegadas para reproduzir mídia paraMediaSession.Callback.onAddMediaItemsem vez deonSetMediaUri. MediaNotification.ProvidereDefaultMediaNotificationProviderforam adicionados para fornecer personalização das notificações.BitmapLoadereSimpleBitmapLoaderforam 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.MediaSessionCallbackfoi renomeado comoMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackcomoMediaLibrarySession.Callback, eMediaSession.Builder.setSessionCallbackcomosetCallback.- 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
MediaControllerImplBaseapó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.getCurrentTrackGroupsePlayer.getCurrentTrackSelections. UsePlayer.getCurrentTracks. Também é possível continuar usandoExoPlayer.getCurrentTrackGroupseExoPlayer.getCurrentTrackSelections, embora esses métodos permaneçam descontinuados. - As constantes
DownloadHelper,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTeDEFAULT_TRACK_SELECTOR_PARAMETERSforam 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.setContextfoi removido. OContextprecisa 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.setTrackIdeMediaItem.SubtitleConfiguration.Builder.setIdfoi corrigida para priorizar o campoSubtitleConfiguratione voltar ao valor daFactoryse o campo não estiver definido (#10016, link em inglês).
- A interação de
- Reprodução de anúncio:
- Os underruns de áudio entre os períodos de anúncios em tempo real nos streams SSAI HLS foram corrigidos.
Versão 1.0.0-alpha02
2 de março de 2022
Lançamento de androidx.media3:media3-*:1.0.0-alpha02. A versão 1.0.0-alpha02
contém estas
confirmações.
Ela corresponde à versão do ExoPlayer 2.17.0 (link em inglês).
- Biblioteca principal:
- Adicione o método protegido
DefaultRenderersFactory.getCodecAdapterFactory()para que as subclasses daDefaultRenderersFactoryque substituem os métodosbuildVideoRenderers()oubuildAudioRenderers()possam acessar a fábrica do adaptador de codec e a transmitir para instânciasMediaCodecRendererque eles criam. - Propague os campos de cabeçalho ICY
nameegenreparaMediaMetadata.stationeMediaMetadata.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
MediaCodecfalhar, 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#inputBufferCountfoi renomeado comoqueuedInputBufferCount.- Os
SimpleExoPlayer.renderersagora são particulares. Os renderizadores podem ser acessados usando oExoPlayer.getRenderer. - Atualização de alguns valores constantes das
AnalyticsListener.EventFlagspara corresponder aos valores nasPlayer.EventFlags. - O
AnalyticsCollectorfoi 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).
TrackGroups duplicados são proibidos em umaTrackGroupArray. OsTrackGroups sempre podem ser distinguíveis definindo umidno 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
AdaptiveTrackSelectionmudou 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
AudioCapabilitiesforam alteradas para exigir a transmissão explícita deAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESem vez denull. - A personalização do cálculo do tamanho do buffer da
AudioTrackagora pode ser feita injetando umAudioTrackBufferSizeProvidernoDefaultAudioSink(8891, link em inglês). - Tente criar a
AudioTracknovamente 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.idda 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
Cea708Decodernão pode ler mais do que o tamanho declarado de um bloco de serviços.
- Um campo
- DRM:
- O
playbackLooperfoi removido deDrmSessionManager.(pre)acquireSessionQuando umDrmSessionManageré usado por um app em umaMediaSourcepersonalizada, oplaybackLooperprecisa 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
AdPlaybackStatepara 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
mainnão é mais interpretado comoC.SELECTION_FLAG_DEFAULT. - A lógica de exclusão de URL de base foi corrigida para manifestos que não declaram o namespace do DVB (#9856).
- Suporte aos URLs
MPD.Locationrelativos (#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
SocketFactoryusada 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
TransformationExceptionagora é usada para descrever erros que ocorrem durante uma transformação. - A
TransformationRequestfoi 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.getProgressao 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
MediaSessionConnectoragora 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.shagora 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-frameworknão são compatíveis com apps destinados ao Android 12 e vão falhar com umaIllegalArgumentExceptionao criarPendingIntents (#9528, link em inglês).
- Upgrade da extensão do Google Cast para depender do
- Símbolos descontinuados foram removidos:
- O
Player.EventListenerfoi removido. UsePlayer.Listener. MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryeMediaSourceFactory#setDrmUserAgentforam removidos. UseMediaSourceFactory#setDrmSessionManagerProvider.- O
MediaSourceFactory#setStreamKeysfoi removido. UseMediaItem.Builder#setStreamKeys - O
MediaSourceFactory#createMediaSource(Uri)foi removido. UseMediaSourceFactory#createMediaSource(MediaItem) - O
setTagfoi removido deDashMediaSource,HlsMediaSourceeSsMediaSource. UseMediaItem.Builder#setTag. - O
DashMediaSource#setLivePresentationDelayMs(long, boolean)foi removido. UseMediaItem.Builder#setLiveConfigurationeMediaItem.LiveConfiguration.Builder#setTargetOffsetMspara substituir o manifesto ouDashMediaSource#setFallbackTargetLiveOffsetMspara fornecer um valor de substituição. - O
(Simple)ExoPlayer.setThrowsWhenUsingWrongThreadfoi removido. Não é mais possível desativar a aplicação da linha de execução. ActionFileeActionFileUpgradeUtilforam removidos. Use o ExoPlayer 2.16.1 ou anterior para usarActionFileUpgradeUtila fim de mesclar arquivos de ações legadas noDefaultDownloadIndex.- A
ProgressiveMediaSource#setExtractorsFactoryfoi removida. Use o construtorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory). ProgressiveMediaSource.Factory#setTageProgressiveMediaSource.Factory#setCustomCacheKeyforam removidos. UseMediaItem.Builder#setTageMediaItem.Builder#setCustomCacheKey.- Os construtores
DefaultRenderersFactory(Context, @ExtensionRendererMode int)eDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)foram removidos. Use os construtoresDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModeeDefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - Todos os construtores
CronetDataSourcepúblicos foram removidos. UseCronetDataSource.Factory
- O
- Mude o
IntDefspara 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
Playerque 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.