Media3
| Ultimo aggiornamento | Release stabile | Candidato per la release | Release beta | Release alpha |
|---|---|---|---|---|
| 21 ottobre 2026 | 1.11.1 | - | - | 1.12.0-alpha01 |
Dichiara le dipendenze
Per aggiungere una dipendenza da Media3, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per
la tua app o il tuo modulo:
Alla moda
dependencies { def media3_version = "1.11.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.11.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Per saperne di più sulle dipendenze, consulta Aggiungi dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare l'Issue Tracker di Media3 per trovare risposte a domande, problemi noti e richieste di funzionalità, nonché per segnalare nuovi problemi.
Versione 1.12.0
Versione 1.12.0-alpha01
21 ottobre 2026
La versione 1.12.0-alpha01 contiene i seguenti commit.
- Libreria comune:
- Aggiungi
C.COLOR_SPACE_DISPLAY_P3e supporta lo spazio dei colori Display P3 nelle mappature dei colori ISOMediaFormatUtileColorInfo. - Aggiunto un registro
Flagscentrale per gestire i flag di funzionalità sperimentali e il rilascio graduale (Flags.setCanaryModeEnabled). È stata eseguita la migrazione di molti metodi@ExperimentalApiesistenti per utilizzare la nuova API dei flag. - Aggiungi
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categorieseMediaMetadata.Builder.setCategories(List<String>). - Sostituisci
androidx.media3.common.util.NonNullApicon JSpecifyorg.jspecify.annotations.NullMarked.
- Aggiungi
- ExoPlayer:
- Risolto un problema per cui la riproduzione multi-periodo DASH si bloccava quando il caricamento del primo chunk del periodo successivo non andava a buon fine (#3396).
- Segnala
wasCanceled = trueinAnalyticsListener.onLoadErroreMediaSourceEventListener.onLoadErrorquando i nuovi tentativi di caricamento sono esauriti. - Supporto della registrazione di più istanze
VideoFrameMetadataListenerutilizzandoExoPlayer.addVideoFrameMetadataListenereExoPlayer.removeVideoFrameMetadataListener, con ritiro diExoPlayer.setVideoFrameMetadataListenereExoPlayer.clearVideoFrameMetadataListener. - Aggiungi il supporto per gli annunci nei contenuti con più periodi (ad es. DASH) suddividendo e compensando
AdPlaybackStateper ogni periodo. - Risolta la race condition in
PreCacheHelperper cui l'annullamento di una richiesta di preparazione in corso poteva comunque avviare i download in background. - Limita
setLoadOnlySelectedTracks(true)suProgressiveMediaSourceeDefaultMediaSourceFactoryper filtrare solo le tracce video e immagine non selezionate. Le tracce audio e di testo vengono sempre caricate per consentire il passaggio da una traccia all'altra senza dover eseguire nuovamente il buffering. - Attiva
setLoadOnlySelectedTracks(true)per impostazione predefinita suProgressiveMediaSourceeDefaultMediaSourceFactory. In questo modo, si risparmia memoria e i calcoli di allocazione del buffer diDefaultLoadControlfunzionano in modo più accurato quando non sono selezionate tutte le tracce. Tieni presente che ciò potrebbe causare un buffering aggiuntivo se le tracce video o immagine non selezionate vengono attivate di recente durante la riproduzione. - Risolto un problema per cui
Player.getCurrentPosition()poteva restituire valori obsoleti (aggiornati solo poche volte al secondo) quando la pianificazione dinamica è attiva (#3286). - Risolto un problema per cui una diminuzione o un ripristino imprevisti della posizione della testina di riproduzione di
AudioTrackpotevano essere trattati erroneamente come un overflow di numeri interi, causando il blocco della riproduzione durante il buffering (#3407). - Rimuovi l'esperimento
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean). - Evita riattivazioni non necessarie del renderer e problemi durante il ritorno da interstitial o annunci a contenuti tagliati alla fine (#3371).
- Risolto un problema per cui un errore del renderer su un elemento della playlist imminente poteva interrompere prematuramente la riproduzione corrente quando
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONè attivo. - È stato corretto un
NullPointerExceptionche poteva verificarsi seExoPlayerpassava i renderer a un periodo multimediale non preparato quandoFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONè abilitato. - Risolto un problema per cui i frame video potevano essere saltati o eliminati inaspettatamente durante la pianificazione dinamica quando
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSè attivo. - Risolto un
ArrayIndexOutOfBoundsExceptionnei listener di analisi quando la riproduzione viene interrotta durante un annuncio in un live streaming (#3423). - Risolto un problema per cui
PreloadMediaSourcepoteva pubblicare inaspettatamente un evento precaricato quandopreload()non veniva mai chiamato (#3408). - Risolto un problema per cui
Format.subsampleOffsetUsveniva ignorato per le tracce dei metadati, causando timestamp di riproduzione errati nei comandi di giunzione SCTE-35 decodificati (#3413). - Risolto un problema di perdita di memoria in
PreloadMediaSourceeDefaultPreloadManagerquandopreload()viene chiamato più volte sulla stessa origine (#3445). - Risolto un problema di
NullPointerExceptiondurante il rilascio diAdsMediaSourcementre è in attesa un aggiornamento della cronologia dei contenuti (#3442). - Risolto un problema per cui la riproduzione di contenuti multimediali progressivi poteva passare alla posizione errata quando un caricamento dopo una ricerca (o quando si avviava la riproduzione in una posizione diversa da zero) non andava a buon fine e veniva ripetuto (#3440).
- Aggiunta una soluzione alternativa per il blocco del decoder H.264 di Xiaomi TV Stick 4K (MiTV-AYFR0) in caso di modifiche della risoluzione senza interruzioni (#3457).
- Risolto un problema di
NullPointerExceptioninSteeringManifestTrackerquando il tracker viene interrotto prima dell'esecuzione di un callback di errore o di completamento del caricamento pubblicato (#3443). - Supporto della riproduzione dei metadati temporizzati HAGC (ST 2094-50) dalle tracce dei metadati con box
mebxnei file MP4. - Risolto un problema per cui i periodi multimediali con preparazione lenta in una playlist potevano essere saltati.
- CompositionPlayer:
- Supporto della configurazione della frequenza fotogrammi dell'aggregazione dei frame video utilizzando
Composition.Builder.setVideoFrameAggregationParametersper i workflow di riproduzione. - Risolvi i cali di frame nelle composizioni con più sequenze causati da errori di quantizzazione o arrotondamento dei timestamp selezionando il frame con il timestamp più vicino durante l'aggregazione dei frame. Questa opzione è abilitata solo dall'API 29, in quanto richiede di mantenere un frame aggiuntivo in corso per sequenza video.
- Supporto della configurazione della frequenza fotogrammi dell'aggregazione dei frame video utilizzando
- Transformer:
- Supporto della configurazione della frequenza fotogrammi dell'aggregazione dei fotogrammi video utilizzando
Composition.Builder.setVideoFrameAggregationParametersper i workflow di esportazione. - Risolvi i cali di frame nelle composizioni con più sequenze causati da errori di quantizzazione o arrotondamento dei timestamp selezionando il frame con il timestamp più vicino durante l'aggregazione dei frame. Questa opzione è abilitata solo dall'API 29, in quanto richiede di mantenere un frame aggiuntivo in corso per sequenza video.
- Rispetta
Transformer#setAudioMimeType(AUDIO_RAW)quando vengono utilizzatiAudioProcessors. Prima di questa correzione, la richiesta diMimeTypes.AUDIO_RAWe l'applicazione di unAudioProcessorgeneravano un output compresso.
- Supporto della configurazione della frequenza fotogrammi dell'aggregazione dei fotogrammi video utilizzando
- Selezione della traccia:
- Risolto un problema per cui su alcuni dispositivi una traccia SDR veniva preferita erroneamente a una traccia Dolby Vision supportata (#3135).
- Estrattori:
- Mp4Extractor: è stato corretto l'errore di analisi della casella
dOpsper Opus in MP4, in cuiPreSkip,InputSampleRateeOutputGainnon venivano convertiti da big-endian a little-endian, causando l'eliminazione dei primi ~299 ms di audio quando non è presente un elenco di modifiche (#3431). - Rimuovi
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESeFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265poiché l'analisi della dipendenza dei campioni all'interno del GOP per H.264 e H.265 è attivata per impostazione predefinita. - Mp4Extractor: è stato corretto l'analisi dei metadati sulla posizione dalle caselle
xyzcontenenti coordinate di altitudine per compilareMp4LocationData. - Aggiunta di
ExtractorUtil.getFramesPerEncodedSampleper calcolare il numero di frame audio per campione per i formati audio codificati (#3367). - Aggiungi
FLAG_READ_XMP_METADATAaMp4Extractorper estrarre i metadati XMP dalle caselle UUID di primo livello. - Risolto il problema dell'audio AC-3, DTS e LPCM danneggiato durante la riproduzione di contenuti MPEG-PS in stile DVD, rimuovendo l'intestazione del sottostream
private_stream_1da ogni pacchetto PES inPsExtractorprima che il payload venga passato al lettore audio (#3327). - Risolto un errore in
FragmentedMp4Extractorquando un boxtfdtversione 1 codifica unbaseMediaDecodeTimenegativo (#3412). - MPEG-TS: è stato aggiunto il supporto per l'analisi dei messaggi SEI di disposizione del frame packing H.264 e H.265 per compilare
Format.stereoMode(#3419). - Analizza i dati di configurazione del profilo Dolby Vision 20 e rifiuta i profili Dolby Vision non supportati anziché riprodurli come HEVC standard con colori errati (#3427).
- MP3: ripristina la regolazione dei metadati di spaziatura interna e ritardo dell'encoder LAME/Xing perché non è compatibile con molti decoder MP3
MediaCodec(#3425). - Matroska: correzione di
NullPointerExceptiondurante l'analisi degli elementiChapterAtomnidificati (#3438). - Ogg: è stato corretto un bug per cui un pacchetto di dimensioni pari a un multiplo di 255 byte e che termina in corrispondenza di un confine di pagina viene unito al pacchetto successivo.
- MP4: analizza le tracce di metadati temporizzati con box
mebxinMp4ExtractoreFragmentedMp4Extractor. Le tracce che contengono una chiaveit35vengono esposte comeMimeTypes.APPLICATION_ITUT_T35(attivando la riproduzione HAGC). Le altre traccemebxvengono ignorate, a meno che non sia impostatoFLAG_EMIT_RAW_MEBX_DATA, nel qual caso tutte le traccemebxvengono emesse comeMimeTypes.APPLICATION_MEBXnon elaborate. - Ogg: è stato aggiunto il supporto per l'estrazione del padding finale di Opus per la riproduzione senza interruzioni (#2576) e sono stati corretti i timestamp dei sample dopo la ricerca di una pagina che inizia con un pacchetto continuato.
- Ogg: correzione degli errori di decodifica e dei salti di timestamp di circa 1 secondo negli stream Ogg Opus concatenati ignorando i pacchetti di intestazione dei commenti e dell'ID Opus a metà stream.
- Mp4Extractor: è stato corretto l'errore di analisi della casella
- Inspector:
- Supporto del recupero dei metadati XMP dai file MP4 utilizzando
MetadataRetriever. - Supporto dell'estrazione di tracce di metadati temporizzati con box
mebxinMediaExtractorCompatcomeMimeTypes.APPLICATION_MEBX.
- Supporto del recupero dei metadati XMP dai file MP4 utilizzando
- Frame di ispezione:
- Correzione del clipping dei colori BT.2020 ad ampia gamma nell'immagine di base SDR durante l'estrazione di frame Ultra HDR con
FrameExtractor. I colori fuori gamma ora vengono compressi leggermente nella gamma sRGB anziché essere bloccati.
- Correzione del clipping dei colori BT.2020 ad ampia gamma nell'immagine di base SDR durante l'estrazione di frame Ultra HDR con
- Audio:
- Aggiunta di una soluzione alternativa per i dispositivi che richiamano
android.media.AudioDeviceCallbacksul thread sbagliato (#3386). - Risolvi i potenziali blocchi della riproduzione dopo le transizioni delle tracce con l'offload compresso.
- Risolto un problema relativo alle chiavette Amazon Fire TV per cui l'audio AC-3 poteva bloccarsi durante le transizioni dei periodi (#3448).
- Supporto del trimming del padding dell'encoder di fine stream per la riproduzione senza pause di Ogg e WebM/Matroska Opus (#2576).
- Correzione degli aggiornamenti di padding e ritardo senza interruzioni dell'offload dinamico durante le transizioni delle tracce, in modo che vengano applicati alla traccia in arrivo anziché a quella in riproduzione.
- Taglia il padding finale dell'encoder su singoli stream e sullo stream finale di una playlist, oltre alle transizioni senza interruzioni a metà playlist (#2576).
- Evita copie di buffer audio non necessarie in
TrimmingAudioProcessordopo il completamento del ritaglio del ritardo del codificatore di inizio stream e non è necessario ritagliare il padding di fine stream.
- Aggiunta di una soluzione alternativa per i dispositivi che richiamano
- Video:
- Correzione della segnalazione di frame video in ritardo con timestamp di rilascio identici in modo che vengano segnalati come ignorati anziché saltati.
- Testo:
- Aggiungi
MediaItem.SubtitleConfiguration.timeOffsetUsper spostare i timestamp dei sottotitoli caricati lateralmente rispetto ai contenuti multimediali. L'offset può essere modificato durante la riproduzione conPlayer.replaceMediaItem(int, MediaItem)senza interrompere la riproduzione (#1976). - SubRip: è stato aggiunto il supporto per l'inserimento di un
CharsetDetectorinDefaultSubtitleParserFactoryper rilevare la codifica dei caratteri dei sottotitoli SubRip autonomi senza un indicatore dell'ordine dei byte (#2247).
- Aggiungi
- Effetto:
- Implementa
SoundSeparationAudioProcessorper la separazione delle sorgenti audio utilizzando il modulo GMSCore StudioSound.
- Implementa
- Muxer:
- Correzione della scrittura della casella
dOpsper Opus inMp4MuxereFragmentedMp4Muxer, dovePreSkip,InputSampleRateeOutputGainerano scritti in little-endian anziché in big-endian (#3431). - Supporto per la scrittura dell'altitudine GPS in
Mp4LocationDatautilizzandoMp4Muxer. - Aggiungi
Muxer.Factory.create(ParcelFileDescriptor)per consentire il muxing direttamente in unParcelFileDescriptor. - Scrivi la casella
tfdt(Track Fragment Base Media Decode Time) per impostazione predefinita nelle caselletrafdei file MP4 frammentati per fornire i timestamp di decodifica dei contenuti multimediali. - Supporto della scrittura di box container E-AC-3 ed E-AC-3 JOC (Dolby Atmos)
dec3inMp4Muxer. - Aggiungi il supporto del formato WebM a
MediaMuxerCompat. - Scrivi la casella
mfra(Movie Fragment Random Access) alla fine dei file MP4 frammentati per consentire la ricerca inFragmentedMp4ExtractorutilizzandoFLAG_READ_MFRA_FOR_SEEK_MAP. - Correzione di un arresto anomalo in
Mp4WritereFragmentedMp4Writerdurante la scrittura di un campione EOS prima della scrittura di altri campioni. - Risolto il problema di conformità del container durante il muxing di contenuti Dolby in file MP4 o MP4 frammentati pubblicizzando il brand compatibile con
dby1nell'intestazione del container (#3369). - Supporto delle tracce audio PCM con rappresentazione in virgola mobile a 32 bit in
Mp4MuxereFragmentedMp4Muxer(#3389). - Rifiuta i profili Dolby Vision non supportati in
Mp4MuxereFragmentedMp4Muxerquando aggiungi tracce. - Supporto delle tracce audio PCM con numeri interi a 24 e 32 bit in
Mp4MuxereFragmentedMp4Muxer.
- Correzione della scrittura della casella
- Estensione IMA:
- Inoltra gli eventi di pausa e ripresa del player all'SDK IMA in
ImaServerSideAdInsertionMediaSource.
- Inoltra gli eventi di pausa e ripresa del player all'SDK IMA in
- Sessione:
- Aggiungi
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIeMediaConstants.EXTRAS_KEY_CATEGORIESper compilare i metadati della playlist e degli elementi dai metadati e dalle descrizioni legacy, nonchéMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEeMediaConstants.EXTRAS_KEY_TTL_SECONDSper i suggerimentiLibraryParams.extras. - Risolto l'arresto anomalo di
SecurityExceptiondurante la creazione o il rilascio di unMediaSessionsui dispositivi che applicano limitiPendingIntentrigorosi. - Risolto il problema per cui
MediaSession.getControllerForCurrentRequest()restituivanulldurante le richieste di riproduzione su Android 12 (API 31 e 32) quandoMediaSessionServicenon era ancora in primo piano. - Risolto un arresto anomalo di
IllegalArgumentExceptionquando unMediaControllersi connette a una sessione legacy che segnala un volume massimo negativo. - Risolto un problema per cui la chiamata di
MediaController.setMediaItemosetMediaItemsseguita daplay()su unMediaSessionCompatlegacy in pausa poteva inviare un callbackonPrepareFrom*non supportato anzichéonPlayFrom*o inviareonPlay()senza reinizializzare l'elemento multimediale richiesto. - Risolto il problema di
NullPointerExceptionnella versione precedente diMediaBrowserquando si riceve una risposta a un comando personalizzato (#3432). - Correzione dell'arresto anomalo di
IllegalArgumentExceptiondurante la ricezione di metadati legacy con chiavi duplicate nelBundlesottostante. - Unifica le chiamate
MediaControllerCompat.TransportControlsin uscita effettuate all'interno della stessa iterazioneLooperquando controlli unMediaSessionCompatlegacy (ad esempio, la chiamata disetMediaItem,prepareeplayinsieme ora invia un singolo callbackonPlayFrom*).
- Aggiungi
- UI:
- Risolto il problema relativo alla posizione della punteggiatura dei sottotitoli RTL e alla conservazione dell'intervallo di span quando è attivato il testo a capo bidirezionale (#3454, #3455).
- Aggiungi le classi
TrackSelectionStateeTrackSelectionParametersStatee le relative funzioni di memorizzazione dello stato componibile al modulomedia3-ui-compose. - Introduci
PresentationState.videoAspectRatioe fai in modo cheModifier.resizeWithContentScaleaccettiaspectRatio: Float?anzichésourceSizeDp: Size?. - Aggiungi la classe
CuesStatee il componibilerememberCuesStateal modulomedia3-ui-composeper ascoltare i cue correnti del player. - Aggiungi il supporto della modalità di scrubbing a
ProgressSliderse si basa suExoPlayeroCompositionPlayer. - Aggiungi il supporto di
showArtworkaPresentationStatee utilizzalo per misurare il tempo di rendering delartworkcomponibile facoltativo fornito inContentFrameePlayer. Aggiungi il componibileArtworkda utilizzare come valore predefinito per lo slotartwork. - Aggiungi nuovi campi a
PlayPauseButtonState(showBuffering,showRetry,showReplay) e utilizzali inPlayPauseButtonper visualizzare più icone e un indicatore di buffering. - Aggiungi la classe
PlaybackStateper consentire l'osservazione dello stato di riproduzione personalizzato e introduciBufferingIndicatorcome componente indipendente dal pulsante. - Risolto un problema per cui
PlayerViewePlayerControlViewmostravano indicatori di annunci ai confini dei periodi per i segnaposto post-roll in tempo reale nei live streaming multi-periodo. - Gli slot componibili di
Player,ContentFrame,PlayerDefaultseMiniControllernon ricevono più il player o la visibilità dei controlli come parametri. Acquisiscili invece dall'ambito di chiamata (ad esempio,topControlsora è@Composable BoxScope.() -> Unit). Si tratta di una modifica che provoca un errore su un'API instabile. - Aggiungi il parametro
alignmentaContentFrame,PlayereModifier.resizeWithContentScaleper posizionare i contenuti scalati all'interno del relativo contenitore e ritaglia i contenuti diContentFramein base ai relativi limiti, in modo che il video scalato conContentScale.Cropnon venga più disegnato al di fuori. - Aggiungi il supporto della UI del live streaming a
ProgressSlider,ProgressStateWithTickCounteProgressStateWithTickIntervalesponendoisLiveeliveOffsetMs. Aggiungi il componibileLiveButtonamedia3-ui-compose-material3(#2213).
- Estensione Ktor:
- Risolto un problema per cui
KtorDataSourcepoteva trattare gli errori di connessione a metà stream come fine dell'input anziché generare unHttpDataSourceException(#3460).
- Risolto un problema per cui
- Estensione HLS:
- Analizza
VIDEO-RANGE(PQeHLG) suEXT-X-STREAM-INFeEXT-X-I-FRAME-STREAM-INFinFormat.colorInfo(#3441). - Risolto il problema relativo a
NullPointerExceptiondurante l'analisi dei segmenti di inizializzazioneEXT-X-MAPMPEG-TS che contengono campioni multimediali PES (#3456). - Risolto un problema di regressione per cui
Format.ideFormat.metadataeranonullper le tracce HLS esposte (#3402). - Ritaglia gli annunci dell'elenco di asset in base a
X-PLAYOUT-LIMITe salta quelli che superano completamente il limite. Inoltre, imposta l'offset di ripresa dei contenuti su 0 quando un interstitial ometteX-RESUME-OFFSETe la sua durata è sconosciuta anche seX-PLAYOUT-LIMITè impostato. - Risolto un problema per cui la risoluzione di un interstitial
X-ASSET-LISTsovrascriveva i contributi di offset di ripresa dei contenuti di altri interstitial nello stesso gruppo di annunci.
- Analizza
- Estensione DASH:
- Supporto dell'analisi degli eventi di inserimento (
urn:mpeg:dash:event:alternativeMPD:insert:2025) e sostituzione (urn:mpeg:dash:event:alternativeMPD:replace:2025) di MPD alternativi inDashManifestParsere della loro esposizione come istanzeAlternativeMpdEventinPeriod.alternativeMpdEvents. Si tratta di una modifica che provoca un errore per le app che utilizzano la sottoclasseDashManifestParser:DashManifestParser.buildPeriodora accetta un parametroList<AlternativeMpdEvent>aggiuntivo e l'overload precedente è stato rimosso. Le app che eseguono l'override diDashManifestParser.parseEventStream(XmlPullParser)devono eseguire l'override diDashManifestParser.parseEventStream(XmlPullParser, String), poiché il primo è deprecato e verrà reso privato in una release futura. - Analizza le informazioni sul colore CICP (
ColourPrimaries,TransferCharacteristics,MatrixCoefficientseVideoFullRangeFlag) dai descrittoriEssentialPropertyeSupplementalPropertyinFormat.colorInfo(#3426). - Supporto di elenchi separati da spazi vuoti di valori
@idnegli attributi@valuedel descrittore della modalità di riproduzione (http://dashif.org/guidelines/trickmode) (#3315). - Supporto dell'analisi di
<ProducerReferenceTime>inDashManifestParser, esposizione inAdaptationSet.producerReferenceTimese utilizzo per compilareTimeline.Window.presentationStartTimeMseTimeline.Window.windowStartTimeMsper gli stream VOD. - Aggiunto il supporto per DASH Content Steering (#1689).
- Risolto un problema di
NullPointerExceptionche poteva verificarsi durante l'analisi di un manifest DASH con un attributo mancante nell'elemento<UTCTiming>(#3436).
- Supporto dell'analisi degli eventi di inserimento (
- Estensione RTSP:
- Risolto un arresto anomalo di
IllegalStateExceptionche si verificava durante l'elaborazione di risposte di rete ritardate dopo la chiusura del client RTSP. - Risolto un problema per cui lo scrubbing rapido poteva attivare in modo errato il meccanismo di fallback del protocollo TCP.
- È stato corretto un arresto anomalo di
IllegalStateExceptionche può verificarsi durante l'elaborazione di risposte di rete ritardate dopo che il client RTSP reimposta lo stato durante la riselezione della traccia, l'interruzione della sessione o il reindirizzamento dell'URI. - Risolto il problema per cui la ricerca di nuovo prima del riavvio della riproduzione poteva causare un arresto anomalo di
IllegalStateException. - Risolto il problema per cui la ricerca indietro mentre una ricerca è già in attesa poteva causare l'interruzione dell'audio e il blocco della riproduzione video.
- Risolto un problema per cui le unità di accesso ai keyframe H.264 e H.265 che terminavano con un pacchetto di aggregazione o non IDR non venivano contrassegnate come keyframe, causando il blocco della riproduzione in buffering (#3434).
- Risolto un arresto anomalo di
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Estensione Opus: è stato corretto l'arresto anomalo di JNI durante la decodifica di dati Opus non validi.
- Estensione Opus: è stato corretto l'errore per cui il padding di scarto veniva ignorato quando il pre-skip e il padding di scarto si trovavano nello stesso pacchetto (#2576).
- Estensione Cast:
- Introduci
SessionAvailabilityListener.SessionUnavailableReasonper rappresentare il motivo della non disponibilità della sessione e fornisci un metodo sovraccaricato perSessionAvailabilityListener.onCastSessionUnavailableper esporlo. - Risolto un problema per cui la riproduzione riprendeva inaspettatamente in locale dopo l'interruzione di una sessione di trasmissione.
- Registra un errore quando le operazioni di
RemoteMediaClient(come riproduzione, pausa, modifica della velocità, modalità repeat, volume, disattivazione dell'audio o selezione della traccia) non vanno a buon fine inRemoteCastPlayer(#3373). - Correzione di
ArrayIndexOutOfBoundsExceptioninRemoteCastPlayerquando la coda del ricevitore Cast cambia o si riduce mentre è in attesa un'operazione di ricerca (#3372). - Risolto un problema relativo al ricevitore Cast predefinito per cui la sequenza temporale compilava solo gli elementi multimediali immediatamente adiacenti all'elemento attivo anziché l'intera playlist (#3129).
- Aggiorna immediatamente la cronologia e la posizione di riproduzione quando modifichi la playlist (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) o quando cerchi inRemoteCastPlayere metti in coda le operazioni successive della playlist in modo che vengano eseguite in modo affidabile in ordine (#2639, #3272). - Risolto un problema per cui la chiamata di
addMediaItemssu una coda vuota inRemoteCastPlayernon riusciva a caricare gli elementi multimediali sul ricevitore Cast (#2402). - Risolto un problema in
RemoteCastPlayerper cui, quando si raggiungeva la fine della coda del ricevitore Cast, la cronologia veniva cancellata anziché conservare la playlist. - È stato risolto un problema per cui
playWhenReady,repeatModeeplaybackParametersnon venivano trasferiti o applicati se impostati suRemoteCastPlayerprima di caricare gli elementi multimediali (ad esempio, durante il trasferimento della riproduzione da locale a remoto inCastPlayer) (#889).
- Introduci
- App demo:
- Aggiungi il supporto per gli elementi multimediali protetti da DRM e uno stream di esempio HLS aggiuntivo al catalogo dell'app demo della sessione.
- Configura
RemoteCastPlayercon unCastTrackSelectornell'app demo della sessione per attivare la selezione dei sottotitoli e della traccia audio durante la trasmissione.
- Rimuovi i simboli deprecati:
- Rimuovi
DashUtil.buildDataSpec(Representation, RangedUri, int)eDashUtil.buildDataSpec(Representation, String, RangedUri, int). Usa inveceDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
- Rimuovi
- Build:
- Aumenta Gradle
minSdka 24.
- Aumenta Gradle
Versione 1.11.0
1.11.1
10 settembre 2026
- ExoPlayer:
- Sposta il flag per attivare/disattivare i metadati HAGC per i contenuti multimediali progressivi da
MediaSource.FactoryaExtractorsFactory. Il metodosetExperimentalEnableHagcPlaybackprecedente viene rimosso e sostituito daExtractorsFactory.setParseHagcMetadata. In questo modo viene risolto anche un problema per cui la disattivazione non funzionava per i container Matroska/WebM. - È stato corretto un blocco della riproduzione causato dal pre-riscaldamento di un renderer secondario non in transizione.
- Risolto il problema di pre-riscaldamento per cui
Surfacedeve essere restituito al renderer principale quando una ricerca reimposta e disattiva entrambi i renderer. - Risolto il problema
ArrayIndexOutOfBoundsExceptionper cui l'aggiornamento della cronologia live sposta la posizione predefinita oltre un annuncio inserito lato server attualmente in riproduzione (#3348). - Risolto un problema della modalità di scorrimento per cui i frame video obsoleti potevano essere visualizzati brevemente durante la ricerca con
ScrubbingModeParameters.allowSkippingMediaCodecFlushattivato.
- Sposta il flag per attivare/disattivare i metadati HAGC per i contenuti multimediali progressivi da
- Estrattori:
- Matroska: è stato risolto il problema per cui le tracce posizionate dopo i cluster non generavano una sequenza temporale ricercabile (#3377).
- Audio:
- È stato corretto il calcolo della dimensione del buffer in
SilenceSkippingAudioProcessorin modo che la durata minima del silenzio non venga ridotta in modo errato dalla dimensione del frame (#3271). - Risolto il problema di gestione del PCM a 8 bit in
PcmAudioUtilper trattare i campioni come non firmati, come definito da Android (#3271). - Risolto il problema di offload per cui la riproduzione poteva bloccarsi durante il pre-roll o le transizioni senza interruzioni a causa delle dimensioni limitate del buffer hardware.
- È stato corretto un bug in
DefaultAudioSinkper cui il conteggio delle release non diminuisce quando il thread di riproduzione non è più attivo (#3338).
- È stato corretto il calcolo della dimensione del buffer in
- Sessione:
- Risolto il problema relativo a
NullPointerExceptionquando unMediaControllerin corso viene rilasciato da un callbackPlayer.Listener(#3375). - È stato corretto il deadlock sul thread principale quando un
MediaBrowserlegacy si connette a un servizio che restituisce un risultato asincrono daonGetLibraryRoot()oonConnectAsync()(#3393).
- Risolto il problema relativo a
- Estensione HLS:
- Estensione DASH:
- Correzione del calcolo errato del timestamp di esempio per le tracce di immagini con un
presentationTimeOffset(#3334).
- Correzione del calcolo errato del timestamp di esempio per le tracce di immagini con un
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Opus: è stato corretto un problema di danneggiamento della memoria quando più istanze
OpusDecodervengono inizializzate contemporaneamente. - MPEG-H: correzione della perdita di memoria, del troncamento dei caratteri non ASCII e del potenziale arresto anomalo nativo in condizioni di memoria insufficiente durante l'invio di comandi a
MpeghUiManager(#3365).
- Opus: è stato corretto un problema di danneggiamento della memoria quando più istanze
Versione 1.11.0
5 agosto 2026
- Libreria comune:
- Aggiungi
Format.channelMaskper rappresentare esplicitamente la maschera del canale audio e un nuovo sovraccaricoUtil.getAudioTrackChannelConfig(Format)per risolverlo in sicurezza. - Esegui l'upgrade di Kotlin dalla versione 2.0.20 alla versione 2.2.0.
- Aggiungi
- ExoPlayer:
- Risolto un bug di concorrenza dipendente dalla tempistica che poteva causare un errore
IllegalStateExceptionoIndexOutOfBoundsExceptionin ExoPlayer. - Allenta i controlli del numero di gruppi di annunci in
AdsMediaSourceper consentire la diminuzione del numero di gruppi di annunci quando un gruppo di annunci viene elaborato completamente (hasUnplayedAds()èfalse), adattando il ridimensionamento dei gruppi di annunci dinamici durante i workflow di reimpostazione. - Aggiungi
getFlags()eFLAG_STRICT_DURATIONaSampleStreamper consentire agli stream di segnalare i flag e aggiorna i renderer per controllare questi flag in modo dinamico. - Utilizza lo strumento di stima della frequenza fotogrammi in
MediaCodecVideoRenderere il formato di output del codec inMediaCodecAudioRendererper calcolare la frequenza operativa del codec quando i formati dello stream non forniscono un valore valido ed evita reimpostazioni del codec non necessarie. - Rimuovi il ritaglio dei contenuti per gli annunci inseriti lato client nel player principale. Invece,
AdsMediaSourcesi occupa della logica di ritaglio. Le origini annuncio personalizzate inserite lato client devono essere aggiornate per implementare il ritaglio dei contenuti internamente. - Contrassegna le tracce con un profilo o un livello di codec ben formato, ma non riconosciuto, come
supported=NO_EXCEEDS_CAPABILITIESanzichésupported=YES(che è il modo in cui vengono contrassegnate le tracce con informazioni sul profilo o sul livello mancanti o non valide). In questo modo, queste tracce (che difficilmente saranno supportate dal dispositivo) non vengono selezionate quando sono disponibili alternative meglio supportate. - Aggiungi
DefaultPreloadManager.SimpleRankingDataComparator, che è unRankingDataComparatorche confronta i ranking degli elementi multimediali in base alle loro distanze dall'indice dell'elemento multimediale attualmente in riproduzione. Le app possono eseguire l'override del metodocompare(Integer, Integer)se è necessaria una logica di confronto più precisa. L'oggettoSimpleRankingDataComparatorpersonalizzato può essere inserito tramite un nuovo costruttore diDefaultPreloadManager.Builder. - Riduci il rischio di OOM di
DefaultLoadControl.prioritizeTimeOverSizeThresholdsricorrendo ai limiti di dimensione dei byte del buffer se la memoria heap disponibile sembra limitata. - Allinea la gestione delle immagini fisse quando
MediaItem.imageDurationUsnon è impostato: le immagini fisse JPEG e HEIC ora vengono "riprodotte" con una durata predefinita molto breve (lo stesso comportamento che avevano in precedenza le immagini PNG e altre immagini). - Aggiungi
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)per collegareBandwidthMeteraMediaSource. Tuttavia, il metodo deprecato con l'implementazione personalizzata verrà comunque chiamato per impostazione predefinita. Ti consigliamo di implementare il nuovo metodo e di utilizzareBandwidthMeter.getTransferListener()per ottenere la parità con il metodo precedente. - In
DefaultBandwidthMeter, aggiungi il supporto per unInitialBitrateSupplierpersonalizzato. In questo modo, le app possono fornire la propria logica per determinare la stima iniziale della velocità in bit, che verrà utilizzata al momento della creazione diDefaultBandwidthMetere in caso di modifiche al tipo di rete. Il fornitore può essere impostato tramiteDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - Attiva la pianificazione dinamica per impostazione predefinita. Il loop di lavoro della riproduzione di
ExoPlayerverrà eseguito in modo dinamico anziché a intervalli statici. - Rimosso un reset non necessario che può verificarsi quando si uniscono tracce con campioni di pre-roll alla riproduzione attiva.
- In
DefaultBandwidthMeter, ottimizzagetInitialBitrateCountryGroupAssignmentper restituire le assegnazioni dei gruppi di paesi raggruppate in un numero intero a 32 bit anziché in un array, riducendo le dimensioni del codice ed evitando le allocazioni. - Risolti gli errori di inizializzazione di
AudioTracksu alcuni dispositivi assicurando che la logica di nuovo tentativo provi sempre una dimensione del buffer di almeno 1 secondo se altri nuovi tentativi (dimezzando la dimensione del buffer) non vanno a buon fine (#3207). - È stato risolto il problema del codec su alcuni dispositivi in cui il codec assorbiva tutti i campioni se era stato precedentemente svuotato prima di ricevere i buffer di input.
- Aggiungi
ExoPlayer.Builder.enablePerStreamMediaProgression()sperimentale per consentire l'avanzamento dell'elaborazione dei contenuti multimediali in base allo stream. In questo modo, si riduce la latenza di avvio tra gli elementi della playlist e si evita che la riproduzione si "blocchi" con contenuti molto brevi (#3122). - Risolto un problema di race condition relativo all'utilizzo dell'ID sessione audio, in cui veniva utilizzato l'ID sessione audio iniziale generato automaticamente da
ExoPlayeranziché il valore impostato dasetAudioSessionId(#3241). - Aggiunto il supporto sperimentale per la riproduzione di metadati temporizzati HAGC (ST 2094-50) per i contenuti multimediali progressivi (ad es. MP4, Matroska). Il player unisce automaticamente
le tracce dei metadati HAGC con la traccia video associata e fornisce i
metadati fuori banda al decoder sui dispositivi con API 37 e versioni successive. Questo comportamento
può essere disattivato tramite
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - Aggiunta di
Format.selectionPriorityche rappresenta la preferenza relativa diFormatnella selezione della traccia (#3236). - Risolto un potenziale problema della modalità di scrubbing per cui lo scrubbing poteva bloccarsi quando si cercava la "fine dello stream".
- Risolto un bug di concorrenza dipendente dalla tempistica che poteva causare un errore
- CompositionPlayer:
- Risolto un problema per cui le istanze
TrackSelectornon venivano rilasciate.
- Risolto un problema per cui le istanze
- Transformer:
- Risolto un problema per cui
ExportResult.fileSizeBytespotrebbe essere registrato in eccesso.
- Risolto un problema per cui
- Selezione della traccia:
- Esponi
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORe aggiungiAdaptiveTrackSelection.Factory.setTrackFormatComparatorper consentire l'ordinamento dei formati personalizzati e la priorità di selezione ABR oltre all'ordinamento solo per bitrate. - Risolto un problema di concorrenza dipendente dalla tempistica per cui gli aggiornamenti sequenziali rapidi ai parametri di selezione delle tracce potevano comportare la perdita o la sovrascrittura di alcuni aggiornamenti.
- Esponi
- Estrattori:
- MP4, MP3 e FLAC: aggiunta di
FLAG_DISABLE_ARTWORK_METADATAper consentire lo scarto delle immagini allegate e dei metadati della copertina durante l'analisi del container per ridurre il consumo di memoria di runtime (#2077). Questa opzione può anche essere attivata centralmente tramiteDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4: è stato aggiunto il supporto per l'estrazione delle tracce di metadati temporizzati ITU-T T.35 (
it35). - MP4: aggiunta del supporto per l'estrazione dei metadati dei capitoli (formati Nero e QuickTime). Se sono presenti entrambi, i capitoli QuickTime hanno la priorità. Le informazioni sui capitoli estratte vengono esposte come voci
Chapterall'interno diMetadatadella traccia, consentendo la navigazione nativa dei capitoli nei file MP4, M4A e M4B (come audiolibri e podcast) (#2803). - WAV, Matroska e MP4: è stato aggiunto il supporto per l'audio PCM in virgola mobile a 64 bit (#3090).
- Matroska: utilizza i metadati del bitstream del codec per compilare un
ColorInfoaccurato. - MP4: aggiunto il supporto per la ricerca nei file MP4 frammentati utilizzando la casella
mfraquando non è presente una casellasidx. Per attivare questa funzionalità, fornisciFLAG_READ_MFRA_FOR_SEEK_MAPaFragmentedMp4Extractor, operazione che ora viene eseguita per impostazione predefinita inDefaultExtractorsFactory(#3088). - Ignora i dati
av1Ccon versione non supportata. - MP4: aggiunto il supporto per PCM in rappresentazione in virgola mobile big-endian nelle caselle
fpcm. - Matroska: analizza le informazioni sui capitoli in
Chaptervoci nelMetadatadi una traccia. - MPEG-TS: miglioramento dell'estrazione degli stream DTS-HD e DTS Express combinando il flusso secondario Core ed Extension in un unico campione, risolvendo i problemi di riproduzione in cui i due venivano precedentemente generati come campioni separati (#3147).
- MP4: impedisci loop infiniti e letture fuori dai limiti durante l'analisi di elementi di tag dei metadati
ilstvuoti (#3191). - MPEG-TS: assicurati che l'ultimo frame venga visualizzato per gli stream in cui l'ultimo pacchetto PES ha una lunghezza nota (#3206).
- MP3: correzione del reporting della velocità in bit per i file con intestazione Xing e VBRI.
- Matroska: gestisci le tracce definite nell'ultimo cluster (#3250).
- Matroska: aggiunto il supporto di ALAC (#3268).
- MP4: consenti box
sgpddi lunghezza variabile nei file MP4 frammentati (#3243). - AVI: è stato risolto un problema per cui la riproduzione di file senza flag di keyframe sulle tracce audio causava la perdita dell'audio e
OutOfMemoryError. - MP3: utilizza le durate senza pause dalle intestazioni Xing/Info (#3183).
- MP3: modifica i metadati di spaziatura interna e ritardo del codificatore LAME/Xing in modo che corrispondano al trimming PCM decodificato (#3200).
- MP4, MP3 e FLAC: aggiunta di
- Audio:
- Aggiunto un periodo di tolleranza di 100 ms nei renderer audio di ExoPlayer durante la transizione dallo stato pronto a quello non pronto, per eliminare i rimbalzi dei sottolivelli transitori ed evitare stati di buffering imprevisti durante la riproduzione attiva (#3210).
- Modifica la logica predefinita della dimensione del buffer PCM in
DefaultAudioTrackBufferSizeProviderper utilizzare un buffer fisso di 500 ms per renderlo meno dipendente dal dispositivo. - Aggiorna
MediaCodecAudioRendererper estrarre la maschera di canale spaziale dal decoder della piattaforma, consentendo aDefaultAudioSinkdi utilizzare questa maschera esplicita anziché dedurne una dal conteggio dei canali. - Converti i parametri di
AudioSink.configurein classe di dati. Gli override personalizzati diForwardingAudioSink.configuredevono essere migrati alla nuova firma del metodo. - Aggiungi il supporto per mantenere l'intonazione durante l'estensione temporale di uno stream audio con
EditedMediaItem.Builder#setSpeed(SpeedParameters). - Migliora
ToFloatPcmAudioProcessorper supportare la conversione di PCM a 8 bit, PCM big-endian a 16 bit e PCM con rappresentazione in virgola mobile a 64 bit in PCM con rappresentazione in virgola mobile a 32 bit (#3090). - Modifica il valore restituito di
DecoderAudioRenderer.getChannelMappinginImmutableIntArray. - Risolto un bug per cui la riproduzione si blocca durante la riproduzione di una playlist di audio senza pause in modalità di offload compresso.
- Inoltra
Timelinee l'UID del periodo aAudioSink.configureeAudioProcessor.StreamMetadataper fornire il contesto della playlist ai processori audio (#418). - Imposta il valore corretto di
AudioProcessor.StreamMetadata.positionOffsetUsper consentire l'elaborazione audio basata sul tempo (#418). - Aggiungi il supporto per PCM in virgola mobile big endian a 32 e 64 bit.
- Rimosso il percorso di fallback da EAC3-JOC a EAC3 per la riproduzione su dispositivi Google Pixel, poiché i loro decoder EAC3 standard non possono decodificare gli stream EAC3-JOC (#3257).
- Video:
- Correggi la logica di unione dei video per conteggiare i buffer eliminati durante l'unione come saltati anziché eliminati.
- Correzione della decisione di rendering immediato durante l'impostazione di una nuova superficie per evitare cali di frame sui dispositivi che non supportano le superfici segnaposto.
- Correggi la stima della frequenza fotogrammi in
MediaCodecVideoRendererper renderla più accurata tenendo conto dei fotogrammi ignorati o saltati. - Consenti la configurazione della soglia utilizzata per pianificare i frame in anticipo. Il valore predefinito è 50 ms, ma puoi personalizzarlo tramite
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - Risolto un bug in
VideoFrameReleaseHelperper cui le modifiche alla visualizzazione potevano attivare callbackChoreographerridondanti e attivazioni eccessive della CPU sul thread principale.
- Testo:
- Metadati:
- Aggiungi il campo
MediaMetadata.discSubtitlee analizzalo dai dati ID3v2.4TSSTe VorbisDISCSUBTITLE. - Analizza il numero e il conteggio dei dischi dal frame ID3
TPOS.
- Aggiungi il campo
- Effetto:
- Cancella lo stato di ridisegno in
FinalShaderProgramWrapperdurante lo svuotamento per evitare che il player si blocchi durante la ricerca.
- Cancella lo stato di ridisegno in
- Muxer:
- Aggiungi il supporto per i riferimenti alle tracce (la casella
tref) inMp4Muxertramite una nuova APIaddTrackReference. In questo modo è possibile stabilire relazioni tra le tracce, ad esempio collegare una traccia di metadati alla traccia video che descrive. - Aggiungi
OggMuxerper consentire il muxing degli stream multimedialiOPUSoVORBISnel formato fileogg. - Aggiungi
WavMuxerper la generazione di file WAV (supporta PCM con rappresentazione in virgola mobile e numeri interi). - Aggiungi
setAttemptStreamableOutputEnabledaInAppMp4Muxer.Factoryper consentire la scrittura di file più piccoli non riproducibili in streaming senza spazio riservato. - Aggiungi il supporto per l'audio IAMF in
Mp4MuxereFragmentedMp4Muxer.
- Aggiungi il supporto per i riferimenti alle tracce (la casella
- Estensione IMA:
- Aggiungi
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotper consentire di fornire un'area annuncio da utilizzare per gli annunci durante la pausa. - Risolto il bug per cui gli annunci VAST ignorabili consecutivi mostrano il pulsante Salta immediatamente sul secondo annuncio (#3165).
- Aggiungi
- Sessione:
- Risolvi i potenziali deadlock e gli arresti anomali di
IllegalStateExceptionall'interno diMediaNotificationManagerquando utilizzi una sessione con un looper del player del thread in background. - Applica requisiti di threading più rigorosi per i metodi
MediaSession. I metodi void ora pubblicano automaticamente l'esecuzione nel thread del looper dell'applicazione e gli accessor di stato (getter) generano esplicitamente un'eccezioneIllegalStateExceptionse vengono chiamati da un thread diverso dal looper dell'applicazione. - Risolto un arresto anomalo dell'unione della cronologia fuori dai limiti (
IllegalStateExceptioninMediaUtils.mergePlayerInfo) monitorando la coerenza dello stato per controller sul lato della sessione. - Aggiungi
androidx.media3.session.MediaSessionManagerper fornire il supporto per l'esecuzione di query sulle sessioni multimediali attive e la restituzione di istanze Media3SessionToken. - Modifica il comportamento predefinito di
MediaSession.Callback.onConnectse il metodo non viene sottoposto a override per fornire l'accesso in sola lettura ai controller non attendibili. - Aggiungi il supporto per eseguire l'override del nome del pacchetto durante la creazione di
MediaSessiontramite una nuova APIMediaSession.Builder#setPackageNameOverride. Il chiamante deve disporre dell'autorizzazioneandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERper eseguire l'override del nome del pacchetto della sessione. - Aggiungi
MediaSession.Callback.onConnectAsync(). Il nuovo metodo consente di elaborare in modo asincrono il tentativo di connessione di un controller. Le app possono restituire unFutureimmediato conFutures.immediateFuture(ConnectionResult)per ottenere il comportamento precedente. Ti consigliamo di eseguire la migrazione al nuovo metodo perchéCallback.onConnectè un candidato per il ritiro. - Risolto il problema per cui la navigazione Bluetooth AVRCP non riconosceva
MediaLibraryServicesulle API 36 e 37. - Risolto il problema del doppio downscaling delle immagini in
MediaSessionquando le dimensioni dell'immagine sono vicine al limite della piattaforma, risolvendo la sfocatura nelle notifiche (#3134). - Risolto l'arresto anomalo di
ForegroundServiceStartNotAllowedExceptioninMediaNotificationManagerquando un callback di caricamento bitmap asincrono dell'artwork tenta di avviare il servizio in primo piano mentre l'app è in background (#3270). - Risolto un problema per cui gli oggetti
PositionInforicevuti da unMediaControllernon avevano gli UIDTimelineoriginali. La sessione ora traduce e propaga in modo affidabile questi UID durante gli aggiornamenti dello stato. - Risolto l'arresto anomalo rilevando
ForegroundServiceStartNotAllowedExceptioninMediaSessionService.stopSelfSafely()(#3310). - Risolto il problema del callback
onMediaItemTransition()imprevisto suMediaControllerdurante la ricerca all'interno dello stesso elemento multimediale (#3248).
- Risolvi i potenziali deadlock e gli arresti anomali di
- UI:
- Correzione del rendering del primo frame con dimensioni errate quando
ContentFrameviene ricomposto a metà riproduzione (#3238). - Aggiungi la classe
CurrentMediaItemStatee il composablerememberCurrentMediaItemStatecorrispondente al modulomedia3-ui-compose. Questo contenitore di stato viene utilizzato indemo-composeper visualizzare varie informazioni sui metadati relative aMediaItemattualmente in riproduzione. - Aggiungi la classe
PlaylistStatee il composablerememberPlaylistStatecorrispondente al modulomedia3-ui-compose. Questo contenitore di stato viene utilizzato indemo-composeper visualizzare varie informazioni sui metadati relative alMediaItemsimpostato sul Player. - Aggiungi l'API per l'avanzamento rapido/lo slow motion a
PlaybackSpeedState. Utilizza questa funzionalità indemo-composeper mostrare l'avanzamento veloce con una pressione prolungata. - Aggiungi il componibile
MiniControlleral modulomedia3-ui-compose-material3. Fornisce un affordance compatto per controllarePlayer, visualizzando al contempo il titolo, l'artista, l'artwork e l'avanzamento dell'elemento multimediale corrente. - Aggiungi la classe
ErrorStatee il composablerememberErrorStatecorrispondente al modulomedia3-ui-compose. Aggiungi il componibileErrorTextamedia3-ui-compose-material3e impostalo come overlay predefinito suPlayer. - Pubblica l'oggetto
PlayerDefaultscon i componibili perTopControls,CenterControls,BottomControlseErrorOverlay. - Aggiungi
FocusRequesteral componibilePlayere ai relativi slot di contenuti. - Pubblica
PlayerPool(common-ktx) erememberPooledPlayer(ui-compose) per supportare il precaricamento diMediaItemsin ambienti UI con finestra scorrevole. Mostra questa funzionalità indemo-composecon un nuovoShortFormPlayerScreen. - Corretto il bug di soppressione dell'otturatore in
PlayerViewe ComposePresentationStateche causava arresti anomali nelle cronologie che non supportano la ricerca dell'UID del periodo (#3264).
- Correzione del rendering del primo frame con dimensioni errate quando
- Download:
- Risolvi le variabili HLS nella playlist multimediale quando vengono recuperate per il download (#3258).
- Estensione Ktor:
- Estensione HLS:
- Aggiunto il supporto per HLS Content Steering e Pathway Cloning (#1689).
- Aggiungi
setWithAssetListResetaHlsInterstitialsAdsLoaderper consentire alle app di reimpostare gli interstitial degli elenchi di asset completamente elaborati su uno stato non disponibile per la nuova risoluzione on demand. - Analizza l'attributo
SCOREdiEXT-X-STREAM-INFeEXT-X-I-FRAME-STREAM-INFe inseriscilo inFormat.selectionPriority(#3236). - Risolto un bug per cui gli aggiornamenti pianificati della playlist HLS continuavano anche se la playlist non era più principale o attiva (#3254).
- È stato corretto il calcolo dell'offset di ripresa dei contenuti durante la risoluzione degli elenchi di asset interstitial (#3322).
- Risolto il problema della discontinuità imprevista del timestamp della traccia audio quando si riprende la riproduzione live a bassa latenza dopo un errore di richiesta della playlist (#3311).
- Correzione del bug in
HlsMediaPeriod.getStreamKeys()per cui la traccia ID3 nelle versioni audio viene considerata come sottotitoli (#3333).
- Estensione DASH:
- Separa i sottotitoli codificati CEA in diversi
TrackGroupin base alla lingua (#3113). - Aggiungi il supporto per l'analisi di più elementi
Locationdal manifest (MPD) e l'esecuzione del fallback della posizione inDashMediaSourcequando i caricamenti del manifest non vanno a buon fine. - Risolto un arresto anomalo (
IndexOutOfBoundsException) che si verificava quando venivano aperti manifest con un elemento<SegmentTimeline/>vuoto (#3326).
- Separa i sottotitoli codificati CEA in diversi
- Estensione RTSP:
- Risolti i problemi di interruzione o errore temporanei della riproduzione durante la preparazione della riproduzione RTSP causati da errori di associazione delle porte UDP.
- Estensione Cast:
- Aggiungi una nuova classe
CastParamsper consentire la configurazione di Cast chiamandoCast.initialize(CastParams). - Aggiungi la nuova opzione
CastParams.getShowSystemOutputSwitcherOnCastIconClick(), che attiva l'utilizzo del selettore di output SystemUI anziché del selettore di dispositivi di trasmissione in-app, se disponibile. - Aggiungi
MediaRouteButtonStateerememberMediaRouteButtonStateper supportare l'osservazione dello stato di visibilità del selettore di route multimediali e aggiungi il parametrostateaMediaRouteButton(#3172). - Risolto un bug per cui
RemoteCastPlayerpoteva rimanere bloccato in modo permanente in uno stato di mascheramento della traccia dopo una selezione della traccia, ignorando i successivi aggiornamenti della traccia dal ricevitore Cast (#3237). - Correzione di un bug per cui
DefaultMediaItemConvertergenera unNullPointerExceptionquando tenta di partecipare a una sessione di trasmissione avviata da un mittente non Media3. - Impedisci a
CastPlayerdi trasferireMediaItemsnon riproducibili quando cambi il player attivo (#3199). - Risolto il bug per cui i live streaming non configurati (
liveConfiguration == UNSET) venivano messi in coda comeSTREAM_TYPE_BUFFERED(#3318).
- Aggiungi una nuova classe
- Utilità di test:
- Espandi
DataSourceContractTestper includere il supporto delle richiestePOSTcon intestazioni e corpi, aggiungi alcune risorsePOSTaHttpDataSourceTestEnve aggiungi asserzioni per il metodo, le intestazioni e il corpo HTTP previsti inWebServerDispatcher. - Rafforza le asserzioni in
DataSourceContractTestper le lunghezze restituite daDataSource.open(). Le risorse che potrebbero generareC.LENGTH_UNSETdevono indicarlo utilizzandoTestResource.Builder.setMayResolveToUnknownLength(boolean). - Aggiungi
setPlaybackLooperaTestExoPlayerBuilder.
- Espandi
- Rimuovi i simboli deprecati:
- Rimuovi
androidx.media3.exoplayer.MetadataRetriever. Usa inveceandroidx.media3.inspector.MetadataRetriever. - Rimuovi
androidx.media3.exoplayer.MediaExtractorCompat. Usa inveceandroidx.media3.inspector.MediaExtractorCompat. - Rimuovi
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. UtilizzaHeifExtractorper estrarre i metadati delle foto in movimento dai file HEIC. - Rimuovi
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. Usa inveceandroidx.media3.extractor.metadata.MotionPhotoMetadata. - Rimuovi
androidx.media3.extractor.DummyTrackOutput. Usa inveceandroidx.media3.extractor.DiscardingTrackOutput. - Rimuovi
androidx.media3.extractor.DummyExtractorOutput. Usa inveceandroidx.media3.extractor.NoOpExtractorOutput. - Rimuovi
androidx.media3.common.C.generateAudioSessionIdV21. Usa inveceandroidx.media3.common.util.Util.generateAudioSessionId.
- Rimuovi
- Build
- Aggiornate le istruzioni di
README.mdper l'utilizzo locale di Media3 in modo da utilizzare le build composite di Gradle (includeBuild). Lo scriptcore_settings.gradleè stato rimosso e le proprietàandroidxMediaModulePrefixeandroidxMediaEnableMidiModulenon vengono più utilizzate.
- Aggiornate le istruzioni di
1.11.0-rc01
Utilizza la versione stabile 1.11.0.
1.11.0-beta01
7 luglio 2026
Utilizza la versione stabile 1.11.0.
1.11.0-alpha01
24 giugno 2026
Utilizza la versione stabile 1.11.0.
Versione 1.10.0
1.10.1
12 maggio 2026
- Libreria comune:
- Correzione della gestione di
onAudioSessionIdChangedinSimpleBasePlayereForwardingSimpleBasePlayer.
- Correzione della gestione di
- ExoPlayer:
- Risolto un problema di race condition relativo alla generazione dell'ID sessione audio che poteva causare un
IllegalStateExceptioncon la modalità Tunneling. (#3099). - Risolti i possibili arresti anomali dell'app durante il recupero da errori del decoder con il preriscaldamento del renderer.
- Risolto il problema per cui gli artefatti video erano causati dalla fornitura di dati di inizializzazione quando si utilizzava un codec Dolby Vision basato su AV1 (#3153).
- Risolto un problema di race condition relativo alla generazione dell'ID sessione audio che poteva causare un
- Selezione della traccia:
- Modifica la logica di selezione delle tracce in
VideoTrackInfoper risolvere i tipi MIME di riserva e sposta le preferenze di punteggio HDR e codec nelle preferenze di qualità (#3135).
- Modifica la logica di selezione delle tracce in
- Estrattori:
- MP3: ignora la lunghezza dei dati Xing se è maggiore della lunghezza dello stream nota (#3117).
- Correzione di
ArrayIndexOutOfBoundsExceptioninMp4ExtractorquandoFLAG_OMIT_TRACK_SAMPLE_TABLEè impostato e la traccia non contiene una casella di esempio di sincronizzazione (stss).
- Audio:
- Risolto un bug per cui gli eventi audio potevano essere indirizzati in modo errato se al player venivano aggiunti più renderer audio.
- Video:
- Modifica la logica per il riutilizzo del codec in caso di modifiche della frequenza fotogrammi nell'API precedente alla versione 30 per evitare reimpostazioni del codec quando non sono utili (#3120).
- Disattiva la soluzione alternativa di sincronizzazione forzata in
queueSecureInputBufferper l'API 31 e versioni successive. La soluzione alternativa era un collo di bottiglia artificiale che forzava l'esecuzione della decrittografia in serie, impedendo la distorsione del video a causa di un problema del framework esistente prima dell'API 31.
- Immagine:
- Risolto un problema in modalità di scrubbing per cui gli aggiornamenti delle immagini venivano applicati solo quando l'utente "interrompeva lo scrubbing" (#2815).
- Sessione:
- È stato corretto il bug per cui
ForegroundServiceStartNotAllowedExceptionnon veniva propagato oltre i limiti del thread nel caso in cui il thread dell'applicazione non fosse il thread principale (#2499). - Correzione di un bug per cui
COMMAND_SEEK_TO_MEDIA_ITEMnon è disponibile in unMediaControllerquando ci si connette a una sessione solo per la piattaforma che supporta la ricerca di altri elementi, ma non le modifiche alla playlist. - Risolvi il problema per cui
MediaControllernon può impostare elementi multimediali nelle sessioni multimediali della piattaforma che non consentono azioniPREPARE_FROM. - È stato corretto il bug per cui il proprio processo non veniva contrassegnato con
Controller.isTrusted()su API 27 o versioni precedenti durante la connessione tramite i controller della piattaforma.
- È stato corretto il bug per cui
- Estensione HLS:
- Correzione di un bug per cui viene generata un'eccezione
ArrayIndexOutOfBoundsExceptiondurante il fallback dello stream se la selezione della traccia è un sottoinsieme delle tracce disponibili (#3161). - Risolto un problema per cui il segmento di inizializzazione non veniva trasferito
tra gli aggiornamenti della playlist multimediale se il tag
#EXT-X-MAPnon veniva ripetuto negli aggiornamenti successivi (#3105).
- Correzione di un bug per cui viene generata un'eccezione
- Estensione DASH:
- È stato corretto l'arresto anomalo in
SampleQueuedurante la ricerca in un chunk che è attualmente in fase di annullamento.
- È stato corretto l'arresto anomalo in
1.10.0
26 marzo 2026
- Libreria comune:
- Promuovi
Player.mute()ePlayer.unmute()daUnstableApia stabile. - Promuovi
Format.pcmEncodingeC.PcmEncodingdaUnstableApia stabile. - Aggiungi
Format.primaryTrackGroupIdper identificare il gruppo principale di istanzeFormatincorporate (#294).
- Promuovi
- ExoPlayer:
- Aggiungi funzionalità di ritaglio a
AdsMediaSource. - Aggiungi il supporto per la pianificazione dinamica in
MediaCodecVideoRendererper allineare meglio il lavoro di pianificazione e i cicli di attivazione della CPU al momento in cui i frame video possono essere elaborati. Puoi attivare questa opzione utilizzandoexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()inDefaultRenderersFactory. - Consenti l'impostazione di un
DataSource.Factorypersonalizzato inDefaultPreloadManager.Builder. - Consenti il mocking di
ExoPlayersenza Robolectric spostando alcune costanti predefinite inExoPlayer.Builder. In genere, il mocking di questa interfaccia complessa non è consigliato, se non quando l'utilizzo è minimo/semplice/incidentale (#2985).- Ciò ha richiesto lo spostamento di
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSdaExoPlayeraExoPlayer.Builder(senza ritiro).
- Ciò ha richiesto lo spostamento di
- È stato corretto un bug per cui
ProgressiveMediaSourcepropaga informazioni della sequenza temporale obsolete al player e i periodi in coda vengono rimossi inaspettatamente (#3016). - Risolto il problema per cui ExoPlayer non richiedeva la priorità audio ritardata quando la riproduzione veniva richiesta durante le chiamate.
- Risolto un bug per cui le transizioni da contenuti on demand a contenuti live possono causare un nuovo buffering alla fine dei contenuti on demand (#3052).
- Aggiunto il supporto per Dolby Vision Profile 10 (#2830).
- Risolto il bug per cui un annuncio pre-roll non inizializzato generava un errore
ArrayIndexOutOfBoundsException(#3125).
- Aggiungi funzionalità di ritaglio a
- CompositionPlayer:
- Aggiungi il supporto per
EditedMediaItem.removeVideo.
- Aggiungi il supporto per
- Transformer:
EditedMediaItem.Builder.setFrameRate()ora può impostare una frequenza fotogrammi di output massima per i video, il che è particolarmente utile quando si aumenta la velocità dei contenuti multimediali consetSpeed().
- Selezione della traccia:
- Modifica la firma di
DefaultTrackSelector.selectAllTracksper includere l'array di output come parametro, precompilato con gli override della traccia. - Risolto il problema per cui le tracce di metadati incorporate venivano selezionate indipendentemente dalla selezione della traccia principale corrispondente (#294).
- Stabilizza le opzioni
TrackSelectionParametersperpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelseselectTextByDefault.
- Modifica la firma di
- Estrattori:
- MP4: supporto di file con box
uuiddi grandi dimensioni prima di altri box comemoov(#3046). - MP4: è stato aggiunto il supporto per le tracce VVC (Versatile Video Coding) nei contenitori MP4.
- MP4: supporto di file con box
- Inspector:
- Modifica che provoca un errore: rimozione di
FrameExtractor. Gli utenti ora devono fare affidamento sul nuovo modulo:media3-inspector-framee aggiornare le importazioni inandroidx.media3.inspector.frame.FrameExtractor. - Introduzione di un nuovo modulo per l'estrazione e l'elaborazione dei frame video decodificati.
- Modifica che provoca un errore: rimozione di
- Audio:
- Modifica della libreria di decodifica sottostante per l'estensione del decoder IAMF da
libiamfaiamf_tools. - La decodifica IAMF supporta l'output binaurale tramite il decoder (quando utilizzi l'estensione del decoder IAMF) o tramite il sistema di spazializzazione di Android.
- Rimuovi correttamente il supporto di
AC4Profile22e di altri profili legacy quando valuti il supporto del decoder AC-4 negli scenari di Automotive (#2609). - Miglioramento della logica di ripetizione dell'inizializzazione di
AudioOutputinDefaultAudioSink(#2905). - Tentativo di abbinare il layout di output degli speaker (o dello spazializzatore, se applicabile) durante la decodifica di IAMF, sia con l'estensione IAMF sia con i decoder dei codec multimediali, supportati da nuovi campi e logica in AudioCapabilities e AudioCapabilitiesReceiver.
- Risolto un bug per cui la riproduzione si bloccava durante la riproduzione di una playlist di audio senza pause in modalità di offload compresso.
- Modifica della libreria di decodifica sottostante per l'estensione del decoder IAMF da
- Testo:
- VobSub: utilizza i comandi di controllo SPU
STARTeSTOPper ricavare la durata del cue anziché utilizzare sempre il valore predefinito di 5 secondi (#2935).
- VobSub: utilizza i comandi di controllo SPU
- Metadati:
- Aumenta il numero predefinito di renderer dei metadati a quattro per coprire tutte le potenziali tracce di metadati pubblicate dalle varianti e dalle rappresentazioni HLS (#3043).
- Effetto:
- Spostamento di
LottieOverlayin un nuovo modulo:media3-effect-lottie(che ha comportato anche la ridenominazione daandroidx.media3.effect.LottieOverlayaandroidx.media3.effect.lottie.LottieOverlay).
- Spostamento di
- Effetto Lottie:
- Introduce un nuovo modulo
:media3-effect-lottieche fornisce la funzionalità per applicare gli effetti Lottie ai frame video.
- Introduce un nuovo modulo
- Estensione IMA:
- Aggiorna la versione dell'SDK IMA alla 3.39.0 per accedere all'API Ad Media Info più recente.
- È stato corretto un bug per cui il tipo MIME dell'annuncio non corrispondeva al tipo MIME fornito nell'evento IMA LOADED. La correzione ora mappa il tipo MIME dell'annuncio utilizzando le informazioni sui contenuti multimediali dell'annuncio fornite da IMA.
- Aggiungi
setEnableCustomTabsaImaAdsLoadereImaServerSideAdInsertionMediaSource, consentendo agli utenti di controllare se gli URL di clickthrough degli annunci vengono avviati utilizzando le schede personalizzate. - Aggiungi
ImaAdTagUriBuilder, una classe che offre un modo alternativo per creare unadTagUri. Contiene l'APIsetPreferredLinearOrientation. Si tratta di un'API in fase di alpha test che ti consentirà di impostare l'orientamento preferito per gli annunci lineari. Se vuoi unirti al gruppo di alpha test, contatta il tuo partner dell'account.
- Sessione:
- Risolvi un bug per cui gli array di grandi dimensioni in
MediaMetadata.artworkDatapossono causare l'arresto anomalo dell'app. - Utilizza il tipo int per l'argomento
@Player.Commandnell'interfacciaActionFactory(#2933). - Rendi
MediaSessionServiceeMediaLibraryServiceunLifecycleService, consentendo di collegare operazioni sensibili al ciclo di vita al ciclo di vita del servizio (#187). - Interrompi il supporto dei comandi di modifica del volume del dispositivo da
MediaControllereMediaBrowserper le riproduzioni locali. Le app non devono modificare il volume del dispositivo locale e, se necessario, possono utilizzare le APIAudioManagera questo scopo. - Rileva le istanze
Intentinattive che hanno avviato il servizio come servizio in primo piano. In questo modo, il sistema non genera un erroreForegroundServiceDidNotStartInTimeException. Si tratta di una modifica che provoca un errore su un'API instabile per le app che implementano unMediaNotification.Providerpersonalizzato, poiché è presente un nuovo metodo obbligatorio. - Aggiungi builder per le istanze
PendingIntentda utilizzare con i widget della schermata Home (#2933). - Aggiungi metodi statici per creare istanze
Intentper i widget della schermata Home basati su Compose (#2933). - Risolto un bug per cui la transizione dell'elemento multimediale non veniva segnalata ai controller quando la riproduzione passava da un determinato indice di elemento multimediale a un altro con lo stesso elemento multimediale per motivi di discontinuità "AUTO" e "SEEK" (#2997).
- Risolto il problema per cui la soluzione alternativa per il posizionamento dei pulsanti della UI di sistema influisce negativamente su altre superfici della UI, come Android Auto o i produttori che non necessitano della soluzione alternativa (#3041).
- Risolto il problema per cui l'accesso agli abbonamenti non veniva sincronizzato (#3056).
- Soluzione alternativa per il bug SysUI nell'API 29 in cui l'artwork della sessione multimediale di una determinata dimensione può causare l'arresto anomalo di SysUI e forzare il riavvio del dispositivo (#3118).
- Correzione del ridimensionamento dell'icona della copertina delle notifiche su Android Q (#3084).
- Risolvi un bug per cui gli array di grandi dimensioni in
- UI:
- Aggiungi il componibile
PlaybackSpeedControlamedia3-ui-composeper visualizzare e modificare la velocità di riproduzione. - Aggiungi il componibile
PlaybackSpeedToggleButtonamedia3-ui-compose-material3per controllare la velocità di riproduzione. - Aggiungi il componibile
ProgressSlideramedia3-ui-compose-material3per visualizzare l'avanzamento del player ed eseguire ricerche utilizzando il trascinamento e il tocco (#2288). - Evita un buffer fuori schermo di grandi dimensioni nell'animazione di PlayerControlView.
- Aggiungi il componibile
Playeramedia3-ui-compose-material3, che combina unContentFramecon controlli personalizzabili allineati in alto, al centro e in basso. - Nascondi la posizione di riproduzione dal servizio di accessibilità per impedire l'aggiornamento continuo degli annunci quando
PlayerControlViewè visibile.
- Aggiungi il componibile
- Estensione HLS:
- Supporto di X-PLAYOUT-LIMIT con interstitial HLS (#2484).
- Supporto dell'attributo
QUERYPARAMcon#EXT-X-DEFINE(#1854). - Ottimizza l'analisi delle playlist HLS memorizzando nella cache i matcher delle espressioni regolari (#3008).
- Esposizione della traccia dei metadati ID3 (EMSG) nelle versioni audio (#3043).
- Consenti il fallback della posizione in caso di errori di caricamento, se sono disponibili stream ridondanti da posizioni diverse (#1988).
- Correzione del comportamento di X-SNAP per gli interstitial HLS per calcolare correttamente la posizione di inizio e ripresa (#3013).
- Estensione DASH:
- Estensione RTSP:
- È stata corretta la regressione nello streaming H.264 e H.265 che analizzava in modo errato i campioni della stessa unità di accesso che si estendeva su più pacchetti RTP. Ciò ha causato artefatti visivi e danneggiamento del video (#3121).
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Aggiunto il supporto del gestore UI MPEG-H all'estensione del decoder MPEG-H (#3066).
- Estensione Cast:
- Aggiungi il metodo
RemoteCastPlayer.Builder#setTrackSelectorche consente l'implementazione della selezione della traccia per le riproduzioni di Cast.
- Aggiungi il metodo
- Rimuovi i simboli deprecati:
- Rimuovi
ExperimentalFrameExtractor. Usa inveceandroidx.media3.inspector.frame.FrameExtractor. - Rimuovi
ChannelMixingMatrix.create(). Usa inveceChannelMixingMatrix.createForConstantGain(). - Rimuovi
androidx.media3.extractor.metadata.flac.VorbisComment. Usa inveceandroidx.media3.extractor.metadata.vorbis.VorbisComment. - Rimuovi
MediaSource.prepareSource(MediaSourceCaller, TransferListener). Usa invece il descrittoreMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId).
- Rimuovi
1.10.0-rc03
25 marzo 2026
Utilizza la versione stabile 1.10.0.
1.10.0-rc02
16 marzo 2026
Utilizza la versione stabile 1.10.0.
1.10.0-rc01
10 marzo 2026
Utilizza la versione stabile 1.10.0.
1.10.0-beta01
25 febbraio 2026
Utilizza la versione stabile 1.10.0.
1.10.0-alpha01
6 febbraio 2026
Utilizza la versione stabile 1.10.0.
Versione 1.9.0
1.9.4
16 maggio 2026
La versione 1.9.4 contiene i seguenti commit.
- Effetto:
- Imposta esplicitamente
GL_DRAW_BUFFEReGL_READ_BUFFERquando esegui la transizione da un contesto senza superficie.
- Imposta esplicitamente
1.9.3
16 marzo 2026
La versione 1.9.3 contiene i seguenti commit.
- Audio:
- Risolto un bug per cui la riproduzione si bloccava durante la riproduzione di una playlist di audio senza pause in modalità di offload compresso.
1.9.2
6 febbraio 2026
La versione 1.9.2 contiene i seguenti commit.
- ExoPlayer:
- È stato corretto il bug per cui
ProgressiveMediaSourcepropaga informazioni obsolete sulla cronologia al player e i periodi in coda vengono rimossi inaspettatamente (#3016).
- È stato corretto il bug per cui
- Sessione:
- Risolto il problema per cui la soluzione alternativa per il posizionamento dei pulsanti della UI di sistema influisce negativamente su altre superfici della UI, come Android Auto o i produttori che non necessitano della soluzione alternativa (#3041).
- Estensione Cast:
- Risolto un bug per cui il trasferimento dalla riproduzione con Cast a quella locale non funzionava.
1.9.1
26 gennaio 2026
La versione 1.9.1 contiene questi commit.
- Libreria comune:
- Supporto delle stringhe di data e ora con solo le ore nell'offset del fuso orario (#2929).
- ExoPlayer:
- Consenti alla programmazione dinamica di rallentare l'intervallo
doSomeWorksolo dopo l'avvio dell'audio per supportare una sincronizzazione A/V più fluida all'inizio della riproduzione. - Risolto un bug in
DefaultLoadErrorHandlingPolicyper cui i tipi di eccezioneFileNotFoundExceptione simili venivano ritentati più volte. - Risolto un bug con la pianificazione dinamica in cui il tempo calcolato per la successiva
doSomeWorkveniva erroneamente ridotto del tempo trascorso dell'iterazione corrente didoSomeWork. La risoluzione di questo problema dovrebbe estendere il tempo di inattività della CPU e risparmiare energia. - Risolto un problema per cui alcune riproduzioni di file Dolby Vision non riuscivano quando si tentava di utilizzare un codec AVC o HEVC di riserva.
- Risolto il bug per cui il caricamento continuava dopo la fine della riproduzione quando l'elemento in riproduzione veniva rimosso da una playlist (#2873).
- Evita di perdere istanze
MediaItemquando utilizzi ripetutamenteExoPlayer.replaceMediaItemsullo stesso elemento (#2993). - Evita potenziali ANR causati da rilasci di wakelock di emergenza (#2979).
- Consenti alla programmazione dinamica di rallentare l'intervallo
- Estrattori:
- MP3: analizza i dati ReplayGain di LAME (#2840).
- Audio:
- Rimuovi correttamente il supporto di
AC4Profile22e di altri profili legacy quando valuti il supporto del decoder AC-4 negli scenari di Automotive (#2609).
- Rimuovi correttamente il supporto di
- Video:
- Elimina i codec video sui dispositivi con API precedente alla 30 quando la frequenza fotogrammi dei contenuti cambia per evitare la riproduzione a scatti (#2941).
- Testo:
- VobSub: correzione di alcuni sottotitoli mancanti gestendo correttamente le SPU che contengono una singola sequenza di controllo o che hanno informazioni critiche suddivise in più sequenze di controllo (#2935).
- Estensione IMA:
- Correzione di bug: è stato corretto un problema per cui il tipo MIME dell'annuncio non corrispondeva al tipo MIME fornito nell'evento IMA LOADED. La correzione ora mappa il tipo MIME dell'annuncio utilizzando l'indice del pod di annunci e la posizione dell'annuncio.
- Aggiungi un controllo null prima di accedere al risultato di
getAdsManager()eAdEvent.getAd().
- Sessione:
- Risolto un bug per cui l'interruzione di un
MediaControllerconnesso a una sessione della piattaforma causava l'arresto anomalo dell'app se l'interruzione avveniva durante la riproduzione dell'annuncio (#2948). - Aggiungi ulteriori verifiche alle istanze
Bundlediextrasin varie classi per proteggerti da istanzeBundlecon formato non corretto inviate da altri processi. - Risolto il problema per cui i comandi mancanti per
COMMAND_SEEK_NEXToCOMMAND_SEEK_BACKpossono causare lacune nella notifica dei contenuti multimediali di sistema (#2976). - Spostamento della scalabilità bitmap per l'icona di notifica fuori dal thread principale (#2829).
- È stato corretto un bug per cui autore, scrittore e compositore non venivano utilizzati come opzione di riserva durante la conversione dai campi legacy
MediaMetadataCompateMediaDescriptionCompat(#3018).
- Risolto un bug per cui l'interruzione di un
- Download:
- Risolvi i potenziali loop infiniti quando un
PriorityTooLowExceptionviene gestito daSegmentDownloader(per DASH, HLS e SmoothStreaming). Gli override personalizzati diSegmentDownloaderche utilizzano il metodoexecuteprotetto devono fornire la propria attività racchiusa in unSupplierin modo che possa essere ricreata (#2931).
- Risolvi i potenziali loop infiniti quando un
- Estensione HLS:
- Passa il documento JSON dell'elenco di asset non elaborati al callback
Listener.onAssetListLoadCompleted. Si tratta di una modifica che provoca un errore in un'API instabile che richiede alle app che implementano questo callback di aggiungere un argomento aggiuntivo di tipoJSONObject(#2950).
- Passa il documento JSON dell'elenco di asset non elaborati al callback
- Estensione RTSP:
- Gestione corretta dei pacchetti RTP con timestamp che si ripetono (#2930).
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Risolto un potenziale
NullPointerExceptionche può verificarsi durante la ricerca prima dell'elaborazione del primo frame video (#2965).
- Risolto un potenziale
- Estensione Cast:
- Risolto il bug che impediva l'aggiornamento corretto della sequenza temporale
RemoteCastPlayerdurante la sostituzione della playlist.
- Risolto il bug che impediva l'aggiornamento corretto della sequenza temporale
1.9.0
17 dicembre 2025
- Libreria comune:
- Aggiorna
minSdka23in linea con le altre librerie AndroidX. - Aggiungi
PlayerTransferState, che facilita il trasferimento dello stato di riproduzione tra le istanze diPlayer. - Aggiungi i metodi
void mute()evoid unmute()a Player che conservano e di conseguenza ripristinano il volume di Player prima e dopo averlo impostato su zero. - Pubblica le classi di utilità
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagereStuckPlayerDetectorprecedentemente utilizzate daExoPlayerinternamente per consentire il riutilizzo per altri player (#1893). - Correzione della gestione del listener
ForwardingPlayerquando il player delegato sottostante utilizza l'uguaglianza dei riferimenti per confrontare le istanze del listener (#2675). - Aggiungi una funzione di estensione di sospensione
Player.listenTonella libreriamedia3-common-ktxche specifica ilPlayer.Eventssu cui intervenire. - È stato corretto un arresto anomalo in
BasePlayer.getBufferedPercentagecausato da un overflow di numeri interi quando la posizione con buffer segnalata è molto più grande della durata segnalata (#2750). - Risolto il problema di rilevamento automatico del tipo di traccia
TrackGroupnon ignorando il tipo MIME di esempio personalizzato e tornando a utilizzare il tipo di traccia potenzialmente errato dal tipo MIME del container (#2860).
- Aggiorna
- ExoPlayer:
- Aggiungi un rilevamento del player bloccato che attiva un errore del player
StuckPlayerExceptionse il player sembra bloccato. Questo accade nei seguenti casi, in cui ogni timeout predefinito può essere configurato inExoPlayer.Builder, se necessario:- Dopo 10 minuti di
STATE_BUFFERINGdurante il tentativo di riproduzione e nessun avanzamento del buffering. - Dopo 10 secondi di
STATE_READYdurante il tentativo di riproduzione e nessun avanzamento della riproduzione. - Dopo 1 minuto di
STATE_READYoltre la durata dichiarata senza raggiungere la fine dell'elemento. - Dopo 10 minuti con un motivo di soppressione della riproduzione durante il tentativo di riproduzione.
- Dopo 10 minuti di
- Attiva la gestione del wakelock per impostazione predefinita per risolvere i problemi di buffering durante la riproduzione in background. Equivale a impostare
ExoPlayer.Builder.setWakeModesuC.WAKE_MODE_LOCAL. - Aggiungi la logica di ascolto per aggiornare automaticamente l'ID dispositivo virtuale quando viene segnalata una modifica al
Contextoriginariamente passato aExoPlayer.Builder. - Aggiungi
ExoPlayer.setVirtualDeviceIdper aggiornare manualmente l'ID dispositivo virtuale ottenuto daContextpassato aExoPlayer.Builder. - Assicurati che i renderer non utilizzino i dati dell'elemento successivo della playlist più di 10 secondi prima della fine dell'elemento corrente.
- Aggiungi
setSeekBackIncrementMs,setSeekForwardIncrementMsesetMaxSeekToPreviousPositionMsaExoPlayerper aggiornare queste impostazioni dopo la costruzione (#2736). - Aggiungi la funzionalità di pre-memorizzazione nella cache in
DefaultPreloadManager. Ora le app possono restituireDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)oDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)tramiteTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)per indicare che un elemento multimediale deve essere pre-memorizzato nella cache. - Utilizza la funzionalità di pre-memorizzazione nella cache di
DefaultPreloadManagernell'app demo per i contenuti nel formato breve. - Aggiungi i setter
DefaultLoadControl.Builderper la riproduzione locale e regola i valori predefiniti diDefaultLoadControlin modo che funzionino bene con un'ampia gamma di file locali. - Risolto il bug per cui l'impostazione di una playlist vuota può lasciare il player in
STATE_READYoSTATE_BUFFERING. - Migliorare le API del gestore del precaricamento:
- Aggiungi
addMediaItems(List<MediaItem>, List<T>)eaddMediaSources(List<MediaSource>, List<T>)che aggiungono gli elementi multimediali o le origini multimediali in batch e chiamano automaticamenteinvalidate()in seguito. - Aggiungi
removeMediaItems((List<MediaItem>)eremoveMediaSources(List<MediaSource>)che rimuovono gli elementi multimediali o le origini multimediali in batch e assicurati che il gestore del precaricamento non inizi o continui a precaricare nessuno di questi elementi dopo la rimozione. - Consenti a
DefaultPreloadManager.setCurrentPlayingIndex(int)di invalidarsi automaticamente. Le app non devono più chiamareinvalidate()esplicitamente dopo aver aggiornato l'indice di riproduzione corrente.
- Aggiungi
- Aggiunta della funzionalità per saltare il ripristino dei keyframe per le ricerche in avanti all'interno dello stesso gruppo di immagini in modalità di scrubbing.
- Aggiungi
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)per consentire alle app di impostare un valore di byte del buffer target per un player con ilplayerNamespecificato.DefaultLoadControlora può prendere decisioni per ogni player separatamente in base ai byte allocati e ai byte del buffer target. - Aggiungi
SkipInfoaAdPlaybackState.AdGroupper includere le informazioni relative allo skip per ogni annuncio nel gruppo di annunci. - Risolto un bug per cui la chiamata a
removeMediaItems(List)durante la riproduzione di un post-roll causava un arresto anomalo (#2746). - Risolto un problema di stuttering nella riproduzione delle playlist in cui i frame venivano erroneamente impostati sempre come ultimo campione e visualizzati.
- Attivato il percorso di nuovo tentativo se il player non riesce a generare l'ID sessione audio (#2382, #2678).
- Aggiungi il supporto per controllare i byte totali del buffer per le origini in
DefaultPreloadManagerper evitare che i byte totali del buffer per il precaricamento aumentino in modo arbitrario. Per utilizzare la logica di controllo predefinita, le app possono impostare i byte del buffer target per il precaricamento tramiteDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)per unplayerNamediPlayerId.Preload.name("preload") e inserire l'oggettoDefaultLoadControlcreato tramiteDefaultPreloadManager.Builder.setLoadControl(LoadControl). - Aggiunta di
cloneAndSet(int, int)aShuffleOrdercon un'implementazione predefinita (#2834). - Aggiunta dell'offset di ripresa dei contenuti quando si salta la riproduzione dell'annuncio dopo la regolazione della ricerca o la transizione automatica (#2484).
- Aggiunta di un'API per impostare e osservare i parametri dei codec per le tracce audio e video.
Questa funzionalità è implementata per i renderer basati su
MediaCodece richiede l'API 29 o versioni successive.- Utilizza
ExoPlayer.setAudioCodecParameters()eExoPlayer.setVideoCodecParameters()per applicare i parametri. - Utilizza
ExoPlayer.addAudioCodecParametersChangeListener()eExoPlayer.addVideoCodecParametersChangeListener()per ascoltare le modifiche. L'osservazione delle chiavi specifiche del fornitore richiede l'API 31 o versioni successive.
- Utilizza
- Correzione di
IllegalStateExceptioncausato dall'impostazione di un'origine multimediale vuota dopo la ricerca di una posizione diversa da zero e la preparazione del player con un'origine multimediale non vuota. - Risolto un bug per cui la ricerca di altri elementi multimediali in modalità di scrubbing poteva causare
IllegalStateException. - Correzione di un potenziale
NullPointerExceptioninDefaultPlaybackSessionManager(#2885). - Attiva i miglioramenti delle prestazioni di ricerca per i video idonei.
- Riattivato l'utilizzo della decrittografia asincrona in MediaCodec nell'API 36 e versioni successive, in cui i problemi di timeout con questa API della piattaforma sono stati risolti (#1641).
- Modifica il valore predefinito di
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsin 15 ms e attiva l'eliminazione più efficiente dei frame video prima della decodifica per i video idonei. - Aggiungi il limite massimo di memoria al calcolo automatico della memoria in
DefaultLoadControl. Questo dovrebbe avere effetto solo se viene selezionato un numero eccessivo di tracce (#2860). - Risolto un bug per cui, se la riproduzione avveniva in una playlist o in modalità repeat, la ricerca in modalità di scorrimento verso la fine poteva causare una ricerca dell'elemento multimediale successivo.
- Aggiungi un rilevamento del player bloccato che attiva un errore del player
- CompositionPlayer:
- Pubblica
CompositionPlayercon una nuova annotazione@ExperimentalApiper indicare che è disponibile per la sperimentazione, ma è ancora in fase di sviluppo. Alcune API potrebbero cambiare in modo significativo nelle versioni future e sono presenti problemi e limitazioni noti con alcuni casi d'uso (alcuni non documentati). - Aggiungi il supporto per
COMMAND_SET_AUDIO_ATTRIBUTESe la gestione della priorità audio inCompositionPlayer. - Aggiungi il supporto per la modifica della velocità nelle sequenze secondarie in
CompositionPlayer. - Aggiungi il supporto per
EditedMediaItem.removeVideo.
- Pubblica
- Transformer:
- Utilizza
InAppMp4Muxercome muxer predefinito. - Aggiungi
EditedMediaItem.Builder#setSpeed()e ritiraEffects#createExperimentalSpeedChangingEffects(). - Sostituisci
forceAudioTrackeforceVideoTrackcontrackTypesinEditedMediaItemSequence.
- Utilizza
- Selezione della traccia:
- Aggiungi
TrackSelectionParameters.selectTextByDefaultper preferire la selezione di qualsiasi traccia di testo senza specificare altre preferenze più specifiche. - Aggiungi
preferredVideoLabels,preferredAudioLabelsepreferredTextLabelsinTrackSelectionParametersper specificare una preferenza per le tracce con un'etichetta specifica, ad esempio quelle lette dai tag HLS NAME (#1666).
- Aggiungi
- Estrattori:
- FLAC: è stato rafforzato il rilevamento delle intestazioni per ridurre la possibilità di trovare intestazioni spurie nei dati FLAC codificati, con conseguenti errori di decodifica (#558).
- MP3: sono consentiti spazi tra (e prima) i tag ID3 all'inizio dei file MP3 (#811, #5718).
- MP3: è stato aumentato il limite di sniffing a 128 kB per corrispondere al limite di ricerca esistente per un byte di sincronizzazione (#2713).
- MP3: modifica di
FLAG_ENABLE_INDEX_SEEKINGper preferire la ricerca di informazioni dalle intestazioni dei metadati (come Xing e VBRI), se disponibili, con il ritorno alla ricerca basata su indice se non sono presenti altre informazioni di ricerca. In questo modo, le prestazioni dei file con metadati di ricerca migliorano (#2839). - MP3: modifica
Mp3Extractorin modo che utilizzi per impostazione predefinita un'ipotesi di velocità in bit costante (CBR) quando non vengono trovati metadati di ricerca (ad es. Xing, VBRI), anche quandoFLAG_ENABLE_INDEX_SEEKINGè impostato. Questo si basa sulla cronologia delle specifiche MP3, in cui CBR era lo standard e VBR richiede intestazioni esplicite. In questo modo, la ricerca immediata dei file senza metadati viene migliorata a scapito della potenziale accuratezza dei file VBR privi di intestazioni. La ricerca dell'indice viene ora utilizzata come riserva se l'ipotesi CBR non è ricercabile (ad esempio per stream di lunghezza sconosciuta) (#2848). - MP4: elimina l'ambiguità tra i tipi MIME
audio/mpeg(MP3),audio/mpeg-L1eaudio/mpeg-L2controllando il valore del livello del primo campione prima di emettere un formato della traccia dall'estrattore (#2683). - MP4: miglioramento dell'efficienza di sniffing di file molto grandi supponendo che un box
stblpiù grande di 1 MB implichi che il file non deve essere frammentato (#2650). - MP4: è stato aggiunto il supporto per i metadati
©mvn(nome del movimento) e©mvi(indice del movimento), che ora vengono emessi come oggettiTextInformationFrameinFormat.metadatacon ID rispettivamenteMVNMeMVIN(#2754). - MP4: ignora le tracce con box
stsdmancante (anziché non riuscire ad analizzare l'intero file). - Matroska: aggiunto il supporto per il rilevamento di DTS-HD (#6225).
- Risolto un problema in
MatroskaExtractorper cui la ricerca poteva essere imprecisa per i file con più tracce. I cue point ora sono associati correttamente alle rispettive tracce, il che consente una ricerca precisa. - MPEG-TS: correzione di
IllegalArgumentExceptiondaReorderingBufferQueuecausato da pacchetti PES senza timestamp (#2764). - Aggiunta del supporto per l'estrazione di foto in movimento HEIC.
HeifExtractorora può analizzare i file HEIC contenenti tracce video e audio incorporate.
- Inspector:
- È stato introdotto un nuovo modulo
:media3-inspectorche funge da home page dedicata per le utilità di ispezione dei contenuti multimediali. Questo modulo ora contiene un nuovoandroidx.media3.inspector.MetadataRetriever, che fornirà un'API unificata per l'estrazione di metadati e frame. La versione esistenteandroidx.media3.exoplayer.MetadataRetrieverè ora deprecata a favore di questa nuova versione. - È stata introdotta
androidx.media3.inspector.FrameExtractor, una nuova API pubblica per l'estrazione dei frame. Questa classeAutoCloseableconsente di estrarre i frame con supporto per video HDR, effetti video e selezione del decoder personalizzato. Deve essere creata tramite il relativoBuilderper unMediaItemspecifico. - FrameExtractor: aggiungi
getThumbnail()per estrarre un frame di miniatura rappresentativo da un file multimediale senza richiedere un timestamp specifico. - Aggiungi
androidx.media3.inspector.MediaExtractorCompat, un sostituto diretto diandroid.media.MediaExtractordella piattaforma che fornisce un modo per estrarre campioni multimediali codificati non elaborati da un file multimediale. La classeandroidx.media3.exoplayer.MediaExtractorCompatesistente è ora deprecata a favore di questa nuova classe.
- È stato introdotto un nuovo modulo
- Audio:
- Rendi le istanze
AudioProcessorconsapevoli della ricerca. - Consenti l'inserimento della nuova interfaccia
AudioOutputProviderinDefaultAudioSink.Builderper supportare i percorsi di output audio personalizzati. Il valore predefinito èAudioTrackAudioOutputProvider. - Gestisci le ricerche in
GainProcessor. - Utilizza le funzionalità di livello e profilo del decoder AC-4 nella valutazione del supporto del formato della traccia (#2580).
- Evita potenziali ritardi causati dalla gestione dei callback di modifica del routing all'inizio della riproduzione (#2646).
- Consenti il riutilizzo dei codec per i formati EAC3, EAC3-JOC e AC-4 (#1346).
- Aggiungi il supporto per i campioni PCM con virgola mobile in
Sonic. - Aggiungi il supporto per i campioni PCM a 16 bit in
ToFloatPcmAudioProcessor.
- Rendi le istanze
- Video:
- Disattiva il riutilizzo del codec per i contenuti Dolby-Vision con profili diversi.
- È stata riattivata la soluzione alternativa per i punti di rendimento segnalati in modo errato per i codec sicuri (#2856).
- Testo:
- Risolto il problema di analisi dei sottotitoli CEA-6/708 nei contenuti Dolby Vision (#2775).
- Immagine:
- Risolto il problema di ScrubbingMode per cui il player si blocca durante lo scrubbing di una traccia di miniature DASH (#2815).
- DRM:
- Modifica il tipo restituito dei metodi
MediaDrmCallbackdabyte[]a un nuovo tipoMediaDrmCallback.Responseper consentire la restituzione di informazioni facoltative aggiuntive. Si tratta di una modifica che provoca un errore nell'origine, ma gli errori possono essere facilmente risolti eseguendo il wrapping del valore restituitobyte[]precedente connew Responseprima della restituzione. - Aggiungi informazioni chiave sulla richiesta, come URL e latenza, a
AnalyticsListener.onDrmKeysLoaded(#1001). - Sposta i dati della richiesta di provisioning da un parametro URL al corpo della richiesta POST.
- Modifica il tipo restituito dei metodi
- Effetto:
- Aggiungi
Presentation.copyWithUnsetSideRoundedToper arrotondare il lato di output non impostato quandoPresentationviene creato con una singola lunghezza del lato.
- Aggiungi
- Muxer:
- Aggiungi
MediaMuxerCompat, un sostituto immediato del frameworkMediaMuxer. - Aggiungi
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()per consentire la creazione di foto in movimento. - Aggiungi
WebmMuxerper consentire il muxing degli stream multimedialiOPUS,VORBIS,VP8eVP9in un formato filewebm.
- Aggiungi
- Estensione IMA:
- Rimozione delle regole ProGuard personalizzate, in modo che le app possano utilizzare quelle rilasciate nell'archivio Android IMA.
- Aggiunta di
ImaServerSideAdInsertionUriBuilder.setNetworkCode, una nuova API per impostare il codice di rete Google Ad Manager per l'SDK IMA per gestire gli identificatori degli annunci come specificato nelle impostazioni di Google Ad Manager. I codici di rete sono facoltativi, ma consigliati per le richieste di stream Full service. Per trovare il codice di rete, consulta questo articolo. - Esegui l'upgrade della dipendenza IMA alla versione 3.37.0, che richiede l'attivazione del desugaring della libreria di base. Anche le app dipendenti devono attivare questa opzione. Consulta le note di configurazione di IMA. * Supporto delle opzioni UI personalizzate di IMA DAI nel generatore di URI SSAI. Le opzioni di UI personalizzata per l'inserimento di annunci lato server includono il supporto per il rendering di "Ignorabile" e "Su questo annuncio". La funzionalità è attualmente disponibile per i publisher selezionati in una lista consentita. Questa modifica esegue anche l'upgrade della versione dell'SDK IMA alla 3.38.0 (note di rilascio) per accedere all'API delle opzioni della UI personalizzata.
- Risolto il problema per cui l'errore di preparazione dei contenuti dopo un annuncio veniva segnalato erroneamente come errore di riproduzione dell'annuncio (#2656).
- Sessione:
- Aggiungi un nuovo parametro a
MediaSession.Callback.onPlaybackResumptionper indicare se la chiamata avviene solo per raccogliere informazioni o per avviare la riproduzione (#1764). - Aggiorna
MediaSession.ControllerInfo.isTrustedper dichiarare anche i controller della propria app come attendibili (#2542). - Aggiunta di
MediaSessionService.triggerNotificationUpdateper attivare manualmente un aggiornamento delle notifiche (#1833). - Aggiungi
ProgressListenerai metodi dei comandi personalizzati. - Modifica il valore predefinito di
MediaLibrarySession.Builder.setLibraryErrorReplicationModein non irreversibile. - Aggiunto un parametro
ContextaMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Leggi l'ID del controllo del volume dalla piattaforma
PlaybackInfoanziché recuperarlo tramite binder. In questo modo, il tipo di riproduzione e l'ID del controllo del volume vengono letti in modo atomico e corrispondono tra loro. - È stato corretto un bug per cui gli eventi chiave
ACTION_UPvenivano esclusi prima di essere passati al callback per la gestione personalizzata. In questo modo, si ottiene la parità con ciò che faceva media1 e ciò che fa la piattaforma (#2637). - È stato corretto il bug per cui
getCurrentTimeline()veniva chiamato daPlayerWrapperanche quando il comando non era disponibile (#2665). - Risolto un bug per cui un messaggio veniva lasciato nella coda dei messaggi del looper principale, causando una perdita di memoria dopo la chiusura del servizio (#2692).
- Quando è connesso a un'app di sessione legacy con un
MediaBrowser, i comandi personalizzati vengono inviati alla sessione solo se l'azione personalizzata viene pubblicizzata come azione personalizzata inPlaybackStateCompatdella sessione legacy. Tutte le altre azioni personalizzate vengono inviate al servizio. - Implementato
onAudioSessionIdChangedper notificare ai controller multimediali quando un ID sessione audio viene impostato dalla sessione (#244). - Risolto il bug per cui
KEYCODE_HEADSETHOOKnon avviava il player e l'evento chiave multimedialeIntentarrivava inonStartCommand(). Il problema è stato risolto gestendo "KEYCODE_HEADSETHOOK" esattamente comeKEYCODE_MEDIA_PLAY_PAUSE(#2816). - Risolto un bug per cui le dimensioni della superficie non venivano comunicate tra la sessione e il controller, causando l'impossibilità di applicare gli effetti video nella sessione demo. Se utilizzi un controller, questa potrebbe essere una modifica che provoca un errore se il tuo player non è in grado di gestire una chiamata
setVideoSurfaceHolder. - Correzione della propagazione dei valori dei metadati
CharSequencenonString, come le stringhe con stile span (#2853). - Aggiungi
CommandButton.executeActionin modo che i controller possano attivare più facilmente l'azione prevista. Consente inoltre di specificare i parametri per alcuni comandi del player e della sessione per definire l'azione da attivare. - Aggiungi la compatibilità con le versioni precedenti per le istanze
CommandButtonutilizzandoPlayer.CommandoSessionCommandnon personalizzato per definire la loro azione. Ora questi vengono rappresentati correttamente nelle sessioni multimediali della piattaforma, ad esempio per la UI di sistema o Android Auto. - Risolto il problema per cui lo stesso
Bitmapviene compresso più volte quando si connette unMediaControllera una sessione multimediale della piattaforma.
- Aggiungi un nuovo parametro a
- UI:
- Aggiungi la classe
ProgressStateWithTickIntervale il composablerememberProgressStateWithTickIntervalcorrispondente al modulomedia3-ui-compose. Questo contenitore di stato viene utilizzato indemo-composeper visualizzare la posizione e la durata correnti in formato di testo. - Aggiungi
MuteButtonStateaui-composeche gestisce la disattivazione dell'audio del volumePlayer. Questo contenitore di stato viene utilizzato indemo-composeper visualizzare il pulsante di attivazione/disattivazione dell'audio. - Aggiungi le classi
ProgressStateWithTickCounte il composablerememberProgressStateWithTickCountcorrispondente al modulomedia3-ui-compose. Questo contenitore di stato viene utilizzato indemo-composeper visualizzare l'avanzamento come barra di avanzamento orizzontale di sola lettura. - Aggiungi il componibile
ContentFrameamedia3-ui-compose, che combina la gestione diPlayerSurfacecon il ridimensionamento delle proporzioni e la copertura con un otturatore. - Risolto un bug noto della piattaforma API 34 che causava video allungati/ritagliati quando si utilizzava
SurfaceViewall'interno di unAndroidViewdi Compose e, di conseguenza, influiva sui composabiliContentFrameePlayerSurfaceconSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - Crea un nuovo modulo
media3-ui-compose-material3e aggiungi i componibili con tema Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - Aggiungi il componibile
TimeTextamedia3-ui-compose-material3per visualizzare i progressi del player in formato testuale. Può essere configurato per mostrare la posizione corrente, la durata o il tempo rimanente. - Aggiungi il supporto per l'inserimento di un pulsante di route multimediale in
PlayerView. - Utilizza
BidiFormatterper visualizzare correttamente la punteggiatura nei sottotitoli di testo RTL (#11214).
- Aggiungi la classe
- Estensione HLS:
- Analizza gli attributi di salto degli interstitial HLS.
- Mappa gli attributi di controllo per saltare i contenuti dalla playlist HLS e dal documento dell'elenco degli asset in
AdPlaybackStateper l'accesso pubblico. - Risolto il bug per cui l'ora di inizio della playlist veniva eliminata quando il tag EXT-X-PROGRAM-START-DATE che definiva la data di inizio veniva rimosso da una playlist (#2760).
- Utilizza la ricerca binaria per trovare l'indice del segmento di una determinata posizione nella playlist (#2826).
- Aggiungi
HlsInterstitialsAdsLoader.skipCurrentAd()eskipCurrentAdGroup()e i metodi corrispondenti per saltare gli annunci e i gruppi di annunci per indice. - Aggiungi
HlsInterstitialsAdsLoader.Listener.onAdStartedper segnalare l'inizio di un periodo dell'annuncio (#2859). - Accetta lo spazio come separatore di data/ora nelle stringhe di data/ora ISO 8601.
- Gestisci correttamente il recupero del chunk successivo per un
HlsMediaPlaylistsenza segmenti (#2821). - Utilizza la posizione iniziale predefinita per i pre-roll con i live streaming.
- Estensione DASH:
- Risolto il problema
UnsupportedOperationExceptiondurante la riproduzione di stream DASH con un URI manifestdata:non gerarchico (#2688). - Reimposta
LiveConfigurationsul valore fornito daMediaItemdiDashMediaSourcequando viene rilasciato e quando l'elemento multimediale viene aggiornato dall'utente (#2606). - Evita gli arresti anomali causati da aggiornamenti del manifest non validi che non sono stati segnalati come errori del player (#2805).
- Risolto il problema
- Estensione RTSP:
- Gestione dell'errore di pacchetti RTP mancanti durante l'elaborazione di unità NAL frammentate per H264 e H265 (#2613).
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Estensione AV1: il decodificatore software AV1 ora utilizza la libreria
dav1dad alte prestazioni, sostituendo la precedente implementazionelibgav1per una maggiore velocità di decodifica. - Estensione FFmpeg: è stato risolto un problema che impediva la riproduzione di alcuni file FLAC assicurando che il blocco
STREAMINFOvenga analizzato e passato correttamente al decodificatore (#2887).
- Estensione AV1: il decodificatore software AV1 ora utilizza la libreria
- Estensione Cast:
- Aggiungi
CastPlayer.Builder, che consente aCastPlayerdi eseguire la riproduzione sia locale sia tramite Cast. Per mantenere il comportamento precedente diCastPlayer, che supporta solo la riproduzione di Cast, puoi utilizzareRemoteCastPlayer. I costruttoriCastPlayerpreesistenti mantengono il loro comportamento precedente, ma sono deprecati a favore dell'utilizzo dei builderCastPlayeroRemoteCastPlayer. - Interrompi l'applicazione di un tipo MIME non nullo in
DefaultMediaItemConverter. - Utilizza
MediaItem.mediaMetadata.mediaTypeper dedurre il MEDIA_TYPE di trasmissione da utilizzare inDefaultCastOptionsProvider#toMediaQueueItem, se disponibile. - Abilita i trasferimenti da remoto a locale in
DefaultCastOptionsProvider. - Aggiungi il supporto di Cast nella demo della sessione.
- Aggiungi il supporto per la visualizzazione di un pulsante di route multimediale su una UI componibile.
- Aggiungi il supporto per la visualizzazione di un pulsante di route multimediale in un menu della barra delle azioni.
- Aggiungi il supporto per la visualizzazione di un pulsante di route multimediale come UI di visualizzazione.
- Aggiungi
- Utilità di test:
- Aggiungi la differenza di tempo massima per il comportamento di avanzamento automatico di
FakeClock. Il valore predefinito è 1 secondo, ma è configurabile tramiteFakeClock.Builder. - Aggiungi la differenza di tempo massima tra i messaggi per
RobolectricUtil.runMainLooperUntil(erunLooperUntil). Il valore predefinito è 1 secondo, ma è configurabile tramite i nuovi overload di questi metodi. - Trasferisci
CapturingRenderersFactorydatest-utilsatest-utils-robolectric.
- Aggiungi la differenza di tempo massima per il comportamento di avanzamento automatico di
- Rimuovi i simboli deprecati:
- Rimuovi il costruttore
DefaultPreloadManagerdeprecato. Usa inveceDefaultPreloadManager.Builder. - Rimossi i costruttori
EditedMediaItemSequencedeprecati. Usa inveceEditedMediaItemSequence.Builder. - Rimuovi
BitmapFactoryImageDecoder.BitmapDecoder. Usa inveceExternallyLoadedImageDecoder. - Rimuovi
ShadowMediaCodecConfig.forAllSupportedMimeTypes()deprecato. Usa invece il descrittoreShadowMediaCodecConfig.withAllDefaultSupportedCodecs(). - Rimuovi
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()deprecato. Usa inveceShadowMediaCodecConfig.withNoDefaultSupportedCodecs().
- Rimuovi il costruttore
1.9.0-rc01
1° dicembre 2025
Utilizza la versione stabile 1.9.0.
1.9.0-beta01
20 novembre 2025
Utilizza la versione stabile 1.9.0.
1.9.0-alpha01
22 ottobre 2025
Utilizza la versione stabile 1.9.0.
Versione 1.8.0
1.8.1
21 maggio 2026
La versione 1.8.1 contiene i seguenti commit.
- Effetto:
- Imposta esplicitamente
GL_DRAW_BUFFEReGL_READ_BUFFERquando esegui la transizione da un contesto senza superficie.
- Imposta esplicitamente
Versione 1.8.0
30 luglio 2025
La versione 1.8.0 contiene questi commit.
- Libreria comune:
- Aggiungi il supporto per la sostituzione del player in
ForwardingSimpleBasePlayer.
- Aggiungi il supporto per la sostituzione del player in
- ExoPlayer:
- Aggiunto il getter per la modalità shuffle all'interfaccia
ExoPlayer(#2522). - Genera un'eccezione in modo più chiaro se si accede a
DefaultAudioSinkda più thread. Se ciò accade a causa di una chiamata aRendererCapabilities.getFormatSupportall'esterno del player, assicurati di chiamare questo metodo sullo stesso thread del thread di riproduzione di ExoPlayer o utilizza un'istanza diversa da quella utilizzata per la riproduzione (#1191). - È stato corretto il bug per cui i formati audio non stereo sulle TV potevano essere contrassegnati come non supportati da
DefaultTrackSelector. - Assicurati che l'ultimo frame venga visualizzato correttamente quando utilizzi il flag
DECODE_ONLYdi MediaCodec (attivato per impostazione predefinita in modalità di scrubbing). - Aggiunto il supporto per l'utilizzo dell'ID dispositivo virtuale da
Contextpassato aExoPlayer.Builder. - Attiva la programmazione dinamica per impostazione predefinita in modalità di scrubbing.
- Evita il ricaricamento non necessario di un'origine quando cerchi la fine di un elemento.
- Utilizza
MediaCodec.BUFFER_FLAG_DECODE_ONLYper impostazione predefinita in modalità di scrubbing. - Genera
IllegalStateExceptionquandoPreloadMediaSourceviene riprodotto da unExoPlayercon un thread di riproduzione diverso dal thread di precaricamento (#2495). - Aggiunta di
cloneAndMoveaShuffleModecon un'implementazione predefinita (#2226). - Modifica il comportamento predefinito di
Renderer.getMinDurationToProgressUsper restituire un valore maggiore se non è richiesta alcuna chiamata arender. - Correzione di un bug per cui la pianificazione interna ritardava l'ultimo frame durante la ricerca della fine durante la pausa. Per il momento, la correzione di bug ha effetto solo se
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledè abilitato. - Aggiungi il metodo
ExoPlayer.setScrubbingModeEnabled(boolean). In questo modo, il player viene ottimizzato per molte ricerche frequenti (ad esempio, un utente che trascina una barra di scorrimento). Il comportamento della modalità di scrubbing può essere personalizzato consetScrubbingModeParameters(..)suExoPlayereExoPlayer.Builder. - Consenti la personalizzazione della tolleranza di ricerca frazionaria in modalità di scrubbing.
- Aumenta la frequenza operativa del codec in modalità di scrubbing.
- Risolto un bug per cui gli errori di preparazione nei contenuti di
AdsMediaSourcepotrebbero non essere mai segnalati (#2337). - Risolto un problema di perdita di memoria in
MergingMediaSource, ad esempio quando si caricano i sottotitoli tramite sideload (#2338). - Consenti a
CmcdConfiguration.Factorydi restituirenullper disattivare il logging CMCD per elementi multimediali specifici (#2386). - Aumentata la dimensione predefinita del buffer delle immagini da 128 kB (errore di copia-incolla dalle tracce di testo) a 26 MB, sufficiente per immagini Ultra HDR da 50 MP (#2417).
- Aggiungi
PreCacheHelperche consente alle app di pre-memorizzare nella cache un singolo contenuto multimediale con posizione di inizio e durata specificate. - Aggiungi il supporto del precaricamento da una posizione specificata in
DefaultPreloadManager.
- Aggiunto il getter per la modalità shuffle all'interfaccia
- Transformer:
- Aggiungi
CodecDbLiteche consente ottimizzazioni specifiche del chipset delle impostazioni di codifica video. - Aggiungi il flag
setEnableCodecDbLiteaDefaultEncoderFactoryper attivare l'ottimizzazione delle impostazioni di CodecDB Lite. Per impostazione predefinita, questo flag è impostato su false. - Per riempire un gap iniziale (aggiunto tramite
addGap()) con audio silenzioso, ora è necessario impostare esplicitamenteexperimentalSetForceAudioTrack(true)inEditedMediaItemSequence.Builder. Se l'interruzione si trova al centro della sequenza, questo flag non è obbligatorio. - Sposta l'interfaccia
Muxerdamedia3-transformeramedia3-muxer. - Rendi obbligatoria l'impostazione
MediaItem.Builder().setImageDuration(long)per importare un elemento multimediale come immagine. - Aggiungi
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)che include un elenco di modifiche MP4 durante il taglio per indicare ai player di ignorare i campioni tra il keyframe prima del punto di inizio del taglio e il punto di inizio del taglio. - Aggiorna l'app Composition Demo per utilizzare Kotlin e Jetpack Compose e aggiungi un
VideoCompositorSettingspersonalizzato per disporre le sequenze in un layout 2x2 o PiP.
- Aggiungi
- Estrattori:
- Analizza i metadati dai file MP4 frammentati (#2084).
- JPEG: è stato aggiunto il supporto delle foto in movimento che non hanno un segmento Exif all'inizio (#2552).
- Aggiunto il supporto per la ricerca in MP4 frammentati con più atomi
sidx. Questo comportamento può essere attivato utilizzando il flagFLAG_MERGE_FRAGMENTED_SIDXsuFragmentedMp4Extractor(#9373). - Ignora le tabelle di ricerca vuote nei file FLAC (incluse quelle contenenti solo punti di ricerca segnaposto) e torna alla ricerca binaria se la durata del file è nota (#2327).
- È stata corretta l'analisi delle unità SEI H.265 per ignorare completamente i tipi SEI non riconosciuti (#2456).
- Aggiorna
WavExtractorper utilizzare i dati SubFormat dell'estensione dell'intestazione per il formato audio durante l'analisi di un file di tipoWAVE_FORMAT_EXTENSIBLE. - MP4: aggiunta del supporto per i box
ipcmefpcmche definiscono tracce audio PCM non elaborate (il PCM in virgola mobile a 64 bit non è supportato). - MP4: gestisci la parte di rotazione delle matrici di trasformazione
tkhdche ruotano e riflettono il video. In questo modo, i video riflessi acquisiti dalla fotocamera anteriore dell'iPhone vengono visualizzati con l'orientamento corretto, ma con un riflesso errato sull'asse Y (#2012). - MP3: utilizza la durata e le dimensioni dei dati dei metadati Xing, VBRI e simili con velocità in bit variabile non ricercabili quando si torna alla ricerca con velocità in bit costante a causa di
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Audio:
- È stato corretto il bug per cui
AnalyticsListener.onAudioPositionAdvancingnon viene chiamato quando la riproduzione audio viene avviata molto vicino alla fine dei contenuti multimediali. - Aggiungi il supporto di tutti i formati di campionamento PCM lineare in
ChannelMappingAudioProcessoreTrimmingAudioProcessor. - Aggiungi il supporto per le interruzioni audio in
CompositionPlayer. - Rimuovi la chiamata spuria a
BaseAudioProcessor#flush()daBaseAudioProcessor#reset(). - Consenti l'upmixing/downmixing della potenza costante in DefaultAudioMixer.
- Rendi pubblici
ChannelMappingAudioProcessor,TrimmingAudioProcessoreToFloatPcmAudioProcessor(#2339). - Utilizza
AudioTrack#getUnderrunCount()inAudioTrackPositionTrackerper rilevare gli underrun inDefaultAudioSinkanziché la stima best-effort. - Miglioramento della fluidità del timestamp audio per la deviazione imprevista della posizione dal dispositivo di output audio.
- Correzione di un bug per cui la sincronizzazione audio/video non funziona per i primi 10 secondi dopo la ripresa dalla pausa quando il dispositivo è connesso a dispositivi Bluetooth.
- Correzione di un bug per cui
AnalyticsListener.onAudioPositionAdvancingnon segnalava l'ora in cui l'audio iniziava ad avanzare, ma l'ora della prima misurazione. - Risolto il problema relativo al ripristino dell'audio multicanale dopo il fallback all'audio stereo su alcuni dispositivi (#2258).
- È stato corretto il bug per cui
- Video:
- Estensione della soluzione alternativa per la superficie scollegata ai dispositivi "lenovo" e "motorola" (#2059).
- Miglioramento del rilascio fluido dei frame video all'avvio quando i sample audio non iniziano esattamente nella posizione richiesta.
- Estensione della soluzione alternativa per la superficie scollegata ai dispositivi "realme" (#2059).
- Aggiungi l'API
ExoPlayersperimentale per includere il flagMediaCodec.BUFFER_FLAG_DECODE_ONLYdurante l'accodamento dei buffer di input di sola decodifica. Questo flag indica al decoder di saltare i buffer di sola decodifica, velocizzando così la ricerca. Attivalo conDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * Migliorare i controlli delle prestazioni dei codec video software. Ciò potrebbe comportare il contrassegno di alcune tracce aggiuntive comeEXCEEDS_CAPABILITIES. - Risolti gli errori di riproduzione di Widevine VP9 su alcuni dispositivi (#2408).
- Testo:
- Aggiunto il supporto delle tracce VobSub nei file MP4 (#2510).
- Risolto un problema di blocco della riproduzione quando un segmento di sottotitoli inizialmente non viene caricato e poi viene caricato correttamente, seguito da diversi segmenti di sottotitoli vuoti (#2517).
- Correzione di SSA e SubRip per visualizzare un cue in corso quando si attivano i sottotitoli (#2309).
- Risolto il problema per cui la riproduzione si bloccava quando si passava da uno stream con un errore dei sottotitoli a un live streaming con una traccia dei sottotitoli vuota (#2328).
- Risolto il problema dei sottotitoli CEA-608 confusi durante la riproduzione di stream H.262 contenenti frame B (#2372).
- Aggiungi il supporto per i sottotitoli SSA con
CodecId = S_TEXT/SSAnei file Matroska. In precedenza,MatroskaExtractorsupportava soloCodecId = S_TEXT/ASS, che rappresenta la variante "avanzata" (v4+) dei sottotitoli SubStation Alpha (ma la logica di analisi di ExoPlayer è la stessa per entrambe le varianti) (#2384). - Aggiunta del supporto della proprietà
layernei file di sottotitoli SubStation Alpha (SSA), che viene utilizzata per definire l'ordine di visualizzazione dei cue quando ne vengono mostrati più di uno sullo schermo contemporaneamente (#2124).
- Metadati:
- Aggiunto il supporto per il recupero della durata dei contenuti multimediali e di
TimelineaMetadataRetrievered eseguita la migrazione a un'APIAutoCloseablebasata su istanze. Utilizza il nuovoBuilderper creare un'istanza per unMediaItem, quindi chiamaretrieveTrackGroups(),retrieveTimeline()eretrieveDurationUs()per ottenereListenableFutureper i metadati. I metodi statici precedenti sono ora deprecati (#2462).
- Aggiunto il supporto per il recupero della durata dei contenuti multimediali e di
- Immagine:
- Limita le bitmap decodificate alle dimensioni di visualizzazione in
BitmapFactoryImageDecoderper evitare l'arresto anomalo di un'app conCanvas: trying to draw too large bitmap.daPlayerViewquando provi a visualizzare immagini molto grandi (ad es. 50 MP). - Modifica la firma di
DefaultRenderersFactory.getImageDecoderFactory()in modo che accetti un parametroContext. - Allinea la dimensione massima dell'output bitmap utilizzata in
CompositionPlayercon quella già utilizzata inTransformer(ovveroCompositionPlayernon considera le dimensioni del display durante la decodifica delle bitmap, a differenza diExoPlayer).
- Limita le bitmap decodificate alle dimensioni di visualizzazione in
- DRM:
- Aggiunto un nuovo overload di
OfflineLicenseHelper.newWidevineInstanceche accetta unMediaItem.DrmConfigurationin modo che le intestazioni delle richieste HTTP possano essere applicate correttamente (#2169).
- Aggiunto un nuovo overload di
- Effetto:
- Aggiungi
Presentation.createForShortSide(int)che crea unPresentationche garantisce che il lato più corto corrisponda sempre al valore specificato, indipendentemente dall'orientamento dell'input.
- Aggiungi
- Muxer:
- È stato corretto un bug per cui non venivano impostati i flag di campionamento corretti per i campioni audio in MP4 frammentato.
- L'API
writeSampleData()ora utilizza la classeBufferInfospecifica del muxer anzichéMediaCodec.BufferInfo. - Aggiungi
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, che per impostazione predefinita è false.
- Estensione IMA:
- Risolto un bug per cui un errore di caricamento in un annuncio poteva invalidare accidentalmente un altro gruppo di annunci.
- Correzione di un bug per cui i gruppi di annunci dopo la fine di una finestra VOD bloccavano la riproduzione.
I gruppi di annunci con un'ora di inizio successiva alla finestra non vengono più inseriti nella coda di
MediaPeriodQueue(#2215).
- Sessione:
- È stato corretto il bug per cui le connessioni da controller Media3 di terze parti non privilegiati venivano ignorate.
- Rimuovi il controllo dei comandi disponibili quando invii comandi personalizzati a un
MediaBrowserServiceCompatlegacy. Questo comportamento è analogo a quello dei controller/browser legacy quando sono connessi a un'app legacy. - Risolto un bug che causava l'errato trattamento del primo errore di riproduzione di un player come eccezione personalizzata persistente. In questo modo, l'applicazione non può essere ripristinata.
- È stato corretto il bug per cui alcune modifiche del controller non gestite dalla sessione potevano causare
IllegalStateExceptions. - Risolto un bug per cui le azioni del controller non gestite dalla sessione potevano lasciare il controller in uno stato non valido.
- Risolto l'avviso di violazione di avvio non sicuro di StrictMode (#2330).
- Risolto un bug per cui la chiamata a
setSessionExtrasdal thread principale quando il player veniva eseguito da un thread dell'applicazione diverso dal thread principale causava unIllegalStateException(#2265). - Non mostrare automaticamente una notifica se un player è configurato con elementi multimediali senza prepararli o riprodurli (#2423https://github.com/androidx/media/issues/2423). Questo comportamento
è configurabile tramite
MediaSessionService.setShowNotificationForIdlePlayer. - Aggiungi
PlaybackExceptionpersonalizzati per tutti i controller o per quelli selezionati. - Risolto un bug per cui la ricerca in un live streaming su un
MediaControllerpuò causare unIllegalArgumentException. - Per i live streaming, interrompi la pubblicazione di una posizione di riproduzione e la possibilità di cercare nell'elemento corrente per i controller multimediali della piattaforma, per evitare artefatti di posizione nell'interfaccia utente di Android Auto (e in altri controller che utilizzano queste informazioni dalla sessione multimediale della piattaforma) (#1758).
- Risolto un bug per cui il passaggio di un valore null in
getLibraryRootdi unMediaBrowsercollegato a unMediaBrowserServiceCompatlegacy produceva unNullPointerException. - Risolto un bug per cui l'invio di azioni personalizzate, un risultato di ricerca o una richiesta getItem causava l'arresto anomalo dell'app della sessione precedente con un
ClassNotFoundException. - È stato corretto un bug per cui
MediaItem.LocalConfiguration.uriveniva condiviso conMediaMetadatadelle sessioni della piattaforma. Per condividere intenzionalmente un URI per consentire ai controller di richiedere nuovamente i contenuti multimediali, impostaMediaItem.RequestMetadata.mediaUri.
- UI:
- Risolto il bug per cui
PlayerSurfaceall'interno di componenti riutilizzabili comeLazyColumnnon funzionava correttamente (#2493). - È stato corretto un bug di Compose che causava un intervallo tra l'impostazione degli stati iniziali dei pulsanti e l'osservazione della modifica dello stato (ad esempio, le forme delle icone o l'attivazione). Ora vengono rilevate tutte le modifiche apportate al Player al di fuori del periodo di osservazione (#2313).
- Aggiungi contenitori di stato e componibili al modulo
media3-ui-composeperSeekBackButtonStateeSeekForwardButtonState. - Aggiungi il supporto per la modalità di scrubbing di ExoPlayer a
PlayerControlView. Se attivata, questa opzione attiva la modalità di scrubbing del player quando l'utente inizia a trascinare la barra di scrubbing, invia una chiamataplayer.seekToper ogni movimento e poi esce dalla modalità di scrubbing quando il tocco viene sollevato dallo schermo. Questa integrazione può essere attivata contime_bar_scrubbing_enabled = truein XML o con il metodosetTimeBarScrubbingEnabled(boolean)da Java/Kotlin. - Fai in modo che
PlayerSurfaceaccetti un argomentoPlayerche ammette valori null.
- Risolto il bug per cui
- Download:
- Aggiungi il supporto per il download parziale per gli stream progressivi. Le app possono preparare uno stream progressivo con
DownloadHelpere richiedere unDownloadRequestall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. L'oggettoDownloadRequestrestituito contiene l'intervallo di byte risolto, con cui è possibile creare un oggettoProgressiveDownloadere scaricare i contenuti di conseguenza. - Aggiungi
DownloadHelper.Factorycon cui vengono sostituiti i metodiDownloadHelper.forMediaItem()statici. - Aggiungi
Factoryper le implementazioni diSegmentDownloader. - Aggiungi il supporto del download parziale per gli stream adattivi. Le app possono preparare uno stream adattivo con
DownloadHelpere richiedere unDownloadRequestall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. L'oggettoDownloadRequestrestituito contiene l'intervallo di tempo risolto, con cui è possibile creare un oggettoSegmentDownloaderconcreto e scaricare i contenuti di conseguenza.
- Aggiungi il supporto per il download parziale per gli stream progressivi. Le app possono preparare uno stream progressivo con
- Estensione Cronet:
- Aggiunta della gestione automatica dei cookie (#5975).
- Estensione HLS:
- Risolto il bug per cui
HlsSampleStreamWrappertenta di eseguire la ricerca all'interno del buffer quando non sono disponibili chunk nel buffer #2598. - Risolto il bug per cui le modifiche alla selezione della traccia dopo il caricamento di parti a bassa latenza e i suggerimenti di precaricamento possono causare il blocco o l'interruzione della riproduzione (#2299).
- Evita ricaricamenti eccessivi attendendo metà della durata target quando
CAN-BLOCK-RELOAD=YESnon viene rispettato dal server (#2317). - È stato corretto un bug per cui la riproduzione si bloccava quando veniva avviato uno stream di interstitial prima di un mid-roll e veniva tentata la risoluzione dell'elenco di asset per l'annuncio sbagliato (#2558).
- Risolto il problema di analisi della playlist per accettare
\f(avanzamento modulo) nei valori degli attributi delle stringhe tra virgolette (#2420). - Supporto dell'aggiornamento degli interstitial con lo stesso ID (#2427).
- È stato corretto il bug per cui a volte gli errori di caricamento della playlist non vengono propagati quando un live streaming esaurisce i segmenti da caricare (#2401https://github.com/androidx/media/issues/2401).
- Raggruppa le rappresentazioni dei sottotitoli per tag NAME, in modo simile a come sono già raggruppate le rappresentazioni audio (#1666).
- Supporta X-ASSET-LIST e i live streaming con
HlsInterstitialsAdsLoader.
- Risolto il bug per cui
- Estensione DASH:
- Risolto un problema per cui il set di adattamento per la riproduzione rapida veniva unito al set di adattamento principale per formare un
TrackGroupnon valido (#2148). - Risolto un bug per cui l'abbreviazione della durata di un periodo DASH può generare un'eccezione quando i campioni oltre la nuova durata sono già stati letti dalla pipeline di rendering (#2440).
- È stato corretto un bug per cui il reindirizzamento non veniva seguito quando venivano utilizzati i parametri di query CMCD (#2475).
- Risolto un problema per cui il set di adattamento per la riproduzione rapida veniva unito al set di adattamento principale per formare un
- Estensione RTSP:
- Aggiunto il supporto per il pacchetto di aggregazione RTP per H265 in conformità con RFC 7798#4.4.2 (#2413).
- Correzione di
RtspClientper utilizzare l'URI della località come fornito durante l'elaborazione di una risposta HTTP 302 (#2398). - Aggiunto il supporto per l'analisi di SessionDescriptions contenenti righe con caratteri di spazio vuoto finali (#2357).
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Correzione del bug per cui
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangenon ha effetto per le estensioni del decodificatore audio (#2258).
- Correzione del bug per cui
- Estensione Cast:
- Utilità di test:
- Aggiungi
advance(player).untilPositionAtLeasteuntilMediaItemIndexaTestPlayerRunHelperper far avanzare il player fino a raggiungere una posizione specificata. Nella maggior parte dei casi, questi metodi sono più affidabili dei metodiuntilPositioneuntilStartOfMediaItemesistenti. - Sposta
FakeDownloadernel modulotest-utils-robolectricper riutilizzarlo in altri test. transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)etransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)rimosse. Utilizza inveceShadowMediaCodecConfigper configurare i codificatori e i decodificatori shadow.- Sostituito il prefisso "exotest" con "media3" nei nomi dei codec segnalati da
ShadowMediaCodecConfig.
- Aggiungi
- Rimuovi i simboli deprecati:
- Rimosso il costruttore
SegmentDownloaderdeprecatoSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)e i costruttori corrispondenti nelle relative sottoclassiDashDownloader,HlsDownloadereSsDownloader. Player.hasNext(),Player.hasNextWindow()deprecati rimossi. Usa invecePlayer.hasNextMediaItem().Player.next()deprecato rimosso. Usa invecePlayer.seekToNextMediaItem().Player.seekToPreviousWindow()deprecato rimosso. Usa invecePlayer.seekToPreviousMediaItem().Player.seekToNextWindow()deprecato rimosso. Usa invecePlayer.seekToNextMediaItem().- Rimosso
BaseAudioProcessordeprecato nel moduloexoplayer. UtilizzaBaseAudioProcessornel modulocommon. - Rimuovi il costruttore
MediaCodecVideoRendererdeprecatoMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- Rimosso il costruttore
Versione 1.8.0-rc02
24 luglio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.8.0-rc01
16 luglio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.8.0-beta01
2 luglio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.8.0-alpha01
19 maggio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.7.0
Versione 1.7.1
16 maggio 2025
Questa release ha lo stesso codice della versione 1.6.1 e viene rilasciata per garantire che venga visualizzata come una release "più recente" rispetto alla versione 1.7.0, che era una release alpha contrassegnata accidentalmente come stabile (vedi di seguito).
Versione 1.7.0
16 maggio 2025
Questa release avrebbe dovuto essere 1.7.0-alpha01, ma è stata accidentalmente taggata come 1.7.0 (ovvero stabile) su maven.google.com. Non utilizzarla. Rimani sulla versione 1.6.1 o esegui l'upgrade alla versione 1.7.1 (che ha lo stesso codice della versione 1.6.1).
Versione 1.6.0
1.6.1
14 aprile 2025
androidx.media3:media3-*:1.6.1 è stato rilasciato. La versione 1.6.1 contiene questi commit.
- Libreria comune:
- Aggiunto il metodo
PlaybackParameters.withPitch(float)per copiare facilmente unPlaybackParameterscon un nuovo valorepitch(#2257).
- Aggiunto il metodo
- ExoPlayer:
- Risolto il problema per cui la transizione dell'elemento multimediale non andava a buon fine a causa di un errore del renderer recuperabile durante l'inizializzazione dell'elemento multimediale successivo (#2229).
- Risolto il problema per cui
ProgressiveMediaPeriodgenera unIllegalStateExceptionquandoPreloadMediaSourcetenta di chiamare il relativogetBufferedDurationUs()prima che sia pronto (#2315). - Risolto il problema relativo all'invio di
CmcdDatanelle richieste di manifest per DASH, HLS e SmoothStreaming (#2253). - Assicurati che
AdPlaybackState.withAdDurationsUs(long[][])possa essere utilizzato dopo la rimozione dei gruppi di annunci. L'utente deve comunque passare un array di durate per i gruppi di annunci rimossi, che può essere vuoto o nullo (#2267).
- Estrattori:
- MP4: analizza
alternate_groupdalla casellatkhded esponilo come voceMp4AlternateGroupDatanellaFormat.metadatadi ogni traccia (#2242).
- MP4: analizza
- Audio:
- Risolto il problema di offload per cui la posizione poteva bloccarsi durante la riproduzione di una playlist di contenuti brevi (#1920).
- Sessione:
- Riduci il timeout di aggregazione per i callback della piattaforma
MediaSessionda 500 a 100 millisecondi e aggiungi un setter sperimentale per consentire alle app di configurare questo valore. - Risolto il problema per cui le notifiche riapparivano dopo essere state ignorate dall'utente (#2302).
- Risolto un bug per cui la sessione restituiva una cronologia con un singolo elemento quando il player con wrapping era effettivamente vuoto. Questo accadeva quando il player con wrapping non aveva
COMMAND_GET_TIMELINEdisponibile, mentreCOMMAND_GET_CURRENT_MEDIA_ITEMera disponibile e il player con wrapping era vuoto (#2320). - È stato corretto un bug per cui la chiamata di
MediaSessionService.setMediaNotificationProviderveniva ignorata senza avvisi dopo altre interazioni con il servizio, ad esempiosetForegroundServiceTimeoutMs(#2305).
- Riduci il timeout di aggregazione per i callback della piattaforma
- UI:
- Abilita
PlayerSurfaceper lavorare conExoPlayer.setVideoEffectseCompositionPlayer. - Risolto il bug per cui
PlayerSurfacenon può essere ricomposto con un nuovoPlayer.
- Abilita
- Estensione HLS:
- Risolto il problema per cui la durata del chunk non veniva impostata in
CmcdDataper i contenuti multimediali HLS, causando un errore di asserzione durante l'elaborazione di segmenti multimediali criptati (#2312).
- Risolto il problema per cui la durata del chunk non veniva impostata in
- Estensione RTSP:
- Aggiunto il supporto per l'URI con schema RTSPT come modo per configurare la sessione RTSP per l'utilizzo di TCP (#1484).
- Estensione Cast:
- Aggiunto il supporto per i metadati delle playlist (#2235).
1.6.0
26 marzo 2025
androidx.media3:media3-*:1.6.0 è stato rilasciato. La versione 1.6.0 contiene questi commit.
- Libreria comune:
- Aggiungi
AudioManagerCompateAudioFocusRequestCompatper sostituire le classi equivalenti inandroidx.media. - Esegui l'upgrade di Kotlin dalla versione 1.9.20 alla versione 2.0.20 e utilizza il plug-in Gradle del compilatore Compose. Esegui l'upgrade della libreria KotlinX Coroutines dalla versione 1.8.1 alla versione 1.9.0.
- Rimuovi il metodo
Format.toBundle(boolean excludeMetadata)e utilizzaFormat.toBundle(). - Risolto un bug in
SimpleBasePlayerper cui l'impostazione di un nuovocurrentMediaItemIndexinStatedoposetPlaylistconnullMediaMetadatanon rivaluta i metadati (#1940). - Modifica l'accesso a
SimpleBasePlayer.Stateda protetto a pubblico per semplificare la gestione degli aggiornamenti in altre classi (#2128).
- Aggiungi
- ExoPlayer:
- Aggiungi
MediaExtractorCompat, una nuova classe che fornisce funzionalità equivalenti alla piattaformaMediaExtractor. - Aggiungi il supporto sperimentale per il preriscaldamento di "ExoPlayer" per la riproduzione utilizzando
MediaCodecVideoRenderer. Puoi configurareDefaultRenderersFactorytramiteexperimentalSetEnableMediaCodecVideoRendererPrewarmingper fornire unMediaCodecVideoRenderersecondario aExoPlayer. Se l'opzione è attiva,ExoPlayerpre-elabora il video degli elementi multimediali consecutivi durante la riproduzione per ridurre la latenza di transizione degli elementi multimediali. - Riduci i valori predefiniti per
bufferForPlaybackMsebufferForPlaybackAfterRebufferMsinDefaultLoadControlrispettivamente a 1000 e 2000 ms. - Inizializza
DeviceInfoe il volume del dispositivo in modo asincrono (se attivato utilizzandosetDeviceVolumeControlEnabled). Questi valori non sono disponibili immediatamente dopoExoPlayer.Builder.build()ePlayer.Listenernotifica le modifiche tramiteonDeviceInfoChangedeonDeviceVolumeChanged. - L'ID sessione audio iniziale non è più immediatamente disponibile dopo la creazione del player. Se necessario, puoi utilizzare
AnalyticsListener.onAudioSessionIdChangedper ascoltare l'aggiornamento iniziale. - Tieni conto della lingua quando selezioni una traccia video. Per impostazione predefinita, seleziona una traccia video "principale" che corrisponda alla lingua della traccia audio selezionata, se disponibile. Le preferenze esplicite sulla lingua dei video possono essere espresse con
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Aggiungi il parametro
selectedAudioLanguageal metodoDefaultTrackSelector.selectVideoTrack(). - Aggiungi il parametro
retryCountaMediaSourceEventListener.onLoadStartede ai metodiMediaSourceEventListener.EventDispatchercorrispondenti. - Risolto un bug per cui gli elementi o i periodi della playlist negli stream DASH multiperiodo con durate che non corrispondono ai contenuti effettivi potevano causare il blocco dei frame alla fine dell'elemento (#1698).
- Sposta
BasePreloadManager.Listenerin unPreloadManagerListenerdi primo livello. RenderersFactory.createSecondaryRendererpuò essere implementato per fornire renderer secondari per il preriscaldamento. Il pre-warming consente transizioni più rapide degli elementi multimediali durante la riproduzione.- Attiva l'invio di
CmcdDataper le richieste di manifest nei formati di streaming adattivo DASH, HLS e SmoothStreaming (#1951). - Fornisci
MediaCodecInfodel codec che verrà inizializzato inMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Modifica
AdsMediaSourceper consentire l'espansione diAdPlaybackStatesaggiungendo gruppi di annunci. Le modifiche non valide vengono rilevate e generano un'eccezione. - Risolto il problema per cui potrebbero essere visualizzati frame aggiuntivi di sola decodifica in rapida successione durante la transizione ai contenuti multimediali dopo un annuncio mid-roll.
- Fai in modo che
DefaultRenderersFactoryaggiunga due istanzeMetadataRendererper consentire alle app di ricevere due schemi diversi di metadati per impostazione predefinita. - Rivalutare se il caricamento in corso di un chunk deve essere annullato quando la riproduzione è in pausa (#1785).
- Aggiunta dell'opzione a
ClippingMediaSourceper consentire il clipping nei contenuti multimediali non ricercabili. - Risolto un bug per cui la ricerca con preriscaldamento poteva bloccare la transizione dell'elemento multimediale successivo.
- Correzione di un bug per cui
ExoPlayer.isLoading()rimanetruementre è passato aSTATE_IDLEoSTATE_ENDED(#2133). - Aggiunta di
lastRebufferRealtimeMsaLoadControl.Parameter(#2113).
- Aggiungi
- Transformer:
- Aggiungi il supporto per il transmuxing in formati alternativi compatibili con le versioni precedenti.
- Aggiungi il supporto per la transcodifica e il transmuxing del formato Dolby Vision (profilo 8).
- Aggiorna i parametri di
VideoFrameProcessor.registerInputStreameVideoFrameProcessor.Listener.onInputStreamRegisteredper utilizzareFormat. - Genera metadati statici HDR quando utilizzi
DefaultEncoderFactory. - Attiva il supporto per la diagnostica della piattaforma Android utilizzando
MediaMetricsManager. Transformer inoltra gli eventi di modifica e i dati sul rendimento alla piattaforma, il che aiuta a fornire informazioni sul rendimento del sistema e informazioni di debug sul dispositivo. Questi dati possono anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostica è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per Transformer conTransformer.Builder.setUsePlatformDiagnostics(false). - Suddividi
InAppMuxerinInAppMp4MuxereInAppFragmentedMp4Muxer. UtilizzaInAppMp4Muxerper produrre un file MP4 non frammentato, mentreInAppFragmentedMp4Muxerserve per produrre un file MP4 frammentato. - Sposta l'interfaccia
Muxerdamedia3-muxeramedia3-transformer. - Aggiungi
MediaProjectionAssetLoader, che fornisce contenuti multimediali da unMediaProjectionper la registrazione dello schermo, e aggiungi il supporto per la registrazione dello schermo all'app demo Transformer. - Aggiungi
#getInputFormat()all'interfacciaCodec. - Sposta la responsabilità di rilasciare
GlObjectsProvidersul chiamante inDefaultVideoFrameProcessoreDefaultVideoCompositorquando possibile.
- Estrattori:
- AVI: corretta la gestione dei file con audio compresso a bitrate costante in cui l'intestazione dello stream memorizza il numero di byte anziché il numero di blocchi.
- Risolto il problema di gestione delle unità NAL con lunghezze espresse in 1 o 2 byte (anziché 4).
- Correzione di
ArrayIndexOutOfBoundsExceptionnegli elenchi di modifica MP4 quando l'elenco di modifica inizia in un frame non sincronizzato senza un frame sincronizzato precedente (#2062). - Risolto il problema per cui gli stream TS potevano bloccarsi su alcuni dispositivi (#2069).
- FLAC: aggiunta del supporto per i file FLAC a 32 bit. In precedenza, la riproduzione di questi contenuti non riusciva con
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Audio:
- Correggi
onAudioPositionAdvancingin modo che venga chiamato quando la riproduzione riprende (in precedenza veniva chiamato quando la riproduzione veniva messa in pausa). - Non bypassare
SonicAudioProcessorquandoSpeedChangingAudioProcessorè configurato con i parametri predefiniti. - Correzione dell'underflow in
Sonic#getOutputSize()che potrebbe causare il blocco diDefaultAudioSink. - Correggi
MediaCodecAudioRenderer.getDurationToProgressUs()eDecoderAudioRenderer.getDurationToProgressUs()in modo che le ricerche reimpostino correttamente le durate fornite. - Rendi
androidx.media3.common.audio.SonicAudioProcessordefinitivo. - Aggiungi il supporto per il PCM con virgola mobile a
ChannelMappingAudioProcessoreTrimmingAudioProcessor.
- Correggi
- Video:
- Modifica
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacein protected in modo che le applicazioni possano eseguire l'override per bloccare l'utilizzo delle superfici segnaposto (#1905). - È stata aggiunta l'analisi sperimentale delle dipendenze dei sample AV1
ExoPlayerper velocizzare la ricerca. Attivalo con la nuova APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - Aggiunta dell'API
ExoPlayersperimentale per eliminare i buffer di input del decoderMediaCodecVideoRendererin ritardo che non sono dipendenti. Attivalo conDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * Risolto un problema per cui un player senza una superficie era pronto immediatamente e la decodifica di eventuali frame in attesa era molto lenta (#1973). - Escludi i dispositivi Xiaomi e OPPO dalla modalità di superficie scollegata per evitare lo sfarfallio dello schermo (#2059).
- Modifica
- Testo:
- Aggiunto il supporto per i sottotitoli VobSub (#8260).
- Interrompi il caricamento eager di tutti i file dei sottotitoli configurati con
MediaItem.Builder.setSubtitleConfigurationse carica solo un file se è selezionato dalla selezione della traccia (#1721). - TTML: aggiunto il supporto per fare riferimento a
tts:originetts:extentutilizzandostyle(#2953). - Limita i timestamp WebVTT e SubRip a esattamente 3 cifre decimali. In precedenza, analizzavamo erroneamente un numero qualsiasi di cifre decimali, ma presupponevamo sempre che il valore fosse in millisecondi, il che generava timestamp errati (#1997).
- Risolto il problema di blocco della riproduzione quando una playlist contiene elementi tagliati con sottotitoli codificati CEA-608 o CEA-708.
- Risolto il problema di
IllegalStateExceptionquando un file SSA contiene un cue con durata pari a zero (ora di inizio e di fine uguali) (#2052). - Elimina (e registra) gli errori di analisi dei sottotitoli quando i sottotitoli vengono sottoposti a muxing nello stesso container di audio e video (#2052).
- Risolto il problema di gestione dei caratteri UTF-8 multibyte nei file WebVTT che utilizzano i fine riga CR (#2167).
- DRM:
- Risolto l'errore
MediaCodec$CryptoException: Operation not supported in this configurationdurante la riproduzione di contenuti ClearKey su dispositivi con API < 27 (#1732).
- Risolto l'errore
- Effetto:
- La funzionalità di
OverlaySettingsè stata spostata inStaticOverlaySettings.OverlaySettingspuò essere sottoclassato per consentire impostazioni di overlay dinamiche.
- La funzionalità di
- Muxer:
MuxerExceptionè stato spostato fuori dall'interfacciaMuxerper evitare un nome completo molto lungo.- Il metodo
setSampleCopyEnabled()è stato rinominato insetSampleCopyingEnabled()sia inMp4Muxer.Builderche inFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()eFragmentedMp4Muxer.addTrack()ora restituiscono un ID tracciaintanzichéTrackToken.Mp4MuxereFragmentedMp4Muxernon implementano più l'interfacciaMuxer.- Disattiva la copia e il raggruppamento in batch dei campioni
Mp4Muxerper impostazione predefinita. - Correggi un bug in
FragmentedMp4Muxerche crea molti frammenti quando viene scritta solo la traccia audio.
- Sessione:
- Mantieni lo stato del servizio in primo piano per altri 10 minuti quando la riproduzione viene messa in pausa, interrotta o non va a buon fine. In questo modo, gli utenti possono riprendere la riproduzione entro questo
timeout senza rischiare restrizioni dei servizi in primo piano su vari
dispositivi. Tieni presente che la semplice chiamata a
player.pause()non può più essere utilizzata per interrompere il servizio in primo piano prima distopSelf()quando esegui l'override dionTaskRemoved, utilizza inveceMediaSessionService.pauseAllPlayersAndStopSelf(). - Mantieni la notifica visibile quando la riproduzione entra in uno stato di errore o di interruzione. La notifica viene rimossa solo se la playlist viene cancellata o se il player viene rilasciato.
- Miglioramento della gestione delle azioni MediaSession della piattaforma Android ACTION_PLAY e ACTION_PAUSE per impostarne solo una in base ai comandi disponibili e accettare anche se ne viene impostata solo una.
- Aggiunta di
Contextcome parametro aMediaButtonReceiver.shouldStartForegroundService(#1887). - Risolto un bug per cui la chiamata di un metodo
Playersu unMediaControllerconnesso a una sessione precedente eliminava le modifiche di un aggiornamento in attesa. - Fai in modo che
MediaSession.setSessionActivity(PendingIntent)accetti null (#2109). - È stato corretto un bug per cui una notifica obsoleta rimaneva visibile quando la playlist veniva cancellata (#2211).
- Mantieni lo stato del servizio in primo piano per altri 10 minuti quando la riproduzione viene messa in pausa, interrotta o non va a buon fine. In questo modo, gli utenti possono riprendere la riproduzione entro questo
timeout senza rischiare restrizioni dei servizi in primo piano su vari
dispositivi. Tieni presente che la semplice chiamata a
- UI:
- Aggiungi contenitori di stato e componibili al modulo
media3-ui-composeperPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateePlaybackSpeedState.
- Aggiungi contenitori di stato e componibili al modulo
- Download:
- Correzione di un bug in
CacheWriterche lascia aperte le origini dati e bloccate le aree della cache nel caso in cui l'origine dati generi unExceptiondiverso daIOException(#9760).
- Correzione di un bug in
- Estensione HLS:
- Aggiungi una prima versione di
HlsInterstitialsAdsLoader. Il caricatore di annunci legge gli interstitial HLS di una playlist multimediale HLS e li mappa alAdPlaybackStatepassato aAdsMediaSource. Questa versione iniziale supporta solo gli stream VOD HLS con attributiX-ASSET-URI. - Aggiungi
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Le app possono utilizzarlo per creare istanzeAdsMediaSourceche utilizzano unHlsInterstitialsAdsLoaderin modo comodo e sicuro. - Analizza il tag
SUPPLEMENTAL-CODECSdalla playlist HLS per rilevare i formati Dolby Vision (#1785). - Allentata la condizione per la ricerca delle posizioni di sincronizzazione in uno stream HLS (#2209).
- Aggiungi una prima versione di
- Estensione DASH:
- Aggiunto il supporto del formato AC-4 Level-4 per DASH (#1898).
- Risolto il problema relativo al calcolo dell'intervallo di aggiornamento per l'inserimento di annunci nei live streaming multi-periodo (#1698).
- Analizza l'attributo
scte214:supplementalCodecsdal manifest DASH per rilevare i formati Dolby Vision (#1785). - Miglioramento della gestione delle transizioni dei periodi nei live streaming in cui il periodo contiene sample multimediali oltre la durata del periodo dichiarata (#1698).
- Risolto il problema per cui i set di adattamento contrassegnati con
adaptation-set-switching, ma con lingue o flag di ruolo diversi, venivano uniti (#2222).
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Aggiunto il modulo del decodificatore MPEG-H che utilizza il decodificatore MPEG-H integrato per decodificare l'audio MPEG-H (#1826).
- Estensione MIDI:
- Collega le istanze
AudioSinkeAudioRendererEventListenerpersonalizzate aMidiRenderer.
- Collega le istanze
- Estensione Cast:
- Esegui l'upgrade della dipendenza
play-services-cast-frameworkalla versione 21.5.0 per correggere un arresto anomalo diFLAG_MUTABLEnelle app che hanno come target l'API 34 e versioni successive sui dispositivi con Google Play Services installato, ma disattivato (#2178).
- Esegui l'upgrade della dipendenza
- App demo:
- Estendi
demo-composecon pulsanti aggiuntivi e migliora l'integrazione diPlayerSurfacecon il supporto per la scalabilità e l'otturatore.
- Estendi
- Rimuovi i simboli deprecati:
- Rimuovi il metodo
AudioMixer.create()deprecato. Usa inveceDefaultAudioMixer.Factory().create(). - Rimuovi i seguenti metodi
Transformer.Builderdeprecati:setTransformationRequest(), utilizza invecesetAudioMimeType(),setVideoMimeType()esetHdrMode().setAudioProcessors(), imposta il processore audio in unEditedMediaItem.Builder.setEffects()e passalo aTransformer.start().setVideoEffects(), imposta l'effetto video in unEditedMediaItem.Builder.setEffects()e passalo aTransformer.start().setRemoveAudio(), utilizzaEditedMediaItem.Builder.setRemoveAudio()per rimuovere l'audio daEditedMediaItempassato aTransformer.start().setRemoveVideo(), utilizzaEditedMediaItem.Builder.setRemoveVideo()per rimuovere il video daEditedMediaItempassato aTransformer.start().setFlattenForSlowMotion(), utilizzaEditedMediaItem.Builder.setFlattenForSlowMotion()per appiattireEditedMediaItempassato aTransformer.start().setListener(), utilizza inveceaddListener(),removeListener()oremoveAllListeners().
- Rimuovi i seguenti metodi
Transformer.Listenerdeprecati:onTransformationCompleted(MediaItem), utilizza inveceonCompleted(Composition, ExportResult).onTransformationCompleted(MediaItem, TransformationResult), utilizza inveceonCompleted(Composition, ExportResult).onTransformationError(MediaItem, Exception), utilizza inveceonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationException), utilizza inveceonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationResult, TransformationException), utilizza inveceonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), utilizza inveceonFallbackApplied(Composition, TransformationRequest, TransformationRequest).
- Rimuovi la classe
TransformationResultdeprecata. Usa inveceExportResult. - Rimuovi la classe
TransformationExceptiondeprecata. Usa inveceExportException. - Rimuovi
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONdeprecato. Usa inveceTransformer.PROGRESS_STATE_NOT_STARTED. - Rimuovi
Transformer.setListener()deprecato. Utilizza inveceTransformer.addListener(),Transformer.removeListener()oTransformer.removeAllListeners(). - Rimuovi
Transformer.startTransformation()deprecato. Usa inveceTransformer.start(MediaItem, String). - Rimuovi
SingleFrameGlShaderProgramdeprecato. Usa inveceBaseGlShaderProgram. - Rimuovi
Transformer.flattenForSlowMotion. Usa inveceEditedMediaItem.flattenForSlowMotion. ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponenteExoPlayer.DeviceComponentrimosse.- Contatto rimosso:
androidx.media3.exoplayer.audio.SonicAudioProcessor. - Sono stati rimossi i seguenti metodi
DownloadHelperdeprecati:- Costruttore
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), utilizza inveceDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). getRendererCapabilities(RenderersFactory), è possibile ottenere una funzionalità equivalente creando unDefaultRendererCapabilitiesListcon unRenderersFactorye chiamandoDefaultRendererCapabilitiesList.getRendererCapabilities().- Metodo
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)rimosso. UtilizzaPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)e passa(MediaSession.Token) compatToken.getToken().
- Costruttore
- Rimuovi il metodo
1.6.0-rc02
19 marzo 2025
Utilizza la versione stabile 1.6.0.
1.6.0-rc01
12 marzo 2025
Utilizza la versione stabile 1.6.0.
1.6.0-beta01
26 febbraio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha03
6 febbraio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha02
30 gennaio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha01
20 dicembre 2024
Utilizza la versione stabile 1.6.0.
Versione 1.5
Versione 1.5.1
19 dicembre 2024
androidx.media3:media3-*:1.5.1 è stato rilasciato. La versione 1.5.1 contiene questi commit.
- ExoPlayer:
- Disattiva l'utilizzo della decrittografia asincrona in MediaCodec per evitare problemi di timeout del codec segnalati con questa API della piattaforma (#1641).
- Estrattori:
- MP3: non interrompere la riproduzione in anticipo quando il sommario di un frame
VBRInon copre tutti i dati MP3 di un file (#1904).
- MP3: non interrompere la riproduzione in anticipo quando il sommario di un frame
- Video:
- Rollback dell'utilizzo dei valori delle proporzioni dei pixel forniti da
MediaCodecAdapterquando forniti durante l'elaborazione dionOutputFormatChanged(#1371).
- Rollback dell'utilizzo dei valori delle proporzioni dei pixel forniti da
- Testo:
- È stato corretto il bug in
ReplacingCuesResolver.discardCuesBeforeTimeUsper cui il cue attivo intimeUs(iniziato prima, ma non ancora terminato) veniva ignorato erroneamente (#1939).
- È stato corretto il bug in
- Metadati:
- Estrai la numerazione dei dischi/delle tracce e il genere dai commenti Vorbis in
MediaMetadata(#1958).
- Estrai la numerazione dei dischi/delle tracce e il genere dai commenti Vorbis in
Versione 1.5.0
27 novembre 2024
androidx.media3:media3-*:1.5.0 è stato rilasciato. La versione 1.5.0 contiene questi commit.
- Libreria comune:
- Aggiunta di
ForwardingSimpleBasePlayerche consente l'inoltro a un altro player con piccole modifiche, garantendo al contempo la piena coerenza e la gestione degli ascoltatori (#1183). - Sostituisci il metodo
SimpleBasePlayer.State.playlistcon il metodogetPlaylist(). - Aggiungi l'override per
SimpleBasePlayer.State.Builder.setPlaylist()per specificare direttamente unTimelinee iTrackseMetadataattuali anziché creare una struttura di playlist. - Aumenta
minSdka 21 (Android Lollipop). Questo è in linea con tutte le altre librerie AndroidX. - Aggiungi l'artefatto
androidx.media3:media3-common-ktxche fornisce funzionalità specifiche di Kotlin basate sulla libreria comune - Aggiungi la funzione di estensione di sospensione
Player.listenper avviare una coroutine per ascoltarePlayer.Eventsnella libreriamedia3-common-ktx. - Rimuovi le annotazioni
@DoNotInlinedalle classi interne non in linea manualmente progettate per evitare errori di verifica delle classi di runtime. Le versioni recenti di R8 ora eseguono automaticamente l'out-of-lining di chiamate come queste per evitare errori di runtime (quindi l'out-of-lining manuale non è più necessario). Tutti gli utenti Gradle della libreria devono già utilizzare una versione del plug-in Android Gradle che utilizza una versione di R8 che esegue questa operazione, a causa dicompileSdk = 35. Gli utenti della libreria con sistemi di build non Gradle dovranno assicurarsi che il passaggio di riduzione/offuscamento equivalente a R8 esegua un processo di out-of-lining automatico simile per evitare errori di verifica della classe di runtime. Questa modifica è già stata apportata in altre librerie AndroidX.
- Aggiunta di
- ExoPlayer:
- Ora
MediaCodecRenderer.onProcessedStreamChange()può essere chiamato per ogni elemento multimediale. In precedenza, non veniva chiamato per il primo. UtilizzaMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()per attivare questa opzione. - Aggiungi
PreloadMediaSource.PreloadControl.onPreloadErrorper consentire alle implementazioni diPreloadMediaSource.PreloadControldi intraprendere azioni quando si verifica un errore. - Aggiungi
BasePreloadManager.Listenerper propagare gli eventi precaricati alle app. - Consenti la modifica del timeout del client SNTP e riprova con indirizzi alternativi in caso di timeout (#1540).
- Rimuovi
MediaCodecAdapter.Configuration.flagsperché il campo era sempre pari a zero. - Consenti all'utente di selezionare l'altoparlante integrato per la riproduzione su Wear OS API 35 e versioni successive (se il dispositivo dichiara di supportare questa funzionalità).
- Rimanda la chiamata di blocco a
Context.getSystemService(Context.AUDIO_SERVICE)finché non viene attivata la gestione della priorità audio. In questo modo, la chiamata di blocco non viene eseguita se la gestione della priorità audio non è attiva (#1616). - Consenti la riproduzione indipendentemente dalla durata del buffering quando il caricamento non va a buon fine (#1571).
- Aggiungi
AnalyticsListener.onRendererReadyChanged()per segnalare quando i singoli renderer consentono la riproduzione. - È stato corretto l'errore
MediaCodec.CryptoExceptionche a volte veniva segnalato come "errore di runtime imprevisto" quandoMediaCodecveniva utilizzato in modalità asincrona (comportamento predefinito nell'API 31 e versioni successive). - Passa
bufferedDurationUsanzichébufferedPositionUsconPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Inoltre, modificaDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSinDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, le app devono quindi passare un valore che rappresenta una durata specifica dalla posizione di inizio predefinita per la quale l'origine multimediale corrispondente deve essere precaricata con questo IntDef, anziché una posizione. - Aggiunta l'implementazione di
ForwardingRendererche inoltra tutte le chiamate al metodo a un altro renderer (1703). - Aggiungi il precaricamento della playlist per l'elemento successivo nella playlist. Le app possono attivare il precaricamento chiamando
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)di conseguenza. Per impostazione predefinita, il precaricamento è disattivato. Se l'utente ha attivato questa opzione, per non interferire con la riproduzione,DefaultLoadControllimita il precaricamento in modo che inizi e continui solo quando il player non sta caricando per la riproduzione. Le app possono modificare questo comportamento implementandoLoadControl.shouldContinuePreloading()di conseguenza (ad esempio quando viene eseguito l'override di questo metodo inDefaultLoadControl). L'implementazione predefinita diLoadControldisattiva il precaricamento nel caso in cui un'app utilizzi un'implementazione personalizzata diLoadControl. - Aggiunto il metodo
MediaSourceEventListener.EventDispatcher.dispatchEvent()per consentire l'attivazione di eventi dei listener di sottoclassi (1736). - Aggiungi
DefaultPreloadManager.Builderche crea le istanzeDefaultPreloadManagereExoPlayercon configurazioni condivise in modo coerente. - Rimuovi il parametro
Renderer[]daLoadControl.onTracksSelected(), poiché l'implementazione diDefaultLoadControlpuò recuperare i tipi di stream daExoTrackSelection[]. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])è stato ritirato e il metodo è stato contrassegnato come finale per impedire gli override. Utilizza invece il nuovoDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]).- Segnala
MediaSourceEventListenereventi da origini secondarie inMergingMediaSource. In questo modo, verranno segnalati gli eventi di avvio/errore/annullamento/completamento del caricamento per i sottotitoli caricati lateralmente (quelli aggiunti conMediaItem.LocalConfiguration.subtitleConfigurations), che potrebbero apparire come eventi di caricamento duplicati emessi daAnalyticsListener. - Evita che gli errori relativi ai sottotitoli e ai metadati interrompano completamente la riproduzione.
Invece, la traccia problematica viene disattivata e la riproduzione delle tracce rimanenti continua (#1722).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), gli errori di analisi associati (ad es. dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) vengono emessi tramite i callback
onLoadError. - Nella gestione dei sottotitoli legacy (durante il rendering), vengono emessi solo gli errori di caricamento associati tramite i callback
onLoadError, mentre gli errori di analisi vengono ignorati senza avvisi (questo è il comportamento preesistente).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), gli errori di analisi associati (ad es. dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) vengono emessi tramite i callback
- Risolto un bug per cui gli elementi o i periodi della playlist negli stream DASH multiperiodo con durate che non corrispondono ai contenuti effettivi potevano causare il blocco dei frame alla fine dell'elemento (#1698).
- Aggiungi un setter a
SntpClientper impostare il tempo massimo trascorso dall'ultimo aggiornamento dopo il quale il client viene reinizializzato (#1794).
- Ora
- Transformer:
- Aggiungi
SurfaceAssetLoader, che supporta l'accodamento dei dati video a Transformer tramite unSurface. ImageAssetLoadersegnala un input non supportato tramiteAssetLoader.onErroranziché generare unIllegalStateException.- Rendi obbligatoria l'impostazione della durata dell'immagine utilizzando
MediaItem.Builder.setImageDurationMsper l'esportazione delle immagini. - Aggiunto il supporto per l'esportazione di lacune nelle sequenze di EditedMediaItem audio.
- Aggiungi
- Selezione della traccia:
DefaultTrackSelector: preferisci l'audio basato su oggetti rispetto all'audio basato su canali quando altri fattori sono uguali.
- Estrattori:
- Consenti a
Mp4ExtractoreFragmentedMp4Extractordi identificare i campioni H264 che non vengono utilizzati come riferimento dai campioni successivi. - Aggiungi l'opzione per attivare la ricerca basata su indice in
AmrExtractor. - Tratta i file MP3 con più di 128 kB tra frame validi come troncati (anziché non validi). Ciò significa che i file con dati non MP3 alla fine, senza altri metadati che indicano la lunghezza dei byte MP3, ora interrompono la riproduzione alla fine dei dati MP3 anziché non riuscire con
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Risolto il problema relativo alla gestione dei sample di preroll per le posizioni di inizio dei contenuti multimediali non keyframe durante l'elaborazione degli elenchi di modifica nei file MP4 (#1659).
- Miglioramento del calcolo della frequenza fotogrammi utilizzando la durata dei contenuti multimediali dalla casella
mdhdinMp4ExtractoreFragmentedMp4Extractor(#1531). - Risolto il problema di scalabilità errata di
media_timenegli elenchi di modifica MP4. Mentresegment_durationera già scalato correttamente utilizzando la scala temporale del filmato,media_timeora è scalato correttamente utilizzando la scala temporale della traccia, come specificato dallo standard del formato MP4 (#1792). - Gestisci i frame non in ordine nel calcolo di
endIndicesper MP4 con elenco di modifica (#1797). - Correzione dell'analisi della durata dei contenuti multimediali nella casella
mdhddei file MP4 per gestire i valori-1(#1819). - Aggiunto il supporto per l'identificazione della casella
h263nei file MP4 per i video H.263 (#1821). - Aggiunto il supporto del formato file multimediale di base ISO AC-4 Level-4 (#1265).
- Consenti a
- DataSource:
- Aggiorna
HttpEngineDataSourceper consentire l'utilizzo a partire dalla versione S estensione 7 anziché dal livello API 34 (#1262). DataSourceContractTest: verifica cheDataSource.getUri()restituisca l'URI risolto (come documentato). Se questo è diverso dall'URI della richiesta, i test possono indicarlo utilizzando il nuovo metodoDataSourceContractTest.TestResource.Builder.setResolvedUri().DataSourceContractTest: verifica cheDataSource.getUri()egetResponseHeaders()restituiscano il valore "open" dopo una chiamata non riuscita aopen()(a causa di una risorsa "non trovata") e prima di una chiamataclose()successiva.- L'override di
DataSourceContractTest.getNotFoundResources()consente alle sottoclassi di test di fornire più risorse "non trovate" e di fornire anche eventuali intestazioni previste. In questo modo è possibile distinguere tra HTTP 404 (con intestazioni) e "server non trovato" (senza intestazioni).
- L'override di
- Aggiorna
- Audio:
- Configura automaticamente i metadati di volume CTA-2075 sul codec se presenti nei contenuti multimediali.
- Assicurati che il volume si abbassi gradualmente durante la ricerca.
- Risoluzione dei problemi relativi ai suoni di scoppio che potrebbero verificarsi durante le ricerche.
- Risolto l'accumulo di errori di troncamento per l'algoritmo di estensione del tempo/variazione del tono di Sonic.
- Correzione di un bug in
SpeedChangingAudioProcessorche causa l'interruzione dei frame di output.
- Video:
MediaCodecVideoRendererevita di decodificare i campioni che non vengono visualizzati né utilizzati come riferimento da altri campioni.- Nell'API 35 e versioni successive,
MediaCodecAdapterora potrebbe ricevere unnullSurfaceinconfiguree chiamate a un nuovo metododetachOutputSurfaceper rimuovere unSurfaceimpostato in precedenza se il codec lo supporta (MediaCodecInfo.detachedSurfaceSupported). - Utilizza i valori delle proporzioni pixel forniti da
MediaCodecAdapter, se presenti, durante l'elaborazione dionOutputFormatChanged(#1371). - Aggiunta una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE che causa la marcatura degli stream H264 sicuri a 60 fps come non supportati (#1619).
- Aggiunta di una soluzione alternativa per i codec che si bloccano dopo l'ultimo campione senza restituire un segnale di fine stream.
- Testo:
- Aggiungi un
VoiceSpanpersonalizzato e compilalo per gli intervalli vocali WebVTT (#1632). - Assicurati che i file WebVTT in HLS con timestamp dei sottotitoli molto grandi (che superano un
longa 64 bit se rappresentati come microsecondi e moltiplicati per la base temporale MPEG90,000) vengano visualizzati (#1763). - Supporto dei sottotitoli CEA-608 nei contenuti Dolby Vision (#1820).
- Risolto il problema di blocco della riproduzione negli stream DASH multi-periodo quando i sottotitoli CEA-608 sono attivi (#1863).
- Aggiungi un
- Metadati:
- Assegna il tipo
C.TRACK_TYPE_METADATAalle tracce contenenti contenuti icy o vnd.dvb.ait.
- Assegna il tipo
- Immagine:
- Aggiungi
ExternallyLoadedImageDecoderper un'integrazione semplificata con librerie di caricamento delle immagini esterne come Glide o Coil.
- Aggiungi
- DataSource:
- Aggiunta di
FileDescriptorDataSource, un nuovoDataSourceche può essere utilizzato per leggere da unFileDescriptor(#3757).
- Aggiunta di
- Effetto:
- Aggiungi una soluzione alternativa
DefaultVideoFrameProcessorper la scalabilitàSurfaceTextureminore.SurfaceTexturepotrebbe includere un piccolo ridimensionamento che taglia un bordo di 1 texel attorno al bordo di un buffer ritagliato. Ora questo problema è stato risolto in modo che l'output sia più vicino al previsto. - Velocizza
DefaultVideoFrameProcessor.queueInputBitmap(). Di conseguenza, l'esportazione di immagini in video conTransformerè più veloce.
- Aggiungi una soluzione alternativa
- Estensione IMA:
- Risolto un bug per cui la cancellazione della playlist poteva causare un
ArrayIndexOutOfBoundsExceptioninImaServerSideAdInsertionMediaSource. - È stato corretto un bug per cui gli stream DAI inseriti lato server senza un preroll possono generare un
ArrayIndexOutOfBoundsExceptionquando la riproduzione supera l'ultimo midroll (#1741).
- Risolto un bug per cui la cancellazione della playlist poteva causare un
- Sessione:
- Aggiungi
MediaButtonReceiver.shouldStartForegroundService(Intent)per consentire alle app di eliminare un comando di riproduzione in arrivo per la ripresa della riproduzione eseguendo l'override di questo metodo. Per impostazione predefinita, il servizio viene sempre avviato e la riproduzione non può essere soppressa senza che il sistema arresti in modo anomalo il servizio con unForegroundServiceDidNotStartInTimeException(#1528). - Risolto un bug che causava l'invio di comandi personalizzati da un
MediaBrowseraMediaSessionCompat.Callbackanziché alla varianteMediaBrowserServiceCompatdel metodo quando era connesso a un servizio legacy. Ciò ha impedito aMediaBrowserdi ricevere il valore restituito effettivo inviato dal servizio legacy (#1474). - Gestisci l'eccezione
IllegalArgumentExceptiongenerata dai dispositivi di alcuni produttori quando imposti il broadcast receiver per gli intent dei pulsanti multimediali (#1730). - Aggiungi pulsanti di comando per gli elementi multimediali. In questo modo, viene aggiunta l'API Media3 per quello che era noto come
Custom browse actionscon la libreria precedente conMediaBrowserCompat. Tieni presente che con Media3 i pulsanti di comando per gli elementi multimediali sono disponibili sia perMediaBrowserche perMediaController. Consulta Implementa azioni di navigazione personalizzate. * Risolto un bug per cui a volte un controller Media3 non era in grado di consentire a un'app di sessione di avviare un servizio in primo piano dopo aver richiestoplay(). - Limita
CommandButton.Builder.setIconUriin modo che accetti solo URI dei contenuti. - Passa i suggerimenti di connessione di un browser Media3 al
MediaBrowserCompatiniziale quando ti connetti a unMediaBrowserCompatprecedente. Il servizio può ricevere i suggerimenti di connessione passati come suggerimenti principali con la prima chiamata aonGetRoot(). - Risolto un bug per cui un
MediaBrowserconnesso a un servizio browser legacy non riceveva un errore inviato dal servizio dopo che il browser si era iscritto a unparentid. - Migliorare il comportamento di interoperabilità, in modo che un browser Media3 connesso a un
MediaBrowserServiceprecedente non richieda due volte gli elementi secondari di unparentIdquando si iscrive a un elemento principale.
- Aggiungi
- UI:
- Rendi facoltativo l'uso della soluzione alternativa per i video allungati/ritagliati in
PlayerView-in-Compose-AndroidView, a causa di problemi con le transizioni condivise basate su XML. Le app che utilizzanoPlayerViewall'interno diAndroidViewdevono chiamarePlayerView.setEnableComposeSurfaceSyncWorkaroundper l'attivazione (#1237, #1594). - Aggiungi
setFullscreenButtonStateaPlayerViewper consentire gli aggiornamenti dell'icona del pulsante a schermo intero on demand, ovvero fuori banda e non in modo reattivo a un'interazione con un clic (#1590, #184). - Risolto il bug per cui l'opzione "Nessuna" nella selezione del testo non funziona se sono presenti preferenze di selezione delle tracce di testo definite dall'app.
- Rendi facoltativo l'uso della soluzione alternativa per i video allungati/ritagliati in
- Estensione DASH:
- Aggiunto il supporto per i periodi che iniziano nel mezzo di un segmento (#1440).
- Estensione Smooth Streaming:
- È stato corretto un errore
Bad magic number for Bundledurante la riproduzione di stream SmoothStreaming con tracce di testo (#1779).
- È stato corretto un errore
- Estensione RTSP:
- Estensioni del decoder (FFmpeg, VP9, AV1 e così via):
- Aggiungi il modulo del decoder IAMF, che fornisce il supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- La riproduzione è abilitata con un layout stereo e 5.1 con spazializzazione, oltre al tracciamento della testa facoltativo, ma il supporto della riproduzione binaurale non è attualmente disponibile.
- Aggiunto il supporto delle pagine da 16 kB per le estensioni del decoder su Android 15 (#1685).
- Aggiungi il modulo del decoder IAMF, che fornisce il supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- Estensione Cast:
- Interrompi la pulizia della cronologia dopo la disconnessione di CastSession, in modo che l'app mittente possa riprendere la riproduzione localmente dopo una disconnessione.
- Compila
DeviceInfodi CastPlayer quando viene fornito unContext. In questo modo è possibile collegareMediaSessionaRoutingSession, operazione necessaria per l'integrazione del Selettore di output (#1056).
- Utilità di test:
DataSourceContractTestora include test per verificare:- Lo stream di input
read positionè stato aggiornato. - Il buffer di output
offsetè stato applicato correttamente.
- Lo stream di input
- App demo
- Risolvi le perdite di memoria nell'app demo per i contenuti nel formato breve (#1839).
- Rimuovi i simboli deprecati:
- Rimuovi
Player.hasPrevious,Player.hasPreviousWindow()deprecati. Usa invece il descrittorePlayer.hasPreviousMediaItem(). - Rimuovi il metodo
Player.previous()deprecato. Usa invecePlayer.seekToPreviousMediaItem(). - Rimuovi il metodo
DrmSessionEventListener.onDrmSessionAcquireddeprecato. - Rimuovi i costruttori
DefaultEncoderFactorydeprecati. Usa inveceDefaultEncoderFactory.Builder.
- Rimuovi
Versione 1.5.0-rc02
19 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-rc01
13 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-beta01
30 ottobre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-alpha01
10 settembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.4.0
Versione 1.4.1
27 agosto 2024
androidx.media3:media3-*:1.4.1 è stato rilasciato. La versione 1.4.1 contiene questi commit.
- ExoPlayer:
- Estrattori:
- MP3: è stato corretto l'errore
Searched too many bytesignorando correttamente i dati non MP3 finali in base al campo della lunghezza in un frameInfo(#1480).
- MP3: è stato corretto l'errore
- Testo:
- TTML: è stata corretta la gestione dei valori percentuali di
tts:fontSizeper garantire che vengano ereditati correttamente dai nodi principali con valori percentuali ditts:fontSize. - Correzione di
IndexOutOfBoundsExceptioninLegacySubtitleUtila causa di una gestione errata del caso in cui l'ora di inizio dell'output richiesto è maggiore o uguale all'ora dell'evento finale inSubtitle(#1516).
- TTML: è stata corretta la gestione dei valori percentuali di
- DRM:
- Correggi l'errore
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEsui dispositivi con API 31 e versioni successive che riproducono contenuti Widevine L1. Questo errore è causato da un'implementazione incompleta del metodoMediaDrm.requiresSecureDecoderdel framework (#1603).
- Correggi l'errore
- Effetto:
- Aggiungi un metodo
release()aGlObjectsProvider.
- Aggiungi un metodo
- Sessione:
- Trasforma un doppio tocco di
KEYCODE_HEADSETHOOKin un'azione "vai al successivo", come documentato (#1493). - Gestisci
KEYCODE_HEADSETHOOKcome comando "play" inMediaButtonReceiverquando decidi se ignorarlo per evitare unForegroundServiceDidNotStartInTimeException(#1581).
- Trasforma un doppio tocco di
- Estensione RTSP:
- Salta le descrizioni dei contenuti multimediali non valide nell'analisi SDP (#1087).
Versione 1.4.0
25 luglio 2024
androidx.media3:media3-*:1.4.0 è stato rilasciato. La versione 1.4.0 contiene questi commit.
- Libreria comune:
- Inoltra le chiamate di ricerca presunte no-op ai metodi protetti
BasePlayer.seekTo()eSimpleBasePlayer.handleSeek()anziché ignorarle. Se implementi questi metodi in un player personalizzato, potresti dover gestire queste chiamate aggiuntive conmediaItemIndex == C.INDEX_UNSET. - Rimuovi la dipendenza di compilazione dal desugaring Java 8 avanzato (#1312).
- Assicurati che la durata passata a
MediaItem.Builder.setImageDurationMs()venga ignorata per unMediaItemnon immagine (come documentato). - Aggiungi
Format.customDataper archiviare le informazioni personalizzate fornite dall'app sulle istanzeFormat.
- Inoltra le chiamate di ricerca presunte no-op ai metodi protetti
- ExoPlayer:
- Aggiungi
BasePreloadManager, che coordina il precaricamento per più origini in base alle priorità definite dai relativirankingData. La personalizzazione è possibile estendendo questa classe. AggiungiDefaultPreloadManager, che utilizzaPreloadMediaSourceper precaricare in memoria i sample multimediali delle origini, e un numero interorankingDatache indica l'indice di un elemento nell'interfaccia utente. - Aggiungi
PlayerIdalla maggior parte dei metodi diLoadControlper consentire alle implementazioni diLoadControldi supportare più giocatori. - Rimuovi
Buffer.isDecodeOnly()eC.BUFFER_FLAG_DECODE_ONLY. Non è necessario impostare questo flag, poiché i renderer e i decoder decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate diRendererdevono verificare se l'intervallo è almeno pari aBaseRenderer.getLastResetPositionUs()per decidere se mostrare un campione. Le implementazioni personalizzate diSimpleDecoderpossono controllareisAtLeastOutputStartTimeUs()se necessario o contrassegnare altri buffer conDecoderOutputBuffer.shouldBeSkippedper saltarli. - Consenti la restituzione di un valore null da parte di
TargetPreloadStatusControl.getTargetPreloadStatus(T)per indicare di non precaricare unMediaSourcecon ilrankingDataspecificato. - Aggiungi
remove(MediaSource)aBasePreloadManager. - Aggiungi
reset()aBasePreloadManagerper rilasciare tutte le fonti di conservazione, mantenendo l'istanza del gestore del precaricamento. - Aggiungi
ExoPlayer.setPriority()(eBuilder.setPriority()) per definire il valore di priorità utilizzato inPriorityTaskManagere per l'importanza di MediaCodec dall'API 35. - Risolto il problema relativo all'aggiornamento dell'ultimo tempo di rebuffering che causava una chiave
bs(esaurimento del buffer) errata in CMCD (#1124). - Aggiungi
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)per indicare che la fonte è stata caricata fino alla fine. In questo modo, le implementazioni diDefaultPreloadManagerePreloadMediaSource.PreloadControlpersonalizzate possono precaricare la sorgente successiva o eseguire altre azioni. - Risolto un bug per cui il salto dei silenzi alla fine degli elementi poteva attivare un'eccezione di riproduzione.
- Aggiungi
clearaPreloadMediaSourceper ignorare il periodo di precaricamento. - Aggiungi un nuovo codice di errore
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDche viene utilizzato quando le risorse del codec vengono recuperate per attività con priorità più alta. - Consenti a
AdsMediaSourcedi caricare gli annunci pre-roll prima del completamento della preparazione iniziale dei contenuti multimediali (#1358). - Risolto un bug per cui la riproduzione si spostava su
STATE_ENDEDdurante la preparazione di un live streaming DASH multi-periodo dopo che il periodo originale era già stato rimosso dal manifest. - Rinomina
onTimelineRefreshed()inonSourcePrepared()eonPrepared()inonTracksSelected()inPreloadMediaSource.PreloadControl. Rinomina anche gli IntDef inDefaultPreloadManager.Stagedi conseguenza. - Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro ai cicli di attivazione della CPU e ritardare l'attivazione fino a quando i renderer non possono procedere.
Puoi attivare questa opzione utilizzando
experimentalSetDynamicSchedulingEnabled()quando configuri l'istanza ExoPlayer. - Aggiungi
Renderer.getDurationToProgressUs(). UnRendererpuò implementare questo metodo per restituire a ExoPlayer la durata di avanzamento della riproduzione necessaria per consentire al renderer di procedere. SeExoPlayerè impostato conexperimentalSetDynamicSchedulingEnabled(),ExoPlayerchiamerà questo metodo quando calcola il tempo per pianificare la sua attività di lavoro. - Aggiungi
MediaCodecAdapter#OnBufferAvailableListenerper ricevere un avviso quando i buffer di input e output sono disponibili per l'utilizzo da parte diMediaCodecRenderer.MediaCodecRenderersegnaleràExoPlayerquando riceve questi callback e, seExoPlayerè impostato conexperimentalSetDynamicSchedulingEnabled(),ExoPlayerpianificherà il suo loop di lavoro man mano che i renderer avanzano. - Utilizza la classe di dati per i metodi
LoadControlanziché i singoli parametri. - Aggiungi
ExoPlayer.isReleased()per verificare seExoplayer.release()è stato chiamato. - Aggiunta di
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()per configurare la posizione massima per cuiseekToPrevious()cerca l'elemento precedente (#1425). - Correzione di alcune incoerenze del focus audio, ad esempio la mancata segnalazione della perdita di focus completa o temporanea mentre il player è in pausa (#1436).
- Risolto un potenziale
IndexOutOfBoundsExceptioncausato dagli estrattori che segnalavano tracce aggiuntive dopo il passaggio di preparazione iniziale (#1476). EffectsinExoPlayer.setVideoEffect()riceverà i timestamp con l'offset del renderer rimosso (#1098).- Risolto un potenziale
IllegalArgumentExceptiondurante la gestione dell'errore del player che si verificava durante la lettura anticipata di un altro elemento della playlist (#1483).
- Aggiungi
- Transformer:
- Aggiungi
audioConversionProcessevideoConversionProcessaExportResultper indicare come è stata creata la rispettiva traccia nel file di output. - Allenta i controlli del livello H.264 per l'ottimizzazione del taglio.
- Aggiungi il supporto per il passaggio tra contenuti multimediali di input SDR e HDR in una sequenza.
- Aggiungi il supporto per gli effetti audio a livello di composizione.
- Aggiungi il supporto per la transcodifica delle immagini Ultra HDR in video HDR.
- Risolvi il problema per cui
DefaultAudioMixernon genera la quantità corretta di byte dopo essere stato reimpostato e riutilizzato. - Risolto un bug del decoder per cui il numero di canali audio era limitato allo stereo durante la gestione dell'input PCM.
- Quando selezioni le tracce in
ExoPlayerAssetLoader, ignora i vincoli relativi al numero di canali audio, poiché si applicano solo alla riproduzione. - Sostituisci l'interfaccia
androidx.media3.transformer.Muxerconandroidx.media3.muxer.Muxere rimuoviandroidx.media3.transformer.Muxer. - Risolto il problema di caricamento delle immagini HEIC dagli schemi URI dei contenuti. (#1373).
- Regola la durata della traccia audio in
AudioGraphInputper migliorare la sincronizzazione AV. - Rimuovi il campo
ExportResult.processedInputs. Se utilizzi questo campo per i dettagli del codec, utilizza inveceDefaultDecoderFactory.listener. In caso di eccezione del codec, i dettagli del codec saranno disponibili inExportException.codecInfo.
- Aggiungi
- Estrattori:
- MPEG-TS: esegui il roll forward della modifica assicurandoti che l'ultimo frame venga visualizzato passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Incorporazione di correzioni per risolvere i problemi emersi negli stream HLS solo con I-frame(#1150) e negli stream HLS H.262 (#1126).
- MP3: preferisci le dimensioni dei dati di un frame
Inforispetto alle dimensioni segnalate dallo stream sottostante (ad es. dimensioni del file o intestazione HTTPContent-Length). In questo modo, i dati dei trailer non riproducibili (ad es. la copertina dell'album) vengono esclusi dai calcoli di ricerca del bitrate costante, rendendo le ricerche più accurate (#1376). - MP3: utilizza il conteggio dei frame e altri dati in un frame
Info(se presente) per calcolare un bitrate medio per la ricerca di bitrate costante, anziché estrapolare dal bitrate del frame dopo il frameInfo, che potrebbe essere artificialmente piccolo, ad esempio il framePCUT(#1376). - Risolto il problema di estrazione del formato audio PCM nei container AVI.
- Audio:
- Correzione degli attributi di codifica DTS:X Profile 2 per la riproduzione passthrough (#1299).
- Per la riproduzione offloaded, reimposta il campo di monitoraggio per il completamento dello stream in
DefaultAudioSinkprima di chiamareAudioTrack.stop()in modo cheAudioTrack.StreamEventCallback#onPresentationEndedidentifichi correttamente quando sono stati riprodotti tutti i dati in attesa. - Correzione di un bug in
SilenceSkippingAudioProcessorper cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) possono causare la generazione di un'eccezione da parte del processore (#1352). - Implementa
MediaCodecAudioRenderer.getDurationToProgressUs()in modo che ExoPlayer pianifichi dinamicamente il suo ciclo di lavoro principale in base a quando MediaCodecAudioRenderer può avanzare.
- Video:
- Risolto il problema per cui
Listener.onRenderedFirstFrame()arrivava troppo presto quando si cambiava superficie durante la riproduzione. - Correzione della logica di fallback del decodificatore per Dolby Vision per utilizzare un decodificatore AV1 compatibile, se necessario (#1389).
- Risolto un problema relativo all'eccezione del codec che potrebbe essere causato dall'attivazione di un renderer video durante la riproduzione.
- Risolto il problema per cui
- Testo:
- Risolto il problema per cui i sottotitoli che iniziano prima di una posizione di ricerca vengono saltati. Questo problema è stato introdotto solo in Media3 1.4.0-alpha01.
- Modifica il comportamento di analisi dei sottotitoli predefinito in modo che avvenga durante l'estrazione anziché durante il rendering (consulta il diagramma dell'architettura di ExoPlayer per la differenza tra estrazione e rendering).
- Questa modifica può essere sostituita chiamando sia
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)cheTextRenderer.experimentalSetLegacyDecodingEnabled(true). Consulta la documentazione sulla personalizzazione per scoprire come collegare questi componenti a un'istanzaExoPlayer. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli legacy) verranno rimossi in una release futura. - Le app con implementazioni
SubtitleDecoderpersonalizzate devono essere aggiornate per implementareSubtitleParser(eSubtitleParser.FactoryanzichéSubtitleDecoderFactory).
- Questa modifica può essere sostituita chiamando sia
- PGS: correzione della decodifica run-length per risolvere
0come indice di colore, anziché come valore di colore letterale (#1367). - CEA-708: ignora il valore
rowLock. La specifica CEA-708-E S-2023 stabilisce cherowLockecolumnLockdevono essere considerati entrambi true, indipendentemente dai valori presenti nello stream (il supporto dicolumnLocknon è implementato, quindi si presume che sia sempre false).- Questa modifica era stata originariamente inclusa nelle note di rilascio di
1.3.0-alpha01, ma è stata accidentalmente annullata prima della release1.3.0-rc01. Il problema è stato risolto, quindi la modifica è di nuovo presente.
- Questa modifica era stata originariamente inclusa nelle note di rilascio di
- CEA-708: evita l'aggiunta di nuove righe duplicate da parte della gestione ingenua del comando "set pen location" di ExoPlayer (#1315).
- Correzione di un'eccezione
IllegalArgumentExceptiondaLegacySubtitleUtilquando un esempio di sottotitoli WebVTT non contiene cue, ad esempio come parte di uno stream DASH (#1516).
- Metadati:
- Correzione della mappatura dei tag di ordinamento da MP4 a ID3. In precedenza, i tag MP4 "album sort" (
soal), "artist sort" (soar) e "album artist sort" (soaa) venivano mappati erroneamente ai tag ID3TSO2,TSOAeTSOP(#1302). - Correzione della lettura dei tag numerici MP4 (/iTunes)
gnre(genere) etmpo(tempo) quando il valore è più lungo di un byte. - Propagazione del frame ID3
TCONinMediaMetadata.genre(#1305).
- Correzione della mappatura dei tag di ordinamento da MP4 a ID3. In precedenza, i tag MP4 "album sort" (
- Immagine:
- Aggiunto il supporto per le griglie di miniature DASH non quadrate (#1300).
- Aggiungi il supporto per AVIF per l'API 34 e versioni successive.
- Consenti
nullcome parametro perExoPlayer.setImageOutput()per cancellare unImageOutputimpostato in precedenza.
- DataSource:
- Implementa il supporto per gli URI delle risorse non elaborate
android.resource://package/id, dovepackageè diverso dal pacchetto dell'applicazione corrente. In precedenza non era stato documentato che funzionasse, ma è un modo più efficiente per accedere alle risorse in un altro pacchetto rispetto al nome. - Controlla con attenzione che
urlnon sia null nei costruttoriDataSpec. Questo parametro è già stato annotato come non null. - Consenti a
ByteArrayDataSourcedi risolvere un URI in un array di byte duranteopen(), anziché essere hardcoded durante la creazione (#1405).
- Implementa il supporto per gli URI delle risorse non elaborate
- DRM:
- Consenti l'impostazione di un
LoadErrorHandlingPolicysuDefaultDrmSessionManagerProvider(#1271).
- Consenti l'impostazione di un
- Effetto:
- Supporta più modifiche della velocità all'interno dello stesso
EditedMediaItemoCompositioninSpeedChangeEffect. - Supporto per l'output HLG e PQ dall'input bitmap Ultra HDR.
- Aggiunto il supporto di EGL_GL_COLORSPACE_BT2020_HLG_EXT, che migliora l'output della superficie HLG in ExoPlayer.setVideoEffect e in SurfaceView di debug di Transformer.
- Aggiorna l'implementazione della matrice di overlay per renderla coerente con la documentazione invertendo i valori x e y applicati in
setOverlayFrameAnchor(). Se utilizziOverlaySettings.Builder.setOverlayFrameAnchor(), inverti i valori x e y moltiplicandoli per-1. - È stato corretto un bug per cui
TimestampWrappersi arrestava in modo anomalo se utilizzato conExoPlayer#setVideoEffects(#821). - Cambia lo spazio di lavoro dei colori SDR predefinito da colori lineari a video BT 709 SDR elettrico. Fornisce anche una terza opzione per mantenere lo spazio colore originale.
- Consenti la definizione di un ordine z indeterminato di EditedMediaItemSequences (#1055).
- Mantenere un intervallo di luminanza coerente tra i diversi contenuti HDR (utilizza l'intervallo HLG).
- Aggiungi il supporto per gli overlay Ultra HDR (bitmap) sui contenuti HDR.
- Consenti l'utilizzo degli effetti
SeparableConvolutionprima dell'API 26. - Rimuovi
OverlaySettings.useHdrnon utilizzato, poiché l'intervallo dinamico dell'overlay e del frame deve corrispondere. - Aggiungi il supporto HDR per
TextOverlay. La luminanza dell'overlay di testo può essere regolata conOverlaySettings.Builder.setHdrLuminanceMultiplier().
- Supporta più modifiche della velocità all'interno dello stesso
- Estensione IMA:
- Promuovere l'API richiesta per la riproduzione degli stream di annunci DAI da parte delle app alla versione stabile.
- Aggiungi
replaceAdTagParameters(Map <String, String>)aImaServerSideAdInsertionMediaSource.AdLoaderper consentire la sostituzione dei parametri dei tag annuncio in fase di runtime. - È stato corretto il bug per cui
VideoAdPlayer.VideoAdPlayerCallback.onError()non veniva chiamato quando si verificava un errore del player durante la riproduzione dell'annuncio (#1334). - Aggiorna la versione dell'SDK IMA alla 3.33.0 per correggere un
NullPointerExceptionquando utilizzi gli URI dei tag annunciodata://(#700).
- Sessione:
- Modifica il valore predefinito di
CommandButton.enabledintruee assicurati che il valore possa rimanere false per i controller anche se il comando associato è disponibile. - Aggiungi costanti di icone per
CommandButtonda utilizzare al posto delle risorse di icone personalizzate. - Aggiunta di
MediaSessionService.isPlaybackOngoing()per consentire alle app di verificare se il servizio deve essere interrotto inonTaskRemoved()(#1219). - Aggiungi
MediaSessionService.pauseAllPlayersAndStopSelf(), che consente comodamente di mettere in pausa la riproduzione di tutte le sessioni, e chiamastopSelf()per terminare il ciclo di vita diMediaSessionService. - Esegui l'override di
MediaSessionService.onTaskRemoved(Intent)per fornire un'implementazione predefinita sicura che mantenga il servizio in esecuzione in primo piano se la riproduzione è in corso o interrompa il servizio in caso contrario. - Nascondi la barra di ricerca nella notifica multimediale per i live streaming non impostando la durata nei metadati della sessione della piattaforma (#1256).
- Allinea la conversione di
MediaMetadataaMediaDescriptionCompatper utilizzare lo stesso ordine e la stessa logica preferiti durante la selezione delle proprietà dei metadati come in media1. - Aggiungi
MediaSession.sendError()che consente di inviare errori non irreversibili al controller Media3. Quando utilizzi il controller di notifica (vediMediaSession.getMediaNotificationControllerInfo()), l'errore personalizzato viene utilizzato per aggiornarePlaybackStatedella sessione della piattaforma in uno stato di errore con le informazioni sull'errore fornite (#543). - Aggiungi
MediaSession.Callback.onPlayerInteractionFinished()per informare le sessioni quando una serie di interazioni del player da un controller specifico è terminata. - Aggiungi
SessionErrore utilizzalo inSessionResulteLibraryResultanziché il codice di errore per fornire ulteriori informazioni sull'errore e su come risolverlo, se possibile. - Pubblica il codice per l'app di test del controller media3 che può essere utilizzata per testare le interazioni con le app che pubblicano una sessione multimediale.
- Propaga gli extra passati a
MediaSession[Builder].setSessionExtras()di media3 aPlaybackStateCompat.getExtras()di un controller media1. - Mappa gli errori irreversibili e non irreversibili da e verso la sessione della piattaforma. Un
PlaybackExceptionviene mappato a uno stato di errore irreversibile diPlaybackStateCompat. UnSessionErrorinviato al controller delle notifiche multimediali conMediaSession.sendError(ControllerInfo, SessionError)viene mappato a un errore non irreversibile inPlaybackStateCompat, il che significa che il codice di errore e il messaggio sono impostati, ma lo stato della sessione della piattaforma rimane diverso daSTATE_ERROR. - Consenti l'impostazione dell'attività della sessione per controller per eseguire l'override dell'attività della sessione globale. L'attività della sessione può essere definita per un controller al momento della connessione creando un
ConnectionResultconAcceptedResultBuilder.setSessionActivivty(PendingIntent). Una volta stabilita la connessione, l'attività della sessione può essere aggiornata conMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - Migliora la replica degli errori delle chiamate a
MediaLibrarySession.Callback. La replica degli errori ora può essere configurata utilizzandoMediaLibrarySession.Builder.setLibraryErrorReplicationMode()per scegliere il tipo di errore o disattivare la replica degli errori, che è attiva per impostazione predefinita.
- Modifica il valore predefinito di
- UI:
- Aggiunto il supporto per la visualizzazione delle immagini a
PlayerViewquando è connesso a unExoPlayer(#1144). - Aggiunta la personalizzazione di varie icone in
PlayerControlViewtramite attributi XML per consentire diversi elementi drawable per istanzaPlayerView, anziché override globali (#1200). - È stato risolto un bug della piattaforma che causava l'allungamento/il ritaglio del video quando si utilizzava
SurfaceViewall'interno di unAndroidViewdi Compose nell'API 34 (#1237).
- Aggiunto il supporto per la visualizzazione delle immagini a
- Download:
- Assicurati che
DownloadHelpernon perda istanzeRenderernon rilasciate, il che potrebbe causare l'arresto anomalo di un'app conIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- Assicurati che
- Estensione Cronet:
- Correggi
SocketTimeoutExceptioninCronetDataSource. In alcune versioni di Cronet, la richiesta fornita dal callback non è sempre la stessa. Ciò comporta il mancato completamento del callback e il timeout della richiesta (https://issuetracker.google.com/328442628).
- Correggi
- Estensione HLS:
- Risolto un bug per cui i sample EMSG in attesa di una discontinuità venivano delegati in
HlsSampleStreamWrappercon un offset errato che causava unIndexOutOfBoundsExceptiono unIllegalArgumentException(#1002). - È stato corretto il bug per cui le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
- È stato corretto un bug per cui l'attivazione di CMCD per HLS con segmenti di inizializzazione generava
Source ErroreIllegalArgumentException. - È stato corretto il bug per cui le playlist in riproduzione non principali non venivano aggiornate durante la riproduzione in diretta (#1240).
- Risolto il bug per cui l'attivazione di CMCD per i live streaming HLS causava
ArrayIndexOutOfBoundsException(#1395).
- Risolto un bug per cui i sample EMSG in attesa di una discontinuità venivano delegati in
- Estensione DASH:
- Estensione Cast:
- Correzione di un bug che convertiva il titolo dell'album di
MediaQueueItemnell'artista nell'elemento multimediale Media3 (#1255).
- Correzione di un bug che convertiva il titolo dell'album di
- Utilità di test:
- Implementa
onInit()eonRelease()inFakeRenderer. - Modifica i metodi
TestPlayerRunHelper.runUntil()/playUntil()in modo che non vadano a buon fine in caso di errori non irreversibili (ad es. quelli segnalati aAnalyticsListener.onVideoCodecError()). Utilizza la nuova catena di metodiTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()per disattivare questo comportamento.
- Implementa
- App demo:
- Utilizza
DefaultPreloadManagernell'app demo per i contenuti nel formato breve. - Consenti l'impostazione della modalità repeat con gli argomenti
Intentdalla riga di comando (#1266). - Utilizza
HttpEngineDataSourcecomeHttpDataSourcese supportato dal dispositivo.
- Utilizza
- Rimuovi i simboli deprecati:
- Rimuovi
CronetDataSourceFactory. Usa inveceCronetDataSource.Factory. - Rimuovi alcuni costruttori
DataSpec. Usa invece il descrittoreDataSpec.Builder. - Rimuovi il metodo
setContentTypePredicate(Predicate)daDefaultHttpDataSource,OkHttpDataSourceeCronetDataSource. Utilizza invece il metodo equivalente su ogniXXXDataSource.Factory. - Rimuovi i costruttori
OkHttpDataSourceeOkHttpDataSourceFactory. Usa invece il descrittoreOkHttpDataSource.Factory. - Rimuovi
PlayerMessage.setHandler(Handler). Usa invecesetLooper(Looper). - Rimuovi il campo
Timeline.Window.isLive. Utilizza invece il metodoisLive(). - Rimuovi
DefaultHttpDataSourcecostruttori. Usa inveceDefaultHttpDataSource.Factory. - Rimuovi
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Usa inveceDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS. - Rimuovi
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Usa invece il descrittoreMediaCodecInfo.canReuseCodec(Format, Format). - Rimuovi il metodo
DrmSessionManager.DUMMYegetDummyDrmSessionManager(). Usa invece il descrittoreDrmSessionManager.DRM_UNSUPPORTED. - Rimuovi
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Utilizza invece gli overload che accettano unDecoderReuseEvaluation. - Rimuovi
RendererSupport.FormatSupportIntDef e le costantiFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPE,FORMAT_UNSUPPORTED_TYPE. Utilizza invece l'IntDef e le costanti equivalenti inandroidx.media3.common.C(ad es.C.FORMAT_HANDLED). - Rimuovi l'interfaccia
Bundleable. Ciò include la rimozione di tutti i campi costantiBundleable.Creator<Foo> CREATOR. I chiamanti devono invece utilizzare i metodiBundle toBundle()estatic Foo fromBundle(Bundle)su ogni tipo.
- Rimuovi
Versione 1.4.0-rc01
10 luglio 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-beta01
26 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha02
7 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha01
17 aprile 2024
Utilizza la versione stabile 1.4.0.
Versione 1.3.0
Versione 1.3.1
11 aprile 2024
androidx.media3:media3-*:1.3.1 è stato rilasciato. La versione 1.3.1 contiene questi commit.
- Libreria comune:
- Aggiungi
Format.labelsper consentire etichette localizzate o altre etichette alternative.
- Aggiungi
- ExoPlayer:
- Risolvi il problema per cui
PreloadMediaPeriodnon riesce a conservare gli stream quando viene precaricato di nuovo. - Applica il
TrackSelectionResultcorrispondente corretto al periodo di riproduzione nella riselezione della traccia. - Avvia i renderer abilitati in anticipo solo dopo aver fatto avanzare il periodo di riproduzione durante la transizione tra elementi multimediali (#1017).
- Aggiungi il tipo restituito mancante alla regola proguard
-keepclasseswithmembersperDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- Risolvi il problema per cui
- Transformer:
- Aggiunta una soluzione alternativa per l'eccezione generata perché
MediaMuxernon supporta i timestamp di presentazione negativi prima dell'API 30.
- Aggiunta una soluzione alternativa per l'eccezione generata perché
- Selezione della traccia:
DefaultTrackSelector: preferisci le tracce video con una frequenza fotogrammi "ragionevole" (>=10 fps) rispetto a quelle con una frequenza fotogrammi inferiore o non impostata. In questo modo, il player seleziona la traccia video "reale" negli MP4 estratti dalle foto in movimento che possono contenere due tracce HEVC, una con una risoluzione più elevata, ma un numero molto ridotto di frame (#1051).
- Estrattori:
- Risolto il problema per cui il padding non veniva saltato durante la lettura di blocchi di dimensioni dispari dai file WAV (#1117).
- MP3: compila
Format.averageBitratedai frame dei metadati, ad esempioXINGeVBRI. - MPEG-TS: è stata annullata una modifica volta a garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Questo è dovuto alla modifica che causa nuovi problemi con gli stream HLS solo I-frame (#1150) e gli stream HLS H.262 (#1126).
- Audio:
- Consenti il ripristino del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità di offload.
- Video:
- Aggiunta di una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la marcatura degli stream H265 a 60 f/s come non supportati
- Aggiunta una soluzione alternativa che garantisce che il primo frame venga sempre visualizzato durante il tunneling, anche se il dispositivo non lo fa automaticamente come richiesto dall'API (#1169). (#966).
- Risolto il problema per cui la gestione delle informazioni sui colori HDR causava un comportamento anomalo del codec e impediva i cambi di formato adattivo per le tracce video SDR (#1158).
- Testo:
- WebVTT: impedisci ai cue consecutivi di creare istanze
CuesWithTimingaggiuntive spurie daWebvttParser.parse(#1177).
- WebVTT: impedisci ai cue consecutivi di creare istanze
- DRM:
- È stato aggirato un problema relativo a
NoSuchMethodErrorche può essere generato dal frameworkMediaDrmanziché daResourceBusyExceptionoNotProvisionedExceptionsu alcuni dispositivi Android 14 (#1145).
- È stato aggirato un problema relativo a
- Effetto:
- Migliorata la mappatura tonale da PQ a SDR tramite la conversione degli spazi dei colori.
- Sessione:
- UI:
- Fallback per includere il nome della lingua della traccia audio se
Localenon riesce a identificare un nome visualizzato (#988).
- Fallback per includere il nome della lingua della traccia audio se
- Estensione DASH:
- Compila tutti gli elementi
Labeldel manifest inFormat.labels(#1054).
- Compila tutti gli elementi
- Estensione RTSP:
- Ignora i valori vuoti delle informazioni sulla sessione (tag i) nell'analisi SDP (#1087).
- Estensioni del decoder (FFmpeg, VP9, AV1, MIDI e così via):
- Disattiva l'estensione MIDI come dipendenza locale per impostazione predefinita perché richiede la configurazione di un repository Maven aggiuntivo. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riattivarlo.
Versione 1.3.0
6 marzo 2024
androidx.media3:media3-*:1.3.0 è stato rilasciato. La versione 1.3.0 contiene questi commit.
- Libreria comune:
- Implementa il supporto per gli URI delle risorse non elaborate
android.resource://package/[type/]name, dovepackageè diverso dal pacchetto dell'applicazione corrente. È sempre stato documentato che questa funzionalità funzionava, ma non era stata implementata correttamente fino ad ora. - Normalizza i tipi MIME impostati dal codice dell'app o letti dai contenuti multimediali in modo che siano completamente in minuscolo.
- Definisci gli annunci con un
MediaItemcompleto anziché con un singoloUriinAdPlaybackState. - Aumenta
minSdka 19 (Android KitKat). Questo è in linea con tutte le altre librerie AndroidX ed è necessario per eseguire l'upgrade alle ultime versioni delle nostre dipendenze AndroidX. - Compila sia
artworkUricheartworkDatainMediaMetadata.Builder.populate(MediaMetadata)quando almeno uno dei due non è null (#964).
- Implementa il supporto per gli URI delle risorse non elaborate
- ExoPlayer:
- Aggiungi
PreloadMediaSourceePreloadMediaPeriodper consentire alle app di precaricare un'origine multimediale di contenuti in una posizione di inizio specifica prima della riproduzione.PreloadMediaSourcesi occupa di preparare l'origine dei contenuti multimediali per ricevereTimeline, preparare e memorizzare nella cache il periodo nella posizione iniziale specificata, selezionare le tracce e caricare i dati multimediali per il periodo. Le app controllano l'avanzamento del precaricamento implementandoPreloadMediaSource.PreloadControle impostano l'origine precaricata sul player per la riproduzione. - Aggiungi
ExoPlayer.setImageOutputche consente alle app di impostareImageRenderer.ImageOutput. DefaultRenderersFactoryora fornisce unImageRendereral player per impostazione predefinita conImageOutputeImageDecoder.Factory.DEFAULTnull.- Attiva l'evento
Player.Listener.onPositionDiscontinuityquando il silenzio viene saltato (#765). - Aggiunto il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi
attivare questa funzionalità utilizzando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - Supporta origini multimediali adattive con
PreloadMediaSource. - Implementa
HttpEngineDataSource, unHttpDataSourceche utilizza l'API HttpEngine. - Impedisci la sottoclassificazione di
CompositeSequenceableLoader. Questo componente è stato precedentemente reso estensibile, ma non è mai stata creata una sottoclasse all'interno della libreria. Le personalizzazioni possono essere eseguite eseguendo il wrapping di un'istanza utilizzando il pattern decorator e implementando unCompositeSequenceableLoaderFactorypersonalizzato. - Risolto il problema per cui la ripetizione della stessa ora causava la cancellazione dei metadati di questo elemento (#1007).
- Rinomina i metodi
experimentalSetSubtitleParserFactorysuBundledChunkExtractor.FactoryeDefaultHlsExtractorFactoryinsetSubtitleParserFactorye non consentire il passaggio dinull. Utilizza i nuovi metodiexperimentalParseSubtitlesDuringExtraction(boolean)per controllare il comportamento di analisi. - Aggiungi il supporto per la personalizzazione del
SubtitleParser.Factoryutilizzato durante l'estrazione. Questo obiettivo può essere raggiunto conMediaSource.Factory.setSubtitleParserFactory(). - Aggiungi il prefisso dell'origine a tutti i campi
Format.idgenerati daMergingMediaSource. In questo modo è più facile identificare la fonte che ha generato unFormat(#883). - È stata corretta l'espressione regolare utilizzata per convalidare i nomi delle chiavi CMCD (Common Media Client Data) personalizzate modificandola in modo che controlli solo il trattino (#1028).
- Interruzione della doppia codifica dei parametri di query CMCD (#1075).
- Aggiungi
- Transformer:
- Aggiunto il supporto per l'appiattimento dei video in slow motion SEF H.265/HEVC.
- Aumenta la velocità di transmuxing, in particolare per le modifiche di "rimozione del video".
- Aggiungi l'API per assicurarti che il file di output inizi su un frame video. In questo modo, l'output delle operazioni di ritaglio può essere più compatibile con le implementazioni del player che non mostrano il primo frame del video fino al timestamp di presentazione (#829).
- Aggiunto il supporto per l'ottimizzazione delle operazioni di taglio di singoli asset MP4.
- Aggiungi il supporto per assicurarti che un frame video abbia il primo timestamp nel file di output. Corregge i file di output che iniziano con un frame nero sui player basati su iOS (#829).
- Selezione della traccia:
- Aggiungi
DefaultTrackSelector.selectImageTrackper attivare la selezione della traccia immagine. - Aggiungi
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledper determinare se selezionare una traccia immagine se sono disponibili sia una traccia immagine che una traccia video. Il valore predefinito èfalse, il che significa che la selezione di una traccia video ha la priorità.
- Aggiungi
- Estrattori:
- Aggiunta di un'ulteriore analisi AV1C all'estrattore MP4 per recuperare i valori
ColorInfo.colorSpace,ColorInfo.colorTransfereColorInfo.colorRange(#692). - MP3: utilizza la ricerca con velocità in bit costante (CBR) per i file con un'intestazione
Info(l'equivalente CBR dell'intestazioneXing). In precedenza utilizzavamo la tabella di ricerca dall'intestazioneInfo, ma questo comporta una ricerca meno precisa rispetto a quando la ignoriamo e supponiamo che il file sia CBR. - MPEG2-TS: aggiunto il supporto di DTS, DTS-LBR e DTS:X Profile2 (#275).
- Estrai i tipi di audio dai descrittori TS e mappali ai flag dei ruoli, consentendo agli utenti di effettuare selezioni delle tracce audio più consapevoli (#973).
- Aggiunta di un'ulteriore analisi AV1C all'estrattore MP4 per recuperare i valori
- Audio:
- Video:
- Modifica il costruttore
MediaCodecVideoRendererche accetta un argomentoVideoFrameProcessor.Factorye sostituiscilo con un costruttore che accetta un argomentoVideoSinkProvider. Le app che vogliono inserire unVideoFrameProcessor.Factorypersonalizzato possono creare un'istanza di unCompositingVideoSinkProviderche utilizza ilVideoFrameProcessor.Factorypersonalizzato e passare il provider del sink video aMediaCodecVideoRenderer.
- Modifica il costruttore
- Testo:
- È stata corretta la serializzazione dei cue bitmap per risolvere l'errore
Tried to marshall a Parcel that contained Binder objectsquando si utilizzaDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: ignora il valore
rowLock. La specifica CEA-708-E S-2023 stabilisce cherowLockecolumnLockdevono essere considerati entrambi true, indipendentemente dai valori presenti nello stream (il supporto dicolumnLocknon è implementato, quindi si presume che sia sempre false).
- È stata corretta la serializzazione dei cue bitmap per risolvere l'errore
- Immagine:
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e le singole miniature vengono fornite a
ImageOutputin prossimità degli orari di presentazione.
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e le singole miniature vengono fornite a
- DRM:
- Riproduci immediatamente i sample non criptati "clear lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i sample criptati successivi non sono ancora pronte. Ciò potrebbe causare blocchi durante la riproduzione se le chiavi non sono ancora pronte quando la posizione di riproduzione raggiunge i sample criptati (ma in precedenza la riproduzione non sarebbe stata avviata affatto a questo punto). Questo comportamento può essere disattivato con
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyoDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- Estensione IMA:
- Risolto il problema per cui gli annunci DASH e HLS senza l'estensione del file appropriata non possono essere riprodotti.
- Riproduci immediatamente i sample non criptati "clear lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i sample criptati successivi non sono ancora pronte. Ciò potrebbe causare blocchi durante la riproduzione se le chiavi non sono ancora pronte quando la posizione di riproduzione raggiunge i sample criptati (ma in precedenza la riproduzione non sarebbe stata avviata affatto a questo punto). Questo comportamento può essere disattivato con
- Sessione:
- Disattivato il rilevamento del doppio clic per le app TV (#962).
- Risolto il problema per cui
MediaItem.RequestMetadatacon solo extra non nulli non viene trasmesso tra i controller multimediali e le sessioni. - Aggiungi il costruttore a
MediaLibrarySession.Builderche accetta solo unContextanziché unMediaLibraryService.
- Estensione HLS:
- Riduci
HlsMediaPeriodalla visibilità privata del pacchetto. Questo tipo non deve essere utilizzato direttamente dall'esterno del pacchetto HLS. - Risolve le ricerche all'inizio di un segmento in modo più efficiente (#1031).
- Riduci
- Estensioni del decoder (FFmpeg, VP9, AV1, MIDI e così via):
- Decoder MIDI: ignora i messaggi di evento SysEx (#710).
- Utilità di test:
- Non mettere in pausa la riproduzione in
TestPlayerRunHelper.playUntilPosition. Il test mantiene la riproduzione in stato di riproduzione, ma sospende l'avanzamento finché non è in grado di aggiungere asserzioni e altre azioni.
- Non mettere in pausa la riproduzione in
- App demo:
- Aggiungi un modulo demo di formato breve per mostrare l'utilizzo di
PreloadMediaSourcecon il caso d'uso dei contenuti nel formato breve.
- Aggiungi un modulo demo di formato breve per mostrare l'utilizzo di
Versione 1.3.0-rc01
22 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-beta01
7 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-alpha01
15 gennaio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.2.0
Versione 1.2.1
9 gennaio 2024
- ExoPlayer:
- Risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
LiveConfiguration.min/maxOffsetcontinuano a regolare l'offset riportandolo amin/maxOffset. - Risolto il problema per cui i layout dei canali OPUS e VORBIS erano errati per 3, 5, 6, 7 e 8 canali (#8396).
- Risolto il problema per cui le selezioni delle tracce dopo la ricerca di zero in un live streaming consentivano erroneamente l'avvio dello stream nella posizione predefinita (#9347).
- Risolto il problema per cui le nuove istanze di
CmcdData.Factoryricevevano valori negativi perbufferedDurationUsdalle origini dei chunk, generando unIllegalArgumentException(#888).
- Risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
- Transformer:
- Risolto un problema per cui l'encoder generava un errore in fase di configurazione a causa dell'impostazione di una frequenza di funzionamento elevata.
- Estrattori:
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
ROLE_FLAG_ALTERNATEper evitare che vengano selezionate automaticamente per la riproduzione a causa della loro risoluzione più elevata. - Risolto il problema di rilevamento errato dei fotogrammi chiave per gli stream TS H264 (#864).
- Risolto il problema relativo alla stima della durata degli stream TS più lunghi di 47.721 secondi (#855).
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
- Audio:
- Correzione della gestione di EOS per
SilenceSkippingAudioProcessorquando viene chiamato più volte (#712).
- Correzione della gestione di EOS per
- Video:
- Aggiunta una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa l'indicazione degli stream AVC a 60 fps come non supportati (#693).
- Metadati:
- Risolto il bug per cui
MediaMetadataveniva compilato solo dai commenti Vorbis con chiavi in maiuscolo (#876). - Rileva
OutOfMemoryErrordurante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni dei tag anziché non riuscire completamente.
- Risolto il bug per cui
- DRM:
- Estensione della soluzione alternativa per l'URL della licenza ClearKey
https://default.urlspurio all'API 33 e versioni successive (in precedenza la soluzione alternativa si applicava solo all'API 33) (#837). - Correzione di
ERROR_DRM_SESSION_NOT_OPENEDdurante il passaggio da contenuti criptati a contenuti non criptati senza una superficie collegata al player. L'errore è stato causato dall'utilizzo errato di un decoder sicuro per riprodurre i contenuti non criptati.
- Estensione della soluzione alternativa per l'URL della licenza ClearKey
- Sessione:
- Inserisci le chiavi e i valori personalizzati in
MediaMetadataCompatinMediaMetadata.extraseMediaMetadata.extrasinMediaMetadataCompat(#756, #802). - Correzione della trasmissione
notifyChildrenChangedper i controller legacy (#644). - È stato corretto un bug per cui l'impostazione di un tempo negativo per un timer
setWhendisattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903). - Risolto il problema relativo a
IllegalStateExceptionquando il controller delle notifiche multimediali non ha completato la connessione quando viene richiesto il primo aggiornamento delle notifiche (#917).
- Inserisci le chiavi e i valori personalizzati in
- UI:
- Estensione DASH:
- Analizza "f800" come numero di canali pari a 5 per Dolby nel manifest DASH (#688).
- Estensioni del decoder (FFmpeg, VP9, AV1, MIDI e così via):
- Estensione Cast:
- Sanitizza la creazione di un
Timelineper evitare l'arresto anomalo dell'app quando il caricamento dei contenuti multimediali non va a buon fine sul dispositivo di trasmissione (#708).
- Sanitizza la creazione di un
Versione 1.2.0
15 novembre 2023
- Libreria comune:
- Aggiungi un parametro
@Nullable Throwableai metodi nell'interfacciaLog.Logger. Il parametromessagedi questi metodi non contiene più informazioni sulThrowablepassato ai metodiLog.{d,i,w,e}(), pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se necessario (possibilmente utilizzandoLogger.appendThrowableString(String, Throwable)). - Risolto il problema di compatibilità di Kotlin per cui i parametri di tipo generico nullable e i tipi di elementi di array nullable non vengono rilevati come nullable. Esempi
sono i parametri dei metodi
TrackSelectorResulteSimpleDecoder(#6792). - Modifica il comportamento predefinito della UI e delle notifiche in
Util.shouldShowPlayButtonper mostrare un pulsante "Riproduci" mentre la riproduzione è temporaneamente soppressa (ad esempio a causa della perdita temporanea del focus audio). Il comportamento precedente può essere mantenuto utilizzandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)oMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Esegui l'upgrade di
androidx.annotation:annotation-experimentala1.3.1per risolvere il problema https://issuetracker.google.com/251172715. - Sposta
ExoPlayer.setAudioAttributesnell'interfacciaPlayer.
- Aggiungi un parametro
- ExoPlayer:
- Risolti i problemi di ricerca negli stream AC4 causati dalla mancata identificazione corretta dei campioni di sola decodifica (#11000).
- Aggiungi la soppressione della riproduzione su dispositivi di output audio non adatti (ad es. l'altoparlante integrato sui dispositivi Wear OS) quando questa funzionalità è attivata tramite
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Il motivo della soppressione della riproduzione verrà aggiornato comePlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTse viene tentata la riproduzione quando non sono disponibili uscite audio adatte o se tutte le uscite adatte vengono disconnesse durante la riproduzione. Il motivo della soppressione verrà rimosso quando verrà collegata un'uscita adatta. - Aggiungi
MediaSource.canUpdateMediaItemeMediaSource.updateMediaItemper accettare gli aggiornamenti diMediaItemdopo la creazione tramitePlayer.replaceMediaItem(s). - Consenti gli aggiornamenti di
MediaItemper tutte le classiMediaSourcefornite dalla libreria tramitePlayer.replaceMediaItem(s)(#33, #9978). - Rinomina
MimeTypes.TEXT_EXOPLAYER_CUESinMimeTypes.APPLICATION_MEDIA3_CUES. - Aggiungi
PngExtractorche invia e legge un intero file PNG inTrackOutputcome un singolo campione. - Migliora il metodo
SequenceableLoader.continueLoading(long)nell'interfacciaSequenceableLoaderinSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfocontiene parametri aggiuntivi, tra cuiplaybackSpeedelastRebufferRealtimeMs, oltre all'esistenteplaybackPositionUs. - Migliora il metodo
ChunkSource.getNextChunk(long, long, List, ChunkHolder)nell'interfacciaChunkSourceperChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Aggiungi campi aggiuntivi al logging dei dati del client multimediale comune (CMCD): buffer starvation (
bs), scadenza (dl), velocità di riproduzione (pr) e avvio (su) (#8699). - Aggiunta della profondità di bit di luma e croma a
ColorInfo(#491). - Aggiunta di campi aggiuntivi al logging dei dati CMCD (Common Media Client Data): richiesta dell'oggetto successivo (
nor) e richiesta dell'intervallo successivo (nrr) (#8699). - Aggiunta della funzionalità per trasmettere i dati CMCD (Common Media Client Data) utilizzando i parametri di query (#553).
- È stato corretto
ConcurrentModificationExceptioninExperimentalBandwidthMeter(#612). - Aggiungi il parametro
MediaPeriodIdaCompositeMediaSource.getMediaTimeForChildMediaTime. - Supporto di
ClippingMediaSource(e altre origini con offset temporali di periodo/finestra) inConcatenatingMediaSource2(#11226). - Modifica
BaseRenderer.onStreamChanged()in modo che riceva anche un argomentoMediaPeriodId.
- Transformer:
- Analizza i dati di rotazione EXIF per gli input di immagini.
- Rimuovi il tipo di annotazione
TransformationRequest.HdrModee le relative costanti associate. Utilizza inveceComposition.HdrModee le costanti associate. - Semplifica il
OverlaySettingsper risolvere i problemi di rotazione. - I parametri
frameRateedurationUsdiSampleConsumer.queueInputBitmapsono stati modificati inTimestampIterator.
- Selezione della traccia:
- Aggiungi
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessper consentire o non consentire esplicitamente l'adattamento non continuo. L'impostazione predefinita rimane il comportamento attuale ditrue.
- Aggiungi
- Estrattori:
- MPEG-TS: assicurati che l'ultimo frame venga visualizzato passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909).
- Correzione di un errore di battitura durante la determinazione di
rotationDegrees. ModificatoprojectionPosePitchinprojectionPoseRoll(#461). - Rimuovi l'ipotesi che le istanze
Extractorpossano essere ispezionate direttamente coninstanceof. Se vuoi accedere in fase di runtime ai dettagli di implementazione di unExtractor, devi prima chiamareExtractor.getUnderlyingInstance. - Aggiungi
BmpExtractor. - Aggiungi
WebpExtractor. - Aggiungi
HeifExtractor. - Aggiungi il supporto di QuickTime classico a
Mp4Extractor.
- Audio:
- Aggiunta del supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analisi della codifica PCM per
lpcmin MP4. - Aggiunto il supporto per l'estrazione dell'audio Vorbis in MP4.
- Aggiungi
AudioSink.getFormatOffloadSupport(Format)che recupera il livello di supporto dell'offload che il sink può fornire per il formato tramite unDefaultAudioOffloadSupportProvider. Restituisce il nuovoAudioOffloadSupportche contieneisFormatSupported,isGaplessSupportedeisSpeedChangeSupported. - Aggiungi
AudioSink.setOffloadMode()tramite cui viene configurata la configurazione di offload sul sink audio. Il valore predefinito èAudioSink.OFFLOAD_MODE_DISABLED. - L'offload può essere attivato tramite
setAudioOffloadPreferenceinTrackSelectionParameters. Se la preferenza impostata è l'attivazione, il dispositivo supporta l'offload per il formato e la selezione della traccia è una singola traccia audio, l'offload audio verrà attivato. - Se
audioOffloadModePreferenceè impostato suAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED,DefaultTrackSelectorselezionerà solo una traccia audio e solo se il formato della traccia è supportato nell'offload. Se nessuna traccia audio è supportata in offload, non verrà selezionata alcuna traccia. - Disattivazione del supporto per l'offload senza interruzioni per i livelli API precedenti alla versione 33 a causa di un problema di posizione di riproduzione dopo la transizione della traccia.
- Rimuovi il parametro
enableOffloaddalla firma del metodoDefaultRenderersFactory.buildAudioSink. - Rimuovi il metodo
DefaultAudioSink.Builder.setOffloadMode. - Rimuovi il valore intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Aggiunta del supporto per i metadati gapless di Opus durante la riproduzione in offload.
- Consenti il ripristino del renderer disattivando l'offload se non è riuscito alla prima scrittura (#627).
- Attiva la pianificazione dell'offload per impostazione predefinita per la riproduzione con offload solo audio.
- Elimina
ExoPlayer.experimentalSetOffloadSchedulingEnabledeAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. onExperimentalSleepingForOffloadChangedè stato rinominato inonSleepingForOffloadChangedeonExperimentalOffloadedPlaybackinonOffloadedPlayback.- Sposta le interfacce e le definizioni
TrackSelectionParametersrelative alla modalità di offload audio in una classeAudioOffloadPreferencesinterna. - Aggiungi i callback
onAudioTrackInitializedeonAudioTrackReleasedaAnalyticsListener,AudioRendererEventListenereAudioSink.Listener. - Risolto il problema di underflow del buffer audio DTS Express (#650).
- È stato corretto un bug per cui il controllo delle funzionalità per E-AC3-JOC genera un'eccezione
IllegalArgumentException(#677).
- Aggiunta del supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analisi della codifica PCM per
- Video:
- Consenti a
MediaCodecVideoRendererdi utilizzare unVideoFrameProcessor.Factorypersonalizzato. - È stato corretto un bug per cui non era possibile eseguire il rendering del primo frame se lo stream audio iniziava con timestamp negativi (#291).
- Consenti a
- Testo:
- Rimuovi
ExoplayerCuesDecoder. Le tracce di testo consampleMimeType = application/x-media3-cuesora vengono gestite direttamente daTextRenderersenza bisogno di un'istanzaSubtitleDecoder.
- Rimuovi
- Metadati:
MetadataDecoder.decodenon verrà più chiamato per i sample "solo decodifica", poiché l'implementazione deve comunque restituire null.
- Effetto:
- Aggiungi
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)per mettere in coda l'input bitmap in base al timestamp. - Modifica
VideoFrameProcessor.registerInputStream()in modo che non sia bloccante. Le app devono implementareVideoFrameProcessor.Listener#onInputStreamRegistered(). - I parametri
frameRateedurationUsdiVideoFrameProcessor.queueInputBitmapsono stati modificati inTimestampIterator.
- Aggiungi
- Estensione IMA:
- Risolto un bug per cui un live streaming DASH multi-periodo che non è il primo elemento di una playlist può generare un'eccezione (#571).
- Rilascia StreamManager prima di chiamare
AdsLoader.destroy() - Aggiorna la versione dell'SDK IMA alla 3.31.0.
- Sessione:
- Imposta il comportamento del servizio in primo piano delle notifiche su
FOREGROUND_SERVICE_IMMEDIATEinDefaultMediaNotificationProvider(#167). - Utilizza solo
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()sopra l'API 31 per evitare problemi con l'API deprecata sui dispositivi Samsung (#167). - Utilizza il controller delle notifiche multimediali come proxy per impostare i comandi disponibili e il layout personalizzato utilizzato per compilare la notifica e la sessione della piattaforma.
- Converti gli eventi dei pulsanti multimediali ricevuti da
MediaSessionService.onStartCommand()all'interno di Media3 anziché indirizzarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controller della chiamata è sempre il controller delle notifiche dei contenuti multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli API supportati. - È stato corretto il bug per cui
MediaController.getCurrentPosition()non avanza quando è connesso a unMediaSessionCompatlegacy. - Aggiungi
MediaLibrarySession.getSubscribedControllers(mediaId)per comodità. - Esegui l'override di
MediaLibrarySession.Callback.onSubscribe()per confermare la disponibilità dell'ID principale per cui il controller si iscrive. Se l'operazione va a buon fine, l'abbonamento viene accettato enotifyChildrenChanged()viene chiamato immediatamente per informare il browser (#561). - Aggiungi il modulo della sessione demo per Automotive OS e attiva la sessione demo per Android Auto.
- Non impostare la coda della sessione del framework quando
COMMAND_GET_TIMELINEnon è disponibile per il controller delle notifiche multimediali. Con Android Auto come controller client che legge dalla sessione del framework, il pulsantequeuenell'interfaccia utente di Android Auto non viene visualizzato (#339). - Utilizza
DataSourceBitmapLoaderper impostazione predefinita anzichéSimpleBitmapLoader(#271, #327). - Aggiunta di
MediaSession.Callback.onMediaButtonEvent(Intent)per consentire alle app di eseguire l'override della gestione predefinita degli eventi dei pulsanti multimediali.
- Imposta il comportamento del servizio in primo piano delle notifiche su
- UI:
- Aggiungi un'implementazione di
Player.Listenerper i dispositivi Wear OS che gestisce la soppressione della riproduzione dovuta aPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTavviando una finestra di dialogo di sistema per consentire a un utente di connettere un'uscita audio adatta (ad es. cuffie Bluetooth). L'ascoltatore riprenderà automaticamente la riproduzione se un dispositivo adatto viene connesso entro un timeout configurabile (il valore predefinito è 5 minuti).
- Aggiungi un'implementazione di
- Download:
- Dichiara il tipo di servizio in primo piano "Sincronizzazione dati" per
DownloadServiceper la compatibilità con Android 14. Quando utilizza questo servizio, l'app deve anche aggiungeredataSynccomeforegroundServiceTypenel manifest e aggiungere l'autorizzazioneFOREGROUND_SERVICE_DATA_SYNC(#11239).
- Dichiara il tipo di servizio in primo piano "Sincronizzazione dati" per
- Estensione HLS:
- Aggiorna la playlist live HLS con un intervallo calcolato dall'ora di inizio dell'ultimo caricamento anziché dall'ora di completamento dell'ultimo caricamento (#663).
- Estensione DASH:
- Consenti più identificatori DASH uguali nell'URL del modello di segmento.
- Aggiunto il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. In questo modo, l'unione dei sottotitoli sovrapposti è supportata meglio, inclusa la risoluzione dello sfarfallio durante la transizione tra i segmenti dei sottotitoli. Puoi attivare questa opzione utilizzando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288).
- Estensione RTSP:
- Correzione di una race condition che poteva causare
IndexOutOfBoundsExceptiondurante il fallback a TCP o il blocco della riproduzione in alcune situazioni. - Controlla lo stato nella configurazione RTSP quando viene restituito lo stato di caricamento di
RtspMediaPeriod(#577). - Ignora i metodi di richiesta RTSP personalizzati nell'intestazione pubblica della risposta Options (#613).
- Utilizza il valore di timeout della risposta di configurazione RTSP nell'intervallo di tempo di invio delle richieste di opzioni RTSP keep-alive (#662).
- Correzione di una race condition che poteva causare
- Estensioni del decoder (FFmpeg, VP9, AV1, MIDI e così via):
- Rilascia il modulo del decoder MIDI, che fornisce il supporto per la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
- Aggiungi
DecoderOutputBuffer.shouldBeSkippedper contrassegnare direttamente i buffer di output che non devono essere presentati. Questa opzione è preferibile aC.BUFFER_FLAG_DECODE_ONLY, che verrà ritirata. - Aggiungi
Decoder.setOutputStartTimeUseSimpleDecoder.isAtLeastOutputStartTimeUsper consentire ai decoder di eliminare i sample di sola decodifica prima dell'ora di inizio. Questa opzione è preferibile aBuffer.isDecodeOnly, che verrà ritirata. - Risolto il bug relativo alla pubblicazione dell'artefatto del decoder MIDI nel repository Maven. L'artefatto è stato rinominato in
media3-exoplayer-midi(#734).
- Estensione Leanback:
- Risolto un bug per cui la disattivazione di una superficie può causare un
ArithmeticExceptionnel codice Leanback (#617).
- Risolto un bug per cui la disattivazione di una superficie può causare un
- Utilità di test:
- Rendi
TestExoPlayerBuildereFakeClockcompatibili con i test della UI di Espresso e i test della UI di Compose. In questo modo viene corretto un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con le visualizzazioni Espresso o Compose.
- Rendi
- Rimuovi i simboli deprecati:
- Rimuovi
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)eTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). UtilizzaComposition.Builder.setHdrMode(int)e passaCompositionaTransformer.start(Composition, String). - Rimuovi il metodo
DownloadNotificationHelper.buildProgressNotificationdeprecato e utilizza un metodo non deprecato che accetta un parametronotMetRequirements.
- Rimuovi
Versione 1.2.0-rc01
1° novembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-beta01
19 ottobre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha02
29 settembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha01
17 agosto 2023
Utilizza la versione stabile 1.2.0.
Versione 1.1.0
Versione 1.1.1
16 agosto 2023
- Libreria comune:
- È stata rimossa la dipendenza
multidexaggiunta accidentalmente da tutti i moduli (#499).
- È stata rimossa la dipendenza
- ExoPlayer:
- Risolvi il problema in
PlaybackStatsListenerper cui vengono creatiPlaybackStatsspuri dopo la cancellazione della playlist. - Aggiunta di campi aggiuntivi al logging dei dati CMCD (Common Media Client Data): formato di streaming (sf), tipo di stream (st), versione (v), birate superiore (tb), durata dell'oggetto (d), velocità effettiva misurata (mtp) e tipo di oggetto (ot) (#8699).
- Risolvi il problema in
- Audio:
- È stato corretto un bug per cui
Player.getState()non passava mai aSTATE_ENDEDdurante la riproduzione di file molto brevi (#538).
- È stato corretto un bug per cui
- Offload audio:
- Anteponi le pagine di intestazione ID Ogg e intestazione commento al bitstream per la riproduzione di Opus con offload in conformità con RFC 7845.
- Video:
- H.265/HEVC: è stata corretta l'analisi delle informazioni sulle immagini di riferimento a breve e lungo termine SPS.
- Testo:
- CEA-608: modifica della logica di troncamento dei cue per considerare solo il testo visibile. In precedenza, l'offset di rientro e tabulazione era incluso quando la lunghezza del cue era limitata a 32 caratteri (il che era tecnicamente corretto in base alla specifica) (#11019).
- Estensione IMA:
- Esegui l'upgrade alla versione 3.30.3 dell'SDK IMA.
- Sessione:
- Aggiungi il layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene chiamato
MediaController.Listener.onCustomLayoutChanged. Le app che vogliono inviare layout personalizzati diversi a controller Media3 diversi possono farlo inMediaSession.Callback.onConnectutilizzando unAcceptedResultBuilderper assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione. - Risolti i casi in cui
MediaLibraryServiceLegacyStubinviava un errore a unResultche non lo supportava, generando unUnsupportedOperationException(#78). - Correzione del modo in cui
PlayerWrappercrea unVolumeProviderCompatdeterminandovolumeControlTypetramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUMEeCOMMAND_SET_DEVICE_VOLUME) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSeCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- Aggiungi il layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene chiamato
Versione 1.1.0
5 luglio 2023
- Libreria comune:
- Aggiungi il motivo della soppressione per il percorso audio non adatto e riproduci quando è pronto Modifica il motivo della soppressione troppo lunga. (#15).
- Aggiungi comandi al Player:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Aggiungi metodi sovraccarichi a Player che consentono agli utenti di specificare i flag del volume:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- Aggiungi
BuilderperDeviceInfoe ritira il costruttore esistente. - Aggiungi
DeviceInfo.routingControllerIdper specificare l'ID del controller di routing per le riproduzioni remote. - Aggiunta di
Player.replaceMediaItem(s)come scorciatoia per aggiungere e rimuovere elementi nella stessa posizione (#8046).
- ExoPlayer:
- Consenti a ExoPlayer di controllare i metodi di regolazione del volume del dispositivo solo se l'utente ha dato il consenso esplicito. Usa
ExoPlayer.Builder.setDeviceVolumeControlEnabledper accedere a:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)esetDeviceVolume(int, int)increaseDeviceVolume(int)eincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)edecreaseDeviceVolume(int, int)
- Aggiungi
FilteringMediaSourceche consente di filtrare i tipi di tracce disponibili da unMediaSource. - Aggiungi il supporto per l'inclusione dei dati CMCD (Common Media Client Data) nelle richieste in uscita dei formati di streaming adattivo DASH, HLS e SmoothStreaming. Sono stati incorporati i seguenti campi:
br,bl,cid,rtpesid(#8699). Struttura dell'API e metodi dell'API:- Il logging CMCD è disattivato per impostazione predefinita. Utilizza
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)per attivarlo. - Tutte le chiavi sono abilitate per impostazione predefinita, esegui l'override di
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)per filtrare le chiavi di cui viene eseguito il logging. - Esegui l'override di
CmcdConfiguration.RequestConfig.getCustomData()per attivare il logging delle chiavi personalizzate.
- Il logging CMCD è disattivato per impostazione predefinita. Utilizza
- Aggiunta un'azione aggiuntiva al manifest della demo principale per semplificare l'avvio dell'app demo con un file
*.exolist.jsonpersonalizzato (#439). - Aggiungi
ExoPlayer.setVideoEffects()per l'utilizzo diEffectdurante la riproduzione di video. - Aggiorna
SampleQueueper archiviaresourceIdcomelonganziché comeint. In questo modo, le firme dei metodi pubbliciSampleQueue.sourceIdeSampleQueue.peekSourceIdvengono modificate. - Aggiungi parametri ai metodi
LoadControlshouldStartPlaybackeonTracksSelectedche consentono di associare questi metodi alMediaPeriodpertinente. - Modifica la firma di
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)aggiungendo un parametro della cronologia che contiene i periodi con gli UID utilizzati come chiavi nella mappa. Questo è necessario per evitare problemi di contemporaneità con i live streaming multi-periodo. - Depreca
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). In alternativa, è possibile chiamare la variante dei metodi senzamediaTimeOffsetUs. Tieni presente che, anche per le varianti ritirate, l'offset non viene più aggiunto astartTimeUseendTimeUsdegli oggettiMediaLoadDatainviati dal dispatcher. - Rinomina
ExoTrackSelection.blacklistinexcludeTrackeisBlacklistedinisTrackExcluded. - Risolto il comportamento incoerente tra
ExoPlayer.setMediaItem(s)eaddMediaItem(s)quando vengono chiamati su una playlist vuota.
- Consenti a ExoPlayer di controllare i metodi di regolazione del volume del dispositivo solo se l'utente ha dato il consenso esplicito. Usa
- Transformer:
- Rimuovi
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Utilizza inveceExoPlayerAssetLoader.Factory(MediaSource.Factory)eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - Rimuovi
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Risolto un bug per cui la trasformazione poteva bloccarsi (causando il timeout del muxer) se la fine dello stream video veniva segnalata nel momento in cui un frame di input era in attesa di elaborazione.
- Esegui query sui codec tramite
MediaCodecListanziché utilizzare le utilitàfindDecoder/EncoderForFormatper espandere il supporto. - Rimuovi la configurazione dei frame B in
DefaultEncoderFactoryperché non funziona su alcuni dispositivi.
- Rimuovi
- Selezione della traccia:
- Aggiungi
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, che è disattivato per impostazione predefinita. Se abilitato,DefaultTrackSelectorattiverà una nuova selezione della traccia quando le funzionalità del renderer cambiano.
- Aggiungi
- Estrattori:
- Audio:
- È stato corretto il bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling era abilitato e
AudioProcessorserano attivi, ad esempio per il trimming senza interruzioni (#10847). - Incapsula i frame Opus in pacchetti Ogg nelle riproduzioni dirette (offload).
- Estrapola la posizione corrente durante la sospensione con la pianificazione dell'offload.
- Aggiungi
Renderer.release()eAudioSink.release()per rilasciare le risorse alla fine del ciclo di vita del player. - Ascolta le modifiche alle funzionalità audio in
DefaultAudioSink. Aggiungi un parametro obbligatoriocontextnel costruttore diDefaultAudioSink, con cuiDefaultAudioSinksi registrerà come listener diAudioCapabilitiesReceivere aggiornerà la sua proprietàaudioCapabilitiesquando riceverà una notifica di modifica delle funzionalità. - Propaga le modifiche alle funzionalità audio tramite un nuovo evento
onAudioCapabilitiesChangednell'interfacciaAudioSink.Listenere una nuova interfacciaRendererCapabilities.Listenerche attiva gli eventionRendererCapabilitiesChanged. - Aggiungi
ChannelMixingAudioProcessorper applicare la scalabilità/il mixaggio ai canali audio. - Aggiungi un nuovo valore int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEaDecoderDiscardReasonsper ignorare il decodificatore audio quando la modalità di bypass è possibile dopo la modifica delle funzionalità audio. - Aggiunto il supporto della riproduzione diretta per DTS Express e DTS:X (#335).
- È stato corretto il bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling era abilitato e
- Video:
- Fai in modo che
MediaCodecVideoRendererrestituisca unVideoSizecon larghezza e altezza pari a 0 quando il renderer è disattivato.Player.Listener.onVideoSizeChangedviene chiamato di conseguenza quandoPlayer.getVideoSize()cambia. Con questa modifica, le dimensioni del video di ExoPlayer conMediaCodecVideoRendererhanno una larghezza e un'altezza pari a 0 quandoPlayer.getCurrentTracksnon supporta i video o le dimensioni della traccia video supportata non sono ancora state determinate.
- Fai in modo che
- DRM:
- Riduci la visibilità di diversi metodi solo interni su
DefaultDrmSessionche non dovrebbero essere chiamati dall'esterno del pacchetto DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Riduci la visibilità di diversi metodi solo interni su
- Muxer:
- Aggiungi una nuova libreria di muxer che può essere utilizzata per creare un file contenitore MP4.
- Estensione IMA:
- Attiva i live streaming DASH multiperiodo per DAI. Tieni presente che l'implementazione attuale non supporta ancora la ricerca nei live streaming (#10912).
- Correzione di un bug per cui un nuovo gruppo di annunci viene inserito nei live streaming perché la posizione dei contenuti calcolata nelle sequenze temporali consecutive varia leggermente.
- Sessione:
- Aggiungi il metodo helper
MediaSession.getControllerForCurrentRequestper ottenere informazioni sul controller che sta chiamando un metodoPlayer. - Aggiungi
androidx.media3.session.MediaButtonReceiverper consentire alle app di implementare la ripresa della riproduzione con eventi dei pulsanti multimediali inviati, ad esempio, da cuffie Bluetooth (#167). - Aggiunta dell'implementazione predefinita a
MediaSession.Callback.onAddMediaItemsper consentire il passaggio diMediaItemsrichiesti aPlayerse hannoLocalConfiguration(ad es. URI) (#282). - Aggiungi i pulsanti di comando "vai al precedente" e "vai al successivo" nella visualizzazione compatta delle notifiche dei contenuti multimediali per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiunta dell'implementazione predefinita a
MediaSession.Callback.onAddMediaItemsper consentire il passaggio diMediaItemsrichiesti aPlayerse hannoLocalConfiguration(ad es. URI) (#282). - Aggiungi i pulsanti di comando "vai al precedente" e "vai al successivo" nella visualizzazione compatta delle notifiche dei contenuti multimediali per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi il metodo helper
- UI:
- Aggiungi i metodi di utilità
shouldShowPlayButtonehandlePlayPauseButtonActionper scrivere elementi UI personalizzati con un pulsante di riproduzione/pausa.
- Aggiungi i metodi di utilità
- Estensione RTSP:
- Estensione DASH:
- Rimuovi l'offset temporale dei contenuti multimediali da
MediaLoadData.startTimeMseMediaLoadData.endTimeMsper gli stream DASH multi-periodo. - È stato corretto un bug per cui la nuova preparazione di un'origine multimediale Dash live multiperiodo produceva un
IndexOutOfBoundsException(#10838).
- Rimuovi l'offset temporale dei contenuti multimediali da
- Estensione HLS:
- Aggiungi
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)per impostare un timeout per il thread di caricamento in attesa dell'inizializzazione diTimestampAdjuster. Se l'inizializzazione non viene completata prima del timeout, viene generato unPlaybackExceptionper evitare l'arresto anomalo della riproduzione. Il timeout è impostato su zero per impostazione predefinita (#323).
- Aggiungi
- Utilità di test:
- Verifica la mancata distinzione tra maiuscole e minuscole nello schema URI in
DataSourceContractTest.
- Verifica la mancata distinzione tra maiuscole e minuscole nello schema URI in
- Rimuovi i simboli deprecati:
- Rimuovi i costruttori
DefaultAudioSinke utilizza inveceDefaultAudioSink.Builder. - Rimuovi
HlsMasterPlayliste utilizzaHlsMultivariantPlaylist. - Rimuovi
Player.stop(boolean). Utilizza invecePlayer.stop()ePlayer.clearMediaItems()(seresetètrue). - Rimuovi due costruttori
SimpleCachedeprecati e utilizza un costruttore non deprecato che accetta unDatabaseProviderper migliorare le prestazioni. - Rimuovi il costruttore
DefaultBandwidthMeter, utilizzaDefaultBandwidthMeter.Builder. - Rimuovi i costruttori
DefaultDrmSessionManager, utilizzaDefaultDrmSessionManager.Builder. - Rimuovi due costruttori
HttpDataSource.InvalidResponseCodeExceptiondeprecati, utilizza un costruttore non deprecato che accetta campi aggiuntivi(cause,responseBody) per migliorare il logging degli errori. - Rimuovi
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDasheDownloadHelper.forSmoothStreaminge utilizzaDownloadHelper.forMediaItem. - Rimuovi il costruttore
DownloadServicedeprecato e utilizza un costruttore non deprecato che includa l'opzione per fornire un parametrochannelDescriptionResourceId. - Rimuovi le costanti String deprecate per i set di caratteri (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEeUTF16LE_NAME), utilizza i set di caratteri Kotlin del pacchettokotlin.text,java.nio.charset.StandardCharsetsocom.google.common.base.Charsets. - Rimuovi il costruttore
WorkManagerSchedulerdeprecato e utilizza un costruttore non deprecato che includa l'opzione per fornire un parametroContext. - Rimuovi i metodi deprecati
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatecreateSampleFormat, che venivano utilizzati per creare un'istanza della classeFormat. Utilizza inveceFormat.Builderper creare istanze diFormat. - Rimuovi i metodi deprecati
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateecopyWithVideoSize, utilizza inveceFormat.buildUpon()e i metodi setter. - Rimuovi il criterio deprecato
ExoPlayer.retry()e utilizzaprepare(). - Rimuovi il costruttore
DefaultTrackSelectordeprecato con zero argomenti e utilizzaDefaultTrackSelector(Context). - Rimuovi il costruttore
OfflineLicenseHelperdeprecato e utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Rimuovi il costruttore
DownloadManagerdeprecato e utilizza il costruttore che accetta unExecutor. - Rimuovi i costruttori
Cuedeprecati e utilizzaCue.Builder. - Rimuovi il costruttore
OfflineLicenseHelperdeprecato e utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Rimuovi quattro metodi
AnalyticsListenerdeprecati:onDecoderEnabled, utilizzaonAudioEnablede/oonVideoEnabled.onDecoderInitialized, utilizzaonAudioDecoderInitializede/oonVideoDecoderInitialized.onDecoderInputFormatChanged, utilizza inveceonAudioInputFormatChangede/oonVideoInputFormatChanged.onDecoderDisabled, utilizzaonAudioDisablede/oonVideoDisabled.
- Rimuovi i campi deprecati
Player.Listener.onSeekProcessedeAnalyticsListener.onSeekProcessede utilizza inveceonPositionDiscontinuityconDISCONTINUITY_REASON_SEEK. - Rimuovi
ExoPlayer.setHandleWakeLock(boolean)e utilizza invecesetWakeMode(int). - Rimuovi il criterio deprecato
DefaultLoadControl.Builder.createDefaultLoadControl()e utilizza invecebuild(). - Rimuovi
MediaItem.PlaybackPropertiesdeprecato e utilizzaMediaItem.LocalConfiguration. Il campo deprecatoMediaItem.playbackPropertiesè ora di tipoMediaItem.LocalConfiguration.
- Rimuovi i costruttori
Versione 1.1.0-rc01
21 giu 2023
Utilizza la versione stabile 1.1.0.
Versione 1.1.0-beta01
7 giugno 2023
Utilizza la versione stabile 1.1.0.
Versione 1.1.0-alpha01
10 maggio 2023
Utilizza la versione stabile 1.1.0.
Versione 1.0.0
Versione 1.0.2
18 maggio 2023
androidx.media3:media3-*:1.0.2 è stato rilasciato. La versione 1.0.2 contiene questi commit.
Questa release corrisponde alla release 2.18.7 di ExoPlayer.
Questa release contiene le seguenti modifiche rispetto alla versione 1.0.1:
- Libreria principale:
- Aggiungi
Buffer.isLastSample()che indica seBuffercontiene il flagC.BUFFER_FLAG_LAST_SAMPLE. - Risolto un problema per cui l'ultimo frame potrebbe non essere visualizzato se l'ultimo campione con frame viene rimosso dalla coda senza leggere il campione "fine dello stream". (#11079).
- Aggiungi
- Estrattori:
- Correzione dell'analisi di H.265 SPS nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP e MP4 (#303).
- Testo:
- SSA: aggiunto il supporto per i file UTF-16 se iniziano con un indicatore dell'ordine dei byte (#319).
- Sessione:
- Risolto il problema per cui
MediaControllernon aggiorna i comandi disponibili quando è connesso a unMediaSessionCompatlegacy che aggiorna le sue azioni. - Risolto il bug che impediva a
MediaLibraryServicedi restituire null per una chiamata dalla UI di sistema aCallback.onGetLibraryRootconparams.isRecent == truenell'API 30 (#355). - Risolto il problema di perdita di memoria di
MediaSessionServiceoMediaLibraryService(#346). - Risolto un bug per cui un aggiornamento combinato di
Timelinee posizione in unMediaSessionpoteva causare la generazione di unIllegalStateExceptionda parte di unMediaController.
- Risolto il problema per cui
Versione 1.0.1
18 aprile 2023
androidx.media3:media3-*:1.0.1 è stato rilasciato. La versione 1.0.1 contiene questi commit.
Questa release corrisponde alla release 2.18.6 di ExoPlayer.
- Libreria principale:
- Ripristina l'override del live streaming di destinazione quando si cerca la posizione predefinita (#11051).
- Correzione di un bug per cui gli stream di esempio vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
- Sessione:
- Risolto un bug per cui più elementi della coda identici pubblicati da un
MediaSessionCompatlegacy generavano un'eccezione inMediaController(#290). - Aggiunta del forwarding mancante di
MediaSession.broadcastCustomCommandalla versione precedente diMediaControllerCompat.Callback.onSessionEvent(#293). - È stato corretto il bug per cui la chiamata a
MediaSession.setPlayernon aggiorna i comandi disponibili. - Risolto il problema per cui le istanze
TrackSelectionOverrideinviate da unMediaControllervenivano ignorate se facevano riferimento a un gruppo conFormat.metadata(#296). - Risolvi il problema per cui
Player.COMMAND_GET_CURRENT_MEDIA_ITEMdeve essere disponibile per accedere ai metadati tramite la versione precedente diMediaSessionCompat. - È stato risolto un problema per cui le istanze
MediaSessionsu un thread in background causavano arresti anomali se utilizzate inMediaSessionService(#318). - Risolto un problema per cui un ricevitore di pulsanti multimediali veniva dichiarato dalla libreria senza che l'app lo avesse previsto (#314).
- Risolto un bug per cui più elementi della coda identici pubblicati da un
- DASH:
- Risolto il problema relativo alla gestione delle sequenze temporali dei segmenti vuoti (#11014).
- RTSP:
- Riprova con TCP se la configurazione RTSP con UDP non va a buon fine con l'errore RTSP 461 UnsupportedTransport (#11069).
Versione 1.0.0
22 marzo 2023
androidx.media3:media3-*:1.0.0 è stato rilasciato. La versione 1.0.0 contiene questi commit.
Questa release corrisponde alla release 2.18.5 di ExoPlayer.
Non sono state apportate modifiche dalla versione 1.0.0-rc02.
Versione 1.0.0-rc02
2 marzo 2023
androidx.media3:media3-*:1.0.0-rc02 è stato rilasciato. La versione 1.0.0-rc02 contiene questi commit.
Questa release corrisponde alla release 2.18.4 di ExoPlayer.
- Libreria principale:
- Download:
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
SegmentDownloadere nelle sottoclassi (#248).
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
- Audio:
- Video:
- Mappa il formato HEVC HDR10 a
HEVCProfileMain10HDR10anziché aHEVCProfileMain10. - Aggiunta una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e Lenovo M10 FHD Plus che causa l'indicazione degli stream AVC a 60 f/s come non supportati (#10898).
- Risolti i problemi di prestazioni di rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza fotogrammi molto superiore alla frequenza di aggiornamento dello schermo.
- Mappa il formato HEVC HDR10 a
- Cast:
- Risolto il problema relativo alla transizione temporanea di
STATE_IDLEdurante il passaggio da un elemento multimediale all'altro (#245).
- Risolto il problema relativo alla transizione temporanea di
- RTSP:
- Rileva l'eccezione IllegalArgumentException generata nell'analisi dei messaggi di risposta Describe RTSP non validi (#10971).
- Sessione:
- Risolto un bug per cui il pulsante di riproduzione/pausa della notifica non si aggiornava con lo stato del player (#192).
- Estensione IMA:
- È stato corretto un bug che impediva l'avvio degli stream DAI senza annunci perché il primo evento
LOADED(e l'unico nel caso senza annunci) non veniva ricevuto.
- È stato corretto un bug che impediva l'avvio degli stream DAI senza annunci perché il primo evento
Versione 1.0.0-rc01
16 febbraio 2023
androidx.media3:media3-*:1.0.0-rc01 è stato rilasciato. La versione 1.0.0-rc01 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.3.
- Libreria principale:
- Modifica la logica di ordinamento del decoder del renderer per rispettare le preferenze di
MediaCodecSelector, anche se un decoder segnala che potrebbe non essere in grado di riprodurre i contenuti multimediali in modo efficiente. Ad esempio, con il selettore predefinito, il decoder hardware con solo supporto funzionale verrà preferito al decoder software che supporta completamente il formato (#10604). - Aggiungi
ExoPlayer.Builder.setPlaybackLooperche imposta un thread di riproduzione preesistente per una nuova istanza di ExoPlayer. - Consenti la cancellazione degli helper di Gestione dei download (#10776).
- Aggiungi il parametro a
BasePlayer.seekToper indicare anche il comando utilizzato per la ricerca. - Utilizza il tema durante il caricamento di elementi drawable nell'API 21 e versioni successive (#220).
- Aggiunta di
ConcatenatingMediaSource2che consente di combinare più elementi multimediali in un'unica finestra (#247).
- Modifica la logica di ordinamento del decoder del renderer per rispettare le preferenze di
- Estrattori:
- Genera un
ParserExceptionanziché unNullPointerExceptionse nella tabella di esempio (stbl) manca una descrizione di esempio (stsd) obbligatoria durante l'analisi degli atomi trak. - Salta correttamente i sample quando si cerca direttamente un frame di sincronizzazione in fMP4 (#10941).
- Genera un
- Audio:
- Utilizza il bitrate del formato audio compresso per calcolare la dimensione minima del buffer per
AudioTracknelle riproduzioni dirette (passthrough).
- Utilizza il bitrate del formato audio compresso per calcolare la dimensione minima del buffer per
- Testo:
- Correzione di
TextRendererche passa un indice non valido (negativo) aSubtitle.getEventTimese un file di sottotitoli non contiene cue. - SubRip: aggiunta del supporto per i file UTF-16 se iniziano con un indicatore dell'ordine dei byte.
- Correzione di
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaTypeper indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsablein sostituzione diMediaMetadata.folderType. Il tipo di cartella verrà ritirato nella prossima release.
- DASH:
- Aggiunta dell'analisi completa per i set di adattamento delle immagini, inclusi i conteggi dei riquadri (#3752).
- UI:
- Correzione del metodo deprecato
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)per garantire che le modifiche alla visibilità vengano trasmesse al listener registrato (#229). - Correzione dell'ordine dei controlli del player centrale in
PlayerViewquando si utilizza un layout da destra a sinistra (RTL) (#227).
- Correzione del metodo deprecato
- Sessione:
- Aggiungi l'abstract
SimpleBasePlayerper facilitare l'implementazione dell'interfacciaPlayerper i player personalizzati. - Aggiungi un metodo helper per convertire il token di sessione della piattaforma in Media3
SessionToken(#171). - Utilizza
onMediaMetadataChangedper attivare gli aggiornamenti della sessione multimediale della piattaforma (#219). - Aggiungi la sessione multimediale come argomento di
getMediaButtons()diDefaultMediaNotificationProvidere utilizza elenchi immutabili per maggiore chiarezza (#216). - Aggiungi il listener di callback
onSetMediaItemsper fornire i mezzi per modificare/impostare l'elencoMediaItem, l'indice iniziale e la posizione per sessione prima di impostarli su Player (#156). - Evita il rilevamento del doppio tocco per gli eventi dei pulsanti multimediali non Bluetooth (#233).
- Rendi
QueueTimelinepiù solido in caso di stato della sessione legacy sospetto (#241).
- Aggiungi l'abstract
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaTypeper indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsablein sostituzione diMediaMetadata.folderType. Il tipo di cartella verrà ritirato nella prossima release.
- Estensione Cast:
- Aggiorna la versione dell'SDK Cast alla 21.2.0.
- Estensione IMA:
- Rimuovi il listener del player di
ImaServerSideAdInsertionMediaSourcenel thread dell'applicazione per evitare problemi di threading. - Aggiungi una proprietà
focusSkipButtonWhenAvailableaImaServerSideAdInsertionMediaSource.AdsLoader.Builderper richiedere lo stato attivo del pulsante Salta sui dispositivi TV e impostalo su true per impostazione predefinita. - Aggiungi un metodo
focusSkipButton()aImaServerSideAdInsertionMediaSource.AdsLoaderper richiedere in modo programmatico lo stato attivo sul pulsante Salta. - Aggiorna la versione dell'SDK IMA alla 3.29.0.
- Rimuovi il listener del player di
- App demo:
- Richiedi l'autorizzazione alle notifiche per le notifiche di download in fase di runtime (#10884).
Versione 1.0.0-beta03
22 novembre 2022
androidx.media3:media3-*:1.0.0-beta03 è stato rilasciato. La versione 1.0.0-beta03 contiene questi commit.
Questa release corrisponde alla release 2.18.2 di ExoPlayer.
- Libreria principale:
- Aggiunta di
ExoPlayer.isTunnelingEnabledper verificare se il tunneling è abilitato per le tracce attualmente selezionate (#2518). - Aggiunta di
WrappingMediaSourceper semplificare il wrapping di un singoloMediaSource(#7279). - Elimina il buffer posteriore prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
- Chiudi il blocco di tracciamento "doSomeWork" quando l'offload è abilitato.
- Risolto il problema di monitoraggio della sessione con ricerche rapide in
PlaybackStatsListener(#180). - Invia il callback
onMediaItemTransitionmancante quando chiamiseekToNextoseekToPreviousin una playlist con un singolo elemento (#10667). - Aggiungi
Player.getSurfaceSizeche restituisce le dimensioni della superficie su cui viene eseguito il rendering del video. - Risolto un bug per cui la rimozione dei listener durante il rilascio del player può causare un'eccezione
IllegalStateException(#10758).
- Aggiunta di
- Build:
- Applica la versione minima di
compileSdkVersionper evitare errori di compilazione (#10684). - Evita di pubblicare il blocco quando è incluso in un'altra build Gradle.
- Applica la versione minima di
- Selezione della traccia:
- Preferisci altre tracce a Dolby Vision se il display non lo supporta. (#8944).
- Download:
- Correzione di un potenziale loop infinito in
ProgressiveDownloadercausato dal download e dalla riproduzione simultanei con lo stessoPriorityTaskManager(#10570). - Fare in modo che la notifica di download venga visualizzata immediatamente (#183).
- Limitazione delle rimozioni di download paralleli a 1 per evitare la creazione eccessiva di thread (#10458).
- Correzione di un potenziale loop infinito in
- Video:
- Prova un decoder alternativo per Dolby Vision se il display non lo supporta. (#9794).
- Audio:
- Utilizza
SingleThreadExecutorper rilasciare le istanzeAudioTrackper evitare errori OutOfMemory quando rilasci più player contemporaneamente (#10057). - Aggiunge
AudioOffloadListener.onExperimentalOffloadedPlaybackper lo stato di offload di AudioTrack. (#134). - Rendi
AudioTrackBufferSizeProviderun'interfaccia pubblica. - Aggiungi
ExoPlayer.setPreferredAudioDeviceper impostare il dispositivo di output audio preferito (#135). - Rinomina
androidx.media3.exoplayer.audio.AudioProcessorinandroidx.media3.common.audio.AudioProcessor. - Mappatura dell'audio a 8 e 12 canali rispettivamente alle maschere dei canali 7.1 e 7.1.4 su tutte le versioni di Android (#10701).
- Utilizza
- Metadati:
- Ora
MetadataRendererpuò essere configurato per eseguire il rendering dei metadati non appena sono disponibili. Crea un'istanza conMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)per specificare se il renderer restituirà i metadati in anticipo o in sincronia con la posizione del player.
- Ora
- DRM:
- Aggira un bug nell'implementazione di ClearKey di Android 13 che restituisce un URL di licenza non vuoto, ma non valido.
- Risolto l'errore
setMediaDrmSession failed: session not openeddurante il passaggio tra schemi DRM in una playlist (ad es. Widevine a ClearKey).
- Testo:
- CEA-608: assicurati che i comandi di cambio servizio nel campo 2 vengano gestiti correttamente (#10666).
- DASH:
- Analizza
EventStream.presentationTimeOffsetdai manifest (#10460).
- Analizza
- UI:
- Utilizza gli override correnti del player come preimpostati in
TrackSelectionDialogBuilder(#10429).
- Utilizza gli override correnti del player come preimpostati in
- Sessione:
- Assicurati che i comandi vengano sempre eseguiti nell'ordine corretto, anche se alcuni richiedono una risoluzione asincrona (#85).
- Aggiungi
DefaultMediaNotificationProvider.Builderper creareDefaultMediaNotificationProvideristanze. Il builder può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzati dal provider. Inoltre, aggiungi il metodoDefaultMediaNotificationProvider.setSmallIcon(int)per impostare l'icona piccola delle notifiche. (#104). - Assicurati che i comandi inviati prima di
MediaController.release()non vengano ignorati (#99). SimpleBitmapLoaderpuò caricare bitmap da URIfile://(#108).- Risolto l'errore di asserzione che impedisce a
MediaControllerdi cercare un annuncio in un periodo (#122). - Al termine della riproduzione, l'elemento
MediaSessionServiceviene interrotto in primo piano e viene visualizzata una notifica per riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112). - Non avviare un servizio in primo piano con un pending intent per la pausa (#167).
- Nascondi manualmente il "badge" associato alla notifica creata da
DefaultNotificationProvidernell'API 26 e nell'API 27 (il badge viene nascosto automaticamente nell'API 28 e versioni successive) (#131). - Risolto un bug per cui una seconda connessione del binder da una MediaSession precedente a un MediaController Media3 causava IllegalStateExceptions (#49).
- RTSP:
- IMA:
- Aggiunta del timeout per il caricamento delle informazioni sugli annunci per gestire i casi in cui l'SDK IMA si blocca durante il caricamento di un annuncio (#10510).
- Impedisci di saltare gli annunci mid-roll quando si passa alla fine dei contenuti (#10685).
- Calcola correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
- Estensione FFmpeg:
- Aggiunti i flag appena richiesti per collegare le librerie FFmpeg con NDK 23.1.7779620 e versioni successive (#9933).
- Estensione AV1:
- Aggiorna la versione di CMake per evitare incompatibilità con le ultime release di Android Studio (#9933).
- Estensione Cast:
- Implementa
getDeviceInfo()per poter identificareCastPlayerquando controlli la riproduzione con unMediaController(#142).
- Implementa
- Transformer:
- Aggiungi il timer watchdog del muxer per rilevare quando la generazione di un campione di output è troppo lenta.
- Rimuovi i simboli deprecati:
- Rimuovi
Transformer.Builder.setOutputMimeType(String). Questa funzionalità è stata rimossa. Il tipo MIME sarà sempre MP4 quando viene utilizzato il muxer predefinito.
- Rimuovi
Versione 1.0.0-beta02
21 luglio 2022
androidx.media3:media3-*:1.0.0-beta02 è stato rilasciato. La versione 1.0.0-beta02 contiene questi commit.
Questa release corrisponde alla release 2.18.1 di ExoPlayer.
- Libreria principale:
- Assicurati che la modifica di
ShuffleOrderconExoPlayer.setShuffleOrdercomporti una chiamata aPlayer.Listener#onTimelineChangedconreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED(#9889). - Per i contenuti multimediali progressivi, includi solo le tracce selezionate nella posizione con buffer (#10361).
- Consenti il logger personalizzato per tutti gli output dei log di ExoPlayer (#9752).
- Correzione dell'implementazione di
setDataSourceFactoryinDefaultMediaSourceFactory, che in alcuni casi non funzionava (#116).
- Assicurati che la modifica di
- Estrattori:
- DASH:
- Analizza l'URL della licenza ClearKey dai manifest (#10246).
- UI:
- Assicurati che TalkBack annunci l'opzione di velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
- RTSP:
- Aggiunta della gestione dei pacchetti frammentati VP8 (#110).
- Estensione Leanback:
- Ascolta le modifiche di
playWhenReadyinLeanbackAdapter(10420).
- Ascolta le modifiche di
- Cast:
Versione 1.0.0-beta01
16 giugno 2022
androidx.media3:media3-*:1.0.0-beta01 è stato rilasciato. La versione 1.0.0-beta01 contiene questi commit.
Questo corrisponde alla release di ExoPlayer 2.18.0.
- Libreria principale:
- Attiva il supporto per la diagnostica della piattaforma Android tramite
MediaMetricsManager. ExoPlayer inoltrerà gli eventi di riproduzione e i dati sul rendimento alla piattaforma, il che aiuta a fornire informazioni sul rendimento del sistema e di debug sul dispositivo. Questi dati possono anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostica è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer conExoPlayer.Builder.setUsePlatformDiagnostics(false). - Risolto il bug per cui le tracce venivano reimpostate troppo spesso quando si utilizzava
MergingMediaSource, ad esempio quando si caricavano i sottotitoli in modalità sideload e si modificava il sottotitolo selezionato durante la riproduzione (#10248). - Interrompi il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Queste riproduzioni presuppongono una rete 4G.
- Non consentire il passaggio di
nullaMediaSource.Factory.setDrmSessionManagerProvidereMediaSource.Factory.setLoadErrorHandlingPolicy. Se necessario, le istanze diDefaultDrmSessionManagerProvidereDefaultLoadErrorHandlingPolicypossono essere passate esplicitamente. - Aggiungi
MediaItem.RequestMetadataper rappresentare i metadati necessari per riprodurre i contenuti multimediali quando non è noto l'esattoLocalConfiguration. Rimuovi ancheMediaMetadata.mediaUrl, poiché ora è incluso inRequestMetadata. - Aggiungi
Player.Command.COMMAND_SET_MEDIA_ITEMper consentire ai giocatori di impostare un singolo elemento.
- Attiva il supporto per la diagnostica della piattaforma Android tramite
- Selezione della traccia:
- Appiattisci la classe
TrackSelectionOverridesinTrackSelectionParameterse promuoviTrackSelectionOverridea classe di primo livello. - Rinomina
TracksInfoinTrackseTracksInfo.TrackGroupInfoinTracks.Group. AnchePlayer.getCurrentTracksInfoePlayer.Listener.onTracksInfoChangedsono stati rinominati inPlayer.getCurrentTracksePlayer.Listener.onTracksChanged. Ciò include la "riattivazione" del nome del metodoPlayer.Listener.onTracksChanged, ma con tipi di parametri diversi. - Modifica
DefaultTrackSelector.buildUponParameterseDefaultTrackSelector.Parameters.buildUponin modo che restituiscanoDefaultTrackSelector.Parameters.BuilderanzichéDefaultTrackSelector.ParametersBuilder, che è stato ritirato. - Aggiungi
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities, che è abilitato per impostazione predefinita. Se l'opzione è attiva,DefaultTrackSelectorpreferirà le tracce audio il cui numero di canali non supera le funzionalità di output del dispositivo. Sui dispositivi palmari,DefaultTrackSelectorpreferirà i formati audio stereo/mono rispetto a quelli multicanale, a meno che il formato multicanale non possa essere spazializzato (Android 12L e versioni successive) o non sia un formato audio surround Dolby. Inoltre, sui dispositivi che supportano la spazializzazione dell'audio,DefaultTrackSelectormonitorerà le modifiche alle proprietà dello spazializzatore e attiverà una nuova selezione della traccia in base a queste. I dispositivi con unatelevisionmodalità UI sono esclusi da questi vincoli e verrà preferito il formato con il numero di canali più alto. Per attivare questa funzionalità, l'istanzaDefaultTrackSelectordeve essere creata con unContext.
- Appiattisci la classe
- Video:
- Rinomina
DummySurfaceinPlaceholderSurface. - Aggiungi il supporto di AV1 a
MediaCodecVideoRenderer.getCodecMaxInputSize.
- Rinomina
- Audio:
- Utilizza il decoder audio LG AC3 che pubblicizza un tipo MIME non standard.
- Modifica il tipo restituito di
AudioAttributes.getAudioAttributesV21()daandroid.media.AudioAttributesa una nuova classe wrapperAudioAttributesV21, per evitare una verifica ART lenta sull'API < 21. - Esegui una query sulla piattaforma (API 29 e versioni successive) o assumi il numero di canali di codifica audio per il passthrough audio quando il numero di canali audio del formato non è impostato, il che si verifica con la preparazione senza chunk di HLS (10204).
- Configura
AudioTrackcon la maschera di canaleAudioFormat.CHANNEL_OUT_7POINT1POINT4se il decoder genera audio PCM a 12 canali (#10322.
- DRM
- Assicurati che la sessione DRM venga sempre aggiornata correttamente durante la ricerca immediatamente dopo una modifica del formato (10274).
- Testo:
- Modifica
Player.getCurrentCues()in modo che restituiscaCueGroupanzichéList<Cue>. - SSA: è stata aggiunta l'impostazione dello stile
OutlineColourquando è presenteBorderStyle == 3(ovveroOutlineColourimposta lo sfondo del cue) (#8435). - CEA-708: analizza i dati in più blocchi di servizi e ignora i blocchi non associati al numero di servizio attualmente selezionato.
- Rimuovi
RawCcExtractor, che è stato utilizzato solo per gestire un formato di sottotitoli interno di Google.
- Modifica
- Estrattori:
- UI:
- Correzione della distribuzione degli eventi ai
OnClickListenerimpostati suPlayerViewnel caso in cuiuseController=false(#9605). Inoltre, correggi l'invio di eventi aOnLongClickListenerper tutte le configurazioni di visualizzazione. - Risolto il problema per cui una sequenza di eventi touch che uscivano dai limiti di
PlayerViewprima diACTION_UPveniva trattata erroneamente come un clic (#9861). - Risolto il problema di accessibilità
PlayerViewper cui il tocco poteva attivare/disattivare la riproduzione anziché nascondere i controlli (#8627). - Riscrivi
TrackSelectionVieweTrackSelectionDialogBuilderper lavorare con l'interfacciaPlayeranziché conExoPlayer. In questo modo, le visualizzazioni possono essere utilizzate con altre implementazioni diPlayere viene rimossa la dipendenza dal modulo UI al modulo ExoPlayer. Si tratta di una modifica che provoca un errore. - Non mostrare le tracce di testo forzato nel selettore delle tracce
PlayerViewe mantieni selezionata una traccia di testo forzato adatta se è selezionato "Nessuna" (#9432).
- Correzione della distribuzione degli eventi ai
- DASH:
- Analizza il numero di canali dagli elementi DTS
AudioChannelConfiguration. In questo modo, viene riattivato il passthrough audio per gli stream DTS (#10159). - Non consentire il passaggio di
nullaDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze diDefaultCompositeSequenceableLoaderFactorypossono essere passate esplicitamente, se necessario.
- Analizza il numero di canali dagli elementi DTS
- HLS:
- Fallback alla preparazione con chunk se l'attributo CODECS della playlist non contiene il codec audio (#10065).
- Non consentire il passaggio di
nullaHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryeHlsMediaSource.Factory.setPlaylistTrackerFactory. Se necessario, è possibile passare esplicitamente istanze diDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryo un riferimento aDefaultHlsPlaylistTracker.FACTORY.
- Smooth Streaming:
- Non consentire il passaggio di
nullaSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze diDefaultCompositeSequenceableLoaderFactorypossono essere passate esplicitamente, se necessario.
- Non consentire il passaggio di
- RTSP:
- Aggiunta del lettore RTP per H263 (#63).
- Aggiunta del lettore RTP per MPEG4 (#35).
- Aggiunta del lettore RTP per HEVC (#36).
- Aggiungi il lettore RTP per AMR. Al momento sono supportati solo stream AMR monocanale non interleaved. Il payload RTP AMR composto non è supportato. (#46)
- Aggiunta del lettore RTP per VP8 (#47).
- Aggiunta del lettore RTP per WAV (#56).
- Correggi l'intestazione di autorizzazione di base RTSP. (#9544).
- Interruzione del controllo dei campi SDP obbligatori, poiché ExoPlayer non ne ha bisogno (#10049).
- Genera un'eccezione controllata durante l'analisi della sincronizzazione RTSP (#10165).
- Aggiunta del lettore RTP per VP9 (#47).
- Aggiunta del lettore RTP per OPUS (#53).
- Origini dati:
- Rinomina
DummyDataSourceinPlaceholderDataSource. - Soluzione alternativa per la gestione delle interruzioni di OkHttp.
- Rinomina
- Sessione:
- Sostituisci
MediaSession.MediaItemFillerconMediaSession.Callback.onAddMediaItemsper consentire la risoluzione asincrona delle richieste. - Supporta i metodi
setMediaItems(s)quandoMediaControllersi connette a una sessione multimediale legacy. - Rimuovi
MediaController.setMediaUrieMediaSession.Callback.onSetMediaUri. La stessa funzionalità può essere ottenuta utilizzandoMediaController.setMediaItemeMediaSession.Callback.onAddMediaItems. - Inoltra le chiamate legacy
MediaControllerper riprodurre contenuti multimediali suMediaSession.Callback.onAddMediaItemsanziché suonSetMediaUri. - Aggiungi
MediaNotification.ProvidereDefaultMediaNotificationProviderper personalizzare la notifica. - Aggiungi
BitmapLoadereSimpleBitmapLoaderper scaricare le immagini degli artwork. - Aggiungi
MediaSession.setCustomLayout()per fornire la compatibilità con le versioni precedenti della sessione legacy. - Aggiungi
MediaSession.setSessionExtras()per fornire la parità delle funzionalità con la sessione precedente. - Rinomina
MediaSession.MediaSessionCallbackinMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackinMediaLibrarySession.CallbackeMediaSession.Builder.setSessionCallbackinsetCallback. - È stato corretto l'errore NPE in
MediaControllerImplLegacy(#59). - Aggiorna le informazioni sulla posizione della sessione nella modifica della sequenza temporale(#51).
- Correzione dell'NPE in
MediaControllerImplBasedopo il rilascio del controller (#74).
- Sostituisci
- Riproduzione degli annunci / IMA:
- Diminuisci la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms per allinearti ai consigli del Media Rating Council (MRC).
- Estensione FFmpeg:
- Aggiorna la versione di CMake alla
3.21.0+per evitare un bug di CMake che causa l'errore di sincronizzazione di Gradle di Android Studio (#9933).
- Aggiorna la versione di CMake alla
- Rimuovi i simboli deprecati:
- Rimuovi
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Usa invecePlayer.Listener.onTracksChanged(Tracks). - Rimuovi
Player.getCurrentTrackGroupsePlayer.getCurrentTrackSelections. Usa invecePlayer.getCurrentTracks. Puoi anche continuare a utilizzareExoPlayer.getCurrentTrackGroupseExoPlayer.getCurrentTrackSelections, anche se questi metodi rimangono deprecati. - Rimuovi le costanti
DownloadHelper,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTeDEFAULT_TRACK_SELECTOR_PARAMETERS. Utilizza invecegetDefaultTrackSelectorParameters(Context)quando possibile eDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTin caso contrario. - Rimuovi il costruttore
DefaultTrackSelector(ExoTrackSelection.Factory). Usa invece il descrittoreDefaultTrackSelector(Context, ExoTrackSelection.Factory). - Rimuovi
Transformer.Builder.setContext. IlContextdeve essere passato al costruttoreTransformer.Builder.
- Rimuovi
Versione 1.0.0-alpha03
14 marzo 2022
androidx.media3:media3-*:1.0.0-alpha03 è stato rilasciato. La versione 1.0.0-alpha03 contiene questi commit.
Corrisponde alla release di ExoPlayer 2.17.1.
- Audio:
- Risolto l'errore di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
- Estrattori:
- FMP4: è stato risolto il problema per cui i metadati di esempio emsg potevano essere generati nell'ordine errato per gli stream contenenti atomi emsg v0 e v1 (#9996).
- Testo:
- È stata corretta l'interazione di
SingleSampleMediaSource.Factory.setTrackIdeMediaItem.SubtitleConfiguration.Builder.setIdper dare la priorità al campoSubtitleConfiguratione tornare al valoreFactoryse non è impostato (#10016).
- È stata corretta l'interazione di
- Riproduzione degli annunci:
- Risolvi i problemi di underrun audio tra i periodi degli annunci negli stream SSAI HLS in diretta.
Versione 1.0.0-alpha02
2 marzo 2022
androidx.media3:media3-*:1.0.0-alpha02 è stato rilasciato. La versione 1.0.0-alpha02 contiene questi commit.
Corrisponde alla release di ExoPlayer 2.17.0.
- Libreria principale:
- Aggiungi il metodo protetto
DefaultRenderersFactory.getCodecAdapterFactory()in modo che le sottoclassi diDefaultRenderersFactoryche eseguono l'override dibuildVideoRenderers()obuildAudioRenderers()possano accedere alla factory dell'adattatore del codec e passarla alle istanzeMediaCodecRendererche creano. - Propaga i campi di intestazione ICY
nameegenrerispettivamente aMediaMetadata.stationeMediaMetadata.genrein modo che raggiungano l'app tramitePlayer.Listener.onMediaMetadataChanged()(#9677). - Rimuovi le chiavi null da
DefaultHttpDataSource#getResponseHeaders. - Sospendi e riprova quando la creazione di un'istanza
MediaCodecnon va a buon fine. In questo modo, viene risolto un problema che si verifica su alcuni dispositivi quando si passa da un codec sicuro a un altro codec (#8696). - Aggiungi
MediaCodecAdapter.getMetrics()per consentire agli utenti di ottenere i dati delle metriche daMediaCodec. (#9766). - Risoluzione dei problemi di dipendenza di Maven (#8353).
- Disattivazione della regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di un'impostazione della velocità richiesta dall'utente (#9329).
- Rinomina
DecoderCounters#inputBufferCountinqueuedInputBufferCount. - Rendi privato
SimpleExoPlayer.renderers. Puoi accedere ai renderer tramiteExoPlayer.getRenderer. - Aggiornati alcuni valori costanti
AnalyticsListener.EventFlagsin modo che corrispondano ai valori inPlayer.EventFlags. - Suddividi
AnalyticsCollectorin un'interfaccia e un'implementazione predefinita per consentire a R8 di rimuoverla se un'app non ne ha bisogno.
- Aggiungi il metodo protetto
- Selezione della traccia:
- Supporto dei flag dei ruoli video preferiti nella selezione delle tracce (#9402).
- Aggiorna la logica di selezione delle tracce video per tenere conto dei tipi MIME e dei flag di ruolo preferiti quando selezioni più tracce video per l'adattamento (#9519).
- Aggiorna la logica di selezione delle tracce video e audio per scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto del decoder e dell'hardware (#9565).
- Aggiorna la logica di selezione della traccia video per preferire codec più efficienti se più codec sono supportati dai decodificatori principali con accelerazione hardware (#4835).
- Dai la priorità alle preferenze relative ai contenuti audio (ad esempio, la traccia audio "predefinita" o una traccia corrispondente alla lingua delle impostazioni internazionali del sistema) rispetto ai vincoli di selezione delle tracce tecniche (ad esempio, il tipo MIME preferito o il numero massimo di canali).
- Risolto il problema di selezione delle tracce per cui l'override di un gruppo di tracce non disattivava altri gruppi di tracce dello stesso tipo (#9675).
- Risolto il problema di selezione della traccia per cui una combinazione di override di tracce non vuote e vuote non veniva applicata correttamente (#9649).
- Vieta
TrackGroupduplicati in unTrackGroupArray. GliTrackGrouppossono sempre essere resi distinguibili impostando unidnel costruttoreTrackGroup. In questo modo viene risolto un arresto anomalo durante la ripresa della riproduzione dopo aver messo l'app in background con un override della traccia attivo (#9718). - Modifica la logica in
AdaptiveTrackSelectionper consentire un aumento della qualità con una larghezza di banda di rete sufficiente anche se la riproduzione è molto vicina al margine live (#9784).
- Video:
- Correzione della logica di fallback del decodificatore per Dolby Vision per utilizzare un decodificatore H264/H265 compatibile, se necessario.
- Audio:
- È stata corretta la logica di fallback del decoder per Dolby Atmos (E-AC3-JOC) in modo da utilizzare un decoder E-AC3 compatibile, se necessario.
- Modifica le API
AudioCapabilitiesin modo che richiedano il passaggio esplicito diAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESanziché dinull. - Consenti la personalizzazione del calcolo della dimensione del buffer
AudioTrackinserendo unAudioTrackBufferSizeProviderinDefaultAudioSink. (#8891). - Riprova a creare
AudioTrackse la dimensione del buffer richiesta era > 1 MB. (#9712).
- Estrattori:
- Testo:
- Aggiungi un campo
MediaItem.SubtitleConfiguration.idche viene propagato al campoFormat.iddella traccia dei sottotitoli creata dalla configurazione (#9673). - Aggiunto il supporto di base per i sottotitoli WebVTT nei container Matroska (#9886).
- Impedisci a
Cea708Decoderdi leggere più della dimensione dichiarata di un blocco di servizio.
- Aggiungi un campo
- DRM:
- Vuoi rimuovere
playbackLooperdaDrmSessionManager.(pre)acquireSession? Quando unDrmSessionManagerviene utilizzato da un'app in unMediaSourcepersonalizzato, è necessario passareplaybackLooperaDrmSessionManager.setPlayer.
- Vuoi rimuovere
- Riproduzione degli annunci / IMA:
- Aggiunta del supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
- Aggiungi un metodo a
AdPlaybackStateper consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615). - Forza la velocità di riproduzione di 1.0 durante la riproduzione degli annunci (#9018).
- Risolto il problema per cui un gruppo di annunci che non veniva caricato causava un reset immediato della riproduzione (#9929).
- UI:
- DASH:
- Aggiungi le proprietà essenziali e supplementari analizzate a
Representation(#9579). - Supporto del ruolo della traccia
forced-subtitle(#9727). - Interrompi l'interpretazione del ruolo della traccia
maincomeC.SELECTION_FLAG_DEFAULT. - Correzione della logica di esclusione dell'URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
- Supporto degli URL
MPD.Locationrelativi (#9939).
- Aggiungi le proprietà essenziali e supplementari analizzate a
- HLS:
- Compila correttamente
Format.labelper gli stream HLS solo audio (#9608). - Utilizza la preparazione senza blocchi per impostazione predefinita per migliorare il tempo di avvio. Se le tue rappresentazioni contengono tracce di sottotitoli codificati multiplexate che non sono dichiarate nella playlist principale, devi aggiungerle alla playlist principale per renderle disponibili per la riproduzione o disattivare la preparazione senza blocchi con
HlsMediaSource.Factory.setAllowChunklessPreparation(false). - Supporto della ricerca accurata dei keyframe in HLS (#2882).
- Compila correttamente
- RTSP:
- Fornire un'API client per eseguire l'override di
SocketFactoryutilizzato per qualsiasi connessione al server (#9606). - Preferisci il metodo di autenticazione DIGEST rispetto a BASIC se sono presenti entrambi (#9800).
- Gestione dei casi in cui la sincronizzazione della traccia RTSP non è disponibile (#9775).
- Ignora i valori di intestazione RTP-Info non validi (#9619).
- Fornire un'API client per eseguire l'override di
- Transformer:
- Aumenta la versione API minima richiesta a 21.
TransformationExceptionviene ora utilizzato per descrivere gli errori che si verificano durante una trasformazione.- Aggiungi
TransformationRequestper specificare le opzioni di trasformazione. - Consenti la registrazione di più listener.
- Risolto il problema per cui Transformer si bloccava quando l'output del codec veniva letto parzialmente.
- Risolto un potenziale NPE in
Transformer.getProgressdurante il rilascio delle eccezioni del muxer. - Aggiungi un'app demo per applicare le trasformazioni.
- Estensione MediaSession:
- Per impostazione predefinita,
MediaSessionConnectorora cancella la playlist quando viene interrotta. Le app che vogliono conservare la playlist possono chiamaresetClearMediaItemsOnStop(false)sul connettore.
- Per impostazione predefinita,
- Estensione Cast:
- Estensione FFmpeg:
- Fai in modo che
build_ffmpeg.shdipenda dalle utilità bin di LLVM anziché da quelle di GNU (#9933).
- Fai in modo che
- Compatibilità con Android 12:
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
com.google.android.gms:play-services-cast-framework:20.1.0. Le versioni precedenti diplay-services-cast-frameworknon sono compatibili con le app che hanno come target Android 12 e si arrestano in modo anomalo con unIllegalArgumentExceptiondurante la creazione diPendingIntent(#9528).
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
- Rimuovi i simboli deprecati:
- Rimuovi
Player.EventListener. Usa invece il descrittorePlayer.Listener. - Rimuovi
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryeMediaSourceFactory#setDrmUserAgent. Usa inveceMediaSourceFactory#setDrmSessionManagerProvider. - Rimuovi
MediaSourceFactory#setStreamKeys. Usa inveceMediaItem.Builder#setStreamKeys. - Rimuovi
MediaSourceFactory#createMediaSource(Uri). Usa inveceMediaSourceFactory#createMediaSource(MediaItem). - Rimuovi
setTagdaDashMediaSource,HlsMediaSourceeSsMediaSource. Usa invece il descrittoreMediaItem.Builder#setTag. - Rimuovi
DashMediaSource#setLivePresentationDelayMs(long, boolean). UtilizzaMediaItem.Builder#setLiveConfigurationeMediaItem.LiveConfiguration.Builder#setTargetOffsetMsper eseguire l'override del manifest oDashMediaSource#setFallbackTargetLiveOffsetMsper fornire un valore di riserva. - Rimuovi
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread. La disattivazione dell'applicazione dei thread non è più possibile. - Rimuovi
ActionFileeActionFileUpgradeUtil. Utilizza ExoPlayer 2.16.1 o versioni precedenti per utilizzareActionFileUpgradeUtilper unire i file di azioni legacy inDefaultDownloadIndex. - Rimuovi
ProgressiveMediaSource#setExtractorsFactory. Utilizza invece il costruttoreProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory). - Rimuovi
ProgressiveMediaSource.Factory#setTageProgressiveMediaSource.Factory#setCustomCacheKey. Usa inveceMediaItem.Builder#setTageMediaItem.Builder#setCustomCacheKey. - Rimuovi i costruttori
DefaultRenderersFactory(Context, @ExtensionRendererMode int)eDefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Utilizza invece il costruttoreDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModeeDefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - Rimuovi tutti i costruttori
CronetDataSourcepubblici. Usa inveceCronetDataSource.Factory.
- Rimuovi
- Modifica il seguente
IntDefssolo in@Target(TYPE_USE). Ciò potrebbe interrompere la compilazione degli utilizzi in Kotlin, che può essere corretta spostando l'annotazione per annotare il 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(nel pacchettocom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(nel pacchettocom.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
Versione 1.0.0-alpha01
27 ottobre 2021
androidx.media3:media3-*:1.0.0-alpha01 è stato rilasciato. La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
Media3 è la nuova sede delle librerie di supporto per i contenuti multimediali, tra cui ExoPlayer. La prima versione alpha contiene implementazioni funzionali iniziali di librerie per l'implementazione di casi d'uso multimediali, tra cui:
- ExoPlayer, un media player a livello di applicazione per Android facile da personalizzare ed estendere.
- Funzionalità della sessione multimediale per l'esposizione e il controllo delle riproduzioni. Questo nuovo modulo di sessione utilizza la stessa interfaccia
Playerdi ExoPlayer. - Componenti UI per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
- Moduli che racchiudono funzionalità in altre librerie per l'utilizzo con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.
Per saperne di più, consulta il progetto GitHub Media3.
In precedenza, ExoPlayer era ospitato in un progetto GitHub ExoPlayer separato. In Media3 il nome del pacchetto è
androidx.media3.exoplayer. Abbiamo intenzione di continuare a gestire e rilasciare il progetto GitHub ExoPlayer per un po' di tempo, in modo da dare alle app il tempo di eseguire la migrazione a Media3.
Media3 include sostituzioni per tutti i moduli ExoPlayer, ad eccezione delle estensioni legacy media2 e mediasession, che vengono sostituite dal nuovo modulo media3-session. In questo modo, viene fornita un'integrazione diretta tra i player e le sessioni multimediali senza dover utilizzare una classe di adattatore/connettore.