Media3
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Alpha Release |
---|---|---|---|---|
2 luglio 2025 | 1.7.1 | - | 1.8.0-beta01 | 1.8.0-alpha01 |
Dichiarazione di dipendenze
Per aggiungere una dipendenza da Media3, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle
per
la tua app o il tuo modulo:
Alla moda
dependencies { def media3_version = "1.6.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.6.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare lo strumento di monitoraggio dei problemi di Media3 per trovare risposte a domande, problemi noti e richieste di funzionalità e per segnalare nuovi problemi.
Versione 1.8.0
Versione 1.8.0-beta01
2 luglio 2025
androidx.media3:media3-*:1.8.0-beta01
viene ritirata.
La versione 1.8.0-beta01 contiene questi commit.
- Libreria comune:
- Aggiungi il supporto per la sostituzione del giocatore in
ForwardingSimpleBasePlayer
.
- Aggiungi il supporto per la sostituzione del giocatore in
- ExoPlayer:
- Aggiungi il supporto per l'utilizzo dell'ID dispositivo virtuale di
Context
passato aExoPlayer.Builder
. - Attiva la pianificazione dinamica per impostazione predefinita in modalità di scrubbing.
- Evita il ricaricamento non necessario di una fonte quando cerchi la fine di un elemento.
- Utilizza
MediaCodec.BUFFER_FLAG_DECODE_ONLY
per impostazione predefinita in modalità di scorrimento. - Genera
IllegalStateException
quandoPreloadMediaSource
viene riprodotto da unExoPlayer
con un thread di riproduzione diverso dal thread di precaricamento (#2495). - Aggiungi
cloneAndMove
aShuffleMode
con un'implementazione predefinita (#2226). - Modifica il comportamento predefinito di
Renderer.getMinDurationToProgressUs
in modo che restituisca un valore maggiore se non è richiesta alcuna chiamata arender
. - È stato corretto un bug per cui la pianificazione interna ritardava l'ultimo fotogramma durante la ricerca alla fine della riproduzione in pausa. Per ora, la correzione del bug ha effetto solo se
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled
è abilitato.
- Aggiungi il supporto per l'utilizzo dell'ID dispositivo virtuale di
- Transformer:
- Aggiungi
CodecDbLite
che consente ottimizzazioni specifiche del chipset delle impostazioni di codifica video. - Aggiungi il flag
setEnableCodecDbLite
aDefaultEncoderFactory
per attivare l'ottimizzazione delle impostazioni di CodecDB Lite. Per impostazione predefinita, questo flag è impostato su false.
- Aggiungi
- Estrattori:
- Aggiungi il supporto per la ricerca in MP4 frammentati con più atomi
sidx
. Questo comportamento può essere attivato utilizzando il flagFLAG_MERGE_FRAGMENTED_SIDX
suFragmentedMp4Extractor
(#9373). - Ignora le tabelle di ricerca vuote nei file FLAC (incluse quelle contenenti solo punti di ricerca segnaposto) e ripristina la ricerca binaria se la durata del file è nota (#2327).
- È stato corretto l'analisi delle unità SEI H.265 per ignorare completamente i tipi SEI non riconosciuti (#2456).
- Aggiorna
WavExtractor
in modo che utilizzi i dati SubFormat dell'estensione dell'intestazione per il formato audio durante l'analisi di un file di tipoWAVE_FORMAT_EXTENSIBLE
. - MP4: aggiungi il supporto per le caselle
ipcm
efpcm
che definiscono le tracce audio PCM non elaborate (il PCM in virgola mobile a 64 bit non è supportato). - MP4: gestisce la parte di rotazione delle matrici di trasformazione
tkhd
che ruotano e riflettono il video. In questo modo, i video riflessi realizzati dalla fotocamera anteriore dell'iPhone vengono visualizzati nel modo corretto, ma riflessi in modo errato sull'asse Y (#2012).
- Aggiungi il supporto per la ricerca in MP4 frammentati con più atomi
- Audio:
- Aggiungi il supporto di tutti i formati di campioni PCM lineari in
ChannelMappingAudioProcessor
eTrimmingAudioProcessor
. - Aggiungi il supporto per i vuoti audio in
CompositionPlayer
. - Rimuovi chiamata fraudolenta a
BaseAudioProcessor#flush()
daBaseAudioProcessor#reset()
.
- Aggiungi il supporto di tutti i formati di campioni PCM lineari in
- Video:
- Migliora il rilascio dei frame video fluidi all'avvio quando i campioni audio non iniziano esattamente nella posizione richiesta.
- Estendi la soluzione alternativa per la superficie staccata ai dispositivi "realme" (#2059).
- Testo:
- Correzione di un blocco della riproduzione quando un segmento di sottotitoli non viene caricato inizialmente e viene caricato correttamente in un secondo momento, seguito da diversi segmenti di sottotitoli vuoti (#2517).
- Metadati:
- Aggiunto il supporto per il recupero della durata dei contenuti multimediali e di
Timeline
aMetadataRetriever
e migrato a un'APIAutoCloseable
basata su istanze. Utilizza il nuovoBuilder
per creare un'istanza per unMediaItem
, quindi chiamaretrieveTrackGroups()
,retrieveTimeline()
, eretrieveDurationUs()
per ottenereListenableFuture
per i metadati. I metodi statici precedenti sono ora deprecati (#2462).
- Aggiunto il supporto per il recupero della durata dei contenuti multimediali e di
- Immagine:
- Limita le bitmap decodificate alle dimensioni del display in
BitmapFactoryImageDecoder
per evitare che un'app si arresti in modo anomalo conCanvas: trying to draw too large bitmap.
daPlayerView
quando tenta di visualizzare immagini molto grandi (ad es. 50 MP). - Modifica la firma di
DefaultRenderersFactory.getImageDecoderFactory()
per accettare un parametroContext
. - Allinea la dimensione massima di output bitmap utilizzata in
CompositionPlayer
a quella già utilizzata inTransformer
(ovveroCompositionPlayer
non considera la dimensione del display durante la decodifica delle bitmap, a differenza diExoPlayer
).
- Limita le bitmap decodificate alle dimensioni del display in
- Muxer:
- Correzione di un bug per cui non venivano impostati i flag di esempio corretti per i campioni audio in MP4 frammentato.
- Sessione:
- Correzione del bug per cui la chiamata di
setSessionExtras
dal thread principale durante l'esecuzione del player da un thread dell'applicazione diverso dal thread principale causava unIllegalStateException
(#2265). - Non mostrare automaticamente una notifica se un player è configurato con elementi multimediali
senza prepararli o riprodurli
(#2423https://github.com/androidx/media/issues/2423). Questo comportamento
è configurabile tramite
MediaSessionService.setShowNotificationForIdlePlayer
. - Aggiungi
PlaybackException
personalizzati per tutti i controller o per quelli selezionati. - Correzione del bug per cui la ricerca in un live streaming su un
MediaController
può causare unIllegalArgumentException
. - Per i live streaming, interrompi la pubblicazione di una posizione di riproduzione e la possibilità di cercare nell'elemento corrente i controlli multimediali della piattaforma, per evitare artefatti di posizione nella UI di Android Auto (e in altri controlli che utilizzano queste informazioni dalla sessione multimediale della piattaforma) (#1758).
- Correzione del bug per cui la chiamata di
- Estensione Cronet:
- Aggiungi la gestione automatica dei cookie (#5975).
- Estensione HLS:
- Correggi l'analisi delle playlist per accettare
\f
(avanzamento modulo) nei valori degli attributi delle stringhe tra virgolette (#2420). - Supporto dell'aggiornamento degli interstitial con lo stesso ID (#2427).
- È stato corretto un bug per cui a volte gli errori di caricamento delle playlist non vengono propagati una volta che un live streaming esaurisce i segmenti da caricare (#2401https://github.com/androidx/media/issues/2401).
- Raggruppa le versioni dei sottotitoli codificati in base al tag NAME, in modo simile a come vengono raggruppate le versioni audio (#1666).
- Correggi l'analisi delle playlist per accettare
- Estensione DASH:
- Correzione del bug per cui l'abbreviazione della durata di un periodo DASH può generare un'eccezione quando i campioni oltre la nuova durata sono già stati letti dalla pipeline di rendering (#2440).
- Correzione del bug per cui il reindirizzamento non veniva seguito quando si utilizzavano i parametri di ricerca CMCD (#2475).
- Estensione RTSP:
- Correzione di
RtspClient
per utilizzare l'URI della posizione fornito durante l'elaborazione di una risposta HTTP 302 (#2398).
- Correzione di
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Correzione del bug per cui
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
non ha effetto per le estensioni del decodificatore audio (#2258).
- Correzione del bug per cui
- Estensione Cast:
- Aggiungi il supporto per
setVolume()
egetVolume()
(#2279). - Impedisci a CastPlayer di entrare in STATE_BUFFERING mentre la cronologia è vuota.
- Aggiungi il supporto per
- Test Utilities:
- Aggiungi
advance(player).untilPositionAtLeast
euntilMediaItemIndex
aTestPlayerRunHelper
per far avanzare il giocatore fino a raggiungere una posizione specificata. Nella maggior parte dei casi, questi metodi sono più affidabili dei metodiuntilPosition
euntilStartOfMediaItem
esistenti. - Sposta
FakeDownloader
nel modulotest-utils-robolectric
per riutilizzarlo in altri test.
- Aggiungi
Versione 1.8.0-alpha01
19 maggio 2025
androidx.media3:media3-*:1.8.0-alpha01
viene ritirata.
La versione 1.8.0-alpha01 contiene
questi commit.
- ExoPlayer:
- Aggiungi il metodo
ExoPlayer.setScrubbingModeEnabled(boolean)
. In questo modo, il player viene ottimizzato per molte ricerche frequenti (ad esempio, quando un utente trascina una barra di scorrimento). Il comportamento della modalità di scorrimento può essere personalizzato consetScrubbingModeParameters(..)
suExoPlayer
eExoPlayer.Builder
. - Consenti la personalizzazione della tolleranza di ricerca frazionaria in modalità di pulizia.
- Aumenta la velocità di funzionamento del codec in modalità Scrubbing.
- Correzione del bug per cui gli errori di preparazione nei contenuti di
AdsMediaSource
potrebbero non essere mai segnalati (#2337). - Correzione della perdita di memoria in
MergingMediaSource
, ad esempio utilizzata durante il caricamento laterale dei sottotitoli (#2338). - Consenti a
CmcdConfiguration.Factory
di restituirenull
per disattivare la registrazione CMCD per elementi multimediali specifici (#2386). - Aumenta la dimensione predefinita del buffer delle immagini da 128 kB (errore di copia e incolla dalle tracce di testo) a 26 MB, una dimensione sufficiente per le immagini Ultra HDR da 50 MP (#2417).
- Aggiungi
PreCacheHelper
che consente alle app di pre-memorizzare nella cache un singolo media con posizione iniziale e durata specificate.
- Aggiungi il metodo
- Transformer:
- Il riempimento di un intervallo iniziale (aggiunto tramite
addGap()
) con audio silenzioso ora richiede l'impostazione esplicita diexperimentalSetForceAudioTrack(true)
inEditedMediaItemSequence.Builder
. Se la lacuna si trova al centro della sequenza, questo flag non è obbligatorio. - Sposta l'interfaccia
Muxer
damedia3-transformer
amedia3-muxer
. - Rendi obbligatoria l'impostazione
MediaItem.Builder().setImageDuration(long)
per importare un elemento multimediale come immagine. - Aggiungi
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)
che include un elenco di modifiche MP4 durante il taglio per indicare ai giocatori di ignorare i campioni tra il fotogramma chiave prima del punto di inizio del taglio e il punto di inizio del taglio. - Aggiorna l'app demo di composizione per utilizzare Kotlin e Jetpack Compose e aggiungi un
VideoCompositorSettings
personalizzato per disporre le sequenze in un layout 2x2 o PIP.
- Il riempimento di un intervallo iniziale (aggiunto tramite
- Estrattori:
- MP3: utilizza la durata e le dimensioni dei dati dei metadati Xing, VBRI e simili a bitrate variabile non ricercabili quando esegui il fallback alla ricerca a bitrate costante a causa di
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
(#2194).
- MP3: utilizza la durata e le dimensioni dei dati dei metadati Xing, VBRI e simili a bitrate variabile non ricercabili quando esegui il fallback alla ricerca a bitrate costante a causa di
- Audio:
- Consenti l'upsampling/downsampling costante della potenza in DefaultAudioMixer.
- Rendi pubblici
ChannelMappingAudioProcessor
,TrimmingAudioProcessor
eToFloatPcmAudioProcessor
(#2339). - Utilizza
AudioTrack#getUnderrunCount()
inAudioTrackPositionTracker
per rilevare gli underrun inDefaultAudioSink
anziché la stima ottimale. - Migliora l'uniformità dei timestamp audio per la deriva imprevista della posizione dal dispositivo di uscita audio.
- Correzione del bug per cui la sincronizzazione A/V non funziona per i primi 10 secondi dopo la riproduzione dopo la pausa quando si è connessi a dispositivi Bluetooth.
- Correzione del bug per cui
AnalyticsListener.onAudioPositionAdvancing
non registrava l'ora in cui l'audio iniziava ad avanzare, ma l'ora della prima misurazione.
- Video:
- Aggiungi l'API sperimentale
ExoPlayer
per includere il flagMediaCodec.BUFFER_FLAG_DECODE_ONLY
durante l'accodamento dei buffer di input di sola decodifica. Questo flag segnala al decoder di saltare i buffer di sola decodifica, con conseguente ricerca più rapida. Attivalo conDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag
. - Migliora i controlli delle prestazioni dei codec per i codec video software. Ciò potrebbe
comportare la classificazione di alcune tracce aggiuntive come
EXCEEDS_CAPABILITIES
. - Correzione degli errori di riproduzione VP9 Widevine su alcuni dispositivi (#2408).
- Aggiungi l'API sperimentale
- Testo:
- Correzione di SSA e SubRip per visualizzare un cue in corso durante l'attivazione dei sottotitoli codificati (#2309).
- È stato risolto il problema di blocco della riproduzione quando si passa da uno stream con un errore nei sottotitoli codificati a un live streaming con una traccia dei sottotitoli codificati vuota (#2328).
- È stato risolto il problema relativo ai sottotitoli codificati CEA-608 illeggibili durante la riproduzione di stream H.262 contenenti B-frame (#2372).
- Aggiungi il supporto per i sottotitoli SSA con
CodecId = S_TEXT/SSA
nei file Matroska. In precedenza,MatroskaExtractor
supportava soloCodecId = S_TEXT/ASS
, che ha lo scopo di rappresentare la variante "avanzata" (v4+) dei sottotitoli SubStation Alpha (ma la logica di analisi di ExoPlayer è la stessa per entrambe le varianti) (#2384). - Aggiungi il supporto della proprietà
layer
nei file di sottotitoli SubStation Alpha (SSA), che viene utilizzata per definire l'ordine di visualizzazione delle battute quando più di una viene mostrata sullo schermo contemporaneamente (#2124).
- Effetto:
- Aggiungi
Presentation.createForShortSide(int)
che crea unPresentation
che garantisce che il lato più corto corrisponda sempre al valore specificato, indipendentemente dall'orientamento dell'input.
- Aggiungi
- Muxer:
- L'API
writeSampleData()
ora utilizza la classeBufferInfo
specifica del muxer anzichéMediaCodec.BufferInfo
. - Aggiungi
Muxer.Factory#supportsWritingNegativeTimestampsInEditList
, che è impostato su false per impostazione predefinita.
- L'API
- Estensione IMA:
- È stato corretto un bug per cui un errore di caricamento in un annuncio poteva invalidare accidentalmente un altro gruppo di annunci.
- È stato corretto il bug a causa del quale la riproduzione dei gruppi di annunci dopo la fine di una finestra VOD si bloccava.
I gruppi di annunci con un orario di inizio successivo alla finestra non vengono più inseriti nella coda di
MediaPeriodQueue
(#2215).
- Sessione:
- È stato corretto un bug per cui il passaggio di un valore nullo in
getLibraryRoot
di unMediaBrowser
collegato a unMediaBrowserServiceCompat
legacy produceva unNullPointerException
. - È stato corretto un bug per cui l'invio di azioni personalizzate, di un risultato di ricerca o di una
richiesta getItem causava l'arresto anomalo dell'app di sessione precedente con un
ClassNotFoundException
. - È stato corretto un bug per cui
MediaItem.LocalConfiguration.uri
veniva condiviso conMediaMetadata
delle sessioni della piattaforma. Per condividere intenzionalmente un URI per consentire ai controller di richiedere nuovamente i contenuti multimediali, impostaMediaItem.RequestMetadata.mediaUri
.
- È stato corretto un bug per cui il passaggio di un valore nullo in
- UI:
- Correzione di un bug di Compose che causava un intervallo tra l'impostazione degli stati iniziali dei pulsanti e l'osservazione della modifica dello stato (ad es. forme delle icone o attivazione). Eventuali modifiche apportate al giocatore al di fuori del periodo di osservazione vengono ora rilevate (#2313).
- Aggiungi state holder e composable al modulo
media3-ui-compose
perSeekBackButtonState
eSeekForwardButtonState
. - Aggiungi il supporto della modalità di scorrimento di ExoPlayer a
PlayerControlView
. Se attivata, questa modalità mette il player in modalità di scorrimento quando l'utente inizia a trascinare la barra di scorrimento, invia una chiamataplayer.seekTo
per ogni movimento e poi esce dalla modalità di scorrimento quando il tocco viene sollevato dallo schermo. Questa integrazione può essere attivata contime_bar_scrubbing_enabled = true
in XML o con il metodosetTimeBarScrubbingEnabled(boolean)
di Java/Kotlin. - Fai in modo che
PlayerSurface
accetti un argomentoPlayer
che ammette valori null.
- Download:
- Aggiungi il supporto per il download parziale per gli stream progressivi. Le app possono preparare uno
stream progressivo con
DownloadHelper
e richiedere unDownloadRequest
dall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. Il valore restituitoDownloadRequest
contiene l'intervallo di byte risolto, con il quale è possibile creare unProgressiveDownloader
e scaricare i contenuti corrispondenti. - Aggiungi
DownloadHelper.Factory
con cui vengono sostituiti i metodi staticiDownloadHelper.forMediaItem()
. - Aggiungi
Factory
per le implementazioni diSegmentDownloader
. - Aggiungi il supporto per il download parziale per gli stream adattivi. Le app possono preparare uno stream adattivo con
DownloadHelper
e richiedere unDownloadRequest
dall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. IlDownloadRequest
restituito contiene l'intervallo di tempo risolto, con il quale è possibile creare unSegmentDownloader
concreto e scaricare i contenuti corrispondenti.
- Aggiungi il supporto per il download parziale per gli stream progressivi. Le app possono preparare uno
stream progressivo con
- Estensione HLS:
- Supporta X-ASSET-LIST e i live streaming con
HlsInterstitialsAdsLoader
.
- Supporta X-ASSET-LIST e i live streaming con
- Estensione RTSP:
- Aggiunta del supporto dell'analisi per SessionDescriptions contenenti righe con caratteri di spazio vuoto finali (#2357).
- Estensione Cast:
- Aggiungi il supporto per
getDeviceVolume()
,setDeviceVolume()
,getDeviceMuted()
esetDeviceMuted()
(#2089).
- Aggiungi il supporto per
- Test Utilities:
transformer.TestUtil.addAudioDecoders(String...)
,transformer.TestUtil.addAudioEncoders(String...)
etransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)
rimossi. UtilizzaShadowMediaCodecConfig
per configurare encoder e decoder ombra.- Il prefisso "exotest" è stato sostituito con "media3" nei nomi dei codec segnalati da
ShadowMediaCodecConfig
.
- Rimuovi i simboli ritirati:
- Rimosso il costruttore
SegmentDownloader
deprecatoSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)
e i costruttori corrispondenti nelle relative sottoclassiDashDownloader
,HlsDownloader
eSsDownloader
. - Rimozione di
Player.hasNext()
,Player.hasNextWindow()
obsoleti. UtilizzaPlayer.hasNextMediaItem()
. - Rimossa
Player.next()
obsoleta. Utilizza invecePlayer.seekToNextMediaItem()
. - Rimossa
Player.seekToPreviousWindow()
obsoleta. UtilizzaPlayer.seekToPreviousMediaItem()
. - Rimossa
Player.seekToNextWindow()
obsoleta. UtilizzaPlayer.seekToNextMediaItem()
. - Rimozione di
BaseAudioProcessor
deprecato nel moduloexoplayer
. UtilizzaBaseAudioProcessor
nel modulocommon
. - Rimuovi il costruttore
MediaCodecVideoRenderer
deprecatoMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)
.
- Rimosso il costruttore
Versione 1.7.0
Versione 1.7.1
16 maggio 2025
Questa release ha lo stesso codice della 1.6.1 e viene rilasciata per garantire che venga visualizzata come release "più recente" rispetto alla 1.7.0, che era una release alpha taggata per errore come stabile (vedi sotto).
Versione 1.7.0
16 maggio 2025
Questa release avrebbe dovuto essere 1.7.0-alpha01
, ma è stata erroneamente taggata
1.7.0
(ovvero stabile) su maven.google.com. Non utilizzarla. Rimani sulla versione 1.6.1 o esegui l'upgrade alla versione 1.7.1 (che ha lo stesso codice della versione 1.6.1).
Versione 1.6.0
1.6.1
14 aprile 2025
androidx.media3:media3-*:1.6.1
viene ritirata.
La versione 1.6.1 contiene
questi commit.
- Libreria comune:
- Aggiungi il metodo
PlaybackParameters.withPitch(float)
per copiare facilmente unPlaybackParameters
con un nuovo valorepitch
(#2257).
- Aggiungi il metodo
- ExoPlayer:
- È stato risolto il problema per cui la transizione degli elementi multimediali non riusciva a causa di un errore recuperabile del renderer durante l'inizializzazione dell'elemento multimediale successivo (#2229).
- È stato risolto il problema a causa del quale
ProgressiveMediaPeriod
genera unIllegalStateException
quandoPreloadMediaSource
tenta di chiamare il suogetBufferedDurationUs()
prima che sia pronto (#2315). - Correzione dell'invio di
CmcdData
nelle richieste di manifest per DASH, HLS e Smooth Streaming (#2253). - Assicurati che
AdPlaybackState.withAdDurationsUs(long[][])
possa essere utilizzato dopo la rimozione dei gruppi di annunci. L'utente deve comunque trasmettere un array di durate per i gruppi di annunci rimossi, che può essere vuoto o nullo (#2267).
- Estrattori:
- MP4: analizza
alternate_group
dalla casellatkhd
ed esponilo come voceMp4AlternateGroupData
nelFormat.metadata
di ogni traccia (#2242).
- MP4: analizza
- Audio:
- Correzione del problema di scaricamento in cui la posizione potrebbe bloccarsi durante la riproduzione di una playlist di contenuti brevi (#1920).
- Sessione:
- Riduzione del timeout di aggregazione per i callback della piattaforma
MediaSession
da 500 a 100 millisecondi e aggiunta di un setter sperimentale per consentire alle app di configurare questo valore. - Risolto il problema per cui le notifiche riappaiono dopo essere state chiuse dall'utente (#2302).
- Correzione di un bug per cui la sessione restituiva una cronologia di un solo elemento quando il
lettore incorporato è in realtà vuoto. Questo si è verificato quando il player incorporato
non dispone di
COMMAND_GET_TIMELINE
mentreCOMMAND_GET_CURRENT_MEDIA_ITEM
è disponibile e il player incorporato è vuoto (#2320). - Correzione di un bug per cui la chiamata di
MediaSessionService.setMediaNotificationProvider
viene ignorata dopo altre interazioni con il servizio, ad esempiosetForegroundServiceTimeoutMs
(#2305).
- Riduzione del timeout di aggregazione per i callback della piattaforma
- UI:
- Attiva
PlayerSurface
per utilizzareExoPlayer.setVideoEffects
eCompositionPlayer
. - Correzione del bug per cui
PlayerSurface
non può essere ricomposto con un nuovoPlayer
.
- Attiva
- Estensione HLS:
- È stato risolto il problema per cui la durata del chunk non veniva impostata in
CmcdData
per i contenuti multimediali HLS, causando un errore di asserzione durante l'elaborazione dei segmenti multimediali criptati (#2312).
- È stato risolto il problema per cui la durata del chunk non veniva impostata in
- Estensione RTSP:
- Aggiungi il supporto per l'URI con lo schema RTSPT come modo per configurare la sessione RTSP in modo che utilizzi TCP (#1484).
- Estensione Cast:
- Aggiunta del supporto per i metadati delle playlist (#2235).
1.6.0
26 marzo 2025
androidx.media3:media3-*:1.6.0
viene ritirata.
La versione 1.6.0 contiene
questi commit.
- Libreria comune:
- Aggiungi
AudioManagerCompat
eAudioFocusRequestCompat
per sostituire le classi equivalenti inandroidx.media
. - Esegui l'upgrade di Kotlin dalla versione 1.9.20 alla 2.0.20 e utilizza il plug-in Gradle di Compose Compiler. Esegui l'upgrade della libreria KotlinX Coroutines dalla versione 1.8.1 alla 1.9.0.
- Rimuovi il metodo
Format.toBundle(boolean excludeMetadata)
, utilizzaFormat.toBundle()
. - Corretto un bug in
SimpleBasePlayer
in cui l'impostazione di un nuovocurrentMediaItemIndex
inState
doposetPlaylist
connull
MediaMetadata
non rivaluta i metadati (#1940). - Modifica l'accesso a
SimpleBasePlayer.State
da protetto a pubblico per semplificare la gestione degli aggiornamenti in altre classi (#2128).
- Aggiungi
- ExoPlayer:
- Aggiungi
MediaExtractorCompat
, una nuova classe che fornisce funzionalità equivalenti alla piattaformaMediaExtractor
. - Aggiungi il supporto sperimentale del pre-riscaldamento "ExoPlayer" per la riproduzione utilizzando
MediaCodecVideoRenderer
. Puoi configurareDefaultRenderersFactory
tramiteexperimentalSetEnableMediaCodecVideoRendererPrewarming
per fornire unMediaCodecVideoRenderer
secondario aExoPlayer
. Se attivata,ExoPlayer
pre-elabora il video di elementi multimediali consecutivi durante la riproduzione per ridurre la latenza di transizione degli elementi multimediali. - Riduci i valori predefiniti per
bufferForPlaybackMs
ebufferForPlaybackAfterRebufferMs
inDefaultLoadControl
a 1000 e 2000 ms rispettivamente. - Inizializza
DeviceInfo
e il volume del dispositivo in modo asincrono (se abilitato utilizzandosetDeviceVolumeControlEnabled
). Questi valori non sono disponibili immediatamente dopoExoPlayer.Builder.build()
ePlayer.Listener
notifica le modifiche tramiteonDeviceInfoChanged
eonDeviceVolumeChanged
. - L'ID sessione audio iniziale non è più disponibile immediatamente dopo la creazione del player. Puoi utilizzare
AnalyticsListener.onAudioSessionIdChanged
per ascoltare l'aggiornamento iniziale, se necessario. - Tieni conto della lingua quando selezioni una traccia video. Per impostazione predefinita, seleziona una traccia video "principale" che corrisponda alla lingua della traccia audio selezionata, se disponibile. Le preferenze esplicite per la lingua dei video possono essere
espresse con
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
. - Aggiungi il parametro
selectedAudioLanguage
al metodoDefaultTrackSelector.selectVideoTrack()
. - Aggiungi il parametro
retryCount
aMediaSourceEventListener.onLoadStarted
e i metodiMediaSourceEventListener.EventDispatcher
corrispondenti. - È stato corretto il bug a causa del quale gli elementi della playlist o i periodi nei flussi DASH multi-periodo con durate che non corrispondono ai contenuti effettivi potevano causare blocchi dei fotogrammi alla fine dell'elemento (#1698).
- Sposta
BasePreloadManager.Listener
in un elemento di primo livelloPreloadManagerListener
. RenderersFactory.createSecondaryRenderer
può essere implementato per fornire renderer secondari per il pre-riscaldamento. Il pre-riscaldamento consente transizioni più rapide tra gli elementi multimediali durante la riproduzione.- Attiva l'invio di
CmcdData
per le richieste di manifest nei formati di streaming adattivo DASH, HLS e Smooth Streaming (#1951). - Fornisci
MediaCodecInfo
del codec che verrà inizializzato inMediaCodecRenderer.onReadyToInitializeCodec
(#1963). - Modifica
AdsMediaSource
per consentire aAdPlaybackStates
di crescere aggiungendo gruppi di annunci. Vengono rilevate modifiche non valide e viene generata un'eccezione. - È stato risolto il problema a causa del quale potevano essere visualizzati fotogrammi aggiuntivi di sola decodifica in rapida successione durante la transizione ai contenuti multimediali dopo un annuncio mid-roll.
- Imposta
DefaultRenderersFactory
in modo che aggiunga due istanze diMetadataRenderer
per consentire alle app di ricevere due diversi schemi di metadati per impostazione predefinita. - Rivaluta se il caricamento in corso di un chunk deve essere annullato quando la riproduzione viene sospesa (#1785).
- Aggiunta dell'opzione
ClippingMediaSource
per consentire il ritaglio nei contenuti multimediali non riproducibili. - È stato corretto un bug per cui la ricerca con il pre-riscaldamento poteva bloccare la transizione all'elemento multimediale successivo.
- È stato corretto un bug per cui
ExoPlayer.isLoading()
rimanetrue
mentre è passato aSTATE_IDLE
oSTATE_ENDED
(#2133). - Aggiungi
lastRebufferRealtimeMs
aLoadControl.Parameter
(#2113).
- Aggiungi
- Transformer:
- Aggiungi il supporto per il transmuxing in formati alternativi compatibili con le versioni precedenti.
- Aggiungi il supporto per la transcodifica e il transmuxing del formato Dolby Vision (profilo 8).
- Aggiorna i parametri di
VideoFrameProcessor.registerInputStream
eVideoFrameProcessor.Listener.onInputStreamRegistered
per utilizzareFormat
. - Genera metadati statici HDR quando utilizzi
DefaultEncoderFactory
. - Attiva il supporto per la diagnostica della piattaforma Android utilizzando
MediaMetricsManager
. Transformer inoltra gli eventi di modifica e i dati sul rendimento alla piattaforma, il che contribuisce a fornire informazioni sul rendimento del sistema e sul debug sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostici è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per Transformer conTransformer.Builder.setUsePlatformDiagnostics(false)
. - Dividi
InAppMuxer
inInAppMp4Muxer
eInAppFragmentedMp4Muxer
.InAppMp4Muxer
viene utilizzato per produrre un file MP4 non frammentato, mentreInAppFragmentedMp4Muxer
per produrre un file MP4 frammentato. - Sposta l'interfaccia
Muxer
damedia3-muxer
amedia3-transformer
. - Aggiungi
MediaProjectionAssetLoader
, che fornisce contenuti multimediali da unMediaProjection
per la registrazione dello schermo, e aggiungi il supporto per la registrazione dello schermo all'app demo Transformer. - Aggiungi
#getInputFormat()
all'interfacciaCodec
. - Trasferisci la responsabilità di rilasciare il
GlObjectsProvider
al chiamante inDefaultVideoFrameProcessor
eDefaultVideoCompositor
quando possibile.
- Estrattori:
- AVI: correzione della gestione dei file con audio compresso a bitrate costante in cui l'intestazione del flusso memorizza il numero di byte anziché il numero di chunk.
- Correzione della gestione delle unità NAL con lunghezze espresse in 1 o 2 byte (anziché 4).
- Correzione di
ArrayIndexOutOfBoundsException
negli elenchi di modifica MP4 quando l'elenco di modifica inizia con un frame non sincronizzato senza frame di sincronizzazione precedente (#2062). - È stato risolto un problema per cui gli stream TS potevano bloccarsi su alcuni dispositivi (#2069).
- FLAC: aggiungi il supporto per i file FLAC a 32 bit. In precedenza, la riproduzione non riusciva
con
IllegalStateException: Playback stuck buffering and not loading
(#2197).
- Audio:
- Correggi
onAudioPositionAdvancing
in modo che venga chiamato quando la riproduzione riprende (in precedenza veniva chiamato quando la riproduzione veniva messa in pausa). - Non ignorare
SonicAudioProcessor
quandoSpeedChangingAudioProcessor
è configurato con i parametri predefiniti. - È stato corretto un problema di underflow in
Sonic#getOutputSize()
che poteva causare l'interruzione diDefaultAudioSink
. - Correggi
MediaCodecAudioRenderer.getDurationToProgressUs()
eDecoderAudioRenderer.getDurationToProgressUs()
in modo che le ricerche ripristinino correttamente le durate fornite. - Rendi
androidx.media3.common.audio.SonicAudioProcessor
definitivo. - Aggiungi il supporto per float PCM a
ChannelMappingAudioProcessor
eTrimmingAudioProcessor
.
- Correggi
- Video:
- Modifica
MediaCodecVideoRenderer.shouldUsePlaceholderSurface
in protetto in modo che le applicazioni possano eseguire l'override per bloccare l'utilizzo di segnalazioni segnaposto (#1905). - Aggiungi l'analisi delle dipendenze dei campioni
ExoPlayer
AV1 sperimentale per velocizzare la ricerca. Abilitala con la nuova APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies
. - Aggiungi l'API sperimentale
ExoPlayer
per eliminare i buffer di input del decodificatoreMediaCodecVideoRenderer
in ritardo da cui non dipende. Attivalo conDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs
. - È stato risolto il problema per cui un giocatore senza una superficie era pronto immediatamente e decodificava molto lentamente i frame in attesa (#1973).
- Escludi i dispositivi Xiaomi e OPPO dalla modalità con superficie staccata per evitare lo sfarfallio dello schermo (#2059).
- Modifica
- Testo:
- Aggiunta del supporto per i sottotitoli VobSub (#8260).
- Interrompi il caricamento eager di tutti i file dei sottotitoli codificati con
MediaItem.Builder.setSubtitleConfigurations
e carica solo un file se viene selezionato dalla selezione della traccia (#1721). - TTML: aggiungi il supporto per il riferimento a
tts:origin
etts:extent
utilizzandostyle
(#2953). - Limita i timestamp WebVTT e SubRip a esattamente 3 cifre decimali. In precedenza, analizzavamo erroneamente un numero qualsiasi di cifre decimali, ma presupponevamo sempre che il valore fosse espresso in millisecondi, il che portava a timestamp errati (#1997).
- Risolto il problema di blocco della riproduzione quando una playlist contiene elementi tagliati con sottotitoli codificati CEA-608 o CEA-708.
- Correzione di
IllegalStateException
quando un file SSA contiene un cue con durata zero (ora di inizio e fine uguali) (#2052). - Elimina (e registra) gli errori di analisi dei sottotitoli quando questi vengono multiplexati nello stesso contenitore di audio e video (#2052).
- È stato corretto il problema di gestione dei caratteri UTF-8 multibyte nei file WebVTT che utilizzano i terminatori di riga CR (#2167).
- DRM:
- Correzione dell'errore
MediaCodec$CryptoException: Operation not supported in this configuration
durante la riproduzione di contenuti ClearKey su dispositivi con API < 27 (#1732).
- Correzione dell'errore
- Effetto:
- Abbiamo spostato la funzionalità di
OverlaySettings
inStaticOverlaySettings
.OverlaySettings
può essere suddivisa in sottoclassi per consentire impostazioni di overlay dinamiche.
- Abbiamo spostato la funzionalità di
- Muxer:
MuxerException
è stato spostato dall'interfacciaMuxer
per evitare un nome completo molto lungo.- Il metodo
setSampleCopyEnabled()
è stato rinominato insetSampleCopyingEnabled()
sia inMp4Muxer.Builder
che inFragmentedMp4Muxer.Builder
. Mp4Muxer.addTrack()
eFragmentedMp4Muxer.addTrack()
ora restituiscono un ID tracciaint
anziché unTrackToken
.Mp4Muxer
eFragmentedMp4Muxer
non implementano più l'interfacciaMuxer
.- Disattiva il raggruppamento e la copia dei batch di esempio di
Mp4Muxer
per impostazione predefinita. - Correzione di un bug in
FragmentedMp4Muxer
che crea molti frammenti quando viene scritta solo la traccia audio.
- Sessione:
- Mantieni lo stato del servizio in primo piano per altri 10 minuti quando la riproduzione
si interrompe, si arresta o non va a buon fine. Ciò consente agli utenti di riprendere la riproduzione entro questo
timeout senza rischiare limitazioni del servizio in primo piano su vari
dispositivi. Tieni presente che la semplice chiamata a
player.pause()
non può più essere utilizzata per interrompere il servizio in primo piano prima distopSelf()
quando esegui l'override dionTaskRemoved
, utilizzaMediaSessionService.pauseAllPlayersAndStopSelf()
in alternativa. - Mantiene la notifica visibile quando la riproduzione entra in uno stato di errore o interruzione. La notifica viene rimossa solo se la playlist viene cancellata o il player viene rilasciato.
- Migliora la gestione delle azioni MediaSession della piattaforma Android ACTION_PLAY e ACTION_PAUSE per impostarne solo una in base ai comandi disponibili e accettare anche se ne è impostata solo una.
- Aggiungi
Context
come parametro aMediaButtonReceiver.shouldStartForegroundService
(#1887). - Correzione del bug per cui la chiamata di un metodo
Player
su unMediaController
connesso a una sessione precedente eliminava le modifiche da un aggiornamento in attesa. - Rendi
MediaSession.setSessionActivity(PendingIntent)
accettabile il valore null (#2109). - È stato corretto un bug per cui una notifica obsoleta rimane visibile quando la playlist viene cancellata (#2211).
- Mantieni lo stato del servizio in primo piano per altri 10 minuti quando la riproduzione
si interrompe, si arresta o non va a buon fine. Ciò consente agli utenti di riprendere la riproduzione entro questo
timeout senza rischiare limitazioni del servizio in primo piano su vari
dispositivi. Tieni presente che la semplice chiamata a
- UI:
- Aggiungi state holder e composable al modulo
media3-ui-compose
perPlayerSurface
,PresentationState
,PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
ePlaybackSpeedState
.
- Aggiungi state holder e composable al modulo
- Download:
- Correzione del bug in
CacheWriter
che lascia aperte le origini dati e le aree della cache bloccate nel caso in cui l'origine dati generi unException
diverso daIOException
(#9760).
- Correzione del bug in
- Estensione HLS:
- Aggiungi una prima versione di
HlsInterstitialsAdsLoader
. Il caricatore di annunci legge gli interstitial HLS di una playlist multimediale HLS e li mappa alAdPlaybackState
passato aAdsMediaSource
. Questa versione iniziale supporta solo gli stream VOD HLS con attributiX-ASSET-URI
. - Aggiungi
HlsInterstitialsAdsLoader.AdsMediaSourceFactory
. Le app possono utilizzarlo per creare istanzeAdsMediaSource
che utilizzano unHlsInterstitialsAdsLoader
in modo comodo e sicuro. - Analizza il tag
SUPPLEMENTAL-CODECS
dalla playlist HLS per rilevare i formati Dolby Vision (#1785). - Allenta la condizione per la ricerca della sincronizzazione delle posizioni in uno stream HLS (#2209).
- Aggiungi una prima versione di
- Estensione DASH:
- Aggiunta del supporto del formato AC-4 Livello 4 per DASH (#1898).
- Risolvi il problema durante il calcolo dell'intervallo di aggiornamento per l'inserimento di annunci nei live streaming multi-periodo (#1698).
- Analizza l'attributo
scte214:supplementalCodecs
dal manifest DASH per rilevare i formati Dolby Vision (#1785). - Migliora la gestione delle transizioni di periodo nei live streaming in cui il periodo contiene campioni multimediali oltre la durata del periodo dichiarata (#1698).
- È stato risolto il problema per cui i set di adattamento contrassegnati con
adaptation-set-switching
ma con lingue o flag di ruolo diversi vengono uniti (#2222).
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Aggiungi il modulo di decodifica MPEG-H che utilizza il decodificatore MPEG-H integrato per decodificare l'audio MPEG-H (#1826).
- Estensione MIDI:
- Inserisci istanze personalizzate di
AudioSink
eAudioRendererEventListener
inMidiRenderer
.
- Inserisci istanze personalizzate di
- Estensione Cast:
- Aumenta la dipendenza
play-services-cast-framework
alla versione 21.5.0 per correggere un arresto anomalo diFLAG_MUTABLE
nelle app che hanno come target l'API 34 o versioni successive sui dispositivi con Google Play Services installato ma disattivato (#2178).
- Aumenta la dipendenza
- App demo:
- Estendi
demo-compose
con pulsanti aggiuntivi e migliora l'integrazione diPlayerSurface
con il supporto di ridimensionamento e otturatore.
- Estendi
- Rimuovi i simboli ritirati:
- Rimuovi il metodo
AudioMixer.create()
deprecato. UtilizzaDefaultAudioMixer.Factory().create()
. - Rimuovi i seguenti metodi
Transformer.Builder
deprecati:setTransformationRequest()
, utilizzasetAudioMimeType()
,setVideoMimeType()
esetHdrMode()
.setAudioProcessors()
, imposta il processore audio in unEditedMediaItem.Builder.setEffects()
e passalo aTransformer.start()
.setVideoEffects()
, imposta l'effetto video in unEditedMediaItem.Builder.setEffects()
e passalo aTransformer.start()
.setRemoveAudio()
, utilizzaEditedMediaItem.Builder.setRemoveAudio()
per rimuovere l'audio daEditedMediaItem
passato aTransformer.start()
.setRemoveVideo()
, utilizzaEditedMediaItem.Builder.setRemoveVideo()
per rimuovere il video daEditedMediaItem
passato aTransformer.start()
.setFlattenForSlowMotion()
, usaEditedMediaItem.Builder.setFlattenForSlowMotion()
per appiattireEditedMediaItem
passato aTransformer.start()
.setListener()
, utilizzaaddListener()
,removeListener()
oremoveAllListeners()
.
- Rimuovi i seguenti metodi
Transformer.Listener
deprecati:onTransformationCompleted(MediaItem)
, utilizzaonCompleted(Composition, ExportResult)
.onTransformationCompleted(MediaItem, TransformationResult)
, utilizzaonCompleted(Composition, ExportResult)
.onTransformationError(MediaItem, Exception)
, utilizzaonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationException)
, utilizzaonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationResult, TransformationException)
, utilizzaonError(Composition, ExportResult, ExportException)
.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
, utilizzaonFallbackApplied(Composition, TransformationRequest, TransformationRequest)
.
- Rimuovi la classe
TransformationResult
deprecata. Utilizza inveceExportResult
. - Rimuovi la classe
TransformationException
deprecata. Utilizza inveceExportException
. - Rimuovi
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
deprecato. UtilizzaTransformer.PROGRESS_STATE_NOT_STARTED
. - Rimuovi
Transformer.setListener()
deprecato. UtilizzaTransformer.addListener()
,Transformer.removeListener()
oTransformer.removeAllListeners()
. - Rimuovi
Transformer.startTransformation()
deprecato. UtilizzaTransformer.start(MediaItem, String)
. - Rimuovi
SingleFrameGlShaderProgram
deprecato. UtilizzaBaseGlShaderProgram
. - Rimuovi
Transformer.flattenForSlowMotion
. UtilizzaEditedMediaItem.flattenForSlowMotion
. ExoPlayer.VideoComponent
,ExoPlayer.AudioComponent
,ExoPlayer.TextComponent
eExoPlayer.DeviceComponent
rimossi.androidx.media3.exoplayer.audio.SonicAudioProcessor
rimosso.- Sono stati rimossi i seguenti metodi
DownloadHelper
deprecati:- Costruttore
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])
, utilizzaDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)
. getRendererCapabilities(RenderersFactory)
, una funzionalità equivalente può essere ottenuta creando unDefaultRendererCapabilitiesList
con unRenderersFactory
e chiamandoDefaultRendererCapabilitiesList.getRendererCapabilities()
.
- Costruttore
- Rimosso
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
metodo. UtilizzaPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)
e trasmetti(MediaSession.Token) compatToken.getToken()
.
- Rimuovi il metodo
1.6.0-rc02
19 marzo 2025
Utilizza la versione stabile 1.6.0.
1.6.0-rc01
12 marzo 2025
Utilizza la versione stabile 1.6.0.
1.6.0-beta01
26 febbraio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha03
6 febbraio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha02
30 gennaio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha01
20 dicembre 2024
Utilizza la versione stabile 1.6.0.
Versione 1.5
Versione 1.5.1
19 dicembre 2024
androidx.media3:media3-*:1.5.1
viene ritirata.
La versione 1.5.1 contiene questi commit.
- ExoPlayer:
- Disattiva l'utilizzo della decrittografia asincrona in MediaCodec per evitare problemi di timeout del codec segnalati con questa API della piattaforma (#1641).
- Estrattori:
- MP3: non interrompere la riproduzione in anticipo quando l'indice di un frame
VBRI
non copre tutti i dati MP3 in un file (#1904).
- MP3: non interrompere la riproduzione in anticipo quando l'indice di un frame
- Video:
- Rollback dell'utilizzo dei valori delle proporzioni pixel forniti per
MediaCodecAdapter
se forniti durante l'elaborazione dionOutputFormatChanged
(#1371).
- Rollback dell'utilizzo dei valori delle proporzioni pixel forniti per
- Testo:
- È stato corretto un bug in
ReplacingCuesResolver.discardCuesBeforeTimeUs
per cui il cue attivo alle oretimeUs
(iniziato prima ma non ancora terminato) veniva scartato in modo errato (#1939).
- È stato corretto un bug in
- Metadati:
- Estrai la numerazione di dischi/tracce e il genere dai commenti Vorbis in
MediaMetadata
(#1958).
- Estrai la numerazione di dischi/tracce e il genere dai commenti Vorbis in
Versione 1.5.0
27 novembre 2024
androidx.media3:media3-*:1.5.0
viene ritirata.
La versione 1.5.0 contiene questi commit.
- Libreria comune:
- Aggiungi
ForwardingSimpleBasePlayer
che consente l'inoltro a un altro player con piccoli aggiustamenti, garantendo al contempo la piena coerenza e la gestione degli ascoltatori (#1183). - Sostituisci
SimpleBasePlayer.State.playlist
con il metodogetPlaylist()
. - Aggiungi l'override per
SimpleBasePlayer.State.Builder.setPlaylist()
per specificare direttamente unTimeline
e unTracks
e unMetadata
anziché creare una struttura di playlist. - Aumenta
minSdk
a 21 (Android Lollipop). Questo è in linea con tutte le altre librerie AndroidX. - Aggiungi l'artefatto
androidx.media3:media3-common-ktx
che fornisce funzionalità specifiche di Kotlin basate sulla libreria Common - Aggiungi la funzione di estensione di sospensione
Player.listen
per avviare una coroutine per ascoltarePlayer.Events
nella libreriamedia3-common-ktx
. - Rimuovi le annotazioni
@DoNotInline
dalle classi interne manualmente fuori linea progettate per evitare errori di verifica delle classi in fase di runtime. Le versioni recenti di R8 ora eseguono automaticamente chiamate out-of-line come queste per evitare errori di runtime (quindi l'out-of-lining manuale non è più necessario). Tutti gli utenti Gradle della libreria devono già utilizzare una versione del plug-in Gradle per Android che utilizza una versione di R8 che lo fa,a causa dicompileSdk = 35
. Gli utenti della libreria con sistemi di build non Gradle dovranno assicurarsi che il passaggio di riduzione/offuscamento equivalente a R8 esegua un processo di estrazione automatica simile per evitare errori di verifica della classe di runtime. Questa modifica è già stata apportata in altre librerie AndroidX.
- Aggiungi
- ExoPlayer:
- Ora
MediaCodecRenderer.onProcessedStreamChange()
può essere chiamato per ogni elemento multimediale. In precedenza non era richiesto per il primo. UtilizzaMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
per attivare questa opzione. - Aggiungi
PreloadMediaSource.PreloadControl.onPreloadError
per consentire alle implementazioniPreloadMediaSource.PreloadControl
di intraprendere azioni quando si verifica un errore. - Aggiungi
BasePreloadManager.Listener
per propagare gli eventi di precaricamento alle app. - Consenti di modificare il timeout del client SNTP e di riprovare con indirizzi alternativi in caso di timeout (#1540).
- Rimuovi
MediaCodecAdapter.Configuration.flags
perché il campo era sempre zero. - Consente all'utente di selezionare l'altoparlante integrato per la riproduzione su Wear OS API 35+ (dove il dispositivo pubblicizza il supporto).
- Rimanda la chiamata di blocco a
Context.getSystemService(Context.AUDIO_SERVICE)
finché non viene attivata la gestione della messa a fuoco audio. In questo modo, la chiamata di blocco non viene eseguita se la gestione della messa a fuoco audio non è abilitata (#1616). - Consenti la riproduzione indipendentemente dalla durata del buffer in caso di errore di caricamento (#1571).
- Aggiungi
AnalyticsListener.onRendererReadyChanged()
per indicare quando i singoli renderer consentono la riproduzione. - Correzione del problema per cui
MediaCodec.CryptoException
a volte viene segnalato come "errore di runtime imprevisto" quandoMediaCodec
viene eseguito in modalità asincrona (comportamento predefinito su API 31+). - Passa
bufferedDurationUs
anzichébufferedPositionUs
conPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
. Inoltre, le modificheDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
aDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
, le app devono passare un valore che rappresenti una durata specifica dalla posizione di inizio predefinita per cui la sorgente multimediale corrispondente deve essere precaricata con questo IntDef, anziché una posizione. - Aggiungi l'implementazione di
ForwardingRenderer
che inoltra tutte le chiamate di metodo a un altro renderer (1703). - Aggiungi il precaricamento della playlist per l'elemento successivo della playlist. Le app possono
attivare il precaricamento chiamando
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
di conseguenza. Per impostazione predefinita, il precaricamento è disattivato. Se l'opzione è attivata e per non interferire con la riproduzione,DefaultLoadControl
limita il precaricamento all'inizio e continua solo quando il caricamento del player non è in corso per la riproduzione. Le app possono modificare questo comportamento implementandoLoadControl.shouldContinuePreloading()
di conseguenza (ad esempio quando esegui l'override di questo metodo inDefaultLoadControl
). L'implementazione predefinita diLoadControl
disattiva il precaricamento nel caso in cui un'app utilizzi un'implementazione personalizzata diLoadControl
. - Aggiungi il metodo
MediaSourceEventListener.EventDispatcher.dispatchEvent()
per consentire l'invocazione di eventi di listener di sottoclassi (1736). - Aggiungi
DefaultPreloadManager.Builder
che crea le istanzeDefaultPreloadManager
eExoPlayer
con configurazioni condivise in modo coerente. - Rimuovi il parametro
Renderer[]
daLoadControl.onTracksSelected()
, in quanto l'implementazioneDefaultLoadControl
può recuperare i tipi di stream daExoTrackSelection[]
. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
è stato ritirato e il metodo è stato contrassegnato come finale per evitare override. Al suo posto, utilizza il nuovoDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
.- Report sugli eventi
MediaSourceEventListener
da origini secondarie inMergingMediaSource
. In questo modo, gli eventi di caricamento avvio/errore/annullamento/completamento verranno segnalati per i sottotitoli caricati manualmente (quelli aggiunti conMediaItem.LocalConfiguration.subtitleConfigurations
), che potrebbero essere visualizzati come eventi di caricamento duplicati emessi daAnalyticsListener
. - Evita che gli errori di sottotitoli codificati e metadati interrompano completamente la riproduzione.
La traccia problematica viene disattivata e la riproduzione delle tracce rimanenti continua
(#1722).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), vengono generati errori di analisi (ad es.
dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati
tramite i callback
onLoadError
. - Nella gestione dei sottotitoli codificati legacy (durante il rendering), solo gli errori di caricamento associati vengono emessi tramite i callback
onLoadError
, mentre gli errori di analisi vengono ignorati automaticamente (questo è il comportamento preesistente).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), vengono generati errori di analisi (ad es.
dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati
tramite i callback
- È stato corretto il bug a causa del quale gli elementi della playlist o i periodi nei flussi DASH multi-periodo con durate che non corrispondono ai contenuti effettivi potevano causare blocchi dei fotogrammi alla fine dell'elemento (#1698).
- Aggiungi un setter a
SntpClient
per impostare il tempo massimo trascorso dall'ultimo aggiornamento dopo il quale il client viene reinizializzato (#1794).
- Ora
- Transformer:
- Aggiungi
SurfaceAssetLoader
, che supporta la messa in coda dei dati video a Transformer tramite unSurface
. ImageAssetLoader
segnala l'input non supportato tramiteAssetLoader.onError
anziché generare unIllegalStateException
.- Rendi obbligatoria l'impostazione della durata dell'immagine utilizzando
MediaItem.Builder.setImageDurationMs
per l'esportazione dell'immagine. - Aggiungi il supporto per l'esportazione di spazi vuoti nelle sequenze di EditedMediaItems audio.
- Aggiungi
- Selezione tracce:
DefaultTrackSelector
: preferisci l'audio basato sugli oggetti rispetto a quello basato sui canali quando gli altri fattori sono uguali.
- Estrattori:
- Consenti a
Mp4Extractor
eFragmentedMp4Extractor
di identificare i campioni H264 che non vengono utilizzati come riferimento dai campioni successivi. - Aggiungi l'opzione per attivare la ricerca basata sull'indice in
AmrExtractor
. - Considera i file MP3 con più di 128 kB tra i frame validi come troncati
(anziché non validi). Ciò significa che i file con dati non MP3 alla fine,
senza altri metadati che indichino la lunghezza dei byte MP3, ora interrompono
la riproduzione alla fine dei dati MP3 anziché non riuscire con
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563). - Correzione della gestione dei campioni preroll per le posizioni di inizio dei contenuti multimediali non keyframe durante l'elaborazione degli elenchi di modifica nei file MP4 (#1659).
- Miglioramento del calcolo della frequenza fotogrammi utilizzando la durata dei contenuti multimediali dalla casella
mdhd
inMp4Extractor
eFragmentedMp4Extractor
(#1531). - Correzione del ridimensionamento errato di
media_time
negli elenchi di modifica MP4. Mentresegment_duration
era già scalato correttamente utilizzando la scala temporale del film,media_time
ora è scalato correttamente utilizzando la scala temporale della traccia, come specificato dallo standard del formato MP4 (#1792). - Gestisci i frame fuori ordine nel calcolo di
endIndices
per MP4 con lista di modifica (#1797). - È stato corretto l'analisi della durata dei contenuti multimediali nella casella
mdhd
dei file MP4 per gestire i valori-1
(#1819). - Aggiungi il supporto per l'identificazione della casella
h263
nei file MP4 per i video H.263 (#1821). - Aggiungi il supporto del formato file multimediale di base ISO AC-4 di livello 4 (#1265).
- Consenti a
- DataSource:
- Aggiorna
HttpEngineDataSource
per consentire l'utilizzo a partire dall'estensione 7 della versione S anziché dal livello API 34 (#1262). DataSourceContractTest
: verifica cheDataSource.getUri()
restituisca l'URI risolto (come documentato). Se questo valore è diverso dall'URI richiesto, i test possono indicarlo utilizzando il nuovo metodoDataSourceContractTest.TestResource.Builder.setResolvedUri()
.DataSourceContractTest
: verifica cheDataSource.getUri()
egetResponseHeaders()
restituiscano il valore "open" dopo una chiamata non riuscita aopen()
(a causa di una risorsa "non trovata") e prima di una successiva chiamataclose()
.- L'override di
DataSourceContractTest.getNotFoundResources()
consente alle sottoclassi di test di fornire più risorse "non trovate" e di fornire anche eventuali intestazioni previste. Ciò consente di distinguere tra HTTP 404 (con intestazioni) e "server non trovato" (senza intestazioni).
- L'override di
- Aggiorna
- Audio:
- Configura automaticamente i metadati di intensità CTA-2075 sul codec se presenti nei contenuti multimediali.
- Assicurati che il volume si abbassi gradualmente durante la ricerca.
- Correzione dei rumori di scoppio che possono verificarsi durante le ricerche.
- È stato corretto l'accumulo di errori di troncamento per l'algoritmo di allungamento/spostamento del tono di Sonic.
- Correzione del bug in
SpeedChangingAudioProcessor
che causa la perdita di frame di output.
- Video:
MediaCodecVideoRenderer
evita di decodificare i campioni che non vengono visualizzati né utilizzati come riferimento da altri campioni.- Sulle API 35 e successive,
MediaCodecAdapter
ora può ricevere unnull
Surface
inconfigure
e chiamate a un nuovo metododetachOutputSurface
per rimuovere unSurface
impostato in precedenza se il codec lo supporta (MediaCodecInfo.detachedSurfaceSupported
). - Utilizza i valori delle proporzioni pixel forniti per
MediaCodecAdapter
, se disponibili, durante l'elaborazione dionOutputFormatChanged
(#1371). - Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE che causa la marcatura come non supportati dei flussi H264 sicuri a 60 fps (#1619).
- Aggiungi una soluzione alternativa per i codec che si bloccano dopo l'ultimo campione senza restituire un segnale di fine flusso.
- Testo:
- Aggiungi un
VoiceSpan
personalizzato e compilalo per gli intervalli vocali WebVTT (#1632). - Assicurati che i file WebVTT in HLS con timestamp dei sottotitoli molto grandi (che superano
un
long
a 64 bit se rappresentati come microsecondi e moltiplicati per la base temporale MPEG90,000
) vengano visualizzati (#1763). - Supporto dei sottotitoli CEA-608 nei contenuti Dolby Vision (#1820).
- È stato risolto il problema di blocco della riproduzione sui flussi multi-periodo DASH quando i sottotitoli codificati CEA-608 sono attivi (#1863).
- Aggiungi un
- Metadati:
- Assegna il tipo
C.TRACK_TYPE_METADATA
alle tracce contenenti contenuti icy o vnd.dvb.ait.
- Assegna il tipo
- Immagine:
- Aggiungi
ExternallyLoadedImageDecoder
per semplificare l'integrazione con librerie di caricamento di immagini esterne come Glide o Coil.
- Aggiungi
- DataSource:
- Aggiungi
FileDescriptorDataSource
, un nuovoDataSource
che può essere utilizzato per leggere da unFileDescriptor
(#3757).
- Aggiungi
- Effetto:
- Aggiungi soluzione alternativa
DefaultVideoFrameProcessor
per scalabilitàSurfaceTexture
minore.SurfaceTexture
può includere una piccola scalatura che taglia un bordo di 1 texel intorno al bordo di un buffer ritagliato. Ora la gestione è tale che l'output è più vicino a quello previsto. - Accelerare
DefaultVideoFrameProcessor.queueInputBitmap()
. Di conseguenza, l'esportazione di immagini in video conTransformer
è più veloce.
- Aggiungi soluzione alternativa
- Estensione IMA:
- Risolto un bug per cui la cancellazione della playlist potrebbe causare un
ArrayIndexOutOfBoundsException
inImaServerSideAdInsertionMediaSource
. - Correzione del bug per cui gli stream DAI inseriti lato server senza preroll possono
comportare un
ArrayIndexOutOfBoundsException
durante la riproduzione dopo l'ultimo mid-roll (#1741).
- Risolto un bug per cui la cancellazione della playlist potrebbe causare un
- Sessione:
- Aggiungi
MediaButtonReceiver.shouldStartForegroundService(Intent)
per consentire alle app di eliminare un comando di riproduzione in arrivo per la ripresa della riproduzione eseguendo l'override di questo metodo. Per impostazione predefinita, il servizio viene sempre avviato e la riproduzione non può essere interrotta senza che il sistema arresti in modo anomalo il servizio con un erroreForegroundServiceDidNotStartInTimeException
(#1528). - Correzione del bug che causava l'invio di comandi personalizzati da un
MediaBrowser
aMediaSessionCompat.Callback
anziché alla varianteMediaBrowserServiceCompat
del metodo quando connesso a un servizio legacy. Ciò ha impedito aMediaBrowser
di ricevere il valore di ritorno effettivo inviato dal servizio legacy (#1474). - Gestisci
IllegalArgumentException
generato dai dispositivi di alcuni produttori quando imposti il ricevitore di trasmissione per gli intent dei pulsanti multimediali (#1730). - Aggiungi pulsanti di comando per gli elementi multimediali. In questo modo viene aggiunta l'API Media3 per quella che era nota come
Custom browse actions
con la libreria legacy conMediaBrowserCompat
. Tieni presente che con i pulsanti di comando Media3 per gli elementi multimediali sono disponibili siaMediaBrowser
cheMediaController
. Consulta Azioni di navigazione personalizzate di AAOS. - Correzione del bug per cui a volte un controller Media3 non riusciva a consentire a un'app di sessione di avviare un servizio in primo piano dopo aver richiesto
play()
. - Limita
CommandButton.Builder.setIconUri
all'accettazione solo di URI dei contenuti. - Passa gli hint di connessione di un browser Media3 all'
MediaBrowserCompat
iniziale quando ti connetti a unMediaBrowserCompat
legacy. Il servizio può ricevere i suggerimenti per la connessione passati come suggerimenti radice con la prima chiamata aonGetRoot()
. - È stato corretto il bug per cui un
MediaBrowser
connesso a un servizio browser legacy non riceveva un errore inviato dal servizio dopo che il browser aveva eseguito la sottoscrizione a unparentid
. - Migliora il comportamento di interoperabilità, in modo che un browser Media3 connesso a un
MediaBrowserService
legacy non richieda due volte i figli di unparentId
quando si iscrive a un publisher principale.
- Aggiungi
- UI:
- Attiva la soluzione alternativa per i video allungati/ritagliati in
PlayerView
-in-Compose-AndroidView
a causa di problemi con le transizioni condivise basate su XML. Le app che utilizzanoPlayerView
all'interno diAndroidView
devono chiamarePlayerView.setEnableComposeSurfaceSyncWorkaround
per attivare (#1237, #1594). - Aggiungi
setFullscreenButtonState
aPlayerView
per consentire gli aggiornamenti dell'icona del pulsante a schermo intero su richiesta, ovvero fuori banda e non in modo reattivo a un'interazione di clic (#1590, #184). - È stato corretto il bug per cui la scelta "Nessuno" nella selezione del testo non funziona se sono presenti preferenze di selezione delle tracce di testo definite dall'app.
- Attiva la soluzione alternativa per i video allungati/ritagliati in
- Estensione DASH:
- Aggiungi il supporto per i periodi che iniziano a metà di un segmento (#1440).
- Estensione Smooth Streaming:
- Correzione dell'errore
Bad magic number for Bundle
durante la riproduzione di stream SmoothStreaming con tracce di testo (#1779).
- Correzione dell'errore
- Estensione RTSP:
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Aggiungi il modulo di decodifica IAMF, che fornisce supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- La riproduzione è abilitata con un layout stereo e 5.1 con spatializzazione insieme al tracciamento della testa opzionale abilitato, ma il supporto della riproduzione binaurale non è attualmente disponibile.
- Aggiungi il supporto delle pagine da 16 kB per le estensioni del decodificatore su Android 15 (#1685).
- Aggiungi il modulo di decodifica IAMF, che fornisce supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- Estensione Cast:
- Interrompi la pulizia della cronologia dopo la disconnessione di CastSession, il che consente all'app mittente di riprendere la riproduzione in locale dopo una disconnessione.
- Compila
DeviceInfo
di CastPlayer quando viene fornito unContext
. In questo modo è possibile collegareMediaSession
aRoutingSession
, il che è necessario per integrare Output Switcher (#1056).
- Test Utilities:
DataSourceContractTest
ora include test per verificare:- Lo stream di input
read position
è stato aggiornato. - Il buffer di output
offset
viene applicato correttamente.
- Lo stream di input
- App demo
- Risolvi le perdite di memoria nell'app demo di video brevi (#1839).
- Rimuovi i simboli ritirati:
- Rimuovi
Player.hasPrevious
ePlayer.hasPreviousWindow()
obsoleti. Utilizza invecePlayer.hasPreviousMediaItem()
. - Rimuovi il metodo
Player.previous()
obsoleto. UtilizzaPlayer.seekToPreviousMediaItem()
. - Rimuovi il metodo
DrmSessionEventListener.onDrmSessionAcquired
deprecato. - Rimuovi i costruttori
DefaultEncoderFactory
deprecati. UtilizzaDefaultEncoderFactory.Builder
.
- Rimuovi
Versione 1.5.0-rc02
19 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-rc01
13 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-beta01
30 ottobre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-alpha01
10 settembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.4.0
Versione 1.4.1
27 agosto 2024
androidx.media3:media3-*:1.4.1
viene ritirata.
La versione 1.4.1 contiene questi commit.
- ExoPlayer:
- Estrattori:
- MP3: correggi l'errore
Searched too many bytes
ignorando correttamente i dati non MP3 finali in base al campo lunghezza in un frameInfo
(#1480).
- MP3: correggi l'errore
- Testo:
- TTML: correggi la gestione dei valori di percentuale
tts:fontSize
per assicurarti che vengano ereditati correttamente dai nodi principali con valori di percentualetts:fontSize
. - Correzione di
IndexOutOfBoundsException
inLegacySubtitleUtil
a causa della gestione errata del caso in cui l'ora di inizio dell'output richiesto è maggiore o uguale all'ora dell'evento finale inSubtitle
(#1516).
- TTML: correggi la gestione dei valori di percentuale
- DRM:
- Correzione dell'errore
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
sui dispositivi con API 31 e versioni successive che riproducono contenuti Widevine L1. Questo errore è causato da un'implementazione incompleta del metodoMediaDrm.requiresSecureDecoder
(#1603).
- Correzione dell'errore
- Effetto:
- Aggiungi un metodo
release()
aGlObjectsProvider
.
- Aggiungi un metodo
- Sessione:
- Trasforma un doppio tocco di
KEYCODE_HEADSETHOOK
in un'azione "Vai al successivo", come documentato (#1493). - Gestisci
KEYCODE_HEADSETHOOK
come comando "Riproduci" inMediaButtonReceiver
quando decidi se ignorarlo per evitare unForegroundServiceDidNotStartInTimeException
(#1581).
- Trasforma un doppio tocco di
- Estensione RTSP:
- Ignora le descrizioni multimediali non valide nell'analisi SDP (#1087).
Versione 1.4.0
25 luglio 2024
androidx.media3:media3-*:1.4.0
viene ritirata.
La versione 1.4.0 contiene questi commit.
- Libreria comune:
- Inoltra le chiamate di ricerca presunte no-op ai metodi protetti
BasePlayer.seekTo()
eSimpleBasePlayer.handleSeek()
anziché ignorarle. Se implementi questi metodi in un player personalizzato, potresti dover gestire queste chiamate aggiuntive conmediaItemIndex == C.INDEX_UNSET
. - Rimuovi la dipendenza di compilazione dal desugaring Java 8 avanzato (#1312).
- Assicurati che la durata passata a
MediaItem.Builder.setImageDurationMs()
venga ignorata per unMediaItem
non immagine (come documentato). - Aggiungi
Format.customData
per memorizzare informazioni personalizzate fornite dall'app sulle istanze diFormat
.
- Inoltra le chiamate di ricerca presunte no-op ai metodi protetti
- ExoPlayer:
- Aggiungi
BasePreloadManager
che coordina il precaricamento per più origini in base alle priorità definite dal relativorankingData
. La personalizzazione è possibile estendendo questa classe. AggiungiDefaultPreloadManager
che utilizzaPreloadMediaSource
per precaricare i campioni multimediali delle sorgenti in memoria e utilizza un numero interorankingData
che indica l'indice di un elemento nell'interfaccia utente. - Aggiungi
PlayerId
alla maggior parte dei metodi diLoadControl
per consentire alle implementazioni diLoadControl
di supportare più giocatori. - Rimuovi
Buffer.isDecodeOnly()
eC.BUFFER_FLAG_DECODE_ONLY
. Non è necessario impostare questo flag, in quanto i renderer e i decoder decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate diRenderer
devono verificare se il tempo di buffer è almenoBaseRenderer.getLastResetPositionUs()
per decidere se mostrare un campione. Le implementazioni personalizzate diSimpleDecoder
possono controllareisAtLeastOutputStartTimeUs()
se necessario o contrassegnare altri buffer conDecoderOutputBuffer.shouldBeSkipped
per ignorarli. - Consenti la restituzione di un valore null da
TargetPreloadStatusControl.getTargetPreloadStatus(T)
per indicare di non precaricare unMediaSource
con ilrankingData
specificato. - Aggiungi
remove(MediaSource)
aBasePreloadManager
. - Aggiungi
reset()
aBasePreloadManager
per rilasciare tutte le sorgenti di attesa mantenendo l'istanza di Preload Manager. - Aggiungi
ExoPlayer.setPriority()
(eBuilder.setPriority()
) per definire il valore di priorità utilizzato inPriorityTaskManager
e per l'importanza di MediaCodec dall'API 35. - Risolvi il problema relativo all'aggiornamento dell'ultimo tempo di ribuffer che ha comportato
la chiave
bs
(buffer starvation) errata in CMCD (#1124). - Aggiungi
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
per indicare che la fonte è stata caricata fino alla fine. Ciò consente alle implementazioniDefaultPreloadManager
e personalizzatePreloadMediaSource.PreloadControl
di precaricare la sorgente successiva o eseguire altre azioni. - È stato corretto un bug per cui il salto del silenzio alla fine degli elementi può attivare un'eccezione di riproduzione.
- Aggiungi
clear
aPreloadMediaSource
per ignorare il periodo di precaricamento. - Aggiungi un nuovo codice di errore
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
utilizzato quando le risorse del codec vengono recuperate per attività con priorità più alta. - Consenti a
AdsMediaSource
di caricare gli annunci pre-roll prima del completamento della preparazione iniziale dei contenuti multimediali (#1358). - È stato corretto un bug per cui la riproduzione veniva spostata su
STATE_ENDED
quando veniva ripreparato un live streaming DASH multi-periodo dopo che il periodo originale era già stato rimosso dal manifest. - Rinomina
onTimelineRefreshed()
inonSourcePrepared()
eonPrepared()
inonTracksSelected()
inPreloadMediaSource.PreloadControl
. Rinomina anche gli IntDef inDefaultPreloadManager.Stage
di conseguenza. - Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro
con i cicli di attivazione della CPU e ritardare l'attivazione fino a quando i renderer possono avanzare.
Puoi attivarlo utilizzando
experimentalSetDynamicSchedulingEnabled()
quando configuri l'istanza di ExoPlayer. - Aggiungi
Renderer.getDurationToProgressUs()
. UnRenderer
può implementare questo metodo per restituire a ExoPlayer la durata di avanzamento della riproduzione perché il renderer possa progredire. SeExoPlayer
è impostato conexperimentalSetDynamicSchedulingEnabled()
,ExoPlayer
chiamerà questo metodo durante il calcolo del tempo per pianificare l'attività di lavoro. - Aggiungi
MediaCodecAdapter#OnBufferAvailableListener
per ricevere un avviso quando i buffer di input e output sono disponibili per l'utilizzo da parte diMediaCodecRenderer
.MediaCodecRenderer
segnaleràExoPlayer
quando riceve questi callback e seExoPlayer
è impostato conexperimentalSetDynamicSchedulingEnabled()
,ExoPlayer
pianificherà il suo ciclo di lavoro man mano che i renderer fanno progressi. - Utilizza la classe di dati per i metodi
LoadControl
anziché i singoli parametri. - Aggiungi
ExoPlayer.isReleased()
per verificare seExoplayer.release()
è stato chiamato. - Aggiungi
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
per configurare la posizione massima per cuiseekToPrevious()
cerca l'elemento precedente (#1425). - Correzione di alcune incoerenze della messa a fuoco dell'audio, ad esempio la mancata segnalazione della perdita di messa a fuoco completa o temporanea durante la pausa del lettore (#1436).
- Correzione di potenziali
IndexOutOfBoundsException
causati da estrattori che segnalano tracce aggiuntive dopo il passaggio di preparazione iniziale (#1476). Effects
inExoPlayer.setVideoEffect()
riceveranno i timestamp con l'offset del renderer rimosso (#1098).- Correzione di un potenziale
IllegalArgumentException
durante la gestione dell'errore del player verificatosi durante la lettura anticipata di un altro elemento della playlist (#1483).
- Aggiungi
- Transformer:
- Aggiungi
audioConversionProcess
evideoConversionProcess
aExportResult
per indicare come è stata creata la rispettiva traccia nel file di output. - Rilassa i controlli del livello H.264 per l'ottimizzazione del taglio.
- Aggiungi il supporto per il passaggio da un supporto di input SDR a uno HDR in una sequenza.
- Aggiungi il supporto per gli effetti audio a livello di composizione.
- Aggiungi il supporto per la transcodifica delle immagini Ultra HDR in video HDR.
- Risolto il problema per cui
DefaultAudioMixer
non restituisce la quantità corretta di byte dopo essere stato reimpostato e riutilizzato. - Soluzione alternativa a un bug del decodificatore in cui il numero di canali audio era limitato allo stereo durante la gestione dell'input PCM.
- Quando selezioni le tracce in
ExoPlayerAssetLoader
, ignora i vincoli relativi al numero di canali audio, in quanto si applicano solo alla riproduzione. - Sostituisci l'interfaccia
androidx.media3.transformer.Muxer
conandroidx.media3.muxer.Muxer
e rimuoviandroidx.media3.transformer.Muxer
. - Correggi il caricamento delle immagini HEIC dagli schemi URI dei contenuti. (#1373).
- Regola la durata della traccia audio in
AudioGraphInput
per migliorare la sincronizzazione audio/video. - Rimuovi il campo
ExportResult.processedInputs
. Se utilizzi questo campo per i dettagli del codec, utilizza inveceDefaultDecoderFactory.listener
. In caso di eccezione del codec, i dettagli del codec saranno disponibili inExportException.codecInfo
.
- Aggiungi
- Estrattori:
- MPEG-TS: esegui il roll forward della modifica assicurandoti che l'ultimo frame venga sottoposto a rendering passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Sono stati incorporati correzioni per risolvere i problemi emersi negli stream HLS solo con I-frame(#1150) e negli stream HLS H.262 (#1126).
- MP3: preferisci le dimensioni dei dati di un frame
Info
rispetto alle dimensioni riportate dallo stream sottostante (ad es. dimensioni del file o intestazione HTTPContent-Length
). In questo modo, i dati dei trailer non riproducibili (ad es. la copertina dell'album) vengono esclusi dai calcoli di ricerca del bitrate costante, rendendo le ricerche più accurate (#1376). - MP3: utilizza il conteggio dei frame e altri dati in un frame
Info
(se presente) per calcolare un bitrate medio per la ricerca a bitrate costante, anziché estrapolare dal bitrate del frame dopo il frameInfo
, che potrebbe essere artificialmente piccolo, ad es. framePCUT
(#1376). - Correzione dell'estrazione del formato audio PCM nei container AVI.
- Audio:
- Correzione degli attributi di codifica del profilo 2 DTS:X per la riproduzione passthrough (#1299).
- Per la riproduzione scaricata, reimposta il campo di monitoraggio per il completamento dello stream
in
DefaultAudioSink
prima di chiamareAudioTrack.stop()
in modo cheAudioTrack.StreamEventCallback#onPresentationEnded
identifichi correttamente quando sono stati riprodotti tutti i dati in attesa. - Correzione del bug in
SilenceSkippingAudioProcessor
in cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) possono causare l'interruzione del processore (#1352). - Implementa
MediaCodecAudioRenderer.getDurationToProgressUs()
in modo che ExoPlayer pianifichi dinamicamente il suo ciclo di lavoro principale in modo che MediaCodecAudioRenderer possa fare progressi.
- Video:
- È stato risolto il problema a causa del quale
Listener.onRenderedFirstFrame()
arriva troppo presto quando si cambia dispositivo durante la riproduzione. - Correzione della logica di fallback del decodificatore per Dolby Vision per utilizzare un decodificatore AV1 compatibile, se necessario (#1389).
- Correzione dell'eccezione del codec che può essere causata dall'attivazione di un renderer video durante la riproduzione.
- È stato risolto il problema a causa del quale
- Testo:
- È stato risolto il problema per cui i sottotitoli che iniziano prima di una posizione di ricerca vengono ignorati. Questo problema è stato introdotto solo in Media3 1.4.0-alpha01.
- Modifica il comportamento predefinito di analisi dei sottotitoli codificati in modo che avvenga durante l'estrazione anziché durante il rendering (vedi il diagramma dell'architettura di ExoPlayer per la differenza tra estrazione e rendering).
- Questa modifica può essere ignorata chiamando sia
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
siaTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Consulta la documentazione sulla personalizzazione per scoprire come integrare questi componenti in un'istanzaExoPlayer
. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli codificati precedenti) verranno rimossi in una release futura. - Le app con implementazioni
SubtitleDecoder
personalizzate devono aggiornarle per implementareSubtitleParser
(eSubtitleParser.Factory
anzichéSubtitleDecoderFactory
).
- Questa modifica può essere ignorata chiamando sia
- PGS: correggi la decodifica run-length per risolvere
0
come indice di colore, anziché un valore di colore letterale (#1367). - CEA-708: ignora il valore
rowLock
. La specifica CEA-708-E S-2023 indica cherowLock
ecolumnLock
devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto dicolumnLock
non è implementato, quindi si presume che sia sempre falso).- Inizialmente era incluso nelle note di rilascio di
1.3.0-alpha01
, ma la modifica è stata annullata per errore prima della release di1.3.0-rc01
. Il problema è stato risolto e la modifica è di nuovo presente.
- Inizialmente era incluso nelle note di rilascio di
- CEA-708: evita l'aggiunta di nuove righe duplicate da parte della gestione semplice del comando "set pen location" di ExoPlayer (#1315).
- Correzione di un
IllegalArgumentException
diLegacySubtitleUtil
quando un esempio di sottotitoli WebVTT non contiene cue, ad es. nell'ambito di uno stream DASH (#1516).
- Metadati:
- Correggi la mappatura di MP4 ai tag di ordinamento ID3. In precedenza, i tag MP4 "ordinamento album"
(
soal
), "ordinamento artisti" (soar
) e "ordinamento artisti album" (soaa
) erano mappati erroneamente ai tag ID3TSO2
,TSOA
eTSOP
(#1302). - Correzione della lettura dei tag numerici
gnre
(genere) etmpo
(tempo) MP4 (/iTunes) quando il valore è più lungo di un byte. - Propaga il frame ID3
TCON
aMediaMetadata.genre
(#1305).
- Correggi la mappatura di MP4 ai tag di ordinamento ID3. In precedenza, i tag MP4 "ordinamento album"
(
- Immagine:
- Aggiungi il supporto per le griglie di miniature DASH non quadrate (#1300).
- Aggiungi il supporto per AVIF per l'API 34+.
- Consenti
null
come parametro perExoPlayer.setImageOutput()
per cancellare unImageOutput
impostato in precedenza.
- DataSource:
- Implementa il supporto per gli URI delle risorse non elaborate di
android.resource://package/id
dovepackage
è diverso dal pacchetto dell'applicazione corrente. In precedenza non era documentato che funzionasse, ma è un modo più efficiente di accedere alle risorse in un altro pacchetto rispetto all'accesso per nome. - Controlla con attenzione che
url
non sia null nei costruttoriDataSpec
. Questo parametro è già stato annotato come non nullo. - Consenti a
ByteArrayDataSource
di risolvere un URI in un array di byte duranteopen()
, anziché essere codificato in modo permanente durante la costruzione (#1405).
- Implementa il supporto per gli URI delle risorse non elaborate di
- DRM:
- Consenti l'impostazione di un
LoadErrorHandlingPolicy
suDefaultDrmSessionManagerProvider
(#1271).
- Consenti l'impostazione di un
- Effetto:
- Supporta più modifiche della velocità all'interno dello stesso
EditedMediaItem
oComposition
inSpeedChangeEffect
. - Supporto per l'output HLG e PQ dall'input bitmap ultra HDR.
- Aggiungi il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, che migliora l'output della superficie HLG in ExoPlayer.setVideoEffect e Debug SurfaceView di Transformer.
- Aggiorna l'implementazione della matrice di overlay in modo che sia coerente con la
documentazione invertendo i valori x e y applicati in
setOverlayFrameAnchor()
. Se utilizziOverlaySettings.Builder.setOverlayFrameAnchor()
, inverti i valori x e y moltiplicandoli per-1
. - Correzione del bug per cui
TimestampWrapper
si arresta in modo anomalo quando viene utilizzato conExoPlayer#setVideoEffects
(#821). - Modifica lo spazio di lavoro predefinito per i colori SDR da colori lineari a video SDR BT.709 elettrico. Fornisci anche una terza opzione per mantenere lo spazio colore originale.
- Consenti la definizione dell'ordine Z indeterminato di EditedMediaItemSequences (#1055).
- Mantenere un intervallo di luminanza coerente in diversi contenuti HDR (utilizza l'intervallo HLG).
- Aggiungi il supporto per le sovrapposizioni Ultra HDR (bitmap) sui contenuti HDR.
- Consenti l'utilizzo degli effetti
SeparableConvolution
prima dell'API 26. - Rimuovi
OverlaySettings.useHdr
inutilizzati poiché l'intervallo dinamico della sovrapposizione e del frame deve corrispondere. - Aggiungi il supporto HDR per
TextOverlay
. La luminanza dell'overlay di testo può essere regolata conOverlaySettings.Builder.setHdrLuminanceMultiplier()
.
- Supporta più modifiche della velocità all'interno dello stesso
- Estensione IMA:
- Promuovi l'API richiesta per la riproduzione di stream di annunci DAI alla versione stabile.
- Aggiungi
replaceAdTagParameters(Map <String, String>)
aImaServerSideAdInsertionMediaSource.AdLoader
che consente di sostituire i parametri del tag annuncio in fase di runtime. - Correzione del bug per cui
VideoAdPlayer.VideoAdPlayerCallback.onError()
non veniva chiamato quando si verificava un errore del player durante la riproduzione dell'annuncio (#1334). - Aumenta la versione dell'SDK IMA a 3.33.0 per correggere un
NullPointerException
quando utilizzi gli URI dei tag annunciodata://
(#700).
- Sessione:
- Modifica il valore predefinito di
CommandButton.enabled
intrue
e assicurati che il valore possa rimanere false per i controller anche se il comando associato è disponibile. - Aggiungi costanti di icone per
CommandButton
da utilizzare al posto delle risorse di icone personalizzate. - Aggiungi
MediaSessionService.isPlaybackOngoing()
per consentire alle app di verificare se il servizio deve essere interrotto inonTaskRemoved()
(#1219). - Aggiungi
MediaSessionService.pauseAllPlayersAndStopSelf()
che consente comodamente di mettere in pausa la riproduzione di tutte le sessioni e chiamarestopSelf()
per terminare il ciclo di vita diMediaSessionService
. - Esegui l'override di
MediaSessionService.onTaskRemoved(Intent)
per fornire un'implementazione predefinita sicura che mantiene il servizio in esecuzione in primo piano se la riproduzione è in corso o lo interrompe in caso contrario. - Nascondi la barra di ricerca nella notifica multimediale per i live streaming non impostando la durata nei metadati della sessione della piattaforma (#1256).
- Allinea la conversione di
MediaMetadata
aMediaDescriptionCompat
per utilizzare lo stesso ordine e la stessa logica preferiti quando selezioni le proprietà dei metadati come in media1. - Aggiungi
MediaSession.sendError()
che consente di inviare errori non irreversibili al controller Media3. Quando utilizzi il controller di notifica (vediMediaSession.getMediaNotificationControllerInfo()
), l'errore personalizzato viene utilizzato per aggiornare loPlaybackState
della sessione della piattaforma a uno stato di errore con le informazioni sull'errore fornite (#543). - Aggiungi
MediaSession.Callback.onPlayerInteractionFinished()
per informare le sessioni quando una serie di interazioni del giocatore da un controller specifico è terminata. - Aggiungi
SessionError
e utilizzalo inSessionResult
eLibraryResult
anziché il codice di errore per fornire maggiori informazioni sull'errore e su come risolverlo, se possibile. - Pubblica il codice dell'app di test del controller media3 che può essere utilizzata per testare le interazioni con le app che pubblicano una sessione multimediale.
- Propaga gli extra passati a
MediaSession[Builder].setSessionExtras()
di media3 aPlaybackStateCompat.getExtras()
di un controller media1. - Mappa gli errori irreversibili e non irreversibili da e verso la sessione della piattaforma. Un
PlaybackException
viene mappato a uno stato di errore irreversibile diPlaybackStateCompat
. UnSessionError
inviato al controller di notifica dei contenuti multimediali conMediaSession.sendError(ControllerInfo, SessionError)
viene mappato a un errore non fatale inPlaybackStateCompat
, il che significa che il codice e il messaggio di errore sono impostati, ma lo stato della sessione della piattaforma rimane diverso daSTATE_ERROR
. - Consente di impostare l'attività della sessione per controller in modo da ignorare l'attività della sessione globale. L'attività della sessione può essere definita per un
controller al momento della connessione creando un
ConnectionResult
conAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Una volta connessa, l'attività della sessione può essere aggiornata conMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - Migliora la replica degli errori delle chiamate a
MediaLibrarySession.Callback
. La replica degli errori ora può essere configurata utilizzandoMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
per scegliere il tipo di errore o disattivare la replica degli errori, che è attiva per impostazione predefinita.
- Modifica il valore predefinito di
- UI:
- Aggiungi il supporto per la visualizzazione delle immagini a
PlayerView
quando è connesso a unExoPlayer
(#1144). - Aggiungi la personalizzazione di varie icone in
PlayerControlView
tramite attributi XML per consentire diversi elementi disegnabili per istanzaPlayerView
, anziché override globali (#1200). - Soluzione alternativa a un bug della piattaforma che causa lo stiramento/il ritaglio del video quando si utilizza
SurfaceView
all'interno di unAndroidView
sull'API 34 (#1237).
- Aggiungi il supporto per la visualizzazione delle immagini a
- Download:
- Assicurati che
DownloadHelper
non rilasci istanzeRenderer
non rilasciate, che possono causare l'arresto anomalo di un'app conIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- Assicurati che
- Estensione Cronet:
- Correggi
SocketTimeoutException
inCronetDataSource
. In alcune versioni di Cronet, la richiesta fornita dal callback non è sempre la stessa. Ciò comporta il mancato completamento del callback e il timeout della richiesta (https://issuetracker.google.com/328442628).
- Correggi
- Estensione HLS:
- Correzione del bug per cui i campioni EMSG in attesa di una discontinuità venivano delegati in
HlsSampleStreamWrapper
con un offset errato che causava unIndexOutOfBoundsException
o unIllegalArgumentException
(#1002). - È stato corretto un bug a causa del quale le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
- Correzione del bug per cui l'attivazione di CMCD per HLS con segmenti di inizializzazione
comportava
Source Error
eIllegalArgumentException
. - È stato corretto un bug a causa del quale le playlist di riproduzione non principali non venivano aggiornate durante la riproduzione live (#1240).
- Correzione del bug per cui l'attivazione di CMCD per i live streaming HLS causa
ArrayIndexOutOfBoundsException
(#1395).
- Correzione del bug per cui i campioni EMSG in attesa di una discontinuità venivano delegati in
- Estensione DASH:
- Estensione Cast:
- Correzione del bug che convertiva il titolo dell'album di
MediaQueueItem
nell'artista nell'elemento multimediale Media3 (#1255).
- Correzione del bug che convertiva il titolo dell'album di
- Test Utilities:
- Implementa
onInit()
eonRelease()
inFakeRenderer
. - Modifica i metodi
TestPlayerRunHelper.runUntil()/playUntil()
in modo che non vengano eseguiti in caso di errori non irreversibili (ad es. quelli segnalati aAnalyticsListener.onVideoCodecError()
). Utilizza la nuova catena di metodiTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
per disattivare questo comportamento.
- Implementa
- App demo:
- Utilizza
DefaultPreloadManager
nell'app demo per i video nel formato breve. - Consenti l'impostazione della modalità di ripetizione con argomenti
Intent
dalla riga di comando (#1266). - Utilizzare
HttpEngineDataSource
comeHttpDataSource
se supportato dal dispositivo.
- Utilizza
- Rimuovi i simboli ritirati:
- Rimuovi
CronetDataSourceFactory
. Utilizza inveceCronetDataSource.Factory
. - Rimuovi alcuni costruttori di
DataSpec
. Utilizza inveceDataSpec.Builder
. - Rimuovi il metodo
setContentTypePredicate(Predicate)
daDefaultHttpDataSource
,OkHttpDataSource
eCronetDataSource
. Utilizza il metodo equivalente su ogniXXXDataSource.Factory
. - Rimuovi i costruttori
OkHttpDataSource
eOkHttpDataSourceFactory
. Utilizza inveceOkHttpDataSource.Factory
. - Rimuovi
PlayerMessage.setHandler(Handler)
. Utilizza invecesetLooper(Looper)
. - Rimuovi il campo
Timeline.Window.isLive
. Utilizza invece il metodoisLive()
. - Rimuovi i costruttori
DefaultHttpDataSource
. UtilizzaDefaultHttpDataSource.Factory
. - Rimuovi
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. UtilizzaDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
. - Rimuovi
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. Utilizza inveceMediaCodecInfo.canReuseCodec(Format, Format)
. - Rimuovi il metodo
DrmSessionManager.DUMMY
egetDummyDrmSessionManager()
. Utilizza inveceDrmSessionManager.DRM_UNSUPPORTED
. - Rimuovi
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
. Utilizza gli overload che accettano unDecoderReuseEvaluation
. - Rimuovi le costanti
RendererSupport.FormatSupport
IntDef eFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
. Utilizza le costanti e IntDef equivalenti inandroidx.media3.common.C
(ad es.C.FORMAT_HANDLED
). - Rimuovi l'interfaccia
Bundleable
. Ciò include la rimozione di tutti i campi costantiBundleable.Creator<Foo> CREATOR
. I chiamanti devono utilizzare i metodiBundle toBundle()
estatic Foo fromBundle(Bundle)
su ogni tipo.
- Rimuovi
Versione 1.4.0-rc01
10 luglio 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-beta01
26 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha02
7 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha01
17 aprile 2024
Utilizza la versione stabile 1.4.0.
Versione 1.3.0
Versione 1.3.1
11 aprile 2024
androidx.media3:media3-*:1.3.1
viene ritirata.
La versione 1.3.1 contiene questi commit.
- Libreria comune:
- Aggiungi
Format.labels
per consentire etichette localizzate o alternative.
- Aggiungi
- ExoPlayer:
- È stato risolto il problema per cui
PreloadMediaPeriod
non riesce a conservare gli stream quando vengono precaricati di nuovo. - Applica il valore
TrackSelectionResult
corrispondente corretto al periodo di riproduzione nella riselezione della traccia. - Avvia i renderer con attivazione anticipata solo dopo aver fatto avanzare il periodo di riproduzione durante la transizione tra gli elementi multimediali (#1017).
- Aggiungi il tipo restituito mancante alla regola proguard
-keepclasseswithmembers
perDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- È stato risolto il problema per cui
- Transformer:
- Aggiungi una soluzione alternativa per l'eccezione generata perché
MediaMuxer
non supporta i timestamp di presentazione negativi prima dell'API 30.
- Aggiungi una soluzione alternativa per l'eccezione generata perché
- Selezione tracce:
DefaultTrackSelector
: preferisce le tracce video con una frequenza di frame "ragionevole" (>=10 fps) rispetto a quelle con una frequenza di frame inferiore o non impostata. In questo modo, il player seleziona la traccia video "reale" nei file MP4 estratti dalle foto in movimento che possono contenere due tracce HEVC, una con una risoluzione più alta ma un numero di frame molto ridotto (#1051).
- Estrattori:
- Risolto il problema per cui il padding non veniva ignorato durante la lettura di blocchi di dimensioni dispari dai file WAV (#1117).
- MP3: compila
Format.averageBitrate
dai frame dei metadati comeXING
eVBRI
. - MPEG-TS: ripristina una modifica che mirava a garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Ciò è dovuto alla modifica che causa nuovi problemi con gli stream HLS solo con I-frame (#1150) e gli stream HLS H.262 (#1126).
- Audio:
- Consenti il recupero del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità offload.
- Video:
- Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione degli stream H265 a 60 fps come non supportati
- Aggiungi una soluzione alternativa che garantisca il rendering del primo frame durante il tunneling anche se il dispositivo non lo esegue automaticamente come richiesto dall'API (#1169). (#966).
- Risolto il problema per cui la gestione delle informazioni sul colore HDR causa un comportamento anomalo del codec e impedisce il cambio di formato adattivo per le tracce video SDR (#1158).
- Testo:
- WebVTT: impedisci che cue consecutivi creino istanze
CuesWithTiming
aggiuntive spurie daWebvttParser.parse
(#1177).
- WebVTT: impedisci che cue consecutivi creino istanze
- DRM:
- Soluzione alternativa per un
NoSuchMethodError
che può essere generato dal frameworkMediaDrm
anziché daResourceBusyException
oNotProvisionedException
su alcuni dispositivi Android 14 (#1145).
- Soluzione alternativa per un
- Effetto:
- Miglioramento della mappatura della tonalità PQ in SDR mediante la conversione degli spazi colore.
- Sessione:
- UI:
- Esegui il fallback per includere il nome della lingua della traccia audio se
Locale
non riesce a identificare un nome visualizzato (#988).
- Esegui il fallback per includere il nome della lingua della traccia audio se
- Estensione DASH:
- Inserisci tutti gli elementi
Label
del manifest inFormat.labels
(#1054).
- Inserisci tutti gli elementi
- Estensione RTSP:
- Ignora i valori vuoti delle informazioni sulla sessione (i-tag) nell'analisi SDP (#1087).
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Disattiva l'estensione MIDI come dipendenza locale per impostazione predefinita perché richiede la configurazione di un repository Maven aggiuntivo. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riattivarlo.
Versione 1.3.0
6 marzo 2024
androidx.media3:media3-*:1.3.0
viene ritirata.
La versione 1.3.0 contiene questi commit.
- Libreria comune:
- Implementa il supporto per gli URI delle risorse non elaborate
android.resource://package/[type/]name
in cuipackage
è diverso dal pacchetto dell'applicazione corrente. È sempre stato documentato che funziona, ma non è stato implementato correttamente fino ad ora. - Normalizza i tipi MIME impostati dal codice dell'app o letti dai contenuti multimediali in modo che siano completamente in minuscolo.
- Definisci gli annunci con un
MediaItem
completo anziché un singoloUri
inAdPlaybackState
. - Aumenta
minSdk
a 19 (Android KitKat). Questo è in linea con tutte le altre librerie AndroidX ed è necessario per eseguire l'upgrade alle versioni più recenti delle nostre dipendenze AndroidX. - Compila sia
artworkUri
siaartworkData
inMediaMetadata.Builder.populate(MediaMetadata)
quando almeno uno dei due non è nullo (#964).
- Implementa il supporto per gli URI delle risorse non elaborate
- ExoPlayer:
- Aggiungi
PreloadMediaSource
ePreloadMediaPeriod
che consentono alle app di precaricare un'origine multimediale di contenuti in una posizione iniziale specifica prima della riproduzione.PreloadMediaSource
si occupa di preparare l'origine dei contenuti multimediali per ricevere ilTimeline
, preparare e memorizzare nella cache il periodo nella posizione iniziale specificata, selezionare le tracce e caricare i dati multimediali per il periodo. Le app controllano l'avanzamento del precaricamento implementandoPreloadMediaSource.PreloadControl
e impostano l'origine precaricata sul player per la riproduzione. - Aggiungi
ExoPlayer.setImageOutput
che consente alle app di impostareImageRenderer.ImageOutput
. DefaultRenderersFactory
ora fornisce unImageRenderer
al giocatore per impostazione predefinita conImageOutput
eImageDecoder.Factory.DEFAULT
nulli.- Emetti l'evento
Player.Listener.onPositionDiscontinuity
quando il silenzio viene saltato (#765). - Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi
abilitare questa opzione utilizzando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Supporta le origini multimediali adattive con
PreloadMediaSource
. - Implementa
HttpEngineDataSource
, unHttpDataSource
utilizzando l'API HttpEngine. - Evita la creazione di sottoclassi
CompositeSequenceableLoader
. Questo componente è stato precedentemente reso estensibile ma non è mai stato creato come sottoclasse all'interno della libreria. Le personalizzazioni possono essere eseguite wrapping di un'istanza utilizzando il pattern Decorator e implementando unCompositeSequenceableLoaderFactory
personalizzato. - È stato risolto il problema per cui la ripetizione dello stesso orario causava la cancellazione dei metadati di questo elemento (#1007).
- Rinomina i metodi
experimentalSetSubtitleParserFactory
suBundledChunkExtractor.Factory
eDefaultHlsExtractorFactory
insetSubtitleParserFactory
e non consentire il passaggio dinull
. Utilizza i nuovi metodiexperimentalParseSubtitlesDuringExtraction(boolean)
per controllare il comportamento di analisi. - Aggiungi il supporto per la personalizzazione di
SubtitleParser.Factory
utilizzato durante l'estrazione. È possibile ottenere questo risultato conMediaSource.Factory.setSubtitleParserFactory()
. - Aggiungi il prefisso dell'origine a tutti i campi
Format.id
generati daMergingMediaSource
. In questo modo è più facile identificare l'origine che ha prodotto unFormat
(#883). - Correggi l'espressione regolare utilizzata per la convalida dei nomi delle chiavi Common Media Client Data (CMCD) personalizzate modificandola in modo che controlli solo il trattino (#1028).
- Interrompi la doppia codifica dei parametri di query CMCD (#1075).
- Aggiungi
- Transformer:
- Aggiunta del supporto per l'appiattimento dei video in slow motion H.265/HEVC SEF.
- Aumenta la velocità di transmuxing, soprattutto per le modifiche di "rimozione video".
- Aggiungi l'API per assicurarti che il file di output inizi con un frame video. In questo modo, l'output delle operazioni di taglio è più compatibile con le implementazioni del player che non mostrano il primo frame video finché non viene visualizzato il timestamp di presentazione (#829).
- Aggiungi il supporto per l'ottimizzazione delle operazioni di taglio MP4 di un singolo asset.
- Aggiungi il supporto per garantire che un fotogramma video abbia il primo timestamp nel file di output. Correzioni dei file di output che iniziano con un fotogramma nero sui lettori basati su iOS (#829).
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.selectImageTrack
per attivare la selezione della traccia dell'immagine. - Aggiungi
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
per determinare se selezionare una traccia di immagini se sono disponibili sia una traccia di immagini che una traccia video. Il valore predefinito èfalse
, il che significa che la selezione di una traccia video è prioritaria.
- Aggiungi
- Estrattori:
- Aggiungi l'analisi AV1C aggiuntiva all'estrattore MP4 per recuperare i valori
ColorInfo.colorSpace
,ColorInfo.colorTransfer
eColorInfo.colorRange
(#692). - MP3: utilizza la ricerca a bitrate costante (CBR) per i file con un'intestazione
Info
(l'equivalente CBR dell'intestazioneXing
). In precedenza utilizzavamo la tabella di ricerca dall'intestazioneInfo
, ma ciò comporta una ricerca meno precisa rispetto a quando la ignoriamo e supponiamo che il file sia CBR. - MPEG2-TS: aggiungi il supporto di DTS, DTS-LBR e DTS:X Profile2 (#275).
- Estrai i tipi di audio dai descrittori TS e mappali ai flag di ruolo, consentendo agli utenti di effettuare selezioni più informate delle tracce audio (#973).
- Aggiungi l'analisi AV1C aggiuntiva all'estrattore MP4 per recuperare i valori
- Audio:
- Video:
- Modifica il costruttore
MediaCodecVideoRenderer
che accetta un argomentoVideoFrameProcessor.Factory
e sostituiscilo con un costruttore che accetta un argomentoVideoSinkProvider
. Le app che vogliono inserire unVideoFrameProcessor.Factory
personalizzato possono istanziare unCompositingVideoSinkProvider
che utilizza ilVideoFrameProcessor.Factory
personalizzato e passare il fornitore del sink video aMediaCodecVideoRenderer
.
- Modifica il costruttore
- Testo:
- Correzione della serializzazione dei cue bitmap per risolvere l'errore
Tried to marshall a Parcel that contained Binder objects
quando si utilizzaDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: ignora il valore
rowLock
. La specifica CEA-708-E S-2023 indica cherowLock
ecolumnLock
devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto dicolumnLock
non è implementato, quindi si presume che sia sempre falso).
- Correzione della serializzazione dei cue bitmap per risolvere l'errore
- Immagine:
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e le singole miniature vengono fornite a
ImageOutput
in prossimità degli orari di presentazione.
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e le singole miniature vengono fornite a
- DRM:
- Riproduci immediatamente i campioni non criptati "clear lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i campioni criptati successivi non sono ancora pronte. Ciò potrebbe causare interruzioni della riproduzione se le chiavi non sono ancora pronte
quando la posizione di riproduzione raggiunge i campioni criptati (ma in precedenza
la riproduzione non sarebbe iniziata affatto a questo punto). Questo comportamento può
essere disattivato con
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Riproduci immediatamente i campioni non criptati "clear lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i campioni criptati successivi non sono ancora pronte. Ciò potrebbe causare interruzioni della riproduzione se le chiavi non sono ancora pronte
quando la posizione di riproduzione raggiunge i campioni criptati (ma in precedenza
la riproduzione non sarebbe iniziata affatto a questo punto). Questo comportamento può
essere disattivato con
- Estensione IMA:
- Risolvi il problema per cui gli annunci DASH e HLS senza l'estensione file appropriata non possono essere riprodotti.
- Sessione:
- Disattivare il rilevamento del doppio clic per le app TV (#962).
- Risolto il problema per cui
MediaItem.RequestMetadata
con solo extra non nulli non viene trasmesso tra i controller multimediali e le sessioni. - Aggiungi un costruttore a
MediaLibrarySession.Builder
che accetta solo unContext
anziché unMediaLibraryService
.
- Estensione HLS:
- Riduci
HlsMediaPeriod
alla visibilità privata del pacchetto. Questo tipo non deve dipendere direttamente da elementi esterni al pacchetto HLS. - Risoluzione della ricerca all'inizio di un segmento in modo più efficiente (#1031).
- Riduci
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Decodificatore MIDI: ignora i messaggi di eventi SysEx (#710).
- Test Utilities:
- Non mettere in pausa la riproduzione in
TestPlayerRunHelper.playUntilPosition
. Il test mantiene la riproduzione in stato di riproduzione, ma sospende l'avanzamento finché non è in grado di aggiungere asserzioni e ulteriori azioni.
- Non mettere in pausa la riproduzione in
- App demo:
- Aggiungi un modulo demo di shortform per dimostrare l'utilizzo di
PreloadMediaSource
con il caso d'uso dei contenuti nel formato breve.
- Aggiungi un modulo demo di shortform per dimostrare l'utilizzo di
Versione 1.3.0-rc01
22 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-beta01
7 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-alpha01
15 gennaio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.2.0
Versione 1.2.1
9 gennaio 2024
- ExoPlayer:
- Risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
LiveConfiguration.min/maxOffset
continuano a regolare l'offset sumin/maxOffset
. - Correzione del problema relativo ai layout dei canali OPUS e VORBIS errati per 3, 5, 6, 7 e 8 canali (#8396).
- È stato risolto il problema per cui le selezioni delle tracce dopo la ricerca fino a zero in un live streaming consentivano erroneamente l'avvio dello stream nella posizione predefinita (#9347).
- Risolvi il problema per cui le nuove istanze di
CmcdData.Factory
ricevevano valori negativi perbufferedDurationUs
dalle origini dei chunk, con conseguenteIllegalArgumentException
(#888).
- Risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
- Transformer:
- Soluzione alternativa a un problema per cui l'encoder generava un errore in fase di configurazione a causa dell'impostazione di una frequenza operativa elevata.
- Estrattori:
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
ROLE_FLAG_ALTERNATE
per evitare che vengano selezionate automaticamente per la riproduzione a causa della loro risoluzione più elevata. - Correzione del rilevamento errato dei fotogrammi chiave per gli stream TS H264 (#864).
- Correzione della stima della durata dei flussi TS più lunghi di 47721 secondi (#855).
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
- Audio:
- Correzione della gestione di EOS per
SilenceSkippingAudioProcessor
quando viene chiamato più volte (#712).
- Correzione della gestione di EOS per
- Video:
- Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione dei flussi AVC a 60 fps come non supportati (#693).
- Metadati:
- Correzione del bug per cui
MediaMetadata
veniva compilato solo dai commenti Vorbis con chiavi in maiuscolo (#876). - Catch
OutOfMemoryError
durante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni del tag anziché interrompersi completamente.
- Correzione del bug per cui
- DRM:
- Estendi la soluzione alternativa per l'URL della licenza ClearKey
https://default.url
spurio all'API 33+ (in precedenza la soluzione alternativa si applicava solo all'API 33) (#837). - Correzione di
ERROR_DRM_SESSION_NOT_OPENED
quando si passa da contenuti criptati a contenuti non criptati senza una superficie collegata al lettore. L'errore è dovuto all'utilizzo errato di un decoder sicuro per riprodurre i contenuti non protetti.
- Estendi la soluzione alternativa per l'URL della licenza ClearKey
- Sessione:
- Inserisci le chiavi e i valori personalizzati in
MediaMetadataCompat
perMediaMetadata.extras
eMediaMetadata.extras
perMediaMetadataCompat
(#756, #802). - Correzione della trasmissione
notifyChildrenChanged
per i controller legacy (#644). - È stato corretto un bug per cui l'impostazione di un tempo negativo per un timer
setWhen
disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903). - Correzione di
IllegalStateException
quando il controller di notifica dei contenuti multimediali non ha completato la connessione quando viene richiesto il primo aggiornamento della notifica (#917).
- Inserisci le chiavi e i valori personalizzati in
- UI:
- Estensione DASH:
- Analizza "f800" come conteggio dei canali pari a 5 per Dolby nel manifest DASH (#688).
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Estensione Cast:
- Sanitizzazione della creazione di un
Timeline
per evitare l'arresto anomalo dell'app durante il caricamento dei contenuti multimediali non riuscito sul dispositivo di trasmissione (#708).
- Sanitizzazione della creazione di un
Versione 1.2.0
15 novembre 2023
- Libreria comune:
- Aggiungi un parametro
@Nullable Throwable
ai metodi nell'interfacciaLog.Logger
. Il parametromessage
di questi metodi non contiene più alcuna informazione suThrowable
passato ai metodiLog.{d,i,w,e}()
, pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se necessario (possibilmente utilizzandoLogger.appendThrowableString(String, Throwable)
). - Risolvi il problema di compatibilità di Kotlin per cui i parametri di tipo generico nullable
e i tipi di elementi array nullable non vengono rilevati come nullable. Esempi
sono i parametri dei metodi
TrackSelectorResult
eSimpleDecoder
(#6792). - Modifica il comportamento predefinito della UI e delle notifiche in
Util.shouldShowPlayButton
per mostrare un pulsante "Riproduci" mentre la riproduzione è temporaneamente sospesa (ad es. a causa della perdita temporanea della messa a fuoco audio). Il comportamento precedente può essere mantenuto utilizzandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Esegui l'upgrade di
androidx.annotation:annotation-experimental
a1.3.1
per correggere https://issuetracker.google.com/251172715. - Sposta
ExoPlayer.setAudioAttributes
nell'interfacciaPlayer
.
- Aggiungi un parametro
- ExoPlayer:
- Correzione dei problemi di ricerca negli stream AC4 causati dalla mancata identificazione corretta dei campioni di sola decodifica (#11000).
- Aggiungi la soppressione della riproduzione su dispositivi di output audio non adatti (ad es. l'altoparlante integrato sui dispositivi Wear OS) quando questa funzionalità è attivata tramite
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Il motivo della soppressione della riproduzione verrà aggiornato aPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
se si tenta la riproduzione quando non sono disponibili uscite audio adatte o se tutte le uscite adatte vengono disconnesse durante la riproduzione. Il motivo della soppressione verrà rimosso quando viene collegato un output adatto. - Aggiungi
MediaSource.canUpdateMediaItem
eMediaSource.updateMediaItem
per accettare gli aggiornamenti diMediaItem
dopo la creazione tramitePlayer.replaceMediaItem(s)
. - Consenti gli aggiornamenti di
MediaItem
per tutte le classiMediaSource
fornite dalla libreria tramitePlayer.replaceMediaItem(s)
(#33, #9978). - Rinomina
MimeTypes.TEXT_EXOPLAYER_CUES
inMimeTypes.APPLICATION_MEDIA3_CUES
. - Aggiungi
PngExtractor
che invia e legge un intero file PNG inTrackOutput
come un campione. - Migliora il metodo
SequenceableLoader.continueLoading(long)
nell'interfacciaSequenceableLoader
perSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
contiene parametri aggiuntivi, tra cuiplaybackSpeed
elastRebufferRealtimeMs
, oltre aplaybackPositionUs
esistente. - Migliora il metodo
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
nell'interfacciaChunkSource
perChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Aggiungi campi aggiuntivi alla registrazione dei dati del client multimediale comune (CMCD): buffer
starvation (
bs
), deadline (dl
), playback rate (pr
) and startup (su
) (#8699). - Aggiungi la profondità di bit di luminanza e crominanza a
ColorInfo
(#491). - Aggiungi campi aggiuntivi alla registrazione dei dati del client multimediale comune (CMCD): richiesta dell'oggetto successivo (
nor
) e richiesta dell'intervallo successivo (nrr
) (#8699). - Aggiungi la funzionalità per trasmettere i dati Common Media Client Data (CMCD) utilizzando i parametri di query (#553).
- Correggi
ConcurrentModificationException
inExperimentalBandwidthMeter
(#612). - Aggiungi il parametro
MediaPeriodId
aCompositeMediaSource.getMediaTimeForChildMediaTime
. - Supporta
ClippingMediaSource
(e altre origini con offset di periodo/intervallo di tempo) inConcatenatingMediaSource2
(#11226). - Modifica
BaseRenderer.onStreamChanged()
per ricevere anche un argomentoMediaPeriodId
.
- Transformer:
- Analizza i dati di rotazione EXIF per gli input immagine.
- Rimuovi il tipo di annotazione
TransformationRequest.HdrMode
e le relative costanti. UtilizzaComposition.HdrMode
e le relative costanti. - Semplifica il
OverlaySettings
per risolvere i problemi di rotazione. - Modificati i parametri
frameRate
edurationUs
diSampleConsumer.queueInputBitmap
inTimestampIterator
.
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
per consentire o vietare esplicitamente l'adattamento non ottimale. Il valore predefinito rimane al comportamento attuale ditrue
.
- Aggiungi
- Estrattori:
- MPEG-TS: assicurati che l'ultimo frame venga sottoposto a rendering passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909).
- Correzione dell'errore ortografico durante la determinazione di
rotationDegrees
. Modifica apportata daprojectionPosePitch
aprojectionPoseRoll
(#461). - Rimuovi l'ipotesi che le istanze
Extractor
possano essere ispezionate direttamente coninstanceof
. Se vuoi accedere in fase di runtime ai dettagli di implementazione di unExtractor
, devi prima chiamareExtractor.getUnderlyingInstance
. - Aggiungi
BmpExtractor
. - Aggiungi
WebpExtractor
. - Aggiungi
HeifExtractor
. - Aggiungi
il supporto di QuickTime Classic
a
Mp4Extractor
.
- Audio:
- Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza
la codifica PCM per
lpcm
in MP4. - Aggiungi il supporto per l'estrazione dell'audio Vorbis in MP4.
- Aggiungi
AudioSink.getFormatOffloadSupport(Format)
che recupera il livello di supporto dell'offload che il sink può fornire per il formato tramite unDefaultAudioOffloadSupportProvider
. Restituisce il nuovoAudioOffloadSupport
che contieneisFormatSupported
,isGaplessSupported
eisSpeedChangeSupported
. - Aggiungi
AudioSink.setOffloadMode()
tramite cui viene configurata la configurazione di offload nel sink audio. Il valore predefinito èAudioSink.OFFLOAD_MODE_DISABLED
. - Il trasferimento può essere attivato tramite
setAudioOffloadPreference
inTrackSelectionParameters
. Se la preferenza impostata è l'attivazione, il dispositivo supporta l'offload per il formato e la selezione della traccia è una singola traccia audio, l'offload audio verrà attivato. - Se
audioOffloadModePreference
è impostato suAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,DefaultTrackSelector
selezionerà solo una traccia audio e solo se il formato della traccia è supportato nell'offload. Se nessuna traccia audio è supportata nell'offload, non verrà selezionata alcuna traccia. - Disattivazione del supporto gapless per l'offload quando il livello API è precedente a 33 a causa di un problema di posizione di riproduzione dopo la transizione della traccia.
- Rimuovi il parametro
enableOffload
dalla firma del metodoDefaultRenderersFactory.buildAudioSink
. - Rimuovi il metodo
DefaultAudioSink.Builder.setOffloadMode
. - Rimuovi il valore intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Aggiungi il supporto per i metadati gapless di Opus durante la riproduzione con scaricamento.
- Consenti il recupero del renderer disattivando l'offload se non è riuscito alla prima scrittura (#627).
- Attiva la pianificazione dell'offload per impostazione predefinita per la riproduzione con offload solo audio.
- Elimina
ExoPlayer.experimentalSetOffloadSchedulingEnabled
eAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
è stato rinominato inonSleepingForOffloadChanged
eonExperimentalOffloadedPlayback
inonOffloadedPlayback
.- Sposta le interfacce e le definizioni relative alla modalità di offload audio in una classe
AudioOffloadPreferences
interna.TrackSelectionParameters
- Aggiungi i callback
onAudioTrackInitialized
eonAudioTrackReleased
aAnalyticsListener
,AudioRendererEventListener
eAudioSink.Listener
. - Correzione del problema di underflow del buffer audio DTS Express (#650).
- Correzione del bug per cui il controllo delle funzionalità per E-AC3-JOC genera un
IllegalArgumentException
(#677).
- Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza
la codifica PCM per
- Video:
- Consenti a
MediaCodecVideoRenderer
di utilizzare unVideoFrameProcessor.Factory
personalizzato. - È stato corretto un bug a causa del quale non era possibile eseguire il rendering del primo frame se lo stream audio inizia con timestamp negativi (#291).
- Consenti a
- Testo:
- Rimuovi
ExoplayerCuesDecoder
. Le tracce di testo consampleMimeType = application/x-media3-cues
ora vengono gestite direttamente daTextRenderer
senza bisogno di un'istanzaSubtitleDecoder
.
- Rimuovi
- Metadati:
MetadataDecoder.decode
non verrà più chiamato per i campioni "solo decodifica" poiché l'implementazione deve comunque restituire null.
- Effetto:
- Aggiungi
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
input bitmap in coda in base al timestamp. - Modifica
VideoFrameProcessor.registerInputStream()
in modo che non blocchi. Le app devono implementareVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Modificati i parametri
frameRate
edurationUs
diVideoFrameProcessor.queueInputBitmap
inTimestampIterator
.
- Aggiungi
- Estensione IMA:
- È stato corretto un bug per cui un live streaming DASH multi-periodo che non è il primo elemento di una playlist può generare un'eccezione (#571).
- Rilascia StreamManager prima di chiamare
AdsLoader.destroy()
- Aumenta la versione dell'SDK IMA a 3.31.0.
- Sessione:
- Imposta il comportamento del servizio in primo piano delle notifiche su
FOREGROUND_SERVICE_IMMEDIATE
inDefaultMediaNotificationProvider
(#167). - Utilizza solo
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
sopra l'API 31 per evitare problemi con l'API ritirata sui dispositivi Samsung (#167). - Utilizza il controller di notifica dei contenuti multimediali come proxy per impostare i comandi disponibili e il layout personalizzato utilizzato per compilare la notifica e la sessione della piattaforma.
- Converti gli eventi dei pulsanti multimediali ricevuti da
MediaSessionService.onStartCommand()
in Media3 anziché indirizzarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controller del chiamante è sempre il controller delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli API supportati. - È stato corretto un bug per cui
MediaController.getCurrentPosition()
non avanza quando è connesso a unMediaSessionCompat
legacy. - Aggiungi
MediaLibrarySession.getSubscribedControllers(mediaId)
per comodità. - Esegui l'override di
MediaLibrarySession.Callback.onSubscribe()
per confermare la disponibilità dell'ID genitore a cui è iscritto il controller. Se l'operazione va a buon fine, l'abbonamento viene accettato enotifyChildrenChanged()
viene chiamato immediatamente per informare il browser (#561). - Aggiungi il modulo demo della sessione per Automotive OS e attiva la demo della sessione per Android Auto.
- Non impostare la coda della sessione del framework quando
COMMAND_GET_TIMELINE
non è disponibile per il controller di notifica multimediale. Con Android Auto come controller client che legge dalla sessione del framework, il pulsantequeue
nell'interfaccia utente di Android Auto non viene visualizzato (#339). - Utilizza
DataSourceBitmapLoader
per impostazione predefinita anzichéSimpleBitmapLoader
(#271, #327). - Aggiungi
MediaSession.Callback.onMediaButtonEvent(Intent)
che consente alle app di ignorare la gestione predefinita degli eventi dei pulsanti multimediali.
- Imposta il comportamento del servizio in primo piano delle notifiche su
- UI:
- Aggiungi un'implementazione di
Player.Listener
per i dispositivi Wear OS che gestisce la soppressione della riproduzione a causa diPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
avviando una finestra di dialogo di sistema per consentire a un utente di connettere un'uscita audio adatta (ad es. cuffie Bluetooth). Il listener riprenderà automaticamente la riproduzione se viene connesso un dispositivo adatto entro un timeout configurabile (il valore predefinito è 5 minuti).
- Aggiungi un'implementazione di
- Download:
- Dichiara il tipo di servizio in primo piano "data sync" per
DownloadService
per la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungeredataSync
comeforegroundServiceType
nel manifest e aggiungere l'autorizzazioneFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- Dichiara il tipo di servizio in primo piano "data sync" per
- Estensione HLS:
- Aggiorna la playlist live HLS con un intervallo calcolato dall'ultima ora di inizio del caricamento anziché dall'ultima ora di completamento del caricamento (#663).
- Estensione DASH:
- Consenti più identificatori DASH uguali nell'URL del modello di segmento.
- Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Questo
supporta meglio l'unione di sottotitoli sovrapposti, inclusa
la risoluzione dello sfarfallio durante la transizione tra segmenti di sottotitoli. Puoi
attivare questa opzione
utilizzando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Estensione RTSP:
- Correzione di una condizione di competizione che potrebbe causare
IndexOutOfBoundsException
quando si esegue il fallback a TCP o la riproduzione si blocca in alcune situazioni. - Controlla lo stato nella configurazione RTSP quando viene restituito lo stato di caricamento di
RtspMediaPeriod
(#577). - Ignora i metodi di richiesta RTSP personalizzati nell'intestazione pubblica della risposta OPTIONS (#613).
- Utilizza il valore di timeout della risposta di configurazione RTSP nell'intervallo di tempo di invio delle richieste di opzioni RTSP keep-alive (#662).
- Correzione di una condizione di competizione che potrebbe causare
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Rilascia il modulo del decoder MIDI, che fornisce supporto per la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
- Aggiungi
DecoderOutputBuffer.shouldBeSkipped
per contrassegnare direttamente i buffer di output che non devono essere presentati. Questa soluzione è preferibile aC.BUFFER_FLAG_DECODE_ONLY
, che verrà ritirato. - Aggiungi
Decoder.setOutputStartTimeUs
eSimpleDecoder.isAtLeastOutputStartTimeUs
per consentire ai decoder di eliminare i campioni di sola decodifica prima dell'ora di inizio. Questo valore deve essere preferito aBuffer.isDecodeOnly
, che verrà ritirato. - Correzione del bug relativo alla pubblicazione dell'artefatto del decodificatore MIDI nel repository Maven. L'artefatto è stato rinominato in
media3-exoplayer-midi
(#734).
- Estensione Leanback:
- Correzione del bug per cui la disattivazione di una superficie può causare un
ArithmeticException
nel codice Leanback (#617).
- Correzione del bug per cui la disattivazione di una superficie può causare un
- Test Utilities:
- Rendi
TestExoPlayerBuilder
eFakeClock
compatibili con i test della UI Espresso e i test della UI Compose. È stato corretto un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con le visualizzazioni Espresso o Compose.
- Rendi
- Rimuovi i simboli ritirati:
- Rimuovi
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
eTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. UtilizzaComposition.Builder.setHdrMode(int)
e passaComposition
aTransformer.start(Composition, String)
. - Rimuovi il metodo
DownloadNotificationHelper.buildProgressNotification
deprecato e utilizza un metodo non deprecato che accetta un parametronotMetRequirements
.
- Rimuovi
Versione 1.2.0-rc01
1° novembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-beta01
19 ottobre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha02
29 settembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha01
17 agosto 2023
Utilizza la versione stabile 1.2.0.
Versione 1.1.0
Versione 1.1.1
16 agosto 2023
- Libreria comune:
- Rimuovi la dipendenza
multidex
aggiunta per errore da tutti i moduli (#499).
- Rimuovi la dipendenza
- ExoPlayer:
- È stato risolto un problema in
PlaybackStatsListener
per cui vengono creatiPlaybackStats
spuri dopo la cancellazione della playlist. - Aggiungi altri campi alla registrazione dei dati del client multimediale comune (CMCD): formato di streaming (sf), tipo di stream (st), versione (v), bitrate massimo (tb), durata dell'oggetto (d), throughput misurato (mtp) e tipo di oggetto (ot) (#8699).
- È stato risolto un problema in
- Audio:
- È stato corretto un bug per cui
Player.getState()
non passava mai aSTATE_ENDED
durante la riproduzione di file molto brevi (#538).
- È stato corretto un bug per cui
- Audio Offload:
- Aggiungi le pagine di intestazione dell'ID Ogg e dell'intestazione dei commenti al bitstream per la riproduzione di Opus offload in conformità con la RFC 7845.
- Video:
- H.265/HEVC: correggi l'analisi delle informazioni sulle immagini di riferimento a breve e lungo termine dell'SPS.
- Testo:
- CEA-608: modifica la logica di troncamento dei cue in modo che prenda in considerazione solo il testo visibile. In precedenza, il rientro e l'offset della tabulazione venivano inclusi quando si limitava la lunghezza del cue a 32 caratteri (il che era tecnicamente corretto secondo le specifiche) (#11019).
- Estensione IMA:
- Aumenta la versione dell'SDK IMA a 3.30.3.
- Sessione:
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia,
viene chiamato
MediaController.Listener.onCustomLayoutChanged
. Le app che vogliono inviare layout personalizzati diversi a controller Media3 diversi possono farlo inMediaSession.Callback.onConnect
utilizzando unAcceptedResultBuilder
per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione. - Risolti i casi in cui
MediaLibraryServiceLegacyStub
inviava un errore a unResult
che non supportava questa operazione, generando unUnsupportedOperationException
(#78). - Correggi il modo in cui
PlayerWrapper
crea unVolumeProviderCompat
determinandovolumeControlType
tramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUME
eCOMMAND_SET_DEVICE_VOLUME
) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
eCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia,
viene chiamato
Versione 1.1.0
5 luglio 2023
- Libreria comune:
- Aggiungi il motivo della soppressione per il percorso audio non idoneo e riproduci quando è pronto modifica il motivo della soppressione perché è troppo lungo. (#15).
- Aggiungere comandi al Player:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Aggiungi metodi sovraccarichi a Player che consentono agli utenti di specificare i flag del volume:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Aggiungi
Builder
perDeviceInfo
e ritira il costruttore esistente. - Aggiungi
DeviceInfo.routingControllerId
per specificare l'ID del controller di routing per le riproduzioni remote. - Aggiungi
Player.replaceMediaItem(s)
come scorciatoia per aggiungere e rimuovere elementi nella stessa posizione (#8046).
- ExoPlayer:
- Consenti a ExoPlayer di controllare i metodi di volume del dispositivo solo se
esplicitamente attivati. Usa
ExoPlayer.Builder.setDeviceVolumeControlEnabled
per accedere a:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
esetDeviceVolume(int, int)
increaseDeviceVolume(int)
eincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
edecreaseDeviceVolume(int, int)
- Aggiungi
FilteringMediaSource
che consente di filtrare i tipi di traccia disponibili da unMediaSource
. - Aggiungi il supporto per l'inclusione di Common Media Client Data (CMCD) nelle
richieste in uscita dei formati di streaming adattivo DASH, HLS e
Smooth Streaming. I seguenti campi,
br
,bl
,cid
,rtp
esid
, sono stati incorporati (#8699). Struttura dell'API e metodi dell'API:- La registrazione CMCD è disattivata per impostazione predefinita. Utilizza
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
per attivarla. - Tutte le chiavi sono attivate per impostazione predefinita, esegui l'override di
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
per filtrare le chiavi registrate. - Esegui l'override di
CmcdConfiguration.RequestConfig.getCustomData()
per attivare la registrazione delle chiavi personalizzate.
- La registrazione CMCD è disattivata per impostazione predefinita. Utilizza
- Aggiungi un'azione aggiuntiva al manifest della demo principale per semplificare l'avvio dell'app demo con un file
*.exolist.json
personalizzato (#439). - Aggiungi
ExoPlayer.setVideoEffects()
per l'utilizzo diEffect
durante la riproduzione video. - Aggiorna
SampleQueue
per archiviaresourceId
comelong
anziché comeint
. Ciò modifica le firme dei metodi pubbliciSampleQueue.sourceId
eSampleQueue.peekSourceId
. - Aggiungi parametri ai metodi
LoadControl
shouldStartPlayback
eonTracksSelected
che consentono di associare questi metodi alMediaPeriod
pertinente. - Modifica la firma di
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
aggiungendo un parametro della sequenza temporale che contiene i periodi con gli UID utilizzati come chiavi nella mappa. Questo è necessario per evitare problemi di concorrenza con i live streaming multi-periodo. - Depreca
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. È possibile chiamare la variante dei metodi senzamediaTimeOffsetUs
. Tieni presente che anche per le varianti obsolete, l'offset non viene più aggiunto astartTimeUs
eendTimeUs
degli oggettiMediaLoadData
inviati dal dispatcher. - Rinomina
ExoTrackSelection.blacklist
inexcludeTrack
eisBlacklisted
inisTrackExcluded
. - Correzione del comportamento incoerente tra
ExoPlayer.setMediaItem(s)
eaddMediaItem(s)
quando vengono chiamati su una playlist vuota.
- Consenti a ExoPlayer di controllare i metodi di volume del dispositivo solo se
esplicitamente attivati. Usa
- Transformer:
- Rimuovi
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. UtilizzaExoPlayerAssetLoader.Factory(MediaSource.Factory)
eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
invece. - Rimuovi
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - È stato corretto un bug per cui la trasformazione poteva bloccarsi (con conseguente timeout del muxer) se la fine dello stream video veniva segnalata nel momento in cui era in attesa di elaborazione un frame di input.
- Esegui query sui codec tramite
MediaCodecList
anziché utilizzare le utilitàfindDecoder/EncoderForFormat
per ampliare il supporto. - Rimuovi la configurazione dei frame B in
DefaultEncoderFactory
perché non funziona su alcuni dispositivi.
- Rimuovi
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
che è disattivato per impostazione predefinita. Se attivato,DefaultTrackSelector
attiverà una nuova selezione della traccia quando le funzionalità del renderer sono cambiate.
- Aggiungi
- Estrattori:
- Audio:
- Correzione di un bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e
AudioProcessors
sono attivi, ad esempio per il taglio senza interruzioni (#10847). - Incapsula i frame Opus nei pacchetti Ogg nelle riproduzioni dirette (offload).
- Estrapola la posizione attuale durante il sonno con la pianificazione dell'offload.
- Aggiungi
Renderer.release()
eAudioSink.release()
per rilasciare le risorse alla fine del ciclo di vita del giocatore. - Ascolta le modifiche alle funzionalità audio in
DefaultAudioSink
. Aggiungi un parametro obbligatoriocontext
nel costruttore diDefaultAudioSink
, con cuiDefaultAudioSink
si registrerà come listener diAudioCapabilitiesReceiver
e aggiornerà la proprietàaudioCapabilities
quando riceve una notifica di modifica delle funzionalità. - Propaga le modifiche alle funzionalità audio tramite un nuovo evento
onAudioCapabilitiesChanged
nell'interfacciaAudioSink.Listener
e una nuova interfacciaRendererCapabilities.Listener
che attiva gli eventionRendererCapabilitiesChanged
. - Aggiungi
ChannelMixingAudioProcessor
per applicare il ridimensionamento/il mixaggio ai canali audio. - Aggiungi il nuovo valore int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
aDecoderDiscardReasons
per eliminare il decodificatore audio quando è possibile la modalità bypass dopo la modifica delle funzionalità audio. - Aggiungi il supporto della riproduzione diretta per DTS Express e DTS:X (#335).
- Correzione di un bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e
- Video:
- Fai in modo che
MediaCodecVideoRenderer
generi unVideoSize
con larghezza e altezza pari a 0 quando il renderer è disattivato.Player.Listener.onVideoSizeChanged
viene chiamato di conseguenza quandoPlayer.getVideoSize()
cambia. Con questa modifica, le dimensioni del video di ExoPlayer conMediaCodecVideoRenderer
hanno larghezza e altezza pari a 0 quandoPlayer.getCurrentTracks
non supporta il video o le dimensioni della traccia video supportata non sono ancora state determinate.
- Fai in modo che
- DRM:
- Ridurre la visibilità di diversi metodi solo interni su
DefaultDrmSession
che non dovrebbero essere chiamati dall'esterno del pacchetto DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Ridurre la visibilità di diversi metodi solo interni su
- Muxer:
- Aggiungi una nuova libreria muxer che può essere utilizzata per creare un file contenitore MP4.
- Estensione IMA:
- Attiva i live streaming DASH multi-periodo per DAI. Tieni presente che l'implementazione attuale non supporta ancora la ricerca nei live streaming (#10912).
- Correzione di un bug per cui un nuovo gruppo di annunci viene inserito nei live streaming perché la posizione dei contenuti calcolata in sequenza temporale consecutiva varia leggermente.
- Sessione:
- Aggiungi il metodo helper
MediaSession.getControllerForCurrentRequest
per ottenere informazioni sul controller che attualmente chiama un metodoPlayer
. - Aggiungi
androidx.media3.session.MediaButtonReceiver
per consentire alle app di implementare la ripresa della riproduzione con eventi dei pulsanti multimediali inviati, ad esempio, da cuffie Bluetooth (#167). - Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItems
per consentire il passaggio diMediaItems
richiesto aPlayer
se hannoLocalConfiguration
(ad es. URI) (#282). - Aggiungi i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche multimediali compatte per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItems
per consentire il passaggio diMediaItems
richiesto aPlayer
se hannoLocalConfiguration
(ad es. URI) (#282). - Aggiungi i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche multimediali compatte per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi il metodo helper
- UI:
- Aggiungi i metodi Util
shouldShowPlayButton
ehandlePlayPauseButtonAction
per scrivere elementi dell'interfaccia utente personalizzati con un pulsante di riproduzione/pausa.
- Aggiungi i metodi Util
- Estensione RTSP:
- Estensione DASH:
- Rimuovi l'offset temporale dei contenuti multimediali da
MediaLoadData.startTimeMs
eMediaLoadData.endTimeMs
per gli stream DASH multiperiodo. - È stato corretto un bug per cui la ripreparazione di una sorgente multimediale live Dash multi-periodo
produceva un errore
IndexOutOfBoundsException
(#10838).
- Rimuovi l'offset temporale dei contenuti multimediali da
- Estensione HLS:
- Aggiungi
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
per impostare un timeout per il thread di caricamento in modo che attenda l'inizializzazione diTimestampAdjuster
. Se l'inizializzazione non viene completata prima del timeout, viene generato unPlaybackException
per evitare lo stallo infinito della riproduzione. Il timeout è impostato su zero per impostazione predefinita (#323).
- Aggiungi
- Test Utilities:
- Verifica l'insensibilità alle maiuscole e minuscole dello schema URI in
DataSourceContractTest
.
- Verifica l'insensibilità alle maiuscole e minuscole dello schema URI in
- Rimuovi i simboli ritirati:
- Rimuovi i costruttori
DefaultAudioSink
, utilizzaDefaultAudioSink.Builder
. - Rimuovi
HlsMasterPlaylist
e utilizzaHlsMultivariantPlaylist
. - Rimuovi
Player.stop(boolean)
. UtilizzaPlayer.stop()
ePlayer.clearMediaItems()
(sereset
ètrue
). - Rimuovi due costruttori
SimpleCache
deprecati e utilizza un costruttore non deprecato che accetta unDatabaseProvider
per migliorare il rendimento. - Rimuovi il costruttore
DefaultBandwidthMeter
, utilizzaDefaultBandwidthMeter.Builder
. - Rimuovi i costruttori
DefaultDrmSessionManager
, utilizzaDefaultDrmSessionManager.Builder
. - Rimuovi due costruttori
HttpDataSource.InvalidResponseCodeException
deprecati, utilizza un costruttore non deprecato che accetta campi aggiuntivi(cause
,responseBody
) per migliorare la registrazione degli errori. - Rimuovi
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
eDownloadHelper.forSmoothStreaming
, utilizzaDownloadHelper.forMediaItem
. - Rimuovi il costruttore
DownloadService
ritirato, utilizza un costruttore non ritirato che includa l'opzione per fornire un parametrochannelDescriptionResourceId
. - Rimuovi le costanti stringa obsolete per i set di caratteri (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
eUTF16LE_NAME
), utilizza i set di caratteri Kotlin dal pacchettokotlin.text
,java.nio.charset.StandardCharsets
ocom.google.common.base.Charsets
. - Rimuovi il costruttore
WorkManagerScheduler
deprecato e utilizza un costruttore non deprecato che includa l'opzione per fornire un parametroContext
. - Rimuovi i metodi ritirati
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
ecreateSampleFormat
, che venivano utilizzati per creare un'istanza della classeFormat
. Utilizza inveceFormat.Builder
per creare istanze diFormat
. - Rimuovi i metodi ritirati
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
ecopyWithVideoSize
, utilizzaFormat.buildUpon()
e i metodi setter. - Rimuovi
ExoPlayer.retry()
deprecato e utilizzaprepare()
. - Rimuovi il costruttore
DefaultTrackSelector
deprecato senza argomenti, utilizzaDefaultTrackSelector(Context)
. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato, utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Rimuovi il costruttore
DownloadManager
deprecato e utilizza il costruttore che accetta unExecutor
. - Rimuovi i costruttori
Cue
deprecati e utilizzaCue.Builder
. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato, utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Rimuovi quattro metodi
AnalyticsListener
deprecati:onDecoderEnabled
, utilizzaonAudioEnabled
e/oonVideoEnabled
in alternativa.onDecoderInitialized
, utilizzaonAudioDecoderInitialized
e/oonVideoDecoderInitialized
.onDecoderInputFormatChanged
, utilizzaonAudioInputFormatChanged
e/oonVideoInputFormatChanged
.onDecoderDisabled
, utilizzaonAudioDisabled
e/oonVideoDisabled
in alternativa.
- Rimuovi i campi
Player.Listener.onSeekProcessed
eAnalyticsListener.onSeekProcessed
deprecati e utilizzaonPositionDiscontinuity
conDISCONTINUITY_REASON_SEEK
. - Rimuovi
ExoPlayer.setHandleWakeLock(boolean)
, utilizzasetWakeMode(int)
in alternativa. - Rimuovi il criterio deprecato
DefaultLoadControl.Builder.createDefaultLoadControl()
e utilizzabuild()
al suo posto. - Rimuovi
MediaItem.PlaybackProperties
deprecato, utilizzaMediaItem.LocalConfiguration
. Il campo deprecatoMediaItem.playbackProperties
ora è di tipoMediaItem.LocalConfiguration
.
- Rimuovi i costruttori
Versione 1.1.0-rc01
21 giu 2023
Utilizza la versione stabile 1.1.0.
Versione 1.1.0-beta01
7 giugno 2023
Utilizza la versione stabile 1.1.0.
Versione 1.1.0-alpha01
10 maggio 2023
Utilizza la versione stabile 1.1.0.
Versione 1.0.0
Versione 1.0.2
18 maggio 2023
androidx.media3:media3-*:1.0.2
viene ritirata.
La versione 1.0.2 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.7.
Questa release contiene le seguenti modifiche rispetto alla versione 1.0.1:
- Libreria principale:
- Aggiungi
Buffer.isLastSample()
che indica seBuffer
contiene il flagC.BUFFER_FLAG_LAST_SAMPLE
. - Risolvi il problema per cui l'ultimo fotogramma potrebbe non essere visualizzato se l'ultimo campione con i fotogrammi viene rimosso dalla coda senza leggere il campione "fine dello stream". (#11079).
- Aggiungi
- Estrattori:
- Correggi l'analisi di SPS H.265 nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP e MP4 (#303).
- Testo:
- SSA: aggiungi il supporto per i file UTF-16 se iniziano con un indicatore dell'ordine dei byte (#319).
- Sessione:
- Risolto il problema per cui
MediaController
non aggiorna i comandi disponibili quando è connesso a unMediaSessionCompat
legacy che aggiorna le azioni. - Correzione del bug che impediva a
MediaLibraryService
di restituire il valore null per una chiamata dall'interfaccia utente di sistema aCallback.onGetLibraryRoot
conparams.isRecent == true
sull'API 30 (#355). - Correzione della perdita di memoria di
MediaSessionService
oMediaLibraryService
(#346). - È stato corretto un bug per cui un aggiornamento combinato di
Timeline
e posizione in unMediaSession
può causare la generazione di unMediaController
che genera unIllegalStateException
.
- Risolto il problema per cui
Versione 1.0.1
18 aprile 2023
androidx.media3:media3-*:1.0.1
viene ritirata.
La versione 1.0.1 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.6.
- Libreria principale:
- Ripristina l'override del live streaming di destinazione quando cerchi la posizione predefinita (#11051).
- È stato corretto il bug per cui i flussi di campioni vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
- Sessione:
- È stato corretto un bug per cui più elementi della coda identici pubblicati da un
MediaSessionCompat
legacyMediaController
generano un'eccezione inMediaController
(#290). - Aggiungi l'inoltro mancante di
MediaSession.broadcastCustomCommand
aMediaControllerCompat.Callback.onSessionEvent
legacy (#293). - È stato corretto un bug per cui la chiamata a
MediaSession.setPlayer
non aggiorna i comandi disponibili. - Risolvi il problema per cui le istanze
TrackSelectionOverride
inviate da unMediaController
vengono ignorate se fanno riferimento a un gruppo conFormat.metadata
(#296). - Risolvi il problema per cui
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
deve essere disponibile per accedere ai metadati tramiteMediaSessionCompat
legacy. - Risolto il problema per cui le istanze
MediaSession
su un thread in background causano arresti anomali se utilizzate inMediaSessionService
(#318). - È stato risolto il problema per cui una libreria dichiarava un ricevitore di pulsanti multimediali senza che l'app lo avesse previsto (#314).
- È stato corretto un bug per cui più elementi della coda identici pubblicati da un
- DASH:
- Correzione della gestione delle sequenze temporali dei segmenti vuoti (#11014).
- RTSP:
- Riprova con TCP se la configurazione RTSP con UDP non riesce e viene visualizzato l'errore RTSP 461 UnsupportedTransport (#11069).
Versione 1.0.0
22 marzo 2023
androidx.media3:media3-*:1.0.0
viene ritirata.
La versione 1.0.0 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.5.
Non sono state apportate modifiche dalla versione 1.0.0-rc02.
Versione 1.0.0-rc02
2 marzo 2023
androidx.media3:media3-*:1.0.0-rc02
viene ritirata.
La versione 1.0.0-rc02 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.4.
- Libreria principale:
- Download:
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
SegmentDownloader
e nelle sottoclassi (#248).
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
- Audio:
- Video:
- Mappa il formato HEVC HDR10 su
HEVCProfileMain10HDR10
anziché suHEVCProfileMain10
. - Aggiungi una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione dei flussi AVC a 60 fps come non supportati (#10898).
- Risolvi i problemi di prestazioni di rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza di frame molto superiore alla frequenza di aggiornamento dello schermo.
- Mappa il formato HEVC HDR10 su
- Cast:
- Correzione di
STATE_IDLE
temporaneo durante la transizione tra elementi multimediali (#245).
- Correzione di
- RTSP:
- Recupera l'IllegalArgumentException generata durante l'analisi di RTSP non valido Descrivi i messaggi di risposta (#10971).
- Sessione:
- È stato corretto un bug a causa del quale il pulsante di riproduzione/pausa delle notifiche non si aggiorna con lo stato del player (#192).
- Estensione IMA:
- Correzione di un bug che impediva l'avvio degli stream DAI senza annunci
perché il primo (e nel caso senza annunci l'unico) evento
LOADED
non è stato ricevuto.
- Correzione di un bug che impediva l'avvio degli stream DAI senza annunci
perché il primo (e nel caso senza annunci l'unico) evento
Versione 1.0.0-rc01
16 febbraio 2023
androidx.media3:media3-*:1.0.0-rc01
viene ritirata.
La versione 1.0.0-rc01 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.3.
- Libreria principale:
- Modifica la logica di ordinamento del decodificatore del renderer per rispettare le preferenze di
MediaCodecSelector
, anche se un decodificatore segnala che potrebbe non essere in grado di riprodurre i contenuti multimediali in modo efficiente. Ad esempio, con il selettore predefinito, il decodificatore hardware con solo supporto funzionale avrà la precedenza sul decodificatore software che supporta completamente il formato (#10604). - Aggiungi
ExoPlayer.Builder.setPlaybackLooper
che imposta un thread di riproduzione preesistente per una nuova istanza di ExoPlayer. - Consenti la cancellazione dei componenti di Download Manager (#10776).
- Aggiungi il parametro a
BasePlayer.seekTo
per indicare anche il comando utilizzato per la ricerca. - Utilizza il tema durante il caricamento delle risorse grafiche su API 21+ (#220).
- Aggiungi
ConcatenatingMediaSource2
che consente di combinare più elementi multimediali in un'unica finestra (#247).
- Modifica la logica di ordinamento del decodificatore del renderer per rispettare le preferenze di
- Estrattori:
- Genera un
ParserException
anziché unNullPointerException
se la tabella dei campioni (stbl) non contiene una descrizione del campione (stsd) richiesta durante l'analisi degli atomi trak. - Ignora correttamente i campioni quando cerchi direttamente un frame di sincronizzazione in fMP4 (#10941).
- Genera un
- Audio:
- Utilizza il bitrate del formato audio compresso per calcolare le dimensioni minime del buffer
per
AudioTrack
nelle riproduzioni dirette (passthrough).
- Utilizza il bitrate del formato audio compresso per calcolare le dimensioni minime del buffer
per
- Testo:
- Correzione di
TextRenderer
che passa un indice non valido (negativo) aSubtitle.getEventTime
se un file di sottotitoli codificati non contiene cue. - SubRip: aggiungi il supporto dei file UTF-16 se iniziano con un indicatore dell'ordine dei byte.
- Correzione di
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritta dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituzione diMediaMetadata.folderType
. Il tipo di cartella verrà ritirato nella prossima release.
- DASH:
- Aggiunta dell'analisi completa per i set di adattamento delle immagini, inclusi i conteggi dei riquadri (#3752).
- UI:
- Correggi l'attributo
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
per assicurarti che le modifiche alla visibilità vengano trasmesse al listener registrato (#229). - Correzione dell'ordine dei controlli del lettore centrale in
PlayerView
quando si utilizza un layout da destra a sinistra (RTL) (#227).
- Correggi l'attributo
- Sessione:
- Aggiungi l'astrazione
SimpleBasePlayer
per implementare l'interfacciaPlayer
per i player personalizzati. - Aggiungi il metodo helper per convertire il token di sessione della piattaforma in Media3
SessionToken
(#171). - Utilizza
onMediaMetadataChanged
per attivare gli aggiornamenti della sessione multimediale della piattaforma (#219). - Aggiungi la sessione multimediale come argomento di
getMediaButtons()
diDefaultMediaNotificationProvider
e utilizza elenchi immutabili per chiarezza (#216). - Aggiungi il listener di callback
onSetMediaItems
per fornire i mezzi per modificare/impostare l'elencoMediaItem
, l'indice iniziale e la posizione per sessione prima di impostare il lettore (#156). - Evita il rilevamento del doppio tocco per gli eventi dei pulsanti multimediali non Bluetooth (#233).
- Rendi
QueueTimeline
più solido in caso di stato della sessione precedente sospetto (#241).
- Aggiungi l'astrazione
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritta dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituzione diMediaMetadata.folderType
. Il tipo di cartella verrà ritirato nella prossima release.
- Estensione Cast:
- Aumenta la versione dell'SDK Cast a 21.2.0.
- Estensione IMA:
- Rimuovi il listener del lettore di
ImaServerSideAdInsertionMediaSource
sul thread dell'applicazione per evitare problemi di threading. - Aggiungi una proprietà
focusSkipButtonWhenAvailable
aImaServerSideAdInsertionMediaSource.AdsLoader.Builder
per richiedere di mettere a fuoco il pulsante Salta sui dispositivi TV e impostarlo su true per impostazione predefinita. - Aggiungi un metodo
focusSkipButton()
aImaServerSideAdInsertionMediaSource.AdsLoader
per richiedere programmaticamente lo stato attivo sul pulsante Salta. - Aumenta la versione dell'SDK IMA a 3.29.0.
- Rimuovi il listener del lettore di
- App demo:
- Richiedi l'autorizzazione per le notifiche di download in fase di runtime (#10884).
Versione 1.0.0-beta03
22 novembre 2022
androidx.media3:media3-*:1.0.0-beta03
viene ritirata.
La versione 1.0.0-beta03 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.2.
- Libreria principale:
- Aggiungi
ExoPlayer.isTunnelingEnabled
per verificare se il tunneling è abilitato per le tracce attualmente selezionate (#2518). - Aggiungi
WrappingMediaSource
per semplificare il wrapping di un singoloMediaSource
(#7279). - Elimina il buffer posteriore prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
- Chiudi il blocco "doSomeWork" di Tracing quando l'offload è attivato.
- Risoluzione del problema di monitoraggio della sessione con le ricerche rapide in
PlaybackStatsListener
(#180). - Invia il callback
onMediaItemTransition
mancante quando chiamiseekToNext
oseekToPrevious
in una playlist con un solo elemento (#10667). - Aggiungi
Player.getSurfaceSize
che restituisce le dimensioni della superficie su cui viene visualizzato il video. - Correzione di un bug per cui la rimozione degli ascoltatori durante il rilascio del player può causare un
IllegalStateException
(#10758).
- Aggiungi
- Build:
- Imponi un valore minimo di
compileSdkVersion
per evitare errori di compilazione (#10684). - Evita di pubblicare il blocco quando è incluso in un'altra build Gradle.
- Imponi un valore minimo di
- Selezione tracce:
- Preferisci altre tracce a Dolby Vision se il display non lo supporta. (#8944).
- Download:
- Correzione del potenziale ciclo infinito in
ProgressiveDownloader
causato da download e riproduzione simultanei con lo stessoPriorityTaskManager
(#10570). - Visualizzazione immediata della notifica di download (#183).
- Limita a 1 le rimozioni di download paralleli per evitare la creazione eccessiva di thread (#10458).
- Correzione del potenziale ciclo infinito in
- Video:
- Prova un decoder alternativo per Dolby Vision se il display non lo supporta. (#9794).
- Audio:
- Utilizza
SingleThreadExecutor
per rilasciare le istanzeAudioTrack
ed evitare errori OutOfMemory quando rilasci più giocatori contemporaneamente (#10057). - Aggiunge
AudioOffloadListener.onExperimentalOffloadedPlayback
per lo stato di scaricamento di AudioTrack. (#134). - Rendi
AudioTrackBufferSizeProvider
un'interfaccia pubblica. - Aggiungi
ExoPlayer.setPreferredAudioDevice
per impostare il dispositivo di output audio preferito (#135). - Rinomina
androidx.media3.exoplayer.audio.AudioProcessor
inandroidx.media3.common.audio.AudioProcessor
. - Mappa l'audio a 8 e 12 canali rispettivamente sulle maschere dei canali 7.1 e 7.1.4 su tutte le versioni di Android (#10701).
- Utilizza
- Metadati:
- Ora
MetadataRenderer
può essere configurato per il rendering dei metadati non appena sono disponibili. Crea un'istanza conMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
per specificare se il renderer restituirà i metadati in anticipo o in sincronia con la posizione del player.
- Ora
- DRM:
- Soluzione alternativa a un bug nell'implementazione di ClearKey di Android 13 che restituisce un URL di licenza non vuoto ma non valido.
- È stato corretto l'errore
setMediaDrmSession failed: session not opened
durante il passaggio tra schemi DRM in una playlist (ad es. da Widevine a ClearKey).
- Testo:
- CEA-608: assicurati che i comandi di cambio servizio nel campo 2 vengano gestiti correttamente (#10666).
- DASH:
- Analizza
EventStream.presentationTimeOffset
dai manifest (#10460).
- Analizza
- UI:
- Utilizzare gli override correnti del player come preimpostazione in
TrackSelectionDialogBuilder
(#10429).
- Utilizzare gli override correnti del player come preimpostazione in
- Sessione:
- Assicurati che i comandi vengano sempre eseguiti nell'ordine corretto anche se alcuni richiedono una risoluzione asincrona (#85).
- Aggiungi
DefaultMediaNotificationProvider.Builder
per creare istanzeDefaultMediaNotificationProvider
. Il builder può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzati dal fornitore. Inoltre, aggiungi il metodoDefaultMediaNotificationProvider.setSmallIcon(int)
per impostare l'icona piccola delle notifiche. (#104). - Assicurati che i comandi inviati prima di
MediaController.release()
non vengano eliminati (#99). SimpleBitmapLoader
può caricare bitmap dagli URIfile://
(#108).- Correzione dell'asserzione che impedisce a
MediaController
di cercare un annuncio in un periodo (#122). - Al termine della riproduzione, la
MediaSessionService
viene interrotta in primo piano e viene visualizzata una notifica per riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112). - Non avviare un servizio in primo piano con un intent in attesa per la pausa (#167).
- Nascondi manualmente il "badge" associato alla notifica creata da
DefaultNotificationProvider
su API 26 e API 27 (il badge viene nascosto automaticamente su API 28+) (#131). - Correzione del bug per cui una seconda connessione del binder da una MediaSession precedente a un MediaController Media3 causa IllegalStateExceptions (#49).
- RTSP:
- IMA:
- Aggiungi il timeout per il caricamento delle informazioni sugli annunci per gestire i casi in cui l'SDK IMA non riesce a caricare un annuncio (#10510).
- Impedire l'omissione degli annunci mid-roll quando si cerca la fine dei contenuti (#10685).
- Calcola correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
- Estensione FFmpeg:
- Aggiungi i flag appena richiesti per collegare le librerie FFmpeg con NDK 23.1.7779620 e versioni successive (#9933).
- Estensione AV1:
- Aggiorna la versione di CMake per evitare incompatibilità con le ultime versioni di Android Studio (#9933).
- Estensione Cast:
- Implementa
getDeviceInfo()
per poter identificareCastPlayer
quando controlli la riproduzione con unMediaController
(#142).
- Implementa
- Transformer:
- Aggiungi il timer watchdog del muxer per rilevare quando la generazione di un campione di output è troppo lenta.
- Rimuovi i simboli ritirati:
- Rimuovi
Transformer.Builder.setOutputMimeType(String)
. Questa funzionalità è stata rimossa. Il tipo MIME sarà sempre MP4 quando viene utilizzato il muxer predefinito.
- Rimuovi
Versione 1.0.0-beta02
21 luglio 2022
androidx.media3:media3-*:1.0.0-beta02
viene ritirata.
La versione 1.0.0-beta02 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.1.
- Libreria principale:
- Assicurati che la modifica di
ShuffleOrder
conExoPlayer.setShuffleOrder
comporti una chiamata aPlayer.Listener#onTimelineChanged
conreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - Per i contenuti multimediali progressivi, includi solo le tracce selezionate nella posizione memorizzata nel buffer (#10361).
- Consenti il logger personalizzato per tutti gli output dei log di ExoPlayer (#9752).
- Correzione dell'implementazione di
setDataSourceFactory
inDefaultMediaSourceFactory
, che in alcuni casi non funzionava (#116).
- Assicurati che la modifica di
- Estrattori:
- DASH:
- Analizza l'URL della licenza ClearKey dai manifest (#10246).
- UI:
- Assicurati che TalkBack annunci l'opzione di velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
- RTSP:
- Aggiunta della gestione dei pacchetti frammentati VP8 (#110).
- Estensione Leanback:
- Ascolta le modifiche apportate a
playWhenReady
inLeanbackAdapter
(10420).
- Ascolta le modifiche apportate a
- Cast:
Versione 1.0.0-beta01
16 giugno 2022
androidx.media3:media3-*:1.0.0-beta01
viene ritirata.
La versione 1.0.0-beta01 contiene questi commit.
Ciò corrisponde al rilascio di ExoPlayer 2.18.0.
- Libreria principale:
- Attiva il supporto per la diagnostica della piattaforma Android tramite
MediaMetricsManager
. ExoPlayer inoltrerà gli eventi di riproduzione e i dati sulle prestazioni alla piattaforma, il che contribuisce a fornire informazioni sul debug e sulle prestazioni del sistema sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostici è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer conExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Correzione del bug che causa il ripristino troppo frequente delle tracce quando si utilizza
MergingMediaSource
, ad esempio quando si caricano lateralmente i sottotitoli codificati e si cambiano i sottotitoli codificati selezionati a metà riproduzione (#10248). - Interrompere il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Queste riproduzioni presuppongono una rete 4G.
- Non consentire il passaggio di
null
aMediaSource.Factory.setDrmSessionManagerProvider
eMediaSource.Factory.setLoadErrorHandlingPolicy
. Le istanze diDefaultDrmSessionManagerProvider
eDefaultLoadErrorHandlingPolicy
possono essere trasmesse esplicitamente, se necessario. - Aggiungi
MediaItem.RequestMetadata
per rappresentare i metadati necessari per riprodurre i contenuti multimediali quando ilLocalConfiguration
esatto non è noto. Rimuovi ancheMediaMetadata.mediaUrl
perché ora è incluso inRequestMetadata
. - Aggiungi
Player.Command.COMMAND_SET_MEDIA_ITEM
per consentire ai giocatori di impostare un singolo elemento.
- Attiva il supporto per la diagnostica della piattaforma Android tramite
- Selezione tracce:
- Comprimi il corso
TrackSelectionOverrides
inTrackSelectionParameters
e promuoviTrackSelectionOverride
a corso di primo livello. - Rinomina
TracksInfo
inTracks
eTracksInfo.TrackGroupInfo
inTracks.Group
.Player.getCurrentTracksInfo
ePlayer.Listener.onTracksInfoChanged
sono stati rinominatiPlayer.getCurrentTracks
ePlayer.Listener.onTracksChanged
. Ciò include l'annullamento del ritiro del nome del metodoPlayer.Listener.onTracksChanged
, ma con tipi di parametri diversi. - Modifica
DefaultTrackSelector.buildUponParameters
eDefaultTrackSelector.Parameters.buildUpon
per restituireDefaultTrackSelector.Parameters.Builder
anzichéDefaultTrackSelector.ParametersBuilder
, che è stato ritirato. - Aggiungi
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
che è abilitato per impostazione predefinita. Se attivata, laDefaultTrackSelector
preferirà le tracce audio il cui numero di canali non supera le capacità di output del dispositivo. Sui dispositivi portatili, ilDefaultTrackSelector
preferirà i formati audio stereo/mono rispetto a quelli multicanale, a meno che il formato multicanale non possa essere spazializzato (Android 12L+) o sia un formato audio surround Dolby. Inoltre, sui dispositivi che supportano la spazializzazione audio,DefaultTrackSelector
monitorerà le modifiche apportate alle proprietà dello spazializzatore e attiverà una nuova selezione della traccia. I dispositivi con unatelevision
modalità UI sono esclusi da questi vincoli e verrà preferito il formato con il maggior numero di canali. Per attivare questa funzionalità, l'istanzaDefaultTrackSelector
deve essere creata con unContext
.
- Comprimi il corso
- Video:
- Rinomina
DummySurface
inPlaceholderSurface
. - Aggiungi il supporto di AV1 a
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- Rinomina
- Audio:
- Utilizza la pubblicità del decodificatore audio LG AC3 per il tipo MIME non standard.
- Modifica il tipo restituito di
AudioAttributes.getAudioAttributesV21()
daandroid.media.AudioAttributes
a una nuova classe wrapperAudioAttributesV21
per evitare una verifica ART lenta su API < 21. - Esegui query sulla piattaforma (API 29+) o presupponi il conteggio dei canali di codifica audio per il passthrough audio quando il conteggio dei canali audio del formato non è impostato, il che si verifica con la preparazione senza chunk HLS (10204).
- Configura
AudioTrack
con la maschera del canaleAudioFormat.CHANNEL_OUT_7POINT1POINT4
se il decoder genera audio PCM a 12 canali (#10322.
- DRM
- Assicurati che la sessione DRM venga sempre aggiornata correttamente durante la ricerca immediatamente dopo una modifica del formato (10274).
- Testo:
- Modifica
Player.getCurrentCues()
in modo che restituiscaCueGroup
anzichéList<Cue>
. - SSA: Supporta l'impostazione dello stile
OutlineColour
quandoBorderStyle == 3
(ad es.OutlineColour
imposta lo sfondo del cue) (#8435). - CEA-708: analizza i dati in più blocchi di servizio e ignora i blocchi non associati al numero di servizio attualmente selezionato.
- Rimuovi
RawCcExtractor
, che veniva utilizzato solo per gestire un formato di sottotitoli codificati interno a Google.
- Modifica
- Estrattori:
- UI:
- Correzione della pubblicazione degli eventi per
OnClickListener
impostati suPlayerView
nel caso in cuiuseController=false
(#9605). Inoltre, correggi la pubblicazione degli eventi suOnLongClickListener
per tutte le configurazioni delle visualizzazioni. - Correzione del trattamento errato di una sequenza di eventi tocco che escono dai limiti
di
PlayerView
prima diACTION_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
eTrackSelectionDialogBuilder
in modo che funzionino con l'interfacciaPlayer
anziché conExoPlayer
. In questo modo, le visualizzazioni possono essere utilizzate con altre implementazioni diPlayer
e viene rimossa la dipendenza dal modulo UI al modulo ExoPlayer. Si tratta di una modifica che causa interruzioni. - Non mostrare le tracce di testo forzate nel selettore di tracce
PlayerView
e mantieni selezionata una traccia di testo forzata adatta se è selezionata l'opzione "Nessuna" (#9432).
- Correzione della pubblicazione degli eventi per
- DASH:
- Analizzare il conteggio dei canali dagli elementi DTS
AudioChannelConfiguration
. In questo modo viene riattivato il passthrough audio per gli stream DTS (#10159). - Non consentire il passaggio di
null
aDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
possono essere passate in modo esplicito, se necessario.
- Analizzare il conteggio dei canali dagli elementi DTS
- HLS:
- Esegui il fallback alla preparazione a blocchi se l'attributo CODECS della playlist non contiene il codec audio (#10065).
- Non consentire il passaggio di
null
aHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
eHlsMediaSource.Factory.setPlaylistTrackerFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
o un riferimento aDefaultHlsPlaylistTracker.FACTORY
possono essere trasmesse in modo esplicito, se necessario.
- Smooth Streaming:
- Non consentire il passaggio di
null
aSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
possono essere trasmesse in modo esplicito se necessario.
- Non consentire il passaggio di
- RTSP:
- Aggiungi il lettore RTP per H263 (#63).
- Aggiungi il lettore RTP per MPEG4 (#35).
- Aggiungi il lettore RTP per HEVC (#36).
- Aggiungi il lettore RTP per AMR. Al momento sono supportati solo i flussi AMR non interlacciati a un solo canale. Il payload RTP AMR composto non è supportato. (#46)
- Aggiungi lettore RTP per VP8 (#47).
- Aggiungi il lettore RTP per WAV (#56).
- Correggi l'intestazione di autorizzazione di base RTSP. (#9544).
- Interrompi il controllo dei campi SDP obbligatori perché ExoPlayer non ne ha bisogno (#10049).
- Genera un'eccezione controllata durante l'analisi della sincronizzazione RTSP (#10165).
- Aggiungi il lettore RTP per VP9 (#47).
- Aggiungi il lettore RTP per OPUS (#53).
- Origini dati:
- Rinomina
DummyDataSource
inPlaceholderDataSource
. - Soluzione alternativa per la gestione delle interruzioni di OkHttp.
- Rinomina
- Sessione:
- Sostituisci
MediaSession.MediaItemFiller
conMediaSession.Callback.onAddMediaItems
per consentire la risoluzione asincrona delle richieste. - Supporta i metodi
setMediaItems(s)
quandoMediaController
si connette a una sessione multimediale precedente. - Rimuovi
MediaController.setMediaUri
eMediaSession.Callback.onSetMediaUri
. La stessa funzionalità può essere ottenuta utilizzandoMediaController.setMediaItem
eMediaSession.Callback.onAddMediaItems
. - Inoltra le chiamate legacy
MediaController
per riprodurre contenuti multimediali aMediaSession.Callback.onAddMediaItems
anziché aonSetMediaUri
. - Aggiungi
MediaNotification.Provider
eDefaultMediaNotificationProvider
per personalizzare la notifica. - Aggiungi
BitmapLoader
eSimpleBitmapLoader
per scaricare le immagini delle copertine. - Aggiungi
MediaSession.setCustomLayout()
per fornire la compatibilità con le versioni precedenti con la sessione legacy. - Aggiungi
MediaSession.setSessionExtras()
per fornire parità di funzionalità con la sessione precedente. - Rinomina
MediaSession.MediaSessionCallback
inMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
eMediaSession.Builder.setSessionCallback
insetCallback
. - Correzione di NPE in
MediaControllerImplLegacy
(#59). - Aggiorna le informazioni sulla posizione della sessione nella cronologia modifica(#51).
- Correzione di NPE in
MediaControllerImplBase
dopo il rilascio del controller (#74).
- Sostituisci
- Riproduzione degli annunci / IMA:
- Ridurre la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms, in linea con i consigli del Media Rating Council (MRC).
- Estensione FFmpeg:
- Aggiorna la versione di CMake a
3.21.0+
per evitare un bug di CMake che causa l'errore di sincronizzazione di Gradle di Android Studio (#9933).
- Aggiorna la versione di CMake a
- Rimuovi i simboli ritirati:
- Rimuovi
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. Utilizza invecePlayer.Listener.onTracksChanged(Tracks)
. - Rimuovi
Player.getCurrentTrackGroups
ePlayer.getCurrentTrackSelections
. Utilizza invecePlayer.getCurrentTracks
. Puoi anche continuare a utilizzareExoPlayer.getCurrentTrackGroups
eExoPlayer.getCurrentTrackSelections
, anche se questi metodi rimangono deprecati. - Rimuovi le costanti
DownloadHelper
,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
eDEFAULT_TRACK_SELECTOR_PARAMETERS
. Se possibile, utilizzagetDefaultTrackSelectorParameters(Context)
, altrimentiDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Rimuovi costruttore
DefaultTrackSelector(ExoTrackSelection.Factory)
. Utilizza inveceDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Rimuovi
Transformer.Builder.setContext
.Context
deve essere passato al costruttoreTransformer.Builder
.
- Rimuovi
Versione 1.0.0-alpha03
14 marzo 2022
androidx.media3:media3-*:1.0.0-alpha03
viene ritirata.
La versione 1.0.0-alpha03 contiene questi commit.
Corrisponde alla release di ExoPlayer 2.17.1.
- Audio:
- Correzione dell'errore di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
- Estrattori:
- FMP4: risolvi il problema per cui i metadati di esempio emsg potrebbero essere restituiti nell'ordine errato per gli stream contenenti atomi emsg v0 e v1 (#9996).
- Testo:
- Correggi l'interazione di
SingleSampleMediaSource.Factory.setTrackId
eMediaItem.SubtitleConfiguration.Builder.setId
per dare la priorità al campoSubtitleConfiguration
e ripristinare il valoreFactory
se non è impostato (#10016).
- Correggi l'interazione di
- Riproduzione dell'annuncio:
- Correzione dei buffer di riempimento dell'audio tra i periodi pubblicitari nei live streaming HLS SSAI.
Versione 1.0.0-alpha02
2 marzo 2022
androidx.media3:media3-*:1.0.0-alpha02
viene ritirata.
La versione 1.0.0-alpha02 contiene questi commit.
Ciò corrisponde al rilascio di ExoPlayer 2.17.0.
- Libreria di base:
- Aggiungi il metodo protetto
DefaultRenderersFactory.getCodecAdapterFactory()
in modo che le sottoclassi diDefaultRenderersFactory
che eseguono l'override dibuildVideoRenderers()
obuildAudioRenderers()
possano accedere alla fabbrica di adattatori di codec e passarla alle istanzeMediaCodecRenderer
che creano. - Propaga i campi di intestazione ICY
name
egenre
rispettivamente aMediaMetadata.station
eMediaMetadata.genre
in modo che raggiungano l'app tramitePlayer.Listener.onMediaMetadataChanged()
(#9677). - Rimuovi le chiavi null da
DefaultHttpDataSource#getResponseHeaders
. - Metti in pausa e riprova quando la creazione di un'istanza
MediaCodec
non va a buon fine. In questo modo si risolve un problema che si verifica su alcuni dispositivi quando si passa da una superficie da un codec sicuro a un altro codec (#8696). - Aggiungi
MediaCodecAdapter.getMetrics()
per consentire agli utenti di ottenere dati delle metriche daMediaCodec
. (#9766). - Correzione della risoluzione delle dipendenze Maven (#8353).
- Disattiva la regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di un'impostazione di richiesta dell'utente che imposta la velocità (#9329).
- Rinomina
DecoderCounters#inputBufferCount
inqueuedInputBufferCount
. - Rendi privato
SimpleExoPlayer.renderers
. È possibile accedere ai renderer tramiteExoPlayer.getRenderer
. - Sono stati aggiornati alcuni valori costanti di
AnalyticsListener.EventFlags
in modo che corrispondano ai valori diPlayer.EventFlags
. - Dividi
AnalyticsCollector
in un'interfaccia e un'implementazione predefinita per consentire la rimozione da parte di R8 se un'app non ne ha bisogno.
- Aggiungi il metodo protetto
- Selezione tracce:
- Supporta i flag dei ruoli video preferiti nella selezione delle tracce (#9402).
- Aggiorna la logica di selezione delle tracce video in modo che tenga conto dei tipi MIME e dei flag di ruolo preferiti quando seleziona più tracce video per l'adattamento (#9519).
- Aggiorna la logica di selezione delle tracce video e audio in modo da scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto di decoder e hardware (#9565).
- Aggiorna la logica di selezione delle tracce video in modo da preferire codec più efficienti se più codec sono supportati dai decodificatori primari con accelerazione hardware (#4835).
- Preferisci le preferenze per i contenuti audio (ad esempio la traccia audio "predefinita" o una traccia che corrisponde alla lingua delle impostazioni internazionali del sistema) ai vincoli tecnici di selezione delle tracce (ad esempio, tipo MIME preferito o numero massimo di canali).
- Correzione del problema di selezione delle tracce per cui l'override di un gruppo di tracce non disattivava altri gruppi di tracce dello stesso tipo (#9675).
- Correzione del problema di selezione delle tracce per cui una combinazione di override di tracce non vuote e vuote non viene applicata correttamente (#9649).
- Vietare
TrackGroup
duplicati in unTrackGroupArray
.TrackGroup
s can always be made distinguishable by setting anid
in theTrackGroup
constructor. Questo problema è stato risolto in caso di arresto anomalo durante la riproduzione dopo aver messo l'app in background con una sostituzione della traccia attiva (#9718). - Modifica la logica in
AdaptiveTrackSelection
per consentire un aumento della qualità con una larghezza di banda di rete sufficiente anche se la riproduzione è molto vicina al limite live (#9784).
- Video:
- Correggi la logica di fallback del decoder per Dolby Vision in modo da utilizzare un decoder H264/H265 compatibile, se necessario.
- Audio:
- Correggi la logica di fallback del decoder per Dolby Atmos (E-AC3-JOC) in modo da utilizzare un decoder E-AC3 compatibile, se necessario.
- Modifica le API
AudioCapabilities
in modo che richiedano il passaggio esplicito diAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
anzichénull
. - Consenti la personalizzazione del calcolo delle dimensioni del buffer
AudioTrack
inserendo unAudioTrackBufferSizeProvider
inDefaultAudioSink
. (#8891). - Riprova la creazione di
AudioTrack
se la dimensione del buffer richiesta era superiore a 1 MB. (#9712).
- Estrattori:
- Testo:
- Aggiungi un campo
MediaItem.SubtitleConfiguration.id
che viene propagato al campoFormat.id
della traccia dei sottotitoli codificata dalla configurazione (#9673). - Aggiungi il supporto di base per i sottotitoli WebVTT nei contenitori Matroska (#9886).
- Impedisci a
Cea708Decoder
di leggere più delle dimensioni dichiarate di un blocco di servizio.
- Aggiungi un campo
- DRM:
- Vuoi rimuovere
playbackLooper
daDrmSessionManager.(pre)acquireSession
? Quando un'app utilizza unDrmSessionManager
in unMediaSource
personalizzato, ilplaybackLooper
deve essere passato aDrmSessionManager.setPlayer
invece.
- Vuoi rimuovere
- Riproduzione degli annunci / IMA:
- Aggiungi il supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
- Aggiungi un metodo a
AdPlaybackState
per consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615). - Imponi la velocità di riproduzione 1.0 durante la riproduzione dell'annuncio (#9018).
- Risolto il problema per cui un gruppo di annunci che non è stato caricato causava un ripristino immediato della riproduzione (#9929).
- UI:
- DASH:
- Aggiungi le proprietà essenziali e supplementari analizzate a
Representation
(#9579). - Supporta il ruolo di traccia
forced-subtitle
(#9727). - Interrompi l'interpretazione del ruolo della traccia
main
comeC.SELECTION_FLAG_DEFAULT
. - Correzione della logica di esclusione dell'URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
- Supporto degli URL relativi
MPD.Location
(#9939).
- Aggiungi le proprietà essenziali e supplementari analizzate a
- HLS:
- Compila correttamente
Format.label
per gli stream HLS solo audio (#9608). - Utilizza la preparazione senza blocchi per impostazione predefinita per migliorare il tempo di avvio. Se le tue
versioni contengono tracce di sottotitoli codificati muxate che non sono dichiarate
nella playlist principale, devi aggiungerle alla playlist principale per renderle
disponibili per la riproduzione oppure disattivare la preparazione senza chunk con
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Supporta la ricerca precisa dei keyframe in HLS (#2882).
- Compila correttamente
- RTSP:
- Fornisci un'API client per eseguire l'override di
SocketFactory
utilizzato per qualsiasi connessione al server (#9606). - Preferisci il metodo di autenticazione DIGEST a BASIC se sono presenti entrambi (#9800).
- Gestisci quando la sincronizzazione della traccia RTSP non è disponibile (#9775).
- Ignora i valori di intestazione RTP-Info non validi (#9619).
- Fornisci un'API client per eseguire l'override di
- Transformer:
- Aumenta la versione minima dell'API richiesta a 21.
TransformationException
viene ora utilizzato per descrivere gli errori che si verificano durante una trasformazione.- Aggiungi
TransformationRequest
per specificare le opzioni di trasformazione. - Consenti la registrazione di più ascoltatori.
- È stato risolto il problema del blocco di Transformer quando l'output del codec viene letto parzialmente.
- Correzione di un potenziale NPE in
Transformer.getProgress
durante il rilascio del muxer genera un'eccezione. - Aggiungi un'app demo per applicare le trasformazioni.
- Estensione MediaSession:
- Per impostazione predefinita,
MediaSessionConnector
ora cancella la playlist quando la riproduzione viene interrotta. Le app che vogliono che la playlist venga conservata possono chiamaresetClearMediaItemsOnStop(false)
sul connettore.
- Per impostazione predefinita,
- Estensione Cast:
- Estensione FFmpeg:
- Fai in modo che
build_ffmpeg.sh
dipenda dalle utilità binarie di LLVM anziché da quelle di GNU (#9933).
- Fai in modo che
- Compatibilità con Android 12:
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
com.google.android.gms:play-services-cast-framework:20.1.0
. Le versioni precedenti diplay-services-cast-framework
non sono compatibili con le app che hanno come target Android 12 e si arrestano in modo anomalo con un erroreIllegalArgumentException
durante la creazione diPendingIntent
(#9528).
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
- Rimuovi i simboli ritirati:
- Rimuovi
Player.EventListener
. Utilizza invecePlayer.Listener
. - Rimuovi
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
eMediaSourceFactory#setDrmUserAgent
. UtilizzaMediaSourceFactory#setDrmSessionManagerProvider
. - Rimuovi
MediaSourceFactory#setStreamKeys
. UtilizzaMediaItem.Builder#setStreamKeys
. - Rimuovi
MediaSourceFactory#createMediaSource(Uri)
. UtilizzaMediaSourceFactory#createMediaSource(MediaItem)
. - Rimuovi
setTag
daDashMediaSource
,HlsMediaSource
eSsMediaSource
. Utilizza inveceMediaItem.Builder#setTag
. - Rimuovi
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. UtilizzaMediaItem.Builder#setLiveConfiguration
eMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
per ignorare il manifest oDashMediaSource#setFallbackTargetLiveOffsetMs
per fornire un valore di riserva. - Rimuovi
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Non è più possibile disattivare l'applicazione dei thread. - Rimuovi
ActionFile
eActionFileUpgradeUtil
. Utilizza ExoPlayer 2.16.1 o versioni precedenti per utilizzareActionFileUpgradeUtil
per unire i file di intent legacy inDefaultDownloadIndex
. - Rimuovi
ProgressiveMediaSource#setExtractorsFactory
. Utilizza invece il costruttoreProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. - Rimuovi
ProgressiveMediaSource.Factory#setTag
eProgressiveMediaSource.Factory#setCustomCacheKey
. UtilizzaMediaItem.Builder#setTag
eMediaItem.Builder#setCustomCacheKey
invece. - Rimuovi i costruttori
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
eDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Utilizza invece il costruttoreDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
eDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Rimuovi tutti i costruttori
CronetDataSource
pubblici. UtilizzaCronetDataSource.Factory
.
- Rimuovi
- Modifica il seguente
IntDefs
in@Target(TYPE_USE)
. Ciò potrebbe interrompere la compilazione degli utilizzi in Kotlin, che può essere corretta spostando l'annotazione per annotare il tipo (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(nel pacchettocom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(nel pacchettocom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Versione 1.0.0-alpha01
27 ottobre 2021
androidx.media3:media3-*:1.0.0-alpha01
viene ritirata.
La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
Media3 è la nuova sede delle librerie di supporto multimediale, tra cui ExoPlayer. La prima alpha contiene implementazioni funzionali iniziali di librerie per l'implementazione di casi d'uso multimediali, tra cui:
- ExoPlayer, un player di contenuti multimediali a livello di applicazione per Android facile da personalizzare ed estendere.
- Funzionalità della sessione multimediale per esporre e controllare le riproduzioni. Questo nuovo
modulo di sessione utilizza la stessa interfaccia
Player
di ExoPlayer. - Componenti dell'interfaccia utente per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
- Moduli che racchiudono funzionalità in altre librerie da utilizzare con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.
Per maggiori informazioni, consulta il progetto GitHub di Media3.
In precedenza, ExoPlayer era ospitato in un
progetto GitHub ExoPlayer separato. In Media3 il nome del pacchetto è androidx.media3.exoplayer
. Abbiamo intenzione di continuare a gestire e
rilasciare il progetto GitHub ExoPlayer per un po' di tempo per dare alle app il tempo di eseguire la migrazione a
Media3. Media3 ha sostituti per tutti i moduli ExoPlayer, ad eccezione delle estensioni legacy media2 e mediasession, che vengono sostituite dal nuovo modulo media3-session
. Ciò consente l'integrazione diretta tra i player e
le sessioni multimediali senza la necessità di utilizzare una classe adattatore/connettore.