Media3

Supporta le librerie per i casi d'uso di contenuti multimediali.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
13 novembre 2024 1.4.1 1.5.0-rc01 - -

Dichiarazione delle dipendenze

Per aggiungere una dipendenza da Media3, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.

Aggiungi le dipendenze per gli elementi necessari nel file build.gradle per la tua app o il tuo modulo:

Groovy

dependencies {
    def media3_version = "1.4.1"

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

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin

dependencies {
    val media3_version = "1.4.1"

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

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

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

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

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

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

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

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

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

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

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

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

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

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare il tracker dei problemi di Media3 per trovare le risposte alle domande, ai problemi noti e alle richieste di funzionalità, nonché per segnalare nuovi problemi.

Versione 1.5

1.5.0-rc02 (19/11/2024)

androidx.media3:media3-*:1.5.0-rc02 viene rilasciato.

La versione 1.5.0-rc02 contiene questi commit.

Questa release include le seguenti modifiche rispetto alla release 1.5.0-rc01:

  • Estrattori:
    • È stato aggiunto il supporto del formato file multimediale base ISO AC-4 di livello 4 (#1265).
  • Testo:
    • Correggi i sottotitoli CEA-608 illeggibili nei contenuti con più di un messaggio SEI per campione.
    • È stato corretto il blocco della riproduzione negli stream DASH multiperiodo quando sono attivati i sottotitoli CEA-608 (#1863).
    • Correggere i sottotitoli codificati CEA-608 in file MP4 che contrassegnano erroneamente ogni campione come campione di sincronizzazione (#1863).
  • App demo
    • Risolvi le perdite di memoria nell'app demo nel formato breve (#1839).

1.5.0-rc01 (13/11/2024)

androidx.media3:media3-*:1.5.0-rc01 viene rilasciato.

La versione 1.5.0-rc01 contiene questi commit.

Questa release include le seguenti modifiche rispetto alla release 1.5.0-beta01:

  • ExoPlayer:
    • È stato corretto un bug per cui gli elementi o i periodi delle playlist negli stream DASH con più periodi con durate che non corrispondono ai contenuti effettivi potevano causare il blocco dei fotogrammi alla fine dell'elemento (#1698).
    • Aggiungi un set per SntpClient per impostare il tempo massimo trascorso dall'ultimo aggiornamento dopo il quale il client viene reinizializzato (#1794).
  • Estrattori:
    • Correggere l'analisi della durata dei contenuti multimediali nella casella mdhd dei file MP4 per gestire i valori -1 (#1819).
    • Aggiunta del supporto per l'identificazione della casella h263 nei file MP4 per i video H.263 (#1821).
  • DataSource:
    • DataSourceContractTest: verifica che DataSource.getUri() restituisca l'URI risolto (come descritto nella documentazione). Se è diverso dall'URI richiesto, i test possono indicarlo utilizzando il nuovo metodoDataSourceContractTest.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 "not found") e prima di una chiamata close() successiva.
      • L'override di DataSourceContractTest.getNotFoundResources() consente alle sottoclassi di test di fornire più risorse "not found" e anche le intestazioni previste. In questo modo è possibile distinguere tra HTTP 404 (con intestazioni) e "server non trovato" (senza intestazioni).
  • Testo:
    • Correzione del mancato output dei sottotitoli CEA-608 negli stream MPEG-TS H.264 (questo problema è stato riscontrato in 1.5.0-alpha01 da https://github.com/androidx/media/commit/03a205f220ecf7681f85f8a752227e3986e257ff).
    • Supporto dei sottotitoli CEA-608 nei contenuti Dolby Vision (#1820).
  • Estensione RTSP:
    • Correzione dell'arresto anomalo durante l'analisi dei pacchetti RTP con estensioni dell'intestazione (#1225).

Versione 1.5.0-beta01

30 ottobre 2024

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

  • Libreria comune:
    • Rimuovi le annotazioni @DoNotInline dalle classi interne non allineate manualmente progettate per evitare errori di verifica delle classi 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 esegue questa operazione, a causa di compileSdk = 35. Gli utenti della libreria con sistemi di compilazione non Gradle dovranno assicurarsi che il loro passaggio di riduzione/offuscamento equivalente a R8 esegua un processo automatico simile di eliminazione delle righe fuori linea per evitare errori di verifica delle classi di runtime. Questa modifica è stata già apportata in altre librerie AndroidX.
  • ExoPlayer:
    • È stato corretto il problema per cui a volte MediaCodec.CryptoException viene segnalato come "errore di runtime imprevisto" quando MediaCodec.CryptoException viene eseguito in modalità asincrona (comportamento predefinito nell'API 31 e versioni successive).MediaCodec
    • Passa bufferedDurationUs anziché bufferedPositionUs con PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Inoltre, viene modificato DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS in DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS. Le app devono quindi trasmettere un valore che rappresenti una durata specifica dalla posizione iniziale predefinita per la quale la sorgente media corrispondente deve essere precaricata con questo IntDef, anziché una posizione.
    • Aggiungi l'implementazione di ForwardingRenderer che inoltra tutte le chiamate ai metodi a un altro visualizzatore (1703).
    • Aggiungere il precaricamento della playlist per l'elemento successivo. 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 in modo che inizi e continui solo quando il player non è in fase di caricamento per la riproduzione. Le app possono cambiare questo comportamento implementando LoadControl.shouldContinuePreloading() di conseguenza (ad esempio quando sostituiscono 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 di invocare gli eventi dei 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() poiché l'implementazione di DefaultLoadControl può recuperare i tipi di stream da ExoTrackSelection[].
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) è stato deprecato e il metodo è stato contrassegnato come definitivo per evitare le sostituzioni. Dovresti utilizzare il nuovo DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]).
    • Segnala gli eventi MediaSourceEventListener da origini secondarie in MergingMediaSource. Di conseguenza, verranno registrati eventi di inizio/errore/annullamento/completamento del caricamento per i sottotitoli caricati lateralmente (quelli aggiunti con MediaItem.LocalConfiguration.subtitleConfigurations), che potrebbero apparire come eventi di caricamento duplicati emessi da AnalyticsListener.
    • Impedire che gli errori relativi a sottotitoli e metadati interrompano completamente la riproduzione. La traccia problematica viene disattivata e la riproduzione delle altre tracce continua (#1722).
      • Nella nuova gestione dei sottotitoli (durante l'estrazione), gli errori di analisi (ad es. dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati vengono emessi tramite callback onLoadError.
      • Nella gestione precedente dei sottotitoli codificati (durante il rendering), vengono emessi solo gli errori di caricamento associati tramite i callback onLoadError, mentre gli errori di analisi vengono ignorati silenziosamente (questo è un comportamento preesistente).
  • Trasformatore:
    • Rendi obbligatoria l'impostazione della durata dell'immagine utilizzando MediaItem.Builder.setImageDurationMs per l'esportazione delle immagini.
    • È stato aggiunto il supporto per l'esportazione delle interruzioni nelle sequenze di elementi EditedMediaItem audio.
  • Selezione tracce:
    • DefaultTrackSelector: preferisci l'audio basato sugli oggetti rispetto all'audio basato sul canale se gli altri fattori sono uguali.
  • Estrattori:
    • È stata corretta la gestione dei sample preroll per le posizioni di inizio dei contenuti multimediali non keyframe durante l'elaborazione degli elenchi di modifica nei file MP4 (#1659).
    • È stato migliorato il calcolo della frequenza fotogrammi utilizzando la durata dei contenuti multimediali dalla mdhd casella in Mp4Extractor e FragmentedMp4Extractor (#1531).
    • Correzione della scalatura errata di media_time negli elenchi di modifica MP4. Anche se 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).
    • Gestire i frame fuori sequenza nel calcolo di endIndices per MP4 con elenco di modifiche (#1797).
  • Audio:
    • Correggi i suoni di tipo pop che potrebbero verificarsi durante le ricerche.
    • È stato corretto l'accumulo di errori di troncamento per l'algoritmo di stretching/cambio di tonalità di Sonic.
    • È stato corretto un bug in SpeedChangingAudioProcessor che causava la perdita di frame di output.
  • Video:
    • È stata aggiunta una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE che causa il contrassegno come non supportati degli stream H264 protetti a 60 fps (#1619).
    • Aggiungere una soluzione alternativa per i codec che si bloccano dopo l'ultimo sample senza restituire un segnale di fine stream.
  • Testo:
    • Assicurati che i timestamp dei sottotitoli WebVTT in HLS molto grandi (che superano un valore long a 64 bit quando sono rappresentati in microsecondi e moltiplicati per la base di tempo MPEG) vengano visualizzati (#1763).90,000
  • Metadati:
    • Assegna il tipo C.TRACK_TYPE_METADATA alle tracce contenenti contenuti icy o vnd.dvb.ait.
  • DRM:
    • Correzione di IllegalStateException da DefaultDrmSession.requiresSecureDecoder dopo l'apertura di una sessione DRM non riuscita. Questo problema è stato introdotto in 1.5.0-alpha01.
  • Muxer:
  • Estensione IMA:
    • È stato corretto un bug per cui gli stream DAI inseriti lato server senza un preroll potevano generare un ArrayIndexOutOfBoundsException durante la riproduzione oltre l'ultimo midroll (#1741).
  • Sessione:
    • È stato corretto un bug che causava l'invio di comandi personalizzati da un MediaBrowser al MediaSessionCompat.Callback anziché alla variante MediaBrowserServiceCompat del metodo quando il servizio era collegato a un servizio precedente. Ciò ha impedito a MediaBrowser di ricevere il valore di ritorno effettivo inviato dal servizio precedente (#1474).
    • Gestire l'errore IllegalArgumentException generato dai dispositivi di alcuni produttori quando si imposta il ricevitore di trasmissione per gli intent dei pulsanti multimediali (#1730).
    • Aggiungi i pulsanti di comando per gli elementi multimediali. In questo modo viene aggiunta l'API Media3 per quello che era noto come Custom browse actions con la libreria precedente con MediaBrowserCompat. Tieni presente che con Media3 i pulsanti di comando per gli elementi multimediali sono disponibili sia per MediaBrowser sia per MediaController. Consulta Azioni di ricerca personalizzate di AAOS.
    • È stato corretto un 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 in modo che accetti solo gli URI dei contenuti.
    • Passa i suggerimenti di connessione di un browser Media3 al MediaBrowserCompat iniziale quando ti connetti a un MediaBrowserCompat precedente. Il servizio può ricevere gli indizi di connessione passati come indizi principali con la prima chiamata a onGetRoot().
    • È stato corretto un bug per cui un MediaBrowser collegato a un servizio di browser precedente non riceveva un errore inviato dal servizio dopo che il browser si era iscritto a un parentid.
    • Migliorare il comportamento di interoperabilità in modo che un browser Media3 collegato a un MediaBrowserService precedente non richieda due volte i canali secondari di un parentId quando si iscrive a un canale principale.
  • Interfaccia utente:
    • Attivare la funzionalità di correzione del video allungato/ritagliato inPlayerView-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 la funzionalità (#1237, #1594).
    • Aggiungi setFullscreenButtonState a PlayerView per consentire gli aggiornamenti dell'icona del pulsante a schermo intero su richiesta, ovvero out-of-band e non in modo reattivo a un'interazione con un clic (#1590, #184).
    • È stato corretto il bug per cui l'opzione "Nessuna" nella selezione del testo non funziona se esistono preferenze di selezione della traccia di testo definite dall'app.
  • Estensione Smooth Streaming:
    • È stato corretto un errore Bad magic number for Bundle durante la riproduzione di stream con SmoothStreaming con tracce con testo (#1779).
  • Estensione RTSP:
    • Correzione della rimozione delle informazioni utente per gli URL che contengono caratteri @ codificati (#1138).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
    • Aggiunta del supporto delle pagine da 16 KB per le estensioni di decodifica su Android 15 (#1685).
  • Estensione di trasmissione:
    • Interrompi la pulizia della sequenza temporale dopo la disconnessione di CastSession, il che consente all'app mittente di riprendere la riproduzione localmente 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 lo switcher di output (#1056).
  • Rimuovi i simboli non più supportati:
    • Rimuovi i costruttori DefaultEncoderFactory deprecati. Utilizza invece DefaultEncoderFactory.Builder.

Versione 1.5.0-alpha01

10 settembre 2024

Questa release include le seguenti modifiche rispetto alla release 1.4.1:

  • Libreria comune:
    • Aggiungi ForwardingSimpleBasePlayer che consente di inoltrare a un altro lettore con piccoli aggiustamenti, garantendo al contempo la piena consistenza 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 Tracks e Metadata attuali invece di creare una struttura della playlist.
    • Aumenta minSdk a 21 (Android Lollipop). Questo è in linea con tutte le altre librerie AndroidX.
    • Aggiungi l'elemento 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.
  • ExoPlayer:
    • Ora MediaCodecRenderer.onProcessedStreamChange() può essere chiamato per ogni elemento multimediale. In precedenza non veniva chiamato per il primo. Utilizza MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart() per attivare questa opzione.
    • Aggiungi PreloadMediaSource.PreloadControl.onPreloadError per consentire alle implementazioni di PreloadMediaSource.PreloadControl di intraprendere azioni in caso di 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 al verificarsi del timeout (#1540).
    • Rimuovi MediaCodecAdapter.Configuration.flags perché il campo era sempre uguale a zero.
    • Consenti all'utente di selezionare lo speaker integrato per la riproduzione su Wear OS API 35 e versioni successive (se il dispositivo pubblicizza il supporto di questa funzionalità).
    • Rimandare la chiamata di blocco a Context.getSystemService(Context.AUDIO_SERVICE) finché non viene attivato il trattamento dell'attenzione audio. In questo modo, la chiamata di blocco non viene eseguita se la gestione dell'audio in primo piano non è attivata (#1616).
    • Consenti la riproduzione indipendentemente dalla durata memorizzata nella cache quando il caricamento non va a buon fine (#1571).
    • Aggiungi AnalyticsListener.onRendererReadyChanged() per indicare quando i singoli renderer consentono la riproduzione.
  • Trasformatore:
    • Aggiungi SurfaceAssetLoader, che supporta l'inserimento in coda dei dati video in Transformer tramite un Surface.
    • ImageAssetLoader segnala l'input non supportato tramite AssetLoader.onError instead of throwing an IllegalStateException.
  • Estrattori:
    • Consenti a Mp4Extractor e FragmentedMp4Extractor di identificare i campioni H264 che non vengono utilizzati come riferimento dai campioni successivi.
    • Aggiunta dell'opzione per attivare la ricerca basata sull'indice in AmrExtractor.
    • Tratta i file MP3 con più di 128 kB tra frame validi come troncati (anziché non validi). Ciò significa che i file con dati non MP3 alla fine, senza altri metadati per indicare la durata 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).
  • DataSource:
    • Aggiornamento HttpEngineDataSource per consentire l'utilizzo a partire dalla versione S dell'estensione 7 anziché dal livello API 34 (#1262).
  • Audio:
    • Configura automaticamente i metadati relativi all'intensità sonora CTA-2075 sul codec se presenti nei contenuti multimediali.
    • Assicurati che il volume diminuisca gradualmente durante la ricerca.
  • Video:
    • MediaCodecVideoRenderer evita di decodificare i sample che non vengono né visualizzati né utilizzati come riferimento da altri sample.
    • Nell'API 35 e versioni successive, MediaCodecAdapter ora può ricevere un null Surface in configure e chiama 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 da MediaCodecAdapter, se presenti, durante l'elaborazione di onOutputFormatChanged (#1371).
  • Testo:
  • Immagine:
    • Aggiungi ExternallyLoadedImageDecoder per un'integrazione semplificata 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 una soluzione alternativa DefaultVideoFrameProcessor per il scaling SurfaceTexture minore. SurfaceTexture può includere una piccola scala che taglia un bordino di 1 texel intorno al bordo di un buffer ritagliato. Ora questo problema viene gestito in modo che l'output sia più vicino a quello previsto.
    • Accelera DefaultVideoFrameProcessor.queueInputBitmap(). Di conseguenza, l'esportazione delle immagini nei video con Transformer è più veloce.
  • Estensione IMA:
    • È stato corretto un bug per cui lo svuotamento della playlist poteva causare un ArrayIndexOutOfBoundsException in ImaServerSideAdInsertionMediaSource.
  • Sessione:
    • Aggiungi MediaButtonReceiver.shouldStartForegroundService(Intent) per consentire alle app di eliminare un comando di riproduzione in arrivo per la ripresa della riproduzione, overriding questo metodo. Per impostazione predefinita, il servizio viene sempre avviato e la riproduzione non può essere soppressa senza che il sistema arresti in modo anomalo il servizio con un ForegroundServiceDidNotStartInTimeException (#1528).
  • Estensione DASH:
    • Aggiunta del supporto per i periodi che iniziano a metà di un segmento (#1440).
  • Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
    • Aggiungi il modulo di decodifica IAMF, che fornisce il supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
      • La riproduzione è abilitata con un layout stereo e 5.1 con la spazializzazione, insieme al tracciamento facoltativo della testa, ma il supporto della riproduzione binaurale non è attualmente disponibile.
  • Estensione di trasmissione:
    • Interrompi l'eliminazione della sequenza temporale dopo la disconnessione di CastSession, il che consente all'app mittente di riprendere la riproduzione localmente 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 lo switcher di output (#1056).
  • Utilità di test:
    • DataSourceContractTest ora include test per verificare:
      • Lo stream di input read position è aggiornato.
      • Il buffer di output offset viene applicato correttamente.
  • Rimuovi i simboli non più supportati:
    • Rimuovi Player.hasPrevious, Player.hasPreviousWindow() obsoleti. Utilizza invece Player.hasPreviousMediaItem().
    • Rimuovi il metodo Player.previous() deprecato. Utilizza invece Player.seekToPreviousMediaItem().
    • Rimuovi il metodo DrmSessionEventListener.onDrmSessionAcquired deprecato.

Versione 1.4.0

Versione 1.4.1

27 agosto 2024

androidx.media3:media3-*:1.4.1 viene rilasciato. 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 memorizzata nella cache quando il caricamento non va a buon fine (#1571).
  • Estrattori:
    • MP3: correggi l'errore Searched too many bytes ignorando correttamente i dati non MP3 finali in base al campo della durata in un frame Info (#1480).
  • Testo:
    • TTML: correzione della gestione dei valori tts:fontSize percentuali per assicurarsi che vengano ereditati correttamente dai nodi principali con valori tts:fontSize percentuali.
    • Correzione di IndexOutOfBoundsException in LegacySubtitleUtil a causa della gestione errata del caso in cui l'ora di inizio dell'output richiesta sia 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 L1 Widevine. Questo errore è causato da un'implementazione incompleta del metodo del framework MediaDrm.requiresSecureDecoder (#1603).
  • Effetto:
    • Aggiungi un metodo release() a GlObjectsProvider.
  • Sessione:
    • Trasforma un doppio tocco di KEYCODE_HEADSETHOOK in un'azione di "avanzamento al successivo", come documentato (#1493).
    • Gestisci KEYCODE_HEADSETHOOK come un comando "play" in MediaButtonReceiver quando decidi se ignorarlo per evitare un ForegroundServiceDidNotStartInTimeException (#1581).
  • Estensione RTSP:
    • Salta le descrizioni multimediali non valide nell'analisi del file SDP (#1087).

Versione 1.4.0

25 luglio 2024

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

  • Libreria comune:
    • Inoltra le chiamate di ricerca presumibilmente senza operazioni ai metodi BasePlayer.seekTo() e SimpleBasePlayer.handleSeek() protetti 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 avanzato di Java 8 (#1312).
    • Assicurati che la durata passata a MediaItem.Builder.setImageDurationMs() venga ignorata per un MediaItem non immagine (come documentato).
    • Aggiungi Format.customData per archiviare informazioni personalizzate fornite dall'app sulle istanzeFormat.
  • 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 media delle sorgenti nella memoria e 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 perché i renderer e i decodificatori decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate di Renderer devono controllare se il tempo di buffer è almeno BaseRenderer.getLastResetPositionUs() per decidere se mostrare un sample. Le implementazioni personalizzate di SimpleDecoder possono controllare isAtLeastOutputStartTimeUs() se necessario o contrassegnare altri buffer con DecoderOutputBuffer.shouldBeSkipped per saltarli.
    • Consenti a TargetPreloadStatusControl.getTargetPreloadStatus(T) di restituire un valore nullo 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 in attesa mantenendo l'istanza di Preloader 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.
    • Risolto il problema relativo all'aggiornamento dell'ultimo tempo di ricarica del buffer, che ha comportato la generazione di una chiave bs (mancata alimentazione del buffer) errata in CMCD (#1124).
    • Aggiungi PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) per indicare che l'origine è stata caricata fino alla fine. In questo modo, le implementazioni di DefaultPreloadManager e PreloadMediaSource.PreloadControl personalizzate possono precaricare la fonte successiva o eseguire altre azioni.
    • È stato corretto un bug per cui il salto dei silenzi alla fine degli elementi poteva 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 che viene utilizzato quando le risorse del codec vengono recuperate per attività con priorità più elevata.
    • Consenti a AdsMediaSource di caricare gli annunci pre-roll prima del completamento della preparazione iniziale dei contenuti media (#1358).
    • È stato corretto un bug per cui la riproduzione passava a STATE_ENDED durante la preparazione di un nuovo live streaming DASH multiperiodo dopo che il periodo originale era già stato rimosso dal manifest.
    • Rinomina onTimelineRefreshed() in onSourcePrepared() e onPrepared() in onTracksSelected() in PreloadMediaSource.PreloadControl. Rinomina anche le IntDefs in DefaultPreloadManager.Stage di conseguenza.
    • Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro con i cicli di risveglio della CPU e ritardare il risveglio fino al momento in cui i renderer possono avanzare. Puoi attivare questa opzione utilizzando experimentalSetDynamicSchedulingEnabled() durante la configurazione dell'istanza ExoPlayer.
    • Aggiungi Renderer.getDurationToProgressUs(). Un Renderer può implementare questo metodo per restituire a ExoPlayer la durata di avanzamento della riproduzione necessaria per l'avanzamento del renderer. Se ExoPlayer è impostato su experimentalSetDynamicSchedulingEnabled(), ExoPlayer chiamerà questo metodo per calcolare il momento in cui pianificare l'attività di lavoro.
    • Aggiungi MediaCodecAdapter#OnBufferAvailableListener per avvisare quando i buffer di input e di output sono disponibili per l'utilizzo da parte di MediaCodecRenderer. MediaCodecRenderer segnalerà ExoPlayer quando riceve questi callback e, se ExoPlayer è impostato su experimentalSetDynamicSchedulingEnabled(), ExoPlayer programmerà il proprio loop di lavoro man mano che i renderer possono avanzare.
    • 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 la quale seekToPrevious() cerca nell'elemento precedente (#1425).
    • Sono state corrette alcune incoerenze relative all'attenzione audio, ad esempio la mancata registrazione della perdita di attenzione completa o transitoria quando il player è in pausa (#1436).
    • Risolvere i potenziali problemi IndexOutOfBoundsException causati dagli estrattori che segnalano canali aggiuntivi dopo il passaggio di preparazione iniziale (#1476).
    • Effects in ExoPlayer.setVideoEffect() riceverà i timestamp con l'offset del renderer rimosso (#1098).
    • Risolto il potenziale IllegalArgumentException durante la gestione dell'errore del player che si è verificato durante la lettura anticipata di un altro elemento della playlist (#1483).
  • Trasformatore:
    • Aggiungi audioConversionProcess e videoConversionProcess a ExportResult per indicare in che modo è stato creato il rispettivo canale nel file di output.
    • Allenta i controlli a livello H.264 per l'ottimizzazione del taglio.
    • È stato aggiunto il supporto per il passaggio tra i contenuti multimediali di input SDR e HDR in sequenza.
    • Aggiunta del supporto per gli effetti audio a livello di composizione.
    • Aggiunta del supporto per la transcodifica di immagini Ultra HDR in video HDR.
    • È stato risolto il problema per cui DefaultAudioMixer non emette la quantità corretta di byte dopo essere stato reimpostato e riutilizzato.
    • È stato risolto un bug del decodificatore per cui il numero di canali audio era limitato allo stereo durante la gestione dell'ingresso 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.
    • Correggere il caricamento delle immagini HEIC dagli schemi URI dei contenuti. (#1373).
    • Regola la durata della traccia audio in AudioGraphInput per migliorare la sincronizzazione AV.
    • Rimuovi il campo ExportResult.processedInputs. Se utilizzi questo campo per dettagli sul codec, utilizza DefaultDecoderFactory.listener. In caso di eccezione per un 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 visualizzato passando l'ultima unità di accesso di uno stream alla coda di sample (#7909). Sono state incorporate correzioni per risolvere i problemi emersi negli stream HLS solo con frame I(#1150) e negli stream HLS H.262 (#1126).
    • MP3: preferisci le dimensioni dei dati di un frame Info rispetto a quelle riportate dall'Content-Length stream sottostante (ad es. dimensioni del file o intestazione Content-Length HTTP). In questo modo è possibile escludere i dati dei trailer non riproducibili (ad es. l'artwork dell'album) dai calcoli di ricerca con velocità in bit costante, rendendo le ricerche più accurate (#1376).
    • MP3: utilizza il conteggio dei frame e altri dati in un frame Info (se presente) per calcolare una velocità in bit media per la ricerca di una velocità in bit costante, anziché eseguire l'estrapolazione dalla velocità in bit del frame successivo al frame Info, che potrebbe essere artificialmente ridotta, ad esempio il frame PCUT (#1376).
    • Correggere l'estrazione del formato audio PCM nei contenitori AVI.
  • Audio:
    • Correzione degli attributi di codifica DTS:X Profile 2 per la riproduzione passthrough (#1299).
    • Per la riproduzione offloaded, reimposta il campo di monitoraggio per il completamento dello stream in DefaultAudioSink prima di chiamare AudioTrack.stop() in modo che AudioTrack.StreamEventCallback#onPresentationEnded identifichi correttamente quando tutti i dati in attesa sono stati riprodotti.
    • È stato corretto un bug in SilenceSkippingAudioProcessor per cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) possono causare un'eccezione del processore (#1352).
    • Implementa MediaCodecAudioRenderer.getDurationToProgressUs() in modo che ExoPlayer pianifichi dinamicamente il proprio loop di lavoro principale in base a quando MediaCodecAudioRenderer può avanzare.
  • Video:
    • È stato risolto il problema per cui Listener.onRenderedFirstFrame() arriva troppo presto quando si cambia superficie durante la riproduzione.
    • Correggere la logica di riserva del decodificatore per Dolby Vision in modo da utilizzare un decodificatore AV1 compatibile, se necessario (#1389).
    • È stata corretta un'eccezione del codec che potrebbe essere causata dall'attivazione di un visualizzatore 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 di analisi dei sottotitoli predefinito in modo che avvenga durante l'estrazione anziché durante il rendering (consulta il diagramma dell'architettura di ExoPlayer per conoscere la differenza tra estrazione e rendering).
      • Questa modifica può essere ignorata chiamando entrambi MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) e TextRenderer.experimentalSetLegacyDecodingEnabled(true). Consulta la documentazione sulla personalizzazione per scoprire come collegare questi componenti a un'istanza ExoPlayer. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli precedenti) verranno rimossi in una release futura.
      • Le app con implementazioni SubtitleDecoder personalizzate devono essere aggiornate per implementare SubtitleParser (e SubtitleParser.Factory anziché SubtitleDecoderFactory).
    • PGS: correzione della decodifica run-length per risolvere 0 come indice di colore anziché come valore di colore letterale (#1367).
    • CEA-708: ignora il valore rowLock. La specifica CEA-708-E S-2023 stabilisce cherowLock e columnLock devono essere considerati veri, indipendentemente dai valori presenti nello stream (il supporto di columnLock non è implementato, quindi si presume che sia sempre falso).
      • Questa funzionalità era originariamente inclusa nelle note di rilascio di 1.3.0-alpha01, ma la modifica è stata annullata accidentalmente prima del rilascio di 1.3.0-rc01. Il problema ora è stato risolto, quindi la modifica è di nuovo presente.
    • CEA-708: evita che vengano aggiunte nuove righe duplicate a causa della gestione ingenua del comando "set pen location" da parte di ExoPlayer (#1315).
    • Correggi un IllegalArgumentException da LegacySubtitleUtil quando un esempio di sottotitoli WebVTT non contiene segnali, ad esempio nell'ambito di uno stream DASH (#1516).
  • Metadati:
    • Correggere la mappatura dei tag di ordinamento MP4 in ID3. In precedenza, i tag MP4 "ordinamento album" (soal), "ordinamento artista" (soar) e "ordinamento artista album" (soaa) erano mappati erroneamente ai tag ID3 TSO2, TSOA e TSOP (#1302).
    • Correzione della lettura dei tag numerici gnre (genere) e tmpo (tempo) per MP4 (/iTunes) quando il valore è lungo più di un byte.
    • Propaga il frame ID3 TCON a MediaMetadata.genre (#1305).
  • Immagine:
    • Aggiunta del supporto per le griglie di miniature DASH non quadrate (#1300).
    • È stato aggiunto il supporto per AVIF per le API 34 e successive.
    • Consenti null come parametro per ExoPlayer.setImageOutput() per cancellare un valore ImageOutput impostato in precedenza.
  • DataSource:
    • Implementa il supporto per gli URI delle risorse non elaborate android.resource://package/id dove package è diverso dal pacchetto dell'applicazione corrente. In precedenza non era documentato che funzionasse, ma è un modo più efficiente per accedere alle risorse in un altro pacchetto rispetto al nome.
    • Controlla attivamente che url non sia nullo 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 hardcoded al momento della compilazione (#1405).
  • DRM:
    • Consenti di impostare un LoadErrorHandlingPolicy su DefaultDrmSessionManagerProvider (#1271).
  • Effetto:
    • Supporta più cambi di velocità all'interno dello stesso EditedMediaItem o Composition in SpeedChangeEffect.
    • Supporto per l'output HLG e PQ dall'input bitmap ultra HDR.
    • È stato aggiunto il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, che migliora l'output della superficie HLG in ExoPlayer.setVideoEffect e nella Debug SurfaceView di Transformer.
    • Aggiorna l'implementazione della matrice overlay in modo che sia coerente con la documentazione invertendo i valori x e y applicati in setOverlayFrameAnchor(). Se utilizzi OverlaySettings.Builder.setOverlayFrameAnchor(), capovolgi i valori x e y moltiplicandoli per -1.
    • È stato corretto un bug per cui TimestampWrapper si arresta in modo anomalo se utilizzato con ExoPlayer#setVideoEffects (#821).
    • Modifica lo spazio di lavoro dei colori SDR predefinito da colori lineari a video SDR BT 709 elettrico. Fornisci anche una terza opzione per mantenere lo spazio di colore originale.
    • Consenti di definire l'ordine Z indeterminato di EditedMediaItemSequences (#1055).
    • Mantieni una gamma di luminanza coerente tra diversi contenuti HDR (utilizza la gamma HLG).
    • Aggiunta del supporto per gli overlay Ultra HDR (bitmap) sui contenuti HDR.
    • Consenti l'utilizzo degli effetti SeparableConvolution prima dell'API 26.
    • Rimuovi OverlaySettings.useHdr inutilizzato perché l'intervallo dinamico dell'overlay e del frame deve corrispondere.
    • Aggiungi il supporto HDR per TextOverlay. La luminosità dell'overlay di testo può essere aggiustata con OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • Estensione IMA:
    • Promuovi l'API richiesta per consentire alle app di riprodurre stream di annunci DAI in modalità stabile.
    • Aggiungi replaceAdTagParameters(Map <String, String>) a ImaServerSideAdInsertionMediaSource.AdLoader per consentire la sostituzione dei parametri del tag annuncio in fase di runtime.
    • È stato corretto un bug per cui VideoAdPlayer.VideoAdPlayerCallback.onError() non veniva chiamato quando si verificava un errore del player durante la riproduzione dell'annuncio (#1334).
    • Esegui l'upgrade della versione dell'SDK IMA a 3.33.0 per correggere un problema NullPointerException quando utilizzi URI dei tag annuncio data:// (#700).
  • Sessione:
    • Modifica il valore predefinito CommandButton.enabled in true e assicurati che il valore possa rimanere falso 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 eseguire query per verificare se il servizio deve essere interrotto in onTaskRemoved() (#1219).
    • Aggiungi MediaSessionService.pauseAllPlayersAndStopSelf() che consente di mettere in pausa la riproduzione di tutte le sessioni e chiama stopSelf() per terminare il ciclo di vita del MediaSessionService.
    • Sostituisci 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 scorrimento 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 per la selezione delle proprietà dei metadati come in media1.
    • Aggiungi MediaSession.sendError() che consente di inviare errori non fatali al controller Media3. Quando utilizzi il controller delle notifiche (vedi MediaSession.getMediaNotificationControllerInfo()), l'errore personalizzato viene utilizzato per aggiornare il PlaybackState della sessione della piattaforma in uno stato di errore con le informazioni sull'errore specificate (#543).
    • Aggiungi MediaSession.Callback.onPlayerInteractionFinished() per informare le sessioni al termine di una serie di interazioni del giocatore da un controller specifico.
    • Aggiungi SessionError e utilizzalo in SessionResult e LibraryResult invece del codice di errore per fornire ulteriori informazioni sull'errore e su come risolverlo, se possibile.
    • Pubblica il codice dell'app di test del controller media3 che può essere utilizzata per verificare le interazioni con le app che pubblicano una sessione multimediale.
    • Propaga gli extra passati a MediaSession[Builder].setSessionExtras() di media3 a MediaSession[Builder].setSessionExtras() di un controllore media1.PlaybackStateCompat.getExtras()
    • Mappa gli errori irreversibili e non irreversibili verso e dalla sessione della piattaforma. Un PlaybackException è mappato a uno stato di errore irreversibile del PlaybackStateCompat. Un SessionError inviato al controllore di notifiche multimediali con MediaSession.sendError(ControllerInfo, SessionError) è 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.
    • Consenti di impostare l'attività della sessione per controller per eseguire l'override dell'attività della sessione globale. L'attività della sessione può essere definita per un controller al momento della connessione creando un ConnectionResult con AcceptedResultBuilder.setSessionActivivty(PendingIntent). Una volta collegata, l'attività della sessione può essere aggiornata con MediaSession.setSessionActivity(ControllerInfo, PendingIntent).
    • Migliorare la replica degli errori delle chiamate a MediaLibrarySession.Callback. Ora la replica degli errori può essere configurata utilizzando MediaLibrarySession.Builder.setLibraryErrorReplicationMode() per scegliere il tipo di errore o disattivare la replica degli errori, che è attiva per impostazione predefinita.
  • Interfaccia utente:
    • Aggiungere il supporto della visualizzazione delle immagini a PlayerView quando è connesso a un ExoPlayer (#1144).
    • Aggiungi la personalizzazione di varie icone in PlayerControlView tramite gli attributi XML per consentire drawable diversi per ogni istanza di PlayerView, anziché sostituzioni globali (#1200).
    • Sfrutta una soluzione alternativa per un bug della piattaforma che causa un video allungato/ritagliato quando utilizzi SurfaceView all'interno di un Compose AndroidView nell'API 34 (#1237).
  • Download:
    • Assicurati che DownloadHelper non lasci inutilizzate istanze di Renderer non rilasciate, il che potrebbe causare un arresto anomalo dell'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:
    • È stato corretto un bug per cui i campioni EMSG in attesa di una discontinuità venivano delegati in HlsSampleStreamWrapper con un offset errato, causando un IndexOutOfBoundsException o un IllegalArgumentException (#1002).
    • È stato corretto un bug per cui le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
    • È stato corretto un bug per cui l'attivazione di CMCD per HLS con segmenti di inizializzazione dava risultati in Source Error e IllegalArgumentException.
    • È stato corretto un bug a causa del quale le playlist in riproduzione non principali non venivano aggiornate durante la riproduzione in diretta (#1240).
    • Correzione del bug che causava un errore se si attivava CMCD per i live streaming HLS ArrayIndexOutOfBoundsException (#1395).
  • Estensione DASH:
    • È stato corretto un bug per cui la preparazione di un live streaming multiperiodo può generare un erroreIndexOutOfBoundsException (#1329).
    • Aggiunta del supporto per gli URL delle licenze dashif:Laurl (#1345).
  • Estensione di trasmissione:
    • È stato corretto un bug che convertiva il titolo dell'album del MediaQueueItem nell'artista nell'elemento multimediale Media3 (#1255).
  • Utilità di test:
    • Implementa onInit() e onRelease() in FakeRenderer.
    • Modifica i metodi TestPlayerRunHelper.runUntil()/playUntil() in modo che non vengano eseguiti in caso di errori non fatali (ad es. quelli segnalati a AnalyticsListener.onVideoCodecError()). Utilizza la nuova catena di metodi TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() per disattivare questo comportamento.
  • App di prova:
    • Utilizza DefaultPreloadManager nell'app demo del modulo breve.
    • Consenti di impostare la modalità di ripetizione con gli argomenti Intent dalla riga di comando (#1266).
    • Utilizza HttpEngineDataSource come HttpDataSource se supportato dal dispositivo.
  • Rimuovi i simboli non più supportati:
    • Rimuovi CronetDataSourceFactory. Utilizza invece CronetDataSource.Factory.
    • Rimuovi alcuni costruttori DataSpec. Utilizza invece DataSpec.Builder.
    • Rimuovi il metodo setContentTypePredicate(Predicate) da DefaultHttpDataSource, OkHttpDataSource e CronetDataSource. Utilizza invece 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 invece DefaultHttpDataSource.Factory.
    • Rimuovi DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Utilizza invece 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 invece le sovraccaricamenti 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 i valori IntDef e le costanti equivalenti in androidx.media3.common.C (ad es. C.FORMAT_HANDLED).
    • Rimuovi l'interfaccia Bundleable. Sono inclusi tutti i campi costanti Bundleable.Creator<Foo> CREATOR. Gli utenti che chiamano devono invece 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 rilasciato. La versione 1.3.1 contiene questi commit.

  • Libreria comune:
    • Aggiungi Format.labels per consentire etichette localizzate o altre etichette alternative.
  • ExoPlayer:
    • È stato risolto il problema per cui PreloadMediaPeriod non riesce a conservare gli stream quando viene nuovamente precaricato.
    • Applica il valore TrackSelectionResult corretto corrispondente al periodo di riproduzione durante la nuova selezione della traccia.
    • Avvia i renderer abilitati in anteprima solo dopo aver avanzato il periodo di riproduzione durante il passaggio da un elemento multimediale all'altro (#1017).
    • Aggiungi il tipo di ritorno mancante alla regola -keepclasseswithmembers di ProGuard per DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Trasformatore:
    • Aggiunta di una soluzione alternativa per l'eccezione generata a causa del mancato supporto da parte di MediaMuxer dei timestamp di presentazione negativi prima dell'API 30.
  • Selezione tracce:
    • DefaultTrackSelector: preferisci 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, di cui una con una risoluzione più elevata, ma un numero molto ridotto di fotogrammi (#1051).
  • Estrattori:
    • Risolto un problema per cui il padding non veniva ignorato durante la lettura di chunk di dimensioni dispari dai file WAV (#1117).
    • MP3: compila Format.averageBitrate da frame dei metadati come XING e VBRI.
    • MPEG-TS: ripristina una modifica che aveva lo scopo di garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di sample (#7909). Questo accade perché la modifica causa nuovi problemi con gli stream HLS solo con frame I (#1150) e gli stream HLS H.262 (#1126).
  • Audio:
    • Consenti il recupero del renderer disattivando l'offload se la traccia audio non riesce a inizializzarsi in modalità di offload.
  • Video:
    • Aggiunta di una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa il contrassegno degli stream H265 a 60 fps come non supportati
    • Aggiunta di una soluzione alternativa che garantisce che il primo frame venga sempre visualizzato durante il tunneling anche se il dispositivo non lo fa automaticamente come richiesto dall'API (#1169). (#966).
    • È stato risolto il problema per cui la gestione delle informazioni sui colori HDR causa un comportamento anomalo del codec e impedisce il passaggio al formato adattivo per le tracce video SDR (#1158).
  • Testo:
    • WebVTT: impedisci ai cue direttamente consecutivi di creare istanze CuesWithTiming aggiuntive spurie da WebvttParser.parse (#1177).
  • DRM:
    • Evitare un NoSuchMethodError che può essere generato dal framework MediaDrm anziché da ResourceBusyException o NotProvisionedException su alcuni dispositivi Android 14 (#1145).
  • Effetto:
    • Miglioramento della mappatura tonale da PQ a SDR mediante la conversione degli spazi colore.
  • Sessione:
    • È stato risolto il problema per cui la posizione corrente torna indietro quando il controller sostituisce l'elemento corrente (#951).
    • Risolto il problema per cui MediaMetadata con solo extras non nullo non viene trasmesso tra i controller multimediali e le sessioni (#1176).
  • Interfaccia utente:
    • Scegli come opzione di riserva l'inclusione del nome della lingua della traccia audio se Locale non riesce a identificare un nome visualizzato (#988).
  • Estensione DASH:
    • Compila tutti gli elementi Label del manifest in Format.labels (#1054).
  • Estensione RTSP:
    • Saltare i valori delle informazioni sulla sessione vuoti (tag i) nell'analisi del protocollo SDP (#1087).
  • Estensioni 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 rilasciato. La versione 1.3.0 contiene questi commit.

  • Libreria comune:
    • Implementa il supporto per gli URI delle risorse non elaborate android.resource://package/[type/]name, dove package è diverso dal pacchetto dell'applicazione corrente. È sempre stato documentato che funziona, ma finora non è stato implementato correttamente.
    • 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 che artworkData in MediaMetadata.Builder.populate(MediaMetadata) quando almeno uno di essi non è nullo (#964).
  • ExoPlayer:
    • Aggiungi PreloadMediaSource e PreloadMediaPeriod per consentire alle app di precaricare un'origine media di contenuti in una posizione di inizio specifica prima della riproduzione. PreloadMediaSource si occupa di preparare l'origine media dei contenuti per ricevere il Timeline, preparare e memorizzare nella cache il periodo nella posizione di inizio 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 player per impostazione predefinita con ImageOutput e ImageDecoder.Factory.DEFAULT null.
    • Emettere l'evento Player.Listener.onPositionDiscontinuity quando viene ignorato il silenzio (#765).
    • Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi attivare questa opzione utilizzando MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Supporta le origini multimediali adattabili con PreloadMediaSource.
    • Implementa HttpEngineDataSource, un HttpDataSource, utilizzando l'API HttpEngine.
    • Impedisci la sottoclassificazione CompositeSequenceableLoader. Questo componente è stato in precedenza reso estensibile ma non è mai stato sottoclassificato all'interno della libreria. Le personalizzazioni possono essere eseguite wrapping un'istanza utilizzando il pattern decorator e implementando un CompositeSequenceableLoaderFactory personalizzato.
    • È stato risolto il problema per cui la ripetizione della stessa ora comportava l'eliminazione 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.
    • È stato aggiunto il supporto per la personalizzazione del SubtitleParser.Factory utilizzato durante l'estrazione. È possibile ottenere il consenso usando MediaSource.Factory.setSubtitleParserFactory().
    • Aggiungi il prefisso della sorgente a tutti i campi Format.id generati da MergingMediaSource. In questo modo puoi identificare la fonte che ha generato un Format (#883).
    • Correggi la regex utilizzata per convalidare i nomi delle chiavi personalizzate dei dati dei clienti di media comuni (CMCD) modificandola in modo da verificare solo la presenza di un trattino (#1028).
    • Interrompere la doppia codifica dei parametri di query CMCD (#1075).
  • Trasformatore:
    • È stato aggiunto il supporto per l'appiattimento dei video in slow motion SEF H.265/HEVC.
    • Aumento della velocità di transcodifica, in particolare per le modifiche "Rimuovi video".
    • Aggiungi l'API per assicurarti che il file di output inizi su un frame video. In questo modo, il risultato delle operazioni di taglio può essere più compatibile con le implementazioni dei player che non mostrano il primo frame video fino al timestamp della presentazione (#829).
    • È stato aggiunto il supporto per l'ottimizzazione delle operazioni di taglio MP4 di singoli asset.
    • Aggiungi il supporto per assicurarti che un fotogramma video abbia il primo timestamp nel file di output. Corregge i file di output che iniziano con un frame nero su lettori basati su iOS (#829).
  • Selezione tracce:
    • Aggiungi DefaultTrackSelector.selectImageTrack per attivare la selezione della traccia di immagini.
    • Aggiungi TrackSelectionParameters.isPrioritizeImageOverVideoEnabled per determinare se selezionare una traccia di immagini se sono disponibili sia una traccia di immagini sia una traccia video. Il valore predefinito è false, il che significa che viene data la priorità alla selezione di una traccia video.
  • Estrattori:
    • Aggiunta di un'ulteriore analisi AV1C all'estrattore MP4 per recuperare i valori ColorInfo.colorSpace, ColorInfo.colorTransfer e ColorInfo.colorRange (#692).
    • MP3: utilizza la ricerca con velocità in bit 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 questo comportava una ricerca meno precisa rispetto a se la ignoriamo e assumiamo 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 dei ruoli, consentendo agli utenti di effettuare selezioni più consapevoli delle tracce audio (#973).
  • Audio:
    • Miglioramento dell'algoritmo di salto dei silenzi con una rampa di volume uniforme; mantenuti silenzio minimo e durate dei silenzi più naturali (#7423).
    • Segnalare i silenzi saltati 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 iniettare un VideoFrameProcessor.Factory personalizzato possono creare un CompositingVideoSinkProvider che utilizza il VideoFrameProcessor.Factory personalizzato e passare il provider di destinazione video a MediaCodecVideoRenderer.
  • Testo:
    • Correzione della serializzazione degli indicatori 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 stabilisce cherowLock e columnLock devono essere considerati veri, indipendentemente dai valori presenti nello stream (il supporto di columnLock non è implementato, quindi si presume che sia sempre falso).
  • Immagine:
    • È stato aggiunto il supporto delle miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature ImageOutput poco prima dei relativi orari di presentazione.
  • DRM:
  • Estensione IMA:
    • È stato risolto il problema per cui non è possibile riprodurre gli annunci DASH e HLS senza l'estensione file appropriata.
  • Sessione:
    • Disattiva il rilevamento dei doppi 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 accetti solo un Context anziché un MediaLibraryService.
  • Estensione HLS:
    • Riduci HlsMediaPeriod alla visibilità privata del pacchetto. Questo tipo non deve dipendere direttamente dall'esterno del pacchetto HLS.
    • La risoluzione cerca l'inizio di un segmento in modo più efficiente (#1031).
  • Estensioni decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
    • Decodificatore MIDI: ignora i messaggi di evento SysEx (#710).
  • Utilità di test:
    • Non mettere in pausa la riproduzione in TestPlayerRunHelper.playUntilPosition. Il test mantiene la riproduzione in uno stato di riproduzione, ma sospende l'avanzamento finché il test non è in grado di aggiungere asserzioni e ulteriori azioni.
  • App di prova:
    • Aggiungi un modulo demo nel formato breve per mostrare 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:
    • È stato risolto il problema per cui le ricerche manuali al di fuori dell'intervallo LiveConfiguration.min/maxOffset continuano a regolare l'offset su min/maxOffset.
    • È stato corretto il problema relativo ai layout dei canali OPUS e VORBIS errati per i canali 3, 5, 6, 7 e 8 (#8396).
    • È stato risolto il problema per cui le selezioni dei canali dopo la ricerca fino a zero in un live streaming facevano avviare erroneamente lo stream nella posizione predefinita (#9347).
    • È stato risolto il problema per cui le nuove istanze di CmcdData.Factory ricevevano valori negativi per bufferedDurationUs dalle origini chunk, con conseguente IllegalArgumentException (#888).
  • Trasformatore:
    • Sfrutta una soluzione alternativa per un problema per cui il codificatore generava un errore al momento della configurazione a causa dell'impostazione di una frequenza di funzionamento elevata.
  • Estrattori:
    • Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto animate JPEG come ROLE_FLAG_ALTERNATE per impedire 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 degli stream TS più lunghi di 47721 secondi (#855).
  • Audio:
    • Correzione della gestione di EOS per SilenceSkippingAudioProcessor quando viene chiamato più volte (#712).
  • Video:
    • Aggiunta di una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa il contrassegno degli stream AVC a 60 fps come non supportati (#693).
  • Metadati:
    • È stato corretto un bug per cui MediaMetadata veniva compilato solo dai commenti Vorbis con chiavi maiuscole (#876).
    • Cattura 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:
    • Estensione della soluzione alternativa per l'URL della licenza https://default.url ClearKey spurio all'API 33 e versioni successive (in precedenza la soluzione alternativa si applicava solo all'API 33 esatta) (#837).
    • Correzione del ERROR_DRM_SESSION_NOT_OPENED quando si passa da contenuti criptati a contenuti chiari senza una superficie collegata al player. L'errore è stato causato dall'utilizzo errato di un decodificatore sicuro per riprodurre i contenuti chiari.
  • 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 orario negativo per un timer setWhen disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903).
    • Correzione del problema IllegalStateException quando il controller delle notifiche multimediali non ha completato la connessione al momento della richiesta del primo aggiornamento della notifica (#917).
  • Interfaccia utente:
    • È stato risolto il problema per cui i pulsanti Avanti e Indietro non sono visibili se utilizzati con Material Design in un BottomSheetDialogFragment (#511).
    • È stato risolto il problema per cui i numeri nel pulsante Avanti veloce del PlayerControlView non erano allineati (#547).
  • Estensione DASH:
    • Analizza "f800" come numero di canali pari a 5 per Dolby nel manifest DASH (#688).
  • Estensioni decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
    • MIDI: correzione del problema per cui la ricerca in avanti salta gli eventi di modifica del programma (#704).
    • Esegui la migrazione a FFmpeg 6.0 e aggiorna il pacchetto NDK supportato alla versione r26b (#707, #867).
  • Estensione di trasmissione:
    • Sanitizza la creazione di un Timeline per evitare l'arresto anomalo dell'app quando il caricamento dei contenuti multimediali non riesce 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ù informazioni su Throwable passato ai metodi Log.{d,i,w,e}(), pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se lo desiderano (eventualmente utilizzando Logger.appendThrowableString(String, Throwable)).
    • È stato risolto un problema di compatibilità con Kotlin per cui i parametri di tipo generico nullable e i tipi di elementi di array nullable non vengono rilevati come nullable. Alcuni esempi sono i parametri dei metodi TrackSelectorResult e SimpleDecoder (#6792).
    • Modificare il comportamento predefinito dell'interfaccia utente e delle notifiche in Util.shouldShowPlayButton per mostrare un pulsante "Riproduci" mentre la riproduzione è temporaneamente soppressa (ad es. a causa di una perdita temporanea dell'audio). Il comportamento precedente può essere mantenuto utilizzando PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) o MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Esegui l'upgrade da androidx.annotation:annotation-experimental a 1.3.1 per risolvere il problema. https://issuetracker.google.com/251172715.
    • Sposta ExoPlayer.setAudioAttributes nell'interfaccia Player.
  • ExoPlayer:
    • Risolvere i problemi di ricerca negli stream AC4 causati dalla mancata identificazione corretta dei campioni di solo decodifica (#11000).
    • Aggiungi la soppressione della riproduzione su dispositivi di output audio non idonei (ad esempio lo speaker integrato sui dispositivi Wear OS) quando questa funzionalità è attivata tramite ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Il motivo della soppressione della riproduzione verrà aggiornato comePlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT se si tenta di riprodurre quando non sono disponibili uscite audio idonee o se tutte le uscite idonee sono disconnesse durante la riproduzione. Il motivo della soppressione verrà rimosso quando viene collegato un output idoneo.
    • 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 tutti i tipi MediaSource forniti dalla biblioteca 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 in SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contiene parametri aggiuntivi, tra cui playbackSpeed e lastRebufferRealtimeMs, oltre all'playbackPositionUs esistente.
    • Migliora il metodo ChunkSource.getNextChunk(long, long, List, ChunkHolder) nell'interfaccia ChunkSource in ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Aggiunta di campi aggiuntivi alla registrazione dei dati dei client multimediali comuni (CMCD): svuotamento del buffer (bs), scadenza (dl), velocità di riproduzione (pr) e avvio (su) (#8699).
    • Aggiungi la profondità di bit di luma e croma a ColorInfo (#491).
    • Aggiungi altri campi alla registrazione dei dati dei client multimediali comuni (CMCD): richiesta di oggetto successivo (nor) e richiesta di intervallo successivo (nrr) (#8699).
    • Aggiunta della funzionalità per trasmettere i dati CMCD (Common Media Client Data) utilizzando parametri di query (#553).
    • Correggi ConcurrentModificationException in ExperimentalBandwidthMeter (#612).
    • Aggiungi il parametro MediaPeriodId a CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Supporto di ClippingMediaSource (e di altre origini con offset di tempo del periodo/della finestra) in ConcatenatingMediaSource2 (#11226).
    • Modifica BaseRenderer.onStreamChanged() in modo che riceva anche un argomento MediaPeriodId.
  • Trasformatore:
    • Analizza i dati di rotazione EXIF per gli input di immagini.
    • Rimuovi il tipo di annotazione TransformationRequest.HdrMode e le sue costanti associate. Utilizza invece Composition.HdrMode e le relative costanti associate.
    • Semplifica OverlaySettings per risolvere i problemi di rotazione.
    • I parametri frameRate e durationUs di SampleConsumer.queueInputBitmap sono stati modificati in TimestampIterator.
  • Selezione tracce:
    • Aggiungi DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness per consentire o non consentire esplicitamente l'adattamento non continuo. Il valore predefinito rimane true.
  • Estrattori:
    • MPEG-TS: assicurati che l'ultimo fotogramma venga visualizzato passando l'ultima unità di accesso di uno stream alla coda di sample (#7909).
    • Correggi l'errore ortografico durante la determinazione di rotationDegrees. projectionPosePitch cambiato in projectionPoseRoll (#461).
    • Rimuovi l'assunto che le istanze Extractor possano essere direttamente esaminate 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.
    • Aggiungere il supporto per QuickTime classico a Mp4Extractor.
  • Audio:
    • Aggiunta del supporto per PCM big endian a 24/32 bit in MP4 e Matroska e analisi della codifica PCM per lpcm in MP4.
    • È stato aggiunto il supporto per l'estrazione dell'audio Vorbis in MP4.
    • Aggiungi AudioSink.getFormatOffloadSupport(Format) che recupera il livello di supporti di offload che il sink può fornire per il formato tramite un DefaultAudioOffloadSupportProvider. Restituisce il nuovo AudioOffloadSupport contenente isFormatSupported, isGaplessSupported e isSpeedChangeSupported.
    • Aggiungi AudioSink.setOffloadMode() tramite il quale viene configurata la configurazione di offload sul sink audio. Il valore predefinito è AudioSink.OFFLOAD_MODE_DISABLED.
    • L'offload può essere attivato tramite setAudioOffloadPreference in TrackSelectionParameters. Se la preferenza impostata è attiva, il dispositivo supporta lo scaricamento per il formato e la selezione della traccia è una singola traccia audio, lo scaricamento audio verrà attivato.
    • Se audioOffloadModePreference è impostato su AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, il DefaultTrackSelector selezionerà una traccia audio solo se il formato della traccia è supportato nell'offload. Se nessuna traccia audio è supportata durante lo scaricamento, nessuna traccia verrà selezionata.
    • Disattivazione del supporto senza interruzioni per il trasferimento quando il livello API è precedente al 33 a causa di un problema con la posizione di riproduzione dopo la transizione tra tracce.
    • 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.
    • Aggiunta del supporto per i metadati Opus senza interruzioni durante la riproduzione in modalità di offload.
    • Consenti il recupero del renderer disattivando lo scambio se non è riuscito al primo salvataggio (#627).
    • Attiva la pianificazione dell'offload per impostazione predefinita per la riproduzione offloaded solo audio.
    • Elimina ExoPlayer.experimentalSetOffloadSchedulingEnabled e AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged è stato rinominato in onSleepingForOffloadChanged e onExperimentalOffloadedPlayback in onOffloadedPlayback.
    • Sposta le interfacce e le definizioni TrackSelectionParameters relative alla modalità di offload audio in una classe AudioOffloadPreferences interna.
    • Aggiungi i callout onAudioTrackInitialized e onAudioTrackReleased a AnalyticsListener, AudioRendererEventListener e AudioSink.Listener.
    • È stato corretto il problema di sottoflusso del buffer audio DTS Express (#650).
    • È stato corretto un bug per cui il controllo delle funzionalità per E-AC3-JOC genera un messaggio 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 iniziava con timestamp negativi (#291).
  • Testo:
    • Rimuovi ExoplayerCuesDecoder. Le tracce di testo con sampleMimeType = application/x-media3-cues vengono ora 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 restituire comunque null.
  • Effetto:
    • Aggiungi VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) la coda di input bitmap in base al timestamp.
    • Modifica VideoFrameProcessor.registerInputStream() in modo che non sia bloccante. Le app devono implementare VideoFrameProcessor.Listener#onInputStreamRegistered().
    • I parametri frameRate e durationUs di VideoFrameProcessor.queueInputBitmap sono stati modificati in TimestampIterator.
  • Estensione IMA:
    • È stato corretto un bug per cui un live streaming DASH per più periodi che non è il primo elemento in una playlist può generare un'eccezione (#571).
    • Rilascia StreamManager prima di chiamare AdsLoader.destroy()
    • Esegui l'upgrade della versione dell'SDK IMA alla versione 3.31.0.
  • Sessione:
    • Imposta il comportamento del servizio in primo piano per le notifiche su FOREGROUND_SERVICE_IMMEDIATE in DefaultMediaNotificationProvider (#167).
    • Utilizza soloandroid.media.session.MediaSession.setMediaButtonBroadcastReceiver() versioni successive all'API 31 per evitare problemi con l'API deprecata sui dispositivi Samsung (#167).
    • Utilizza il controller delle notifiche multimediali come proxy per impostare i comandi disponibili e il layout personalizzato utilizzato per compilare la notifica e la sessione della piattaforma.
    • Converti gli eventi dei pulsanti multimediali ricevuti da MediaSessionService.onStartCommand() in Media3 anziché inoltrarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controllore chiamante è sempre il controllore delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli dell'API supportati.
    • È stato corretto un bug per cui MediaController.getCurrentPosition() non avanza quando è connesso a un MediaSessionCompat precedente.
    • Aggiungi MediaLibrarySession.getSubscribedControllers(mediaId) per comodità.
    • Sostituisci MediaLibrarySession.Callback.onSubscribe() per affermare la disponibilità dell'ID principale a cui si iscrive 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 di demo della sessione per il sistema operativo Automotive e abilita la demo della sessione per Android Auto.
    • Non impostare la coda della sessione del framework quando COMMAND_GET_TIMELINE non è disponibile per il controllore delle notifiche media. 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 eseguire l'override della gestione degli eventi dei pulsanti multimediali predefiniti.
  • Interfaccia utente:
    • 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 collegare un'uscita audio adatta (ad es. cuffie Bluetooth). L'ascoltatore riprende automaticamente la riproduzione se un dispositivo idoneo è connesso entro un timeout configurabile (il valore predefinito è 5 minuti).
  • Download:
    • Dichiara il tipo di servizio in primo piano "dataSync" per DownloadService per la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungere dataSync come foregroundServiceType nel manifest e l'autorizzazione FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • Estensione HLS:
    • Aggiorna la playlist live HLS con un intervallo calcolato dall'ora di inizio dell'ultimo caricamento anziché dall'ora di completamento dell'ultimo caricamento (#663).
  • Estensione DASH:
    • Consenti più dello stesso identificatore DASH nell'URL del modello di segmento.
    • Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Questa funzionalità offre un supporto migliore per l'unione di sottotitoli sovrapposti, inclusa la risoluzione del tremolio durante il passaggio da un segmento di sottotitoli all'altro. Puoi attivare questa opzione utilizzando DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • Estensione RTSP:
    • È stata corretta una condizione di gara che poteva portare a IndexOutOfBoundsException quando si ricorreva a TCP o alla sospensione della riproduzione in alcune situazioni.
    • Controlla lo stato nella configurazione RTSP quando viene restituito lo stato di caricamento di RtspMediaPeriod (#577).
    • Ignora i metodi di richiesta Rtsp personalizzati nell'intestazione pubblica della risposta Options (#613).
    • Utilizza il valore del timeout della risposta di configurazione RTSP nell'intervallo di tempo di invio delle richieste di opzioni RTSP keep-alive (#662).
  • Estensioni decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
    • Rilascia il modulo del decodificatore MIDI, che fornisce il 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. È preferibile rispetto a C.BUFFER_FLAG_DECODE_ONLY, che verrà ritirato.
    • Aggiungi Decoder.setOutputStartTimeUs e SimpleDecoder.isAtLeastOutputStartTimeUs per consentire ai decodificatori di eliminare i campioni di sola decodifica prima dell'ora di inizio. È preferibile utilizzare questo valore rispetto a Buffer.isDecodeOnly, che verrà ritirato.
    • Correzione del bug di pubblicazione dell'artefatto del decodificatore MIDI nel repository Maven. L'elemento viene rinominato media3-exoplayer-midi (#734).
  • Estensione Leanback:
    • È stato corretto un bug per cui la disattivazione di una superficie può causare un ArithmeticException nel codice Leanback (#617).
  • Utilità di test:
    • Rendi TestExoPlayerBuilder e FakeClock compatibili con i test di Espresso UI e i test di Compose UI. Questo corregge un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con la visualizzazione Espresso o Compose.
  • Rimuovi i simboli non più supportati:
    • 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, utilizza invece 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 l'eliminazione della playlist.
    • Aggiungere altri campi alla registrazione dei dati dei client multimediali comuni (CMCD): formato di streaming (sf), tipo di stream (st), versione (v), bitrate massime (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).
  • Offload audio:
    • Anteponi le pagine di intestazione ID Ogg e di intestazione dei commenti al flusso di dati per la riproduzione di Opus offloadata in conformità con la specifica RFC 7845.
  • Video:
    • H.265/HEVC: correzione dell'analisi delle informazioni relative alle immagini di riferimento a breve e lungo termine SPS.
  • Testo:
    • CEA-608: modifica la logica di troncamento dei cue in modo da considerare solo il testo visibile. In precedenza, l'a capo e l'offset di tabulazione erano inclusi quando si limitava la lunghezza del prompt a 32 caratteri (tecnicamente corretto in base alle specifiche) (#11019).
  • Estensione IMA:
    • Esegui l'upgrade della versione dell'SDK IMA alla versione 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 diversi controller Media3 possono farlo in MediaSession.Callback.onConnect utilizzando un AcceptedResultBuilder per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione.
    • Risolto il problema per cui MediaLibraryServiceLegacyStub inviava un errore a un Result che non lo supportava, generando un UnsupportedOperationException (#78).
    • Correggi il modo in cui PlayerWrapper crea un VolumeProviderCompat determinando volumeControlType sia tramite i comandi precedenti (COMMAND_ADJUST_DEVICE_VOLUME e COMMAND_SET_DEVICE_VOLUME) sia tramite 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 è tutto pronto modifica il motivo della soppressione per troppo tempo. (#15).
    • Aggiungi comandi al player:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Aggiungi metodi sovraccaricati al Player che consentono agli utenti di specificare i flag di 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 da remoto.
    • Aggiungi Player.replaceMediaItem(s) come scorciatoia per aggiungere e rimuovere elementi nella stessa posizione (#8046).
  • ExoPlayer:
    • Consenti a ExoPlayer di avere il controllo dei metodi di regolazione del volume del dispositivo solo se la funzionalità è stata attivata esplicitamente. Utilizza ExoPlayer.Builder.setDeviceVolumeControlEnabled per avere accesso 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 canali disponibili da un MediaSource.
    • Aggiunta del supporto per l'inclusione di dati client multimediali comuni (CMCD) nelle richieste in uscita dei formati di streaming adattivo DASH, HLS e SmoothStreaming. I seguenti campi, br, bl, cid, rtp e sid, sono stati incorporati (#8699). Struttura e metodi dell'API:
      • La registrazione CMCD è disattivata per impostazione predefinita. Utilizza MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) per attivarla.
      • Per impostazione predefinita, tutte le chiavi sono attivate. Per eseguire l'override, usa CmcdConfiguration.RequestConfig.isKeyAllowed(String key) per filtrare le chiavi registrate.
      • Sostituisci CmcdConfiguration.RequestConfig.getCustomData() per attivare il logging delle chiavi personalizzato.
    • 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 del video.
    • Aggiorna SampleQueue per archiviare sourceId come long anziché come int. In questo modo vengono modificate le firme dei metodi pubblici SampleQueue.sourceId e SampleQueue.peekSourceId.
    • Aggiungi parametri ai metodi LoadControl shouldStartPlayback e onTracksSelected che consentano di associare questi metodi al MediaPeriod pertinente.
    • Modifica la firma di ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) aggiungendo un parametro della cronologia che contenga i periodi con gli UID utilizzati come chiavi nella mappa. Questo è necessario per evitare problemi di concorrenza con i live streaming multiperiodo.
    • Ritirare 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 ritirate, l'offset non viene più aggiunto a startTimeUs e endTimeUs degli oggetti MediaLoadData inviati dal gestore.
    • Rinomina ExoTrackSelection.blacklist in excludeTrack e isBlacklisted in isTrackExcluded.
    • Correggere il comportamento incoerente tra ExoPlayer.setMediaItem(s) e addMediaItem(s) quando vengono chiamati in una playlist vuota.
  • Trasformatore:
    • Rimuovi Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Utilizza invece ExoPlayerAssetLoader.Factory(MediaSource.Factory) e Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • 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 un fotogramma di input era in attesa di elaborazione.
    • Esegui query sui codec tramite MediaCodecList anziché utilizzare le utilità findDecoder/EncoderForFormat per espandere il supporto.
    • Rimuovi la configurazione dei frame B in DefaultEncoderFactory perché non funziona su alcuni dispositivi.
  • Selezione tracce:
    • Aggiungi DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange che è disattivata per impostazione predefinita. Se è attivata, DefaultTrackSelector attiverà una nuova selezione di tracce quando le funzionalità del visualizzatore sono cambiate.
  • Estrattori:
    • Ogg: correzione di un bug relativo alla ricerca in file di lunga durata (#391).
    • FMP4: correzione del problema per cui TimestampAdjuster inizializza un offset del timestamp sbagliato con il tempo del campione dei metadati dall'atomo emsg (#356).
  • Audio:
    • È stato corretto un bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling era attivo e AudioProcessors erano attivi, ad esempio per il taglio senza interruzioni (#10847).
    • Incapsula i frame Opus nei pacchetti Ogg nelle riproduzioni dirette (offload).
    • Estrapolare 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 player.
    • Ascolta le modifiche alle funzionalità audio in DefaultAudioSink. Aggiungi un parametro obbligatorio context nel costruttore di DefaultAudioSink, con il quale DefaultAudioSink si registrerà come ascoltatore di AudioCapabilitiesReceiver e aggiornerà la sua proprietà audioCapabilities quando viene informato di una modifica delle funzionalità.
    • Propaga le modifiche alle funzionalità audio tramite un nuovo eventoonAudioCapabilitiesChanged nell'interfaccia AudioSink.Listener e una nuova interfaccia RendererCapabilities.Listener che attiva gli eventionRendererCapabilitiesChanged.
    • Aggiungi ChannelMixingAudioProcessor per applicare la scalabilità/la miscelazione ai canali audio.
    • Aggiungi il nuovo valore intero DISCARD_REASON_AUDIO_BYPASS_POSSIBLE a DecoderDiscardReasons per ignorare il decodificatore audio quando la modalità di bypass è possibile dopo la modifica delle funzionalità audio.
    • Aggiunta del supporto per la riproduzione diretta di DTS Express e DTS:X (#335).
  • Video:
    • Fai in modo che MediaCodecVideoRenderer registri un VideoSize con larghezza e altezza pari a 0 quando il visualizzatore è disattivato. Player.Listener.onVideoSizeChanged viene chiamato di conseguenza quando Player.getVideoSize() cambia. Con questa modifica, le dimensioni del video di ExoPlayer con MediaCodecVideoRenderer hanno una larghezza e un'altezza pari a 0 quando Player.getCurrentTracks non supporta il video o le dimensioni della traccia video supportata non sono ancora determinate.
  • DRM:
    • Riduci la visibilità di diversi metodi solo per uso interno su DefaultDrmSession che non dovrebbero essere chiamati dall'esterno del package DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Aggiungi una nuova libreria di muxer che può essere utilizzata per creare un file contenitore MP4.
  • Estensione IMA:
    • Attivare i live streaming DASH multiperiodo per DAI. Tieni presente che l'implementazione attuale non supporta ancora la ricerca nei live streaming (#10912).
    • È stato corretto un bug per cui un nuovo gruppo di annunci viene inserito nei live streaming perché la posizione calcolata dei contenuti nelle schede temporali consecutive varia leggermente.
  • Sessione:
    • Aggiungi il metodo di assistenza MediaSession.getControllerForCurrentRequest per ottenere informazioni sul controller che sta attualmente chiamando 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 una cuffia 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).
    • Aggiunta dei pulsanti di comando "Avanti" e "Indietro" nella visualizzazione compatta delle notifiche multimediali 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).
    • Aggiunta dei pulsanti di comando "Avanti" e "Indietro" nella visualizzazione compatta delle notifiche multimediali per impostazione predefinita per Android 12 e versioni precedenti (#410).
  • Interfaccia utente:
    • 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 del tempo multimediale da MediaLoadData.startTimeMs e MediaLoadData.endTimeMs per gli stream DASH multiperiodo.
    • È stato corretto un bug per cui la preparazione di una sorgente media Dash live con più periodi produceva un 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 l'interruzione infinita della riproduzione. Per impostazione predefinita, il timeout è impostato su zero (#323).
  • Utilità di test:
    • Verifica che lo schema dell'URI non distingua tra maiuscole e minuscole in DataSourceContractTest.
  • Rimuovi i simboli non più supportati:
    • Rimuovi i costruttori DefaultAudioSink, usa 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, utilizza un costruttore non deprecato che accetta un DatabaseProvider per un rendimento migliore.
    • Rimuovi il costruttore DefaultBandwidthMeter, usa DefaultBandwidthMeter.Builder.
    • Rimuovi i costruttori DefaultDrmSessionManager, usa DefaultDrmSessionManager.Builder.
    • Rimuovi due costruttori HttpDataSource.InvalidResponseCodeException ritrattati, utilizza un costruttore non ritirato 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 deprecato, utilizza un costruttore non deprecato che includa l'opzione per fornire un parametro channelDescriptionResourceId.
    • Rimuovi le costanti String deprecate per i set di caratteri (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME e UTF16LE_NAME), utilizza invece i set di caratteri Kotlin del pacchetto kotlin.text, java.nio.charset.StandardCharsets o com.google.common.base.Charsets.
    • Rimuovi il costruttore WorkManagerScheduler deprecato, 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 istanze della classe Format. Utilizza invece Format.Builder per creare istanze di Format.
    • Rimuovi i metodi deprecati copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate e copyWithVideoSize, utilizza invece Format.buildUpon() e metodi setter.
    • Rimuovi ExoPlayer.retry() deprecato e utilizza prepare().
    • Rimuovi il costruttore DefaultTrackSelector con zero argomenti deprecato e utilizza DefaultTrackSelector(Context).
    • Rimuovi il costruttore OfflineLicenseHelper deprecato e utilizza OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Rimuovi il costruttore DownloadManager deprecato e utilizza invece il costruttore che accetta un Executor.
    • Rimuovi i costruttori Cue deprecati e utilizza Cue.Builder.
    • Rimuovi il costruttore OfflineLicenseHelper deprecato e utilizza OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Rimuovi quattro metodi AnalyticsListener deprecati:
      • onDecoderEnabled, utilizza onAudioEnabled e/o onVideoEnabled.
      • onDecoderInitialized, utilizza onAudioDecoderInitialized e/o onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, utilizza onAudioInputFormatChanged e/o onVideoInputFormatChanged.
      • onDecoderDisabled, utilizza onAudioDisabled e/o onVideoDisabled.
    • Rimuovi Player.Listener.onSeekProcessed e AnalyticsListener.onSeekProcessed, che sono stati ritirati, e usa onPositionDiscontinuity con DISCONTINUITY_REASON_SEEK.
    • Rimuovi ExoPlayer.setHandleWakeLock(boolean) e utilizza setWakeMode(int).
    • Rimuovi DefaultLoadControl.Builder.createDefaultLoadControl(), che è deprecato, e utilizza build().
    • Rimuovi MediaItem.PlaybackProperties deprecato e 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 rilasciato. La versione 1.0.2 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.7.

Questa release contiene le seguenti modifiche rispetto alla release 1.0.1:

  • Libreria di base:
    • Aggiungi Buffer.isLastSample() che indica se Buffer contiene il flag C.BUFFER_FLAG_LAST_SAMPLE.
    • È stato risolto 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 stream". (#11079).
  • Estrattori:
    • Correggere l'analisi del pacchetto 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 MediaController precedente che aggiorna le sue azioni.MediaSessionCompat
    • È stato corretto un bug che impediva a MediaLibraryService di restituire null per una chiamata dall'interfaccia utente di sistema a Callback.onGetLibraryRoot con params.isRecent == true nell'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 potrebbe causare un MediaController che genera un IllegalStateException.

Versione 1.0.1

18 aprile 2023

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

Questa release corrisponde alla release ExoPlayer 2.18.6.

  • Libreria di base:
    • Ripristina l'override del live streaming target quando cerchi la posizione predefinita (#11051).
    • È stato corretto un bug per cui gli stream di sample vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
  • Sessione:
    • È stato risolto un bug per cui più elementi della coda identici pubblicati da un MediaSessionCompat precedente generavano un'eccezione in MediaController (#290).
    • Aggiunta del inoltro mancante di MediaSession.broadcastCustomCommand al MediaControllerCompat.Callback.onSessionEvent precedente (#293).
    • È stato corretto un bug per cui la chiamata a MediaSession.setPlayer non aggiornava i comandi disponibili.
    • Risolto il problema per cui le istanze TrackSelectionOverride inviate da un MediaController vengono ignorate se fanno riferimento a un gruppo con Format.metadata (#296).
    • Risolvere 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 di MediaSession in un thread in background causano arresti anomali se utilizzate in MediaSessionService (#318).
    • È stato risolto il problema per cui un ricevitore di pulsanti multimediali veniva dichiarato dalla libreria senza che l'app lo avesse previsto (#314).
  • DASH:
    • Correzione della gestione delle sequenze temporali dei segmenti vuote (#11014).
  • RTSP:
    • Riprova con TCP se la configurazione RTSP con UDP non va a buon fine con l'errore RTSP 461 UnsupportedTransport (#11069).

Versione 1.0.0

22 marzo 2023

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

Questa release corrisponde alla release 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 rilasciato. La versione 1.0.0-rc02 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.4.

  • Libreria di base:
    • Correzione del rilevamento del tipo di rete nell'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 sottoclassi (#248).
  • Audio:
    • Correzione della riproduzione MP3 senza interruzioni non funzionante sui dispositivi Samsung (#8594).
    • È stato corretto un bug per cui le velocità di riproduzione impostate immediatamente dopo la disattivazione dell'audio potevano essere sostituite da una modifica della velocità precedente (#10882).
  • Video:
    • Mappa il formato HEVC HDR10 a HEVCProfileMain10HDR10 anziché HEVCProfileMain10.
    • È stata aggiunta una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e su Lenovo M10 FHD Plus che causa il contrassegno degli stream AVC a 60 fps come non supportati (#10898).
    • Risolvere i problemi di prestazioni relativi al rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza di frame molto superiore alla frequenza di aggiornamento dello schermo.
  • Trasmissione:
    • Correzione del STATE_IDLE transitorio durante la transizione tra elementi multimediali (#245).
  • RTSP:
    • Cattura l'IllegalArgumentException lanciata durante l'analisi di messaggi di risposta non validi di RTSP (#10971).
  • Sessione:
    • È stato corretto un bug per cui il pulsante di riproduzione/pausa della notifica non si aggiornava con lo stato del player (#192).
  • Estensione IMA:
    • È stato corretto un bug che impediva l'avvio degli stream DAI senza annunci perché non veniva ricevuto il primo (e, nel caso in cui non siano presenti annunci, l'unico) evento LOADED.

Versione 1.0.0-rc01

16 febbraio 2023

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

Questa release corrisponde alla release ExoPlayer 2.18.3.

  • Libreria di base:
    • 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 verrà preferito al decodificatore software che supporta completamente il formato (#10604).
    • Aggiungi ExoPlayer.Builder.setPlaybackLooper che imposta un thread di riproduzione preesistente per una nuova istanza ExoPlayer.
    • Consentire l'eliminazione degli aiuti del gestore dei download (#10776).
    • Aggiungi il parametro a BasePlayer.seekTo per indicare anche il comando utilizzato per la ricerca.
    • Utilizza il tema durante il caricamento di drawable su API 21 e versioni successive (#220).
    • Aggiunta di ConcatenatingMediaSource2 che consente di combinare più elementi multimediali in un'unica finestra (#247).
  • Estrattori:
    • Genera un ParserException anziché un NullPointerException se la tabella di esempio (stbl) non contiene una descrizione del campione (stsd) obbligatoria durante l'analisi degli atomi trak.
    • Saltare correttamente i sample quando si cerca direttamente un frame di sincronizzazione in fMP4 (#10941).
  • Audio:
    • Utilizza la velocità in bit del formato audio compresso per calcolare la dimensione minima del buffer per AudioTrack nelle riproduzioni dirette (passthrough).
  • Testo:
    • Correggi TextRenderer che passa un indice non valido (negativo) a Subtitle.getEventTime se un file di sottotitoli non contiene cue.
    • SubRip: è stato aggiunto il supporto per i file UTF-16 se iniziano con un indicatore di ordine dei byte.
  • Metadati:
    • Analizza più valori separati da valori null dai frame ID3, come consentito da ID3 v2.4.
    • Aggiungi MediaMetadata.mediaType per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati.
    • Aggiungi MediaMetadata.isBrowsable come sostituto di MediaMetadata.folderType. Il tipo di cartella verrà ritirato nella prossima release.
  • DASH:
    • Aggiunta di un'analisi completa per gli insiemi di adattamento delle immagini, inclusi i conteggi dei riquadri (#3752).
  • Interfaccia utente:
    • Correggi il valore deprecated PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) per assicurarti che le modifiche alla visibilità vengano trasmesse all'ascoltatore registrato (#229).
    • Correggere l'ordine dei controlli del player centrali in PlayerView quando si utilizza un layout da destra verso sinistra (RTL) (#227).
  • Sessione:
    • Aggiungi SimpleBasePlayer astratto per contribuire a implementare l'interfaccia Player per i player personalizzati.
    • Aggiungi un metodo di supporto per convertire il token della sessione della piattaforma in Media3 SessionToken (#171).
    • Utilizza onMediaMetadataChanged per attivare gli aggiornamenti della sessione media della piattaforma (#219).
    • Aggiungi la sessione multimediale come argomento di getMediaButtons() di DefaultMediaNotificationProvider e utilizza elenchi immutabili per chiarezza (#216).
    • Aggiungi un ascoltatore di callback onSetMediaItems per fornire i mezzi per modificare/impostare MediaItem elenco, indice iniziale e posizione per sessione prima di impostare sul player (#156).
    • Evita il rilevamento del doppio tocco per gli eventi dei pulsanti multimediali non Bluetooth (#233).
    • Rendere QueueTimeline più solido in caso di stato della sessione precedente sospetto (#241).
  • Metadati:
    • Analizza più valori separati da valori null dai frame ID3, come consentito da ID3 v2.4.
    • Aggiungi MediaMetadata.mediaType per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati.
    • Aggiungi MediaMetadata.isBrowsable come sostituto di MediaMetadata.folderType. Il tipo di cartella verrà ritirato nella prossima release.
  • Estensione di trasmissione:
    • Esegui l'upgrade della versione dell'SDK Cast alla versione 21.2.0.
  • Estensione IMA:
    • Rimuovi l'ascoltatore del player di ImaServerSideAdInsertionMediaSource sul thread dell'applicazione per evitare problemi di threading.
    • Aggiungi una proprietà focusSkipButtonWhenAvailable a ImaServerSideAdInsertionMediaSource.AdsLoader.Builder per richiedere il passaggio del focus al pulsante Salta sui dispositivi TV e impostala su true per impostazione predefinita.
    • Aggiungi un metodo focusSkipButton() al ImaServerSideAdInsertionMediaSource.AdsLoader per richiedere programmaticamente di mettere in primo piano il pulsante Salta.
    • Esegui l'upgrade della versione dell'SDK IMA alla versione 3.29.0.
  • App di prova:
    • Richiedi l'autorizzazione di notifica per le notifiche di download in fase di esecuzione (#10884).

Versione 1.0.0-beta03

22 novembre 2022

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

Questa release corrisponde alla release ExoPlayer 2.18.2.

  • Libreria di base:
    • Aggiungi ExoPlayer.isTunnelingEnabled per verificare se il tunneling è abilitato per i canali attualmente selezionati (#2518).
    • Aggiungi WrappingMediaSource per semplificare l'a capo di un singolo MediaSource (#7279).
    • Elimina il buffer precedente prima che la riproduzione si blocchi a causa di una memoria disponibile insufficiente.
    • Chiudi il blocco di monitoraggio "doSomeWork" quando l'offload è attivo.
    • Risolvere il problema di monitoraggio delle sessioni 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.
    • È stato corretto un bug per cui la rimozione degli ascoltatori durante il rilascio del player poteva causare un IllegalStateException (#10758).
  • Build:
    • Applica un valore minimo di compileSdkVersion per evitare errori di compilazione (#10684).
    • Evita di pubblicare il blocco quando è incluso in un'altra build di Gradle.
  • Selezione tracce:
    • Preferisci altri canali a Dolby Vision se il display non lo supporta. (#8944).
  • Download:
    • È stato corretto un potenziale loop infinito in ProgressiveDownloader causato dal download e dalla riproduzione simultanei con lo stesso PriorityTaskManager (#10570).
    • Far apparire immediatamente la notifica di download (#183).
    • Limita le rimozioni dei download in parallelo a 1 per evitare la creazione eccessiva di thread (#10458).
  • Video:
    • Prova un decodificatore alternativo per Dolby Vision se il display non lo supporta. (#9794).
  • Audio:
    • Utilizza SingleThreadExecutor per rilasciare istanze AudioTrack per evitare errori OutOfMemory quando rilasci più giocatori contemporaneamente (#10057).
    • Aggiunge AudioOffloadListener.onExperimentalOffloadedPlayback per lo stato di offload 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 alle maschere di canale 7.1 e 7.1.4 rispettivamente su tutte le versioni di Android (#10701).
  • Metadati:
    • Ora MetadataRenderer può essere configurato per eseguire il rendering dei metadati non appena diventano disponibili. Crea un'istanza con MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) per specificare se il renderer deve generare i metadati in anticipo o in sincronia con la posizione del player.
  • DRM:
    • Sfrutta una soluzione alternativa per un bug nell'implementazione di ClearKey di Android 13 che restituisce un URL licenza non vuoto, ma non valido.
    • Correzione dell'errore setMediaDrmSession failed: session not opened al passaggio tra schemi DRM in una playlist (ad es. da Widevine a ClearKey).
  • Testo:
    • CEA-608: assicurati che i comandi di trasferimento del servizio nel campo 2 vengano gestiti correttamente (#10666).
  • DASH:
    • Analizza EventStream.presentationTimeOffset dai manifest (#10460).
  • Interfaccia utente:
    • Utilizzare le sostituzioni correnti del player come preset 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 generatore può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzato dal fornitore. Aggiungi anche il metodoDefaultMediaNotificationProvider.setSmallIcon(int) per impostare la piccola icona delle notifiche. (#104).
    • Assicurati che i comandi inviati prima di MediaController.release() non vengano eliminati (#99).
    • SimpleBitmapLoader può caricare bitmap da URI file:// (#108).
    • Correzione dell'affermazione che impedisce a MediaController di cercare oltre un annuncio in un periodo (#122).
    • Al termine della riproduzione, MediaSessionService viene interrotto in primo piano e viene visualizzata una notifica per riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112).
    • Non avviare un servizio in primo piano con un'intent in attesa per la messa in pausa (#167).
    • Nascondere manualmente il "badge" associato alla notifica creata da DefaultNotificationProvider sulle API 26 e 27 (il badge viene nascosto automaticamente sulle API 28 e versioni successive) (#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 sull'annuncio per gestire i casi in cui l'SDK IMA si blocca durante il caricamento di un annuncio (#10510).
    • Impedire di saltare gli annunci mid-roll quando si cerca la fine dei contenuti (#10685).
    • Calcolare correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
  • Estensione FFmpeg:
    • Aggiungi i nuovi flag obbligatori 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 release più recenti di Android Studio (#9933).
  • Estensione di trasmissione:
    • Implementa getDeviceInfo() per poter identificare CastPlayer quando controlli la riproduzione con un MediaController (#142).
  • Trasformatore:
    • Aggiungi il timer del watchdog del muxer per rilevare quando la generazione di un sample di output è troppo lenta.
  • Rimuovi i simboli non più supportati:
    • 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 rilasciato. La versione 1.0.0-beta02 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.1.

  • Libreria di base:
    • Assicurati che la sostituzione di ShuffleOrder con ExoPlayer.setShuffleOrder determini 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 nella cache (#10361).
    • Consenti il logger personalizzato per tutta l'uscita dei log di ExoPlayer (#9752).
    • Correzione dell'implementazione di setDataSourceFactory in DefaultMediaSourceFactory, che in alcuni casi non era funzionale (#116).
  • Estrattori:
    • Correzione dell'analisi sintattica degli insiemi di immagini di riferimento a breve termine H265 (#10316).
    • Correzione dell'analisi delle frequenze in bit dalle caselle esds (#10381).
  • DASH:
    • Analizza l'URL della licenza ClearKey dai manifest (#10246).
  • Interfaccia utente:
    • Assicurati che TalkBack annunci l'opzione di velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
  • RTSP:
    • Aggiunta della gestione dei pacchetti frammentati VP8 (#110).
  • Estensione Leanback:
    • Ascolta le modifiche di playWhenReady in LeanbackAdapter (10420).
  • Trasmissione:
    • 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 rilasciato. La versione 1.0.0-beta01 contiene questi commit.

Corrisponde alla release di ExoPlayer 2.18.0.

  • Libreria di base:
    • Attiva il supporto della diagnostica della piattaforma Android tramite MediaMetricsManager. ExoPlayer inoltra alla piattaforma gli eventi di riproduzione e i dati sulle prestazioni, il che contribuisce a fornire informazioni sul debug e sulle prestazioni del sistema sul dispositivo. Questi dati possono essere raccolti anche da Google se la condivisione dei dati diagnostici e sull'utilizzo è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer con ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • È stato corretto un bug per cui i canali vengono reimpostati troppo spesso quando si utilizza MergingMediaSource, ad esempio quando si caricano sottotitoli laterali e si modificano i sottotitoli selezionati durante la riproduzione (#10248).
    • Interrompere il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Per queste riproduzioni si presume una rete 4G.
    • Non consentire il passaggio di null a MediaSource.Factory.setDrmSessionManagerProvider e MediaSource.Factory.setLoadErrorHandlingPolicy. Se necessario, è possibile passare esplicitamente istanze di DefaultDrmSessionManagerProvider e DefaultLoadErrorHandlingPolicy.
    • Aggiungi MediaItem.RequestMetadata per rappresentare i metadati necessari per riprodurre i contenuti multimediali quando il valore LocalConfiguration esatto non è noto. Rimuovi anche MediaMetadata.mediaUrl, poiché ora è incluso in RequestMetadata.
    • Aggiungi Player.Command.COMMAND_SET_MEDIA_ITEM per consentire ai giocatori di impostare un singolo elemento.
  • Selezione tracce:
    • Applica l'appiattimento al corso TrackSelectionOverrides in TrackSelectionParameters e promuovi TrackSelectionOverride a corso di primo livello.
    • Rinomina TracksInfo in Tracks e TracksInfo.TrackGroupInfo in Tracks.Group. Anche Player.getCurrentTracksInfo e Player.Listener.onTracksInfoChanged sono stati rinominati in Player.getCurrentTracks e Player.Listener.onTracksChanged. Ciò include il ritiro del nome del metodo Player.Listener.onTracksChanged, ma con tipi di parametro diversi.
    • Modifica DefaultTrackSelector.buildUponParameters e DefaultTrackSelector.Parameters.buildUpon in modo che restituiscano DefaultTrackSelector.Parameters.Builder anziché il valore deprecated DefaultTrackSelector.ParametersBuilder.
    • Aggiungi DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities che è attiva per impostazione predefinita. Se questa opzione è attivata, DefaultTrackSelector preferirà le tracce audio il cui numero di canali non supera le funzionalità di output del dispositivo. Sui dispositivi portatili, DefaultTrackSelector preferirà i formati audio stereo/mono rispetto a quelli multicanale, a meno che il formato multicanale non possa essere spazializzato (Android 12L e versioni successive) o non sia un formato audio Dolby surround. Inoltre, sui dispositivi che supportano la spazializzazione audio, DefaultTrackSelector monitora le modifiche apportate alle proprietà di Spatializer e attiva una nuova selezione di tracce in base a queste. I dispositivi con una television modalità UI sono esclusi da questi vincoli e verrà preferito il formato con il numero di canali più elevato. Per attivare questa funzionalità, l'istanza DefaultTrackSelector deve essere creata con un Context.
  • Video:
    • Rinomina DummySurface in PlaceholderSurface.
    • Aggiungi il supporto di AV1 al MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Utilizza il decodificatore audio LG AC3 che pubblicizza un tipo MIME non standard.
    • Modifica il tipo di ritorno di AudioAttributes.getAudioAttributesV21() da android.media.AudioAttributes a una nuova classe wrapper AudioAttributesV21 per evitare una verifica ART lenta su API < 21.
    • Esegui una query sulla piattaforma (API 29 e versioni successive) o assumi il numero di canali di codifica audio per il passthrough audio quando il numero di canali audio del formato non è impostato, il che si verifica con la preparazione senza chunk HLS (10204).
    • Configura AudioTrack con la maschera di canale AudioFormat.CHANNEL_OUT_7POINT1POINT4 se il decodificatore emette audio PCM a 12 canali (#10322.
  • DRM
    • Assicurati che la sessione DRM venga sempre aggiornata correttamente quando esegui 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 (ovvero OutlineColour imposta lo sfondo dell'indicatore) (#8435).
    • CEA-708: analizza i dati in più blocchi di servizi e ignora i blocchi non associati al numero di servizio attualmente selezionato.
    • Rimuovi RawCcExtractor, che veniva utilizzato solo per gestire un formato di sottotitoli interno a Google.
  • Estrattori:
    • Aggiunta del supporto per AVI (#2092).
    • Matroska: analizza DiscardPadding per le tracce Opus.
    • MP4: analizza le velocità in bit dalle caselle esds.
    • Ogg: consenti ID Opus e intestazioni dei commenti duplicati (#10038).
  • Interfaccia utente:
    • Correggere l'invio di eventi ai OnClickListener impostati su PlayerView nel caso in cui useController=false (#9605). Inoltre, viene corretto l'invio di eventi a OnLongClickListener per tutte le configurazioni delle visualizzazioni.
    • È stato corretto il trattamento errato di una sequenza di eventi tocco che esce dai limiti di PlayerView prima di ACTION_UP come un clic (#9861).
    • Risolto un PlayerView problema di accessibilità 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 del modulo UI dal modulo ExoPlayer. Si tratta di una modifica fondamentale.
    • Non mostrare tracce con testo forzato nel selettore di tracce PlayerView e mantieni selezionata una traccia con testo forzato adatta se è selezionata "Nessuna" (#9432).
  • DASH:
    • Analizza il numero di canali dagli elementi DTS AudioChannelConfiguration. In questo modo viene riattivato il passthrough audio per gli stream DTS (#10159).
    • Non consentire il passaggio di null a DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Se necessario, è possibile passare istanze di DefaultCompositeSequenceableLoaderFactory esplicitamente.
  • HLS:
    • Riprendi la preparazione in 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. Se necessario, è possibile passare esplicitamente istanze di DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory o un riferimento a DefaultHlsPlaylistTracker.FACTORY.
  • Riproduzione fluida:
    • Non consentire il passaggio di null a SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Se necessario, le istanze di DefaultCompositeSequenceableLoaderFactory possono essere passate esplicitamente.
  • RTSP:
    • Aggiungi il lettore RTP per H263 (#63).
    • Aggiungi il lettore RTP per MPEG4 (#35).
    • Aggiunta del lettore RTP per HEVC (#36).
    • Aggiungi il lettore RTP per AMR. Al momento sono supportati solo stream AMR monocanale non interlizzati. Il payload RTP AMR composto non è supportato. (#46)
    • Aggiungi il 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 li richiede (#10049).
    • Viene lanciata un'eccezione controllata durante l'analisi del timing RTSP (#10165).
    • Aggiunta del lettore RTP per VP9 (#47).
    • Aggiungi il lettore RTP per OPUS (#53).
  • Origini dati:
    • Rinomina DummyDataSource in PlaceholderDataSource.
    • Sfrutta una 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. Puoi ottenere la stessa funzionalità utilizzando MediaController.setMediaItem e MediaSession.Callback.onAddMediaItems.
    • Devia le chiamate MediaController legacy per riprodurre contenuti multimediali su MediaSession.Callback.onAddMediaItems anziché su onSetMediaUri.
    • Aggiungi MediaNotification.Provider e DefaultMediaNotificationProvider per personalizzare la notifica.
    • Aggiungi BitmapLoader e SimpleBitmapLoader per scaricare le immagini artwork.
    • Aggiungi MediaSession.setCustomLayout() per garantire la compatibilità con le versioni precedenti della sessione.
    • Aggiungi MediaSession.setSessionExtras() per garantire la parità di funzionalità con la sessione precedente.
    • Rinomina MediaSession.MediaSessionCallback in MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback in MediaLibrarySession.Callback e MediaSession.Builder.setSessionCallback in setCallback.
    • Risolto l'errore NPE in MediaControllerImplLegacy (#59).
    • Aggiorna le informazioni sulla posizione della sessione al cambio della cronologia(#51).
    • Correzione dell'errore NPE in MediaControllerImplBase dopo il rilascio del controller (#74).
  • Riproduzione dell'annuncio / annunci IMA:
    • Riduci 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 il fallimento della sincronizzazione di Gradle di Android Studio (#9933).
  • Rimuovi i simboli non più supportati:
    • 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 inutilizzati.
    • Rimuovi le costanti DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT e DEFAULT_TRACK_SELECTOR_PARAMETERS. Se possibile, utilizza getDefaultTrackSelectorParameters(Context) e, in caso contrario, DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • Rimuovi il 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 rilasciato. La versione 1.0.0-alpha03 contiene questi commit.

Corrisponde alla release ExoPlayer 2.17.1.

  • Audio:
    • Correzione dell'errore di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
  • Estrattori:
    • FMP4: è stato corretto il problema per cui i metadati dei sample emsg potevano essere visualizzati nell'ordine sbagliato per gli stream contenenti sia atomi emsg v0 che v1 (#9996).
  • Testo:
    • Correggere l'interazione di SingleSampleMediaSource.Factory.setTrackId e MediaItem.SubtitleConfiguration.Builder.setId per dare la priorità al SubtitleConfiguration campo e passare al valore Factory se non è impostato (#10016).
  • Riproduzione dell'annuncio:
    • Correggi gli errori di sottodimensionamento dell'audio tra i periodi di annunci negli stream SSAI HLS dal vivo.

Versione 1.0.0-alpha02

2 marzo 2022

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

Corrisponde alla release ExoPlayer 2.17.0.

  • Libreria di base:
    • Aggiungi il metodo protetto DefaultRenderersFactory.getCodecAdapterFactory() in modo che le sottoclassi di DefaultRenderersFactory che sostituiscono buildVideoRenderers() o buildAudioRenderers() possano accedere alla fabbrica di adattatori di codec e trasmetterla alle istanze di MediaCodecRenderer che creano.
    • Propaga i campi dell'intestazione ICY name e genre a MediaMetadata.station e MediaMetadata.genre rispettivamente in modo che raggiungano l'app tramite Player.Listener.onMediaMetadataChanged() (#9677).
    • Rimuovi le chiavi null da DefaultHttpDataSource#getResponseHeaders.
    • Sospendi e riprova quando la creazione di un'istanza MediaCodec non va a buon fine. In questo modo viene risolto un problema che si verifica su alcuni dispositivi quando si passa da un codec sicuro a un altro su una superficie (#8696).
    • Aggiungi MediaCodecAdapter.getMetrics() per consentire agli utenti di ottenere i dati delle metriche da MediaCodec. (#9766).
    • Correzione della risoluzione delle dipendenze Maven (#8353).
    • Disattivare la regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di una richiesta dell'utente che imposti la velocità (#9329).
    • Rinomina DecoderCounters#inputBufferCount in queuedInputBufferCount.
    • Rendi privato SimpleExoPlayer.renderers. È possibile accedere ai visualizzatori tramite ExoPlayer.getRenderer.
    • Sono stati aggiornati alcuni valori costanti AnalyticsListener.EventFlags in modo che corrispondano ai valori in Player.EventFlags.
    • Dividi AnalyticsCollector in un'interfaccia e un'implementazione predefinita per consentirne lo stripping da parte di R8 se un'app non ne ha bisogno.
  • Selezione tracce:
    • Supporto dei flag dei ruoli video preferiti nella selezione della traccia (#9402).
    • Aggiornamento della logica di selezione delle tracce video per tenere conto dei tipi MIME e dei flag di ruolo preferiti quando si selezionano più tracce video per l'adattamento (#9519).
    • Aggiornamento della logica di selezione delle tracce audio e video per scegliere solo i formati per le selezioni dinamiche che hanno lo stesso livello di supporto per decodificatori e hardware (#9565).
    • Aggiornamento della logica di selezione della traccia video per dare la preferenza ai codec più efficienti se diversi codec sono supportati dai decodificatori principali con accelerazione hardware (#4835).
    • Dare la preferenza alle preferenze relative ai contenuti audio (ad esempio la traccia audio "predefinita" o una traccia corrispondente alla lingua locale del sistema) rispetto ai vincoli di selezione delle tracce tecniche (ad esempio il tipo MIME preferito o il numero massimo di canali).
    • Risolto il problema di selezione dei canali per cui l'override di un gruppo di canali non disattivava gli altri gruppi di canali dello stesso tipo (#9675).
    • È stato risolto un problema di selezione della traccia per cui una combinazione di sostituzioni di tracce vuote e non vuote non viene applicata correttamente (#9649).
    • Vieta TrackGroup duplicati in un TrackGroupArray. I TrackGroup possono essere sempre distinti impostando un id nel costruttore TrackGroup. In questo modo viene corretto un arresto anomalo durante la ripresa della riproduzione dopo aver messo l'app in background con un'override del canale attivo (#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 bordo in tempo reale (#9784).
  • Video:
    • Correggi la logica di riserva del decodificatore per Dolby Vision in modo da utilizzare un decodificatore H264/H265 compatibile, se necessario.
  • Audio:
    • Correggere la logica di riserva del decodificatore per Dolby Atmos (E-AC3-JOC) per utilizzare un decodificatore 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 a creare AudioTrack se la dimensione del buffer richiesta era superiore a 1 MB. (#9712).
  • Estrattori:
    • WAV: aggiunta del supporto per gli stream RF64 (#9543).
    • Correzione dell'analisi non corretta 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 creata dalla configurazione (#9673).
    • Aggiunta del 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 DrmSessionManager viene utilizzato da un'app in un MediaSource personalizzato, playbackLooper deve essere passato a DrmSessionManager.setPlayer.
  • Riproduzione dell'annuncio / annunci IMA:
    • Aggiunta del supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
    • Aggiungi un metodo a AdPlaybackState per consentire il ripristino di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615).
    • Applicare una velocità di riproduzione di 1,0 durante la riproduzione dell'annuncio (#9018).
    • Risolto il problema per cui un gruppo di annunci che non è stato caricato causava un immediato ripristino della riproduzione (#9929).
  • Interfaccia utente:
    • È stato corretto il colore dei numeri nei pulsanti StyledPlayerView riavvolgi e StyledPlayerView avanti veloce quando si utilizzano determinati temi (#9765).
    • Tradurre correttamente le stringhe relative alla velocità di riproduzione (#9811).
  • DASH:
    • Aggiungi le proprietà essenziali e supplementari analizzate a Representation (#9579).
    • Supporta il ruolo di monitoraggio forced-subtitle (#9727).
    • Interrompi l'interpretazione del ruolo del canale main come C.SELECTION_FLAG_DEFAULT.
    • Correggere la logica di esclusione dell'URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
    • Supporto degli URL MPD.Location relativi (#9939).
  • HLS:
    • Compila correttamente Format.label per gli stream HLS solo audio (#9608).
    • Utilizza la preparazione senza chunk per impostazione predefinita per migliorare il tempo di avvio. Se le tue rielaborazioni contengono tracce con sottotitoli codificati muxed che non sono dichiarate nella playlist principale, devi aggiungerle alla playlist principale per renderle disponibili per la riproduzione o disattivare la preparazione senza chunk con HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • Supporto della ricerca accurata dei fotogrammi chiave in HLS (#2882).
  • RTSP:
    • Fornisci un'API client per eseguire l'override del valore SocketFactory utilizzato per qualsiasi connessione al server (#9606).
    • Preferisci il metodo di autenticazione DIGEST rispetto a BASIC se sono entrambi presenti (#9800).
    • Gestire la situazione in cui la temporizzazione della traccia RTSP non è disponibile (#9775).
    • Ignora i valori dell'intestazione RTP-Info non validi (#9619).
  • Trasformatore:
    • Aumenta la versione API minima richiesta a 21.
    • TransformationException ora viene utilizzato per descrivere gli errori che si verificano durante una trasformazione.
    • Aggiungi TransformationRequest per specificare le opzioni di trasformazione.
    • Consentire la registrazione di più ascoltatori.
    • È stato corretto il blocco del Transformer quando l'output del codec viene letto parzialmente.
    • Correggere un potenziale errore NPE in Transformer.getProgress quando viene rilasciato il muxer.
    • Aggiungi un'app di dimostrazione per applicare le trasformazioni.
  • Estensione MediaSession:
    • Per impostazione predefinita, MediaSessionConnector ora cancella la playlist all'arresto. Le app che vogliono conservare la playlist possono chiamare setClearMediaItemsOnStop(false) sul connettore.
  • Estensione di trasmissione:
    • È stato corretto un bug che impediva a CastPlayer di chiamare onIsPlayingChanged correttamente (#9792).
    • Supporto dei metadati audio, inclusa la copertina, con DefaultMediaItemConverter (#9663).
  • Estensione FFmpeg:
    • Fai in modo che build_ffmpeg.sh dipenda da bin utils di LLVM anziché da 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 IllegalArgumentException quando vengono creati i PendingIntent (#9528).
  • Rimuovi i simboli non più supportati:
    • Rimuovi Player.EventListener. Utilizza invece Player.Listener.
    • Rimuovi MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory e MediaSourceFactory#setDrmUserAgent. Utilizza invece MediaSourceFactory#setDrmSessionManagerProvider.
    • Rimuovi MediaSourceFactory#setStreamKeys. Utilizza invece MediaItem.Builder#setStreamKeys.
    • Rimuovi MediaSourceFactory#createMediaSource(Uri). Utilizza invece 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 sostituire il manifest o DashMediaSource#setFallbackTargetLiveOffsetMs per fornire un valore alternativo.
    • Rimuovi (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Non è più possibile disattivare l'applicazione forzata dei thread.
    • Rimuovi ActionFile e ActionFileUpgradeUtil. Utilizza ExoPlayer 2.16.1 o versioni precedenti per utilizzare ActionFileUpgradeUtil per unire i file di azioni precedenti in DefaultDownloadIndex.
    • Rimuovi ProgressiveMediaSource#setExtractorsFactory. Utilizza invece il costruttore ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • Rimuovi ProgressiveMediaSource.Factory#setTag e, e ProgressiveMediaSource.Factory#setCustomCacheKey. Utilizza MediaItem.Builder#setTag e MediaItem.Builder#setCustomCacheKey.
    • Rimuovi i costruttori DefaultRenderersFactory(Context, @ExtensionRendererMode int) e DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Utilizza invece i costruttori DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode e DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Rimuovi tutti i costruttori CronetDataSource pubblici. Utilizza invece CronetDataSource.Factory.
  • Modifica il seguente IntDefs in @Target(TYPE_USE). Ciò potrebbe interrompere la compilazione degli utilizzi in Kotlin, ma il problema può essere risolto 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 com.google.android.exoplayer2.extractor.flac pacchetto)
    • @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 rilasciato. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

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

  • ExoPlayer, un media player a livello di applicazione per Android facile da personalizzare ed estendere.
  • Funzionalità della sessione multimediale per esporre e controllare le riproduzioni. Questo nuovo modulo della 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 per l'utilizzo con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.

Per maggiori informazioni, consulta il progetto GitHub Media3.

In precedenza, ExoPlayer era ospitato in un progetto GitHub di ExoPlayer separato. In Media3 il nome del pacchetto è androidx.media3.exoplayer. Abbiamo intenzione di continuare a mantenere e rilasciare il progetto GitHub di ExoPlayer per un po' di tempo per dare alle app il tempo di eseguire la migrazione a Media3. Media3 ha sostituzioni per tutti i moduli ExoPlayer, ad eccezione delle estensioni media2 e mediasession precedenti, che vengono sostituite dal nuovo modulo media3-session. In questo modo, viene fornita un'integrazione diretta tra i player e le sessioni multimediali senza dover utilizzare una classe di adattatore/connettore.