Media3

Bibliotecas de suporte para casos de uso de mídia.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
22 de fevereiro de 2024 1.2.1 1.3.0-rc01 1.3.0-beta01 1.3.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.2.1"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.2.1"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

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

Feedback

Seu feedback ajuda a melhorar o Jetpack. Você pode usar o Issue Tracker da Media3 (link em inglês) para ver respostas a perguntas, problemas conhecidos e solicitações de recursos e relatar novos problemas.

Versão 1.3.0

Versão 1.3.0-rc01

22 de fevereiro de 2024

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

  • ExoPlayer:
    • Adicione o prefixo de origem a todos os campos Format.id gerados a partir de MergingMediaSource. Isso ajuda a identificar qual origem produziu um Format (#883).
    • O regex usado para validar nomes de chaves personalizados do Common Media Client Data (CMCD) foi corrigido, modificando-o para verificar apenas o hífen (#1028).
    • Interrompe a codificação dupla dos parâmetros de consulta CMCD (#1075).
  • Áudio:
    • O algoritmo de pular o silêncio foi melhorado com uma ampliação do volume suave. O silêncio mínimo retido e as durações mais naturais de silêncio foram melhores (7423, link em inglês).
    • O silêncio pulado é informado de maneira mais determinista (#1035).
  • Sessão:
    • Correção do problema em que MediaItem.RequestMetadata com extras não nulos não era transmitido entre controladores de mídia e sessões
    • Adição do construtor ao MediaLibrarySession.Builder, que usa apenas um Context em vez de um MediaLibraryService
  • Extensão HLS:
    • A resolução busca o início de um segmento com mais eficiência (#1031).

Versão 1.3.0-beta01

7 de fevereiro de 2024

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

  • Biblioteca comum:
    • Preenchimento de artworkUri e artworkData em MediaMetadata.Builder.populate(MediaMetadata) quando pelo menos um deles não for nulo (#964).
  • ExoPlayer:
    • Evitar a subclassificação CompositeSequenceableLoader. Esse componente era extensível, mas nunca foi subclassificado dentro da biblioteca. É possível fazer personalizações unindo uma instância usando o padrão decorador e implementando um CompositeSequenceableLoaderFactory personalizado.
    • O problema em que repetir o mesmo horário faz com que os metadados desse item sejam apagados (#1007).
    • Os métodos experimentalSetSubtitleParserFactory em BundledChunkExtractor.Factory e DefaultHlsExtractorFactory foram renomeados como setSubtitleParserFactory e não permitir a transmissão de null Use os novos métodos experimentalParseSubtitlesDuringExtraction(boolean) para controlar o comportamento de análise.
    • Foi adicionado suporte à personalização do SubtitleParser.Factory usado durante a extração Isso pode ser feito com MediaSource.Factory.setSubtitleParserFactory().
  • Extratores:
    • MP3: use a busca de taxa de bits constante (CBR, na sigla em inglês) para arquivos com um cabeçalho Info (o equivalente à CBR do cabeçalho Xing). Anteriormente, usávamos a tabela de busca do cabeçalho Info, mas isso resulta em uma busca menos precisa do que se a ignorasse e presumisse que o arquivo é CBR.
    • MPEG2-TS: adição de suporte a DTS, DTS-LBR e DTS:X Profile2 (275, link em inglês).
    • Extração de tipos de áudio de descritores TS e mapeamento deles para flags de papéis, permitindo que os usuários façam seleções de faixa de áudio mais informadas (#973).
  • Imagem:
    • Foi adicionado suporte às miniaturas do DASH. As imagens em grade são cortadas, e miniaturas individuais são fornecidas a ImageOutput perto do tempo de apresentação.
  • Sessão:
    • A detecção de clique duplo foi desativada em apps de TV (#962).

Versão 1.3.0-alpha01

15 de janeiro de 2024

  • Biblioteca comum:
    • Implemente o suporte a URIs de recursos brutos android.resource://package/[type/]name, em que package é diferente do pacote do aplicativo atual. Isso sempre foi documentado para funcionar, mas não foi implementado corretamente até agora.
    • Normalize os tipos MIME definidos pelo código do app ou lidos em mídia para que fiquem totalmente em minúsculas.
    • Defina anúncios com um MediaItem completo em vez de um único Uri em AdPlaybackState.
    • Aumente o minSdk para 19 (Android KitKat). Isso está alinhado a todas as outras bibliotecas do AndroidX, e é necessário para fazermos upgrade para as versões mais recentes das dependências do AndroidX.
  • ExoPlayer:
    • Adição de PreloadMediaSource e PreloadMediaPeriod, 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. PreloadMediaSource prepara a origem da mídia de conteúdo para receber o Timeline, preparando e armazenando o período em cache 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 implementando PreloadMediaSource.PreloadControl e definem a origem pré-carregada para o jogador para reprodução.
    • Adição de ExoPlayer.setImageOutput, que permite que apps definam ImageRenderer.ImageOutput.
    • DefaultRenderersFactory agora fornece um ImageRenderer ao player por padrão com ImageOutput e ImageDecoder.Factory.DEFAULT nulos
    • O evento Player.Listener.onPositionDiscontinuity é emitido quando o silêncio é ignorado (#765).
    • Foi adicionado suporte experimental à análise de legendas durante a extração. Para ativar, use MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Ofereça suporte a fontes de mídia adaptáveis com PreloadMediaSource.
    • Implemente HttpEngineDataSource, um HttpDataSource, usando a API HttpEngine.
  • Transformador:
    • Foi adicionado suporte ao nivelamento de vídeos em câmera lenta H.265/HEVC SEF.
    • Aumente a velocidade da transmuxação, especialmente para edições de "remover vídeo".
    • Adição de API para garantir que o arquivo de saída inicie em um frame de vídeo Isso pode tornar a saída das operações de corte mais compatível com as implementações do player que não mostram o primeiro frame do vídeo até o carimbo de data/hora da apresentação (#829).
  • Seleção de faixas:
    • DefaultTrackSelector.selectImageTrack foi adicionado para ativar a seleção de faixas de imagem.
    • Adicione TrackSelectionParameters.isPrioritizeImageOverVideoEnabled para determinar se uma faixa de imagem é selecionada se uma faixa de imagem e uma de vídeo estiverem disponíveis. O valor padrão é false, o que significa que a seleção de uma faixa de vídeo é priorizada.
  • Extratores:
    • Adição de análise AV1C extra ao extrator MP4 para recuperar os valores ColorInfo.colorSpace, ColorInfo.colorTransfer e ColorInfo.colorRange (#692).
  • Vídeo:
    • Mude o construtor MediaCodecVideoRenderer, que usa um argumento VideoFrameProcessor.Factory, e o substitua por um construtor que usa um argumento VideoSinkProvider. Os apps que querem injetar um VideoFrameProcessor.Factory personalizado podem instanciar um CompositingVideoSinkProvider que usa o VideoFrameProcessor.Factory personalizado e transmitir o provedor do coletor de vídeo para MediaCodecVideoRenderer.
  • Texto:
    • A serialização de dicas de bitmap foi corrigida para resolver o erro Tried to marshall a Parcel that contained Binder objects ao usar DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708: ignora o valor rowLock. A especificação CEA-708-E S-2023 declara que rowLock e columnLock precisam ser considerados verdadeiros, independentemente dos valores presentes no stream. O suporte a columnLock não é implementado, por isso é considerado sempre falso.
  • DRM:
  • Extensão de IMA:
    • Correção do problema em que os anúncios DASH e HLS sem a extensão de arquivo adequada não podiam ser reproduzidos.
  • Extensão HLS:
    • A HlsMediaPeriod foi reduzida para ter visibilidade particular do pacote. Não é possível depender diretamente desse tipo de fora do pacote HLS.
  • Extensões decodificadores (FFmpeg, VP9, AV1, MIDI etc.):
    • Decodificador MIDI: ignora mensagens de eventos SysEx (#710).
  • Utilitários de teste:
    • Não pause a reprodução em TestPlayerRunHelper.playUntilPosition. O teste mantém a reprodução em um estado de reprodução, mas suspende o progresso até que o teste possa adicionar declarações e outras ações.
  • App de demonstração:
    • Adicione um módulo de demonstração abreviado para demonstrar o uso de PreloadMediaSource com o caso de uso de conteúdo de formato curto.

Versão 1.2.0

Versão 1.2.1

9 de janeiro de 2024

  • ExoPlayer:
    • Foi corrigido o problema em que as buscas manuais fora do intervalo LiveConfiguration.min/maxOffset continuavam ajustando o deslocamento para min/maxOffset
    • O problema em que os layouts de canais OPUS e VORBIS estavam errados em 3, 5, 6, 7 e 8 canais foi corrigido (#8396).
    • Correção do problema em que as seleções de faixa depois de buscarem zero em uma transmissão ao vivo incorretamente deixava o stream começar na posição padrão (#9347).
    • Foi corrigido o problema em que novas instâncias de CmcdData.Factory recebiam valores negativos para bufferedDurationUs de origens de fragmento, resultando em uma IllegalArgumentException (#888).
  • Transformador:
    • Resolução de um problema em que o codificador seria 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_ALTERNATE para evitar que sejam selecionadas automaticamente para reprodução devido à resolução mais alta.
    • A detecção incorreta de frames-chave para streams TS H264 foi corrigida (#864).
    • A estimativa de duração de fluxos do TS com mais de 47.721 segundos foi corrigida (#855).
  • Áudio:
    • Correção do processamento de EOS para SilenceSkippingAudioProcessor quando chamado várias vezes (#712).
  • 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 QPS sejam marcados como incompatíveis (693, link em inglês).
  • Metadados:
    • Correção do bug em que MediaMetadata era preenchido apenas a partir de comentários do Vorbis com chaves em maiúsculas (#876).
    • Detecção de OutOfMemoryError ao analisar frames ID3 muito grandes, o que significa que a reprodução pode continuar sem as informações da tag em vez de falhar completamente
  • DRM:
    • A solução alternativa foi estendida para o URL de licença falso da ClearKey https://default.url para a API 33 ou mais recente. Antes, a solução alternativa só era aplicada exatamente na API 33 (#837).
    • ERROR_DRM_SESSION_NOT_OPENED foi corrigido ao mudar de conteúdo criptografado para limpo sem uma superfície anexada ao player O erro foi devido ao uso incorreto de um decodificador seguro para reproduzir o conteúdo claro.
  • Sessão:
    • Coloque as chaves e os valores personalizados em MediaMetadataCompat como MediaMetadata.extras e MediaMetadata.extras em MediaMetadataCompat (#756, #802).
    • Correção da transmissão de notifyChildrenChanged para controladores legados (#644).
    • Foi corrigido um bug em que a definição de um horário negativo para um timer setWhen desativado da notificação causava uma falha em alguns dispositivos (#903).
    • IllegalStateException foi corrigido quando o controlador de notificações de mídia não terminava a conexão quando a primeira atualização de notificação era solicitada (#917).
  • Interface:
    • Correção do problema em que os botões para avançar e voltar não ficavam visíveis quando usados com o Material Design em um BottomSheetDialogFragment (#511).
    • O problema em que os números no botão de avanço rápido da PlayerControlView ficavam desalinhados foi corrigido (#547).
  • Extensão DASH:
    • "f800" é analisado como uma contagem de canais de 5 para Dolby no manifesto DASH (#688).
  • Extensões decodificadores (FFmpeg, VP9, AV1, MIDI etc.):
    • MIDI: foi corrigido o problema em que a busca por avançar pula os eventos de mudança de programa (#704).
    • Migração para o FFmpeg 6.0 e atualização do NDK com suporte para r26b (#707, #867).
  • Extensão do Google Cast:
    • A criação de um Timeline foi limpa para não falhar no app quando o carregamento de mídia falha no dispositivo de transmissão (#708).

Versão 1.2.0

15 de novembro de 2023

  • Biblioteca comum:
    • Adicione um parâmetro @Nullable Throwable aos métodos na interface Log.Logger. O parâmetro message para esses métodos não contém mais informações sobre o Throwable transmitido para os métodos Log.{d,i,w,e}(). Portanto, as implementações precisarão anexar manualmente essas informações, se desejado (possivelmente usando Logger.appendThrowableString(String, Throwable)).
    • Foi corrigido um problema de compatibilidade com o Kotlin em que parâmetros de tipo genérico anulável e tipos de elemento de matriz anuláveis não eram detectados como anuláveis Exemplos são os parâmetros dos métodos TrackSelectorResult e SimpleDecoder (#6792).
    • Mude o comportamento padrão da interface e das notificações em Util.shouldShowPlayButton para mostrar um botão "Reproduzir" enquanto a reprodução é suprimida temporariamente (por exemplo, devido a uma perda temporária de seleção de áudio). O comportamento legado pode ser mantido usando PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) ou MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Faça upgrade de androidx.annotation:annotation-experimental para 1.3.1 para corrigir https://issuetracker.google.com/251172715.
    • Mova ExoPlayer.setAudioAttributes para a interface Player.
  • ExoPlayer:
    • Correção de problemas de busca em streams AC4 causados por não identificar corretamente amostras somente de decodificação (#11000).
    • Adicione supressão de reprodução em dispositivos de saída de áudio inadequados (por exemplo, o alto-falante integrado em dispositivos Wear OS) quando esse recurso for ativado usando ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. O motivo da supressão de reprodução será atualizado como Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT se a reprodução for iniciada quando nenhuma saída de áudio adequada estiver disponível ou se todas as saídas adequadas forem desconectadas durante a reprodução. O motivo de supressão será removido quando uma saída adequada for conectada.
    • MediaSource.canUpdateMediaItem e MediaSource.updateMediaItem foram adicionados para aceitar atualizações de MediaItem após a criação usando Player.replaceMediaItem(s).
    • Permissão de atualizações de MediaItem para todas as classes MediaSource fornecidas pela biblioteca via Player.replaceMediaItem(s) (#33, #9978).
    • O MimeTypes.TEXT_EXOPLAYER_CUES foi renomeado como MimeTypes.APPLICATION_MEDIA3_CUES.
    • Adicione o PngExtractor, que envia e lê um arquivo PNG inteiro na TrackOutput como um exemplo.
    • O método SequenceableLoader.continueLoading(long) foi melhorado na interface SequenceableLoader para SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contém outros parâmetros, incluindo playbackSpeed e lastRebufferRealtimeMs, além do playbackPositionUs existente.
    • O método ChunkSource.getNextChunk(long, long, List, ChunkHolder) foi aprimorado na interface ChunkSource para ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Foram adicionados mais campos aos registros de dados do cliente de mídia comum (CMCD, na sigla em inglês): privação de buffer (bs), prazo (dl), taxa de reprodução (pr) e inicialização (su) (#8699).
    • A profundidade de bits luma e chroma foi adicionada a ColorInfo (#491).
    • Foram adicionados mais campos aos registros de dados do cliente de mídia comum (CMCD, na sigla em inglês): solicitação do próximo objeto (nor) e solicitação do próximo intervalo (nrr) (#8699).
    • Foi adicionada uma funcionalidade para transmitir dados do cliente de mídia comum (CMCD, na sigla em inglês) usando parâmetros de consulta (#553).
    • Correção de ConcurrentModificationException em ExperimentalBandwidthMeter (#612).
    • Adicione o parâmetro MediaPeriodId a CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Suporte a ClippingMediaSource e outras origens com ajustes de tempo de período/janela em ConcatenatingMediaSource2 (#11226).
    • Mude BaseRenderer.onStreamChanged() para também receber um argumento MediaPeriodId.
  • Transformador:
    • Analisar dados de rotação EXIF para entradas de imagem.
    • O tipo de anotação TransformationRequest.HdrMode e as constantes associadas foram removidos Use Composition.HdrMode e as constantes associadas.
    • Simplifique o OverlaySettings para corrigir problemas de rotação.
    • Mudança dos parâmetros frameRate e durationUs de SampleConsumer.queueInputBitmap para TimestampIterator.
  • Seleção de faixas:
    • DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness foi adicionado para permitir ou proibir explicitamente a adaptação não perfeita O padrão permanece no comportamento atual de true.
  • Extratores:
    • MPEG-TS: garante que o último frame seja renderizado passando a última unidade de acesso de um stream para a fila de amostra (#7909).
    • Correção de um erro de digitação ao determinar rotationDegrees Mudança de projectionPosePitch para projectionPoseRoll (#461).
    • Remova a suposição de que instâncias Extractor podem ser inspecionadas diretamente com instanceof. Se você quiser acesso de execução aos detalhes de implementação de um Extractor, primeiro chame Extractor.getUnderlyingInstance.
    • Adição do BmpExtractor.
    • Adição do WebpExtractor.
    • Adição do HeifExtractor.
    • Adicione suporte ao QuickTime clássico a Mp4Extractor.
  • Áudio:
    • Foi adicionado suporte a PCM big-endian de 24/32 bits em MP4 e Matroska e analisa a codificação PCM para lpcm em MP4.
    • Foi adicionado suporte à extração de áudio Vorbis em MP4.
    • Adicione AudioSink.getFormatOffloadSupport(Format) que recupera o nível de suporte de descarga que o coletor pode fornecer para o formato usando um DefaultAudioOffloadSupportProvider. Ele retorna o novo AudioOffloadSupport que contém isFormatSupported, isGaplessSupported e isSpeedChangeSupported.
    • Adicione o AudioSink.setOffloadMode() usado para definir a configuração de descarga no coletor de áudio. O padrão é AudioSink.OFFLOAD_MODE_DISABLED.
    • O descarregamento pode ser ativado por meio de setAudioOffloadPreference em TrackSelectionParameters. Se a preferência definida for ativar, o dispositivo vai oferecer suporte ao descarregamento para o formato e a seleção de faixa for uma única faixa de áudio, o descarregamento de áudio será ativado.
    • Se audioOffloadModePreference for definido como AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, o DefaultTrackSelector vai selecionar apenas uma faixa de áudio e apenas se o formato dela tiver suporte no descarregamento. Se nenhuma faixa de áudio for compatível com o descarregamento, nenhuma faixa será selecionada.
    • Desativação do suporte sem lacunas para descarregamento quando o nível anterior à API era 33 devido a um problema de posição de reprodução após a transição de faixa
    • O parâmetro enableOffload foi removido da assinatura do método DefaultRenderersFactory.buildAudioSink.
    • Remover o método DefaultAudioSink.Builder.setOffloadMode.
    • Remoção do valor intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Foi adicionado suporte a metadados sem lacuna do Opus durante a reprodução de descarregamento.
    • Agora é possível recuperar o renderizador desativando o descarregamento em caso de 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.experimentalSetOffloadSchedulingEnabled e AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged foi renomeado como onSleepingForOffloadChanged, e onExperimentalOffloadedPlayback como onOffloadedPlayback.
    • As interfaces TrackSelectionParameters relacionadas ao modo de descarga de áudio e as definições foram movidas para uma classe AudioOffloadPreferences interna.
    • Adição dos callbacks onAudioTrackInitialized e onAudioTrackReleased a AnalyticsListener, AudioRendererEventListener e AudioSink.Listener.
    • Correção do problema de subfluxo do buffer de áudio do DTS Express (#650).
    • Correção do bug em que a verificação de recursos para E-AC3-JOC gera uma IllegalArgumentException (#677).
  • Vídeo:
    • Permitir que MediaCodecVideoRenderer use um VideoFrameProcessor.Factory personalizado.
    • 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, link em inglês).
  • Texto:
    • A ExoplayerCuesDecoder foi removida. As faixas de texto com sampleMimeType = application/x-media3-cues agora são processadas diretamente por TextRenderer sem a necessidade de uma instância de SubtitleDecoder
  • Metadados:
    • MetadataDecoder.decode não será mais chamado para amostras "somente decodificação", porque a implementação precisa retornar nulo de qualquer maneira
  • Efeito:
    • Adição de VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) enfileirando a entrada de bitmap por carimbo de data/hora.
    • Mude a VideoFrameProcessor.registerInputStream() para que ela não bloqueie. Os apps precisam implementar VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Mudança dos parâmetros frameRate e durationUs de VideoFrameProcessor.queueInputBitmap para TimestampIterator.
  • 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 de 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:
    • O comportamento do serviço em primeiro plano das notificações foi definido como FOREGROUND_SERVICE_IMMEDIATE em DefaultMediaNotificationProvider (#167).
    • Use apenas android.media.session.MediaSession.setMediaButtonBroadcastReceiver() acima do 31 da API para evitar problemas com a API descontinuada em dispositivos Samsung (#167).
    • Use o controlador de notificações de mídia como proxy para definir os comandos disponíveis e o layout personalizado usados para preencher a notificação e a sessão da plataforma.
    • Converta os eventos do botão de mídia recebidos por MediaSessionService.onStartCommand() na Media3 em vez de roteá-los para a sessão da plataforma e de volta para a Media3. Com isso, o controlador do autor da chamada é sempre o controlador de notificações de mídia, e os apps podem reconhecer facilmente as chamadas provenientes da notificação da mesma forma em todos os níveis de API com suporte.
    • Correção do bug em que o MediaController.getCurrentPosition() não avança quando conectado a um MediaSessionCompat legado
    • MediaLibrarySession.getSubscribedControllers(mediaId) foi adicionado para conveniência.
    • Substitua MediaLibrarySession.Callback.onSubscribe() para declarar a disponibilidade do ID pai em que o controlador se inscreveu. Se for bem-sucedida, a assinatura será aceita, e notifyChildrenChanged() será chamado imediatamente para informar o navegador (#561).
    • Adicione o módulo de demonstração da sessão para o Automotive OS e ative a demonstração da sessão para o Android Auto.
    • Não defina a fila da sessão do framework quando COMMAND_GET_TIMELINE não estiver disponível para o controlador de notificações de mídia. Com o Android Auto como o controlador de cliente lendo a sessão do framework, o botão queue na interface do Android Auto não é mostrado (#339).
    • Use DataSourceBitmapLoader por padrão em vez de SimpleBitmapLoader (271, 327, links em inglês).
    • Adição de MediaSession.Callback.onMediaButtonEvent(Intent), que permite que os apps substituam o gerenciamento de eventos do botão de mídia padrão
  • Interface:
    • Adicione uma implementação de Player.Listener para dispositivos Wear OS que processam a supressão de reprodução devido a Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT iniciando uma caixa de diálogo do sistema para permitir que o usuário conecte uma saída de áudio adequada (por exemplo, fones de ouvido Bluetooth). O listener vai retomar a reprodução automaticamente se um dispositivo adequado estiver conectado dentro de um tempo limite configurável (o padrão é de cinco minutos).
  • Downloads:
    • Declare o tipo de serviço em primeiro plano "sincronização de dados" para DownloadService para compatibilidade com o Android 14. Ao usar esse serviço, o app também precisa adicionar dataSync como foregroundServiceType no manifesto e adicionar a permissão FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • Extensão HLS:
    • Atualização da playlist ao vivo HLS com um intervalo calculado a partir do horário de início do último carregamento, em vez do último tempo de conclusão do carregamento (#663).
  • Extensão DASH:
    • Permitir vários do mesmo identificador DASH no URL do modelo de segmento.
    • Foi adicionado suporte experimental à análise de legendas durante a extração. Isso oferece melhor suporte à mesclagem de legendas sobrepostas, incluindo a resolução de tremulações ao fazer a transição entre segmentos de legendas. Use DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (288, link em inglês) para ativar esse recurso.
  • Extensão RTSP:
    • Foi corrigida uma disputa que poderia levar a IndexOutOfBoundsException ao voltar para o TCP ou a reprodução travava em algumas situações
    • Verificação do estado na configuração do RTSP ao retornar o estado de carregamento de RtspMediaPeriod (#577).
    • Métodos de solicitação Rtsp personalizados foram ignorados no cabeçalho público de resposta de opções (#613).
    • Uso do valor de tempo limite da resposta de configuração do RTSP no intervalo de tempo de envio de solicitações de opções RTSP de sinal de atividade (#662).
  • Extensões decodificadores (FFmpeg, VP9, AV1, MIDI etc.):
    • Libere o módulo decodificador de MIDI, que oferece suporte à reprodução de arquivos MIDI padrão usando a biblioteca JSyn para sintetizar áudio.
    • DecoderOutputBuffer.shouldBeSkipped foi adicionado para marcar diretamente os buffers de saída que não precisam ser apresentados É preferível em relação a C.BUFFER_FLAG_DECODE_ONLY, que será descontinuado.
    • Decoder.setOutputStartTimeUs e SimpleDecoder.isAtLeastOutputStartTimeUs foram adicionados para permitir que os decodificadores descartem amostras somente de decodificação antes do horário de início. Ele precisa ter preferência em relação a Buffer.isDecodeOnly, que será descontinuado.
    • Correção do bug de publicação do artefato decodificador MIDI no repositório Maven. O artefato foi renomeado como media3-exoplayer-midi (#734).
  • Extensão do Leanback:
    • Correção do bug em que a desativação de uma superfície pode causar uma ArithmeticException no código de Leanback (#617).
  • Utilitários de teste:
    • TestExoPlayerBuilder e FakeClock agora são compatí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 determinista durante as interações de visualização do Espresso ou do Compose.
  • Símbolos descontinuados foram removidos:
    • TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) e TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean) foram removidos. Use Composition.Builder.setHdrMode(int) e transmita Composition para Transformer.start(Composition, String).
    • O método DownloadNotificationHelper.buildProgressNotification descontinuado foi removido. Use um método não descontinuado que use um parâmetro notMetRequirements.

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:
    • A dependência multidex adicionada acidentalmente de todos os módulos foi removida (#499).
  • ExoPlayer:
    • Correção do problema em PlaybackStatsListener em que PlaybackStats falsas são criadas depois que a playlist é apagada
    • Adicione outros campos à geração de registros de dados do cliente de mídia comum (CMCD, na sigla em inglês): formato de streaming (sf), tipo de fluxo (st), versão (v), taxa superior (tb), duração de objeto (d), capacidade medida (mtp) e tipo de objeto (ot) (#8699).
  • Áudio:
    • Foi corrigido um bug em que Player.getState() nunca mudava para STATE_ENDED ao reproduzir arquivos muito curtos (#538, link em inglês).
  • Descarga de áudio:
    • Inclua o cabeçalho do ID do Ogg e as páginas de cabeçalho dos comentários como bitstream para reprodução Opus descarregada de acordo com a RFC 7845.
  • Vídeo:
    • H.265/HEVC: correção da análise das informações de imagem de referência de curto e longo prazo do SPS.
  • Texto:
    • CEA-608: muda a lógica de truncamento de indicação para considerar apenas texto visível. Anteriormente, o recuo e o deslocamento de tabulação eram incluídos ao limitar o comprimento da dica a 32 caracteres, o que estava tecnicamente correto pela especificação (#11019).
  • Extensão de IMA:
    • O SDK do IMA foi movido para a versão 3.30.3.
  • Sessão:
    • Adicione um layout personalizado ao estado do controle e forneça um getter para o acessar. Quando o layout personalizado muda, o MediaController.Listener.onCustomLayoutChanged é chamado. Os apps que querem enviar diferentes layouts personalizados para diferentes controladores do Media3 podem fazer isso em MediaSession.Callback.onConnect usando um AcceptedResultBuilder para garantir que o layout personalizado esteja disponível para o controlador quando a conexão for concluída.
    • Correção de casos em que MediaLibraryServiceLegacyStub enviava um erro para um Result sem suporte, o que produzia uma UnsupportedOperationException (#78).
    • A forma como PlayerWrapper cria um VolumeProviderCompat determinando volumeControlType usando os comandos legados (COMMAND_ADJUST_DEVICE_VOLUME e COMMAND_SET_DEVICE_VOLUME) e novos comandos (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS e COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

Versão 1.1.0

5 de julho de 2023

  • Biblioteca comum:
    • Foi adicionado um motivo de supressão para rota de áudio inadequada e tocar quando pronto para mudar o motivo para suprimido por muito tempo. (15).
    • Adicione comandos ao player:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Foram adicionados métodos sobrecarregados ao Player para que os usuários possam especificar sinalizações de volume:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • Adição de Builder para DeviceInfo e descontinuação do construtor existente
    • Adição de DeviceInfo.routingControllerId para especificar o ID do controlador de roteamento para reproduções remotas.
    • O Player.replaceMediaItem(s) foi adicionado como um atalho para adicionar e remover itens na mesma posição (#8046).
  • ExoPlayer:
    • Permitir que o ExoPlayer tenha controle dos métodos de volume do dispositivo somente se ativado explicitamente. Use ExoPlayer.Builder.setDeviceVolumeControlEnabled para ter acesso a:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) e setDeviceVolume(int, int)
      • increaseDeviceVolume(int) e increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) e decreaseDeviceVolume(int, int)
    • Adição de FilteringMediaSource, que permite filtrar os tipos de faixa disponíveis de um MediaSource.
    • Foi adicionado suporte à inclusão de dados do cliente de mídia comum (CMCD, na sigla em inglês) nas solicitações de saída de formatos de streaming adaptáveis DASH, HLS e SmoothStreaming. Os campos a seguir, br, bl, cid, rtp e sid, foram incorporados (#8699). Estrutura e métodos da API:
      • A geração de registros do CMCD está desativada por padrão. Use MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) para ativá-la.
      • Todas as chaves são ativadas por padrão. Substitua CmcdConfiguration.RequestConfig.isKeyAllowed(String key) para filtrar quais chaves são registradas.
      • Substitua CmcdConfiguration.RequestConfig.getCustomData() para ativar a geração de registros de chaves personalizadas.
    • Foi adicionada outra ação ao manifesto da demonstração principal para facilitar a inicialização do app de demonstração com um arquivo *.exolist.json personalizado (#439).
    • Adição de ExoPlayer.setVideoEffects() para usar Effect durante a reprodução do vídeo
    • Atualize SampleQueue para armazenar sourceId como um long em vez de um int. Isso muda as assinaturas dos métodos públicos SampleQueue.sourceId e SampleQueue.peekSourceId.
    • Adicione parâmetros aos métodos LoadControl shouldStartPlayback e onTracksSelected que permitem associar esses métodos ao MediaPeriod relevante.
    • Mude a assinatura de ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) adicionando um parâmetro da 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.
    • O uso de EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) e BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) foi descontinuado. A variante dos métodos sem o mediaTimeOffsetUs pode ser chamada. Mesmo para as variantes descontinuadas, o deslocamento não é mais adicionado a startTimeUs e endTimeUs dos objetos MediaLoadData enviados pelo agente.
    • ExoTrackSelection.blacklist foi renomeado como excludeTrack, e isBlacklisted foi renomeado como isTrackExcluded.
    • Correção de um comportamento inconsistente entre ExoPlayer.setMediaItem(s) e addMediaItem(s) quando chamado em uma playlist vazia
  • Transformador:
    • A Transformer.Builder.setMediaSourceFactory(MediaSource.Factory) foi removida. Use ExoPlayerAssetLoader.Factory(MediaSource.Factory) e Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • A Transformer.startTransformation(MediaItem, ParcelFileDescriptor) foi removida.
    • Foi corrigido um bug em que a transformação podia ficar travada (levando ao tempo limite do multiplexador) se o final do stream de vídeo era sinalizado no momento em que um frame de entrada estava com o processamento pendente.
    • Consulte codecs via MediaCodecList em vez de utilitários findDecoder/EncoderForFormat para expandir o suporte.
    • A configuração de frame B foi removida do DefaultEncoderFactory, porque ela não funciona em alguns dispositivos
  • Seleção de faixas:
    • Adicionado DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, que fica desativado por padrão. Quando ativado, o DefaultTrackSelector aciona uma nova seleção de faixa quando os recursos do renderizador mudam.
  • Extratores:
    • Ogg: correção do bug ao buscar arquivos com longa duração (#391).
    • FMP4: correção do problema em que TimestampAdjuster inicializa um deslocamento de carimbo de data/hora incorreto com o tempo de amostra de metadados do Atom emsg (356, link em inglês).
  • Áudio:
    • Correção do bug em que algumas reproduções falham quando o encapsulamento está ativado e AudioProcessors está ativo, por exemplo, para o corte sem lacunas (#10847).
    • Encapsular frames Opus em pacotes Ogg em reproduções diretas (descarregamento).
    • Extrapolar a posição atual durante o sono com a programação de descarga.
    • Renderer.release() e AudioSink.release() foram adicionados para liberar os recursos no final do ciclo de vida do jogador.
    • Detectar mudanças nos recursos de áudio em DefaultAudioSink. Adicione um parâmetro obrigatório context ao construtor de DefaultAudioSink, com o qual o DefaultAudioSink será registrado como listener para AudioCapabilitiesReceiver e atualizará a propriedade audioCapabilities quando informado com uma mudança de recursos.
    • Propagar mudanças de recursos de áudio usando um novo evento onAudioCapabilitiesChanged na interface AudioSink.Listener e uma nova interface RendererCapabilities.Listener que aciona eventos onRendererCapabilitiesChanged.
    • ChannelMixingAudioProcessor foi adicionado para aplicar escalonamento/mixagem a canais de áudio.
    • Foi adicionado o novo valor de int DISCARD_REASON_AUDIO_BYPASS_POSSIBLE a DecoderDiscardReasons para descartar o decodificador de áudio quando o modo ignorar for possível depois que os recursos de áudio mudarem
    • Adição de suporte à reprodução direta para DTS Express e DTS:X (#335).
  • Vídeo:
    • Agora, o MediaCodecVideoRenderer informa um VideoSize com largura e altura de 0 quando o renderizador está desativado. O Player.Listener.onVideoSizeChanged é chamado conforme necessário quando Player.getVideoSize() muda. Com essa mudança, o tamanho do vídeo do ExoPlayer com MediaCodecVideoRenderer tem uma largura e altura de 0 quando Player.getCurrentTracks não tem suporte para vídeo ou o tamanho da faixa de vídeo com suporte ainda não é determinado.
  • DRM:
    • Reduza a visibilidade de vários métodos somente internos no DefaultDrmSession que não podem ser chamados de fora do pacote DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Adicione uma nova biblioteca de multiplexador que pode ser usada para criar um arquivo de contêiner MP4.
  • Extensão de IMA:
    • Ativar transmissões do DASH ao vivo 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 calculada do conteúdo em linhas do tempo consecutivas varia um pouco.
  • Sessão:
    • Adicione o método auxiliar MediaSession.getControllerForCurrentRequest para receber informações sobre o controlador que está chamando um método Player.
    • androidx.media3.session.MediaButtonReceiver foi adicionado para permitir que os apps implementem a retomada da reprodução com eventos do botão de mídia enviados, por exemplo, por um fone de ouvido Bluetooth (#167).
    • A implementação padrão foi adicionada a MediaSession.Callback.onAddMediaItems para permitir que o MediaItems solicitado seja transmitido para Player se ele tiver LocalConfiguration (por exemplo, URI) (#282).
    • Os botões de comando "buscar para o próximo" e "Avançar para o próximo" foram adicionados por padrão na visualização de notificação de mídia compacta para o Android 12 e versões anteriores (#410).
    • A implementação padrão foi adicionada a MediaSession.Callback.onAddMediaItems para permitir que o MediaItems solicitado seja transmitido para Player se ele tiver LocalConfiguration (por exemplo, URI) (#282).
    • Os botões de comando "buscar para o próximo" e "Avançar para o próximo" foram adicionados por padrão na visualização de notificação de mídia compacta para o Android 12 e versões anteriores (#410).
  • Interface:
    • Os métodos utilitários shouldShowPlayButton e handlePlayPauseButtonAction foram adicionados para criar elementos personalizados da interface com um botão "Reproduzir/pausar".
  • Extensão RTSP:
    • Para MPEG4-LATM, use o valor padrão de ID no nível do perfil se ausente na mensagem Descrever a resposta SDP (#302).
    • Use o URI base para resolução de caminho relativo da sessão RTSP, se presente no cabeçalho de resposta DESCRIBE (#11160).
  • Extensão DASH:
    • Removemos o ajuste de horário da mídia de MediaLoadData.startTimeMs e MediaLoadData.endTimeMs para streams DASH de vários períodos.
    • Foi corrigido um bug em que a nova preparação de uma fonte de mídia da Dash ativa de vários períodos produzia uma IndexOutOfBoundsException (#10838).
  • Extensão HLS:
    • HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) foi adicionado para definir um tempo limite para que a linha de execução de carregamento aguarde a inicialização de TimestampAdjuster. Se a inicialização não for concluída antes do tempo limite, uma PlaybackException será gerada para evitar a parada infinita da reprodução. O tempo limite é definido como zero por padrão (#323).
  • Utilitários de teste:
    • Verifique a insensibilidade a maiúsculas e minúsculas do esquema de URI em DataSourceContractTest.
  • Símbolos descontinuados foram removidos:
    • Os construtores DefaultAudioSink foram removidos e agora use DefaultAudioSink.Builder.
    • Remova HlsMasterPlaylist e use HlsMultivariantPlaylist
    • A Player.stop(boolean) foi removida. Use Player.stop() e Player.clearMediaItems() (se reset for true).
    • Removemos dois construtores SimpleCache descontinuados, use um construtor não descontinuado que usa um DatabaseProvider para melhorar o desempenho
    • O construtor DefaultBandwidthMeter foi removido. Use DefaultBandwidthMeter.Builder
    • Os construtores DefaultDrmSessionManager foram removidos e use DefaultDrmSessionManager.Builder
    • Remova dois construtores HttpDataSource.InvalidResponseCodeException descontinuados e use um construtor não descontinuado que aceite campos adicionais(cause, responseBody) para melhorar a geração de registros de erros.
    • DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash e DownloadHelper.forSmoothStreaming foram removidos. Em vez disso, use DownloadHelper.forMediaItem.
    • O construtor DownloadService descontinuado foi removido. Use um construtor não descontinuado que inclua a opção de fornecer um parâmetro channelDescriptionResourceId
    • As constantes de string descontinuadas foram removidas para os conjuntos de caracteres (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME e UTF16LE_NAME). Em vez disso, use os conjuntos de caracteres Kotlin do pacote kotlin.text, da java.nio.charset.StandardCharsets ou da com.google.common.base.Charsets
    • O construtor WorkManagerScheduler descontinuado foi removido. Use um construtor não descontinuado que inclua a opção de fornecer um parâmetro Context
    • Removemos os métodos descontinuados createVideoSampleFormat, createAudioSampleFormat, createContainerFormat e createSampleFormat, que eram usados para instanciar a classe Format. Em vez disso, use Format.Builder para criar instâncias de Format.
    • Os métodos descontinuados copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate e copyWithVideoSize foram removidos. Em vez disso, use os métodos Format.buildUpon() e setter.
    • O ExoPlayer.retry() descontinuado foi removido. Use prepare()
    • O construtor DefaultTrackSelector zero-arg foi removido. Use DefaultTrackSelector(Context)
    • O construtor OfflineLicenseHelper descontinuado foi removido. Use OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
    • O construtor DownloadManager descontinuado foi removido. Use o construtor que usa um Executor
    • Os construtores Cue descontinuados foram removidos. Em vez disso, use Cue.Builder
    • O construtor OfflineLicenseHelper descontinuado foi removido. Use OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
    • Remoção de quatro métodos AnalyticsListener descontinuados:
      • onDecoderEnabled, use onAudioEnabled e/ou onVideoEnabled.
      • onDecoderInitialized, use onAudioDecoderInitialized e/ou onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, use onAudioInputFormatChanged e/ou onVideoInputFormatChanged.
      • onDecoderDisabled, use onAudioDisabled e/ou onVideoDisabled.
    • Remova os Player.Listener.onSeekProcessed e AnalyticsListener.onSeekProcessed descontinuados e use onPositionDiscontinuity com DISCONTINUITY_REASON_SEEK.
    • ExoPlayer.setHandleWakeLock(boolean) foi removido e use setWakeMode(int).
    • O DefaultLoadControl.Builder.createDefaultLoadControl() descontinuado foi removido. Use build()
    • O MediaItem.PlaybackProperties descontinuado foi removido. Use MediaItem.LocalConfiguration O campo descontinuado MediaItem.playbackProperties agora é do tipo MediaItem.LocalConfiguration.

Versão 1.1.0-rc01

21 de junho de 2023

Use a versão estável 1.1.0.

Versão 1.1.0-beta01

7 de junho de 2023

Use a versão estável 1.1.0.

Versão 1.1.0-alpha01

10 de maio de 2023

Use a versão estável 1.1.0.

Versão 1.0.0

Versão 1.0.2

18 de maio de 2023

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

Ela corresponde à versão do ExoPlayer 2.18.7.

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 se Buffer contém a flag C.BUFFER_FLAG_LAST_SAMPLE.
    • Correção do problema em que o último frame podia não ser renderizado se o último exemplo com frames fosse removido da fila sem ler a amostra de "fim do stream". (11079, link em inglês).
  • Extratores:
    • Correção da análise de SPS H.265 em arquivos MPEG-TS reutilizando a lógica de análise já usada por extratores de 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 do problema em que MediaController não atualiza os comandos disponíveis quando conectado a um MediaSessionCompat legado que atualiza as ações
    • Correção do bug que impedia o MediaLibraryService de retornar um valor nulo em uma chamada da interface do sistema para Callback.onGetLibraryRoot com params.isRecent == true na API 30 (#355).
    • Correção do vazamento de memória de MediaSessionService ou MediaLibraryService (#346).
    • Correção do bug em que uma atualização combinada de Timeline e posição em um MediaSession podia fazer com que uma MediaController gerasse uma IllegalStateException

Versão 1.0.1

18 de abril de 2023

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

Ela corresponde à versão do ExoPlayer 2.18.6.

  • Biblioteca principal:
    • A substituição da transmissão ao vivo de destino foi redefinida ao buscar a posição padrão (#11051).
    • Correção do bug em que streams de amostra vazios na mídia podiam causar travamento na reprodução
  • Sessão:
    • Correção do bug em que vários itens de fila idênticos publicados por um MediaSessionCompat legado resultavam em uma exceção em MediaController (290, link em inglês).
    • Adição do encaminhamento ausente de MediaSession.broadcastCustomCommand ao MediaControllerCompat.Callback.onSessionEvent legado (293, link em inglês).
    • Correção do bug em que chamar MediaSession.setPlayer não atualiza os comandos disponíveis.
    • Correção do problema em que instâncias TrackSelectionOverride enviadas de um MediaController são ignoradas se fizerem referência a um grupo com Format.metadata (296, link em inglês).
    • O problema em que Player.COMMAND_GET_CURRENT_MEDIA_ITEM precisa estar disponível para acessar os metadados pelo MediaSessionCompat legado foi corrigido.
    • Correção do problema em que instâncias de MediaSession em uma linha de execução em segundo plano causavam falhas quando usadas em MediaSessionService (#318).
    • Correção do problema em que um receptor do botão de mídia era declarado pela biblioteca sem que isso fosse intencional (314, link em inglês).
  • DASH:
    • Correção do processamento de linhas do tempo de segmentos vazios (#11014).
  • RTSP:
    • Nova tentativa com TCP se a configuração RTSP com UDP falhar com o erro RTSP 461 SupportedTransport (#11069).

Versão 1.0.0

22 de março de 2023

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

Ela corresponde à versão do ExoPlayer 2.18.5.

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:
    • A detecção do tipo de rede na API 33 foi corrigida (#10970).
    • Correção de NullPointerException ao chamar ExoPlayer.isTunnelingEnabled (#10977).
  • Downloads:
    • A diferença máxima do horário de início de dois segmentos a serem mesclados pode ser configurada em SegmentDownloader e subclasses (248, link em inglês).
  • Áudio:
    • Correção da reprodução de MP3 sem lacunas em dispositivos Samsung (#8594).
    • Correção do bug em que as velocidades de reprodução definidas imediatamente após a desativação do áudio podem ser substituídas por uma mudança de velocidade anterior (#10882).
  • Vídeo:
    • Mapeie o formato HEVC HDR10 para HEVCProfileMain10HDR10 em vez de HEVCProfileMain10.
    • Uma solução alternativa foi adicionada para um problema de dispositivo no Chromecast com Google TV e no Lenovo M10 FHD Plus que faz com que os streams AVC de 60 fps sejam marcados como sem suporte (#10898).
    • Foram corrigidos problemas de desempenho de liberação de frames ao reproduzir mídia com um frame rate muito maior que a taxa de atualização da tela.
  • Transmitir:
    • O STATE_IDLE transitório foi corrigido ao fazer a transição entre itens de mídia (245, link em inglês).
  • RTSP:
    • Detecção da IllegalArgumentException gerada na análise de RTSPs inválidas Descrever mensagens de resposta (#10971).
  • Sessão:
    • Foi corrigido um bug em que o botão de reprodução/pausa da notificação não era atualizado com o estado do jogador (#192).
  • Extensão de IMA:
    • Correção de um bug que impedia o início de streams da DAI sem anúncios porque o primeiro evento LOADED (e, no caso sem anúncios, o único) não era recebido.

Versão 1.0.0-rc01

16 de fevereiro de 2023

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

Ela corresponde à versão do ExoPlayer 2.18.3.

  • Biblioteca principal:
    • Ajustar a lógica de ordem do decodificador do renderizador para manter as preferências do MediaCodecSelector, mesmo se um decodificador informar que não consegue reproduzir a mídia de maneira eficiente. Por exemplo, com o seletor padrão, o decodificador de hardware com suporte apenas funcional terá preferência ao decodificador de software que tem suporte total para o formato (10604, link em inglês).
    • Foi adicionado o ExoPlayer.Builder.setPlaybackLooper, que define uma linha de execução de reprodução existente para uma nova instância do ExoPlayer.
    • Isso permite que os auxiliares do gerenciador de download sejam apagados (10776, link em inglês).
    • Foi adicionado um parâmetro ao BasePlayer.seekTo para indicar o comando usado para a busca.
    • O tema é usado ao carregar drawables no nível 21 ou mais recente da API (220, link em inglês).
    • ConcatenatingMediaSource2 foi adicionado, o que permite combinar vários itens de mídia em uma única janela (247, link em inglês).
  • Extratores:
    • Uma ParserException é gerada em vez de NullPointerException se a tabela de amostras (stbl) estiver sem a descrição necessária (stsd) ao analisar os átomos da lixeira.
    • Amostras são puladas corretamente ao buscar um frame de sincronização em fMP4 diretamente (10941).
  • Áudio:
    • Use a taxa de bits do formato de áudio compactado para calcular o tamanho mínimo do buffer para AudioTrack em reproduções diretas (passagem).
  • Texto:
    • O TextRenderer, que transmitia um índice inválido (negativo) para Subtitle.getEventTime se um arquivo de legenda não contivesse dicas, foi corrigido.
    • SubRip: foi adicionado suporte para arquivos UTF-16 que começarem com uma marca de ordem de byte.
  • Metadados:
    • Análise de diversos valores separados por nulo de frames ID3, conforme permitido pelo ID3 v2.4.
    • MediaMetadata.mediaType foi adicionado para indicar o tipo de conteúdo ou de pasta descrito pelos metadados.
    • MediaMetadata.folderType foi substituído por MediaMetadata.isBrowsable. O tipo de pasta será descontinuado na próxima versão.
  • DASH:
    • Foi adicionada uma análise completa para conjuntos de adaptação de imagens, incluindo contagens de blocos (3752, link em inglês).
  • Interface:
    • O PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) descontinuado foi corrigido para garantir que as mudanças de visibilidade sejam transmitidas ao listener registrado (229, link em inglês).
    • Correção da ordem dos controles do player central em PlayerView ao usar um layout da direita para a esquerda (RTL, na sigla em inglês) (227, link em inglês).
  • Sessão:
    • O abstrato SimpleBasePlayer foi adicionado para ajudar a implementar a interface Player para players personalizados.
    • O método auxiliar SessionToken foi adicionado para converter o token de sessão da plataforma em Media3 (171, link em inglês).
    • Uso de onMediaMetadataChanged para acionar atualizações da sessão de mídia da plataforma (219, link em inglês).
    • A sessão de mídia foi adicionada como argumento de getMediaButtons() do DefaultMediaNotificationProvider e usa listas imutáveis para maior clareza (216, link em inglês).
    • O listener de callback onSetMediaItems foi adicionado para fornecer meios de modificar/definir a lista MediaItem, 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).
  • Metadados:
    • Análise de diversos valores separados por nulo de frames ID3, conforme permitido pelo ID3 v2.4.
    • MediaMetadata.mediaType foi adicionado para indicar o tipo de conteúdo ou de pasta descrito pelos metadados.
    • MediaMetadata.folderType foi substituído por MediaMetadata.isBrowsable. O tipo de pasta será descontinuado na próxima versão.
  • Extensão do Google Cast:
    • Atualização do SDK do Cast para a versão 21.2.0.
  • Extensão de IMA:
    • O listener do player foi removido do ImaServerSideAdInsertionMediaSource na linha de execução do app para evitar problemas.
    • Foi adicionada uma propriedade focusSkipButtonWhenAvailable ao ImaServerSideAdInsertionMediaSource.AdsLoader.Builder para solicitar o foco no botão "Pular" em dispositivos de TV e defini-lo como "true" por padrão.
    • Foi adicionado um método focusSkipButton() ao ImaServerSideAdInsertionMediaSource.AdsLoader para solicitar de maneira programática o foco no botão "Pular".
    • O SDK do IMA foi movido para a versão 3.29.0.
  • App de demonstração:
    • Agora é solicitada uma permissão para notificação de download durante a execução (10884, link em inglês).

Versão 1.0.0-beta03

22 de novembro de 2022

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

Ela corresponde à versão do ExoPlayer 2.18.2.

  • Biblioteca principal:
    • O ExoPlayer.isTunnelingEnabled foi adicionado para verificar se o encapsulamento está ativado para as faixas selecionadas no momento (#2518).
    • O WrappingMediaSource foi adicionado para simplificar o encapsulamento de um único MediaSource (#7279).
    • Descarte do buffer de retorno antes que a reprodução travasse devido à falta de memória.
    • Quando o descarregamento estiver ativado, o bloco de rastreamento "doSomeWork" será fechado.
    • Correção do problema de rastreamento de sessão com buscas rápidas no PlaybackStatsListener (#180).
    • O callback onMediaItemTransition ausente é enviado ao chamar seekToNext ou seekToPrevious em uma playlist de item único (#10667).
    • Novo Player.getSurfaceSize, que retorna o tamanho da superfície em que o vídeo é renderizado.
    • O bug em que a remoção de listeners durante a liberação do player poderia causar uma IllegalStateException (#10758) foi corrigido.
  • Criação:
    • O compileSdkVersion mínimo foi aplicado para evitar erros de compilação (#10684).
    • Evite publicar o bloco quando estiver incluído em outro build do Gradle.
  • Seleção de faixas:
    • Uso de outras faixas no lugar de Dolby Vision caso não haja suporte para a exibição (#8944).
  • Downloads:
    • Correção de um possível loop infinito em ProgressiveDownloader causado por download e reprodução simultâneos com o mesmo PriorityTaskManager (#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).
  • Vídeo:
    • Caso não haja suporte para a tela, um decodificador alternativo para o Dolby Vision será utilizado (#9794).
  • Áudio:
    • SingleThreadExecutor será usado para liberar instâncias de AudioTrack e evitar erros de OutOfMemory ao liberar vários reprodutores ao mesmo tempo (#10057).
    • Novo AudioOffloadListener.onExperimentalOffloadedPlayback para o estado de descarga do AudioTrack (#134).
    • O AudioTrackBufferSizeProvider foi transformado em uma interface pública.
    • Novo ExoPlayer.setPreferredAudioDevice para definir o dispositivo de saída de áudio preferencial (#135).
    • O androidx.media3.exoplayer.audio.AudioProcessor foi renomeado como androidx.media3.common.audio.AudioProcessor.
    • O áudio dos canais 8 e 12 foi mapeado para as máscaras de canal 7.1 e 7.1.4, respectivamente, em todas as versões do Android (#10701).
  • Metadados:
    • Agora, MetadataRenderer pode ser configurado para renderizar metadados assim que eles estiverem disponíveis. Foi criada uma instância com MetadataRenderer(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.
  • DRM:
    • Resolução de um bug na implementação da ClearKey no Android 13, que retorna um URL de licença não vazio, mas inválido.
    • Correção do erro setMediaDrmSession failed: session not opened ao alternar entre esquemas DRM em uma playlist, como mudar de Widevine para ClearKey.
  • Texto:
    • CEA-608: garante que os comandos de alternância do serviço no campo 2 sejam processados corretamente (#10666).
  • DASH:
    • Análise de EventStream.presentationTimeOffset dos manifestos (#10460).
  • Interface:
    • Uso de substituições atuais do reprodutor como predefinição em TrackSelectionDialogBuilder (#10429).
  • Sessão:
    • Os comandos serão sempre executados na ordem correta, mesmo se alguns precisarem de resolução assíncrona (#85).
    • DefaultMediaNotificationProvider.Builder foi adicionado para criar instâncias de DefaultMediaNotificationProvider. 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étodo DefaultMediaNotificationProvider.setSmallIcon(int) para definir o ícone pequeno de notificações (#104).
    • Comandos enviados antes de MediaController.release() não são descartados (#99).
    • SimpleBitmapLoader pode carregar bitmaps de URIs file:// (#108).
    • A declaração que impede que MediaController busque um anúncio em um período foi corrigida (#122).
    • Quando a reprodução termina, o MediaSessionService é interrompido em primeiro plano e uma notificação é mostrada para reiniciar a reprodução do último item de mídia reproduzido (#112).
    • Serviços em primeiro plano não serão iniciados com uma intent pendente para pausa (#167).
    • O "selo" associado à notificação criada por DefaultNotificationProvider foi ocultado nas APIs 26 e 27. O selo é oculto automaticamente na API 28 e mais recentes (#131).
    • Correção do bug em que uma segunda conexão do binder de uma MediaSession legada para uma MediaController Media3 causava IllegalStateExceptions (#49).
  • RTSP:
    • Novo processamento de pacotes fragmentados H263 (#119).
    • Novo suporte a MP4A-LATM (#162).
  • 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 identificar CastPlayer ao controlar a reprodução com um MediaController (#142).
  • Transformador:
    • Novo timer de watchdog do multiplexador para detectar quando a geração de uma amostra de saída é muito lenta.
  • Símbolos descontinuados foram removidos:
    • A Transformer.Builder.setOutputMimeType(String) foi removida. Este recurso foi removido. O tipo MIME sempre será MP4 quando o multiplexador padrão for usado.

Versão 1.0.0-beta02

21 de julho de 2022

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

Ela corresponde à versão do ExoPlayer 2.18.1.

  • Biblioteca principal:
    • Garanta que mudar a ShuffleOrder com ExoPlayer.setShuffleOrder resulta em uma chamada para Player.Listener#onTimelineChanged com reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • Para mídias progressivas, inclua apenas faixas selecionadas na posição em buffer (#10361).
    • Agora há um logger personalizado para toda a saída de registro do ExoPlayer (#9752).
    • Correção da implementação de setDataSourceFactory em DefaultMediaSourceFactory, que não funcionava em alguns casos (#116).
  • Extratores:
    • Correção da análise dos conjuntos de imagens de referência de curto prazo H265 (#10316).
    • Correção da análise de taxas de bits das caixas esds (#10381).
  • DASH:
    • Análise do URL da licença da ClearKey nos manifestos (#10246).
  • Interface:
    • Confirme se o TalkBack anuncia a opção de velocidade atualmente ativa no menu dos controles de mídia (#10298).
  • RTSP:
    • Adição do processamento de pacotes fragmentados VP8 (#110).
  • Extensão do Leanback:
    • Detecte mudanças no playWhenReady em LeanbackAdapter (10420).
  • Transmitir:
    • Use o MediaItem que foi transmitido aos métodos da playlist como Window.mediaItem na CastTimeline (#25, #8212).
    • Suporte a Player.getMetadata() e Listener.onMediaMetadataChanged() com CastPlayer (#25).

Versão 1.0.0-beta01

16 de junho de 2022

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

Ela corresponde à versão do ExoPlayer 2.18.0 (link em inglês).

  • Biblioteca principal:
    • Suporte adicionado ao diagnóstico da plataforma Android pelo MediaMetricsManager. O ExoPlayer vai encaminhar os eventos de reprodução e os dados de desempenho para a plataforma, o que ajuda a fornecer informações de desempenho e depuração do sistema no dispositivo. Esses dados também poderão ser coletados pelo Google se o compartilhamento de dados de uso e diagnóstico for ativado pelo usuário do dispositivo. Os apps podem desativar a contribuição de diagnósticos da plataforma para o ExoPlayer com ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Correção do bug em que as faixas eram redefinidas com muita frequência ao usar MergingMediaSource, por exemplo, ao carregar legendas e mudar a legenda intermediária selecionada (#10248).
    • O tipo de rede 5G-NSA nas APIs 29 e 30 não são mais detectados. Essas reproduções vão supor que é uma rede 4G.
    • null e MediaSource.Factory.setDrmSessionManagerProvider foram renomeados como MediaSource.Factory.setLoadErrorHandlingPolicy. As instâncias de DefaultDrmSessionManagerProvider e DefaultLoadErrorHandlingPolicy podem ser explicitamente transmitidas, se necessário.
    • MediaItem.RequestMetadata foi adicionado para representar os metadados necessários para reproduzir a mídia quando LocalConfiguration não for conhecido. MediaMetadata.mediaUrl também foi removido, porque agora ele está incluído em RequestMetadata.
    • Adicionamos Player.Command.COMMAND_SET_MEDIA_ITEM para que os jogadores possam permitir a configuração de um único item.
  • Seleção de faixas:
    • A classe TrackSelectionOverrides foi nivelada em TrackSelectionParameters, e TrackSelectionOverride foi promovida para uma classe de nível superior.
    • TracksInfo foi renomeado como Tracks, eTracksInfo.TrackGroupInfo foi renomeado como Tracks.Group. Player.getCurrentTracksInfo e Player.Listener.onTracksInfoChanged também foram renomeados como Player.getCurrentTracks e Player.Listener.onTracksChanged. Isso inclui o "cancelamento da descontinuação" do nome do método Player.Listener.onTracksChanged, mas com diferentes tipos de parâmetro.
    • DefaultTrackSelector.buildUponParameters e DefaultTrackSelector.Parameters.buildUpon foram alterados para retornar DefaultTrackSelector.Parameters.Builder em vez do DefaultTrackSelector.ParametersBuilder descontinuado.
    • Adicionado DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities, que é ativado por padrão. Quando ativado, o DefaultTrackSelector prefere faixas de áudio cuja contagem de canais não exceda aos recursos de saída do dispositivo. Em dispositivos portáteis, o DefaultTrackSelector tem preferência pelo formato estéreo/mono em vez de vários formatos de áudio multicanal, a menos que o formato multicanal possa ser espacializado (Android 12L+) ou o áudio está em um formato de som surround Dolby. Além disso, em dispositivos com suporte à espacialização de áudio, o DefaultTrackSelector monitora as mudanças nas propriedades Spatializer e aciona uma nova seleção de faixas. Dispositivos com um Modo de interface de television não têm essas restrições, e o formato com a maior contagem de canais vai ter preferência.television Para ativar esse recurso, a instância DefaultTrackSelector precisa ser criada com um Context.
  • Vídeo:
    • DummySurface foi renomeado como PlaceholderSurface.
    • 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 de android.media.AudioAttributes para uma nova classe wrapper AudioAttributesV21. Assim, é possível evitar uma verificação lenta da ART na API anterior a 21.
    • Consulte a plataforma (API 29 ou mais recente) ou suponha a contagem de canais de codificação para passagem de áudio quando o formato da contagem de canais de áudio não estiver configurado, o que ocorre com a preparação sem separações em blocos do HLS (10204).
    • Configure a AudioTrack com a máscara de canal AudioFormat.CHANNEL_OUT_7POINT1POINT4 se o decodificador produzir áudio PCM de 12 canais (#10322).
  • DRM
    • Garanta que a sessão de DRM sempre seja atualizada corretamente ao pesquisar imediatamente após uma mudança de formato (10274).
  • Texto:
    • Player.getCurrentCues() foi alterado para retornar CueGroup em vez de List<Cue>.
    • SSA: adicionado suporte à configuração de estilo OutlineColour quando BorderStyle == 3, ou seja, a OutlineColour define o plano de fundo do sinal (#8435).
    • CEA-708: analisa dados em vários blocos de serviços e ignora os blocos não associados ao número de serviço selecionado.
    • O RawCcExtractor foi removido. Ele era usado apenas para processar um formato de legenda interno do Google.
  • Extratores:
    • Adição de suporte à AVI (#2092).
    • Matroska: analisa o DiscardPadding para faixas Opus.
    • MP4: analisa as taxas de bits de caixas de esds.
    • Ogg: permite o ID duplicado da Opus e os cabeçalhos de comentários (#10038).
  • Interface:
    • Corrigida a entrega de eventos para os OnClickListeners definidos em PlayerView caso useController=false (#9605). Também foi corrigida a entrega de eventos ao OnLongClickListener para todas as configurações de visualização.
    • Corrigido tratamento incorreto de uma sequência de eventos de toque que saem dos limites da PlayerView antes da ACTION_UP como um clique (#9861).
    • Corrigido problema de acessibilidade da PlayerView em que o toque podia alternar a reprodução em vez de ocultar os controles (#8627).
    • TrackSelectionView e TrackSelectionDialogBuilder foram reescritos para trabalhar com a interface Player em vez de ExoPlayer. Isso permite que as visualizações sejam usadas com outras implementações do Player e remove a dependência do módulo da interface para o módulo ExoPlayer. Essa é uma alteração interruptiva.
    • Não mostre faixas de texto forçadas no seletor de faixas da PlayerView e mantenha uma faixa de texto forçada adequada selecionada, se a opção "None" estiver selecionada (#9432).
  • DASH:
    • Analisada contagem de canais dos elementos de AudioChannelConfiguration do DTS. Isso reativa a passagem de áudio para fluxos do DTS (#10159).
    • A transmissão de null para DashMediaSource.Factory.setCompositeSequenceableLoaderFactory foi desativada. As instâncias de DefaultCompositeSequenceableLoaderFactory podem ser transmitidas explicitamente, se necessário.
  • HLS:
    • A preparação com separações em blocos é substituída se o atributo CODECS da playlist não tem o codec de áudio (#10065).
    • A transmissão de null para HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory e HlsMediaSource.Factory.setPlaylistTrackerFactory foi desativada. Instâncias de DefaultCompositeSequenceableLoaderFactory e DefaultHlsPlaylistParserFactory ou uma referência a DefaultHlsPlaylistTracker.FACTORY podem ser transmitidas explicitamente, se necessário.
  • Smooth Streaming:
    • A transmissão de null para SsMediaSource.Factory.setCompositeSequenceableLoaderFactory foi desativada. As instâncias de DefaultCompositeSequenceableLoaderFactory podem ser transmitidas explicitamente, se necessário.
  • RTSP:
    • Adição do leitor RTP para H263 (#63).
    • Adicionado leitor de RTP para MPEG4 (#35).
    • Adicionado leitor de RTP para HEVC (#36).
    • Adicionado leitor de RTP para AMR. Atualmente, há suporte apenas para os fluxos AMR de canal mono e não intercalados. Não há suporte para o payload de RTP do composto AMR (#46).
    • Adicionado leitor de RTP para VP8 (#47).
    • Adicionado leitor de RTP para WAV (#56).
    • Correção do cabeçalho de autorização básico do RTSP (#9544).
    • Os campos SDP obrigatórios não são mais verificados, porque o ExoPlayer não precisa deles (#10049).
    • Geradas exceções verificadas ao analisar o tempo do RTSP (#10165).
    • Adicionado leitor de RTP para VP9 (#47).
    • Adicionado do leitor de RTP para OPUS (#53).
  • Origens de dados:
    • DummyDataSource foi renomeado como PlaceholderDataSource.
    • Foi criada uma solução alternativa de processamento para a interrupção OkHttp.
  • Sessão:
    • MediaSession.MediaItemFiller foi substituído por MediaSession.Callback.onAddMediaItems para permitir a resolução assíncrona de solicitações.
    • Suporte aos métodos setMediaItems(s) quando o MediaController se conecta a uma sessão de mídia legada.
    • MediaController.setMediaUri e MediaSession.Callback.onSetMediaUri foram removidos. A mesma funcionalidade pode ser encontrada em MediaController.setMediaItem e MediaSession.Callback.onAddMediaItems.
    • Encaminhamento de chamadas do MediaController legadas para reproduzir mídia para MediaSession.Callback.onAddMediaItems em vez de onSetMediaUri.
    • MediaNotification.Provider e DefaultMediaNotificationProvider foram adicionados para fornecer personalização das notificações.
    • BitmapLoader e SimpleBitmapLoader foram adicionados para fazer o download das imagens de arte.
    • Adicionamos MediaSession.setCustomLayout() para oferecer compatibilidade com versões anteriores da sessão legada.
    • MediaSession.setSessionExtras() foi adicionado para fornecer paridade de recursos com a sessão legada.
    • MediaSession.MediaSessionCallback foi renomeado como MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback como MediaLibrarySession.Callback, e MediaSession.Builder.setSessionCallback como setCallback.
    • Correção do NPE em MediaControllerImplLegacy (#59).
    • Atualizadas informações de posição da sessão ao realizar mudanças na linha do tempo (#51).
    • NPE foi corrigido em MediaControllerImplBase após o lançamento do controlador (#74).
  • Reprodução de anúncios / IMA:
    • A taxa de pesquisa de anúncio foi reduzida de cada 100 ms para cada 200 ms, de acordo com as recomendações do Media Rating Council (MRC).
  • Extensão FFmpeg:
    • Atualizada versão do CMake para 3.21.0+ para evitar um bug no CMake que causava falha na sincronização do Gradle do Android Studio (#9933).
  • Símbolos descontinuados foram removidos:
    • Remoção de Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Use Player.Listener.onTracksChanged(Tracks).
    • REmoção de Player.getCurrentTrackGroups e Player.getCurrentTrackSelections. Use Player.getCurrentTracks. Também é possível continuar usando ExoPlayer.getCurrentTrackGroups e ExoPlayer.getCurrentTrackSelections, embora esses métodos permaneçam descontinuados.
    • As constantes DownloadHelper, DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT e DEFAULT_TRACK_SELECTOR_PARAMETERS foram removidas. Use getDefaultTrackSelectorParameters(Context) quando possível. Caso contrário, use DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • Construtor DefaultTrackSelector(ExoTrackSelection.Factory) foi removido. Use DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Transformer.Builder.setContext foi removido. O Context precisa ser transmitido para o construtor Transformer.Builder.

Versão 1.0.0-alpha03

14 de março de 2022

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

Ela corresponde à versão 2.17.1 do ExoPlayer (link em inglês).

  • Áudio:
    • Os recursos de áudio de verificação de erro para Dolby Atmos (E-AC3-JOC) no HLS foram corrigidos.
  • Extratores:
    • FMP4: o problema em que os metadados de exemplo do emsg podem ser emitidos na ordem errada para streams contendo átomos emsg v0 e v1 foi corrigido (#9996, link em inglês).
  • Texto:
    • A interação de SingleSampleMediaSource.Factory.setTrackId e MediaItem.SubtitleConfiguration.Builder.setId foi corrigida para priorizar o campo SubtitleConfiguration e voltar ao valor da Factory se o campo não estiver definido (#10016, link em inglês).
  • Reprodução de anúncios:
    • Os underruns de áudio entre os períodos de anúncios em tempo real nos streams SSAI HLS foram corrigidos.

Versão 1.0.0-alpha02

2 de março de 2022

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

Ela corresponde à versão do ExoPlayer 2.17.0 (link em inglês).

  • Biblioteca principal:
    • Adicione o método protegido DefaultRenderersFactory.getCodecAdapterFactory() para que as subclasses da DefaultRenderersFactory que substituem os métodos buildVideoRenderers() ou buildAudioRenderers() possam acessar a fábrica do adaptador de codec e a transmitir para instâncias MediaCodecRenderer que eles criam.
    • Propague os campos de cabeçalho ICY name e genre para MediaMetadata.station e MediaMetadata.genre, respectivamente. Assim, eles chegam ao app via Player.Listener.onMediaMetadataChanged() (#9677, link em inglês).
    • As chaves nulas foram removidas de DefaultHttpDataSource#getResponseHeaders.
    • Quando a criação de uma instância do MediaCodec falhar, o dispositivo entra em suspensão e tenta novamente. Isso corrige um problema que ocorre em alguns dispositivos ao alternar uma superfície de um codec seguro para outro (#8696, link em inglês).
    • O método MediaCodecAdapter.getMetrics() foi adicionado para permitir que os usuários acessem os dados de métricas do MediaCodec (#9766, link em inglês).
    • A resolução da dependência do Maven foi corrigida (#8353, link em inglês).
    • O ajuste automático da velocidade foi desativado para transmissões ao vivo que não têm recursos de baixa latência nem uma solicitação do usuário que defina a velocidade (#9329, link em inglês).
    • DecoderCounters#inputBufferCount foi renomeado como queuedInputBufferCount.
    • Os SimpleExoPlayer.renderers agora são particulares. Os renderizadores podem ser acessados usando o ExoPlayer.getRenderer.
    • Atualização de alguns valores constantes das AnalyticsListener.EventFlags para corresponder aos valores nas Player.EventFlags.
    • O AnalyticsCollector foi dividido em uma interface e implementação padrão para permitir que ele seja removido pelo R8 se um app não precisar dele.
  • 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 uma TrackGroupArray. Os TrackGroups sempre podem ser distinguíveis definindo um id no construtor do TrackGroup. Isso corrige uma falha ao retomar a reprodução após colocar o app em segundo plano com uma substituição da faixa ativa (#9718, link em inglês).
    • A lógica na AdaptiveTrackSelection mudou para permitir um aumento da qualidade em uma largura de banda de rede suficiente, mesmo que a reprodução esteja muito próxima da extremidade ativa (#9784, link em inglês).
  • Vídeo:
    • A lógica de substituição do decodificador para Dolby Vision foi corrigida a fim de usar um decodificador H264/H265 compatível, se necessário.
  • Áudio:
    • A lógica de substituição do decodificador para Dolby Atmos (E-AC3-JOC) foi corrigida a fim de usar um decodificador E-AC3 compatível, se necessário.
    • As APIs AudioCapabilities foram alteradas para exigir a transmissão explícita de AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES em vez de null.
    • A personalização do cálculo do tamanho do buffer da AudioTrack agora pode ser feita injetando um AudioTrackBufferSizeProvider no DefaultAudioSink (8891, link em inglês).
    • Tente criar a AudioTrack novamente se o tamanho do buffer solicitado for > 1 MB (9712, link em inglês).
  • Extratores:
    • WAV: foi adicionado suporte aos streams RF64 (#9543, link em inglês).
    • A análise incorreta de unidades H.265 SPS NAL foi corrigida (#9719, link em inglês).
    • Analise os comentários do Vorbis (incluindo METADATA_BLOCK_PICTURE) em arquivos Ogg Opus e Ogg Vorbis.
  • Texto:
    • Um campo MediaItem.SubtitleConfiguration.id, que é propagado para o campo Format.id da faixa de legenda criada com a configuração, foi adicionado (#9673, link em inglês).
    • Foi adicionado suporte básico para legendas WebVTT em contêineres Matroska (#9886, link em inglês).
    • O Cea708Decoder não pode ler mais do que o tamanho declarado de um bloco de serviços.
  • DRM:
    • O playbackLooper foi removido de DrmSessionManager.(pre)acquireSession Quando um DrmSessionManager é usado por um app em uma MediaSource personalizada, o playbackLooper precisa ser transmitido para DrmSessionManager.setPlayer.
  • Reprodução de anúncios / IMA:
    • Agora é possível usar a Inserção de anúncios dinâmicos do IMA (DAI) (#8213, link em inglês).
    • Um método foi adicionado ao AdPlaybackState para permitir a redefinição de um grupo de anúncios. Assim, ele pode ser reproduzido novamente (#9615, link em inglês).
    • A velocidade de reprodução de 1,0 é aplicada durante a reprodução do anúncio (#9018, link em inglês).
    • O problema em que um grupo de anúncios falhava ao carregar e causava uma redefinição imediata da reprodução foi corrigido (#9929, link em inglês).
  • Interface:
    • A cor dos números nos botões "Voltar" e "Avançar" da StyledPlayerView quando determinados temas são usados foi corrigida (#9765, link em inglês).
    • As strings da velocidade de reprodução agora são traduzidas corretamente (#9811, link em inglês).
  • DASH:
    • As propriedades essenciais e complementares analisadas foram adicionadas ao arquivo Representation (#9579, link em inglês).
    • Suporte ao papel da faixa forced-subtitle (#9727, link em inglês).
    • O papel da faixa main não é mais interpretado como C.SELECTION_FLAG_DEFAULT.
    • A lógica de exclusão do URL base foi corrigida para manifestos que não declaram o namespace do DVB (#9856, link em inglês).
    • Suporte aos URLs MPD.Location relativos (#9939, link em inglês).
  • 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).
  • RTSP:
    • Uma API cliente é oferecida para substituir a SocketFactory usada para qualquer conexão com o servidor (#9606, link em inglês).
    • O método de autenticação DIGEST é usado em vez de BASIC se ambos estiverem presentes (#9800, link em inglês).
    • Gerencie quando o tempo de rastreamento RTSP não está disponível (#9775, link em inglês).
    • Os valores do cabeçalho das informações de RTP inválidos são ignorados (#9619, link em inglês).
  • Transformador:
    • A versão mínima necessária da API aumentou para 21.
    • A TransformationException agora é usada para descrever erros que ocorrem durante uma transformação.
    • A TransformationRequest foi adicionada para especificar as opções de transformação.
    • Agora, vários listeners podem ser registrados.
    • O travamento do transformador quando a saída do codec é parcialmente lida foi corrigido.
    • Uma possível NPE em Transformer.getProgress ao liberar a geração do multiplexador foi corrigida.
    • Um app de demonstração para aplicar transformações foi adicionado.
  • Extensão MediaSession:
    • Por padrão, o MediaSessionConnector agora limpa a playlist ao parar. Os apps que querem manter a playlist retida podem chamar setClearMediaItemsOnStop(false) no conector.
  • Extensão do Google Cast:
    • O bug que impedia o CastPlayer de chamar onIsPlayingChanged corretamente foi corrigido (#9792, link em inglês).
    • Foi adicionado suporte aos metadados de áudio, incluindo imagens com o DefaultMediaItemConverter (#9663, link em inglês).
  • Extensão FFmpeg:
    • O build_ffmpeg.sh agora depende dos utilitários de agrupamento do LLVM em vez dos utilitários do GNU (#9933, link em inglês).
  • 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 do play-services-cast-framework não são compatíveis com apps destinados ao Android 12 e vão falhar com uma IllegalArgumentException ao criar PendingIntents (#9528, link em inglês).
  • Símbolos descontinuados foram removidos:
    • O Player.EventListener foi removido. Use Player.Listener.
    • MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory e MediaSourceFactory#setDrmUserAgent foram removidos. Use MediaSourceFactory#setDrmSessionManagerProvider.
    • O MediaSourceFactory#setStreamKeys foi removido. Use MediaItem.Builder#setStreamKeys
    • O MediaSourceFactory#createMediaSource(Uri) foi removido. Use MediaSourceFactory#createMediaSource(MediaItem)
    • O setTag foi removido de DashMediaSource, HlsMediaSource e SsMediaSource. Use MediaItem.Builder#setTag.
    • O DashMediaSource#setLivePresentationDelayMs(long, boolean) foi removido. Use MediaItem.Builder#setLiveConfiguration e MediaItem.LiveConfiguration.Builder#setTargetOffsetMs para substituir o manifesto ou DashMediaSource#setFallbackTargetLiveOffsetMs para fornecer um valor de substituição.
    • O (Simple)ExoPlayer.setThrowsWhenUsingWrongThread foi removido. Não é mais possível desativar a aplicação da linha de execução.
    • ActionFile e ActionFileUpgradeUtil foram removidos. Use o ExoPlayer 2.16.1 ou anterior para usar ActionFileUpgradeUtil a fim de mesclar arquivos de ações legadas no DefaultDownloadIndex.
    • A ProgressiveMediaSource#setExtractorsFactory foi removida. Use o construtor ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • ProgressiveMediaSource.Factory#setTag e ProgressiveMediaSource.Factory#setCustomCacheKey foram removidos. Use MediaItem.Builder#setTag e MediaItem.Builder#setCustomCacheKey.
    • Os construtores DefaultRenderersFactory(Context, @ExtensionRendererMode int) e DefaultRenderersFactory(Context, @ExtensionRendererMode int, long) foram removidos. Use os construtores DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode e DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Todos os construtores CronetDataSource públicos foram removidos. Use CronetDataSource.Factory
  • Mude o IntDefs para apenas @Target(TYPE_USE). Isso pode interromper a compilação de usos no Kotlin, que podem ser corrigida movendo a anotação para o tipo (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (no pacote com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (no pacote com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Versão 1.0.0-alpha01

27 de outubro de 2021

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

Novos recursos

A Media3 é o novo lar das bibliotecas de suporte de mídia, incluindo o ExoPlayer. A primeira versão Alfa contém implementações antecipadas e funcionais de bibliotecas para casos de uso de mídia, incluindo:

  • o ExoPlayer, um player de mídia no nível do aplicativo para Android que é fácil de personalizar e estender;
  • funcionalidade de sessão de mídia para expor e controlar reproduções. Esse novo módulo de sessão usa a mesma interface de Player que o ExoPlayer;
  • componentes de IU para criar interfaces do usuário para reprodução de mídia;
  • módulos que unem as funcionalidades em outras bibliotecas para uso com o ExoPlayer, por exemplo, a inserção de anúncios usando o SDK do IMA.

Para ver mais informações, consulte o projeto Media3 do GitHub (link em inglês).

O ExoPlayer era hospedado anteriormente em um projeto separado do ExoPlayer no GitHub (link em inglês). Na Media3, o nome do pacote é androidx.media3.exoplayer. Planejamos continuar com a manutenção e o lançamento do projeto ExoPlayer no GitHub por um certo período. Assim, os desenvolvedores vão ter tempo de migrar os aplicativos para a Media3. A Media3 tem substituições para todos os módulos do ExoPlayer, exceto as extensões de media2 e mediasession legadas, que foram substituídas pelo novo módulo media3-session. Esse módulo fornece integração direta entre os players de mídia e as sessões de mídia sem precisar usar uma classe de adaptador/conector.