Media3

Librerie di supporto per i casi d'uso dei contenuti multimediali.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Alpha Release
2 luglio 2025 1.7.1 - 1.8.0-beta01 1.8.0-alpha01

Dichiarazione di 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 che ti servono nel file build.gradle per la tua app o il tuo modulo:

Alla moda

dependencies {
    def media3_version = "1.6.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 integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

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

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

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

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

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

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

Kotlin

dependencies {
    val media3_version = "1.6.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 integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

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

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

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

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

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

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

Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze di build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare lo strumento di monitoraggio dei problemi di Media3 per trovare risposte a domande, problemi noti e richieste di funzionalità e per segnalare nuovi problemi.

Versione 1.8.0

Versione 1.8.0-beta01

2 luglio 2025

androidx.media3:media3-*:1.8.0-beta01 viene ritirata. La versione 1.8.0-beta01 contiene questi commit.

  • Libreria comune:
    • Aggiungi il supporto per la sostituzione del giocatore in ForwardingSimpleBasePlayer.
  • ExoPlayer:
    • Aggiungi il supporto per l'utilizzo dell'ID dispositivo virtuale di Context passato a ExoPlayer.Builder.
    • Attiva la pianificazione dinamica per impostazione predefinita in modalità di scrubbing.
    • Evita il ricaricamento non necessario di una fonte quando cerchi la fine di un elemento.
    • Utilizza MediaCodec.BUFFER_FLAG_DECODE_ONLY per impostazione predefinita in modalità di scorrimento.
    • Genera IllegalStateException quando PreloadMediaSource viene riprodotto da un ExoPlayer con un thread di riproduzione diverso dal thread di precaricamento (#2495).
    • Aggiungi cloneAndMove a ShuffleMode con un'implementazione predefinita (#2226).
    • Modifica il comportamento predefinito di Renderer.getMinDurationToProgressUs in modo che restituisca un valore maggiore se non è richiesta alcuna chiamata a render.
    • È stato corretto un bug per cui la pianificazione interna ritardava l'ultimo fotogramma durante la ricerca alla fine della riproduzione in pausa. Per ora, la correzione del bug ha effetto solo se ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled è abilitato.
  • Transformer:
    • Aggiungi CodecDbLite che consente ottimizzazioni specifiche del chipset delle impostazioni di codifica video.
    • Aggiungi il flag setEnableCodecDbLite a DefaultEncoderFactory per attivare l'ottimizzazione delle impostazioni di CodecDB Lite. Per impostazione predefinita, questo flag è impostato su false.
  • Estrattori:
    • Aggiungi il supporto per la ricerca in MP4 frammentati con più atomi sidx. Questo comportamento può essere attivato utilizzando il flag FLAG_MERGE_FRAGMENTED_SIDX su FragmentedMp4Extractor (#9373).
    • Ignora le tabelle di ricerca vuote nei file FLAC (incluse quelle contenenti solo punti di ricerca segnaposto) e ripristina la ricerca binaria se la durata del file è nota (#2327).
    • È stato corretto l'analisi delle unità SEI H.265 per ignorare completamente i tipi SEI non riconosciuti (#2456).
    • Aggiorna WavExtractor in modo che utilizzi i dati SubFormat dell'estensione dell'intestazione per il formato audio durante l'analisi di un file di tipo WAVE_FORMAT_EXTENSIBLE.
    • MP4: aggiungi il supporto per le caselle ipcm e fpcm che definiscono le tracce audio PCM non elaborate (il PCM in virgola mobile a 64 bit non è supportato).
    • MP4: gestisce la parte di rotazione delle matrici di trasformazione tkhd che ruotano e riflettono il video. In questo modo, i video riflessi realizzati dalla fotocamera anteriore dell'iPhone vengono visualizzati nel modo corretto, ma riflessi in modo errato sull'asse Y (#2012).
  • Audio:
    • Aggiungi il supporto di tutti i formati di campioni PCM lineari in ChannelMappingAudioProcessor e TrimmingAudioProcessor.
    • Aggiungi il supporto per i vuoti audio in CompositionPlayer.
    • Rimuovi chiamata fraudolenta a BaseAudioProcessor#flush() da BaseAudioProcessor#reset().
  • Video:
    • Migliora il rilascio dei frame video fluidi all'avvio quando i campioni audio non iniziano esattamente nella posizione richiesta.
    • Estendi la soluzione alternativa per la superficie staccata ai dispositivi "realme" (#2059).
  • Testo:
    • Correzione di un blocco della riproduzione quando un segmento di sottotitoli non viene caricato inizialmente e viene caricato correttamente in un secondo momento, seguito da diversi segmenti di sottotitoli vuoti (#2517).
  • Metadati:
    • Aggiunto il supporto per il recupero della durata dei contenuti multimediali e di Timeline a MetadataRetriever e migrato a un'API AutoCloseable basata su istanze. Utilizza il nuovo Builder per creare un'istanza per un MediaItem, quindi chiama retrieveTrackGroups(), retrieveTimeline(), e retrieveDurationUs() per ottenere ListenableFuture per i metadati. I metodi statici precedenti sono ora deprecati (#2462).
  • Immagine:
    • Limita le bitmap decodificate alle dimensioni del display in BitmapFactoryImageDecoder per evitare che un'app si arresti in modo anomalo con Canvas: trying to draw too large bitmap. da PlayerView quando tenta di visualizzare immagini molto grandi (ad es. 50 MP).
    • Modifica la firma di DefaultRenderersFactory.getImageDecoderFactory() per accettare un parametro Context.
    • Allinea la dimensione massima di output bitmap utilizzata in CompositionPlayer a quella già utilizzata in Transformer (ovvero CompositionPlayer non considera la dimensione del display durante la decodifica delle bitmap, a differenza di ExoPlayer).
  • Muxer:
    • Correzione di un bug per cui non venivano impostati i flag di esempio corretti per i campioni audio in MP4 frammentato.
  • Sessione:
    • Correzione del bug per cui la chiamata di setSessionExtras dal thread principale durante l'esecuzione del player da un thread dell'applicazione diverso dal thread principale causava un IllegalStateException (#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 PlaybackException personalizzati per tutti i controller o per quelli selezionati.
    • Correzione del bug per cui la ricerca in un live streaming su un MediaController può causare un IllegalArgumentException.
    • Per i live streaming, interrompi la pubblicazione di una posizione di riproduzione e la possibilità di cercare nell'elemento corrente i controlli multimediali della piattaforma, per evitare artefatti di posizione nella UI di Android Auto (e in altri controlli che utilizzano queste informazioni dalla sessione multimediale della piattaforma) (#1758).
  • Estensione Cronet:
    • Aggiungi la gestione automatica dei cookie (#5975).
  • Estensione HLS:
    • Correggi l'analisi delle 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 un bug per cui a volte gli errori di caricamento delle playlist non vengono propagati una volta che un live streaming esaurisce i segmenti da caricare (#2401https://github.com/androidx/media/issues/2401).
    • Raggruppa le versioni dei sottotitoli codificati in base al tag NAME, in modo simile a come vengono raggruppate le versioni audio (#1666).
  • Estensione DASH:
    • Correzione del 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).
    • Correzione del bug per cui il reindirizzamento non veniva seguito quando si utilizzavano i parametri di ricerca CMCD (#2475).
  • Estensione RTSP:
    • Correzione di RtspClient per utilizzare l'URI della posizione fornito durante l'elaborazione di una risposta HTTP 302 (#2398).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
    • Correzione del bug per cui DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange non ha effetto per le estensioni del decodificatore audio (#2258).
  • Estensione Cast:
    • Aggiungi il supporto per setVolume() e getVolume() (#2279).
    • Impedisci a CastPlayer di entrare in STATE_BUFFERING mentre la cronologia è vuota.
  • Test Utilities:
    • Aggiungi advance(player).untilPositionAtLeast e untilMediaItemIndex a TestPlayerRunHelper per far avanzare il giocatore fino a raggiungere una posizione specificata. Nella maggior parte dei casi, questi metodi sono più affidabili dei metodi untilPosition e untilStartOfMediaItem esistenti.
    • Sposta FakeDownloader nel modulo test-utils-robolectric per riutilizzarlo in altri test.

Versione 1.8.0-alpha01

19 maggio 2025

androidx.media3:media3-*:1.8.0-alpha01 viene ritirata. La versione 1.8.0-alpha01 contiene questi commit.

  • ExoPlayer:
    • Aggiungi il metodo ExoPlayer.setScrubbingModeEnabled(boolean). In questo modo, il player viene ottimizzato per molte ricerche frequenti (ad esempio, quando un utente trascina una barra di scorrimento). Il comportamento della modalità di scorrimento può essere personalizzato con setScrubbingModeParameters(..) su ExoPlayer e ExoPlayer.Builder.
    • Consenti la personalizzazione della tolleranza di ricerca frazionaria in modalità di pulizia.
    • Aumenta la velocità di funzionamento del codec in modalità Scrubbing.
    • Correzione del bug per cui gli errori di preparazione nei contenuti di AdsMediaSource potrebbero non essere mai segnalati (#2337).
    • Correzione della perdita di memoria in MergingMediaSource, ad esempio utilizzata durante il caricamento laterale dei sottotitoli (#2338).
    • Consenti a CmcdConfiguration.Factory di restituire null per disattivare la registrazione CMCD per elementi multimediali specifici (#2386).
    • Aumenta la dimensione predefinita del buffer delle immagini da 128 kB (errore di copia e incolla dalle tracce di testo) a 26 MB, una dimensione sufficiente per le immagini Ultra HDR da 50 MP (#2417).
    • Aggiungi PreCacheHelper che consente alle app di pre-memorizzare nella cache un singolo media con posizione iniziale e durata specificate.
  • Transformer:
    • Il riempimento di un intervallo iniziale (aggiunto tramite addGap()) con audio silenzioso ora richiede l'impostazione esplicita di experimentalSetForceAudioTrack(true) in EditedMediaItemSequence.Builder. Se la lacuna si trova al centro della sequenza, questo flag non è obbligatorio.
    • Sposta l'interfaccia Muxer da media3-transformer a media3-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 giocatori di ignorare i campioni tra il fotogramma chiave prima del punto di inizio del taglio e il punto di inizio del taglio.
    • Aggiorna l'app demo di composizione per utilizzare Kotlin e Jetpack Compose e aggiungi un VideoCompositorSettings personalizzato per disporre le sequenze in un layout 2x2 o PIP.
  • Estrattori:
    • MP3: utilizza la durata e le dimensioni dei dati dei metadati Xing, VBRI e simili a bitrate variabile non ricercabili quando esegui il fallback alla ricerca a bitrate costante a causa di FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS) (#2194).
  • Audio:
    • Consenti l'upsampling/downsampling costante della potenza in DefaultAudioMixer.
    • Rendi pubblici ChannelMappingAudioProcessor, TrimmingAudioProcessor e ToFloatPcmAudioProcessor (#2339).
    • Utilizza AudioTrack#getUnderrunCount() in AudioTrackPositionTracker per rilevare gli underrun in DefaultAudioSink anziché la stima ottimale.
    • Migliora l'uniformità dei timestamp audio per la deriva imprevista della posizione dal dispositivo di uscita audio.
    • Correzione del bug per cui la sincronizzazione A/V non funziona per i primi 10 secondi dopo la riproduzione dopo la pausa quando si è connessi a dispositivi Bluetooth.
    • Correzione del bug per cui AnalyticsListener.onAudioPositionAdvancing non registrava l'ora in cui l'audio iniziava ad avanzare, ma l'ora della prima misurazione.
  • Video:
    • Aggiungi l'API sperimentale ExoPlayer per includere il flag MediaCodec.BUFFER_FLAG_DECODE_ONLY durante l'accodamento dei buffer di input di sola decodifica. Questo flag segnala al decoder di saltare i buffer di sola decodifica, con conseguente ricerca più rapida. Attivalo con DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag.
    • Migliora i controlli delle prestazioni dei codec per i codec video software. Ciò potrebbe comportare la classificazione di alcune tracce aggiuntive come EXCEEDS_CAPABILITIES.
    • Correzione degli errori di riproduzione VP9 Widevine su alcuni dispositivi (#2408).
  • Testo:
    • Correzione di SSA e SubRip per visualizzare un cue in corso durante l'attivazione dei sottotitoli codificati (#2309).
    • È stato risolto il problema di blocco della riproduzione quando si passa da uno stream con un errore nei sottotitoli codificati a un live streaming con una traccia dei sottotitoli codificati vuota (#2328).
    • È stato risolto il problema relativo ai sottotitoli codificati CEA-608 illeggibili durante la riproduzione di stream H.262 contenenti B-frame (#2372).
    • Aggiungi il supporto per i sottotitoli SSA con CodecId = S_TEXT/SSA nei file Matroska. In precedenza, MatroskaExtractor supportava solo CodecId = S_TEXT/ASS, che ha lo scopo di rappresentare la variante "avanzata" (v4+) dei sottotitoli SubStation Alpha (ma la logica di analisi di ExoPlayer è la stessa per entrambe le varianti) (#2384).
    • Aggiungi il supporto della proprietà layer nei file di sottotitoli SubStation Alpha (SSA), che viene utilizzata per definire l'ordine di visualizzazione delle battute quando più di una viene mostrata sullo schermo contemporaneamente (#2124).
  • Effetto:
    • Aggiungi Presentation.createForShortSide(int) che crea un Presentation che garantisce che il lato più corto corrisponda sempre al valore specificato, indipendentemente dall'orientamento dell'input.
  • Muxer:
    • L'API writeSampleData() ora utilizza la classe BufferInfo specifica del muxer anziché MediaCodec.BufferInfo.
    • Aggiungi Muxer.Factory#supportsWritingNegativeTimestampsInEditList, che è impostato su false per impostazione predefinita.
  • Estensione IMA:
    • È stato corretto un bug per cui un errore di caricamento in un annuncio poteva invalidare accidentalmente un altro gruppo di annunci.
    • È stato corretto il bug a causa del quale la riproduzione dei gruppi di annunci dopo la fine di una finestra VOD si bloccava. I gruppi di annunci con un orario di inizio successivo alla finestra non vengono più inseriti nella coda di MediaPeriodQueue (#2215).
  • Sessione:
    • È stato corretto un bug per cui il passaggio di un valore nullo in getLibraryRoot di un MediaBrowser collegato a un MediaBrowserServiceCompat legacy produceva un NullPointerException.
    • È stato corretto un bug per cui l'invio di azioni personalizzate, di un risultato di ricerca o di una richiesta getItem causava l'arresto anomalo dell'app di sessione precedente con un ClassNotFoundException.
    • È stato corretto un bug per cui MediaItem.LocalConfiguration.uri veniva condiviso con MediaMetadata delle sessioni della piattaforma. Per condividere intenzionalmente un URI per consentire ai controller di richiedere nuovamente i contenuti multimediali, imposta MediaItem.RequestMetadata.mediaUri.
  • UI:
    • Correzione di un bug di Compose che causava un intervallo tra l'impostazione degli stati iniziali dei pulsanti e l'osservazione della modifica dello stato (ad es. forme delle icone o attivazione). Eventuali modifiche apportate al giocatore al di fuori del periodo di osservazione vengono ora rilevate (#2313).
    • Aggiungi state holder e composable al modulo media3-ui-compose per SeekBackButtonState e SeekForwardButtonState.
    • Aggiungi il supporto della modalità di scorrimento di ExoPlayer a PlayerControlView. Se attivata, questa modalità mette il player in modalità di scorrimento quando l'utente inizia a trascinare la barra di scorrimento, invia una chiamata player.seekTo per ogni movimento e poi esce dalla modalità di scorrimento quando il tocco viene sollevato dallo schermo. Questa integrazione può essere attivata con time_bar_scrubbing_enabled = true in XML o con il metodo setTimeBarScrubbingEnabled(boolean) di Java/Kotlin.
    • Fai in modo che PlayerSurface accetti un argomento Player che ammette valori null.
  • Download:
    • Aggiungi il supporto per il download parziale per gli stream progressivi. Le app possono preparare uno stream progressivo con DownloadHelper e richiedere un DownloadRequest dall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. Il valore restituito DownloadRequest contiene l'intervallo di byte risolto, con il quale è possibile creare un ProgressiveDownloader e scaricare i contenuti corrispondenti.
    • Aggiungi DownloadHelper.Factory con cui vengono sostituiti i metodi statici DownloadHelper.forMediaItem().
    • Aggiungi Factory per le implementazioni di SegmentDownloader.
    • Aggiungi il supporto per il download parziale per gli stream adattivi. Le app possono preparare uno stream adattivo con DownloadHelper e richiedere un DownloadRequest dall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. Il DownloadRequest restituito contiene l'intervallo di tempo risolto, con il quale è possibile creare un SegmentDownloader concreto e scaricare i contenuti corrispondenti.
  • Estensione HLS:
    • Supporta X-ASSET-LIST e i live streaming con HlsInterstitialsAdsLoader.
  • Estensione RTSP:
    • Aggiunta del supporto dell'analisi per SessionDescriptions contenenti righe con caratteri di spazio vuoto finali (#2357).
  • Estensione Cast:
    • Aggiungi il supporto per getDeviceVolume(), setDeviceVolume(), getDeviceMuted() e setDeviceMuted() (#2089).
  • Test Utilities:
    • transformer.TestUtil.addAudioDecoders(String...), transformer.TestUtil.addAudioEncoders(String...) e transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...) rimossi. Utilizza ShadowMediaCodecConfig per configurare encoder e decoder ombra.
    • Il prefisso "exotest" è stato sostituito con "media3" nei nomi dei codec segnalati da ShadowMediaCodecConfig.
  • Rimuovi i simboli ritirati:
    • Rimosso il costruttore SegmentDownloader deprecato SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) e i costruttori corrispondenti nelle relative sottoclassi DashDownloader, HlsDownloader e SsDownloader.
    • Rimozione di Player.hasNext(), Player.hasNextWindow() obsoleti. Utilizza Player.hasNextMediaItem().
    • Rimossa Player.next() obsoleta. Utilizza invece Player.seekToNextMediaItem().
    • Rimossa Player.seekToPreviousWindow() obsoleta. Utilizza Player.seekToPreviousMediaItem().
    • Rimossa Player.seekToNextWindow() obsoleta. Utilizza Player.seekToNextMediaItem().
    • Rimozione di BaseAudioProcessor deprecato nel modulo exoplayer. Utilizza BaseAudioProcessor nel modulo common.
    • Rimuovi il costruttore MediaCodecVideoRenderer deprecato MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).

Versione 1.7.0

Versione 1.7.1

16 maggio 2025

Questa release ha lo stesso codice della 1.6.1 e viene rilasciata per garantire che venga visualizzata come release "più recente" rispetto alla 1.7.0, che era una release alpha taggata per errore come stabile (vedi sotto).

Versione 1.7.0

16 maggio 2025

Questa release avrebbe dovuto essere 1.7.0-alpha01, ma è stata erroneamente taggata 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 viene ritirata. La versione 1.6.1 contiene questi commit.

  • Libreria comune:
    • Aggiungi il metodo PlaybackParameters.withPitch(float) per copiare facilmente un PlaybackParameters con un nuovo valore pitch (#2257).
  • ExoPlayer:
    • È stato risolto il problema per cui la transizione degli elementi multimediali non riusciva a causa di un errore recuperabile del renderer durante l'inizializzazione dell'elemento multimediale successivo (#2229).
    • È stato risolto il problema a causa del quale ProgressiveMediaPeriod genera un IllegalStateException quando PreloadMediaSource tenta di chiamare il suo getBufferedDurationUs() prima che sia pronto (#2315).
    • Correzione dell'invio di CmcdData nelle richieste di manifest per DASH, HLS e Smooth Streaming (#2253).
    • Assicurati che AdPlaybackState.withAdDurationsUs(long[][]) possa essere utilizzato dopo la rimozione dei gruppi di annunci. L'utente deve comunque trasmettere un array di durate per i gruppi di annunci rimossi, che può essere vuoto o nullo (#2267).
  • Estrattori:
    • MP4: analizza alternate_group dalla casella tkhd ed esponilo come voce Mp4AlternateGroupData nel Format.metadata di ogni traccia (#2242).
  • Audio:
    • Correzione del problema di scaricamento in cui la posizione potrebbe bloccarsi durante la riproduzione di una playlist di contenuti brevi (#1920).
  • Sessione:
    • Riduzione del timeout di aggregazione per i callback della piattaforma MediaSession da 500 a 100 millisecondi e aggiunta di un setter sperimentale per consentire alle app di configurare questo valore.
    • Risolto il problema per cui le notifiche riappaiono dopo essere state chiuse dall'utente (#2302).
    • Correzione di un bug per cui la sessione restituiva una cronologia di un solo elemento quando il lettore incorporato è in realtà vuoto. Questo si è verificato quando il player incorporato non dispone di COMMAND_GET_TIMELINE mentre COMMAND_GET_CURRENT_MEDIA_ITEM è disponibile e il player incorporato è vuoto (#2320).
    • Correzione di un bug per cui la chiamata di MediaSessionService.setMediaNotificationProvider viene ignorata dopo altre interazioni con il servizio, ad esempio setForegroundServiceTimeoutMs (#2305).
  • UI:
    • Attiva PlayerSurface per utilizzare ExoPlayer.setVideoEffects e CompositionPlayer.
    • Correzione del bug per cui PlayerSurface non può essere ricomposto con un nuovo Player.
  • Estensione HLS:
    • È stato risolto il problema per cui la durata del chunk non veniva impostata in CmcdData per i contenuti multimediali HLS, causando un errore di asserzione durante l'elaborazione dei segmenti multimediali criptati (#2312).
  • Estensione RTSP:
    • Aggiungi il supporto per l'URI con lo schema RTSPT come modo per configurare la sessione RTSP in modo che utilizzi TCP (#1484).
  • Estensione Cast:
    • Aggiunta del supporto per i metadati delle playlist (#2235).

1.6.0

26 marzo 2025

androidx.media3:media3-*:1.6.0 viene ritirata. La versione 1.6.0 contiene questi commit.

  • Libreria comune:
    • Aggiungi AudioManagerCompat e AudioFocusRequestCompat per sostituire le classi equivalenti in androidx.media.
    • Esegui l'upgrade di Kotlin dalla versione 1.9.20 alla 2.0.20 e utilizza il plug-in Gradle di Compose Compiler. Esegui l'upgrade della libreria KotlinX Coroutines dalla versione 1.8.1 alla 1.9.0.
    • Rimuovi il metodo Format.toBundle(boolean excludeMetadata), utilizza Format.toBundle().
    • Corretto un bug in SimpleBasePlayer in cui l'impostazione di un nuovo currentMediaItemIndex in State dopo setPlaylist con null MediaMetadata non rivaluta i metadati (#1940).
    • Modifica l'accesso a SimpleBasePlayer.State da protetto a pubblico per semplificare la gestione degli aggiornamenti in altre classi (#2128).
  • ExoPlayer:
    • Aggiungi MediaExtractorCompat, una nuova classe che fornisce funzionalità equivalenti alla piattaforma MediaExtractor.
    • Aggiungi il supporto sperimentale del pre-riscaldamento "ExoPlayer" per la riproduzione utilizzando MediaCodecVideoRenderer. Puoi configurare DefaultRenderersFactory tramite experimentalSetEnableMediaCodecVideoRendererPrewarming per fornire un MediaCodecVideoRenderer secondario a ExoPlayer. Se attivata, ExoPlayer pre-elabora il video di elementi multimediali consecutivi durante la riproduzione per ridurre la latenza di transizione degli elementi multimediali.
    • Riduci i valori predefiniti per bufferForPlaybackMs e bufferForPlaybackAfterRebufferMs in DefaultLoadControl a 1000 e 2000 ms rispettivamente.
    • Inizializza DeviceInfo e il volume del dispositivo in modo asincrono (se abilitato utilizzando setDeviceVolumeControlEnabled). Questi valori non sono disponibili immediatamente dopo ExoPlayer.Builder.build() e Player.Listener notifica le modifiche tramite onDeviceInfoChanged e onDeviceVolumeChanged.
    • L'ID sessione audio iniziale non è più disponibile immediatamente dopo la creazione del player. Puoi utilizzare AnalyticsListener.onAudioSessionIdChanged per ascoltare l'aggiornamento iniziale, se necessario.
    • 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 per la lingua dei video possono essere espresse con TrackSelectionParameters.Builder.setPreferredVideoLanguage(s).
    • Aggiungi il parametro selectedAudioLanguage al metodo DefaultTrackSelector.selectVideoTrack().
    • Aggiungi il parametro retryCount a MediaSourceEventListener.onLoadStarted e i metodi MediaSourceEventListener.EventDispatcher corrispondenti.
    • È stato corretto il bug a causa del quale gli elementi della playlist o i periodi nei flussi DASH multi-periodo con durate che non corrispondono ai contenuti effettivi potevano causare blocchi dei fotogrammi alla fine dell'elemento (#1698).
    • Sposta BasePreloadManager.Listener in un elemento di primo livello PreloadManagerListener.
    • RenderersFactory.createSecondaryRenderer può essere implementato per fornire renderer secondari per il pre-riscaldamento. Il pre-riscaldamento consente transizioni più rapide tra gli elementi multimediali durante la riproduzione.
    • Attiva l'invio di CmcdData per le richieste di manifest nei formati di streaming adattivo DASH, HLS e Smooth Streaming (#1951).
    • Fornisci MediaCodecInfo del codec che verrà inizializzato in MediaCodecRenderer.onReadyToInitializeCodec (#1963).
    • Modifica AdsMediaSource per consentire a AdPlaybackStates di crescere aggiungendo gruppi di annunci. Vengono rilevate modifiche non valide e viene generata un'eccezione.
    • È stato risolto il problema a causa del quale potevano essere visualizzati fotogrammi aggiuntivi di sola decodifica in rapida successione durante la transizione ai contenuti multimediali dopo un annuncio mid-roll.
    • Imposta DefaultRenderersFactory in modo che aggiunga due istanze di MetadataRenderer per consentire alle app di ricevere due diversi schemi di metadati per impostazione predefinita.
    • Rivaluta se il caricamento in corso di un chunk deve essere annullato quando la riproduzione viene sospesa (#1785).
    • Aggiunta dell'opzione ClippingMediaSource per consentire il ritaglio nei contenuti multimediali non riproducibili.
    • È stato corretto un bug per cui la ricerca con il pre-riscaldamento poteva bloccare la transizione all'elemento multimediale successivo.
    • È stato corretto un bug per cui ExoPlayer.isLoading() rimane true mentre è passato a STATE_IDLE o STATE_ENDED (#2133).
    • Aggiungi lastRebufferRealtimeMs a LoadControl.Parameter (#2113).
  • 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.registerInputStream e VideoFrameProcessor.Listener.onInputStreamRegistered per utilizzare Format.
    • 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 contribuisce a fornire informazioni sul rendimento del sistema e sul debug sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostici è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per Transformer con Transformer.Builder.setUsePlatformDiagnostics(false).
    • Dividi InAppMuxer in InAppMp4Muxer e InAppFragmentedMp4Muxer. InAppMp4Muxer viene utilizzato per produrre un file MP4 non frammentato, mentre InAppFragmentedMp4Muxer per produrre un file MP4 frammentato.
    • Sposta l'interfaccia Muxer da media3-muxer a media3-transformer.
    • Aggiungi MediaProjectionAssetLoader, che fornisce contenuti multimediali da un MediaProjection per la registrazione dello schermo, e aggiungi il supporto per la registrazione dello schermo all'app demo Transformer.
    • Aggiungi #getInputFormat() all'interfaccia Codec.
    • Trasferisci la responsabilità di rilasciare il GlObjectsProvider al chiamante in DefaultVideoFrameProcessor e DefaultVideoCompositor quando possibile.
  • Estrattori:
    • AVI: correzione della gestione dei file con audio compresso a bitrate costante in cui l'intestazione del flusso memorizza il numero di byte anziché il numero di chunk.
    • Correzione della gestione delle unità NAL con lunghezze espresse in 1 o 2 byte (anziché 4).
    • Correzione di ArrayIndexOutOfBoundsException negli elenchi di modifica MP4 quando l'elenco di modifica inizia con un frame non sincronizzato senza frame di sincronizzazione precedente (#2062).
    • È stato risolto un problema per cui gli stream TS potevano bloccarsi su alcuni dispositivi (#2069).
    • FLAC: aggiungi il supporto per i file FLAC a 32 bit. In precedenza, la riproduzione non riusciva con IllegalStateException: Playback stuck buffering and not loading (#2197).
  • Audio:
    • Correggi onAudioPositionAdvancing in modo che venga chiamato quando la riproduzione riprende (in precedenza veniva chiamato quando la riproduzione veniva messa in pausa).
    • Non ignorare SonicAudioProcessor quando SpeedChangingAudioProcessor è configurato con i parametri predefiniti.
    • È stato corretto un problema di underflow in Sonic#getOutputSize() che poteva causare l'interruzione di DefaultAudioSink.
    • Correggi MediaCodecAudioRenderer.getDurationToProgressUs() e DecoderAudioRenderer.getDurationToProgressUs() in modo che le ricerche ripristinino correttamente le durate fornite.
    • Rendi androidx.media3.common.audio.SonicAudioProcessor definitivo.
    • Aggiungi il supporto per float PCM a ChannelMappingAudioProcessor e TrimmingAudioProcessor.
  • Video:
    • Modifica MediaCodecVideoRenderer.shouldUsePlaceholderSurface in protetto in modo che le applicazioni possano eseguire l'override per bloccare l'utilizzo di segnalazioni segnaposto (#1905).
    • Aggiungi l'analisi delle dipendenze dei campioni ExoPlayer AV1 sperimentale per velocizzare la ricerca. Abilitala con la nuova API DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies.
    • Aggiungi l'API sperimentale ExoPlayer per eliminare i buffer di input del decodificatore MediaCodecVideoRenderer in ritardo da cui non dipende. Attivalo con DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs.
    • È stato risolto il problema per cui un giocatore senza una superficie era pronto immediatamente e decodificava molto lentamente i frame in attesa (#1973).
    • Escludi i dispositivi Xiaomi e OPPO dalla modalità con superficie staccata per evitare lo sfarfallio dello schermo (#2059).
  • Testo:
    • Aggiunta del supporto per i sottotitoli VobSub (#8260).
    • Interrompi il caricamento eager di tutti i file dei sottotitoli codificati con MediaItem.Builder.setSubtitleConfigurations e carica solo un file se viene selezionato dalla selezione della traccia (#1721).
    • TTML: aggiungi il supporto per il riferimento a tts:origin e tts:extent utilizzando style (#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 espresso in millisecondi, il che portava a timestamp errati (#1997).
    • Risolto il problema di blocco della riproduzione quando una playlist contiene elementi tagliati con sottotitoli codificati CEA-608 o CEA-708.
    • Correzione di IllegalStateException quando un file SSA contiene un cue con durata zero (ora di inizio e fine uguali) (#2052).
    • Elimina (e registra) gli errori di analisi dei sottotitoli quando questi vengono multiplexati nello stesso contenitore di audio e video (#2052).
    • È stato corretto il problema di gestione dei caratteri UTF-8 multibyte nei file WebVTT che utilizzano i terminatori di riga CR (#2167).
  • DRM:
    • Correzione dell'errore MediaCodec$CryptoException: Operation not supported in this configuration durante la riproduzione di contenuti ClearKey su dispositivi con API < 27 (#1732).
  • Effetto:
    • Abbiamo spostato la funzionalità di OverlaySettings in StaticOverlaySettings. OverlaySettings può essere suddivisa in sottoclassi per consentire impostazioni di overlay dinamiche.
  • Muxer:
    • MuxerException è stato spostato dall'interfaccia Muxer per evitare un nome completo molto lungo.
    • Il metodo setSampleCopyEnabled() è stato rinominato in setSampleCopyingEnabled() sia in Mp4Muxer.Builder che in FragmentedMp4Muxer.Builder.
    • Mp4Muxer.addTrack() e FragmentedMp4Muxer.addTrack() ora restituiscono un ID traccia int anziché un TrackToken.
    • Mp4Muxer e FragmentedMp4Muxer non implementano più l'interfaccia Muxer.
    • Disattiva il raggruppamento e la copia dei batch di esempio di Mp4Muxer per impostazione predefinita.
    • Correzione di un bug in FragmentedMp4Muxer che 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 si interrompe, si arresta o non va a buon fine. Ciò consente agli utenti di riprendere la riproduzione entro questo timeout senza rischiare limitazioni del servizio 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 di stopSelf() quando esegui l'override di onTaskRemoved, utilizza MediaSessionService.pauseAllPlayersAndStopSelf() in alternativa.
    • Mantiene la notifica visibile quando la riproduzione entra in uno stato di errore o interruzione. La notifica viene rimossa solo se la playlist viene cancellata o il player viene rilasciato.
    • Migliora la 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 è impostata solo una.
    • Aggiungi Context come parametro a MediaButtonReceiver.shouldStartForegroundService (#1887).
    • Correzione del bug per cui la chiamata di un metodo Player su un MediaController connesso a una sessione precedente eliminava le modifiche da un aggiornamento in attesa.
    • Rendi MediaSession.setSessionActivity(PendingIntent) accettabile il valore null (#2109).
    • È stato corretto un bug per cui una notifica obsoleta rimane visibile quando la playlist viene cancellata (#2211).
  • UI:
    • Aggiungi state holder e composable al modulo media3-ui-compose per PlayerSurface, PresentationState, PlayPauseButtonState, NextButtonState, PreviousButtonState, RepeatButtonState, ShuffleButtonState e PlaybackSpeedState.
  • Download:
    • Correzione del bug in CacheWriter che lascia aperte le origini dati e le aree della cache bloccate nel caso in cui l'origine dati generi un Exception diverso da IOException (#9760).
  • Estensione HLS:
    • Aggiungi una prima versione di HlsInterstitialsAdsLoader. Il caricatore di annunci legge gli interstitial HLS di una playlist multimediale HLS e li mappa al AdPlaybackState passato a AdsMediaSource. Questa versione iniziale supporta solo gli stream VOD HLS con attributi X-ASSET-URI.
    • Aggiungi HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Le app possono utilizzarlo per creare istanze AdsMediaSource che utilizzano un HlsInterstitialsAdsLoader in modo comodo e sicuro.
    • Analizza il tag SUPPLEMENTAL-CODECS dalla playlist HLS per rilevare i formati Dolby Vision (#1785).
    • Allenta la condizione per la ricerca della sincronizzazione delle posizioni in uno stream HLS (#2209).
  • Estensione DASH:
    • Aggiunta del supporto del formato AC-4 Livello 4 per DASH (#1898).
    • Risolvi il problema durante il calcolo dell'intervallo di aggiornamento per l'inserimento di annunci nei live streaming multi-periodo (#1698).
    • Analizza l'attributo scte214:supplementalCodecs dal manifest DASH per rilevare i formati Dolby Vision (#1785).
    • Migliora la gestione delle transizioni di periodo nei live streaming in cui il periodo contiene campioni multimediali oltre la durata del periodo dichiarata (#1698).
    • È stato risolto il problema per cui i set di adattamento contrassegnati con adaptation-set-switching ma con lingue o flag di ruolo diversi vengono uniti (#2222).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
    • Aggiungi il modulo di decodifica MPEG-H che utilizza il decodificatore MPEG-H integrato per decodificare l'audio MPEG-H (#1826).
  • Estensione MIDI:
    • Inserisci istanze personalizzate di AudioSink e AudioRendererEventListener in MidiRenderer.
  • Estensione Cast:
    • Aumenta la dipendenza play-services-cast-framework alla versione 21.5.0 per correggere un arresto anomalo di FLAG_MUTABLE nelle app che hanno come target l'API 34 o versioni successive sui dispositivi con Google Play Services installato ma disattivato (#2178).
  • App demo:
    • Estendi demo-compose con pulsanti aggiuntivi e migliora l'integrazione di PlayerSurface con il supporto di ridimensionamento e otturatore.
  • Rimuovi i simboli ritirati:
    • Rimuovi il metodo AudioMixer.create() deprecato. Utilizza DefaultAudioMixer.Factory().create().
    • Rimuovi i seguenti metodi Transformer.Builder deprecati:
      • setTransformationRequest(), utilizza setAudioMimeType(), setVideoMimeType() e setHdrMode().
      • setAudioProcessors(), imposta il processore audio in un EditedMediaItem.Builder.setEffects() e passalo a Transformer.start().
      • setVideoEffects(), imposta l'effetto video in un EditedMediaItem.Builder.setEffects() e passalo a Transformer.start().
      • setRemoveAudio(), utilizza EditedMediaItem.Builder.setRemoveAudio() per rimuovere l'audio da EditedMediaItem passato a Transformer.start().
      • setRemoveVideo(), utilizza EditedMediaItem.Builder.setRemoveVideo() per rimuovere il video da EditedMediaItem passato a Transformer.start().
      • setFlattenForSlowMotion(), usa EditedMediaItem.Builder.setFlattenForSlowMotion() per appiattire EditedMediaItem passato a Transformer.start().
      • setListener(), utilizza addListener(), removeListener() o removeAllListeners().
    • Rimuovi i seguenti metodi Transformer.Listener deprecati:
      • onTransformationCompleted(MediaItem), utilizza onCompleted(Composition, ExportResult).
      • onTransformationCompleted(MediaItem, TransformationResult), utilizza onCompleted(Composition, ExportResult).
      • onTransformationError(MediaItem, Exception), utilizza onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationException), utilizza onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationResult, TransformationException), utilizza onError(Composition, ExportResult, ExportException).
      • onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), utilizza onFallbackApplied(Composition, TransformationRequest, TransformationRequest).
    • Rimuovi la classe TransformationResult deprecata. Utilizza invece ExportResult.
    • Rimuovi la classe TransformationException deprecata. Utilizza invece ExportException.
    • Rimuovi Transformer.PROGRESS_STATE_NO_TRANSFORMATION deprecato. Utilizza Transformer.PROGRESS_STATE_NOT_STARTED.
    • Rimuovi Transformer.setListener() deprecato. Utilizza Transformer.addListener(), Transformer.removeListener() o Transformer.removeAllListeners().
    • Rimuovi Transformer.startTransformation() deprecato. Utilizza Transformer.start(MediaItem, String).
    • Rimuovi SingleFrameGlShaderProgram deprecato. Utilizza BaseGlShaderProgram.
    • Rimuovi Transformer.flattenForSlowMotion. Utilizza EditedMediaItem.flattenForSlowMotion.
    • ExoPlayer.VideoComponent, ExoPlayer.AudioComponent, ExoPlayer.TextComponent e ExoPlayer.DeviceComponent rimossi.
    • androidx.media3.exoplayer.audio.SonicAudioProcessor rimosso.
    • Sono stati rimossi i seguenti metodi DownloadHelper deprecati:
      • Costruttore DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), utilizza DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList).
      • getRendererCapabilities(RenderersFactory), una funzionalità equivalente può essere ottenuta creando un DefaultRendererCapabilitiesList con un RenderersFactory e chiamando DefaultRendererCapabilitiesList.getRendererCapabilities().
    • Rimosso PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat) metodo. Utilizza PlayerNotificationManager.setMediaSessionToken(MediaSession.Token) e trasmetti (MediaSession.Token) compatToken.getToken().

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 viene ritirata. 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 l'indice di un frame VBRI non copre tutti i dati MP3 in un file (#1904).
  • Video:
    • Rollback dell'utilizzo dei valori delle proporzioni pixel forniti per MediaCodecAdapter se forniti durante l'elaborazione di onOutputFormatChanged (#1371).
  • Testo:
    • È stato corretto un bug in ReplacingCuesResolver.discardCuesBeforeTimeUs per cui il cue attivo alle ore timeUs (iniziato prima ma non ancora terminato) veniva scartato in modo errato (#1939).
  • Metadati:
    • Estrai la numerazione di dischi/tracce e il genere dai commenti Vorbis in MediaMetadata (#1958).

Versione 1.5.0

27 novembre 2024

androidx.media3:media3-*:1.5.0 viene ritirata. La versione 1.5.0 contiene questi commit.

  • Libreria comune:
    • Aggiungi ForwardingSimpleBasePlayer che consente l'inoltro a un altro player con piccoli aggiustamenti, garantendo al contempo la piena coerenza e la gestione degli ascoltatori (#1183).
    • Sostituisci SimpleBasePlayer.State.playlist con il metodo getPlaylist().
    • Aggiungi l'override per SimpleBasePlayer.State.Builder.setPlaylist() per specificare direttamente un Timeline e un Tracks e un Metadata anziché creare una struttura di playlist.
    • Aumenta minSdk a 21 (Android Lollipop). Questo è in linea con tutte le altre librerie AndroidX.
    • Aggiungi l'artefatto androidx.media3:media3-common-ktx che fornisce funzionalità specifiche di Kotlin basate sulla libreria Common
    • Aggiungi la funzione di estensione di sospensione Player.listen per avviare una coroutine per ascoltare Player.Events nella libreria media3-common-ktx.
    • Rimuovi le annotazioni @DoNotInline dalle classi interne manualmente fuori linea progettate per evitare errori di verifica delle classi in fase di runtime. Le versioni recenti di R8 ora eseguono automaticamente chiamate out-of-line 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 Gradle per Android che utilizza una versione di R8 che lo fa,a causa di compileSdk = 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 estrazione automatica simile per evitare errori di verifica della classe di runtime. Questa modifica è già stata apportata in altre librerie AndroidX.
  • ExoPlayer:
    • Ora MediaCodecRenderer.onProcessedStreamChange() può essere chiamato per ogni elemento multimediale. In precedenza non era richiesto per il primo. Utilizza MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart() per attivare questa opzione.
    • Aggiungi PreloadMediaSource.PreloadControl.onPreloadError per consentire alle implementazioni PreloadMediaSource.PreloadControl di intraprendere azioni quando si verifica un errore.
    • Aggiungi BasePreloadManager.Listener per propagare gli eventi di precaricamento alle app.
    • Consenti di modificare il timeout del client SNTP e di riprovare con indirizzi alternativi in caso di timeout (#1540).
    • Rimuovi MediaCodecAdapter.Configuration.flags perché il campo era sempre zero.
    • Consente all'utente di selezionare l'altoparlante integrato per la riproduzione su Wear OS API 35+ (dove il dispositivo pubblicizza il supporto).
    • Rimanda la chiamata di blocco a Context.getSystemService(Context.AUDIO_SERVICE) finché non viene attivata la gestione della messa a fuoco audio. In questo modo, la chiamata di blocco non viene eseguita se la gestione della messa a fuoco audio non è abilitata (#1616).
    • Consenti la riproduzione indipendentemente dalla durata del buffer in caso di errore di caricamento (#1571).
    • Aggiungi AnalyticsListener.onRendererReadyChanged() per indicare quando i singoli renderer consentono la riproduzione.
    • Correzione del problema per cui MediaCodec.CryptoException a volte viene segnalato come "errore di runtime imprevisto" quando MediaCodec viene eseguito in modalità asincrona (comportamento predefinito su API 31+).
    • Passa bufferedDurationUs anziché bufferedPositionUs con PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Inoltre, le modifiche DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS a DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, le app devono passare un valore che rappresenti una durata specifica dalla posizione di inizio predefinita per cui la sorgente multimediale corrispondente deve essere precaricata con questo IntDef, anziché una posizione.
    • Aggiungi l'implementazione di ForwardingRenderer che inoltra tutte le chiamate di metodo a un altro renderer (1703).
    • Aggiungi il precaricamento della playlist per l'elemento successivo della playlist. Le app possono attivare il precaricamento chiamando ExoPlayer.setPreloadConfiguration(PreloadConfiguration) di conseguenza. Per impostazione predefinita, il precaricamento è disattivato. Se l'opzione è attivata e per non interferire con la riproduzione, DefaultLoadControl limita il precaricamento all'inizio e continua solo quando il caricamento del player non è in corso per la riproduzione. Le app possono modificare questo comportamento implementando LoadControl.shouldContinuePreloading() di conseguenza (ad esempio quando esegui l'override di questo metodo in DefaultLoadControl). L'implementazione predefinita di LoadControl disattiva il precaricamento nel caso in cui un'app utilizzi un'implementazione personalizzata di LoadControl.
    • Aggiungi il metodo MediaSourceEventListener.EventDispatcher.dispatchEvent() per consentire l'invocazione di eventi di listener di sottoclassi (1736).
    • Aggiungi DefaultPreloadManager.Builder che crea le istanze DefaultPreloadManager e ExoPlayer con configurazioni condivise in modo coerente.
    • Rimuovi il parametro Renderer[] da LoadControl.onTracksSelected(), in quanto l'implementazione DefaultLoadControl può recuperare i tipi di stream da ExoTrackSelection[].
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) è stato ritirato e il metodo è stato contrassegnato come finale per evitare override. Al suo posto, utilizza il nuovo DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]).
    • Report sugli eventi MediaSourceEventListener da origini secondarie in MergingMediaSource. In questo modo, gli eventi di caricamento avvio/errore/annullamento/completamento verranno segnalati per i sottotitoli caricati manualmente (quelli aggiunti con MediaItem.LocalConfiguration.subtitleConfigurations), che potrebbero essere visualizzati come eventi di caricamento duplicati emessi da AnalyticsListener.
    • Evita che gli errori di sottotitoli codificati e metadati interrompano completamente la riproduzione. La traccia problematica viene disattivata e la riproduzione delle tracce rimanenti continua (#1722).
      • Nella nuova gestione dei sottotitoli (durante l'estrazione), vengono generati errori di analisi (ad es. dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati tramite i callback onLoadError.
      • Nella gestione dei sottotitoli codificati legacy (durante il rendering), solo gli errori di caricamento associati vengono emessi tramite i callback onLoadError, mentre gli errori di analisi vengono ignorati automaticamente (questo è il comportamento preesistente).
    • È stato corretto il bug a causa del quale gli elementi della playlist o i periodi nei flussi DASH multi-periodo con durate che non corrispondono ai contenuti effettivi potevano causare blocchi dei fotogrammi alla fine dell'elemento (#1698).
    • Aggiungi un setter a SntpClient per impostare il tempo massimo trascorso dall'ultimo aggiornamento dopo il quale il client viene reinizializzato (#1794).
  • Transformer:
    • Aggiungi SurfaceAssetLoader, che supporta la messa in coda dei dati video a Transformer tramite un Surface.
    • ImageAssetLoader segnala l'input non supportato tramite AssetLoader.onError anziché generare un IllegalStateException.
    • Rendi obbligatoria l'impostazione della durata dell'immagine utilizzando MediaItem.Builder.setImageDurationMs per l'esportazione dell'immagine.
    • Aggiungi il supporto per l'esportazione di spazi vuoti nelle sequenze di EditedMediaItems audio.
  • Selezione tracce:
    • DefaultTrackSelector: preferisci l'audio basato sugli oggetti rispetto a quello basato sui canali quando gli altri fattori sono uguali.
  • Estrattori:
    • Consenti a Mp4Extractor e FragmentedMp4Extractor di identificare i campioni H264 che non vengono utilizzati come riferimento dai campioni successivi.
    • Aggiungi l'opzione per attivare la ricerca basata sull'indice in AmrExtractor.
    • Considera i file MP3 con più di 128 kB tra i frame validi come troncati (anziché non validi). Ciò significa che i file con dati non MP3 alla fine, senza altri metadati che indichino 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).
    • Correzione della gestione dei campioni 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 mdhd in Mp4Extractor e FragmentedMp4Extractor (#1531).
    • Correzione del ridimensionamento errato di media_time negli elenchi di modifica MP4. Mentre segment_duration era già scalato correttamente utilizzando la scala temporale del film, media_time ora è scalato correttamente utilizzando la scala temporale della traccia, come specificato dallo standard del formato MP4 (#1792).
    • Gestisci i frame fuori ordine nel calcolo di endIndices per MP4 con lista di modifica (#1797).
    • È stato corretto l'analisi della durata dei contenuti multimediali nella casella mdhd dei file MP4 per gestire i valori -1 (#1819).
    • Aggiungi il supporto per l'identificazione della casella h263 nei file MP4 per i video H.263 (#1821).
    • Aggiungi il supporto del formato file multimediale di base ISO AC-4 di livello 4 (#1265).
  • DataSource:
    • Aggiorna HttpEngineDataSource per consentire l'utilizzo a partire dall'estensione 7 della versione S anziché dal livello API 34 (#1262).
    • DataSourceContractTest: verifica che DataSource.getUri() restituisca l'URI risolto (come documentato). Se questo valore è diverso dall'URI richiesto, i test possono indicarlo utilizzando il nuovo metodo DataSourceContractTest.TestResource.Builder.setResolvedUri().
    • DataSourceContractTest: verifica che DataSource.getUri() e getResponseHeaders() restituiscano il valore "open" dopo una chiamata non riuscita a open() (a causa di una risorsa "non trovata") e prima di una successiva chiamata close().
      • L'override di DataSourceContractTest.getNotFoundResources() consente alle sottoclassi di test di fornire più risorse "non trovate" e di fornire anche eventuali intestazioni previste. Ciò consente di distinguere tra HTTP 404 (con intestazioni) e "server non trovato" (senza intestazioni).
  • Audio:
    • Configura automaticamente i metadati di intensità CTA-2075 sul codec se presenti nei contenuti multimediali.
    • Assicurati che il volume si abbassi gradualmente durante la ricerca.
    • Correzione dei rumori di scoppio che possono verificarsi durante le ricerche.
    • È stato corretto l'accumulo di errori di troncamento per l'algoritmo di allungamento/spostamento del tono di Sonic.
    • Correzione del bug in SpeedChangingAudioProcessor che causa la perdita di frame di output.
  • Video:
    • MediaCodecVideoRenderer evita di decodificare i campioni che non vengono visualizzati né utilizzati come riferimento da altri campioni.
    • Sulle API 35 e successive, MediaCodecAdapter ora può ricevere un null Surface in configure e chiamate a un nuovo metodo detachOutputSurface per rimuovere un Surface impostato in precedenza se il codec lo supporta (MediaCodecInfo.detachedSurfaceSupported).
    • Utilizza i valori delle proporzioni pixel forniti per MediaCodecAdapter, se disponibili, durante l'elaborazione di onOutputFormatChanged (#1371).
    • Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE che causa la marcatura come non supportati dei flussi H264 sicuri a 60 fps (#1619).
    • Aggiungi una soluzione alternativa per i codec che si bloccano dopo l'ultimo campione senza restituire un segnale di fine flusso.
  • Testo:
    • Aggiungi un VoiceSpan personalizzato e compilalo per gli intervalli vocali WebVTT (#1632).
    • Assicurati che i file WebVTT in HLS con timestamp dei sottotitoli molto grandi (che superano un long a 64 bit se rappresentati come microsecondi e moltiplicati per la base temporale MPEG 90,000) vengano visualizzati (#1763).
    • Supporto dei sottotitoli CEA-608 nei contenuti Dolby Vision (#1820).
    • È stato risolto il problema di blocco della riproduzione sui flussi multi-periodo DASH quando i sottotitoli codificati CEA-608 sono attivi (#1863).
  • Metadati:
    • Assegna il tipo C.TRACK_TYPE_METADATA alle tracce contenenti contenuti icy o vnd.dvb.ait.
  • Immagine:
    • Aggiungi ExternallyLoadedImageDecoder per semplificare l'integrazione con librerie di caricamento di immagini esterne come Glide o Coil.
  • DataSource:
    • Aggiungi FileDescriptorDataSource, un nuovo DataSource che può essere utilizzato per leggere da un FileDescriptor (#3757).
  • Effetto:
    • Aggiungi soluzione alternativa DefaultVideoFrameProcessor per scalabilità SurfaceTexture minore. SurfaceTexture può includere una piccola scalatura che taglia un bordo di 1 texel intorno al bordo di un buffer ritagliato. Ora la gestione è tale che l'output è più vicino a quello previsto.
    • Accelerare DefaultVideoFrameProcessor.queueInputBitmap(). Di conseguenza, l'esportazione di immagini in video con Transformer è più veloce.
  • Estensione IMA:
    • Risolto un bug per cui la cancellazione della playlist potrebbe causare un ArrayIndexOutOfBoundsException in ImaServerSideAdInsertionMediaSource.
    • Correzione del bug per cui gli stream DAI inseriti lato server senza preroll possono comportare un ArrayIndexOutOfBoundsException durante la riproduzione dopo l'ultimo mid-roll (#1741).
  • 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 interrotta senza che il sistema arresti in modo anomalo il servizio con un errore ForegroundServiceDidNotStartInTimeException (#1528).
    • Correzione del bug che causava l'invio di comandi personalizzati da un MediaBrowser a MediaSessionCompat.Callback anziché alla variante MediaBrowserServiceCompat del metodo quando connesso a un servizio legacy. Ciò ha impedito a MediaBrowser di ricevere il valore di ritorno effettivo inviato dal servizio legacy (#1474).
    • Gestisci IllegalArgumentException generato dai dispositivi di alcuni produttori quando imposti il ricevitore di trasmissione per gli intent dei pulsanti multimediali (#1730).
    • Aggiungi pulsanti di comando per gli elementi multimediali. In questo modo viene aggiunta l'API Media3 per quella che era nota come Custom browse actions con la libreria legacy con MediaBrowserCompat. Tieni presente che con i pulsanti di comando Media3 per gli elementi multimediali sono disponibili sia MediaBrowser che MediaController. Consulta Azioni di navigazione personalizzate di AAOS.
    • Correzione del bug per cui a volte un controller Media3 non riusciva a consentire a un'app di sessione di avviare un servizio in primo piano dopo aver richiesto play().
    • Limita CommandButton.Builder.setIconUri all'accettazione solo di URI dei contenuti.
    • Passa gli hint di connessione di un browser Media3 all'MediaBrowserCompat iniziale quando ti connetti a un MediaBrowserCompat legacy. Il servizio può ricevere i suggerimenti per la connessione passati come suggerimenti radice con la prima chiamata a onGetRoot().
    • È stato corretto il bug per cui un MediaBrowser connesso a un servizio browser legacy non riceveva un errore inviato dal servizio dopo che il browser aveva eseguito la sottoscrizione a un parentid.
    • Migliora il comportamento di interoperabilità, in modo che un browser Media3 connesso a un MediaBrowserService legacy non richieda due volte i figli di un parentId quando si iscrive a un publisher principale.
  • UI:
    • Attiva la 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 utilizzano PlayerView all'interno di AndroidView devono chiamare PlayerView.setEnableComposeSurfaceSyncWorkaround per attivare (#1237, #1594).
    • Aggiungi setFullscreenButtonState a PlayerView per consentire gli aggiornamenti dell'icona del pulsante a schermo intero su richiesta, ovvero fuori banda e non in modo reattivo a un'interazione di clic (#1590, #184).
    • È stato corretto il bug per cui la scelta "Nessuno" nella selezione del testo non funziona se sono presenti preferenze di selezione delle tracce di testo definite dall'app.
  • Estensione DASH:
    • Aggiungi il supporto per i periodi che iniziano a metà di un segmento (#1440).
  • Estensione Smooth Streaming:
    • Correzione dell'errore Bad magic number for Bundle durante la riproduzione di stream SmoothStreaming con tracce di testo (#1779).
  • Estensione RTSP:
    • Correzione della rimozione delle informazioni utente per gli URL che contengono caratteri @ codificati (#1138).
    • Correzione dell'arresto anomalo durante l'analisi dei pacchetti RTP con estensioni dell'intestazione (#1225).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
    • Aggiungi il modulo di decodifica IAMF, che fornisce 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 spatializzazione insieme al tracciamento della testa opzionale abilitato, ma il supporto della riproduzione binaurale non è attualmente disponibile.
    • Aggiungi il supporto delle pagine da 16 kB per le estensioni del decodificatore su Android 15 (#1685).
  • Estensione Cast:
    • Interrompi la pulizia della cronologia dopo la disconnessione di CastSession, il che consente all'app mittente di riprendere la riproduzione in locale dopo una disconnessione.
    • Compila DeviceInfo di CastPlayer quando viene fornito un Context. In questo modo è possibile collegare MediaSession a RoutingSession, il che è necessario per integrare Output Switcher (#1056).
  • Test Utilities:
    • DataSourceContractTest ora include test per verificare:
      • Lo stream di input read position è stato aggiornato.
      • Il buffer di output offset viene applicato correttamente.
  • App demo
    • Risolvi le perdite di memoria nell'app demo di video brevi (#1839).
  • Rimuovi i simboli ritirati:
    • Rimuovi Player.hasPrevious e Player.hasPreviousWindow() obsoleti. Utilizza invece Player.hasPreviousMediaItem().
    • Rimuovi il metodo Player.previous() obsoleto. Utilizza Player.seekToPreviousMediaItem().
    • Rimuovi il metodo DrmSessionEventListener.onDrmSessionAcquired deprecato.
    • Rimuovi i costruttori DefaultEncoderFactory deprecati. Utilizza DefaultEncoderFactory.Builder.

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 viene ritirata. La versione 1.4.1 contiene questi commit.

  • ExoPlayer:
    • Gestisci i callback di precaricamento in modo asincrono in PreloadMediaSource (#1568).
    • Consenti la riproduzione indipendentemente dalla durata del buffer in caso di errore di caricamento (#1571).
  • Estrattori:
    • MP3: correggi l'errore Searched too many bytes ignorando correttamente i dati non MP3 finali in base al campo lunghezza in un frame Info (#1480).
  • Testo:
    • TTML: correggi la gestione dei valori di percentuale tts:fontSize per assicurarti che vengano ereditati correttamente dai nodi principali con valori di percentuale tts:fontSize.
    • Correzione di IndexOutOfBoundsException in LegacySubtitleUtil a causa della gestione errata del caso in cui l'ora di inizio dell'output richiesto è maggiore o uguale all'ora dell'evento finale in Subtitle (#1516).
  • DRM:
    • Correzione dell'errore android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE sui dispositivi con API 31 e versioni successive che riproducono contenuti Widevine L1. Questo errore è causato da un'implementazione incompleta del metodo MediaDrm.requiresSecureDecoder (#1603).
  • Effetto:
    • Aggiungi un metodo release() a GlObjectsProvider.
  • Sessione:
    • Trasforma un doppio tocco di KEYCODE_HEADSETHOOK in un'azione "Vai al successivo", come documentato (#1493).
    • Gestisci KEYCODE_HEADSETHOOK come comando "Riproduci" in MediaButtonReceiver quando decidi se ignorarlo per evitare un ForegroundServiceDidNotStartInTimeException (#1581).
  • Estensione RTSP:
    • Ignora le descrizioni multimediali non valide nell'analisi SDP (#1087).

Versione 1.4.0

25 luglio 2024

androidx.media3:media3-*:1.4.0 viene ritirata. La versione 1.4.0 contiene questi commit.

  • Libreria comune:
    • Inoltra le chiamate di ricerca presunte no-op ai metodi protetti BasePlayer.seekTo() e SimpleBasePlayer.handleSeek() anziché ignorarle. Se implementi questi metodi in un player personalizzato, potresti dover gestire queste chiamate aggiuntive con mediaItemIndex == 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 un MediaItem non immagine (come documentato).
    • Aggiungi Format.customData per memorizzare informazioni personalizzate fornite dall'app sulle istanze di Format.
  • ExoPlayer:
    • Aggiungi BasePreloadManager che coordina il precaricamento per più origini in base alle priorità definite dal relativo rankingData. La personalizzazione è possibile estendendo questa classe. Aggiungi DefaultPreloadManager che utilizza PreloadMediaSource per precaricare i campioni multimediali delle sorgenti in memoria e utilizza un numero intero rankingData che indica l'indice di un elemento nell'interfaccia utente.
    • Aggiungi PlayerId alla maggior parte dei metodi di LoadControl per consentire alle implementazioni di LoadControl di supportare più giocatori.
    • Rimuovi Buffer.isDecodeOnly() e C.BUFFER_FLAG_DECODE_ONLY. Non è necessario impostare questo flag, in quanto i renderer e i decoder decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate di Renderer devono verificare se il tempo di buffer è almeno BaseRenderer.getLastResetPositionUs() per decidere se mostrare un campione. Le implementazioni personalizzate di SimpleDecoder possono controllare isAtLeastOutputStartTimeUs() se necessario o contrassegnare altri buffer con DecoderOutputBuffer.shouldBeSkipped per ignorarli.
    • Consenti la restituzione di un valore null da TargetPreloadStatusControl.getTargetPreloadStatus(T) per indicare di non precaricare un MediaSource con il rankingData specificato.
    • Aggiungi remove(MediaSource) a BasePreloadManager.
    • Aggiungi reset() a BasePreloadManager per rilasciare tutte le sorgenti di attesa mantenendo l'istanza di Preload Manager.
    • Aggiungi ExoPlayer.setPriority() (e Builder.setPriority()) per definire il valore di priorità utilizzato in PriorityTaskManager e per l'importanza di MediaCodec dall'API 35.
    • Risolvi il problema relativo all'aggiornamento dell'ultimo tempo di ribuffer che ha comportato la chiave bs (buffer starvation) errata in CMCD (#1124).
    • Aggiungi PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) per indicare che la fonte è stata caricata fino alla fine. Ciò consente alle implementazioni DefaultPreloadManager e personalizzate PreloadMediaSource.PreloadControl di precaricare la sorgente successiva o eseguire altre azioni.
    • È stato corretto un bug per cui il salto del silenzio alla fine degli elementi può attivare un'eccezione di riproduzione.
    • Aggiungi clear a PreloadMediaSource per ignorare il periodo di precaricamento.
    • Aggiungi un nuovo codice di errore PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED utilizzato quando le risorse del codec vengono recuperate per attività con priorità più alta.
    • Consenti a AdsMediaSource di caricare gli annunci pre-roll prima del completamento della preparazione iniziale dei contenuti multimediali (#1358).
    • È stato corretto un bug per cui la riproduzione veniva spostata su STATE_ENDED quando veniva ripreparato un live streaming DASH multi-periodo dopo che il periodo originale era già stato rimosso dal manifest.
    • Rinomina onTimelineRefreshed() in onSourcePrepared() e onPrepared() in onTracksSelected() in PreloadMediaSource.PreloadControl. Rinomina anche gli IntDef in DefaultPreloadManager.Stage di conseguenza.
    • Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro con i cicli di attivazione della CPU e ritardare l'attivazione fino a quando i renderer possono avanzare. Puoi attivarlo utilizzando experimentalSetDynamicSchedulingEnabled() quando configuri l'istanza di ExoPlayer.
    • Aggiungi Renderer.getDurationToProgressUs(). Un Renderer può implementare questo metodo per restituire a ExoPlayer la durata di avanzamento della riproduzione perché il renderer possa progredire. Se ExoPlayer è impostato con experimentalSetDynamicSchedulingEnabled(), ExoPlayer chiamerà questo metodo durante il calcolo del tempo per pianificare l'attività di lavoro.
    • Aggiungi MediaCodecAdapter#OnBufferAvailableListener per ricevere un avviso quando i buffer di input e output sono disponibili per l'utilizzo da parte di MediaCodecRenderer. MediaCodecRenderer segnalerà ExoPlayer quando riceve questi callback e se ExoPlayer è impostato con experimentalSetDynamicSchedulingEnabled(), ExoPlayer pianificherà il suo ciclo di lavoro man mano che i renderer fanno progressi.
    • Utilizza la classe di dati per i metodi LoadControl anziché i singoli parametri.
    • Aggiungi ExoPlayer.isReleased() per verificare se Exoplayer.release() è stato chiamato.
    • Aggiungi ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() per configurare la posizione massima per cui seekToPrevious() cerca l'elemento precedente (#1425).
    • Correzione di alcune incoerenze della messa a fuoco dell'audio, ad esempio la mancata segnalazione della perdita di messa a fuoco completa o temporanea durante la pausa del lettore (#1436).
    • Correzione di potenziali IndexOutOfBoundsException causati da estrattori che segnalano tracce aggiuntive dopo il passaggio di preparazione iniziale (#1476).
    • Effects in ExoPlayer.setVideoEffect() riceveranno i timestamp con l'offset del renderer rimosso (#1098).
    • Correzione di un potenziale IllegalArgumentException durante la gestione dell'errore del player verificatosi durante la lettura anticipata di un altro elemento della playlist (#1483).
  • Transformer:
    • Aggiungi audioConversionProcess e videoConversionProcess a ExportResult per indicare come è stata creata la rispettiva traccia nel file di output.
    • Rilassa i controlli del livello H.264 per l'ottimizzazione del taglio.
    • Aggiungi il supporto per il passaggio da un supporto di input SDR a uno 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.
    • Risolto il problema per cui DefaultAudioMixer non restituisce la quantità corretta di byte dopo essere stato reimpostato e riutilizzato.
    • Soluzione alternativa a un bug del decodificatore in 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, in quanto si applicano solo alla riproduzione.
    • Sostituisci l'interfaccia androidx.media3.transformer.Muxer con androidx.media3.muxer.Muxer e rimuovi androidx.media3.transformer.Muxer.
    • Correggi il caricamento delle immagini HEIC dagli schemi URI dei contenuti. (#1373).
    • Regola la durata della traccia audio in AudioGraphInput per migliorare la sincronizzazione audio/video.
    • Rimuovi il campo ExportResult.processedInputs. Se utilizzi questo campo per i dettagli del codec, utilizza invece DefaultDecoderFactory.listener. In caso di eccezione del codec, i dettagli del codec saranno disponibili in ExportException.codecInfo.
  • Estrattori:
    • MPEG-TS: esegui il roll forward della modifica assicurandoti che l'ultimo frame venga sottoposto a rendering passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Sono stati incorporati 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 Info rispetto alle dimensioni riportate dallo stream sottostante (ad es. dimensioni del file o intestazione HTTP Content-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 a bitrate costante, anziché estrapolare dal bitrate del frame dopo il frame Info, che potrebbe essere artificialmente piccolo, ad es. frame PCUT (#1376).
    • Correzione dell'estrazione del formato audio PCM nei container AVI.
  • Audio:
    • Correzione degli attributi di codifica del profilo 2 DTS:X per la riproduzione passthrough (#1299).
    • Per la riproduzione scaricata, reimposta il campo di monitoraggio per il completamento dello stream in DefaultAudioSink prima di chiamare AudioTrack.stop() in modo che AudioTrack.StreamEventCallback#onPresentationEnded identifichi correttamente quando sono stati riprodotti tutti i dati in attesa.
    • Correzione del bug in SilenceSkippingAudioProcessor in cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) possono causare l'interruzione del processore (#1352).
    • Implementa MediaCodecAudioRenderer.getDurationToProgressUs() in modo che ExoPlayer pianifichi dinamicamente il suo ciclo di lavoro principale in modo che MediaCodecAudioRenderer possa fare progressi.
  • Video:
    • È stato risolto il problema a causa del quale Listener.onRenderedFirstFrame() arriva troppo presto quando si cambia dispositivo durante la riproduzione.
    • Correzione della logica di fallback del decodificatore per Dolby Vision per utilizzare un decodificatore AV1 compatibile, se necessario (#1389).
    • Correzione dell'eccezione del codec che può essere causata dall'attivazione di un renderer video durante la riproduzione.
  • Testo:
    • È stato risolto il problema per cui i sottotitoli che iniziano prima di una posizione di ricerca vengono ignorati. Questo problema è stato introdotto solo in Media3 1.4.0-alpha01.
    • Modifica il comportamento predefinito di analisi dei sottotitoli codificati in modo che avvenga durante l'estrazione anziché durante il rendering (vedi il diagramma dell'architettura di ExoPlayer per la differenza tra estrazione e rendering).
      • Questa modifica può essere ignorata chiamando sia MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) sia TextRenderer.experimentalSetLegacyDecodingEnabled(true). Consulta la documentazione sulla personalizzazione per scoprire come integrare questi componenti in un'istanza ExoPlayer. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli codificati precedenti) verranno rimossi in una release futura.
      • Le app con implementazioni SubtitleDecoder personalizzate devono aggiornarle per implementare SubtitleParser (e SubtitleParser.Factory anziché SubtitleDecoderFactory).
    • PGS: correggi la decodifica run-length per risolvere 0 come indice di colore, anziché un valore di colore letterale (#1367).
    • CEA-708: ignora il valore rowLock. La specifica CEA-708-E S-2023 indica che rowLock e columnLock devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto di columnLock non è implementato, quindi si presume che sia sempre falso).
      • Inizialmente era incluso nelle note di rilascio di 1.3.0-alpha01, ma la modifica è stata annullata per errore prima della release di 1.3.0-rc01. Il problema è stato risolto e la modifica è di nuovo presente.
    • CEA-708: evita l'aggiunta di nuove righe duplicate da parte della gestione semplice del comando "set pen location" di ExoPlayer (#1315).
    • Correzione di un IllegalArgumentException di LegacySubtitleUtil quando un esempio di sottotitoli WebVTT non contiene cue, ad es. nell'ambito di uno stream DASH (#1516).
  • Metadati:
    • Correggi la mappatura di MP4 ai tag di ordinamento ID3. In precedenza, i tag MP4 "ordinamento album" (soal), "ordinamento artisti" (soar) e "ordinamento artisti album" (soaa) erano mappati erroneamente ai tag ID3 TSO2, TSOA e TSOP (#1302).
    • Correzione della lettura dei tag numerici gnre (genere) e tmpo (tempo) MP4 (/iTunes) quando il valore è più lungo di un byte.
    • Propaga il frame ID3 TCON a MediaMetadata.genre (#1305).
  • Immagine:
    • Aggiungi il supporto per le griglie di miniature DASH non quadrate (#1300).
    • Aggiungi il supporto per AVIF per l'API 34+.
    • Consenti null come parametro per ExoPlayer.setImageOutput() per cancellare un ImageOutput impostato in precedenza.
  • DataSource:
    • Implementa il supporto per gli URI delle risorse non elaborate di android.resource://package/id dove package è diverso dal pacchetto dell'applicazione corrente. In precedenza non era documentato che funzionasse, ma è un modo più efficiente di accedere alle risorse in un altro pacchetto rispetto all'accesso per nome.
    • Controlla con attenzione che url non sia null nei costruttori DataSpec. Questo parametro è già stato annotato come non nullo.
    • Consenti a ByteArrayDataSource di risolvere un URI in un array di byte durante open(), anziché essere codificato in modo permanente durante la costruzione (#1405).
  • DRM:
    • Consenti l'impostazione di un LoadErrorHandlingPolicy su DefaultDrmSessionManagerProvider (#1271).
  • Effetto:
    • Supporta più modifiche della velocità all'interno dello stesso EditedMediaItem o Composition in SpeedChangeEffect.
    • Supporto per l'output HLG e PQ dall'input bitmap ultra HDR.
    • Aggiungi il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, che migliora l'output della superficie HLG in ExoPlayer.setVideoEffect e Debug SurfaceView di Transformer.
    • Aggiorna l'implementazione della matrice di overlay in modo che sia coerente con la documentazione invertendo i valori x e y applicati in setOverlayFrameAnchor(). Se utilizzi OverlaySettings.Builder.setOverlayFrameAnchor(), inverti i valori x e y moltiplicandoli per -1.
    • Correzione del bug per cui TimestampWrapper si arresta in modo anomalo quando viene utilizzato con ExoPlayer#setVideoEffects (#821).
    • Modifica lo spazio di lavoro predefinito per i colori SDR da colori lineari a video SDR BT.709 elettrico. Fornisci anche una terza opzione per mantenere lo spazio colore originale.
    • Consenti la definizione dell'ordine Z indeterminato di EditedMediaItemSequences (#1055).
    • Mantenere un intervallo di luminanza coerente in diversi contenuti HDR (utilizza l'intervallo HLG).
    • Aggiungi il supporto per le sovrapposizioni Ultra HDR (bitmap) sui contenuti HDR.
    • Consenti l'utilizzo degli effetti SeparableConvolution prima dell'API 26.
    • Rimuovi OverlaySettings.useHdr inutilizzati poiché l'intervallo dinamico della sovrapposizione e del frame deve corrispondere.
    • Aggiungi il supporto HDR per TextOverlay. La luminanza dell'overlay di testo può essere regolata con OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • Estensione IMA:
    • Promuovi l'API richiesta per la riproduzione di stream di annunci DAI alla versione stabile.
    • Aggiungi replaceAdTagParameters(Map <String, String>) a ImaServerSideAdInsertionMediaSource.AdLoader che consente di sostituire i parametri del tag annuncio in fase di runtime.
    • Correzione del bug per cui VideoAdPlayer.VideoAdPlayerCallback.onError() non veniva chiamato quando si verificava un errore del player durante la riproduzione dell'annuncio (#1334).
    • Aumenta la versione dell'SDK IMA a 3.33.0 per correggere un NullPointerException quando utilizzi gli URI dei tag annuncio data:// (#700).
  • Sessione:
    • Modifica il valore predefinito di CommandButton.enabled in true e assicurati che il valore possa rimanere false per i controller anche se il comando associato è disponibile.
    • Aggiungi costanti di icone per CommandButton da utilizzare al posto delle risorse di icone personalizzate.
    • Aggiungi MediaSessionService.isPlaybackOngoing() per consentire alle app di verificare se il servizio deve essere interrotto in onTaskRemoved() (#1219).
    • Aggiungi MediaSessionService.pauseAllPlayersAndStopSelf() che consente comodamente di mettere in pausa la riproduzione di tutte le sessioni e chiamare stopSelf() per terminare il ciclo di vita di MediaSessionService.
    • Esegui l'override di MediaSessionService.onTaskRemoved(Intent) per fornire un'implementazione predefinita sicura che mantiene il servizio in esecuzione in primo piano se la riproduzione è in corso o lo interrompe 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 MediaMetadata a MediaDescriptionCompat per utilizzare lo stesso ordine e la stessa logica preferiti quando selezioni le 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 (vedi MediaSession.getMediaNotificationControllerInfo()), l'errore personalizzato viene utilizzato per aggiornare lo PlaybackState della sessione della piattaforma a 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 giocatore da un controller specifico è terminata.
    • Aggiungi SessionError e utilizzalo in SessionResult e LibraryResult anziché il codice di errore per fornire maggiori informazioni sull'errore e su come risolverlo, se possibile.
    • Pubblica il codice dell'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 a PlaybackStateCompat.getExtras() di un controller media1.
    • Mappa gli errori irreversibili e non irreversibili da e verso la sessione della piattaforma. Un PlaybackException viene mappato a uno stato di errore irreversibile di PlaybackStateCompat. Un SessionError inviato al controller di notifica dei contenuti multimediali con MediaSession.sendError(ControllerInfo, SessionError) viene mappato a un errore non fatale in PlaybackStateCompat, il che significa che il codice e il messaggio di errore sono impostati, ma lo stato della sessione della piattaforma rimane diverso da STATE_ERROR.
    • Consente di impostare l'attività della sessione per controller in modo da ignorare l'attività della sessione globale. L'attività della sessione può essere definita per un controller al momento della connessione creando un ConnectionResult con AcceptedResultBuilder.setSessionActivivty(PendingIntent). Una volta connessa, l'attività della sessione può essere aggiornata con MediaSession.setSessionActivity(ControllerInfo, PendingIntent).
    • Migliora la replica degli errori delle chiamate a MediaLibrarySession.Callback. La replica degli errori ora può essere configurata utilizzando MediaLibrarySession.Builder.setLibraryErrorReplicationMode() per scegliere il tipo di errore o disattivare la replica degli errori, che è attiva per impostazione predefinita.
  • UI:
    • Aggiungi il supporto per la visualizzazione delle immagini a PlayerView quando è connesso a un ExoPlayer (#1144).
    • Aggiungi la personalizzazione di varie icone in PlayerControlView tramite attributi XML per consentire diversi elementi disegnabili per istanza PlayerView, anziché override globali (#1200).
    • Soluzione alternativa a un bug della piattaforma che causa lo stiramento/il ritaglio del video quando si utilizza SurfaceView all'interno di un AndroidView sull'API 34 (#1237).
  • Download:
    • Assicurati che DownloadHelper non rilasci istanze Renderer non rilasciate, che possono causare l'arresto anomalo di un'app con IllegalStateException: Too many receivers, total of 1000, registered for pid (#1224).
  • Estensione Cronet:
    • Correggi SocketTimeoutException in CronetDataSource. 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).
  • Estensione HLS:
    • Correzione del bug per cui i campioni EMSG in attesa di una discontinuità venivano delegati in HlsSampleStreamWrapper con un offset errato che causava un IndexOutOfBoundsException o un IllegalArgumentException (#1002).
    • È stato corretto un bug a causa del quale le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
    • Correzione del bug per cui l'attivazione di CMCD per HLS con segmenti di inizializzazione comportava Source Error e IllegalArgumentException.
    • È stato corretto un bug a causa del quale le playlist di riproduzione non principali non venivano aggiornate durante la riproduzione live (#1240).
    • Correzione del bug per cui l'attivazione di CMCD per i live streaming HLS causa ArrayIndexOutOfBoundsException (#1395).
  • Estensione DASH:
    • È stato corretto un bug per cui la rielaborazione di un live streaming multi-periodo può generare un IndexOutOfBoundsException (#1329).
    • Aggiungi il supporto per gli URL delle licenze dashif:Laurl (#1345).
  • Estensione Cast:
    • Correzione del bug che convertiva il titolo dell'album di MediaQueueItem nell'artista nell'elemento multimediale Media3 (#1255).
  • Test Utilities:
    • Implementa onInit() e onRelease() in FakeRenderer.
    • Modifica i metodi TestPlayerRunHelper.runUntil()/playUntil() in modo che non vengano eseguiti in caso di errori non irreversibili (ad es. quelli segnalati a AnalyticsListener.onVideoCodecError()). Utilizza la nuova catena di metodi TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() per disattivare questo comportamento.
  • App demo:
    • Utilizza DefaultPreloadManager nell'app demo per i video nel formato breve.
    • Consenti l'impostazione della modalità di ripetizione con argomenti Intent dalla riga di comando (#1266).
    • Utilizzare HttpEngineDataSource come HttpDataSource se supportato dal dispositivo.
  • Rimuovi i simboli ritirati:
    • Rimuovi CronetDataSourceFactory. Utilizza invece CronetDataSource.Factory.
    • Rimuovi alcuni costruttori di DataSpec. Utilizza invece DataSpec.Builder.
    • Rimuovi il metodo setContentTypePredicate(Predicate) da DefaultHttpDataSource, OkHttpDataSource e CronetDataSource. Utilizza il metodo equivalente su ogni XXXDataSource.Factory.
    • Rimuovi i costruttori OkHttpDataSource e OkHttpDataSourceFactory. Utilizza invece OkHttpDataSource.Factory.
    • Rimuovi PlayerMessage.setHandler(Handler). Utilizza invece setLooper(Looper).
    • Rimuovi il campo Timeline.Window.isLive. Utilizza invece il metodo isLive().
    • Rimuovi i costruttori DefaultHttpDataSource. Utilizza DefaultHttpDataSource.Factory.
    • Rimuovi DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Utilizza DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.
    • Rimuovi MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Utilizza invece MediaCodecInfo.canReuseCodec(Format, Format).
    • Rimuovi il metodo DrmSessionManager.DUMMY e getDummyDrmSessionManager(). Utilizza invece DrmSessionManager.DRM_UNSUPPORTED.
    • Rimuovi AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format), VideoRendererEventListener.onVideoInputFormatChanged(Format). Utilizza gli overload che accettano un DecoderReuseEvaluation.
    • Rimuovi le costanti RendererSupport.FormatSupport IntDef e FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE, FORMAT_UNSUPPORTED_TYPE. Utilizza le costanti e IntDef equivalenti in androidx.media3.common.C (ad es. C.FORMAT_HANDLED).
    • Rimuovi l'interfaccia Bundleable. Ciò include la rimozione di tutti i campi costanti Bundleable.Creator<Foo> CREATOR. I chiamanti devono utilizzare i metodi Bundle toBundle() e static Foo fromBundle(Bundle) su ogni tipo.

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 viene ritirata. La versione 1.3.1 contiene questi commit.

  • Libreria comune:
    • Aggiungi Format.labels per consentire etichette localizzate o alternative.
  • ExoPlayer:
    • È stato risolto il problema per cui PreloadMediaPeriod non riesce a conservare gli stream quando vengono precaricati di nuovo.
    • Applica il valore TrackSelectionResult corrispondente corretto al periodo di riproduzione nella riselezione della traccia.
    • Avvia i renderer con attivazione anticipata solo dopo aver fatto avanzare il periodo di riproduzione durante la transizione tra gli elementi multimediali (#1017).
    • Aggiungi il tipo restituito mancante alla regola proguard -keepclasseswithmembers per DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Transformer:
    • Aggiungi una soluzione alternativa per l'eccezione generata perché MediaMuxer non supporta i timestamp di presentazione negativi prima dell'API 30.
  • Selezione tracce:
    • DefaultTrackSelector: preferisce le tracce video con una frequenza di frame "ragionevole" (>=10 fps) rispetto a quelle con una frequenza di frame inferiore o non impostata. In questo modo, il player seleziona la traccia video "reale" nei file MP4 estratti dalle foto in movimento che possono contenere due tracce HEVC, una con una risoluzione più alta ma un numero di frame molto ridotto (#1051).
  • Estrattori:
    • Risolto il problema per cui il padding non veniva ignorato durante la lettura di blocchi di dimensioni dispari dai file WAV (#1117).
    • MP3: compila Format.averageBitrate dai frame dei metadati come XING e VBRI.
    • MPEG-TS: ripristina una modifica che mirava a garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Ciò è dovuto alla modifica che causa nuovi problemi con gli stream HLS solo con I-frame (#1150) e gli stream HLS H.262 (#1126).
  • Audio:
    • Consenti il recupero del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità offload.
  • Video:
    • Aggiungi 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 visualizzazione degli stream H265 a 60 fps come non supportati
    • Aggiungi una soluzione alternativa che garantisca il rendering del primo frame durante il tunneling anche se il dispositivo non lo esegue automaticamente come richiesto dall'API (#1169). (#966).
    • Risolto il problema per cui la gestione delle informazioni sul colore HDR causa un comportamento anomalo del codec e impedisce il cambio di formato adattivo per le tracce video SDR (#1158).
  • Testo:
    • WebVTT: impedisci che cue consecutivi creino istanze CuesWithTiming aggiuntive spurie da WebvttParser.parse (#1177).
  • DRM:
    • Soluzione alternativa per un NoSuchMethodError che può essere generato dal framework MediaDrm anziché da ResourceBusyException o NotProvisionedException su alcuni dispositivi Android 14 (#1145).
  • Effetto:
    • Miglioramento della mappatura della tonalità PQ in SDR mediante la conversione degli spazi colore.
  • Sessione:
    • È stato risolto il problema per cui la posizione attuale torna indietro quando il controller sostituisce l'elemento corrente (#951).
    • Risolto il problema per cui MediaMetadata con solo extras non null viene trasmesso tra i controller multimediali e le sessioni (#1176).
  • UI:
    • Esegui il fallback per includere il nome della lingua della traccia audio se Locale non riesce a identificare un nome visualizzato (#988).
  • Estensione DASH:
    • Inserisci tutti gli elementi Label del manifest in Format.labels (#1054).
  • Estensione RTSP:
    • Ignora i valori vuoti delle informazioni sulla sessione (i-tag) nell'analisi SDP (#1087).
  • Estensioni del decodificatore (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 viene ritirata. 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 in cui package è diverso dal pacchetto dell'applicazione corrente. È sempre stato documentato che funziona, ma non è stato implementato 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 MediaItem completo anziché un singolo Uri in AdPlaybackState.
    • Aumenta minSdk a 19 (Android KitKat). Questo è in linea con tutte le altre librerie AndroidX ed è necessario per eseguire l'upgrade alle versioni più recenti delle nostre dipendenze AndroidX.
    • Compila sia artworkUri sia artworkData in MediaMetadata.Builder.populate(MediaMetadata) quando almeno uno dei due non è nullo (#964).
  • ExoPlayer:
    • Aggiungi PreloadMediaSource e PreloadMediaPeriod che consentono alle app di precaricare un'origine multimediale di contenuti in una posizione iniziale specifica prima della riproduzione. PreloadMediaSource si occupa di preparare l'origine dei contenuti multimediali per ricevere il Timeline, 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 implementando PreloadMediaSource.PreloadControl e impostano l'origine precaricata sul player per la riproduzione.
    • Aggiungi ExoPlayer.setImageOutput che consente alle app di impostare ImageRenderer.ImageOutput.
    • DefaultRenderersFactory ora fornisce un ImageRenderer al giocatore per impostazione predefinita con ImageOutput e ImageDecoder.Factory.DEFAULT nulli.
    • Emetti l'evento Player.Listener.onPositionDiscontinuity quando il silenzio viene saltato (#765).
    • Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi abilitare questa opzione utilizzando MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Supporta le origini multimediali adattive con PreloadMediaSource.
    • Implementa HttpEngineDataSource, un HttpDataSource utilizzando l'API HttpEngine.
    • Evita la creazione di sottoclassi CompositeSequenceableLoader. Questo componente è stato precedentemente reso estensibile ma non è mai stato creato come sottoclasse all'interno della libreria. Le personalizzazioni possono essere eseguite wrapping di un'istanza utilizzando il pattern Decorator e implementando un CompositeSequenceableLoaderFactory personalizzato.
    • È stato risolto il problema per cui la ripetizione dello stesso orario causava la cancellazione dei metadati di questo elemento (#1007).
    • Rinomina i metodi experimentalSetSubtitleParserFactory su BundledChunkExtractor.Factory e DefaultHlsExtractorFactory in setSubtitleParserFactory e non consentire il passaggio di null. Utilizza i nuovi metodi experimentalParseSubtitlesDuringExtraction(boolean) per controllare il comportamento di analisi.
    • Aggiungi il supporto per la personalizzazione di SubtitleParser.Factory utilizzato durante l'estrazione. È possibile ottenere questo risultato con MediaSource.Factory.setSubtitleParserFactory().
    • Aggiungi il prefisso dell'origine a tutti i campi Format.id generati da MergingMediaSource. In questo modo è più facile identificare l'origine che ha prodotto un Format (#883).
    • Correggi l'espressione regolare utilizzata per la convalida dei nomi delle chiavi Common Media Client Data (CMCD) personalizzate modificandola in modo che controlli solo il trattino (#1028).
    • Interrompi la doppia codifica dei parametri di query CMCD (#1075).
  • Transformer:
    • Aggiunta del supporto per l'appiattimento dei video in slow motion H.265/HEVC SEF.
    • Aumenta la velocità di transmuxing, soprattutto per le modifiche di "rimozione video".
    • Aggiungi l'API per assicurarti che il file di output inizi con un frame video. In questo modo, l'output delle operazioni di taglio è più compatibile con le implementazioni del player che non mostrano il primo frame video finché non viene visualizzato il timestamp di presentazione (#829).
    • Aggiungi il supporto per l'ottimizzazione delle operazioni di taglio MP4 di un singolo asset.
    • Aggiungi il supporto per garantire che un fotogramma video abbia il primo timestamp nel file di output. Correzioni dei file di output che iniziano con un fotogramma nero sui lettori basati su iOS (#829).
  • Selezione tracce:
    • Aggiungi DefaultTrackSelector.selectImageTrack per attivare la selezione della traccia dell'immagine.
    • Aggiungi TrackSelectionParameters.isPrioritizeImageOverVideoEnabled per determinare se selezionare una traccia di immagini se sono disponibili sia una traccia di immagini che una traccia video. Il valore predefinito è false, il che significa che la selezione di una traccia video è prioritaria.
  • Estrattori:
    • Aggiungi l'analisi AV1C aggiuntiva all'estrattore MP4 per recuperare i valori ColorInfo.colorSpace, ColorInfo.colorTransfer e ColorInfo.colorRange (#692).
    • MP3: utilizza la ricerca a bitrate costante (CBR) per i file con un'intestazione Info (l'equivalente CBR dell'intestazione Xing). In precedenza utilizzavamo la tabella di ricerca dall'intestazione Info, ma ciò comporta una ricerca meno precisa rispetto a quando la ignoriamo e supponiamo che il file sia CBR.
    • MPEG2-TS: aggiungi il supporto di DTS, DTS-LBR e DTS:X Profile2 (#275).
    • Estrai i tipi di audio dai descrittori TS e mappali ai flag di ruolo, consentendo agli utenti di effettuare selezioni più informate delle tracce audio (#973).
  • Audio:
    • Miglioramento dell'algoritmo di salto del silenzio con rampa di volume uniforme; mantenimento del silenzio minimo e durate del silenzio più naturali (#7423).
    • Segnala il silenzio saltato in modo più deterministico (#1035).
  • Video:
    • Modifica il costruttore MediaCodecVideoRenderer che accetta un argomento VideoFrameProcessor.Factory e sostituiscilo con un costruttore che accetta un argomento VideoSinkProvider. Le app che vogliono inserire un VideoFrameProcessor.Factory personalizzato possono istanziare un CompositingVideoSinkProvider che utilizza il VideoFrameProcessor.Factory personalizzato e passare il fornitore del sink video a MediaCodecVideoRenderer.
  • Testo:
    • Correzione della serializzazione dei cue bitmap per risolvere l'errore Tried to marshall a Parcel that contained Binder objects quando si utilizza DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708: ignora il valore rowLock. La specifica CEA-708-E S-2023 indica che rowLock e columnLock devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto di columnLock non è implementato, quindi si presume che sia sempre falso).
  • Immagine:
    • Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e le singole miniature vengono fornite a ImageOutput in prossimità degli orari di presentazione.
  • DRM:
  • Estensione IMA:
    • Risolvi il problema per cui gli annunci DASH e HLS senza l'estensione file appropriata non possono essere riprodotti.
  • Sessione:
    • Disattivare il rilevamento del doppio clic per le app TV (#962).
    • Risolto il problema per cui MediaItem.RequestMetadata con solo extra non nulli non viene trasmesso tra i controller multimediali e le sessioni.
    • Aggiungi un costruttore a MediaLibrarySession.Builder che accetta solo un Context anziché un MediaLibraryService.
  • Estensione HLS:
    • Riduci HlsMediaPeriod alla visibilità privata del pacchetto. Questo tipo non deve dipendere direttamente da elementi esterni al pacchetto HLS.
    • Risoluzione della ricerca all'inizio di un segmento in modo più efficiente (#1031).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
    • Decodificatore MIDI: ignora i messaggi di eventi SysEx (#710).
  • Test Utilities:
    • 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 ulteriori azioni.
  • App demo:
    • Aggiungi un modulo demo di shortform per dimostrare l'utilizzo di PreloadMediaSource con il caso d'uso dei contenuti nel formato breve.

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/maxOffset continuano a regolare l'offset su min/maxOffset.
    • Correzione del problema relativo ai layout dei canali OPUS e VORBIS errati per 3, 5, 6, 7 e 8 canali (#8396).
    • È stato risolto il problema per cui le selezioni delle tracce dopo la ricerca fino a zero in un live streaming consentivano erroneamente l'avvio dello stream nella posizione predefinita (#9347).
    • Risolvi il problema per cui le nuove istanze di CmcdData.Factory ricevevano valori negativi per bufferedDurationUs dalle origini dei chunk, con conseguente IllegalArgumentException (#888).
  • Transformer:
    • Soluzione alternativa a un problema per cui l'encoder generava un errore in fase di configurazione a causa dell'impostazione di una frequenza operativa elevata.
  • Estrattori:
    • Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come ROLE_FLAG_ALTERNATE per evitare che vengano selezionate automaticamente per la riproduzione a causa della loro risoluzione più elevata.
    • Correzione del rilevamento errato dei fotogrammi chiave per gli stream TS H264 (#864).
    • Correzione della stima della durata dei flussi TS più lunghi di 47721 secondi (#855).
  • Audio:
    • Correzione della gestione di EOS per SilenceSkippingAudioProcessor quando viene chiamato più volte (#712).
  • Video:
    • Aggiungi 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 visualizzazione dei flussi AVC a 60 fps come non supportati (#693).
  • Metadati:
    • Correzione del bug per cui MediaMetadata veniva compilato solo dai commenti Vorbis con chiavi in maiuscolo (#876).
    • Catch OutOfMemoryError durante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni del tag anziché interrompersi completamente.
  • DRM:
    • Estendi la soluzione alternativa per l'URL della licenza ClearKey https://default.url spurio all'API 33+ (in precedenza la soluzione alternativa si applicava solo all'API 33) (#837).
    • Correzione di ERROR_DRM_SESSION_NOT_OPENED quando si passa da contenuti criptati a contenuti non criptati senza una superficie collegata al lettore. L'errore è dovuto all'utilizzo errato di un decoder sicuro per riprodurre i contenuti non protetti.
  • Sessione:
    • Inserisci le chiavi e i valori personalizzati in MediaMetadataCompat per MediaMetadata.extras e MediaMetadata.extras per MediaMetadataCompat (#756, #802).
    • Correzione della trasmissione notifyChildrenChanged per i controller legacy (#644).
    • È stato corretto un bug per cui l'impostazione di un tempo negativo per un timer setWhen disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903).
    • Correzione di IllegalStateException quando il controller di notifica dei contenuti multimediali non ha completato la connessione quando viene richiesto il primo aggiornamento della notifica (#917).
  • UI:
    • È stato risolto il problema per cui i pulsanti Avanti e Riavvolgi non sono visibili quando vengono utilizzati con Material Design in un BottomSheetDialogFragment (#511).
    • È stato risolto il problema per cui i numeri nel pulsante di avanzamento rapido di PlayerControlView non erano allineati (#547).
  • Estensione DASH:
    • Analizza "f800" come conteggio dei canali pari a 5 per Dolby nel manifest DASH (#688).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
    • MIDI: è stato risolto un problema per cui la ricerca in avanti salta gli eventi di cambio programma (#704).
    • Esegui la migrazione a FFmpeg 6.0 e aggiorna l'NDK supportato a r26b (#707, #867).
  • Estensione Cast:
    • Sanitizzazione della creazione di un Timeline per evitare l'arresto anomalo dell'app durante il caricamento dei contenuti multimediali non riuscito sul dispositivo di trasmissione (#708).

Versione 1.2.0

15 novembre 2023

  • Libreria comune:
    • Aggiungi un parametro @Nullable Throwable ai metodi nell'interfaccia Log.Logger. Il parametro message di questi metodi non contiene più alcuna informazione su Throwable passato ai metodi Log.{d,i,w,e}(), pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se necessario (possibilmente utilizzando Logger.appendThrowableString(String, Throwable)).
    • Risolvi il problema di compatibilità di Kotlin per cui i parametri di tipo generico nullable e i tipi di elementi array nullable non vengono rilevati come nullable. Esempi sono i parametri dei metodi TrackSelectorResult e SimpleDecoder (#6792).
    • Modifica il comportamento predefinito della UI e delle notifiche in Util.shouldShowPlayButton per mostrare un pulsante "Riproduci" mentre la riproduzione è temporaneamente sospesa (ad es. a causa della perdita temporanea della messa a fuoco audio). Il comportamento precedente può essere mantenuto utilizzando PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) o MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Esegui l'upgrade di androidx.annotation:annotation-experimental a 1.3.1 per correggere https://issuetracker.google.com/251172715.
    • Sposta ExoPlayer.setAudioAttributes nell'interfaccia Player.
  • ExoPlayer:
    • Correzione dei 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 a Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT se si tenta 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 viene collegato un output adatto.
    • Aggiungi MediaSource.canUpdateMediaItem e MediaSource.updateMediaItem per accettare gli aggiornamenti di MediaItem dopo la creazione tramite Player.replaceMediaItem(s).
    • Consenti gli aggiornamenti di MediaItem per tutte le classi MediaSource fornite dalla libreria tramite Player.replaceMediaItem(s) (#33, #9978).
    • Rinomina MimeTypes.TEXT_EXOPLAYER_CUES in MimeTypes.APPLICATION_MEDIA3_CUES.
    • Aggiungi PngExtractor che invia e legge un intero file PNG in TrackOutput come un campione.
    • Migliora il metodo SequenceableLoader.continueLoading(long) nell'interfaccia SequenceableLoader per SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contiene parametri aggiuntivi, tra cui playbackSpeed e lastRebufferRealtimeMs, oltre a playbackPositionUs esistente.
    • Migliora il metodo ChunkSource.getNextChunk(long, long, List, ChunkHolder) nell'interfaccia ChunkSource per ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Aggiungi campi aggiuntivi alla registrazione dei dati del client multimediale comune (CMCD): buffer starvation (bs), deadline (dl), playback rate (pr) and startup (su) (#8699).
    • Aggiungi la profondità di bit di luminanza e crominanza a ColorInfo (#491).
    • Aggiungi campi aggiuntivi alla registrazione dei dati del client multimediale comune (CMCD): richiesta dell'oggetto successivo (nor) e richiesta dell'intervallo successivo (nrr) (#8699).
    • Aggiungi la funzionalità per trasmettere i dati Common Media Client Data (CMCD) utilizzando i parametri di query (#553).
    • Correggi ConcurrentModificationException in ExperimentalBandwidthMeter (#612).
    • Aggiungi il parametro MediaPeriodId a CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Supporta ClippingMediaSource (e altre origini con offset di periodo/intervallo di tempo) in ConcatenatingMediaSource2 (#11226).
    • Modifica BaseRenderer.onStreamChanged() per ricevere anche un argomento MediaPeriodId.
  • Transformer:
    • Analizza i dati di rotazione EXIF per gli input immagine.
    • Rimuovi il tipo di annotazione TransformationRequest.HdrMode e le relative costanti. Utilizza Composition.HdrMode e le relative costanti.
    • Semplifica il OverlaySettings per risolvere i problemi di rotazione.
    • Modificati i parametri frameRate e durationUs di SampleConsumer.queueInputBitmap in TimestampIterator.
  • Selezione tracce:
    • Aggiungi DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness per consentire o vietare esplicitamente l'adattamento non ottimale. Il valore predefinito rimane al comportamento attuale di true.
  • Estrattori:
    • MPEG-TS: assicurati che l'ultimo frame venga sottoposto a rendering passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909).
    • Correzione dell'errore ortografico durante la determinazione di rotationDegrees. Modifica apportata da projectionPosePitch a projectionPoseRoll (#461).
    • Rimuovi l'ipotesi che le istanze Extractor possano essere ispezionate direttamente con instanceof. Se vuoi accedere in fase di runtime ai dettagli di implementazione di un Extractor, devi prima chiamare Extractor.getUnderlyingInstance.
    • Aggiungi BmpExtractor.
    • Aggiungi WebpExtractor.
    • Aggiungi HeifExtractor.
    • Aggiungi il supporto di QuickTime Classic a Mp4Extractor.
  • Audio:
    • Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza la codifica PCM per lpcm in MP4.
    • Aggiungi 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 un DefaultAudioOffloadSupportProvider. Restituisce il nuovo AudioOffloadSupport che contiene isFormatSupported, isGaplessSupported e isSpeedChangeSupported.
    • Aggiungi AudioSink.setOffloadMode() tramite cui viene configurata la configurazione di offload nel sink audio. Il valore predefinito è AudioSink.OFFLOAD_MODE_DISABLED.
    • Il trasferimento può essere attivato tramite setAudioOffloadPreference in TrackSelectionParameters. 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 su AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, DefaultTrackSelector selezionerà solo una traccia audio e solo se il formato della traccia è supportato nell'offload. Se nessuna traccia audio è supportata nell'offload, non verrà selezionata alcuna traccia.
    • Disattivazione del supporto gapless per l'offload quando il livello API è precedente a 33 a causa di un problema di posizione di riproduzione dopo la transizione della traccia.
    • Rimuovi il parametro enableOffload dalla firma del metodo DefaultRenderersFactory.buildAudioSink.
    • Rimuovi il metodo DefaultAudioSink.Builder.setOffloadMode.
    • Rimuovi il valore intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Aggiungi il supporto per i metadati gapless di Opus durante la riproduzione con scaricamento.
    • Consenti il recupero 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.experimentalSetOffloadSchedulingEnabled e AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged è stato rinominato in onSleepingForOffloadChanged e onExperimentalOffloadedPlayback in onOffloadedPlayback.
    • Sposta le interfacce e le definizioni relative alla modalità di offload audio in una classe AudioOffloadPreferences interna.TrackSelectionParameters
    • Aggiungi i callback onAudioTrackInitialized e onAudioTrackReleased a AnalyticsListener, AudioRendererEventListener e AudioSink.Listener.
    • Correzione del problema di underflow del buffer audio DTS Express (#650).
    • Correzione del bug per cui il controllo delle funzionalità per E-AC3-JOC genera un IllegalArgumentException (#677).
  • Video:
    • Consenti a MediaCodecVideoRenderer di utilizzare un VideoFrameProcessor.Factory personalizzato.
    • È stato corretto un bug a causa del quale non era possibile eseguire il rendering del primo frame se lo stream audio inizia con timestamp negativi (#291).
  • Testo:
    • Rimuovi ExoplayerCuesDecoder. Le tracce di testo con sampleMimeType = application/x-media3-cues ora vengono gestite direttamente da TextRenderer senza bisogno di un'istanza SubtitleDecoder.
  • Metadati:
    • MetadataDecoder.decode non verrà più chiamato per i campioni "solo decodifica" poiché l'implementazione deve comunque restituire null.
  • Effetto:
    • Aggiungi VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) input bitmap in coda in base al timestamp.
    • Modifica VideoFrameProcessor.registerInputStream() in modo che non blocchi. Le app devono implementare VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Modificati i parametri frameRate e durationUs di VideoFrameProcessor.queueInputBitmap in TimestampIterator.
  • Estensione IMA:
    • È stato corretto 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()
    • Aumenta la versione dell'SDK IMA a 3.31.0.
  • Sessione:
    • Imposta il comportamento del servizio in primo piano delle notifiche su FOREGROUND_SERVICE_IMMEDIATE in DefaultMediaNotificationProvider (#167).
    • Utilizza solo android.media.session.MediaSession.setMediaButtonBroadcastReceiver() sopra l'API 31 per evitare problemi con l'API ritirata sui dispositivi Samsung (#167).
    • Utilizza il controller di notifica dei contenuti 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() in Media3 anziché indirizzarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controller del chiamante è sempre il controller delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli API supportati.
    • È stato corretto un bug per cui MediaController.getCurrentPosition() non avanza quando è connesso a un MediaSessionCompat legacy.
    • Aggiungi MediaLibrarySession.getSubscribedControllers(mediaId) per comodità.
    • Esegui l'override di MediaLibrarySession.Callback.onSubscribe() per confermare la disponibilità dell'ID genitore a cui è iscritto il controller. Se l'operazione va a buon fine, l'abbonamento viene accettato e notifyChildrenChanged() viene chiamato immediatamente per informare il browser (#561).
    • Aggiungi il modulo demo della sessione per Automotive OS e attiva la demo della sessione per Android Auto.
    • Non impostare la coda della sessione del framework quando COMMAND_GET_TIMELINE non è disponibile per il controller di notifica multimediale. Con Android Auto come controller client che legge dalla sessione del framework, il pulsante queue nell'interfaccia utente di Android Auto non viene visualizzato (#339).
    • Utilizza DataSourceBitmapLoader per impostazione predefinita anziché SimpleBitmapLoader (#271, #327).
    • Aggiungi MediaSession.Callback.onMediaButtonEvent(Intent) che consente alle app di ignorare la gestione predefinita degli eventi dei pulsanti multimediali.
  • UI:
    • Aggiungi un'implementazione di Player.Listener per i dispositivi Wear OS che gestisce la soppressione della riproduzione a causa di Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT avviando una finestra di dialogo di sistema per consentire a un utente di connettere un'uscita audio adatta (ad es. cuffie Bluetooth). Il listener riprenderà automaticamente la riproduzione se viene connesso un dispositivo adatto entro un timeout configurabile (il valore predefinito è 5 minuti).
  • Download:
    • Dichiara il tipo di servizio in primo piano "data sync" per DownloadService per la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungere dataSync come foregroundServiceType nel manifest e aggiungere l'autorizzazione FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • Estensione HLS:
    • Aggiorna la playlist live HLS con un intervallo calcolato dall'ultima ora di inizio del caricamento anziché dall'ultima ora di completamento del caricamento (#663).
  • Estensione DASH:
    • Consenti più identificatori DASH uguali nell'URL del modello di segmento.
    • Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Questo supporta meglio l'unione di sottotitoli sovrapposti, inclusa la risoluzione dello sfarfallio durante la transizione tra segmenti di sottotitoli. Puoi attivare questa opzione utilizzando DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • Estensione RTSP:
    • Correzione di una condizione di competizione che potrebbe causare IndexOutOfBoundsException quando si esegue il fallback a TCP o la riproduzione si blocca 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).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
    • Rilascia il modulo del decoder MIDI, che fornisce supporto per la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
    • Aggiungi DecoderOutputBuffer.shouldBeSkipped per contrassegnare direttamente i buffer di output che non devono essere presentati. Questa soluzione è preferibile a C.BUFFER_FLAG_DECODE_ONLY, che verrà ritirato.
    • Aggiungi Decoder.setOutputStartTimeUs e SimpleDecoder.isAtLeastOutputStartTimeUs per consentire ai decoder di eliminare i campioni di sola decodifica prima dell'ora di inizio. Questo valore deve essere preferito a Buffer.isDecodeOnly, che verrà ritirato.
    • Correzione del bug relativo alla pubblicazione dell'artefatto del decodificatore MIDI nel repository Maven. L'artefatto è stato rinominato in media3-exoplayer-midi (#734).
  • Estensione Leanback:
    • Correzione del bug per cui la disattivazione di una superficie può causare un ArithmeticException nel codice Leanback (#617).
  • Test Utilities:
    • Rendi TestExoPlayerBuilder e FakeClock compatibili con i test della UI Espresso e i test della UI Compose. È stato corretto un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con le visualizzazioni Espresso o Compose.
  • Rimuovi i simboli ritirati:
    • Rimuovi TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) e TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Utilizza Composition.Builder.setHdrMode(int) e passa Composition a Transformer.start(Composition, String).
    • Rimuovi il metodo DownloadNotificationHelper.buildProgressNotification deprecato e utilizza un metodo non deprecato che accetta un parametro notMetRequirements.

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:
    • Rimuovi la dipendenza multidex aggiunta per errore da tutti i moduli (#499).
  • ExoPlayer:
    • È stato risolto un problema in PlaybackStatsListener per cui vengono creati PlaybackStats spuri dopo la cancellazione della playlist.
    • Aggiungi altri campi alla registrazione dei dati del client multimediale comune (CMCD): formato di streaming (sf), tipo di stream (st), versione (v), bitrate massimo (tb), durata dell'oggetto (d), throughput misurato (mtp) e tipo di oggetto (ot) (#8699).
  • Audio:
    • È stato corretto un bug per cui Player.getState() non passava mai a STATE_ENDED durante la riproduzione di file molto brevi (#538).
  • Audio Offload:
    • Aggiungi le pagine di intestazione dell'ID Ogg e dell'intestazione dei commenti al bitstream per la riproduzione di Opus offload in conformità con la RFC 7845.
  • Video:
    • H.265/HEVC: correggi l'analisi delle informazioni sulle immagini di riferimento a breve e lungo termine dell'SPS.
  • Testo:
    • CEA-608: modifica la logica di troncamento dei cue in modo che prenda in considerazione solo il testo visibile. In precedenza, il rientro e l'offset della tabulazione venivano inclusi quando si limitava la lunghezza del cue a 32 caratteri (il che era tecnicamente corretto secondo le specifiche) (#11019).
  • Estensione IMA:
    • Aumenta la versione dell'SDK IMA a 3.30.3.
  • Sessione:
    • Aggiungi un 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 in MediaSession.Callback.onConnect utilizzando un AcceptedResultBuilder per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione.
    • Risolti i casi in cui MediaLibraryServiceLegacyStub inviava un errore a un Result che non supportava questa operazione, generando un UnsupportedOperationException (#78).
    • Correggi il modo in cui PlayerWrapper crea un VolumeProviderCompat determinando volumeControlType tramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUME e COMMAND_SET_DEVICE_VOLUME) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS e COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

Versione 1.1.0

5 luglio 2023

  • Libreria comune:
    • Aggiungi il motivo della soppressione per il percorso audio non idoneo e riproduci quando è pronto modifica il motivo della soppressione perché è troppo lungo. (#15).
    • Aggiungere comandi al Player:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_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 Builder per DeviceInfo e ritira il costruttore esistente.
    • Aggiungi DeviceInfo.routingControllerId per specificare l'ID del controller di routing per le riproduzioni remote.
    • Aggiungi Player.replaceMediaItem(s) come scorciatoia per aggiungere e rimuovere elementi nella stessa posizione (#8046).
  • ExoPlayer:
    • Consenti a ExoPlayer di controllare i metodi di volume del dispositivo solo se esplicitamente attivati. Usa ExoPlayer.Builder.setDeviceVolumeControlEnabled per accedere a:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) e setDeviceVolume(int, int)
      • increaseDeviceVolume(int) e increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) e decreaseDeviceVolume(int, int)
    • Aggiungi FilteringMediaSource che consente di filtrare i tipi di traccia disponibili da un MediaSource.
    • Aggiungi il supporto per l'inclusione di Common Media Client Data (CMCD) nelle richieste in uscita dei formati di streaming adattivo DASH, HLS e Smooth Streaming. I seguenti campi, br, bl, cid, rtp e sid, sono stati incorporati (#8699). Struttura dell'API e metodi dell'API:
      • La registrazione CMCD è disattivata per impostazione predefinita. Utilizza MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) per attivarla.
      • Tutte le chiavi sono attivate per impostazione predefinita, esegui l'override di CmcdConfiguration.RequestConfig.isKeyAllowed(String key) per filtrare le chiavi registrate.
      • Esegui l'override di CmcdConfiguration.RequestConfig.getCustomData() per attivare la registrazione delle chiavi personalizzate.
    • Aggiungi un'azione aggiuntiva al manifest della demo principale per semplificare l'avvio dell'app demo con un file *.exolist.json personalizzato (#439).
    • Aggiungi ExoPlayer.setVideoEffects() per l'utilizzo di Effect durante la riproduzione video.
    • Aggiorna SampleQueue per archiviare sourceId come long anziché come int. Ciò modifica le firme dei metodi pubblici SampleQueue.sourceId e SampleQueue.peekSourceId.
    • Aggiungi parametri ai metodi LoadControl shouldStartPlayback e onTracksSelected che consentono di associare questi metodi al MediaPeriod pertinente.
    • Modifica la firma di ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) aggiungendo un parametro della sequenza temporale che contiene i periodi con gli UID utilizzati come chiavi nella mappa. Questo è necessario per evitare problemi di concorrenza con i live streaming multi-periodo.
    • Depreca EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) e BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). È possibile chiamare la variante dei metodi senza mediaTimeOffsetUs. Tieni presente che anche per le varianti obsolete, l'offset non viene più aggiunto a startTimeUs e endTimeUs degli oggetti MediaLoadData inviati dal dispatcher.
    • Rinomina ExoTrackSelection.blacklist in excludeTrack e isBlacklisted in isTrackExcluded.
    • Correzione del comportamento incoerente tra ExoPlayer.setMediaItem(s) e addMediaItem(s) quando vengono chiamati su una playlist vuota.
  • Transformer:
    • Rimuovi Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Utilizza ExoPlayerAssetLoader.Factory(MediaSource.Factory) e Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory) invece.
    • Rimuovi Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • È stato corretto un bug per cui la trasformazione poteva bloccarsi (con conseguente timeout del muxer) se la fine dello stream video veniva segnalata nel momento in cui era in attesa di elaborazione un frame di input.
    • Esegui query sui codec tramite MediaCodecList anziché utilizzare le utilità findDecoder/EncoderForFormat per ampliare il supporto.
    • Rimuovi la configurazione dei frame B in DefaultEncoderFactory perché non funziona su alcuni dispositivi.
  • Selezione tracce:
    • Aggiungi DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange che è disattivato per impostazione predefinita. Se attivato, DefaultTrackSelector attiverà una nuova selezione della traccia quando le funzionalità del renderer sono cambiate.
  • Estrattori:
    • Ogg: correggi il bug durante la ricerca nei file di lunga durata (#391).
    • FMP4: correggi il problema per cui TimestampAdjuster inizializza un offset del timestamp errato con l'ora di campionamento dei metadati dall'atomo emsg (#356).
  • Audio:
    • Correzione di un bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e AudioProcessors sono attivi, ad esempio per il taglio senza interruzioni (#10847).
    • Incapsula i frame Opus nei pacchetti Ogg nelle riproduzioni dirette (offload).
    • Estrapola la posizione attuale durante il sonno con la pianificazione dell'offload.
    • Aggiungi Renderer.release() e AudioSink.release() per rilasciare le risorse alla fine del ciclo di vita del giocatore.
    • Ascolta le modifiche alle funzionalità audio in DefaultAudioSink. Aggiungi un parametro obbligatorio context nel costruttore di DefaultAudioSink, con cui DefaultAudioSink si registrerà come listener di AudioCapabilitiesReceiver e aggiornerà la proprietà audioCapabilities quando riceve una notifica di modifica delle funzionalità.
    • Propaga le modifiche alle funzionalità audio tramite un nuovo evento onAudioCapabilitiesChanged nell'interfaccia AudioSink.Listener e una nuova interfaccia RendererCapabilities.Listener che attiva gli eventi onRendererCapabilitiesChanged.
    • Aggiungi ChannelMixingAudioProcessor per applicare il ridimensionamento/il mixaggio ai canali audio.
    • Aggiungi il nuovo valore int DISCARD_REASON_AUDIO_BYPASS_POSSIBLE a DecoderDiscardReasons per eliminare il decodificatore audio quando è possibile la modalità bypass dopo la modifica delle funzionalità audio.
    • Aggiungi il supporto della riproduzione diretta per DTS Express e DTS:X (#335).
  • Video:
    • Fai in modo che MediaCodecVideoRenderer generi un VideoSize con larghezza e altezza pari a 0 quando il renderer è disattivato. Player.Listener.onVideoSizeChanged viene chiamato di conseguenza quando Player.getVideoSize() cambia. Con questa modifica, le dimensioni del video di ExoPlayer con MediaCodecVideoRenderer hanno larghezza e altezza pari a 0 quando Player.getCurrentTracks non supporta il video o le dimensioni della traccia video supportata non sono ancora state determinate.
  • DRM:
    • Ridurre la visibilità di diversi metodi solo interni su DefaultDrmSession che non dovrebbero essere chiamati dall'esterno del pacchetto DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Aggiungi una nuova libreria muxer che può essere utilizzata per creare un file contenitore MP4.
  • Estensione IMA:
    • Attiva i live streaming DASH multi-periodo 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 in sequenza temporale consecutiva varia leggermente.
  • Sessione:
    • Aggiungi il metodo helper MediaSession.getControllerForCurrentRequest per ottenere informazioni sul controller che attualmente chiama un metodo Player.
    • Aggiungi androidx.media3.session.MediaButtonReceiver per consentire alle app di implementare la ripresa della riproduzione con eventi dei pulsanti multimediali inviati, ad esempio, da cuffie Bluetooth (#167).
    • Aggiungi l'implementazione predefinita a MediaSession.Callback.onAddMediaItems per consentire il passaggio di MediaItems richiesto a Player se hanno LocalConfiguration (ad es. URI) (#282).
    • Aggiungi i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche multimediali compatte per impostazione predefinita per Android 12 e versioni precedenti (#410).
    • Aggiungi l'implementazione predefinita a MediaSession.Callback.onAddMediaItems per consentire il passaggio di MediaItems richiesto a Player se hanno LocalConfiguration (ad es. URI) (#282).
    • Aggiungi i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche multimediali compatte per impostazione predefinita per Android 12 e versioni precedenti (#410).
  • UI:
    • Aggiungi i metodi Util shouldShowPlayButton e handlePlayPauseButtonAction per scrivere elementi dell'interfaccia utente personalizzati con un pulsante di riproduzione/pausa.
  • Estensione RTSP:
    • Per MPEG4-LATM, utilizza il valore predefinito di profile-level-id se non è presente nel messaggio SDP di risposta Describe (#302).
    • Utilizza l'URI di base per la risoluzione del percorso relativo dalla sessione RTSP se presente nell'intestazione della risposta DESCRIBE (#11160).
  • Estensione DASH:
    • Rimuovi l'offset temporale dei contenuti multimediali da MediaLoadData.startTimeMs e MediaLoadData.endTimeMs per gli stream DASH multiperiodo.
    • È stato corretto un bug per cui la ripreparazione di una sorgente multimediale live Dash multi-periodo produceva un errore IndexOutOfBoundsException (#10838).
  • Estensione HLS:
    • Aggiungi HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) per impostare un timeout per il thread di caricamento in modo che attenda l'inizializzazione di TimestampAdjuster. Se l'inizializzazione non viene completata prima del timeout, viene generato un PlaybackException per evitare lo stallo infinito della riproduzione. Il timeout è impostato su zero per impostazione predefinita (#323).
  • Test Utilities:
    • Verifica l'insensibilità alle maiuscole e minuscole dello schema URI in DataSourceContractTest.
  • Rimuovi i simboli ritirati:
    • Rimuovi i costruttori DefaultAudioSink, utilizza DefaultAudioSink.Builder.
    • Rimuovi HlsMasterPlaylist e utilizza HlsMultivariantPlaylist.
    • Rimuovi Player.stop(boolean). Utilizza Player.stop() e Player.clearMediaItems() (se reset è true).
    • Rimuovi due costruttori SimpleCache deprecati e utilizza un costruttore non deprecato che accetta un DatabaseProvider per migliorare il rendimento.
    • Rimuovi il costruttore DefaultBandwidthMeter, utilizza DefaultBandwidthMeter.Builder.
    • Rimuovi i costruttori DefaultDrmSessionManager, utilizza DefaultDrmSessionManager.Builder.
    • Rimuovi due costruttori HttpDataSource.InvalidResponseCodeException deprecati, utilizza un costruttore non deprecato che accetta campi aggiuntivi(cause, responseBody) per migliorare la registrazione degli errori.
    • Rimuovi DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash e DownloadHelper.forSmoothStreaming, utilizza DownloadHelper.forMediaItem.
    • Rimuovi il costruttore DownloadService ritirato, utilizza un costruttore non ritirato che includa l'opzione per fornire un parametro channelDescriptionResourceId.
    • Rimuovi le costanti stringa obsolete per i set di caratteri (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME e UTF16LE_NAME), utilizza i set di caratteri Kotlin dal pacchetto kotlin.text, java.nio.charset.StandardCharsets o com.google.common.base.Charsets.
    • Rimuovi il costruttore WorkManagerScheduler deprecato e utilizza un costruttore non deprecato che includa l'opzione per fornire un parametro Context.
    • Rimuovi i metodi ritirati createVideoSampleFormat, createAudioSampleFormat, createContainerFormat e createSampleFormat, che venivano utilizzati per creare un'istanza della classe Format. Utilizza invece Format.Builder per creare istanze di Format.
    • Rimuovi i metodi ritirati copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate e copyWithVideoSize, utilizza Format.buildUpon() e i metodi setter.
    • Rimuovi ExoPlayer.retry() deprecato e utilizza prepare().
    • Rimuovi il costruttore DefaultTrackSelector deprecato senza argomenti, utilizza DefaultTrackSelector(Context).
    • Rimuovi il costruttore OfflineLicenseHelper deprecato, utilizza OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Rimuovi il costruttore DownloadManager deprecato e utilizza il costruttore che accetta un Executor.
    • Rimuovi i costruttori Cue deprecati e utilizza Cue.Builder.
    • Rimuovi il costruttore OfflineLicenseHelper deprecato, utilizza OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Rimuovi quattro metodi AnalyticsListener deprecati:
      • onDecoderEnabled, utilizza onAudioEnabled e/o onVideoEnabled in alternativa.
      • onDecoderInitialized, utilizza onAudioDecoderInitialized e/o onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, utilizza onAudioInputFormatChanged e/o onVideoInputFormatChanged.
      • onDecoderDisabled, utilizza onAudioDisabled e/o onVideoDisabled in alternativa.
    • Rimuovi i campi Player.Listener.onSeekProcessed e AnalyticsListener.onSeekProcessed deprecati e utilizza onPositionDiscontinuity con DISCONTINUITY_REASON_SEEK.
    • Rimuovi ExoPlayer.setHandleWakeLock(boolean), utilizza setWakeMode(int) in alternativa.
    • Rimuovi il criterio deprecato DefaultLoadControl.Builder.createDefaultLoadControl() e utilizza build() al suo posto.
    • Rimuovi MediaItem.PlaybackProperties deprecato, utilizza MediaItem.LocalConfiguration. Il campo deprecato MediaItem.playbackProperties ora è di tipo MediaItem.LocalConfiguration.

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 viene ritirata. La versione 1.0.2 contiene questi commit.

Questa release corrisponde alla release di ExoPlayer 2.18.7.

Questa release contiene le seguenti modifiche rispetto alla versione 1.0.1:

  • Libreria principale:
    • Aggiungi Buffer.isLastSample() che indica se Buffer contiene il flag C.BUFFER_FLAG_LAST_SAMPLE.
    • Risolvi il problema per cui l'ultimo fotogramma potrebbe non essere visualizzato se l'ultimo campione con i fotogrammi viene rimosso dalla coda senza leggere il campione "fine dello stream". (#11079).
  • Estrattori:
    • Correggi l'analisi di SPS H.265 nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP e MP4 (#303).
  • Testo:
    • SSA: aggiungi il supporto per i file UTF-16 se iniziano con un indicatore dell'ordine dei byte (#319).
  • Sessione:
    • Risolto il problema per cui MediaController non aggiorna i comandi disponibili quando è connesso a un MediaSessionCompat legacy che aggiorna le azioni.
    • Correzione del bug che impediva a MediaLibraryService di restituire il valore null per una chiamata dall'interfaccia utente di sistema a Callback.onGetLibraryRoot con params.isRecent == true sull'API 30 (#355).
    • Correzione della perdita di memoria di MediaSessionService o MediaLibraryService (#346).
    • È stato corretto un bug per cui un aggiornamento combinato di Timeline e posizione in un MediaSession può causare la generazione di un MediaController che genera un IllegalStateException.

Versione 1.0.1

18 aprile 2023

androidx.media3:media3-*:1.0.1 viene ritirata. La versione 1.0.1 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.6.

  • Libreria principale:
    • Ripristina l'override del live streaming di destinazione quando cerchi la posizione predefinita (#11051).
    • È stato corretto il bug per cui i flussi di campioni vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
  • Sessione:
    • È stato corretto un bug per cui più elementi della coda identici pubblicati da un MediaSessionCompat legacy MediaController generano un'eccezione in MediaController (#290).
    • Aggiungi l'inoltro mancante di MediaSession.broadcastCustomCommand a MediaControllerCompat.Callback.onSessionEvent legacy (#293).
    • È stato corretto un bug per cui la chiamata a MediaSession.setPlayer non aggiorna i comandi disponibili.
    • Risolvi il problema per cui le istanze TrackSelectionOverride inviate da un MediaController vengono ignorate se fanno riferimento a un gruppo con Format.metadata (#296).
    • Risolvi il problema per cui Player.COMMAND_GET_CURRENT_MEDIA_ITEM deve essere disponibile per accedere ai metadati tramite MediaSessionCompat legacy.
    • Risolto il problema per cui le istanze MediaSession su un thread in background causano arresti anomali se utilizzate in MediaSessionService (#318).
    • È stato risolto il problema per cui una libreria dichiarava un ricevitore di pulsanti multimediali senza che l'app lo avesse previsto (#314).
  • DASH:
    • Correzione della gestione delle sequenze temporali dei segmenti vuoti (#11014).
  • RTSP:
    • Riprova con TCP se la configurazione RTSP con UDP non riesce e viene visualizzato l'errore RTSP 461 UnsupportedTransport (#11069).

Versione 1.0.0

22 marzo 2023

androidx.media3:media3-*:1.0.0 viene ritirata. La versione 1.0.0 contiene questi commit.

Questa release corrisponde alla release di ExoPlayer 2.18.5.

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 viene ritirata. La versione 1.0.0-rc02 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.4.

  • Libreria principale:
    • Correzione del rilevamento del tipo di rete sull'API 33 (#10970).
    • Correzione di NullPointerException durante la chiamata a ExoPlayer.isTunnelingEnabled (#10977).
  • Download:
    • Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in SegmentDownloader e nelle sottoclassi (#248).
  • Audio:
    • Correzione della riproduzione MP3 senza interruzioni sui dispositivi Samsung (#8594).
    • È stato corretto un bug a causa del quale le velocità di riproduzione impostate immediatamente dopo la disattivazione dell'audio potrebbero essere sostituite da una precedente modifica della velocità (#10882).
  • Video:
    • Mappa il formato HEVC HDR10 su HEVCProfileMain10HDR10 anziché su HEVCProfileMain10.
    • Aggiungi una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione dei flussi AVC a 60 fps come non supportati (#10898).
    • Risolvi i problemi di prestazioni di rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza di frame molto superiore alla frequenza di aggiornamento dello schermo.
  • Cast:
    • Correzione di STATE_IDLE temporaneo durante la transizione tra elementi multimediali (#245).
  • RTSP:
    • Recupera l'IllegalArgumentException generata durante l'analisi di RTSP non valido Descrivi i messaggi di risposta (#10971).
  • Sessione:
    • È stato corretto un bug a causa del quale il pulsante di riproduzione/pausa delle notifiche non si aggiorna con lo stato del player (#192).
  • Estensione IMA:
    • Correzione di un bug che impediva l'avvio degli stream DAI senza annunci perché il primo (e nel caso senza annunci l'unico) evento LOADED non è stato ricevuto.

Versione 1.0.0-rc01

16 febbraio 2023

androidx.media3:media3-*:1.0.0-rc01 viene ritirata. La versione 1.0.0-rc01 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.3.

  • Libreria principale:
    • Modifica la logica di ordinamento del decodificatore del renderer per rispettare le preferenze di MediaCodecSelector, anche se un decodificatore segnala che potrebbe non essere in grado di riprodurre i contenuti multimediali in modo efficiente. Ad esempio, con il selettore predefinito, il decodificatore hardware con solo supporto funzionale avrà la precedenza sul decodificatore software che supporta completamente il formato (#10604).
    • Aggiungi ExoPlayer.Builder.setPlaybackLooper che imposta un thread di riproduzione preesistente per una nuova istanza di ExoPlayer.
    • Consenti la cancellazione dei componenti di Download Manager (#10776).
    • Aggiungi il parametro a BasePlayer.seekTo per indicare anche il comando utilizzato per la ricerca.
    • Utilizza il tema durante il caricamento delle risorse grafiche su API 21+ (#220).
    • Aggiungi ConcatenatingMediaSource2 che consente di combinare più elementi multimediali in un'unica finestra (#247).
  • Estrattori:
    • Genera un ParserException anziché un NullPointerException se la tabella dei campioni (stbl) non contiene una descrizione del campione (stsd) richiesta durante l'analisi degli atomi trak.
    • Ignora correttamente i campioni quando cerchi direttamente un frame di sincronizzazione in fMP4 (#10941).
  • Audio:
    • Utilizza il bitrate del formato audio compresso per calcolare le dimensioni minime del buffer per AudioTrack nelle riproduzioni dirette (passthrough).
  • Testo:
    • Correzione di TextRenderer che passa un indice non valido (negativo) a Subtitle.getEventTime se un file di sottotitoli codificati non contiene cue.
    • SubRip: aggiungi il supporto dei file UTF-16 se iniziano con un indicatore dell'ordine dei byte.
  • Metadati:
    • Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
    • Aggiungi MediaMetadata.mediaType per indicare il tipo di contenuti o il tipo di cartella descritta dai metadati.
    • Aggiungi MediaMetadata.isBrowsable come sostituzione di MediaMetadata.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:
    • Correggi l'attributo PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) per assicurarti che le modifiche alla visibilità vengano trasmesse al listener registrato (#229).
    • Correzione dell'ordine dei controlli del lettore centrale in PlayerView quando si utilizza un layout da destra a sinistra (RTL) (#227).
  • Sessione:
    • Aggiungi l'astrazione SimpleBasePlayer per implementare l'interfaccia Player per i player personalizzati.
    • Aggiungi il metodo helper per convertire il token di sessione della piattaforma in Media3 SessionToken (#171).
    • Utilizza onMediaMetadataChanged per attivare gli aggiornamenti della sessione multimediale della piattaforma (#219).
    • Aggiungi la sessione multimediale come argomento di getMediaButtons() di DefaultMediaNotificationProvider e utilizza elenchi immutabili per chiarezza (#216).
    • Aggiungi il listener di callback onSetMediaItems per fornire i mezzi per modificare/impostare l'elenco MediaItem, l'indice iniziale e la posizione per sessione prima di impostare il lettore (#156).
    • Evita il rilevamento del doppio tocco per gli eventi dei pulsanti multimediali non Bluetooth (#233).
    • Rendi QueueTimeline più solido in caso di stato della sessione precedente sospetto (#241).
  • Metadati:
    • Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
    • Aggiungi MediaMetadata.mediaType per indicare il tipo di contenuti o il tipo di cartella descritta dai metadati.
    • Aggiungi MediaMetadata.isBrowsable come sostituzione di MediaMetadata.folderType. Il tipo di cartella verrà ritirato nella prossima release.
  • Estensione Cast:
    • Aumenta la versione dell'SDK Cast a 21.2.0.
  • Estensione IMA:
    • Rimuovi il listener del lettore di ImaServerSideAdInsertionMediaSource sul thread dell'applicazione per evitare problemi di threading.
    • Aggiungi una proprietà focusSkipButtonWhenAvailable a ImaServerSideAdInsertionMediaSource.AdsLoader.Builder per richiedere di mettere a fuoco il pulsante Salta sui dispositivi TV e impostarlo su true per impostazione predefinita.
    • Aggiungi un metodo focusSkipButton() a ImaServerSideAdInsertionMediaSource.AdsLoader per richiedere programmaticamente lo stato attivo sul pulsante Salta.
    • Aumenta la versione dell'SDK IMA a 3.29.0.
  • App demo:
    • Richiedi l'autorizzazione 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 viene ritirata. La versione 1.0.0-beta03 contiene questi commit.

Questa release corrisponde alla release di ExoPlayer 2.18.2.

  • Libreria principale:
    • Aggiungi ExoPlayer.isTunnelingEnabled per verificare se il tunneling è abilitato per le tracce attualmente selezionate (#2518).
    • Aggiungi WrappingMediaSource per semplificare il wrapping di un singolo MediaSource (#7279).
    • Elimina il buffer posteriore prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
    • Chiudi il blocco "doSomeWork" di Tracing quando l'offload è attivato.
    • Risoluzione del problema di monitoraggio della sessione con le ricerche rapide in PlaybackStatsListener (#180).
    • Invia il callback onMediaItemTransition mancante quando chiami seekToNext o seekToPrevious in una playlist con un solo elemento (#10667).
    • Aggiungi Player.getSurfaceSize che restituisce le dimensioni della superficie su cui viene visualizzato il video.
    • Correzione di un bug per cui la rimozione degli ascoltatori durante il rilascio del player può causare un IllegalStateException (#10758).
  • Build:
    • Imponi un valore minimo di compileSdkVersion per evitare errori di compilazione (#10684).
    • Evita di pubblicare il blocco quando è incluso in un'altra build Gradle.
  • Selezione tracce:
    • Preferisci altre tracce a Dolby Vision se il display non lo supporta. (#8944).
  • Download:
    • Correzione del potenziale ciclo infinito in ProgressiveDownloader causato da download e riproduzione simultanei con lo stesso PriorityTaskManager (#10570).
    • Visualizzazione immediata della notifica di download (#183).
    • Limita a 1 le rimozioni di download paralleli per evitare la creazione eccessiva di thread (#10458).
  • Video:
    • Prova un decoder alternativo per Dolby Vision se il display non lo supporta. (#9794).
  • Audio:
    • Utilizza SingleThreadExecutor per rilasciare le istanze AudioTrack ed evitare errori OutOfMemory quando rilasci più giocatori contemporaneamente (#10057).
    • Aggiunge AudioOffloadListener.onExperimentalOffloadedPlayback per lo stato di scaricamento di AudioTrack. (#134).
    • Rendi AudioTrackBufferSizeProvider un'interfaccia pubblica.
    • Aggiungi ExoPlayer.setPreferredAudioDevice per impostare il dispositivo di output audio preferito (#135).
    • Rinomina androidx.media3.exoplayer.audio.AudioProcessor in androidx.media3.common.audio.AudioProcessor.
    • Mappa l'audio a 8 e 12 canali rispettivamente sulle maschere dei canali 7.1 e 7.1.4 su tutte le versioni di Android (#10701).
  • Metadati:
    • Ora MetadataRenderer può essere configurato per il rendering dei metadati non appena sono disponibili. Crea un'istanza con MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) per specificare se il renderer restituirà i metadati in anticipo o in sincronia con la posizione del player.
  • DRM:
    • Soluzione alternativa a un bug nell'implementazione di ClearKey di Android 13 che restituisce un URL di licenza non vuoto ma non valido.
    • È stato corretto l'errore setMediaDrmSession failed: session not opened durante il passaggio tra schemi DRM in una playlist (ad es. da Widevine a ClearKey).
  • Testo:
    • CEA-608: assicurati che i comandi di cambio servizio nel campo 2 vengano gestiti correttamente (#10666).
  • DASH:
    • Analizza EventStream.presentationTimeOffset dai manifest (#10460).
  • UI:
    • Utilizzare gli override correnti del player come preimpostazione in TrackSelectionDialogBuilder (#10429).
  • Sessione:
    • Assicurati che i comandi vengano sempre eseguiti nell'ordine corretto anche se alcuni richiedono una risoluzione asincrona (#85).
    • Aggiungi DefaultMediaNotificationProvider.Builder per creare istanze DefaultMediaNotificationProvider. Il builder può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzati dal fornitore. Inoltre, aggiungi il metodo DefaultMediaNotificationProvider.setSmallIcon(int) per impostare l'icona piccola delle notifiche. (#104).
    • Assicurati che i comandi inviati prima di MediaController.release() non vengano eliminati (#99).
    • SimpleBitmapLoader può caricare bitmap dagli URI file:// (#108).
    • Correzione dell'asserzione che impedisce a MediaController di cercare un annuncio in un periodo (#122).
    • Al termine della riproduzione, la MediaSessionService viene interrotta 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 intent in attesa per la pausa (#167).
    • Nascondi manualmente il "badge" associato alla notifica creata da DefaultNotificationProvider su API 26 e API 27 (il badge viene nascosto automaticamente su API 28+) (#131).
    • Correzione del bug per cui una seconda connessione del binder da una MediaSession precedente a un MediaController Media3 causa IllegalStateExceptions (#49).
  • RTSP:
    • Aggiunta della gestione dei pacchetti frammentati H263 (#119).
    • Aggiunta del supporto per MP4A-LATM (#162).
  • IMA:
    • Aggiungi il timeout per il caricamento delle informazioni sugli annunci per gestire i casi in cui l'SDK IMA non riesce a caricare un annuncio (#10510).
    • Impedire l'omissione degli annunci mid-roll quando si cerca la 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:
    • Aggiungi 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 versioni di Android Studio (#9933).
  • Estensione Cast:
    • Implementa getDeviceInfo() per poter identificare CastPlayer quando controlli la riproduzione con un MediaController (#142).
  • Transformer:
    • Aggiungi il timer watchdog del muxer per rilevare quando la generazione di un campione di output è troppo lenta.
  • Rimuovi i simboli ritirati:
    • Rimuovi Transformer.Builder.setOutputMimeType(String). Questa funzionalità è stata rimossa. Il tipo MIME sarà sempre MP4 quando viene utilizzato il muxer predefinito.

Versione 1.0.0-beta02

21 luglio 2022

androidx.media3:media3-*:1.0.0-beta02 viene ritirata. La versione 1.0.0-beta02 contiene questi commit.

Questa release corrisponde alla release di ExoPlayer 2.18.1.

  • Libreria principale:
    • Assicurati che la modifica di ShuffleOrder con ExoPlayer.setShuffleOrder comporti una chiamata a Player.Listener#onTimelineChanged con reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • Per i contenuti multimediali progressivi, includi solo le tracce selezionate nella posizione memorizzata nel buffer (#10361).
    • Consenti il logger personalizzato per tutti gli output dei log di ExoPlayer (#9752).
    • Correzione dell'implementazione di setDataSourceFactory in DefaultMediaSourceFactory, che in alcuni casi non funzionava (#116).
  • Estrattori:
    • Correzione dell'analisi dei set di immagini di riferimento a breve termine H265 (#10316).
    • Correzione dell'analisi dei bit rate dalle caselle esds (#10381).
  • 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 apportate a playWhenReady in LeanbackAdapter (10420).
  • Cast:
    • Utilizza MediaItem passato ai metodi della playlist come Window.mediaItem in CastTimeline (#25, #8212).
    • Supporta Player.getMetadata() e Listener.onMediaMetadataChanged() con CastPlayer (#25).

Versione 1.0.0-beta01

16 giugno 2022

androidx.media3:media3-*:1.0.0-beta01 viene ritirata. La versione 1.0.0-beta01 contiene questi commit.

Ciò corrisponde al rilascio 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 sulle prestazioni alla piattaforma, il che contribuisce a fornire informazioni sul debug e sulle prestazioni del sistema sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostici è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer con ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Correzione del bug che causa il ripristino troppo frequente delle tracce quando si utilizza MergingMediaSource, ad esempio quando si caricano lateralmente i sottotitoli codificati e si cambiano i sottotitoli codificati selezionati a metà riproduzione (#10248).
    • Interrompere il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Queste riproduzioni presuppongono una rete 4G.
    • Non consentire il passaggio di null a MediaSource.Factory.setDrmSessionManagerProvider e MediaSource.Factory.setLoadErrorHandlingPolicy. Le istanze di DefaultDrmSessionManagerProvider e DefaultLoadErrorHandlingPolicy possono essere trasmesse esplicitamente, se necessario.
    • Aggiungi MediaItem.RequestMetadata per rappresentare i metadati necessari per riprodurre i contenuti multimediali quando il LocalConfiguration esatto non è noto. Rimuovi anche MediaMetadata.mediaUrl perché ora è incluso in RequestMetadata.
    • Aggiungi Player.Command.COMMAND_SET_MEDIA_ITEM per consentire ai giocatori di impostare un singolo elemento.
  • Selezione tracce:
    • Comprimi il corso TrackSelectionOverrides in TrackSelectionParameters e promuovi TrackSelectionOverride a corso di primo livello.
    • Rinomina TracksInfo in Tracks e TracksInfo.TrackGroupInfo in Tracks.Group. Player.getCurrentTracksInfo e Player.Listener.onTracksInfoChanged sono stati rinominati Player.getCurrentTracks e Player.Listener.onTracksChanged. Ciò include l'annullamento del ritiro del nome del metodo Player.Listener.onTracksChanged, ma con tipi di parametri diversi.
    • Modifica DefaultTrackSelector.buildUponParameters e DefaultTrackSelector.Parameters.buildUpon per restituire DefaultTrackSelector.Parameters.Builder anziché DefaultTrackSelector.ParametersBuilder, che è stato ritirato.
    • Aggiungi DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities che è abilitato per impostazione predefinita. Se attivata, la DefaultTrackSelector preferirà le tracce audio il cui numero di canali non supera le capacità di output del dispositivo. Sui dispositivi portatili, il DefaultTrackSelector preferirà i formati audio stereo/mono rispetto a quelli multicanale, a meno che il formato multicanale non possa essere spazializzato (Android 12L+) o sia un formato audio surround Dolby. Inoltre, sui dispositivi che supportano la spazializzazione audio, DefaultTrackSelector monitorerà le modifiche apportate alle proprietà dello spazializzatore e attiverà una nuova selezione della traccia. I dispositivi con una television modalità UI sono esclusi da questi vincoli e verrà preferito il formato con il maggior numero di canali. Per attivare questa funzionalità, l'istanza DefaultTrackSelector deve essere creata con un Context.
  • Video:
    • Rinomina DummySurface in PlaceholderSurface.
    • Aggiungi il supporto di AV1 a MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Utilizza la pubblicità del decodificatore audio LG AC3 per il tipo MIME non standard.
    • Modifica il tipo restituito di AudioAttributes.getAudioAttributesV21() da android.media.AudioAttributes a una nuova classe wrapper AudioAttributesV21 per evitare una verifica ART lenta su API < 21.
    • Esegui query sulla piattaforma (API 29+) o presupponi il conteggio dei canali di codifica audio per il passthrough audio quando il conteggio dei canali audio del formato non è impostato, il che si verifica con la preparazione senza chunk HLS (10204).
    • Configura AudioTrack con la maschera del canale AudioFormat.CHANNEL_OUT_7POINT1POINT4 se 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 restituisca CueGroup anziché List<Cue>.
    • SSA: Supporta l'impostazione dello stile OutlineColour quando BorderStyle == 3 (ad es. OutlineColour imposta lo sfondo del cue) (#8435).
    • CEA-708: analizza i dati in più blocchi di servizio e ignora i blocchi non associati al numero di servizio attualmente selezionato.
    • Rimuovi RawCcExtractor, che veniva utilizzato solo per gestire un formato di sottotitoli codificati interno a Google.
  • Estrattori:
    • Aggiungi il supporto per AVI (#2092).
    • Matroska: analizza DiscardPadding per le tracce Opus.
    • MP4: analizza i bit rate dalle caselle esds.
    • Ogg: Consenti intestazioni di commento e ID Opus duplicati (#10038).
  • UI:
    • Correzione della pubblicazione degli eventi per OnClickListener impostati su PlayerView nel caso in cui useController=false (#9605). Inoltre, correggi la pubblicazione degli eventi su OnLongClickListener per tutte le configurazioni delle visualizzazioni.
    • Correzione del trattamento errato di una sequenza di eventi tocco che escono dai limiti di PlayerView prima di ACTION_UP come clic (#9861).
    • È stato risolto il problema di accessibilità PlayerView per cui il tocco potrebbe attivare/disattivare la riproduzione anziché nascondere i controlli (#8627).
    • Riscrivi TrackSelectionView e TrackSelectionDialogBuilder in modo che funzionino con l'interfaccia Player anziché con ExoPlayer. In questo modo, le visualizzazioni possono essere utilizzate con altre implementazioni di Player e viene rimossa la dipendenza dal modulo UI al modulo ExoPlayer. Si tratta di una modifica che causa interruzioni.
    • Non mostrare le tracce di testo forzate nel selettore di tracce PlayerView e mantieni selezionata una traccia di testo forzata adatta se è selezionata l'opzione "Nessuna" (#9432).
  • DASH:
    • Analizzare il conteggio dei canali dagli elementi DTS AudioChannelConfiguration. In questo modo viene riattivato il passthrough audio per gli stream DTS (#10159).
    • Non consentire il passaggio di null a DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory possono essere passate in modo esplicito, se necessario.
  • HLS:
    • Esegui il fallback alla preparazione a blocchi se l'attributo CODECS della playlist non contiene il codec audio (#10065).
    • Non consentire il passaggio di null a HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory e HlsMediaSource.Factory.setPlaylistTrackerFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory o un riferimento a DefaultHlsPlaylistTracker.FACTORY possono essere trasmesse in modo esplicito, se necessario.
  • Smooth Streaming:
    • Non consentire il passaggio di null a SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory possono essere trasmesse in modo esplicito se necessario.
  • RTSP:
    • Aggiungi il lettore RTP per H263 (#63).
    • Aggiungi il lettore RTP per MPEG4 (#35).
    • Aggiungi il lettore RTP per HEVC (#36).
    • Aggiungi il lettore RTP per AMR. Al momento sono supportati solo i flussi AMR non interlacciati a un solo canale. Il payload RTP AMR composto non è supportato. (#46)
    • Aggiungi lettore RTP per VP8 (#47).
    • Aggiungi il lettore RTP per WAV (#56).
    • Correggi l'intestazione di autorizzazione di base RTSP. (#9544).
    • Interrompi il controllo dei campi SDP obbligatori perché ExoPlayer non ne ha bisogno (#10049).
    • Genera un'eccezione controllata durante l'analisi della sincronizzazione RTSP (#10165).
    • Aggiungi il lettore RTP per VP9 (#47).
    • Aggiungi il lettore RTP per OPUS (#53).
  • Origini dati:
    • Rinomina DummyDataSource in PlaceholderDataSource.
    • Soluzione alternativa per la gestione delle interruzioni di OkHttp.
  • Sessione:
    • Sostituisci MediaSession.MediaItemFiller con MediaSession.Callback.onAddMediaItems per consentire la risoluzione asincrona delle richieste.
    • Supporta i metodi setMediaItems(s) quando MediaController si connette a una sessione multimediale precedente.
    • Rimuovi MediaController.setMediaUri e MediaSession.Callback.onSetMediaUri. La stessa funzionalità può essere ottenuta utilizzando MediaController.setMediaItem e MediaSession.Callback.onAddMediaItems.
    • Inoltra le chiamate legacy MediaController per riprodurre contenuti multimediali a MediaSession.Callback.onAddMediaItems anziché a onSetMediaUri.
    • Aggiungi MediaNotification.Provider e DefaultMediaNotificationProvider per personalizzare la notifica.
    • Aggiungi BitmapLoader e SimpleBitmapLoader per scaricare le immagini delle copertine.
    • Aggiungi MediaSession.setCustomLayout() per fornire la compatibilità con le versioni precedenti con la sessione legacy.
    • Aggiungi MediaSession.setSessionExtras() per fornire parità di funzionalità con la sessione precedente.
    • Rinomina MediaSession.MediaSessionCallback in MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback in MediaLibrarySession.Callback e MediaSession.Builder.setSessionCallback in setCallback.
    • Correzione di NPE in MediaControllerImplLegacy (#59).
    • Aggiorna le informazioni sulla posizione della sessione nella cronologia modifica(#51).
    • Correzione di NPE in MediaControllerImplBase dopo il rilascio del controller (#74).
  • Riproduzione degli annunci / IMA:
    • Ridurre la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms, in linea con i consigli del Media Rating Council (MRC).
  • Estensione FFmpeg:
    • Aggiorna la versione di CMake a 3.21.0+ per evitare un bug di CMake che causa l'errore di sincronizzazione di Gradle di Android Studio (#9933).
  • Rimuovi i simboli ritirati:
    • Rimuovi Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Utilizza invece Player.Listener.onTracksChanged(Tracks).
    • Rimuovi Player.getCurrentTrackGroups e Player.getCurrentTrackSelections. Utilizza invece Player.getCurrentTracks. Puoi anche continuare a utilizzare ExoPlayer.getCurrentTrackGroups e ExoPlayer.getCurrentTrackSelections, anche se questi metodi rimangono deprecati.
    • Rimuovi le costanti DownloadHelper, DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT e DEFAULT_TRACK_SELECTOR_PARAMETERS. Se possibile, utilizza getDefaultTrackSelectorParameters(Context), altrimenti DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • Rimuovi costruttore DefaultTrackSelector(ExoTrackSelection.Factory). Utilizza invece DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Rimuovi Transformer.Builder.setContext. Context deve essere passato al costruttore Transformer.Builder.

Versione 1.0.0-alpha03

14 marzo 2022

androidx.media3:media3-*:1.0.0-alpha03 viene ritirata. La versione 1.0.0-alpha03 contiene questi commit.

Corrisponde alla release di ExoPlayer 2.17.1.

  • Audio:
    • Correzione dell'errore di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
  • Estrattori:
    • FMP4: risolvi il problema per cui i metadati di esempio emsg potrebbero essere restituiti nell'ordine errato per gli stream contenenti atomi emsg v0 e v1 (#9996).
  • Testo:
    • Correggi l'interazione di SingleSampleMediaSource.Factory.setTrackId e MediaItem.SubtitleConfiguration.Builder.setId per dare la priorità al campo SubtitleConfiguration e ripristinare il valore Factory se non è impostato (#10016).
  • Riproduzione dell'annuncio:
    • Correzione dei buffer di riempimento dell'audio tra i periodi pubblicitari nei live streaming HLS SSAI.

Versione 1.0.0-alpha02

2 marzo 2022

androidx.media3:media3-*:1.0.0-alpha02 viene ritirata. La versione 1.0.0-alpha02 contiene questi commit.

Ciò corrisponde al rilascio di ExoPlayer 2.17.0.

  • Libreria di base:
    • Aggiungi il metodo protetto DefaultRenderersFactory.getCodecAdapterFactory() in modo che le sottoclassi di DefaultRenderersFactory che eseguono l'override di buildVideoRenderers() o buildAudioRenderers() possano accedere alla fabbrica di adattatori di codec e passarla alle istanze MediaCodecRenderer che creano.
    • Propaga i campi di intestazione ICY name e genre rispettivamente a MediaMetadata.station e MediaMetadata.genre in modo che raggiungano l'app tramite Player.Listener.onMediaMetadataChanged() (#9677).
    • Rimuovi le chiavi null da DefaultHttpDataSource#getResponseHeaders.
    • Metti in pausa e riprova quando la creazione di un'istanza MediaCodec non va a buon fine. In questo modo si risolve un problema che si verifica su alcuni dispositivi quando si passa da una superficie da un codec sicuro a un altro codec (#8696).
    • Aggiungi MediaCodecAdapter.getMetrics() per consentire agli utenti di ottenere dati delle metriche da MediaCodec. (#9766).
    • Correzione della risoluzione delle dipendenze Maven (#8353).
    • Disattiva la regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di un'impostazione di richiesta dell'utente che imposta la velocità (#9329).
    • Rinomina DecoderCounters#inputBufferCount in queuedInputBufferCount.
    • Rendi privato SimpleExoPlayer.renderers. È possibile accedere ai renderer tramite ExoPlayer.getRenderer.
    • Sono stati aggiornati alcuni valori costanti di AnalyticsListener.EventFlags in modo che corrispondano ai valori di Player.EventFlags.
    • Dividi AnalyticsCollector in un'interfaccia e un'implementazione predefinita per consentire la rimozione da parte di R8 se un'app non ne ha bisogno.
  • Selezione tracce:
    • Supporta i flag dei ruoli video preferiti nella selezione delle tracce (#9402).
    • Aggiorna la logica di selezione delle tracce video in modo che tenga conto dei tipi MIME e dei flag di ruolo preferiti quando seleziona più tracce video per l'adattamento (#9519).
    • Aggiorna la logica di selezione delle tracce video e audio in modo da scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto di decoder e hardware (#9565).
    • Aggiorna la logica di selezione delle tracce video in modo da preferire codec più efficienti se più codec sono supportati dai decodificatori primari con accelerazione hardware (#4835).
    • Preferisci le preferenze per i contenuti audio (ad esempio la traccia audio "predefinita" o una traccia che corrisponde alla lingua delle impostazioni internazionali del sistema) ai vincoli tecnici di selezione delle tracce (ad esempio, tipo MIME preferito o numero massimo di canali).
    • Correzione del problema di selezione delle tracce per cui l'override di un gruppo di tracce non disattivava altri gruppi di tracce dello stesso tipo (#9675).
    • Correzione del problema di selezione delle tracce per cui una combinazione di override di tracce non vuote e vuote non viene applicata correttamente (#9649).
    • Vietare TrackGroup duplicati in un TrackGroupArray. TrackGroups can always be made distinguishable by setting an id in the TrackGroup constructor. Questo problema è stato risolto in caso di arresto anomalo durante la riproduzione dopo aver messo l'app in background con una sostituzione della traccia attiva (#9718).
    • Modifica la logica in AdaptiveTrackSelection per consentire un aumento della qualità con una larghezza di banda di rete sufficiente anche se la riproduzione è molto vicina al limite live (#9784).
  • Video:
    • Correggi la logica di fallback del decoder per Dolby Vision in modo da utilizzare un decoder H264/H265 compatibile, se necessario.
  • Audio:
    • Correggi 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 AudioCapabilities in modo che richiedano il passaggio esplicito di AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES anziché null.
    • Consenti la personalizzazione del calcolo delle dimensioni del buffer AudioTrack inserendo un AudioTrackBufferSizeProvider in DefaultAudioSink. (#8891).
    • Riprova la creazione di AudioTrack se la dimensione del buffer richiesta era superiore a 1 MB. (#9712).
  • Estrattori:
    • WAV: aggiungi il supporto per gli stream RF64 (#9543).
    • Correzione dell'analisi errata delle unità NAL SPS H.265 (#9719).
    • Analizza i commenti Vorbis (incluso METADATA_BLOCK_PICTURE) nei file Ogg Opus e Ogg Vorbis.
  • Testo:
    • Aggiungi un campo MediaItem.SubtitleConfiguration.id che viene propagato al campo Format.id della traccia dei sottotitoli codificata dalla configurazione (#9673).
    • Aggiungi il supporto di base per i sottotitoli WebVTT nei contenitori Matroska (#9886).
    • Impedisci a Cea708Decoder di leggere più delle dimensioni dichiarate di un blocco di servizio.
  • DRM:
    • Vuoi rimuovere playbackLooper da DrmSessionManager.(pre)acquireSession? Quando un'app utilizza un DrmSessionManager in un MediaSource personalizzato, il playbackLooper deve essere passato a DrmSessionManager.setPlayer invece.
  • Riproduzione degli annunci / IMA:
    • Aggiungi il supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
    • Aggiungi un metodo a AdPlaybackState per consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615).
    • Imponi la velocità di riproduzione 1.0 durante la riproduzione dell'annuncio (#9018).
    • Risolto il problema per cui un gruppo di annunci che non è stato caricato causava un ripristino immediato della riproduzione (#9929).
  • UI:
    • È stato corretto il colore dei numeri nei pulsanti di StyledPlayerView riavvolgimento e avanzamento rapido quando vengono utilizzati determinati temi (#9765).
    • Traduci correttamente le stringhe della velocità di riproduzione (#9811).
  • DASH:
    • Aggiungi le proprietà essenziali e supplementari analizzate a Representation (#9579).
    • Supporta il ruolo di traccia forced-subtitle (#9727).
    • Interrompi l'interpretazione del ruolo della traccia main come C.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 relativi MPD.Location (#9939).
  • HLS:
    • Compila correttamente Format.label per gli stream HLS solo audio (#9608).
    • Utilizza la preparazione senza blocchi per impostazione predefinita per migliorare il tempo di avvio. Se le tue versioni contengono tracce di sottotitoli codificati muxate che non sono dichiarate nella playlist principale, devi aggiungerle alla playlist principale per renderle disponibili per la riproduzione oppure disattivare la preparazione senza chunk con HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • Supporta la ricerca precisa dei keyframe in HLS (#2882).
  • RTSP:
    • Fornisci un'API client per eseguire l'override di SocketFactory utilizzato per qualsiasi connessione al server (#9606).
    • Preferisci il metodo di autenticazione DIGEST a BASIC se sono presenti entrambi (#9800).
    • Gestisci quando la sincronizzazione della traccia RTSP non è disponibile (#9775).
    • Ignora i valori di intestazione RTP-Info non validi (#9619).
  • Transformer:
    • Aumenta la versione minima dell'API richiesta a 21.
    • TransformationException viene ora utilizzato per descrivere gli errori che si verificano durante una trasformazione.
    • Aggiungi TransformationRequest per specificare le opzioni di trasformazione.
    • Consenti la registrazione di più ascoltatori.
    • È stato risolto il problema del blocco di Transformer quando l'output del codec viene letto parzialmente.
    • Correzione di un potenziale NPE in Transformer.getProgress durante il rilascio del muxer genera un'eccezione.
    • Aggiungi un'app demo per applicare le trasformazioni.
  • Estensione MediaSession:
    • Per impostazione predefinita, MediaSessionConnector ora cancella la playlist quando la riproduzione viene interrotta. Le app che vogliono che la playlist venga conservata possono chiamare setClearMediaItemsOnStop(false) sul connettore.
  • Estensione Cast:
    • È stato corretto un bug che impediva a CastPlayer di chiamare correttamente onIsPlayingChanged (#9792).
    • Supporta i metadati audio, incluse le copertine, con DefaultMediaItemConverter (#9663).
  • Estensione FFmpeg:
    • Fai in modo che build_ffmpeg.sh dipenda dalle utilità binarie di LLVM anziché da quelle di GNU (#9933).
  • 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 di play-services-cast-framework non sono compatibili con le app che hanno come target Android 12 e si arrestano in modo anomalo con un errore IllegalArgumentException durante la creazione di PendingIntent (#9528).
  • Rimuovi i simboli ritirati:
    • Rimuovi Player.EventListener. Utilizza invece Player.Listener.
    • Rimuovi MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory e MediaSourceFactory#setDrmUserAgent. Utilizza MediaSourceFactory#setDrmSessionManagerProvider.
    • Rimuovi MediaSourceFactory#setStreamKeys. Utilizza MediaItem.Builder#setStreamKeys.
    • Rimuovi MediaSourceFactory#createMediaSource(Uri). Utilizza MediaSourceFactory#createMediaSource(MediaItem).
    • Rimuovi setTag da DashMediaSource, HlsMediaSource e SsMediaSource. Utilizza invece MediaItem.Builder#setTag.
    • Rimuovi DashMediaSource#setLivePresentationDelayMs(long, boolean). Utilizza MediaItem.Builder#setLiveConfiguration e MediaItem.LiveConfiguration.Builder#setTargetOffsetMs per ignorare il manifest o DashMediaSource#setFallbackTargetLiveOffsetMs per fornire un valore di riserva.
    • Rimuovi (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Non è più possibile disattivare l'applicazione dei thread.
    • Rimuovi ActionFile e ActionFileUpgradeUtil. Utilizza ExoPlayer 2.16.1 o versioni precedenti per utilizzare ActionFileUpgradeUtil per unire i file di intent legacy in DefaultDownloadIndex.
    • Rimuovi ProgressiveMediaSource#setExtractorsFactory. Utilizza invece il costruttore ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • Rimuovi ProgressiveMediaSource.Factory#setTag e ProgressiveMediaSource.Factory#setCustomCacheKey. Utilizza MediaItem.Builder#setTag e MediaItem.Builder#setCustomCacheKey invece.
    • Rimuovi i costruttori DefaultRenderersFactory(Context, @ExtensionRendererMode int) e DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Utilizza invece il costruttore DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode e DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Rimuovi tutti i costruttori CronetDataSource pubblici. Utilizza CronetDataSource.Factory.
  • Modifica il seguente IntDefs 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 pacchetto com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (nel pacchetto com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Versione 1.0.0-alpha01

27 ottobre 2021

androidx.media3:media3-*:1.0.0-alpha01 viene ritirata. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

Media3 è la nuova sede delle librerie di supporto multimediale, tra cui ExoPlayer. La prima alpha contiene implementazioni funzionali iniziali di librerie per l'implementazione di casi d'uso multimediali, tra cui:

  • ExoPlayer, un player di contenuti multimediali a livello di applicazione per Android facile da personalizzare ed estendere.
  • Funzionalità della sessione multimediale per esporre e controllare le riproduzioni. Questo nuovo modulo di sessione utilizza la stessa interfaccia Player di ExoPlayer.
  • Componenti dell'interfaccia utente per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
  • Moduli che racchiudono funzionalità in altre librerie da utilizzare con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.

Per maggiori informazioni, consulta il progetto GitHub di 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 per dare alle app il tempo di eseguire la migrazione a Media3. Media3 ha sostituti per tutti i moduli ExoPlayer, ad eccezione delle estensioni legacy media2 e mediasession, che vengono sostituite dal nuovo modulo media3-session. Ciò consente l'integrazione diretta tra i player e le sessioni multimediali senza la necessità di utilizzare una classe adattatore/connettore.