Elemento multimediale 3

Librerie di supporto per casi d'uso multimediali.
Aggiornamento più recente Release stabile Candidato per la release Versione beta Release alpha
11 aprile 2024 1.3.1 - - -

Dichiarazione delle dipendenze

Per aggiungere una dipendenza su 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 artefatti necessari nel file build.gradle per l'app o il modulo:

Trendy

dependencies {
    def media3_version = "1.3.1"

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

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin

dependencies {
    val media3_version = "1.3.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")
}

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze build.

Feedback

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

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:
    • Risolvi il problema per cui PreloadMediaPeriod non riesce a conservare gli stream quando vengono precaricati di nuovo.
    • Applica il valore TrackSelectionResult corrispondente corretto al periodo di riproduzione durante la selezione della traccia.
    • Avvia i renderer attivati in anticipo solo dopo aver avanzato il periodo di riproduzione durante il passaggio da un elemento multimediale a un altro (#1017).
    • Aggiungi il tipo restituito mancante alla regola -keepclasseswithmembers ProGuard per DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Transformer:
    • Aggiungi una soluzione alternativa per l'eccezione generata perché MediaMuxer non supporta i timestamp della presentazione negativi precedenti all'API 30.
  • Selezione della traccia:
    • DefaultTrackSelector: scegli tracce video con una frequenza fotogrammi "ragionevole" (>=10 f/s) rispetto a quelle con una frequenza fotogrammi più bassa o non impostata. In questo modo, il player seleziona la traccia video "reale" in MP4 estratta da foto in movimento che possono contenere due tracce HEVC e una con una risoluzione maggiore ma un numero molto ridotto di fotogrammi (#1051).
  • Estrattori:
    • È stato risolto il problema per cui la spaziatura interna non veniva saltata durante la lettura di blocchi di dimensioni strane dai file WAV (#1117).
    • MP3: compila Format.averageBitrate dai frame di metadati come XING e VBRI.
    • MPEG-TS: ripristina una modifica volta a garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di esempio (#7909). Ciò è dovuto alla modifica che causa nuovi problemi con i flussi HLS solo con frame I (#1150) e i flussi HLS H.262 (#1126).
  • Audio:
    • Consenti il ripristino del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità di trasferimento.
  • Video:
    • Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che fa sì che gli stream H265 a 60 f/s siano contrassegnati come non supportati
    • Aggiungi una soluzione alternativa che garantisca che il primo frame venga sempre visualizzato durante il tunneling anche se il dispositivo non lo fa automaticamente come richiesto dall'API (#1169). (#966).
    • Risolvi il problema per cui la gestione delle informazioni sul colore HDR causa il comportamento errato del codec e impedisce le opzioni di cambio di formato adattivo per le tracce video SDR (#1158).
  • Testo:
    • WebVTT: impedisce a segnali direttamente consecutivi di creare istanze CuesWithTiming aggiuntive fittizie da WebvttParser.parse (#1177).
  • DRM:
    • Risolvi un NoSuchMethodError che può essere generato dal framework MediaDrm invece di ResourceBusyException o NotProvisionedException su alcuni dispositivi Android 14 (#1145).
  • Effetto:
    • Mappatura dei toni da PQ a SDR migliorata grazie alla conversione degli spazi colore.
  • Sessione:
    • Risolvi il problema per cui la posizione corrente saltava indietro quando il controller sostituisce l'elemento corrente (#951).
    • Risolvi il problema per cui MediaMetadata con extras non nullo non viene trasmesso tra controller multimediali e sessioni (#1176).
  • Interfaccia utente:
    • Utilizza di riserva per includere il nome della lingua della traccia audio se Locale non può identificare un nome visualizzato (#988).
  • Estensione DASH:
    • Completare tutti gli elementi Label dal manifest in Format.labels (#1054).
  • Estensione RTSP:
    • Salta i valori vuoti delle informazioni sulle sessioni (i-tag) nell'analisi SDP (#1087).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
    • Disabilita l'estensione MIDI come dipendenza locale per impostazione predefinita, perché richiede la configurazione di un altro Repository Maven. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riabilitarlo.

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 elaborati android.resource://package/[type/]name, dove package è diverso dal pacchetto dell'applicazione corrente. Questa procedura è sempre stata documentata, ma finora non è stata implementata correttamente.
    • Normalizza i tipi MIME impostati dal codice dell'app o letti dai contenuti multimediali in modo che utilizzino solo lettere minuscole.
    • Definisci gli annunci con un MediaItem completo anziché un singolo Uri in AdPlaybackState.
    • Aumenta minSdk a 19 (Android Lollipop). È allineato a tutte le altre librerie AndroidX ed è necessario per eseguire l'upgrade alle versioni più recenti delle nostre dipendenze AndroidX.
    • Compila artworkUri e artworkData in MediaMetadata.Builder.populate(MediaMetadata) quando almeno uno di loro non è null (#964).
  • ExoPlayer:
    • Aggiungi PreloadMediaSource e PreloadMediaPeriod per consentire alle app di precaricare un'origine multimediale di contenuti in una posizione iniziale specifica prima della riproduzione. PreloadMediaSource si occupa di preparare l'origine dei contenuti multimediali a ricevere Timeline, preparare e memorizzare nella cache il periodo nella posizione iniziale specificata, selezionare le tracce e caricare i dati multimediali per il periodo. Le app controllano l'avanzamento del precaricamento implementando PreloadMediaSource.PreloadControl e impostano l'origine precaricata sul player per la riproduzione.
    • Aggiungi ExoPlayer.setImageOutput che consente alle app di impostare ImageRenderer.ImageOutput.
    • DefaultRenderersFactory ora fornisce un ImageRenderer al player per impostazione predefinita, con ImageOutput e ImageDecoder.Factory.DEFAULT null.
    • Emetti un evento Player.Listener.onPositionDiscontinuity quando il silenzio viene saltato (#765).
    • È stato aggiunto il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi abilitare questa funzionalità utilizzando MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Supporta le fonti di contenuti multimediali adattivi con PreloadMediaSource.
    • Implementa HttpEngineDataSource, un HttpDataSource utilizzando l'API HttpEngine.
    • Impedisci la sottoclasse CompositeSequenceableLoader. Questo componente è stato precedentemente reso estendibile, ma non è mai stato sottoclasse all'interno della libreria. Le personalizzazioni possono essere effettuate tramite il wrapping di un'istanza mediante il pattern di decorazione e l'implementazione di un CompositeSequenceableLoaderFactory personalizzato.
    • Risolvi il problema per cui la ripetizione della stessa ora causa la cancellazione dei metadati di questo elemento (#1007).
    • Rinomina i metodi experimentalSetSubtitleParserFactory su BundledChunkExtractor.Factory e DefaultHlsExtractorFactory in setSubtitleParserFactory e non consentire il trasferimento di null. Utilizza i nuovi metodi experimentalParseSubtitlesDuringExtraction(boolean) per controllare il comportamento di analisi.
    • Aggiungi il supporto per la personalizzazione del SubtitleParser.Factory utilizzato durante l'estrazione. Puoi ottenere questo risultato con MediaSource.Factory.setSubtitleParserFactory().
    • Aggiungi il prefisso di origine a tutti i campi Format.id generati da MergingMediaSource. Ciò consente di identificare la fonte che ha generato un Format (#883).
    • Correggi l'espressione regolare utilizzata per convalidare i nomi delle chiavi Common Media Client Data (CMCD) personalizzate modificandola in modo che controlli solo il trattino (#1028).
    • Interrompi la doppia codifica dei parametri di query CMCD (#1075).
  • Transformer:
    • Aggiungi il supporto per la suddivisione dei video in slow motion H.265/HEVC SEF.
    • Aumenta la velocità di transmuxing, in particolare per le modifiche di tipo "rimuovi video".
    • Aggiungi l'API per assicurarti che il file di output venga avviato su un frame video. Ciò può rendere l'output delle operazioni di taglio più compatibile con le implementazioni dei player che non mostrano il primo frame video fino al timestamp di presentazione (#829).
    • Aggiunta del supporto per l'ottimizzazione delle operazioni di ritaglio dei file MP4 di un singolo 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 il frame nero sui player basati su iOS (#829).
  • Selezione della traccia:
    • Aggiungi DefaultTrackSelector.selectImageTrack per attivare la selezione del canale immagine.
    • Aggiungi TrackSelectionParameters.isPrioritizeImageOverVideoEnabled per determinare se selezionare una traccia immagine nel caso in cui siano disponibili sia una traccia immagine sia una traccia video. Il valore predefinito è false, il che significa che la selezione di una traccia video ha la priorità.
  • Estrattori:
    • Aggiungi un'ulteriore analisi di AV1C all'estrattore MP4 per recuperare i valori ColorInfo.colorSpace, ColorInfo.colorTransfer e ColorInfo.colorRange (#692).
    • MP3: usa la ricerca a 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 ciò comporta una ricerca meno precisa rispetto a quando la ignoriamo e presupponiamo che il file sia CBR.
    • MPEG2-TS: Aggiungere il supporto DTS, DTS-LBR e DTS:X Profile2 (#275).
    • Estrai tipi audio dai descrittori TS e mappali ai flag di ruolo, consentendo agli utenti di selezionare tracce audio in modo più informato (#973).
  • Audio:
    • Migliora l'algoritmo che ignora il silenzio con una rampa del volume fluida; un silenzio minimo mantenuto e durate dei silenziose più naturali (#7423).
    • Segnala il silenzio saltato in modo più deterministico (#1035).
  • Video:
    • Modifica il costruttore MediaCodecVideoRenderer che richiede un argomento VideoFrameProcessor.Factory e sostituiscilo con un costruttore che richiede un argomento VideoSinkProvider. Le app che vogliono inserire un VideoFrameProcessor.Factory personalizzato possono creare un'istanza di CompositingVideoSinkProvider che utilizza l'VideoFrameProcessor.Factory personalizzato e trasmettere il provider del sink video a MediaCodecVideoRenderer.
  • Testo:
    • Correggi l'errore di serializzazione dei segnali bitmap per risolvere l'errore Tried to marshall a Parcel that contained Binder objects quando utilizzi DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708: ignora il valore rowLock. La specifica CEA-708-E S-2023 afferma che rowLock e columnLock devono essere entrambi considerati vere, indipendentemente dai valori presenti nel flusso (il supporto columnLock non è implementato, quindi si presume che sia sempre false).
  • Immagine:
    • Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature a ImageOutput poco prima degli orari di presentazione.
  • DRM:
  • Estensione IMA:
    • Risolvi il problema per cui gli annunci DASH e HLS senza l'estensione del file appropriata non possono essere riprodotti.
  • Sessione:
    • Disattiva il rilevamento del doppio clic per le app TV (#962).
    • Risolvi il problema per cui MediaItem.RequestMetadata con solo extra non null non viene trasmesso tra controller multimediali e sessioni.
    • Aggiungi il costruttore a MediaLibrarySession.Builder che richiede solo Context anziché MediaLibraryService.
  • Estensione HLS:
    • Riduci HlsMediaPeriod alla visibilità privata dei pacchetti. Questo tipo non deve dipendere direttamente dall'esterno del pacchetto HLS.
    • Risolvi cerca l'inizio di un segmento in modo più efficiente (#1031).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
    • Decodificatore MIDI: ignora i messaggi evento SysEx (#710).
  • Utilità di test:
    • Non mettere in pausa la riproduzione in TestPlayerRunHelper.playUntilPosition. Il test mantiene la riproduzione in riproduzione, ma sospende l'avanzamento finché il test non è in grado di aggiungere asserzioni e ulteriori azioni.
  • App demo:
    • Aggiungi un modulo dimostrativo breve per dimostrare l'utilizzo di PreloadMediaSource con il caso d'uso dei contenuti nel formato breve.

Versione 1.3.0-rc01

22 febbraio 2024

Utilizza la versione stabile 1.3.0.

Versione 1.3.0-beta01

7 febbraio 2024

Utilizza la versione stabile 1.3.0.

Versione 1.3.0-alpha01

15 gennaio 2024

Utilizza la versione stabile 1.3.0.

Versione 1.2.0

Versione 1.2.1

9 gennaio 2024

  • ExoPlayer:
    • Risolvi il problema per cui le ricerche manuali al di fuori dell'intervallo LiveConfiguration.min/maxOffset continuano a riportare l'offset a min/maxOffset.
    • Risolvi il problema a causa del quale i layout dei canali OPUS e VORBIS sono errati per 3, 5, 6, 7 e 8 canali (#8396).
    • Risolvi il problema per cui le selezioni delle tracce dopo aver cercato di azzerare il video in un live streaming consentono erroneamente di avviare lo stream nella posizione predefinita (#9347).
    • Risolvi il problema per cui le nuove istanze di CmcdData.Factory ricevevano valori negativi per bufferedDurationUs da origini di blocchi, con il risultato di IllegalArgumentException (#888).
  • Transformer:
    • Risolvi il problema di output dell'encoder al momento della configurazione a causa dell'impostazione di una frequenza operativa elevata.
  • Estrattori:
    • Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come ROLE_FLAG_ALTERNATE per evitare che vengano selezionate automaticamente per la riproduzione a causa della risoluzione più elevata.
    • È stato corretto il rilevamento errato dei fotogrammi chiave per gli stream TS H264 (#864).
    • Correggi la stima della durata degli stream TS superiori a 47.721 secondi (#855).
  • Audio:
    • Correggi la gestione di EOS per SilenceSkippingAudioProcessor quando viene effettuata la chiamata più volte (#712).
  • Video:
    • Aggiungi una soluzione alternativa a un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus per cui gli stream AVC a 60 FPS sono contrassegnati come non supportati (#693).
  • Metadati:
    • Correggi il bug per cui il campo 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 relative ai tag anziché non riuscire completamente a farlo.
  • DRM:
    • Estendi la soluzione alternativa per l'URL della licenza ClearKey https://default.url fittizio all'API 33 e versioni successive (in precedenza la soluzione alternativa applicata solo all'API 33 esattamente) (#837).
    • Correggi l'errore ERROR_DRM_SESSION_NOT_OPENED quando passi dai contenuti criptati a quelli cancellati senza una piattaforma collegata al player. L'errore è dovuto all'uso non corretto di un decodificatore sicuro per riprodurre i contenuti chiari.
  • Sessione:
    • Inserisci le chiavi e i valori personalizzati in MediaMetadataCompat in MediaMetadata.extras e MediaMetadata.extras in MediaMetadataCompat (#756, #802).
    • Correggi la trasmissione di notifyChildrenChanged per i controller legacy (#644).
    • Correggi un bug per cui l'impostazione di un tempo negativo per un timer setWhen disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903).
    • Correggi IllegalStateException quando il controller delle notifiche dei contenuti multimediali non ha completato la connessione quando è richiesto il primo aggiornamento della notifica (#917).
  • Interfaccia utente:
    • Risolvi il problema per cui i pulsanti Avanti e Indietro non sono visibili quando vengono utilizzati con Material Design in un BottomSheetDialogFragment (#511).
    • Risolvi il problema per cui i numeri nel pulsante Avanti veloce di PlayerControlView erano disallineati (#547).
  • Estensione DASH:
    • Analizza "f800" come numero di canali pari a 5 per il Dolby nel manifest DASH (#688).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
    • MIDI: è stato risolto il problema a causa del quale la ricerca in avanti consente di saltare gli eventi di modifica del programma (#704).
    • Esegui la migrazione a FFmpeg 6.0 e aggiorna NDK supportato a r26b (#707, #867).
  • Estensione Cast:
    • Elimina la creazione di un elemento Timeline per evitare l'arresto anomalo dell'app in caso di errore di caricamento dei contenuti multimediali 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 per questi metodi non contiene più informazioni sul valore Throwable passato ai metodi Log.{d,i,w,e}(), pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se necessario (possibilmente utilizzando Logger.appendThrowableString(String, Throwable)).
    • Risolvi il problema di compatibilità di Kotlin in cui i parametri di tipo generico null e i tipi di elementi array con valori nulli non vengono rilevati come null. Alcuni esempi sono i parametri dei metodi TrackSelectorResult e SimpleDecoder (#6792).
    • Modifica il comportamento predefinito dell'interfaccia utente e delle notifiche in Util.shouldShowPlayButton per mostrare un pulsante di riproduzione mentre la riproduzione viene temporaneamente soppressa (ad esempio a causa della perdita temporanea dell'audio). Il comportamento legacy può essere mantenuto utilizzando PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) o MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Esegui l'upgrade di androidx.annotation:annotation-experimental a 1.3.1 per risolvere il problema https://issuetracker.google.com/251172715.
    • Sposta ExoPlayer.setAudioAttributes nell'interfaccia di Player.
  • ExoPlayer:
    • Risolvi i problemi di ricerca nei flussi AC4 causati dalla mancata identificazione corretta degli esempi di sola decodifica (#11000).
    • Aggiungi l'eliminazione della riproduzione su dispositivi di output audio non adatti (ad esempio l'altoparlante integrato nei dispositivi Wear OS) quando questa funzionalità è attivata tramite ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Il motivo dell'eliminazione della riproduzione verrà aggiornato come Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT se si tenta di riprodurre quando non sono disponibili output audio adatti o se tutti gli output idonei sono disconnessi durante la riproduzione. Il motivo dell'eliminazione verrà rimosso quando viene collegato un output idoneo.
    • Aggiungi MediaSource.canUpdateMediaItem e MediaSource.updateMediaItem per accettare gli aggiornamenti MediaItem dopo la creazione tramite Player.replaceMediaItem(s).
    • Consenti gli aggiornamenti di MediaItem per tutti i corsi MediaSource forniti dalla libreria tramite Player.replaceMediaItem(s) (#33, #9978).
    • Rinomina MimeTypes.TEXT_EXOPLAYER_CUES in MimeTypes.APPLICATION_MEDIA3_CUES.
    • Aggiungi PngExtractor che invia e legge un intero file PNG in TrackOutput come un singolo 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 a quelli playbackPositionUs esistenti.
    • Metodo ChunkSource.getNextChunk(long, long, List, ChunkHolder) migliorato nell'interfaccia ChunkSource a ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Aggiungi altri campi al logging dei dati Common Media Client Data (CMCD): buffer starvation (bs), scadenza (dl), velocità di riproduzione (pr) e avvio (su) (#8699).
    • Aggiungi luma e crominanza in bit a ColorInfo (#491).
    • Aggiungi altri campi al logging di Common Media Client Data (CMCD): richiesta di oggetto successiva (nor) e richiesta di intervallo successivo (nrr) (#8699).
    • Aggiunta di una funzionalità per trasmettere i dati Common Media Client Data (CMCD) utilizzando i parametri di query (#553).
    • Correggi ConcurrentModificationException in ExperimentalBandwidthMeter (#612).
    • Aggiungi il parametro MediaPeriodId a CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Supporta ClippingMediaSource (e altre origini con differenze di tempo per periodo/finestra) in ConcatenatingMediaSource2 (#11226).
    • Modifica BaseRenderer.onStreamChanged() per ricevere anche un argomento MediaPeriodId.
  • Transformer:
    • Analizza i dati di rotazione EXIF per gli input dell'immagine.
    • Rimuovi il tipo di annotazione TransformationRequest.HdrMode e le relative costanti associate. Utilizza invece Composition.HdrMode e le relative costanti associate.
    • Semplifica OverlaySettings per risolvere i problemi di rotazione.
    • Parametri frameRate e durationUs di SampleConsumer.queueInputBitmap modificati in TimestampIterator.
  • Selezione della traccia:
    • Aggiungi DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness per consentire o impedire esplicitamente l'adattamento senza interruzioni. Il comportamento predefinito di true rimane invariato.
  • Estrattori:
    • MPEG-TS: assicurati che venga eseguito il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di esempio (#7909).
    • Correggi l'errore ortografico durante la determinazione di rotationDegrees. projectionPosePitch modificato in projectionPoseRoll (#461).
    • Rimuovi il presupposto che le istanze Extractor possono essere esaminate direttamente con instanceof. Se vuoi che in fase di runtime l'accesso ai dettagli dell'implementazione di un Extractor, devi prima chiamare Extractor.getUnderlyingInstance.
    • Aggiungi BmpExtractor.
    • Aggiungi WebpExtractor.
    • Aggiungi HeifExtractor.
    • Aggiungi il supporto della versione classica di QuickTime 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.
    • Aggiungi il supporto per l'estrazione dell'audio Vorbis in MP4.
    • Aggiungi AudioSink.getFormatOffloadSupport(Format) che recupera il livello di supporto dell'offload che il sink può fornire per il formato tramite un DefaultAudioOffloadSupportProvider. Restituisce il nuovo AudioOffloadSupport che contiene isFormatSupported, isGaplessSupported e isSpeedChangeSupported.
    • Aggiungi AudioSink.setOffloadMode() tramite il quale è configurata la configurazione di offload sul sink audio. Il valore predefinito è AudioSink.OFFLOAD_MODE_DISABLED.
    • L'offload può essere abilitato tramite setAudioOffloadPreference in TrackSelectionParameters. Se la preferenza impostata è attivata, il dispositivo supporta l'offload per il formato e la selezione della traccia è una singola traccia audio, quindi verrà attivato l'offload audio.
    • Se audioOffloadModePreference è impostato su AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, DefaultTrackSelector selezionerà solo una traccia audio e solo se il relativo formato è supportato nell'offload. Se nessuna traccia audio è supportata nel download, non verrà selezionata alcuna traccia.
    • Disabilitazione del supporto gapless per l'offload quando si è pre-livello API 33 a causa di un problema relativo alla posizione di riproduzione dopo la transizione della traccia.
    • Rimuovi il parametro enableOffload dalla firma del metodo DefaultRenderersFactory.buildAudioSink.
    • Rimuovi metodo DefaultAudioSink.Builder.setOffloadMode.
    • Rimuovi valore intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Aggiunta del supporto per i metadati gapless Opus durante la riproduzione offload.
    • Consenti il recupero del renderer disattivando l'offload se l'operazione non è riuscita alla prima scrittura (#627).
    • Attiva per impostazione predefinita la pianificazione dell'offload per la riproduzione in modalità solo audio.
    • Elimina ExoPlayer.experimentalSetOffloadSchedulingEnabled e AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged è stato rinominato onSleepingForOffloadChanged e onExperimentalOffloadedPlayback come onOffloadedPlayback.
    • Sposta le interfacce e le definizioni TrackSelectionParameters correlate alla modalità di offload audio in una classe AudioOffloadPreferences interna.
    • Aggiungi i callback onAudioTrackInitialized e onAudioTrackReleased a AnalyticsListener, AudioRendererEventListener e AudioSink.Listener.
    • Risolvi il problema di underflow del buffer audio DTS Express (#650).
    • Correggere il bug in cui il controllo delle funzionalità di E-AC3-JOC genera un IllegalArgumentException (#677).
  • Video:
    • Consenti a MediaCodecVideoRenderer di usare un VideoFrameProcessor.Factory personalizzato.
    • Correggi il bug per cui non è stato possibile visualizzare il primo frame se lo stream audio inizia con timestamp negativi (#291).
  • Testo:
    • Rimuovi ExoplayerCuesDecoder. Ora le tracce di testo con sampleMimeType = application/x-media3-cues vengono gestite direttamente da TextRenderer, senza bisogno di un'istanza SubtitleDecoder.
  • Metadati:
    • MetadataDecoder.decode non verrà più chiamato per gli esempi "solo di decodifica", perché l'implementazione deve comunque restituire un valore nullo.
  • Effetto:
    • Aggiungi VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) aggiungendo in coda l'input bitmap in base al timestamp.
    • Modifica VideoFrameProcessor.registerInputStream() in modo che non blocchi. Le app devono implementare VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Parametri frameRate e durationUs di VideoFrameProcessor.queueInputBitmap modificati in TimestampIterator.
  • Estensione IMA:
    • È stato corretto il bug per cui un live streaming DASH di più periodi che non è il primo elemento di una playlist può generare un'eccezione (#571).
    • Rilascia StreamManager prima di chiamare AdsLoader.destroy()
    • Aggiorna la versione dell'SDK IMA alla versione 3.31.0.
  • Sessione:
    • Imposta il comportamento del servizio in primo piano delle notifiche su FOREGROUND_SERVICE_IMMEDIATE in DefaultMediaNotificationProvider (#167).
    • Utilizzala solo android.media.session.MediaSession.setMediaButtonBroadcastReceiver() versione sopra API 31 per evitare problemi con l'API deprecata sui dispositivi Samsung (#167).
    • Utilizza il controller di notifica multimediale come proxy per impostare i comandi disponibili e il layout personalizzato utilizzato per completare la notifica e la sessione della piattaforma.
    • Converti gli eventi dei pulsanti multimediali ricevuti da MediaSessionService.onStartCommand() all'interno di Media3 anziché indirizzarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controller del chiamante è sempre il controller delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli API supportati.
    • Correggi il bug per cui MediaController.getCurrentPosition() non avanza con la connessione a una versione precedente di MediaSessionCompat.
    • Aggiungi MediaLibrarySession.getSubscribedControllers(mediaId) per praticità.
    • Esegui l'override di MediaLibrarySession.Callback.onSubscribe() per rivendicare la disponibilità dell'ID principale per cui il controller sottoscrive l'abbonamento. Se l'esito è positivo, l'abbonamento viene accettato e notifyChildrenChanged() viene chiamato immediatamente per informare il browser (#561).
    • Aggiungi il modulo demo della sessione per Automotive OS 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 controller delle notifiche multimediali. Se Android Auto è il controller client che legge dalla sessione framework, il pulsante queue nell'interfaccia utente di Android Auto non viene visualizzato (#339).
    • Usa DataSourceBitmapLoader per impostazione predefinita anziché SimpleBitmapLoader (#271, #327).
    • Aggiungi MediaSession.Callback.onMediaButtonEvent(Intent) che consente alle app di sostituire la gestione predefinita degli eventi del pulsante multimediale.
  • Interfaccia utente:
    • Aggiungi un'implementazione Player.Listener per i dispositivi Wear OS che gestiscono l'eliminazione della riproduzione dovuta all'Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT avviando una finestra di dialogo di sistema per consentire all'utente di collegare un'uscita audio adeguata (ad esempio cuffie Bluetooth). Il listener riprenderà automaticamente la riproduzione se un dispositivo adatto viene collegato entro un timeout configurabile (il valore predefinito è 5 minuti).
  • Download:
    • Dichiara il tipo di servizio in primo piano "sincronizzazione dei dati" per DownloadService per la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungere dataSync come foregroundServiceType nel file manifest e aggiungere l'autorizzazione FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • Estensione HLS:
    • Aggiorna la playlist dal vivo HLS con un intervallo calcolato dall'ora di inizio dell'ultimo caricamento anziché dall'ora di completamento dell'ultimo caricamento (#663).
  • Estensione DASH:
    • Consenti più identificatori dello stesso DASH nell'URL del modello di segmento.
    • È stato aggiunto il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. In questo modo, è possibile unire meglio i sottotitoli, ad esempio per risolvere lo sfarfallio durante il passaggio da un segmento di sottotitoli all'altro. Puoi abilitare questa funzionalità utilizzando DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • Estensione RTSP:
    • Correggi una condizione di gara che potrebbe portare a IndexOutOfBoundsException quando rischi di utilizzare TCP o a una riproduzione in pausa in alcune situazioni.
    • Controlla lo stato nella configurazione RTSP quando restituisci lo stato di caricamento di RtspMediaPeriod (#577).
    • Ignora i metodi di richiesta Rtsp personalizzati nell'intestazione pubblica della risposta Opzioni (#613).
    • Utilizza il valore di timeout della risposta alla configurazione RTSP nell'intervallo di tempo dell'invio delle richieste per le opzioni RTSP keep-alive (#662).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
    • Rilascia il modulo di decodifica MIDI, che supporta 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. Questo ha la priorità rispetto a C.BUFFER_FLAG_DECODE_ONLY che verrà deprecato.
    • Aggiungi Decoder.setOutputStartTimeUs e SimpleDecoder.isAtLeastOutputStartTimeUs per consentire ai decoder di ignorare i campioni solo di decodifica prima dell'ora di inizio. Questa opzione deve essere preferita a Buffer.isDecodeOnly, che verrà deprecata.
    • Correggi il bug relativo alla pubblicazione dell'artefatto del decodificatore MIDI nel Repository Maven. L'elemento viene rinominato in media3-exoplayer-midi (#734).
  • Estensione Leanback:
    • Risolvi il bug per cui la disattivazione di una piattaforma può causare un ArithmeticException nel codice Leanback (#617).
  • Utilità di test:
    • Rendi TestExoPlayerBuilder e FakeClock compatibili con i test dell'UI di Espresso e dell'UI di Compose. Questo risolve un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con le visualizzazioni Espresso o Compose.
  • Rimuovi i simboli ritirati:
    • Rimuovi TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) e TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Usa Composition.Builder.setHdrMode(int) e trasmetti Composition a Transformer.start(Composition, String).
    • Rimuovi il metodo DownloadNotificationHelper.buildProgressNotification deprecato, utilizza un metodo non deprecato che preveda invece 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 accidentalmente da tutti i moduli (#499).
  • ExoPlayer:
    • Risolvi il problema in PlaybackStatsListener per cui vengono create PlaybackStats false dopo la cancellazione della playlist.
    • Aggiungi altri campi al logging di Common Media Client Data (CMCD): formato di flusso (sf), tipo di flusso (st), versione (v), birate superiore (tb), durata dell'oggetto (d), velocità effettiva misurata (mtp) e tipo di oggetto (ot) (#8699).
  • Audio:
    • Correggi un bug per cui Player.getState() non è mai passato a STATE_ENDED durante la riproduzione di file molto brevi (#538).
  • Offload audio:
    • Anteponi le pagine di intestazione dell'ID Ogg e dei commenti al flusso di bit per la riproduzione Opus non caricata in base a RFC 7845.
  • Video:
    • H.265/HEVC: risoluzione dei problemi relativi all'analisi delle informazioni sull'immagine di riferimento a breve e a lungo termine dell'SPS.
  • Testo:
    • CEA-608: modifica la logica di troncamento del cue point per considerare solo il testo visibile. In precedenza, il rientro e l'offset della scheda erano inclusi quando si limitava la lunghezza del cue a 32 caratteri (tecnicamente corretti in base alla specifica) (#11019).
  • Estensione IMA:
    • Aggiorna la 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 richiamato MediaController.Listener.onCustomLayoutChanged. Le app che vogliono inviare layout personalizzati diversi a un controller Media3 diverso possono farlo in MediaSession.Callback.onConnect utilizzando un AcceptedResultBuilder per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione.
    • Correggi i casi in cui MediaLibraryServiceLegacyStub inviava un errore a un Result che non lo supportava e questo ha generato un errore UnsupportedOperationException (#78).
    • Correggi il modo in cui PlayerWrapper crea un VolumeProviderCompat determinando volumeControlType tramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUME e COMMAND_SET_DEVICE_VOLUME) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS e COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

Versione 1.1.0

5 luglio 2023

  • Libreria comune:
    • Aggiungi il motivo dell'eliminazione per il percorso audio non adatto e riproducilo quando è pronto. Il motivo della modifica per Soppresso troppo lungo. (n. 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 di sovraccarico al Player che consentano agli utenti di specificare 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 controller di routing per le riproduzioni remote.
    • Aggiungi Player.replaceMediaItem(s) come scorciatoia per aggiungere e rimuovere elementi dalla stessa posizione (#8046).
  • ExoPlayer:
    • Consenti a ExoPlayer di avere il controllo dei metodi del volume del dispositivo solo se attivati 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 per filtrare i tipi di monitoraggio disponibili da un MediaSource.
    • Aggiungi il supporto per l'inclusione di Common Media Client Data (CMCD) nelle richieste in uscita dei formati di streaming adattivi DASH, HLS e smoothStreaming. I seguenti campi, br, bl, cid, rtp e sid, sono stati incorporati (#8699). Struttura e metodi delle API:
      • Il logging CMCD è disabilitato per impostazione predefinita. Utilizza MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) per abilitarlo.
      • Tutte le chiavi sono abilitate per impostazione predefinita. Esegui l'override di CmcdConfiguration.RequestConfig.isKeyAllowed(String key) per filtrare le chiavi registrate.
      • Esegui l'override di CmcdConfiguration.RequestConfig.getCustomData() per abilitare il logging delle chiavi personalizzate.
    • Aggiungi un'altra azione 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. Questo modifica le firme dei metodi pubblici SampleQueue.sourceId e SampleQueue.peekSourceId.
    • Aggiungi parametri ai metodi LoadControl shouldStartPlayback e onTracksSelected che consentono di associare questi metodi al MediaPeriod pertinente.
    • Modifica la firma di ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) aggiungendo un parametro della sequenza temporale che contenga i periodi con gli UID utilizzati come chiavi nella mappa. Questa operazione è necessaria per evitare problemi di contemporaneità con i live streaming di più periodi.
    • Ritira 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 deprecate, l'offset non viene più aggiunto a startTimeUs e endTimeUs degli oggetti MediaLoadData inviati dal supervisore.
    • Rinomina ExoTrackSelection.blacklist in excludeTrack e isBlacklisted in isTrackExcluded.
    • Correggi il comportamento incoerente tra ExoPlayer.setMediaItem(s) e addMediaItem(s) quando viene richiamato in una playlist vuota.
  • Transformer:
    • Rimuovi Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Utilizza i criteri ExoPlayerAssetLoader.Factory(MediaSource.Factory) e Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • Rimuovi Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • Risolvi un bug per cui la trasformazione potrebbe bloccarsi (portando a un timeout del muxer) se la fine dello stream video era segnalata nel momento in cui un frame 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 B-frame in DefaultEncoderFactory perché non funziona su alcuni dispositivi.
  • Selezione della traccia:
    • Aggiungi DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange che è disabilitato per impostazione predefinita. Se attivato, DefaultTrackSelector attiverà la selezione di una nuova traccia quando le funzionalità del renderer cambiano.
  • Estrattori:
    • Ogg: è stato corretto il bug durante la ricerca nei file di lunga durata (#391).
    • FMP4: risolvi il problema in cui TimestampAdjuster inizializza un offset di timestamp errato con l'ora di esempio dei metadati dall'atom emsg (#356).
  • Audio:
    • Correggi il bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e AudioProcessors sono attivi, ad esempio per il taglio senza interruzioni (#10847).
    • Incapsula i frame Opus in pacchetti Ogg durante riproduzioni dirette (offload).
    • Estrai la posizione corrente durante il sonno con la programmazione dell'offload.
    • Aggiungi Renderer.release() e AudioSink.release() per rilasciare le risorse alla fine del ciclo di vita del player.
    • Ascolta i cambiamenti delle funzionalità audio in DefaultAudioSink. Aggiungi un parametro obbligatorio context nel costruttore di DefaultAudioSink, con cui DefaultAudioSink si registra come listener di AudioCapabilitiesReceiver e aggiorna la sua proprietà audioCapabilities quando viene informata di una modifica delle funzionalità.
    • Propaga le modifiche alle funzionalità audio tramite un nuovo evento onAudioCapabilitiesChanged nell'interfaccia di AudioSink.Listener e una nuova interfaccia RendererCapabilities.Listener che attiva eventi onRendererCapabilitiesChanged.
    • Aggiungi ChannelMixingAudioProcessor per applicare lo ridimensionamento/il missaggio ai canali audio.
    • Aggiungi un nuovo valore int DISCARD_REASON_AUDIO_BYPASS_POSSIBLE a DecoderDiscardReasons per ignorare il decodificatore audio quando è possibile la modalità di bypass dopo la modifica delle funzionalità audio.
    • Aggiunta del supporto della riproduzione diretta per DTS Express e DTS:X (#335).
  • Video:
    • Fai in modo che MediaCodecVideoRenderer riporti un VideoSize con larghezza e altezza pari a 0 quando il renderer è disattivato. Player.Listener.onVideoSizeChanged viene richiamato di conseguenza quando Player.getVideoSize() cambia. Con questa modifica, le dimensioni del video di ExoPlayer con MediaCodecVideoRenderer hanno larghezza e altezza pari a 0 quando Player.getCurrentTracks non supporta i video o non sono ancora state determinate le dimensioni della traccia video supportata.
  • DRM:
    • Riduci la visibilità di diversi metodi solo per uso interno su DefaultDrmSession che non sono previste chiamate dall'esterno del pacchetto DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Aggiungi una nuova libreria muxer che può essere utilizzata per creare un file container MP4.
  • Estensione IMA:
    • Attiva live streaming DASH multi-periodo per DAI. Tieni presente che l'implementazione attuale non supporta ancora la ricerca nei live streaming (#10912).
    • Correggi un bug relativo all'inserimento di un nuovo gruppo di annunci nei live streaming perché la posizione dei contenuti calcolati in sequenze temporali consecutive varia leggermente.
  • Sessione:
    • Aggiungi il metodo helper MediaSession.getControllerForCurrentRequest per ottenere informazioni sul controller che sta chiamando un metodo Player.
    • Aggiungi androidx.media3.session.MediaButtonReceiver per consentire alle app di implementare la ripresa della riproduzione con eventi del pulsante multimediale inviati, ad esempio, da cuffie Bluetooth (#167).
    • Aggiungi l'implementazione predefinita a MediaSession.Callback.onAddMediaItems per consentire il trasferimento di MediaItems richiesto a Player se ha LocalConfiguration (ad es. URI) (#282).
    • Aggiungi i pulsanti di comando "Vai alla precedente" e "Vai alla successiva" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita su Android 12 e versioni precedenti (#410).
    • Aggiungi l'implementazione predefinita a MediaSession.Callback.onAddMediaItems per consentire il trasferimento di MediaItems richiesto a Player se ha LocalConfiguration (ad es. URI) (#282).
    • Aggiungi i pulsanti di comando "Vai alla precedente" e "Vai alla successiva" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita su Android 12 e versioni precedenti (#410).
  • Interfaccia utente:
    • Aggiungi i metodi di utilizzo shouldShowPlayButton e handlePlayPauseButtonAction per scrivere elementi UI personalizzati con un pulsante di riproduzione/pausa.
  • Estensione RTSP:
    • Per MPEG4-LATM, utilizza il valore ID livello profilo predefinito se non è presente nel messaggio Describe Response SDP (#302).
    • Utilizza l'URI di base per la risoluzione relativa del percorso della sessione RTSP, se presente nell'intestazione della risposta DESCRIBE (#11160).
  • Estensione DASH:
    • Rimuovi lo scarto con fuso orario multimediale da MediaLoadData.startTimeMs e MediaLoadData.endTimeMs per gli stream DASH multiperiodo.
    • È stato corretto un bug per cui la preparazione di un'origine di contenuti multimediali Dash live di più periodi ha generato un valore IndexOutOfBoundsException (#10838).
  • Estensione HLS:
    • Aggiungi HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) per impostare un timeout per il thread di caricamento in attesa dell'inizializzazione di TimestampAdjuster. Se l'inizializzazione non viene completata prima del timeout, viene generato un valore PlaybackException per evitare lo stallo della riproduzione. Il timeout è impostato su zero per impostazione predefinita (#323).
  • Utilità di test:
    • Verifica l'insensibilità alle maiuscole dello schema dell'URI in DataSourceContractTest.
  • Rimuovi i simboli ritirati:
    • Rimuovi i costruttori DefaultAudioSink, utilizza invece DefaultAudioSink.Builder.
    • Rimuovi HlsMasterPlaylist, utilizza invece HlsMultivariantPlaylist.
    • Rimuovi Player.stop(boolean). Usa invece Player.stop() e Player.clearMediaItems() (se reset è true).
    • Rimuovi due costruttori SimpleCache deprecati, utilizza un costruttore non obsoleto che richiede un DatabaseProvider per migliorare le prestazioni.
    • Rimuovi il costruttore DefaultBandwidthMeter, utilizza DefaultBandwidthMeter.Builder invece.
    • Rimuovi i costruttori DefaultDrmSessionManager, utilizza DefaultDrmSessionManager.Builder invece.
    • Rimuovi due costruttori HttpDataSource.InvalidResponseCodeException deprecati, utilizza un costruttore non deprecato che accetti campi aggiuntivi(cause, responseBody) per migliorare il logging degli errori.
    • Rimuovi DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash e DownloadHelper.forSmoothStreaming, usa invece DownloadHelper.forMediaItem.
    • Rimuovi il costruttore DownloadService deprecato, utilizza un costruttore non deprecato che includa l'opzione per fornire un parametro channelDescriptionResourceId.
    • Rimuovi le costanti Stringhe deprecate per i set di caratteri (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME e UTF16LE_NAME), utilizza invece i set di caratteri Kotlin dal pacchetto kotlin.text, java.nio.charset.StandardCharsets o com.google.common.base.Charsets.
    • Rimuovi il costruttore WorkManagerScheduler deprecato, utilizza un costruttore non obsoleto che includa l'opzione per fornire invece un parametro Context.
    • Rimuovi i metodi deprecati createVideoSampleFormat, createAudioSampleFormat, createContainerFormat e createSampleFormat, che sono stati utilizzati per creare un'istanza 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, quindi utilizza i metodi Format.buildUpon() e setter.
    • Rimuovi ExoPlayer.retry() deprecato, utilizza prepare() al suo posto.
    • Rimuovi il costruttore DefaultTrackSelector zero-arg deprecato, utilizza DefaultTrackSelector(Context) invece.
    • Rimuovi il costruttore OfflineLicenseHelper deprecato, utilizza OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) invece.
    • Rimuovi il costruttore DownloadManager deprecato, utilizza invece il costruttore che richiede un Executor.
    • Rimuovi i costruttori Cue deprecati, utilizza invece Cue.Builder.
    • Rimuovi il costruttore OfflineLicenseHelper deprecato, utilizza OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) invece.
    • Rimuovi quattro metodi AnalyticsListener ritirati:
      • onDecoderEnabled, usa onAudioEnabled e/o onVideoEnabled.
      • onDecoderInitialized, usa onAudioDecoderInitialized e/o onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, usa onAudioInputFormatChanged e/o onVideoInputFormatChanged.
      • onDecoderDisabled, usa onAudioDisabled e/o onVideoDisabled.
    • Rimuovi i valori Player.Listener.onSeekProcessed e AnalyticsListener.onSeekProcessed deprecati, utilizza invece onPositionDiscontinuity con DISCONTINUITY_REASON_SEEK.
    • Rimuovi ExoPlayer.setHandleWakeLock(boolean), utilizza invece setWakeMode(int).
    • Rimuovi l'elemento deprecato DefaultLoadControl.Builder.createDefaultLoadControl(), utilizza invece build().
    • Rimuovi MediaItem.PlaybackProperties deprecato, utilizza MediaItem.LocalConfiguration al suo posto. 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 che Buffer contiene il flag C.BUFFER_FLAG_LAST_SAMPLE.
    • Risolvi il problema per cui l'ultimo frame potrebbe non essere visualizzato se l'ultimo campione con frame viene rimosso dalla coda senza leggere l'esempio di "fine dello stream". (#11079).
  • Estrattori:
    • Correggi l'analisi dei file H.265 SPS 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 contrassegno d'ordine di byte (#319).
  • Sessione:
    • Risolvi il problema per cui MediaController non aggiorna i suoi comandi disponibili quando è collegato a una versione precedente di MediaSessionCompat che aggiorna le sue azioni.
    • Risolvi il bug che impediva a MediaLibraryService di restituire un valore null per una chiamata dalla UI di sistema a Callback.onGetLibraryRoot con params.isRecent == true nell'API 30 (#355).
    • Correggi la perdita di memoria di MediaSessionService o MediaLibraryService (#346).
    • Correggi il bug per cui un aggiornamento combinato di Timeline e della posizione in un MediaSession potrebbe causare la generazione di un IllegalStateException da parte di MediaController.

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:
    • Reimposta l'override del live streaming target quando cerchi la posizione predefinita (#11051).
    • Correggi il bug per cui stream di esempio vuoti potrebbero causare il blocco della riproduzione.
  • Sessione:
    • Risolvi il bug per cui più elementi di coda identici pubblicati da un elemento precedente MediaSessionCompat generano un'eccezione in MediaController (#290).
    • Aggiungi l'inoltro mancante di MediaSession.broadcastCustomCommand alla versione precedente di MediaControllerCompat.Callback.onSessionEvent (#293).
    • Risolvi il bug per cui la chiamata a MediaSession.setPlayer non aggiorna i comandi disponibili.
    • Risolvi il problema per cui le istanze TrackSelectionOverride inviate da un MediaController vengono ignorate se fanno riferimento a un gruppo con Format.metadata (#296).
    • Risolvi il problema in cui Player.COMMAND_GET_CURRENT_MEDIA_ITEM deve essere disponibile per accedere ai metadati tramite la versione precedente di MediaSessionCompat.
    • Risolvi il problema per cui le istanze MediaSession in un thread in background causano arresti anomali quando vengono utilizzate in MediaSessionService (#318).
    • Risolvi il problema in cui un ricevitore del pulsante multimediale è stato dichiarato dalla raccolta senza che l'app lo avesse previsto (#314).
  • DASH:
    • Correggi la gestione delle sequenze temporali dei segmenti vuote (#11014).
  • RTSP:
    • Riprova con TCP se la configurazione di RTSP con UDP non va a buon fine con l'errore RTSP 461 Non supportato (#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:
    • Correggi il rilevamento del tipo di rete sull'API 33 (#10970).
    • Risolvi i problemi di NullPointerException durante la chiamata al numero ExoPlayer.isTunnelingEnabled (#10977).
  • Download:
    • Aumenta l'ora di inizio massima di due segmenti da unire configurabili in SegmentDownloader e nelle sottoclassi (#248).
  • Audio:
    • Correggi i problemi della riproduzione di MP3 senza interruzioni sui dispositivi Samsung (#8594).
    • Risolvi il bug per cui le velocità di riproduzione impostate immediatamente dopo la disattivazione dell'audio potrebbero essere sostituite da una variazione di velocità precedente (#10882).
  • Video:
    • Mappa il formato HEVC HDR10 a HEVCProfileMain10HDR10 anziché a HEVCProfileMain10.
    • Aggiungi una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e Lenovo M10 FHD Plus che fa sì che gli stream AVC a 60 FPS siano contrassegnati come non supportati (#10898).
    • Risolvi i problemi di prestazioni di rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza fotogrammi molto superiore a quella di aggiornamento dello schermo.
  • Trasmetti:
    • Correggi il problema STATE_IDLE temporaneo durante la transizione da un elemento multimediale a un altro (#245).
  • RTSP:
    • Individuare l'illegitArgumentException generata durante l'analisi di RTSP non valido Descrivi i messaggi di risposta (#10971).
  • Sessione:
    • È stato corretto un bug per cui il pulsante di riproduzione/pausa delle notifiche non si aggiornava con lo stato del player (#192).
  • Estensione IMA:
    • Correggi un bug che impediva l'avvio degli stream DAI senza annunci perché il primo evento LOADED (e nel caso senza annunci è l'unico) non è stato ricevuto.

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 decoder del renderer per confermare le preferenze di MediaCodecSelector, anche se un decoder 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 sarà preferito rispetto 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.
    • Consenti la cancellazione degli helper del gestore dei download (#10776).
    • Aggiungi parametro a BasePlayer.seekTo per indicare anche il comando utilizzato per la ricerca.
    • Utilizza il tema durante il caricamento dei disegni su API 21 e versioni successive (#220).
    • Aggiungi ConcatenatingMediaSource2 che consenta di combinare più elementi multimediali in un'unica finestra (#247).
  • Estrattori:
    • Genera ParserException anziché NullPointerException se nella tabella di esempio (stbl) manca una descrizione del campione obbligatoria (stsd) durante l'analisi degli atomi di trak.
    • Ignora correttamente i campioni quando cerchi 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 segnali.
    • SubRip: aggiungi il supporto per i file UTF-16 se iniziano con un contrassegno d'ordine di byte.
  • Metadati:
    • Analizza più valori separati da null dei 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 sostituzione di MediaMetadata.folderType. Il tipo di cartella sarà deprecato nella prossima release.
  • DASH:
    • Aggiungi un'analisi completa per i set di adattamento delle immagini, inclusi il numero di riquadri (#3752).
  • Interfaccia utente:
    • Correggi il problema ritirato PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) per assicurarti che le modifiche di visibilità vengano trasmesse al listener registrato (#229).
    • Correggi l'ordine dei controlli del player centrali in PlayerView quando utilizzi un layout da destra a sinistra (RTL) (#227).
  • Sessione:
    • Aggiungi l'astratto SimpleBasePlayer per implementare l'interfaccia Player per i player personalizzati.
    • Aggiungi un metodo helper per convertire il token della sessione della piattaforma in Media3 SessionToken (#171).
    • Utilizza onMediaMetadataChanged per attivare gli aggiornamenti della sessione multimediale della piattaforma (#219).
    • Aggiungi la sessione multimediale come argomento di getMediaButtons() del DefaultMediaNotificationProvider e usa elenchi immutabili per chiarezza (#216).
    • Aggiungi il listener di callback onSetMediaItems per fornire mezzi per modificare/impostare l'elenco MediaItem, iniziando l'indice e la posizione per sessione prima di impostare il player (#156).
    • Evita il rilevamento del doppio tocco per eventi del pulsante multimediale non Bluetooth (#233).
    • Rendi QueueTimeline più solido in caso di uno stato della sessione legacy non valido (#241).
  • Metadati:
    • Analizza più valori separati da null dei 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 sostituzione di MediaMetadata.folderType. Il tipo di cartella sarà deprecato nella prossima release.
  • Estensione Cast:
    • Aggiorna la versione dell'SDK Cast alla 21.2.0.
  • Estensione IMA:
    • Rimuovi il listener del player di ImaServerSideAdInsertionMediaSource dal thread dell'applicazione per evitare problemi di raggruppamento.
    • Aggiungi una proprietà focusSkipButtonWhenAvailable a ImaServerSideAdInsertionMediaSource.AdsLoader.Builder per richiedere di impostare il pulsante Salta sui dispositivi TV e impostalo su true per impostazione predefinita.
    • Aggiungi un metodo focusSkipButton() a ImaServerSideAdInsertionMediaSource.AdsLoader per richiedere in modo programmatico di impostare lo stato attivo sul pulsante Salta.
    • Aggiorna la versione dell'SDK IMA alla versione 3.29.0.
  • App demo:
    • Richiedi l'autorizzazione alle notifiche per le notifiche di download in fase di runtime (#10884).

Versione 1.0.0-beta03

22 novembre 2022

androidx.media3:media3-*:1.0.0-beta03 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 il wrapping di un singolo MediaSource (#7279).
    • Elimina il buffer precedente prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
    • Chiudi il blocco Tracciamento "doSomeWork" quando è abilitato l'offload.
    • Risolvi 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 singolo elemento (#10667).
    • Aggiungi Player.getSurfaceSize che restituisca le dimensioni della superficie su cui viene visualizzato il video.
    • Correggi il bug per cui la rimozione dei listener durante la release del player può causare un errore IllegalStateException (#10758).
  • Creazione:
    • Applica almeno compileSdkVersion per evitare errori di compilazione (#10684).
    • Evita il blocco della pubblicazione se incluso in un'altra build Gradle.
  • Selezione della traccia:
    • Preferisci altri brani a Dolby Vision se il display non lo supporta. (#8944).
  • Download:
    • Correggi il potenziale loop infinito in ProgressiveDownloader causato da download e riproduzione simultanei con lo stesso PriorityTaskManager (#10570).
    • Fai in modo che la notifica di download venga visualizzata immediatamente (#183).
    • Limita le rimozioni di download paralleli a 1 per evitare la creazione eccessiva di thread (#10458).
  • Video:
    • Prova un decoder alternativo per Dolby Vision se il display non lo supporta. (#9794).
  • Audio:
    • Usa SingleThreadExecutor per rilasciare AudioTrack istanze ed evitare errori di OutOfMemory quando rilasci più player contemporaneamente (#10057).
    • Aggiunge AudioOffloadListener.onExperimentalOffloadedPlayback per lo stato di offload AudioTrack. (#134).
    • Imposta AudioTrackBufferSizeProvider come 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 dei canali 7.1 e 7.1.4 rispettivamente su tutte le versioni di Android (#10701).
  • Metadati:
    • Ora è possibile configurare MetadataRenderer per visualizzare i metadati non appena sono disponibili. Crea un'istanza con MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) per specificare se il renderer restituirà i metadati in anticipo o in sincronizzazione con la posizione del player.
  • DRM:
    • Risolvi un bug nell'implementazione ClearKey di Android 13 che restituisce un URL di licenza non vuoto ma non valido.
    • Correggi l'errore setMediaDrmSession failed: session not opened durante il passaggio da uno schema DRM all'altro in una playlist (ad es. da Widevine a ClearKey).
  • Testo:
    • CEA-608: assicurati che i comandi dell'interruttore di servizio nel campo 2 siano gestiti correttamente (#10666).
  • DASH:
    • Analizza EventStream.presentationTimeOffset dei file manifest (#10460).
  • Interfaccia utente:
    • Usa gli override attuali del player come preimpostati 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 DefaultMediaNotificationProvider istanze. Il builder può configurare l'ID notifica, l'ID del canale di notifica e il nome del canale di notifica utilizzato dal provider. Inoltre, aggiungi il metodo DefaultMediaNotificationProvider.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).
    • Correggi l'asserzione che impedisce a MediaController di eseguire la ricerca su un annuncio in un periodo (#122).
    • Al termine della riproduzione, l'elemento MediaSessionService viene interrotto dalla primo piano e viene visualizzata una notifica che richiede di riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112).
    • Non avviare un servizio in primo piano con un intent in attesa per mettere in pausa (#167).
    • Nascondi manualmente il "badge" associato alla notifica creata da DefaultNotificationProvider su API 26 e API 27 (il badge viene nascosto automaticamente nell'API 28+) (#131).
    • Risolvi il bug per cui una connessione di un secondo binder da una MediaSession legacy a un MediaController causa sobrioStateExceptions (#49).
  • RTSP:
    • Aggiungi la gestione dei pacchetti frammentati H263 (#119).
    • Aggiungi il supporto di MP4A-LATM (#162).
  • IMA:
    • Aggiungi un timeout per il caricamento delle informazioni sugli annunci in modo da gestire i casi in cui l'SDK IMA si blocca durante il caricamento di un annuncio (#10510).
    • Impedisci di saltare gli annunci mid-roll quando cerchi la fine dei contenuti (#10685).
    • Calcola correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
  • Estensione FFmpeg:
    • Aggiungi i 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 ultime release di Android Studio (#9933).
  • Estensione Cast:
    • Implementa getDeviceInfo() per poter identificare CastPlayer durante il controllo della riproduzione con un MediaController (#142).
  • Transformer:
    • Aggiungi un timer watchdog muxer per rilevare quando la generazione di un campione di output è troppo lenta.
  • Rimuovi i simboli ritirati:
    • Rimuovi Transformer.Builder.setOutputMimeType(String). Questa funzionalità è stata rimossa. Il tipo MIME è 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 modifica di ShuffleOrder con ExoPlayer.setShuffleOrder venga 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 del buffer (#10361).
    • Consenti logger personalizzato per tutti gli output di log di ExoPlayer (#9752).
    • Correggi l'implementazione di setDataSourceFactory in DefaultMediaSourceFactory, che in alcuni casi non funzionava (#116).
  • Estrattori:
    • Correggi l'analisi dei set di immagini di riferimento a breve termine H265 (#10316).
    • Correggi l'analisi della velocità in bit dalle caselle esds (#10381).
  • DASH:
    • Analizza l'URL della licenza ClearKey dei file manifest (#10246).
  • Interfaccia utente:
    • Assicurati che TalkBack pronunci l'opzione per la velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
  • RTSP:
    • Aggiungi la gestione dei pacchetti frammentati VP8 (#110).
  • Estensione Leanback:
    • Ascolta le modifiche di playWhenReady in LeanbackAdapter (10420).
  • Trasmetti:
    • Usa il valore MediaItem che è stato trasmesso ai metodi della playlist come Window.mediaItem in CastTimeline (#25, #8212).
    • Sostieni 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 ExoPlayer 2.18.0.

  • Libreria di base:
    • Attiva il supporto per la diagnostica della piattaforma Android tramite MediaMetricsManager. ExoPlayer inoltrerà i dati sulle prestazioni e gli eventi di riproduzione alla piattaforma, il che contribuisce a fornire informazioni sulle prestazioni del sistema e di debug sul dispositivo. Questi dati possono anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostica è abilitata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer con ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Correggi il bug per cui le tracce vengono reimpostate troppo spesso quando utilizzi MergingMediaSource, ad esempio quando esegui il sideload dei sottotitoli e la modifica del sottotitolo selezionato durante la riproduzione (#10248).
    • Interrompi il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Queste riproduzioni suppongono una rete 4G.
    • Non consentire di trasmettere null a MediaSource.Factory.setDrmSessionManagerProvider e MediaSource.Factory.setLoadErrorHandlingPolicy. Le istanze di DefaultDrmSessionManagerProvider e DefaultLoadErrorHandlingPolicy possono essere passate esplicitamente, se necessario.
    • Aggiungi MediaItem.RequestMetadata per rappresentare i metadati necessari per riprodurre i contenuti multimediali quando il valore LocalConfiguration esatto non è noto. Rimuovi anche MediaMetadata.mediaUrl perché ora è incluso in RequestMetadata.
    • Aggiungi Player.Command.COMMAND_SET_MEDIA_ITEM per consentire ai giocatori di impostare un singolo elemento.
  • Selezione della traccia:
    • Suddivide la classe TrackSelectionOverrides in TrackSelectionParameters e promuovi TrackSelectionOverride a una classe di primo livello.
    • Rinomina TracksInfo in Tracks e TracksInfo.TrackGroupInfo in Tracks.Group. Anche Player.getCurrentTracksInfo e Player.Listener.onTracksInfoChanged sono stati rinominati Player.getCurrentTracks e Player.Listener.onTracksChanged. Ciò include l'annullamento del ritiro del nome del metodo Player.Listener.onTracksChanged, ma con tipi di parametri diversi.
    • Modifica DefaultTrackSelector.buildUponParameters e DefaultTrackSelector.Parameters.buildUpon per restituire DefaultTrackSelector.Parameters.Builder anziché la versione deprecata DefaultTrackSelector.ParametersBuilder.
    • Aggiungi DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities che è abilitato per impostazione predefinita. Se attivata, DefaultTrackSelector darà priorità alle tracce audio il cui numero di canali non supera le capacità di output del dispositivo. Sui dispositivi portatili, DefaultTrackSelector predilige i formati audio stereo/mono rispetto ai formati audio multicanale, a meno che il formato multicanale non sia spazializzato (Android 12L e versioni successive) o sia un formato audio surround Dolby. Inoltre, sui dispositivi che supportano la spazializzazione audio, DefaultTrackSelector monitorerà le modifiche nelle proprietà spazializzatore e attiverà una nuova selezione di tracce. 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 abilitare questa funzionalità, l'istanza DefaultTrackSelector deve essere creata con un Context.
  • Video:
    • Rinomina DummySurface in PlaceholderSurface.
    • Aggiungi il supporto AV1 a MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Utilizza il decoder audio LG AC3 che pubblicizza un tipo MIME non standard.
    • Modifica il tipo restituito di AudioAttributes.getAudioAttributesV21() da android.media.AudioAttributes a una nuova classe wrapper AudioAttributesV21, per evitare la verifica ART lenta su API < 21.
    • Esegui una query sulla piattaforma (API 29 o versioni successive) o supponiamo che il numero dei canali di codifica audio per il passthrough audio non sia impostato quando il numero dei canali audio non è impostato, il che si verifica con la preparazione senza blocchi HLS (10204).
    • Configura AudioTrack con la maschera di canale AudioFormat.CHANNEL_OUT_7POINT1POINT4 se il decoder genera audio PCM a 12 canali (#10322.
  • DRM
    • Assicurati che la sessione DRM sia sempre aggiornata correttamente quando cerchi immediatamente dopo una modifica del formato (10274).
  • Testo:
    • Modifica Player.getCurrentCues() per restituire CueGroup anziché List<Cue>.
    • SSA: supporta l'impostazione di stile OutlineColour quando BorderStyle == 3 (ovvero OutlineColour imposta lo sfondo del consiglio) (#8435).
    • CEA-708: analizza i dati in più blocchi di servizio e ignora i blocchi non associati al numero di servizio attualmente selezionato.
    • Rimuovi RawCcExtractor, che è stato utilizzato solo per gestire un formato dei sottotitoli interno a Google.
  • Estrattori:
    • Aggiungi il supporto di AVI (#2092).
    • Matroska: analizza DiscardPadding per le tracce Opus.
    • MP4: analizza la velocità in bit da esds caselle.
    • Ogg: consenti intestazioni Opus e commenti duplicati (#10038).
  • Interfaccia utente:
    • Correggi la pubblicazione degli eventi negli eventi OnClickListener impostati su PlayerView nel caso in cui useController=false (#9605). Correggi anche la pubblicazione degli eventi in OnLongClickListener per tutte le configurazioni delle viste.
    • È stato risolto il problema del trattamento errato di una sequenza di eventi tocco che esce dai limiti di PlayerView prima di ACTION_UP come clic (#9861).
    • È stato risolto il problema di accessibilità PlayerView per cui il tocco potrebbe attivare/disattivare la riproduzione anziché nascondere i controlli (#8627).
    • Riscrivi TrackSelectionView e TrackSelectionDialogBuilder affinché funzionino con l'interfaccia Player anziché ExoPlayer. In questo modo le viste possono essere utilizzate con altre implementazioni Player e viene rimossa la dipendenza dal modulo UI al modulo ExoPlayer. Questo è un cambiamento radicale.
    • Non mostrare le tracce di testo forzate nel selettore di tracce PlayerView e mantieni selezionata una traccia di testo forzata adatta se è selezionata l'opzione "Nessuno" (#9432).
  • DASH:
    • Analizza il conteggio dei canali dagli elementi AudioChannelConfiguration DTS. Ciò riattiva il passthrough audio per gli stream DTS (#10159).
    • Non consentire la trasmissione di null a DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory possono essere passate in modo esplicito se necessario.
  • HLS:
    • Utilizza la preparazione dei blocchi se l'attributo CODECS della playlist non contiene il codec audio (#10065).
    • Non consentire di trasmettere null a HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory e HlsMediaSource.Factory.setPlaylistTrackerFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory o un riferimento a DefaultHlsPlaylistTracker.FACTORY possono essere passati esplicitamente, se necessario.
  • Streaming fluido:
    • Non consentire la trasmissione di null a SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory possono essere passate esplicitamente se necessario.
  • RTSP:
    • Aggiungi il lettore RTP per H263 (#63).
    • Aggiungi un lettore RTP per MPEG4 (#35).
    • Aggiungi un lettore RTP per HEVC (#36).
    • Aggiungi un lettore RTP per AMR. Attualmente sono supportati solo i flussi AMR mono-canale e senza interleaving. Il payload RTP AMR composto non è supportato. (n. 46)
    • Aggiungi il lettore RTP per VP8 (#47).
    • Aggiungi un lettore RTP per WAV (#56).
    • Correggi l'intestazione dell'autorizzazione di base RTSP. (#9544).
    • Interrompi il controllo dei campi SDP obbligatori perché non sono necessari da ExoPlayer (#10049).
    • Genera un'eccezione verificata durante l'analisi delle tempistiche RTSP (#10165).
    • Aggiungi un lettore RTP per VP9 (#47).
    • Aggiungi un lettore RTP per OPUS (#53).
  • Origini dati:
    • Rinomina DummyDataSource in PlaceholderDataSource.
    • Soluzione alternativa gestione dell'interruzione OkHttp.
  • Sessione:
    • Sostituisci MediaSession.MediaItemFiller con MediaSession.Callback.onAddMediaItems per consentire la risoluzione asincrona delle richieste.
    • Sono supportati i metodi setMediaItems(s) quando MediaController si connette a una sessione multimediale legacy.
    • Rimuovi MediaController.setMediaUri e MediaSession.Callback.onSetMediaUri. Puoi ottenere la stessa funzionalità utilizzando MediaController.setMediaItem e MediaSession.Callback.onAddMediaItems.
    • Inoltra le chiamate MediaController precedenti per riprodurre contenuti multimediali a MediaSession.Callback.onAddMediaItems anziché a onSetMediaUri.
    • Aggiungi MediaNotification.Provider e DefaultMediaNotificationProvider per personalizzare la notifica.
    • Aggiungi BitmapLoader e SimpleBitmapLoader per scaricare le immagini dell'artwork.
    • Aggiungi MediaSession.setCustomLayout() per garantire la compatibilità con le versioni precedenti con la sessione precedente.
    • Aggiungi MediaSession.setSessionExtras() per fornire la parità delle funzionalità con la sessione legacy.
    • Rinomina MediaSession.MediaSessionCallback in MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback in MediaLibrarySession.Callback e MediaSession.Builder.setSessionCallback in setCallback.
    • Correggi gli NPE in MediaControllerImplLegacy (#59).
    • Aggiornare le informazioni sulla posizione della sessione in caso di variazione della sequenza temporale(#51).
    • Correggi gli NPE in MediaControllerImplBase dopo aver rilasciato il controller (#74).
  • Riproduzione dell'annuncio / IMA:
    • Riduci la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms per allinearti ai consigli del Media Rating Council (MRC).
  • Estensione FFmpeg:
    • Aggiorna la versione di CMake a 3.21.0+ per evitare un bug di CMake che causa la mancata riuscita della sincronizzazione graduale di AndroidStudio (#9933).
  • Rimuovi i simboli ritirati:
    • Rimuovi Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Usa invece il criterio Player.Listener.onTracksChanged(Tracks).
    • Rimuovi Player.getCurrentTrackGroups e Player.getCurrentTrackSelections. Usa invece il criterio Player.getCurrentTracks. Puoi anche continuare a utilizzare ExoPlayer.getCurrentTrackGroups e ExoPlayer.getCurrentTrackSelections, anche se questi metodi rimangono deprecati.
    • Rimuovi le costanti DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT e DEFAULT_TRACK_SELECTOR_PARAMETERS. Usa getDefaultTrackSelectorParameters(Context) se possibile e DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT in caso contrario.
    • Rimuovi il costruttore DefaultTrackSelector(ExoTrackSelection.Factory). Usa invece il criterio DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Rimuovi Transformer.Builder.setContext. Il valore Context deve essere invece 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:
    • È stato corretto l'errore durante il controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
  • Estrattori:
    • FMP4: Risolvi il problema in cui i metadati di esempio dell'emsg potrebbero essere restituiti nell'ordine sbagliato per i flussi contenenti gli atomi di emsg v0 e v1 (#9996).
  • Testo:
    • Correggi l'interazione di SingleSampleMediaSource.Factory.setTrackId e MediaItem.SubtitleConfiguration.Builder.setId per dare la priorità al campo SubtitleConfiguration e utilizza nuovamente il valore Factory se non è impostato (#10016).
  • Riproduzione dell'annuncio:
    • Correggi gli inferimenti audio tra i periodi dell'annuncio negli stream HLS SSAI 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 al fabbrica dell'adattatore codec e passarlo a MediaCodecRenderer istanze che creano.
    • Propaga i campi di intestazione ICY name e genre rispettivamente a MediaMetadata.station e MediaMetadata.genre in modo che raggiungano l'app tramite Player.Listener.onMediaMetadataChanged() (#9677).
    • Rimuovi chiavi null da DefaultHttpDataSource#getResponseHeaders.
    • Sospendi e riprova quando la creazione di un'istanza MediaCodec non va a buon fine. Questo risolve un problema che si verifica su alcuni dispositivi quando si passa da un codec sicuro a un altro codec (#8696).
    • Aggiungi MediaCodecAdapter.getMetrics() per consentire agli utenti di ottenere i dati delle metriche da MediaCodec. (#9766).
    • Correggi la risoluzione delle dipendenze Maven (#8353).
    • Disattiva la regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di una richiesta dell'utente che imposti la velocità (#9329).
    • Rinomina DecoderCounters#inputBufferCount in queuedInputBufferCount.
    • Imposta SimpleExoPlayer.renderers come privato. È possibile accedere ai renderer tramite ExoPlayer.getRenderer.
    • Sono stati aggiornati alcuni valori della costante AnalyticsListener.EventFlags affinché corrispondano ai valori in Player.EventFlags.
    • Suddividi AnalyticsCollector in un'interfaccia e un'implementazione predefinita per consentirne la rimozione da parte di R8 se non è necessaria per un'app.
  • Selezione della traccia:
    • Supporto dei flag di ruolo video preferiti nella selezione della traccia (#9402).
    • Aggiorna la logica di selezione delle tracce video per tenere conto dei tipi MIME e dei flag di ruolo preferiti quando selezioni più tracce video per l'adattamento (#9519).
    • Aggiorna la logica di selezione delle tracce audio e video per scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto per decodificatore e hardware (#9565).
    • Aggiorna la logica di selezione delle tracce video per preferire codec più efficienti se più codec sono supportati da decoder primari con accelerazione hardware (#4835).
    • Preferisci le preferenze relative ai contenuti audio (ad esempio, la traccia audio "predefinita" o una traccia corrispondente alla lingua delle impostazioni internazionali di sistema) rispetto ai vincoli tecnici per la selezione delle tracce (ad esempio, tipo MIME preferito o numero massimo di canali).
    • Risolvi il problema di selezione delle tracce per cui l'override di un gruppo di tracce non disabilitava altri gruppi di tracce dello stesso tipo (#9675).
    • Risolvi il problema di selezione delle tracce per cui una combinazione di override delle tracce non vuote e vuote non viene applicata correttamente (#9649).
    • Vieta TrackGroup duplicati in un TrackGroupArray. È sempre possibile rendere distinguibili i TrackGroup impostando un id nel costruttore TrackGroup. È stato corretto un arresto anomalo durante la ripresa della riproduzione dopo aver eseguito l'override dell'app in background con un override della traccia attivo (#9718).
    • Modifica la logica in AdaptiveTrackSelection per consentire un aumento della qualità in una larghezza di banda di rete sufficiente anche se la riproduzione è molto vicina al live edge (#9784).
  • Video:
    • Correggi la logica di fallback del decoder per Dolby Vision per utilizzare un decodificatore H264/H265 compatibile, se necessario.
  • Audio:
    • Correggi la logica di fallback del decoder per Dolby Atmos (E-AC3-JOC) per utilizzare un decoder E-AC3 compatibile, se necessario.
    • Modifica le API AudioCapabilities in modo che richiedano il trasferimento esplicito AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES anziché null.
    • Consenti la personalizzazione del calcolo delle dimensioni del buffer AudioTrack inserendo un valore 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).
    • Correggi l'analisi errata delle unità NAL H.265 SPS (#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 di sottotitoli creata dalla configurazione (#9673).
    • Aggiunta del supporto di base per i sottotitoli WebVTT nei container Matroska (#9886).
    • Impedisci a Cea708Decoder di leggere dimensioni superiori a quelle dichiarate di un blocco di servizio.
  • DRM:
    • Rimuovi playbackLooper da DrmSessionManager.(pre)acquireSession. Quando un DrmSessionManager viene utilizzato da un'app in un MediaSource personalizzato, il playbackLooper deve essere invece trasmesso a DrmSessionManager.setPlayer.
  • Riproduzione dell'annuncio / IMA:
    • Aggiungi il supporto per inserimento di annunci dinamici (DAI) IMA (#8213).
    • Aggiungi un metodo a AdPlaybackState per consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615).
    • Imporre una velocità di riproduzione pari a 1,0 durante la riproduzione dell'annuncio (#9018).
    • Risolvi il problema per cui il caricamento di un gruppo di annunci non riuscito causava la reimpostazione immediata della riproduzione (#9929).
  • Interfaccia utente:
    • Correggi il colore dei numeri nei pulsanti Indietro e Avanti veloce di StyledPlayerView quando utilizzi determinati temi (#9765).
    • Traduci correttamente le stringhe della velocità di riproduzione (#9811).
  • DASH:
    • Aggiungi proprietà essenziali e supplementari analizzate a Representation (#9579).
    • Supporta il ruolo della traccia forced-subtitle (#9727).
    • Non interpretare più il ruolo della traccia main come C.SELECTION_FLAG_DEFAULT.
    • Correggi la logica di esclusione dell'URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
    • Supporta gli URL MPD.Location relativi (#9939).
  • HLS:
    • Inserisci correttamente Format.label per gli stream HLS solo audio (#9608).
    • Utilizza la preparazione senza blocchi per impostazione predefinita per migliorare i tempi di avvio. Se i tuoi rendimenti contengono tracce di sottotitolaggio codificato che non sono state dichiarate nella playlist principale, devi aggiungerle alla playlist principale in modo che siano disponibili per la riproduzione oppure disattivare la preparazione senza blocchi con HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • Supporta la ricerca accurata dei fotogrammi chiave in HLS (#2882).
  • RTSP:
    • Fornisci un'API client per eseguire l'override di SocketFactory utilizzato per qualsiasi connessione al server (#9606).
    • Preferisci il metodo di autenticazione DIGEST rispetto al metodo BASIC se sono presenti entrambi (#9800).
    • Gestisci quando la sincronizzazione delle tracce RTSP non è disponibile (#9775).
    • Ignora i valori dell'intestazione RTP-Info non validi (#9619).
  • Transformer:
    • Aumenta la versione minima dell'API richiesta a 21.
    • TransformationException viene ora utilizzato per descrivere gli errori che si verificano durante una trasformazione.
    • Aggiungi TransformationRequest per specificare le opzioni di trasformazione.
    • Consenti la registrazione di più listener.
    • È stato risolto il problema del blocco di Transformer quando l'output del codec è stato letto parzialmente.
    • Correggi i potenziali NPE in Transformer.getProgress quando rilasci i lanci muxer.
    • Aggiungi un'app demo per applicare le trasformazioni.
  • Estensione MediaSession:
    • Per impostazione predefinita, ora MediaSessionConnector cancella la playlist in caso di interruzione. Le app che vogliono che la playlist venga conservata possono chiamare setClearMediaItemsOnStop(false) sul connettore.
  • Estensione Cast:
    • Risolvi il bug che impediva a CastPlayer di chiamare correttamente onIsPlayingChanged (#9792).
    • Supporta i metadati audio, incluso l'artwork, con DefaultMediaItemConverter (#9663).
  • Estensione FFmpeg:
    • Imposta build_ffmpeg.sh in base agli util bin di LLVM anziché a 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 durante la creazione di PendingIntent (#9528).
  • Rimuovi i simboli ritirati:
    • Rimuovi Player.EventListener. Usa invece il criterio Player.Listener.
    • Rimuovi MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory e MediaSourceFactory#setDrmUserAgent. Usa invece MediaSourceFactory#setDrmSessionManagerProvider.
    • Rimuovi MediaSourceFactory#setStreamKeys. Usa invece MediaItem.Builder#setStreamKeys.
    • Rimuovi MediaSourceFactory#createMediaSource(Uri). Usa invece MediaSourceFactory#createMediaSource(MediaItem).
    • Rimuovi setTag da DashMediaSource, HlsMediaSource e SsMediaSource. Usa invece il criterio MediaItem.Builder#setTag.
    • Rimuovi DashMediaSource#setLivePresentationDelayMs(long, boolean). Utilizza MediaItem.Builder#setLiveConfiguration e MediaItem.LiveConfiguration.Builder#setTargetOffsetMs per eseguire l'override del file manifest o DashMediaSource#setFallbackTargetLiveOffsetMs per fornire un valore di riserva.
    • Rimuovi (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Non è più possibile disattivare l'applicazione forzata dei thread.
    • Rimuovi ActionFile e ActionFileUpgradeUtil. Usa ExoPlayer 2.16.1 o prima per usare ActionFileUpgradeUtil per unire i file di azioni legacy in DefaultDownloadIndex.
    • Rimuovi ProgressiveMediaSource#setExtractorsFactory. Usa invece ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) il costruttore.
    • Rimuovi ProgressiveMediaSource.Factory#setTag ed e ProgressiveMediaSource.Factory#setCustomCacheKey. Utilizza invece 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. Usa invece CronetDataSource.Factory.
  • Modifica il seguente valore IntDefs solo per @Target(TYPE_USE). Questo potrebbe interrompere la compilazione degli utilizzi in Kotlin, che può essere risolta spostando l'annotazione per annotare il tipo (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (nel pacchetto com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (nel pacchetto com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Versione 1.0.0-alpha01

27 ottobre 2021

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

Nuove funzionalità

Media3 è la nuova dimora per le librerie che supportano i contenuti multimediali, tra cui ExoPlayer. La prima versione alpha contiene implementazioni iniziali e funzionali delle 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à di sessione multimediale, per visualizzare e controllare le riproduzioni. Questo nuovo modulo di sessione utilizza la stessa interfaccia Player di ExoPlayer.
  • Componenti UI per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
  • Funzionalità di wrapping di moduli in altre librerie da utilizzare con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.

Per ulteriori informazioni, consulta il progetto GitHub di Media3.

ExoPlayer era precedentemente ospitato in un progetto GitHub ExoPlayer separato. In Media3, il nome del pacchetto è androidx.media3.exoplayer. Prevediamo di continuare a gestire e rilasciare il progetto GitHub ExoPlayer per un po' di tempo per dare alle app il tempo di eseguire la migrazione a Media3. Media3 sostituisce tutti i moduli ExoPlayer, ad eccezione delle estensioni media2 e mediasession legacy, che vengono sostituite dal nuovo modulo media3-session. Ciò consente l'integrazione diretta tra player e sessioni multimediali senza bisogno di utilizzare una classe adattatore/connettore.