Media3
Ultimo aggiornamento | Release stabile | Release Candidate | Versione beta | Versione alpha |
---|---|---|---|---|
20 dicembre 2024 | 1.5.1 | - | - | 1.6.0-alpha01 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza da Media3, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli elementi necessari nel file build.gradle
per la tua app o il tuo modulo:
Alla moda
dependencies { def media3_version = "1.4.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare il tracker dei problemi di Media3 per trovare le risposte alle domande, ai problemi noti e alle richieste di funzionalità, nonché per segnalare nuovi problemi.
Versione 1.6.0
Versione 1.6.0-alpha01
20 dicembre 2024
androidx.media3:media3-*:1.6.0-alpha01
viene rilasciato.
La versione 1.6.0-alpha01 contiene questi commit.
- Libreria comune:
- Rimuovi il metodo
Format.toBundle(boolean excludeMetadata)
, utilizza inveceFormat.toBundle()
. - Aggiungi
AudioManagerCompat
eAudioFocusRequestCompat
per sostituire le classi equivalenti inandroidx.media
.
- Rimuovi il metodo
- ExoPlayer:
- Tieni presente la lingua quando selezioni una traccia video. Per impostazione predefinita, viene selezionata una traccia video "principale" che corrisponde alla lingua della traccia audio selezionata, se disponibile. Le preferenze relative alle lingue dei video esplicite possono essere expressed with
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
. - Aggiungi il parametro
selectedAudioLanguage
al metodoDefaultTrackSelector.selectVideoTrack()
. - Aggiungi il parametro
retryCount
aMediaSourceEventListener.onLoadStarted
e ai metodiMediaSourceEventListener.EventDispatcher
corrispondenti. - È stato corretto un bug per cui gli elementi o i periodi delle playlist negli stream DASH con più periodi con durate che non corrispondono ai contenuti effettivi potevano causare il blocco dei fotogrammi alla fine dell'elemento (#1698).
- Riduci i valori predefiniti per
bufferForPlaybackMs
ebufferForPlaybackAfterRebufferMs
inDefaultLoadControl
rispettivamente a 1000 e 2000 ms. - Aggiungi
MediaExtractorCompat
, una nuova classe che fornisce funzionalità equivalenti alla piattaformaMediaExtractor
. - Sposta
BasePreloadManager.Listener
in un elemento di primo livelloPreloadManagerListener
. RenderersFactory.createSecondaryRenderer
può essere implementato per fornire renderer secondari per il preriscaldamento. Il preriscaldamento consente transizioni più rapide degli elementi multimediali durante la riproduzione.- Attiva l'invio di
CmcdData
per le richieste manifest nei formati di streaming adattivo DASH, HLS e SmoothStreaming (#1951). - Fornisci
MediaCodecInfo
del codec che verrà inizializzato inMediaCodecRenderer.onReadyToInitializeCodec
(#1963). - Modifica
AdsMediaSource
per consentire la crescita diAdPlaybackStates
aggiungendo gruppi di annunci. Vengono rilevate modifiche non valide e viene generata un'eccezione.
- Tieni presente la lingua quando selezioni una traccia video. Per impostazione predefinita, viene selezionata una traccia video "principale" che corrisponde alla lingua della traccia audio selezionata, se disponibile. Le preferenze relative alle lingue dei video esplicite possono essere expressed with
- Trasformatore:
- Aggiorna i parametri di
VideoFrameProcessor.registerInputStream
eVideoFrameProcessor.Listener.onInputStreamRegistered
per utilizzareFormat
. - Aggiunta del supporto per il transmuxing in formati alternativi compatibili con le versioni precedenti.
- Genera metadati HDR statici quando utilizzi
DefaultEncoderFactory
.
- Aggiorna i parametri di
- Estrattori:
- AVI: correzione della gestione dei file con audio compresso a bitrate costante in cui l'intestazione dello stream memorizza il numero di byte anziché il numero di chunk.
- Audio:
- Correggi
onAudioPositionAdvancing
in modo che venga chiamato quando la riproduzione riprende (in precedenza veniva chiamato quando la riproduzione era in pausa).
- Correggi
- Video:
- Correggi
MediaCodecVideoRenderer
in modo che, in assenza di unSurface
, il visualizzatore salti i frame appena precedenti solo seVideoFrameReleaseControl.getFrameReleaseAction
non èFRAME_RELEASE_TRY_AGAIN_LATER
.
- Correggi
- Testo:
- Interrompi il caricamento anticipato di tutti i file di sottotitoli configurati con
MediaItem.Builder.setSubtitleConfigurations
e caricane solo uno se è selezionato dalla selezione della traccia (#1721).
- Interrompi il caricamento anticipato di tutti i file di sottotitoli configurati con
- Effetto:
- La funzionalità di
OverlaySettings
è stata spostata inStaticOverlaySettings
.OverlaySettings
può essere sottoclassato per consentire impostazioni di overlay dinamico.
- La funzionalità di
- Muxer:
MuxerException
è stato spostato dall'interfacciaMuxer
per evitare un nome completo molto lungo.
- Sessione:
- Aggiungi "Context" come parametro a MediaButtonReceiver.shouldStartForegroundService (#1887).
- Interfaccia utente:
- Aggiungi
PlayerSurface
Composable al modulomedia3-ui-compose
. - Aggiungi le classi
PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
e i composabili corrispondenterememberPlayPauseButtonState
,rememberNextButtonState
,rememberPreviousButtonState
,rememberRepeatButtonState
,rememberShuffleButtonState
al modulomedia3-ui-compose
.
- Aggiungi
- Estensione HLS:
- Aggiungi una prima versione di
HlsInterstitialsAdsLoader
. Il caricatore degli annunci legge gli interstitial HLS di una playlist multimediale HLS e li mappa alAdPlaybackState
passato alAdsMediaSource
. 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 pratico e sicuro.
- Aggiungi una prima versione di
- Estensione DASH:
- Aggiunta del supporto del formato AC-4 di Livello 4 per DASH (#1898).
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Aggiungi il modulo decodificatore MPEG-H che utilizza il modulo decodificatore MPEG-H nativo per decodificare l'audio MPEG-H (#1826).
- App di prova:
- Aggiungi elementi di UI composable
MinimalControls
(PlayPauseButton
,NextButton
,PreviousButton
) eExtraControls
(RepeatButton
,ShuffleButton
) ademo-compose
utilizzandoPlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
.
- Aggiungi elementi di UI composable
- Rimuovi i simboli non più supportati:
- Rimuovi il metodo
AudioMixer.create()
deprecato. Utilizza inveceDefaultAudioMixer.Factory().create()
. - Rimuovi i seguenti metodi
Transformer.Builder
deprecati:setTransformationRequest()
, utilizzasetAudioMimeType()
,setVideoMimeType()
esetHdrMode()
.setAudioProcessors()
, imposta l'audio processor 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 dall'EditedMediaItem
passato aTransformer.start()
.setFlattenForSlowMotion()
, usaEditedMediaItem.Builder.setFlattenForSlowMotion()
per appiattire ilEditedMediaItem
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
obsoleto. Utilizza inveceTransformer.PROGRESS_STATE_NOT_STARTED
. - Rimuovi
Transformer.setListener()
deprecato. Utilizza inveceTransformer.addListener()
,Transformer.removeListener()
oTransformer.removeAllListeners()
. - Rimuovi
Transformer.startTransformation()
deprecato. Utilizza inveceTransformer.start(MediaItem, String)
. - Rimuovi
SingleFrameGlShaderProgram
deprecato. Utilizza inveceBaseGlShaderProgram
. - Rimuovi
Transformer.flattenForSlowMotion
. Utilizza inveceEditedMediaItem.flattenForSlowMotion
.
- Rimuovi il metodo
Versione 1.5
Versione 1.5.1
19 dicembre 2024
androidx.media3:media3-*:1.5.1
viene rilasciato.
La versione 1.5.1 contiene questi commit.
- ExoPlayer:
- Disattiva l'utilizzo della decrittografia asincrona in MediaCodec per evitare i problemi di timeout del codec segnalati con questa API di piattaforma (#1641).
- Estrattori:
- MP3: non interrompere la riproduzione in anticipo quando l'indice di un frame
VBRI
non copre tutti i dati MP3 di un file (#1904).
- MP3: non interrompere la riproduzione in anticipo quando l'indice di un frame
- Video:
- Ripristino dei valori delle proporzioni pixel forniti da
MediaCodecAdapter
se forniti durante l'elaborazione dionOutputFormatChanged
(#1371).
- Ripristino dei valori delle proporzioni pixel forniti da
- Testo:
- È stato corretto un bug in
ReplacingCuesResolver.discardCuesBeforeTimeUs
per cui l'indicatore attivo intimeUs
(avviato prima, ma non ancora terminato) veniva erroneamente ignorato (#1939).
- È stato corretto un bug in
- Metadati:
- Estrai la numerazione del disco/della traccia e il genere dai commenti Vorbis in
MediaMetadata
(#1958).
- Estrai la numerazione del disco/della traccia e il genere dai commenti Vorbis in
Versione 1.5.0
27 novembre 2024
androidx.media3:media3-*:1.5.0
viene rilasciato.
La versione 1.5.0 contiene questi commit.
- Libreria comune:
- Aggiungi
ForwardingSimpleBasePlayer
che consente di inoltrare a un altro lettore con piccoli aggiustamenti, garantendo al contempo la piena consistenza e la gestione degli ascoltatori (#1183). - Sostituisci
SimpleBasePlayer.State.playlist
con il metodogetPlaylist()
. - Aggiungi l'override per
SimpleBasePlayer.State.Builder.setPlaylist()
per specificare direttamente unTimeline
eTracks
eMetadata
attuali invece di creare una struttura della playlist. - Aumenta
minSdk
a 21 (Android Lollipop). Questo è in linea con tutte le altre librerie AndroidX. - Aggiungi l'elemento
androidx.media3:media3-common-ktx
che fornisce funzionalità specifiche di Kotlin basate sulla libreria Common - Aggiungi la funzione di estensione di sospensione
Player.listen
per avviare una coroutine per ascoltarePlayer.Events
nella libreriamedia3-common-ktx
. - Rimuovi le annotazioni
@DoNotInline
dalle classi interne non allineate manualmente progettate per evitare errori di verifica delle classi di runtime. Le versioni recenti di R8 ora eseguono automaticamente chiamate out-of-line come queste per evitare errori di runtime (quindi l'out-of-lining manuale non è più necessario). Tutti gli utenti Gradle della libreria devono già utilizzare una versione del plug-in Gradle per Android che utilizza una versione di R8 che esegue questa operazione, a causa dicompileSdk = 35
. Gli utenti della libreria con sistemi di compilazione non Gradle dovranno assicurarsi che il loro passaggio di riduzione/offuscamento equivalente a R8 esegua un processo automatico simile di eliminazione delle righe fuori linea per evitare errori di verifica delle classi di runtime. Questa modifica è stata già apportata in altre librerie AndroidX.
- Aggiungi
- ExoPlayer:
- Ora
MediaCodecRenderer.onProcessedStreamChange()
può essere chiamato per ogni elemento multimediale. In precedenza non veniva chiamato per il primo. UtilizzaMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
per attivare questa opzione. - Aggiungi
PreloadMediaSource.PreloadControl.onPreloadError
per consentire alle implementazioni diPreloadMediaSource.PreloadControl
di intraprendere azioni in caso di errore. - Aggiungi
BasePreloadManager.Listener
per propagare gli eventi di precaricamento alle app. - Consenti di modificare il timeout del client SNTP e di riprovare con indirizzi alternativi al verificarsi del timeout (#1540).
- Rimuovi
MediaCodecAdapter.Configuration.flags
perché il campo era sempre uguale a zero. - Consenti all'utente di selezionare lo speaker integrato per la riproduzione su Wear OS API 35 e versioni successive (se il dispositivo pubblicizza il supporto di questa funzionalità).
- Rimandare la chiamata di blocco a
Context.getSystemService(Context.AUDIO_SERVICE)
finché non viene attivato il trattamento dell'attenzione audio. In questo modo, la chiamata di blocco non viene eseguita se la gestione dell'audio in primo piano non è attivata (#1616). - Consentire la riproduzione indipendentemente dalla durata memorizzata nella cache quando il caricamento non va a buon fine (#1571).
- Aggiungi
AnalyticsListener.onRendererReadyChanged()
per indicare quando i singoli renderer consentono la riproduzione. - È stato corretto il problema per cui a volte
MediaCodec.CryptoException
viene segnalato come "errore di runtime imprevisto" quandoMediaCodec.CryptoException
viene eseguito in modalità asincrona (comportamento predefinito nell'API 31 e versioni successive).MediaCodec
- Passa
bufferedDurationUs
anzichébufferedPositionUs
conPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
. Inoltre, viene modificatoDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
inDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
. Le app devono quindi trasmettere un valore che rappresenti una durata specifica dalla posizione iniziale predefinita per la quale la sorgente media corrispondente deve essere precaricata con questo IntDef, anziché una posizione. - Aggiungi l'implementazione di
ForwardingRenderer
che inoltra tutte le chiamate ai metodi a un altro visualizzatore (1703). - Aggiungere il precaricamento della playlist per l'elemento successivo. Le app possono attivare il precaricamento chiamando
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
di conseguenza. Per impostazione predefinita, il precaricamento è disattivato. Se l'opzione è attivata e per non interferire con la riproduzione,DefaultLoadControl
limita il precaricamento in modo che inizi e continui solo quando il player non è in fase di caricamento per la riproduzione. Le app possono cambiare questo comportamento implementandoLoadControl.shouldContinuePreloading()
di conseguenza (ad esempio quando sostituiscono 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 di invocare gli eventi dei listener di sottoclassi (1736). - Aggiungi
DefaultPreloadManager.Builder
che crea le istanzeDefaultPreloadManager
eExoPlayer
con configurazioni condivise in modo coerente. - Rimuovi il parametro
Renderer[]
daLoadControl.onTracksSelected()
poiché l'implementazione diDefaultLoadControl
può recuperare i tipi di stream daExoTrackSelection[]
. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
è stato deprecato e il metodo è stato contrassegnato come definitivo per evitare le sostituzioni. Dovresti utilizzare il nuovoDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
.- Segnala gli eventi
MediaSourceEventListener
da origini secondarie inMergingMediaSource
. Di conseguenza, verranno registrati eventi di inizio/errore/annullamento/completamento del caricamento per i sottotitoli caricati lateralmente (quelli aggiunti conMediaItem.LocalConfiguration.subtitleConfigurations
), che potrebbero apparire come eventi di caricamento duplicati emessi daAnalyticsListener
. - Impedisci che gli errori relativi a sottotitoli e metadati interrompano completamente la riproduzione.
La traccia problematica viene disattivata e la riproduzione delle altre tracce continua (#1722).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), gli errori di analisi (ad es.
dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati vengono emessi
tramite callback
onLoadError
. - Nella gestione dei sottotitoli legacy (durante il rendering), vengono emessi solo gli errori di caricamento associati tramite i callback
onLoadError
, mentre gli errori di analisi vengono ignorati silenziosamente (questo è un comportamento preesistente).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), gli errori di analisi (ad es.
dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati vengono emessi
tramite callback
- È stato corretto un bug per cui gli elementi o i periodi delle playlist negli stream DASH con più periodi con durate che non corrispondono ai contenuti effettivi potevano causare il blocco dei fotogrammi alla fine dell'elemento (#1698).
- Aggiungi un set per
SntpClient
per impostare il tempo massimo trascorso dall'ultimo aggiornamento dopo il quale il client viene reinizializzato (#1794).
- Ora
- Trasformatore:
- Aggiungi
SurfaceAssetLoader
, che supporta l'inserimento in coda dei dati video in Transformer tramite unSurface
. ImageAssetLoader
segnala l'input non supportato tramiteAssetLoader.onError
instead of throwing anIllegalStateException
.- Rendi obbligatoria l'impostazione della durata dell'immagine utilizzando
MediaItem.Builder.setImageDurationMs
per l'esportazione delle immagini. - È stato aggiunto il supporto per l'esportazione delle interruzioni nelle sequenze di elementi EditedMediaItem audio.
- Aggiungi
- Selezione tracce:
DefaultTrackSelector
: preferisci l'audio basato sugli oggetti rispetto all'audio basato sul canale se gli altri fattori sono uguali.
- Estrattori:
- Consenti a
Mp4Extractor
eFragmentedMp4Extractor
di identificare i campioni H264 che non vengono utilizzati come riferimento dai campioni successivi. - Aggiunta dell'opzione per attivare la ricerca basata sull'indice in
AmrExtractor
. - Tratta i file MP3 con più di 128 kB tra frame validi come troncati
(anziché non validi). Ciò significa che i file con dati non MP3 alla fine,
senza altri metadati per indicare la durata dei byte MP3, ora interrompono
la riproduzione alla fine dei dati MP3 anziché non riuscire con
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563). - Correzione della gestione dei sample preroll per le posizioni di inizio dei contenuti multimediali non keyframe durante l'elaborazione degli elenchi di modifica nei file MP4 (#1659).
- È stato migliorato il calcolo della frequenza fotogrammi utilizzando la durata dei contenuti multimediali dalla
mdhd
casella inMp4Extractor
eFragmentedMp4Extractor
(#1531). - Correzione della scalatura errata di
media_time
negli elenchi di modifica MP4. Anche sesegment_duration
era già scalato correttamente utilizzando la scala temporale del film,media_time
ora è scalato correttamente utilizzando la scala temporale della traccia, come specificato dallo standard del formato MP4 (#1792). - Gestire i frame fuori sequenza nel calcolo di
endIndices
per MP4 con elenco di modifiche (#1797). - Correggere l'analisi della durata dei contenuti multimediali nella casella
mdhd
dei file MP4 per gestire i valori-1
(#1819). - È stato aggiunto il supporto per l'identificazione della casella
h263
nei file MP4 per i video H.263 (#1821). - È stato aggiunto il supporto del formato file multimediale base ISO AC-4 di livello 4 (#1265).
- Consenti a
- DataSource:
- Aggiornamento
HttpEngineDataSource
per consentire l'utilizzo a partire dalla versione S dell'estensione 7 anziché dal livello API 34 (#1262). DataSourceContractTest
: verifica cheDataSource.getUri()
restituisca l'URI risolto (come descritto nella documentazione). Se è diverso dall'URI richiesto, i test possono indicarlo utilizzando il nuovo metodoDataSourceContractTest.TestResource.Builder.setResolvedUri()
.DataSourceContractTest
: verifica cheDataSource.getUri()
egetResponseHeaders()
restituiscano il valore "open" dopo una chiamata non riuscita aopen()
(a causa di una risorsa "not found") e prima di una chiamataclose()
successiva.- L'override di
DataSourceContractTest.getNotFoundResources()
consente alle sottoclassi di test di fornire più risorse "not found" e anche le intestazioni previste. In questo modo è possibile distinguere tra HTTP 404 (con intestazioni) e "server non trovato" (senza intestazioni).
- L'override di
- Aggiornamento
- Audio:
- Configura automaticamente i metadati relativi all'intensità sonora CTA-2075 sul codec se presenti nei contenuti multimediali.
- Assicurati che il volume diminuisca gradualmente durante la ricerca.
- Correggi i suoni di tipo pop che potrebbero verificarsi durante le ricerche.
- È stato corretto l'accumulo di errori di troncamento per l'algoritmo di stretching/cambio di tonalità di Sonic.
- Correzione di un bug in
SpeedChangingAudioProcessor
che causava la perdita di frame di output.
- Video:
MediaCodecVideoRenderer
evita di decodificare i sample che non vengono né visualizzati né utilizzati come riferimento da altri sample.- Nell'API 35 e versioni successive,
MediaCodecAdapter
ora può ricevere unnull
Surface
inconfigure
e chiama un nuovo metododetachOutputSurface
per rimuovere unSurface
impostato in precedenza se il codec lo supporta (MediaCodecInfo.detachedSurfaceSupported
). - Utilizza i valori delle proporzioni pixel forniti da
MediaCodecAdapter
, se presenti, durante l'elaborazione dionOutputFormatChanged
(#1371). - È stata aggiunta una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE che causa il contrassegno come non supportati degli stream H264 protetti a 60 fps (#1619).
- Aggiungere una soluzione alternativa per i codec che si bloccano dopo l'ultimo sample senza restituire un segnale di fine stream.
- Testo:
- Aggiungi un
VoiceSpan
personalizzato e compilalo per gli intervalli vocali WebVTT (#1632). - Assicurati che i timestamp dei sottotitoli WebVTT in HLS molto grandi (che superano un valore
long
a 64 bit quando sono rappresentati in microsecondi e moltiplicati per la base di tempo MPEG) vengano visualizzati (#1763).90,000
- Supporto dei sottotitoli CEA-608 nei contenuti Dolby Vision (#1820).
- È stato corretto il blocco della riproduzione negli stream DASH multiperiodo quando sono attivati i sottotitoli CEA-608 (#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 un'integrazione semplificata 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 una soluzione alternativa
DefaultVideoFrameProcessor
per il scalingSurfaceTexture
minore.SurfaceTexture
può includere una piccola scala che taglia un bordino di 1 texel intorno al bordo di un buffer ritagliato. Ora questo problema viene gestito in modo che l'output sia più vicino a quello previsto. - Accelera
DefaultVideoFrameProcessor.queueInputBitmap()
. Di conseguenza, l'esportazione delle immagini nei video conTransformer
è più veloce.
- Aggiungi una soluzione alternativa
- Estensione IMA:
- È stato corretto un bug per cui l'eliminazione della playlist poteva causare un
ArrayIndexOutOfBoundsException
inImaServerSideAdInsertionMediaSource
. - È stato corretto un bug per cui gli stream DAI inseriti lato server senza un preroll potevano generare un
ArrayIndexOutOfBoundsException
durante la riproduzione oltre l'ultimo midroll (#1741).
- È stato corretto un bug per cui l'eliminazione della playlist poteva causare un
- Sessione:
- Aggiungi
MediaButtonReceiver.shouldStartForegroundService(Intent)
per consentire alle app di eliminare un comando di riproduzione in arrivo per la ripresa della riproduzione, overriding questo metodo. Per impostazione predefinita, il servizio viene sempre avviato e la riproduzione non può essere soppressa senza che il sistema arresti in modo anomalo il servizio con unForegroundServiceDidNotStartInTimeException
(#1528). - È stato corretto un bug che causava l'invio di comandi personalizzati da un
MediaBrowser
alMediaSessionCompat.Callback
anziché alla varianteMediaBrowserServiceCompat
del metodo quando il dispositivo era connesso a un servizio precedente. Ciò ha impedito aMediaBrowser
di ricevere il valore di ritorno effettivo inviato dal servizio precedente (#1474). - Gestire l'errore
IllegalArgumentException
generato dai dispositivi di alcuni produttori quando si imposta il ricevitore di trasmissione per gli intent dei pulsanti multimediali (#1730). - Aggiungi i pulsanti di comando per gli elementi multimediali. In questo modo viene aggiunta l'API Media3 per quello che era noto come
Custom browse actions
con la libreria precedente conMediaBrowserCompat
. Tieni presente che con Media3 i pulsanti di comando per gli elementi multimediali sono disponibili sia perMediaBrowser
sia perMediaController
. Consulta Azioni di ricerca personalizzate di AAOS. - È stato corretto un bug per cui a volte un controller Media3 non riusciva a consentire a un'app di sessione di avviare un servizio in primo piano dopo aver richiesto
play()
. - Limita
CommandButton.Builder.setIconUri
in modo che accetti solo gli URI dei contenuti. - Passa i suggerimenti di connessione di un browser Media3 al
MediaBrowserCompat
iniziale quando ti connetti a unMediaBrowserCompat
precedente. Il servizio può ricevere gli indizi di connessione passati come indizi principali con la prima chiamata aonGetRoot()
. - È stato corretto un bug per cui un
MediaBrowser
connesso a un servizio browser precedente non riceveva un errore inviato dal servizio dopo che il browser si era iscritto a unparentid
. - Migliorare il comportamento di interoperabilità in modo che un browser Media3 collegato a un
MediaBrowserService
precedente non richieda due volte i canali secondari di unparentId
quando si iscrive a un canale principale.
- Aggiungi
- Interfaccia utente:
- Attivare la funzionalità di correzione del video allungato/ritagliato 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 la funzionalità (#1237, #1594). - Aggiungi
setFullscreenButtonState
aPlayerView
per consentire gli aggiornamenti dell'icona del pulsante a schermo intero su richiesta, ovvero out-of-band e non in modo reattivo a un'interazione con un clic (#1590, #184). - È stato corretto il bug per cui l'opzione "Nessuna" nella selezione del testo non funziona se esistono preferenze di selezione della traccia di testo definite dall'app.
- Attivare la funzionalità di correzione del video allungato/ritagliato in
- Estensione DASH:
- Aggiunta del supporto per i periodi che iniziano a metà di un segmento (#1440).
- Estensione Smooth Streaming:
- È stato corretto un errore
Bad magic number for Bundle
durante la riproduzione di stream con SmoothStreaming con tracce con testo (#1779).
- È stato corretto un errore
- Estensione RTSP:
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Aggiungi il modulo di decodifica IAMF, che fornisce il supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- La riproduzione è abilitata con un layout stereo e 5.1 con la spazializzazione, insieme al tracciamento facoltativo della testa, ma il supporto della riproduzione binaurale non è attualmente disponibile.
- Aggiunta del supporto delle pagine da 16 KB per le estensioni di decodifica su Android 15 (#1685).
- Aggiungi il modulo di decodifica IAMF, che fornisce il supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- Estensione di trasmissione:
- Interrompi la pulizia della sequenza temporale dopo la disconnessione di CastSession, il che consente all'app mittente di riprendere la riproduzione localmente dopo una disconnessione.
- Compila
DeviceInfo
di CastPlayer quando viene fornito unContext
. In questo modo, è possibile collegareMediaSession
aRoutingSession
, il che è necessario per integrare lo switcher di output (#1056).
- Utilità di test:
DataSourceContractTest
ora include test per verificare:- Lo stream di input
read position
è aggiornato. - Il buffer di output
offset
viene applicato correttamente.
- Lo stream di input
- App demo
- Risolvi le perdite di memoria nell'app demo nel formato breve (#1839).
- Rimuovi i simboli non più supportati:
- Rimuovi
Player.hasPrevious
,Player.hasPreviousWindow()
obsoleti. Utilizza invecePlayer.hasPreviousMediaItem()
. - Rimuovi il metodo
Player.previous()
deprecato. Utilizza invecePlayer.seekToPreviousMediaItem()
. - Rimuovi il metodo
DrmSessionEventListener.onDrmSessionAcquired
deprecato. - Rimuovi i costruttori
DefaultEncoderFactory
deprecati. Utilizza inveceDefaultEncoderFactory.Builder
.
- Rimuovi
Versione 1.5.0-rc02
19 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-rc01
13 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-beta01
30 ottobre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-alpha01
10 settembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.4.0
Versione 1.4.1
27 agosto 2024
androidx.media3:media3-*:1.4.1
viene rilasciato.
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 della durata in un frameInfo
(#1480).
- MP3: correggi l'errore
- Testo:
- TTML: correzione della gestione dei valori
tts:fontSize
percentuali per assicurarsi che vengano ereditati correttamente dai nodi principali con valoritts:fontSize
percentuali. - Correzione di
IndexOutOfBoundsException
inLegacySubtitleUtil
a causa della gestione errata del caso in cui l'ora di inizio dell'output richiesta sia maggiore o uguale all'ora dell'evento finale inSubtitle
(#1516).
- TTML: correzione della gestione dei valori
- DRM:
- Correzione dell'errore
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
sui dispositivi con API 31 e versioni successive che riproducono contenuti Widevine L1. Questo errore è causato da un'implementazione incompleta del metodo del frameworkMediaDrm.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 di "avanzamento al successivo", come documentato (#1493). - Gestisci
KEYCODE_HEADSETHOOK
come un comando "play" inMediaButtonReceiver
quando decidi se ignorarlo per evitare unForegroundServiceDidNotStartInTimeException
(#1581).
- Trasforma un doppio tocco di
- Estensione RTSP:
- Salta le descrizioni multimediali non valide nell'analisi del file SDP (#1087).
Versione 1.4.0
25 luglio 2024
androidx.media3:media3-*:1.4.0
viene rilasciato.
La versione 1.4.0 contiene questi commit.
- Libreria comune:
- Inoltra le chiamate di ricerca presumibilmente senza operazioni ai metodi
BasePlayer.seekTo()
eSimpleBasePlayer.handleSeek()
protetti 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 avanzato di Java 8 (#1312).
- Assicurati che la durata passata a
MediaItem.Builder.setImageDurationMs()
venga ignorata per unMediaItem
non immagine (come documentato). - Aggiungi
Format.customData
per archiviare informazioni personalizzate fornite dall'app sulle istanzeFormat
.
- Inoltra le chiamate di ricerca presumibilmente senza operazioni ai metodi
- 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 media delle sorgenti nella memoria e 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 perché i renderer e i decodificatori decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate diRenderer
devono controllare se il tempo di buffering è almenoBaseRenderer.getLastResetPositionUs()
per decidere se mostrare un sample. Le implementazioni personalizzate diSimpleDecoder
possono controllareisAtLeastOutputStartTimeUs()
se necessario o contrassegnare altri buffer conDecoderOutputBuffer.shouldBeSkipped
per saltarli. - Consenti a
TargetPreloadStatusControl.getTargetPreloadStatus(T)
di restituire un valore nullo per indicare di non precaricare unMediaSource
con ilrankingData
specificato. - Aggiungi
remove(MediaSource)
aBasePreloadManager
. - Aggiungi
reset()
aBasePreloadManager
per rilasciare tutte le sorgenti in attesa mantenendo l'istanza di Preloader Manager. - Aggiungi
ExoPlayer.setPriority()
(eBuilder.setPriority()
) per definire il valore di priorità utilizzato inPriorityTaskManager
e per l'importanza di MediaCodec dall'API 35. - Risolto il problema relativo all'aggiornamento dell'ora dell'ultimo buffering, che ha comportato la generazione di una chiave
bs
(mancata alimentazione del buffer) errata in CMCD (#1124). - Aggiungi
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
per indicare che la fonte è stata caricata fino alla fine. In questo modo, le implementazioni diDefaultPreloadManager
ePreloadMediaSource.PreloadControl
personalizzate possono precaricare la fonte successiva o eseguire altre azioni. - È stato corretto un bug per cui il salto dei silenzi alla fine degli elementi poteva attivare un'eccezione di riproduzione.
- Aggiungi
clear
aPreloadMediaSource
per ignorare il periodo di precaricamento. - Aggiungi un nuovo codice di errore
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
che viene utilizzato quando le risorse del codec vengono recuperate per attività con priorità più elevata. - Consenti a
AdsMediaSource
di caricare gli annunci pre-roll prima del completamento della preparazione iniziale dei contenuti media (#1358). - È stato corretto un bug per cui la riproduzione passava a
STATE_ENDED
durante la preparazione di un nuovo live streaming DASH multiperiodo dopo che il periodo originale era già stato rimosso dal manifest. - Rinomina
onTimelineRefreshed()
inonSourcePrepared()
eonPrepared()
inonTracksSelected()
inPreloadMediaSource.PreloadControl
. Rinomina anche le IntDefs inDefaultPreloadManager.Stage
di conseguenza. - Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro con i cicli di risveglio della CPU e ritardare il risveglio fino al momento in cui i renderer possono avanzare.
Puoi attivare questa opzione utilizzando
experimentalSetDynamicSchedulingEnabled()
durante la configurazione dell'istanza ExoPlayer. - Aggiungi
Renderer.getDurationToProgressUs()
. UnRenderer
può implementare questo metodo per restituire a ExoPlayer la durata di avanzamento della riproduzione necessaria per l'avanzamento del renderer. SeExoPlayer
è impostato suexperimentalSetDynamicSchedulingEnabled()
,ExoPlayer
chiamerà questo metodo per calcolare il momento in cui pianificare l'attività di lavoro. - Aggiungi
MediaCodecAdapter#OnBufferAvailableListener
per avvisare quando i buffer di input e di output sono disponibili per l'utilizzo da parte diMediaCodecRenderer
.MediaCodecRenderer
segnaleràExoPlayer
quando riceve questi callback e, seExoPlayer
è impostato suexperimentalSetDynamicSchedulingEnabled()
,ExoPlayer
programmerà il proprio loop di lavoro man mano che i renderer possono avanzare. - Utilizza la classe di dati per i metodi
LoadControl
anziché i singoli parametri. - Aggiungi
ExoPlayer.isReleased()
per verificare seExoplayer.release()
è stato chiamato. - Aggiungi
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
per configurare la posizione massima per cuiseekToPrevious()
esegue la ricerca fino all'elemento precedente (#1425). - Correzione di alcune incoerenze dell'audio, ad esempio la mancata registrazione della perdita di attenzione completa o transitoria quando il player è in pausa (#1436).
- Risolto il potenziale
IndexOutOfBoundsException
causato dagli estrattori che segnalano canali aggiuntivi dopo il passaggio di preparazione iniziale (#1476). Effects
inExoPlayer.setVideoEffect()
riceverà i timestamp con l'offset del renderer rimosso (#1098).- Risolto il potenziale
IllegalArgumentException
durante la gestione dell'errore del player che si è verificato durante la lettura anticipata di un altro elemento della playlist (#1483).
- Aggiungi
- Trasformatore:
- Aggiungi
audioConversionProcess
evideoConversionProcess
aExportResult
per indicare in che modo è stato creato il rispettivo canale nel file di output. - Allenta i controlli a livello H.264 per l'ottimizzazione del taglio.
- È stato aggiunto il supporto per il passaggio tra i contenuti multimediali di input SDR e HDR in sequenza.
- Aggiunta del supporto per gli effetti audio a livello di composizione.
- Aggiunta del supporto per la transcodifica di immagini Ultra HDR in video HDR.
- È stato risolto il problema per cui
DefaultAudioMixer
non emette la quantità corretta di byte dopo essere stato reimpostato e riutilizzato. - Sfrutta una soluzione alternativa per 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
. - Correggere il caricamento delle immagini HEIC dagli schemi URI dei contenuti. (#1373).
- Regola la durata della traccia audio in
AudioGraphInput
per migliorare la sincronizzazione AV. - Rimuovi il campo
ExportResult.processedInputs
. Se utilizzi questo campo per dettagli sul codec, utilizzaDefaultDecoderFactory.listener
. In caso di eccezione per un codec, i dettagli del codec saranno disponibili inExportException.codecInfo
.
- Aggiungi
- Estrattori:
- MPEG-TS: esegui il roll forward della modifica assicurandoti che l'ultimo fotogramma venga visualizzato passando l'ultima unità di accesso di uno stream alla coda di sample (#7909). Sono state incorporate correzioni per risolvere i problemi emersi negli stream HLS solo con frame I(#1150) e negli stream HLS H.262 (#1126).
- MP3: preferisci le dimensioni dei dati di un frame
Info
rispetto a quelle riportate dall'Content-Length
stream sottostante (ad es. dimensioni del file o intestazioneContent-Length
HTTP). In questo modo è possibile escludere i dati dei trailer non riproducibili (ad es. l'artwork dell'album) dai calcoli di ricerca con velocità in bit costante, rendendo le ricerche più accurate (#1376). - MP3: utilizza il conteggio dei frame e altri dati in un frame
Info
(se presente) per calcolare una velocità in bit media per la ricerca di una velocità in bit costante, anziché eseguire l'estrapolazione dalla velocità in bit del frame successivo al frameInfo
, che potrebbe essere artificialmente ridotta, ad esempio il framePCUT
(#1376). - Correggere l'estrazione del formato audio PCM nei contenitori AVI.
- Audio:
- Correzione degli attributi di codifica DTS:X Profile 2 per la riproduzione passthrough (#1299).
- Per la riproduzione offloaded, reimposta il campo di monitoraggio per il completamento dello stream
in
DefaultAudioSink
prima di chiamareAudioTrack.stop()
in modo cheAudioTrack.StreamEventCallback#onPresentationEnded
identifichi correttamente quando tutti i dati in attesa sono stati riprodotti. - È stato corretto un bug in
SilenceSkippingAudioProcessor
per cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) possono causare un'eccezione del processore (#1352). - Implementa
MediaCodecAudioRenderer.getDurationToProgressUs()
in modo che ExoPlayer pianifichi dinamicamente il proprio loop di lavoro principale in base a quando MediaCodecAudioRenderer può avanzare.
- Video:
- È stato risolto il problema per cui
Listener.onRenderedFirstFrame()
arriva troppo presto quando si cambia superficie durante la riproduzione. - Correggere la logica di riserva del decodificatore per Dolby Vision in modo da utilizzare un decodificatore AV1 compatibile, se necessario (#1389).
- È stata corretta un'eccezione del codec che potrebbe essere causata dall'attivazione di un visualizzatore video durante la riproduzione.
- È stato risolto il problema per cui
- Testo:
- È stato risolto il problema per cui i sottotitoli che iniziano prima di una posizione di ricerca vengono ignorati. Questo problema è stato introdotto solo in Media3 1.4.0-alpha01.
- Modifica il comportamento di analisi dei sottotitoli predefinito in modo che avvenga durante l'estrazione anziché durante il rendering (consulta il diagramma dell'architettura di ExoPlayer per conoscere la differenza tra estrazione e rendering).
- Questa modifica può essere ignorata chiamando entrambi
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
eTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Consulta la documentazione sulla personalizzazione per scoprire come collegare questi componenti a un'istanzaExoPlayer
. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli precedenti) verranno rimossi in una release futura. - Le app con implementazioni
SubtitleDecoder
personalizzate devono essere aggiornate per implementareSubtitleParser
(eSubtitleParser.Factory
anzichéSubtitleDecoderFactory
).
- Questa modifica può essere ignorata chiamando entrambi
- PGS: correzione della decodifica run-length per risolvere
0
come indice di colore anziché come valore di colore letterale (#1367). - CEA-708: ignora il valore
rowLock
. La specifica CEA-708-E S-2023 afferma cherowLock
ecolumnLock
devono essere considerati veri, indipendentemente dai valori presenti nello stream (il supporto dicolumnLock
non è implementato, quindi si presume che sia sempre falso).- Questa funzionalità era originariamente inclusa nelle note di rilascio di
1.3.0-alpha01
, ma la modifica è stata annullata accidentalmente prima del rilascio di1.3.0-rc01
. Il problema ora è stato risolto, quindi la modifica è di nuovo presente.
- Questa funzionalità era originariamente inclusa nelle note di rilascio di
- CEA-708: evita che vengano aggiunte nuove righe duplicate a causa della gestione ingenua del comando "set pen location" da parte di ExoPlayer (#1315).
- Correggi un
IllegalArgumentException
daLegacySubtitleUtil
quando un esempio di sottotitoli WebVTT non contiene segnali, ad esempio nell'ambito di uno stream DASH (#1516).
- Metadati:
- Correggere la mappatura dei tag di ordinamento MP4 in ID3. In precedenza, i tag MP4 "ordinamento album" (
soal
), "ordinamento artista" (soar
) e "ordinamento artista album" (soaa
) erano mappati erroneamente ai tag ID3TSO2
,TSOA
eTSOP
(#1302). - Correzione della lettura dei tag numerici
gnre
(genere) etmpo
(tempo) per MP4 (/iTunes) quando il valore è lungo più di un byte. - Propaga il frame ID3
TCON
aMediaMetadata.genre
(#1305).
- Correggere la mappatura dei tag di ordinamento MP4 in ID3. In precedenza, i tag MP4 "ordinamento album" (
- Immagine:
- Aggiunta del supporto per le griglie di miniature DASH non quadrate (#1300).
- È stato aggiunto il supporto di AVIF per le API 34 e successive.
- Consenti
null
come parametro perExoPlayer.setImageOutput()
per cancellare un valoreImageOutput
impostato in precedenza.
- DataSource:
- Implementa il supporto per gli URI delle risorse non elaborate
android.resource://package/id
dovepackage
è diverso dal pacchetto dell'applicazione corrente. In precedenza non era documentato che funzionasse, ma è un modo più efficiente per accedere alle risorse in un altro pacchetto rispetto al nome. - Controlla attivamente che
url
non sia nullo nei costruttori diDataSpec
. Questo parametro è già stato annotato come non nullo. - Consenti a
ByteArrayDataSource
di risolvere un URI in un array di byte duranteopen()
, anziché essere hardcoded al momento della compilazione (#1405).
- Implementa il supporto per gli URI delle risorse non elaborate
- DRM:
- Consenti di impostare un
LoadErrorHandlingPolicy
suDefaultDrmSessionManagerProvider
(#1271).
- Consenti di impostare un
- Effetto:
- Supporta più cambi di velocità all'interno dello stesso
EditedMediaItem
oComposition
inSpeedChangeEffect
. - Supporto per l'output HLG e PQ dall'input bitmap ultra HDR.
- È stato aggiunto il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, che migliora l'output della superficie HLG in ExoPlayer.setVideoEffect e nella Debug SurfaceView di Transformer.
- Aggiorna l'implementazione della matrice overlay in modo che sia coerente con la documentazione invertendo i valori x e y applicati in
setOverlayFrameAnchor()
. Se utilizziOverlaySettings.Builder.setOverlayFrameAnchor()
, capovolgi i valori x e y moltiplicandoli per-1
. - È stato corretto un bug per cui
TimestampWrapper
si arresta in modo anomalo se utilizzato conExoPlayer#setVideoEffects
(#821). - Modifica lo spazio di lavoro dei colori SDR predefinito dai colori lineari ai colori elettrici per i video SDR BT 709. Fornisci anche una terza opzione per mantenere lo spazio di colore originale.
- Consenti di definire l'ordine Z indeterminato di EditedMediaItemSequences (#1055).
- Mantieni una gamma di luminanza coerente tra diversi contenuti HDR (utilizza la gamma HLG).
- Aggiunta del supporto per gli overlay Ultra HDR (bitmap) sui contenuti HDR.
- Consenti l'utilizzo degli effetti
SeparableConvolution
prima dell'API 26. - Rimuovi
OverlaySettings.useHdr
inutilizzato perché l'intervallo dinamico dell'overlay e della cornice deve corrispondere. - Aggiungi il supporto HDR per
TextOverlay
. La luminosità dell'overlay di testo può essere aggiustata conOverlaySettings.Builder.setHdrLuminanceMultiplier()
.
- Supporta più cambi di velocità all'interno dello stesso
- Estensione IMA:
- Promuovi l'API richiesta per consentire alle app di riprodurre stream di annunci DAI in modalità stabile.
- Aggiungi
replaceAdTagParameters(Map <String, String>)
aImaServerSideAdInsertionMediaSource.AdLoader
per consentire la sostituzione dei parametri del tag annuncio in fase di runtime. - È stato corretto un bug per cui
VideoAdPlayer.VideoAdPlayerCallback.onError()
non veniva chiamato quando si verificava un errore del player durante la riproduzione dell'annuncio (#1334). - Esegui l'upgrade della versione dell'SDK IMA a 3.33.0 per correggere un problema
NullPointerException
quando utilizzi URI dei tag annunciodata://
(#700).
- Sessione:
- Modifica il valore predefinito
CommandButton.enabled
intrue
e assicurati che il valore possa rimanere falso per i controller anche se il comando associato è disponibile. - Aggiungi costanti di icone per
CommandButton
da utilizzare al posto delle risorse di icone personalizzate. - Aggiungi
MediaSessionService.isPlaybackOngoing()
per consentire alle app di eseguire query per verificare se il servizio deve essere interrotto inonTaskRemoved()
(#1219). - Aggiungi
MediaSessionService.pauseAllPlayersAndStopSelf()
che consente di mettere in pausa la riproduzione di tutte le sessioni e chiamastopSelf()
per terminare il ciclo di vita delMediaSessionService
. - Sostituisci
MediaSessionService.onTaskRemoved(Intent)
per fornire un'implementazione predefinita sicura che mantiene il servizio in esecuzione in primo piano se la riproduzione è in corso o lo interrompe in caso contrario. - Nascondi la barra di scorrimento nella notifica multimediale per i live streaming non impostando la durata nei metadati della sessione della piattaforma (#1256).
- Allinea la conversione di
MediaMetadata
aMediaDescriptionCompat
per utilizzare lo stesso ordine e la stessa logica preferiti per la selezione delle proprietà dei metadati come in media1. - Aggiungi
MediaSession.sendError()
che consente di inviare errori non fatali al controller Media3. Quando utilizzi il controller delle notifiche (vediMediaSession.getMediaNotificationControllerInfo()
), l'errore personalizzato viene utilizzato per aggiornare ilPlaybackState
della sessione della piattaforma in uno stato di errore con le informazioni sull'errore specificate (#543). - Aggiungi
MediaSession.Callback.onPlayerInteractionFinished()
per informare le sessioni al termine di una serie di interazioni del giocatore da un controller specifico. - Aggiungi
SessionError
e utilizzalo inSessionResult
eLibraryResult
invece del codice di errore per fornire ulteriori informazioni sull'errore e su come risolverlo, se possibile. - Pubblica il codice dell'app di test del controller media3 che può essere utilizzata per verificare le interazioni con le app che pubblicano una sessione multimediale.
- Propaga gli extra passati a
MediaSession[Builder].setSessionExtras()
di media3 aMediaSession[Builder].setSessionExtras()
di un controllore media1.PlaybackStateCompat.getExtras()
- Mappa gli errori irreversibili e non irreversibili verso e dalla sessione della piattaforma. Un
PlaybackException
è mappato a uno stato di errore irreversibile delPlaybackStateCompat
. UnSessionError
inviato al controllore di notifiche multimediali conMediaSession.sendError(ControllerInfo, SessionError)
è 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
. - Consenti di impostare l'attività della sessione per controller per eseguire l'override dell'attività della sessione globale. L'attività della sessione può essere definita per un
controller al momento della connessione creando un
ConnectionResult
conAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Una volta collegata, l'attività della sessione può essere aggiornata conMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - Migliorare la replica degli errori delle chiamate a
MediaLibrarySession.Callback
. Ora la replica degli errori 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
- Interfaccia utente:
- Aggiungere il supporto della visualizzazione delle immagini a
PlayerView
quando è connesso a unExoPlayer
(#1144). - Aggiungi la personalizzazione di varie icone in
PlayerControlView
tramite gli attributi xml per consentire drawable diversi per ogni istanza diPlayerView
, anziché sostituzioni globali (#1200). - Sfrutta una soluzione alternativa per un bug della piattaforma che causa un video allungato/ritagliato quando utilizzi
SurfaceView
all'interno di un ComposeAndroidView
nell'API 34 (#1237).
- Aggiungere il supporto della visualizzazione delle immagini a
- Download:
- Assicurati che
DownloadHelper
non lasci inutilizzate istanze diRenderer
non rilasciate, il che potrebbe causare un arresto anomalo dell'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:
- È stato corretto un bug per cui i campioni EMSG in attesa di una discontinuità venivano delegati in
HlsSampleStreamWrapper
con un offset errato, causando unIndexOutOfBoundsException
o unIllegalArgumentException
(#1002). - È stato corretto un bug per cui le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
- È stato corretto un bug per cui l'attivazione di CMCD per HLS con segmenti di inizializzazione dava risultati in
Source Error
eIllegalArgumentException
. - È stato corretto un bug a causa del quale le playlist in riproduzione non principali non venivano aggiornate durante la riproduzione in diretta (#1240).
- Correzione del bug che causava un errore se si attivava CMCD per i live streaming HLS
ArrayIndexOutOfBoundsException
(#1395).
- È stato corretto un bug per cui i campioni EMSG in attesa di una discontinuità venivano delegati in
- Estensione DASH:
- Estensione di trasmissione:
- Correzione del bug che convertiva il titolo dell'album del
MediaQueueItem
nell'artista nell'elemento multimediale Media3 (#1255).
- Correzione del bug che convertiva il titolo dell'album del
- Utilità di test:
- Implementa
onInit()
eonRelease()
inFakeRenderer
. - Modifica i metodi
TestPlayerRunHelper.runUntil()/playUntil()
in modo che non vengano eseguiti in caso di errori non fatali (ad es. quelli segnalati aAnalyticsListener.onVideoCodecError()
). Utilizza la nuova catena di metodiTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
per disattivare questo comportamento.
- Implementa
- App di prova:
- Utilizza
DefaultPreloadManager
nell'app demo del formato breve. - Consenti di impostare la modalità di ripetizione con gli argomenti
Intent
dalla riga di comando (#1266). - Utilizza
HttpEngineDataSource
comeHttpDataSource
se supportato dal dispositivo.
- Utilizza
- Rimuovi i simboli non più supportati:
- Rimuovi
CronetDataSourceFactory
. Utilizza inveceCronetDataSource.Factory
. - Rimuovi alcuni costruttori
DataSpec
. Utilizza inveceDataSpec.Builder
. - Rimuovi il metodo
setContentTypePredicate(Predicate)
daDefaultHttpDataSource
,OkHttpDataSource
eCronetDataSource
. Utilizza invece 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
. Utilizza inveceDefaultHttpDataSource.Factory
. - Rimuovi
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. Utilizza inveceDashMediaSource.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 invece le sovraccaricamenti che accettano unDecoderReuseEvaluation
. - Rimuovi le costanti
RendererSupport.FormatSupport
IntDef eFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
. Utilizza i valori IntDef e le costanti equivalenti inandroidx.media3.common.C
(ad es.C.FORMAT_HANDLED
). - Rimuovi l'interfaccia
Bundleable
. Sono inclusi tutti i campi costantiBundleable.Creator<Foo> CREATOR
. Gli utenti che chiamano devono invece utilizzare i metodiBundle toBundle()
estatic Foo fromBundle(Bundle)
su ogni tipo.
- Rimuovi
Versione 1.4.0-rc01
10 luglio 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-beta01
26 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha02
7 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha01
17 aprile 2024
Utilizza la versione stabile 1.4.0.
Versione 1.3.0
Versione 1.3.1
11 aprile 2024
androidx.media3:media3-*:1.3.1
viene rilasciato.
La versione 1.3.1 contiene questi commit.
- Libreria comune:
- Aggiungi
Format.labels
per consentire etichette localizzate o altre etichette alternative.
- Aggiungi
- ExoPlayer:
- È stato risolto il problema per cui
PreloadMediaPeriod
non riesce a conservare gli stream quando viene nuovamente precaricato. - Applica il valore
TrackSelectionResult
corretto corrispondente al periodo di riproduzione durante la nuova selezione della traccia. - Avvia i renderer abilitati in anteprima solo dopo aver avanzato il periodo di riproduzione durante il passaggio da un elemento multimediale all'altro (#1017).
- Aggiungi il tipo di ritorno mancante alla regola
-keepclasseswithmembers
di Proguard perDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- È stato risolto il problema per cui
- Trasformatore:
- Aggiunta di una soluzione alternativa per l'eccezione generata a causa del mancato supporto da parte di
MediaMuxer
dei timestamp di presentazione negativi prima dell'API 30.
- Aggiunta di una soluzione alternativa per l'eccezione generata a causa del mancato supporto da parte di
- Selezione tracce:
DefaultTrackSelector
: preferisci le tracce video con una frequenza di frame "ragionevole" (>=10 fps) rispetto a quelle con una frequenza di frame inferiore o non impostata. In questo modo, il player seleziona la traccia video "reale" nei file MP4 estratti dalle foto in movimento, che possono contenere due tracce HEVC di cui una con una risoluzione più elevata, ma un numero molto ridotto di fotogrammi (#1051).
- Estrattori:
- Risolto il problema per cui il padding non veniva saltato durante la lettura di chunk di dimensioni dispari dai file WAV (#1117).
- MP3: compila
Format.averageBitrate
da frame dei metadati comeXING
eVBRI
. - MPEG-TS: ripristina una modifica che aveva lo scopo di garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di sample (#7909). Questo accade perché la modifica causa nuovi problemi con gli stream HLS solo con frame I (#1150) e gli stream HLS H.262 (#1126).
- Audio:
- Consenti il recupero del renderer disattivando l'offload se la traccia audio non riesce a inizializzarsi in modalità di offload.
- Video:
- Aggiunta di una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa il contrassegno degli stream H265 a 60 fps come non supportati
- Aggiunta di una soluzione alternativa che garantisce che il primo frame venga sempre visualizzato durante il tunneling anche se il dispositivo non lo fa automaticamente come richiesto dall'API (#1169). (#966).
- È stato risolto il problema per cui la gestione delle informazioni sui colori HDR causa un comportamento anomalo del codec e impedisce il passaggio al formato adattivo per le tracce video SDR (#1158).
- Testo:
- WebVTT: impedisci ai cue direttamente consecutivi di creare istanze
CuesWithTiming
aggiuntive spurie daWebvttParser.parse
(#1177).
- WebVTT: impedisci ai cue direttamente consecutivi di creare istanze
- DRM:
- Evitare un
NoSuchMethodError
che può essere generato dal frameworkMediaDrm
anziché daResourceBusyException
oNotProvisionedException
su alcuni dispositivi Android 14 (#1145).
- Evitare un
- Effetto:
- Miglioramento della mappatura tonale da PQ a SDR mediante la conversione degli spazi colore.
- Sessione:
- Interfaccia utente:
- Scegli come opzione di riserva l'inclusione del nome della lingua della traccia audio se
Locale
non riesce a identificare un nome visualizzato (#988).
- Scegli come opzione di riserva l'inclusione del nome della lingua della traccia audio se
- Estensione DASH:
- Compila tutti gli elementi
Label
del manifest inFormat.labels
(#1054).
- Compila tutti gli elementi
- Estensione RTSP:
- Salta i valori delle informazioni sulla sessione vuoti (tag i) nell'analisi del protocollo SDP (#1087).
- Estensioni decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Per impostazione predefinita, l'estensione MIDI è disabilitata come dipendenza locale perché richiede la configurazione di un repository Maven aggiuntivo. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riattivarlo.
Versione 1.3.0
6 marzo 2024
androidx.media3:media3-*:1.3.0
viene rilasciato.
La versione 1.3.0 contiene questi commit.
- Libreria comune:
- Implementa il supporto per gli URI delle risorse non elaborate
android.resource://package/[type/]name
, dovepackage
è diverso dal pacchetto dell'applicazione corrente. È sempre stato documentato che funziona, ma finora non è stato implementato correttamente. - Normalizza i tipi MIME impostati dal codice dell'app o letti dai contenuti multimediali in modo che siano completamente in minuscolo.
- Definisci gli annunci con un
MediaItem
completo anziché un 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
cheartworkData
inMediaMetadata.Builder.populate(MediaMetadata)
quando almeno uno di essi non è nullo (#964).
- Implementa il supporto per gli URI delle risorse non elaborate
- ExoPlayer:
- Aggiungi
PreloadMediaSource
ePreloadMediaPeriod
per consentire alle app di precaricare un'origine media di contenuti in una posizione di inizio specifica prima della riproduzione.PreloadMediaSource
si occupa di preparare l'origine media dei contenuti per ricevere ilTimeline
, preparare e memorizzare nella cache il periodo nella posizione di inizio specificata, selezionare le tracce e caricare i dati multimediali per il periodo. Le app controllano l'avanzamento del precaricamento 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 player per impostazione predefinita conImageOutput
eImageDecoder.Factory.DEFAULT
null.- Emettere l'evento
Player.Listener.onPositionDiscontinuity
quando viene ignorato il silenzio (#765). - Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi attivare questa opzione utilizzando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Supporta le origini multimediali adattabili con
PreloadMediaSource
. - Implementa
HttpEngineDataSource
, unHttpDataSource
, utilizzando l'API HttpEngine. - Impedisci la sottoclassificazione
CompositeSequenceableLoader
. Questo componente è stato in precedenza reso estensibile ma non è mai stato sottoclassificato all'interno della libreria. Le personalizzazioni possono essere eseguite wrapping un'istanza utilizzando il pattern decorator e implementando unCompositeSequenceableLoaderFactory
personalizzato. - È stato risolto il problema per cui la ripetizione della stessa ora comportava l'eliminazione dei metadati di questo elemento (#1007).
- Rinomina i metodi
experimentalSetSubtitleParserFactory
suBundledChunkExtractor.Factory
eDefaultHlsExtractorFactory
insetSubtitleParserFactory
e non consentire il passaggio dinull
. Utilizza i nuovi metodiexperimentalParseSubtitlesDuringExtraction(boolean)
per controllare il comportamento di analisi. - È stato aggiunto il supporto per la personalizzazione del
SubtitleParser.Factory
utilizzato durante l'estrazione. È possibile ottenere il consenso usandoMediaSource.Factory.setSubtitleParserFactory()
. - Aggiungi il prefisso della sorgente a tutti i campi
Format.id
generati daMergingMediaSource
. In questo modo puoi identificare la fonte che ha generato unFormat
(#883). - Correggi la regex utilizzata per convalidare i nomi delle chiavi personalizzate dei dati dei clienti di media comuni (CMCD) modificandola in modo da verificare solo la presenza di un trattino (#1028).
- Interrompere la doppia codifica dei parametri di query CMCD (#1075).
- Aggiungi
- Trasformatore:
- È stato aggiunto il supporto per l'appiattimento dei video in slow motion SEF H.265/HEVC.
- Aumento della velocità di transcodifica, in particolare per le modifiche "Rimuovi video".
- Aggiungi l'API per assicurarti che il file di output inizi su un frame video. In questo modo, il risultato delle operazioni di taglio può essere più compatibile con le implementazioni dei player che non mostrano il primo frame video fino al timestamp della presentazione (#829).
- È stato aggiunto il supporto per l'ottimizzazione delle operazioni di taglio MP4 di singoli asset.
- Aggiungi il supporto per assicurarti che un fotogramma video abbia il primo timestamp nel file di output. Corregge i file di output che iniziano con un frame nero su lettori basati su iOS (#829).
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.selectImageTrack
per attivare la selezione della traccia di immagini. - Aggiungi
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
per determinare se selezionare una traccia di immagini se sono disponibili sia una traccia di immagini sia una traccia video. Il valore predefinito èfalse
, il che significa che viene data la priorità alla selezione di una traccia video.
- Aggiungi
- Estrattori:
- Aggiunta di un'ulteriore analisi AV1C all'estrattore MP4 per recuperare i valori
ColorInfo.colorSpace
,ColorInfo.colorTransfer
eColorInfo.colorRange
(#692). - MP3: utilizza la ricerca con velocità in bit costante (CBR) per i file con un'intestazione
Info
(l'equivalente CBR dell'intestazioneXing
). In precedenza utilizzavamo la tabella di ricerca dall'intestazioneInfo
, ma questo comportava una ricerca meno precisa rispetto a se la ignoriamo e assumiamo che il file sia CBR. - MPEG2-TS: aggiungi il supporto di DTS, DTS-LBR e DTS:X Profile2 (#275).
- Estrai i tipi di audio dai descrittori TS e mappali ai flag dei ruoli, consentendo agli utenti di effettuare selezioni più consapevoli delle tracce audio (#973).
- Aggiunta di un'ulteriore analisi AV1C 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 iniettare unVideoFrameProcessor.Factory
personalizzato possono creare unCompositingVideoSinkProvider
che utilizza ilVideoFrameProcessor.Factory
personalizzato e passare il provider di destinazione video aMediaCodecVideoRenderer
.
- Modifica il costruttore
- Testo:
- Correzione della serializzazione degli indicatori 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 stabilisce cherowLock
ecolumnLock
devono essere considerati veri, indipendentemente dai valori presenti nello stream (il supporto dicolumnLock
non è implementato, quindi si presume che sia sempre falso).
- Correzione della serializzazione degli indicatori bitmap per risolvere l'errore
- Immagine:
- È stato aggiunto il supporto delle miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature
ImageOutput
poco prima dei relativi orari di presentazione.
- È stato aggiunto il supporto delle miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature
- DRM:
- Riproduci immediatamente i sample non criptati "lead clear" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i sample criptati successivi non sono ancora pronte. Ciò può causare interruzioni durante la riproduzione se le chiavi non sono ancora pronte quando la posizione di riproduzione raggiunge i sample criptati (in precedenza la riproduzione non sarebbe stata avviata a questo punto). Questo comportamento può essere disattivato con
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Riproduci immediatamente i sample non criptati "lead clear" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i sample criptati successivi non sono ancora pronte. Ciò può causare interruzioni durante la riproduzione se le chiavi non sono ancora pronte quando la posizione di riproduzione raggiunge i sample criptati (in precedenza la riproduzione non sarebbe stata avviata a questo punto). Questo comportamento può essere disattivato con
- Estensione IMA:
- È stato risolto il problema per cui non è possibile riprodurre gli annunci DASH e HLS senza l'estensione file appropriata.
- Sessione:
- Disattivare il rilevamento dei doppi clic per le app TV (#962).
- Risolto il problema per cui
MediaItem.RequestMetadata
con solo extra non nulli non viene trasmesso tra i controller multimediali e le sessioni. - Aggiungi un costruttore a
MediaLibrarySession.Builder
che accetti solo unContext
anziché unMediaLibraryService
.
- Estensione HLS:
- Riduci
HlsMediaPeriod
alla visibilità privata del pacchetto. Questo tipo non deve dipendere direttamente dall'esterno del pacchetto HLS. - La risoluzione cerca l'inizio di un segmento in modo più efficiente (#1031).
- Riduci
- Estensioni decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Decodificatore MIDI: ignora i messaggi di evento SysEx (#710).
- Utilità di test:
- Non mettere in pausa la riproduzione in
TestPlayerRunHelper.playUntilPosition
. Il test mantiene la riproduzione in uno stato di riproduzione, ma sospende l'avanzamento finché il test non è in grado di aggiungere asserzioni e ulteriori azioni.
- Non mettere in pausa la riproduzione in
- App di prova:
- Aggiungi un modulo demo nel formato breve per mostrare l'utilizzo di
PreloadMediaSource
con il caso d'uso dei contenuti nel formato breve.
- Aggiungi un modulo demo nel formato breve per mostrare l'utilizzo di
Versione 1.3.0-rc01
22 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-beta01
7 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-alpha01
15 gennaio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.2.0
Versione 1.2.1
9 gennaio 2024
- ExoPlayer:
- È stato risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
LiveConfiguration.min/maxOffset
continuano a regolare l'offset sumin/maxOffset
. - È stato corretto il problema relativo ai layout dei canali OPUS e VORBIS errati per i canali 3, 5, 6, 7 e 8 (#8396).
- È stato risolto il problema per cui le selezioni dei canali dopo la ricerca fino a zero in un live streaming consentivano erroneamente l'avvio dello stream nella posizione predefinita (#9347).
- È stato risolto il problema per cui le nuove istanze di
CmcdData.Factory
ricevevano valori negativi perbufferedDurationUs
dalle origini chunk, con conseguenteIllegalArgumentException
(#888).
- È stato risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
- Trasformatore:
- Sfrutta una soluzione alternativa per un problema per cui il codificatore generava un errore al momento della configurazione a causa dell'impostazione di una frequenza di funzionamento elevata.
- Estrattori:
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto animate JPEG come
ROLE_FLAG_ALTERNATE
per impedire che vengano selezionate automaticamente per la riproduzione a causa della loro risoluzione più elevata. - Correzione del rilevamento errato dei fotogrammi chiave per gli stream TS H264 (#864).
- Correzione della stima della durata degli stream TS più lunghi di 47721 secondi (#855).
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto animate JPEG come
- Audio:
- Correzione della gestione di EOS per
SilenceSkippingAudioProcessor
quando viene chiamato più volte (#712).
- Correzione della gestione di EOS per
- Video:
- Aggiunta di una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa il contrassegno come non supportati degli stream AVC a 60 fps (#693).
- Metadati:
- È stato corretto un bug per cui
MediaMetadata
veniva compilato solo dai commenti Vorbis con chiavi maiuscole (#876). - Cattura
OutOfMemoryError
durante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni del tag anziché interrompersi completamente.
- È stato corretto un bug per cui
- DRM:
- Estensione della soluzione alternativa per l'URL della licenza
https://default.url
ClearKey spurio all'API 33 e versioni successive (in precedenza la soluzione alternativa si applicava solo all'API 33 esatta) (#837). - Correzione del
ERROR_DRM_SESSION_NOT_OPENED
quando si passa da contenuti criptati a contenuti chiari senza una superficie collegata al player. L'errore è stato causato dall'utilizzo errato di un decodificatore sicuro per riprodurre i contenuti chiari.
- Estensione della soluzione alternativa per l'URL della licenza
- 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 orario negativo per un timer
setWhen
disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903). - Correzione del problema
IllegalStateException
quando il controller delle notifiche multimediali non ha completato la connessione al momento della richiesta del primo aggiornamento della notifica (#917).
- Inserisci le chiavi e i valori personalizzati in
- Interfaccia utente:
- Estensione DASH:
- Analizza "f800" come numero di canali pari a 5 per Dolby nel manifest DASH (#688).
- Estensioni decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Estensione di trasmissione:
- Sanitizza la creazione di un
Timeline
per evitare l'arresto anomalo dell'app quando il caricamento dei contenuti multimediali non riesce sul dispositivo di trasmissione (#708).
- Sanitizza la 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ù informazioni suThrowable
passato ai metodiLog.{d,i,w,e}()
, pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se lo desiderano (eventualmente utilizzandoLogger.appendThrowableString(String, Throwable)
). - È stato risolto un problema di compatibilità con Kotlin per cui i parametri di tipo generico nullable
e i tipi di elementi di array nullable non vengono rilevati come nullable. Alcuni esempi sono i parametri dei metodi
TrackSelectorResult
eSimpleDecoder
(#6792). - Modificare il comportamento predefinito dell'interfaccia utente e delle notifiche in
Util.shouldShowPlayButton
per mostrare un pulsante "Riproduci" mentre la riproduzione è temporaneamente soppressa (ad es. a causa di una perdita temporanea dell'audio). Il comportamento precedente può essere mantenuto utilizzandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Esegui l'upgrade da
androidx.annotation:annotation-experimental
a1.3.1
per risolvere il problema. https://issuetracker.google.com/251172715. - Sposta
ExoPlayer.setAudioAttributes
nell'interfacciaPlayer
.
- Aggiungi un parametro
- ExoPlayer:
- Risolvere i problemi di ricerca negli stream AC4 causati dalla mancata identificazione corretta dei campioni di solo decodifica (#11000).
- Aggiungi la soppressione della riproduzione su dispositivi di output audio non idonei (ad esempio lo speaker integrato sui dispositivi Wear OS) quando questa funzionalità è attivata tramite
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Il motivo della soppressione della riproduzione verrà aggiornato comePlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
se si tenta di riprodurre quando non sono disponibili uscite audio idonee o se tutte le uscite idonee sono disconnesse durante la riproduzione. Il motivo della soppressione verrà rimosso quando viene collegato un output idoneo. - Aggiungi
MediaSource.canUpdateMediaItem
eMediaSource.updateMediaItem
per accettare gli aggiornamenti diMediaItem
dopo la creazione tramitePlayer.replaceMediaItem(s)
. - Consenti gli aggiornamenti di
MediaItem
per tutti i tipiMediaSource
forniti dalla biblioteca 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
inSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
contiene parametri aggiuntivi, tra cuiplaybackSpeed
elastRebufferRealtimeMs
, oltre all'playbackPositionUs
esistente. - Migliora il metodo
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
nell'interfacciaChunkSource
inChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Aggiunta di campi aggiuntivi alla registrazione dei dati dei client multimediali comuni (CMCD): svuotamento del buffer (
bs
), scadenza (dl
), velocità di riproduzione (pr
) e avvio (su
) (#8699). - Aggiungi la profondità di bit di luma e croma a
ColorInfo
(#491). - Aggiungi altri campi alla registrazione dei dati dei client multimediali comuni (CMCD): richiesta di oggetto successivo (
nor
) e richiesta di intervallo successivo (nrr
) (#8699). - Aggiunta della funzionalità per trasmettere i dati CMCD (Common Media Client Data) utilizzando parametri di query (#553).
- Correggi
ConcurrentModificationException
inExperimentalBandwidthMeter
(#612). - Aggiungi il parametro
MediaPeriodId
aCompositeMediaSource.getMediaTimeForChildMediaTime
. - Supporto di
ClippingMediaSource
(e di altre origini con offset di tempo del periodo/della finestra) inConcatenatingMediaSource2
(#11226). - Modifica
BaseRenderer.onStreamChanged()
in modo che riceva anche un argomentoMediaPeriodId
.
- Trasformatore:
- Analizza i dati di rotazione EXIF per gli input di immagini.
- Rimuovi il tipo di annotazione
TransformationRequest.HdrMode
e le sue costanti associate. Utilizza inveceComposition.HdrMode
e le relative costanti. - Semplifica
OverlaySettings
per risolvere i problemi di rotazione. - I parametri
frameRate
edurationUs
diSampleConsumer.queueInputBitmap
sono stati modificati inTimestampIterator
.
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
per consentire o non consentire esplicitamente l'adattamento non continuo. Il valore predefinito rimanetrue
.
- Aggiungi
- Estrattori:
- MPEG-TS: assicurati che l'ultimo fotogramma venga visualizzato passando l'ultima unità di accesso di uno stream alla coda di sample (#7909).
- Correggi l'errore ortografico durante la determinazione di
rotationDegrees
.projectionPosePitch
cambiato inprojectionPoseRoll
(#461). - Rimuovi l'assunto che le istanze
Extractor
possano essere direttamente esaminate coninstanceof
. Se vuoi accedere in fase di runtime ai dettagli di implementazione di unExtractor
, devi prima chiamareExtractor.getUnderlyingInstance
. - Aggiungi
BmpExtractor
. - Aggiungi
WebpExtractor
. - Aggiungi
HeifExtractor
. - Aggiungere il supporto per QuickTime classico a
Mp4Extractor
.
- Audio:
- Aggiunta del supporto per PCM big endian a 24/32 bit in MP4 e Matroska e analisi della codifica PCM per
lpcm
in MP4. - È stato aggiunto il supporto per l'estrazione dell'audio Vorbis in MP4.
- Aggiungi
AudioSink.getFormatOffloadSupport(Format)
che recupera il livello di supporti di offload che il sink può fornire per il formato tramite unDefaultAudioOffloadSupportProvider
. Restituisce il nuovoAudioOffloadSupport
contenenteisFormatSupported
,isGaplessSupported
eisSpeedChangeSupported
. - Aggiungi
AudioSink.setOffloadMode()
tramite il quale viene configurata la configurazione di offload sul sink audio. Il valore predefinito èAudioSink.OFFLOAD_MODE_DISABLED
. - L'offload può essere attivato tramite
setAudioOffloadPreference
inTrackSelectionParameters
. Se la preferenza impostata è attiva, il dispositivo supporta lo scaricamento per il formato e la selezione della traccia è una singola traccia audio, lo scaricamento audio verrà attivato. - Se
audioOffloadModePreference
è impostato suAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
, ilDefaultTrackSelector
selezionerà una traccia audio solo se il formato della traccia è supportato nell'offload. Se non è supportata alcuna traccia audio nell'offload, non verrà selezionata nessuna traccia. - Disattivazione del supporto senza interruzioni per il trasferimento quando il livello API è precedente al 33 a causa di un problema con la posizione di riproduzione dopo la transizione tra tracce.
- Rimuovi il parametro
enableOffload
dalla firma del metodoDefaultRenderersFactory.buildAudioSink
. - Rimuovi il metodo
DefaultAudioSink.Builder.setOffloadMode
. - Rimuovi il valore intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Aggiunta del supporto per i metadati Opus senza interruzioni durante la riproduzione in modalità di offload.
- Consenti il recupero del renderer disattivando lo scambio se non è riuscito al primo salvataggio (#627).
- Attiva la pianificazione dell'offload per impostazione predefinita per la riproduzione offloaded solo audio.
- Elimina
ExoPlayer.experimentalSetOffloadSchedulingEnabled
eAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
è stato rinominato inonSleepingForOffloadChanged
eonExperimentalOffloadedPlayback
inonOffloadedPlayback
.- Sposta le interfacce
e le definizioni
TrackSelectionParameters
relative alla modalità di offload audio in una classeAudioOffloadPreferences
interna. - Aggiungi i callout
onAudioTrackInitialized
eonAudioTrackReleased
aAnalyticsListener
,AudioRendererEventListener
eAudioSink.Listener
. - Correzione del problema di sottoflusso del buffer audio DTS Express (#650).
- È stato corretto un bug per cui il controllo delle funzionalità per E-AC3-JOC genera un messaggio
IllegalArgumentException
(#677).
- Aggiunta del supporto per PCM big endian a 24/32 bit in MP4 e Matroska e analisi della 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 iniziava con timestamp negativi (#291).
- Consenti a
- Testo:
- Rimuovi
ExoplayerCuesDecoder
. Le tracce di testo consampleMimeType = application/x-media3-cues
vengono ora 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 restituire comunque null.
- Effetto:
- Aggiungi
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
la coda di input bitmap in base al timestamp. - Modifica
VideoFrameProcessor.registerInputStream()
in modo che non sia bloccante. Le app devono implementareVideoFrameProcessor.Listener#onInputStreamRegistered()
. - I parametri
frameRate
edurationUs
diVideoFrameProcessor.queueInputBitmap
sono stati modificati inTimestampIterator
.
- Aggiungi
- Estensione IMA:
- È stato corretto un bug per cui un live streaming DASH per più periodi che non è il primo elemento in una playlist può generare un'eccezione (#571).
- Rilascia StreamManager prima di chiamare
AdsLoader.destroy()
- Esegui l'upgrade della versione dell'SDK IMA alla versione 3.31.0.
- Sessione:
- Imposta il comportamento del servizio in primo piano per le notifiche su
FOREGROUND_SERVICE_IMMEDIATE
inDefaultMediaNotificationProvider
(#167). - Utilizza solo
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
versioni successive all'API 31 per evitare problemi con l'API deprecata sui dispositivi Samsung (#167). - Utilizza il controller di notifica multimediale come proxy per impostare i comandi disponibili e il layout personalizzato utilizzato per compilare la notifica e la sessione della piattaforma.
- Converti gli eventi dei pulsanti multimediali ricevuti da Media3 anziché inoltrarli alla sessione della piattaforma e di nuovo a Media3.
MediaSessionService.onStartCommand()
In questo modo, il controllore chiamante è sempre il controllore delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli dell'API supportati. - È stato corretto un bug per cui
MediaController.getCurrentPosition()
non avanza quando è connesso a unMediaSessionCompat
precedente. - Aggiungi
MediaLibrarySession.getSubscribedControllers(mediaId)
per comodità. - Sostituisci
MediaLibrarySession.Callback.onSubscribe()
per affermare la disponibilità dell'ID principale a cui si iscrive il controller. Se l'operazione va a buon fine, l'abbonamento viene accettato enotifyChildrenChanged()
viene chiamato immediatamente per informare il browser (#561). - Aggiungi il modulo di demo della sessione per il sistema operativo Automotive 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 controllore delle notifiche media. 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 eseguire l'override della gestione degli eventi dei pulsanti multimediali predefiniti.
- Imposta il comportamento del servizio in primo piano per le notifiche su
- Interfaccia utente:
- 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 collegare un'uscita audio adatta (ad es. cuffie Bluetooth). L'ascoltatore riprende automaticamente la riproduzione se un dispositivo idoneo è connesso entro un timeout configurabile (il valore predefinito è 5 minuti).
- Aggiungi un'implementazione di
- Download:
- Dichiara il tipo di servizio in primo piano "dataSync" per
DownloadService
per la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungeredataSync
comeforegroundServiceType
nel manifest e l'autorizzazioneFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- Dichiara il tipo di servizio in primo piano "dataSync" per
- Estensione HLS:
- Aggiorna la playlist live HLS con un intervallo calcolato dall'ora di inizio dell'ultimo caricamento anziché dall'ora di completamento dell'ultimo caricamento (#663).
- Estensione DASH:
- Consenti più dello stesso identificatore DASH nell'URL del modello di segmento.
- Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Questa funzionalità offre un supporto migliore per l'unione di sottotitoli sovrapposti, inclusa la risoluzione del tremolio durante il passaggio da un segmento di sottotitoli all'altro. Puoi attivare questa opzione utilizzando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Estensione RTSP:
- È stata corretta una condizione di gara che poteva portare a
IndexOutOfBoundsException
quando si ricorreva a TCP o alla sospensione della riproduzione in alcune situazioni. - Controlla lo stato nella configurazione RTSP quando viene restituito lo stato di caricamento di
RtspMediaPeriod
(#577). - Ignora i metodi di richiesta Rtsp personalizzati nell'intestazione pubblica della risposta Options (#613).
- Utilizza il valore del timeout della risposta di configurazione RTSP nell'intervallo di tempo di invio delle richieste di opzioni RTSP keep-alive (#662).
- È stata corretta una condizione di gara che poteva portare a
- Estensioni decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Rilascia il modulo del decodificatore MIDI, che fornisce il supporto per la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
- Aggiungi
DecoderOutputBuffer.shouldBeSkipped
per contrassegnare direttamente i buffer di output che non devono essere presentati. È preferibile rispetto aC.BUFFER_FLAG_DECODE_ONLY
, che verrà ritirato. - Aggiungi
Decoder.setOutputStartTimeUs
eSimpleDecoder.isAtLeastOutputStartTimeUs
per consentire ai decodificatori di eliminare i campioni di sola decodifica prima dell'ora di inizio. È preferibile utilizzare questo valore rispetto aBuffer.isDecodeOnly
, che verrà ritirato. - Correzione del bug di pubblicazione dell'artefatto del decodificatore MIDI nel repository Maven. L'elemento viene rinominato
media3-exoplayer-midi
(#734).
- Estensione Leanback:
- È stato corretto un bug per cui la disattivazione di una superficie può causare un
ArithmeticException
nel codice Leanback (#617).
- È stato corretto un bug per cui la disattivazione di una superficie può causare un
- Utilità di test:
- Rendi
TestExoPlayerBuilder
eFakeClock
compatibili con i test UI di Espresso e i test UI di Compose. Questo corregge un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con la visualizzazione Espresso o Componi.
- Rendi
- Rimuovi i simboli non più supportati:
- 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, utilizza invece 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 l'eliminazione della playlist. - Aggiungere altri campi alla registrazione dei dati dei client multimediali comuni (CMCD): formato di streaming (sf), tipo di stream (st), versione (v), birate massime (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
- Offload audio:
- Anteponi le pagine di intestazione ID Ogg e di intestazione dei commenti al flusso di dati per la riproduzione di Opus offloadata in conformità con la specifica RFC 7845.
- Video:
- H.265/HEVC: correzione dell'analisi delle informazioni relative alle immagini di riferimento a breve e lungo termine SPS.
- Testo:
- CEA-608: modifica la logica di troncamento dei cue in modo da considerare solo il testo visibile. In precedenza, l'a capo e l'offset di tabulazione erano inclusi quando si limitava la lunghezza del prompt a 32 caratteri (tecnicamente corretto secondo le specifiche) (#11019).
- Estensione IMA:
- Esegui l'upgrade della versione dell'SDK IMA alla versione 3.30.3.
- Sessione:
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene chiamato
MediaController.Listener.onCustomLayoutChanged
. Le app che vogliono inviare layout personalizzati diversi a diversi controller Media3 possono farlo inMediaSession.Callback.onConnect
utilizzando unAcceptedResultBuilder
per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione. - Risolto il problema per cui
MediaLibraryServiceLegacyStub
inviava un errore a unResult
che non lo supportava, generando unUnsupportedOperationException
(#78). - Correggi il modo in cui
PlayerWrapper
crea unVolumeProviderCompat
determinandovolumeControlType
sia tramite i comandi precedenti (COMMAND_ADJUST_DEVICE_VOLUME
eCOMMAND_SET_DEVICE_VOLUME
) sia tramite 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 è tutto pronto modifica il motivo della soppressione per troppo tempo. (#15).
- Aggiungi comandi al player:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Aggiungi metodi sovraccaricati a Player che consentono agli utenti di specificare i flag di volume:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Aggiungi
Builder
perDeviceInfo
e ritira il costruttore esistente. - Aggiungi
DeviceInfo.routingControllerId
per specificare l'ID del controller di routing per le riproduzioni da remoto. - Aggiungi
Player.replaceMediaItem(s)
come scorciatoia per aggiungere e rimuovere elementi nella stessa posizione (#8046).
- ExoPlayer:
- Consenti a ExoPlayer di avere il controllo dei metodi di controllo del volume del dispositivo solo se la funzionalità è stata attivata esplicitamente. Utilizza
ExoPlayer.Builder.setDeviceVolumeControlEnabled
per avere accesso 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 canali disponibili da unMediaSource
. - Aggiunta del supporto per l'inclusione di dati client multimediali comuni (CMCD) nelle richieste in uscita dei formati di streaming adattivo DASH, HLS e SmoothStreaming. I seguenti campi,
br
,bl
,cid
,rtp
esid
, sono stati incorporati (#8699). Struttura e metodi dell'API:- La registrazione CMCD è disattivata per impostazione predefinita. Utilizza
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
per attivarla. - Per impostazione predefinita, tutte le chiavi sono attivate. Per eseguire l'override, usa
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
per filtrare le chiavi da registrare. - Sostituisci
CmcdConfiguration.RequestConfig.getCustomData()
per attivare il logging delle chiavi personalizzato.
- 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 del video. - Aggiorna
SampleQueue
per archiviaresourceId
comelong
anziché comeint
. In questo modo vengono modificate le firme dei metodi pubbliciSampleQueue.sourceId
eSampleQueue.peekSourceId
. - Aggiungi parametri ai metodi
LoadControl
shouldStartPlayback
eonTracksSelected
che consentano di associarli alMediaPeriod
pertinente. - Modifica la firma di
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
aggiungendo un parametro della cronologia che contenga i periodi con gli UID utilizzati come chiavi nella mappa. Questo è necessario per evitare problemi di concorrenza con i live streaming multiperiodo. - Ritirare
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. È possibile chiamare la variante dei metodi senzamediaTimeOffsetUs
. Tieni presente che anche per le varianti ritirate, l'offset non viene più aggiunto astartTimeUs
eendTimeUs
degli oggettiMediaLoadData
inviati dal gestore. - Rinomina
ExoTrackSelection.blacklist
inexcludeTrack
eisBlacklisted
inisTrackExcluded
. - Correggere il comportamento incoerente tra
ExoPlayer.setMediaItem(s)
eaddMediaItem(s)
quando vengono chiamati in una playlist vuota.
- Consenti a ExoPlayer di avere il controllo dei metodi di controllo del volume del dispositivo solo se la funzionalità è stata attivata esplicitamente. Utilizza
- Trasformatore:
- Rimuovi
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. Utilizza inveceExoPlayerAssetLoader.Factory(MediaSource.Factory)
eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - Rimuovi
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - È stato corretto un bug per cui la trasformazione poteva bloccarsi (con conseguente timeout del muxer) se la fine dello stream video veniva segnalata nel momento in cui un fotogramma di input era in attesa di elaborazione.
- Esegui query sui codec tramite
MediaCodecList
anziché utilizzare le utilitàfindDecoder/EncoderForFormat
per espandere il supporto. - Rimuovi la configurazione dei frame B in
DefaultEncoderFactory
perché non funziona su alcuni dispositivi.
- Rimuovi
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
che è disattivata per impostazione predefinita. Se è attivata,DefaultTrackSelector
attiva una nuova selezione di tracce quando le funzionalità del visualizzatore sono cambiate.
- Aggiungi
- Estrattori:
- Audio:
- È stato corretto un bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling era attivo e
AudioProcessors
erano attivi, ad esempio per il taglio senza interruzioni (#10847). - Incapsula i frame Opus nei pacchetti Ogg nelle riproduzioni dirette (offload).
- Estrapolare la posizione attuale durante il sonno con la pianificazione dell'offload.
- Aggiungi
Renderer.release()
eAudioSink.release()
per rilasciare le risorse alla fine del ciclo di vita del player. - Ascolta le modifiche alle funzionalità audio in
DefaultAudioSink
. Aggiungi un parametro obbligatoriocontext
nel costruttore diDefaultAudioSink
, con il qualeDefaultAudioSink
si registrerà come ascoltatore diAudioCapabilitiesReceiver
e aggiornerà la sua proprietàaudioCapabilities
quando viene informato di una 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 la scalabilità/la miscelazione ai canali audio. - Aggiungi il nuovo valore intero
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
aDecoderDiscardReasons
per ignorare il decodificatore audio quando la modalità di bypass è possibile dopo la modifica delle funzionalità audio. - Aggiunta del supporto per la riproduzione diretta di DTS Express e DTS:X (#335).
- È stato corretto un bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling era attivo e
- Video:
- Fai in modo che
MediaCodecVideoRenderer
registri unVideoSize
con larghezza e altezza pari a 0 quando il visualizzatore è disattivato.Player.Listener.onVideoSizeChanged
viene chiamato di conseguenza quandoPlayer.getVideoSize()
cambia. Con questa modifica, le dimensioni del video di ExoPlayer conMediaCodecVideoRenderer
hanno una larghezza e un'altezza pari a 0 quandoPlayer.getCurrentTracks
non supporta il video o le dimensioni della traccia video supportata non sono ancora determinate.
- Fai in modo che
- DRM:
- Riduci la visibilità di diversi metodi solo per uso interno su
DefaultDrmSession
che non dovrebbero essere chiamati dall'esterno del package DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Riduci la visibilità di diversi metodi solo per uso interno su
- Muxer:
- Aggiungi una nuova libreria di muxer che può essere utilizzata per creare un file contenitore MP4.
- Estensione IMA:
- Attivare i live streaming DASH multiperiodo per DAI. Tieni presente che l'implementazione attuale non supporta ancora la ricerca nei live streaming (#10912).
- È stato corretto un bug per cui un nuovo gruppo di annunci viene inserito nei live streaming perché la posizione calcolata dei contenuti nelle schede temporali consecutive varia leggermente.
- Sessione:
- Aggiungi il metodo di assistenza
MediaSession.getControllerForCurrentRequest
per ottenere informazioni sul controller che sta attualmente chiamando un 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 una cuffia Bluetooth (#167). - Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItems
per consentire il passaggio diMediaItems
richiesto aPlayer
se hannoLocalConfiguration
(ad es. URI) (#282). - Aggiunta dei pulsanti di comando "Vai a precedente" e "Vai a successivo" nella visualizzazione compatta della notifica multimediale 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). - Aggiunta dei pulsanti di comando "Avanti" e "Indietro" nella visualizzazione compatta della notifica multimediale per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi il metodo di assistenza
- Interfaccia utente:
- 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 del tempo multimediale da
MediaLoadData.startTimeMs
eMediaLoadData.endTimeMs
per gli stream DASH multiperiodo. - È stato corretto un bug per cui la preparazione di una sorgente media Dash live con più periodi
produceva un
IndexOutOfBoundsException
(#10838).
- Rimuovi l'offset del tempo multimediale 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 l'interruzione infinita della riproduzione. Il timeout è impostato su zero per impostazione predefinita (#323).
- Aggiungi
- Utilità di test:
- Verifica che lo schema dell'URI non distingua tra maiuscole e minuscole in
DataSourceContractTest
.
- Verifica che lo schema dell'URI non distingua tra maiuscole e minuscole in
- Rimuovi i simboli non più supportati:
- Rimuovi i costruttori
DefaultAudioSink
, usaDefaultAudioSink.Builder
. - Rimuovi
HlsMasterPlaylist
e utilizzaHlsMultivariantPlaylist
. - Rimuovi
Player.stop(boolean)
. UtilizzaPlayer.stop()
ePlayer.clearMediaItems()
(sereset
ètrue
). - Rimuovi due costruttori
SimpleCache
deprecati, utilizza un costruttore non deprecato che accetta unDatabaseProvider
per un rendimento migliore. - Rimuovi il costruttore
DefaultBandwidthMeter
, usaDefaultBandwidthMeter.Builder
. - Rimuovi i costruttori
DefaultDrmSessionManager
, utilizzaDefaultDrmSessionManager.Builder
. - Rimuovi due costruttori
HttpDataSource.InvalidResponseCodeException
deprecati, utilizza un costruttore non deprecato che accetti 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
deprecato, utilizza un costruttore non deprecato che includa l'opzione per fornire un parametrochannelDescriptionResourceId
. - Rimuovi le costanti String deprecate per i set di caratteri (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
eUTF16LE_NAME
), utilizza invece i set di caratteri Kotlin del pacchettokotlin.text
,java.nio.charset.StandardCharsets
ocom.google.common.base.Charsets
. - Rimuovi il costruttore
WorkManagerScheduler
deprecato, 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 istanze della classeFormat
. Utilizza inveceFormat.Builder
per creare istanze diFormat
. - Rimuovi i metodi deprecati
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
ecopyWithVideoSize
, utilizza inveceFormat.buildUpon()
e metodi setter. - Rimuovi
ExoPlayer.retry()
deprecato e utilizzaprepare()
. - Rimuovi il costruttore
DefaultTrackSelector
con zero argomenti deprecato e utilizzaDefaultTrackSelector(Context)
. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato e utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Rimuovi il costruttore
DownloadManager
deprecato e utilizza invece il costruttore che accetta unExecutor
. - Rimuovi i costruttori
Cue
deprecati e utilizzaCue.Builder
. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato e utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Rimuovi quattro metodi
AnalyticsListener
deprecati:onDecoderEnabled
, utilizzaonAudioEnabled
e/oonVideoEnabled
.onDecoderInitialized
, utilizzaonAudioDecoderInitialized
e/oonVideoDecoderInitialized
.onDecoderInputFormatChanged
, utilizzaonAudioInputFormatChanged
e/oonVideoInputFormatChanged
.onDecoderDisabled
, utilizzaonAudioDisabled
e/oonVideoDisabled
.
- Rimuovi
Player.Listener.onSeekProcessed
eAnalyticsListener.onSeekProcessed
, che sono stati ritirati, e usaonPositionDiscontinuity
conDISCONTINUITY_REASON_SEEK
. - Rimuovi
ExoPlayer.setHandleWakeLock(boolean)
e utilizzasetWakeMode(int)
. - Rimuovi
DefaultLoadControl.Builder.createDefaultLoadControl()
, che è deprecato, e utilizzabuild()
. - 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 rilasciato.
La versione 1.0.2 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.7.
Questa release contiene le seguenti modifiche rispetto alla release 1.0.1:
- Libreria di base:
- Aggiungi
Buffer.isLastSample()
che indica seBuffer
contiene il flagC.BUFFER_FLAG_LAST_SAMPLE
. - È stato risolto il problema per cui l'ultimo fotogramma potrebbe non essere visualizzato se l'ultimo campione con fotogrammi viene estratto dalla coda senza leggere il campione "fine stream". (#11079).
- Aggiungi
- Estrattori:
- Correggere l'analisi del pacchetto SPS H.265 nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP e MP4 (#303).
- Testo:
- SSA: aggiungi il supporto per i file UTF-16 se iniziano con un indicatore dell'ordine dei byte (#319).
- Sessione:
- Risolto il problema per cui
MediaController
non aggiorna i comandi disponibili quando è connesso a unMediaController
precedente che aggiorna le sue azioni.MediaSessionCompat
- È stato corretto un bug che impediva a
MediaLibraryService
di restituire null per una chiamata dall'interfaccia utente di sistema aCallback.onGetLibraryRoot
conparams.isRecent == true
nell'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
potrebbe causare unMediaController
che genera unIllegalStateException
.
- Risolto il problema per cui
Versione 1.0.1
18 aprile 2023
androidx.media3:media3-*:1.0.1
viene rilasciato.
La versione 1.0.1 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.6.
- Libreria di base:
- Ripristina l'override del live streaming target quando cerchi la posizione predefinita (#11051).
- È stato corretto un bug per cui gli stream di sample vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
- Sessione:
- È stato risolto un bug per cui più elementi della coda identici pubblicati da un
MediaSessionCompat
precedente generavano un'eccezione inMediaController
(#290). - Aggiunta del inoltro mancante di
MediaSession.broadcastCustomCommand
alMediaControllerCompat.Callback.onSessionEvent
precedente (#293). - È stato corretto un bug per cui la chiamata a
MediaSession.setPlayer
non aggiornava i comandi disponibili. - È stato risolto il problema per cui le istanze
TrackSelectionOverride
inviate da unMediaController
vengono ignorate se fanno riferimento a un gruppo conFormat.metadata
(#296). - Risolvere il problema per cui
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
deve essere disponibile per accedere ai metadati tramiteMediaSessionCompat
precedente. - Risolto il problema per cui le istanze di
MediaSession
in un thread in background causano arresti anomali se utilizzate inMediaSessionService
(#318). - È stato risolto il problema per cui un ricevitore di pulsanti multimediali veniva dichiarato dalla libreria senza che l'app lo avesse previsto (#314).
- È stato risolto un bug per cui più elementi della coda identici pubblicati da un
- DASH:
- Correzione della gestione delle sequenze temporali dei segmenti vuote (#11014).
- RTSP:
- Riprova con TCP se la configurazione RTSP con UDP non va a buon fine con l'errore RTSP 461 UnsupportedTransport (#11069).
Versione 1.0.0
22 marzo 2023
androidx.media3:media3-*:1.0.0
viene rilasciato.
La versione 1.0.0 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.5.
Non sono state apportate modifiche dalla versione 1.0.0-rc02.
Versione 1.0.0-rc02
2 marzo 2023
androidx.media3:media3-*:1.0.0-rc02
viene rilasciato.
La versione 1.0.0-rc02 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.4.
- Libreria di base:
- Download:
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
SegmentDownloader
e sottoclassi (#248).
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
- Audio:
- Video:
- Mappa il formato HEVC HDR10 a
HEVCProfileMain10HDR10
anzichéHEVCProfileMain10
. - È stata aggiunta una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e su Lenovo M10 FHD Plus che causa il contrassegno degli stream AVC a 60 fps come non supportati (#10898).
- Risolvere i problemi di prestazioni relativi al rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza di frame molto superiore alla frequenza di aggiornamento dello schermo.
- Mappa il formato HEVC HDR10 a
- Trasmissione:
- Correzione del
STATE_IDLE
transitorio durante la transizione tra elementi multimediali (#245).
- Correzione del
- RTSP:
- Cattura l'IllegalArgumentException lanciata durante l'analisi di messaggi di risposta non validi di RTSP (#10971).
- Sessione:
- È stato corretto un bug per cui il pulsante di riproduzione/pausa della notifica non si aggiornava con lo stato del player (#192).
- Estensione IMA:
- È stato corretto un bug che impediva l'avvio degli stream DAI senza annunci perché non veniva ricevuto il primo (e, nel caso in cui non siano presenti annunci, l'unico) evento
LOADED
.
- È stato corretto un bug che impediva l'avvio degli stream DAI senza annunci perché non veniva ricevuto il primo (e, nel caso in cui non siano presenti annunci, l'unico) evento
Versione 1.0.0-rc01
16 febbraio 2023
androidx.media3:media3-*:1.0.0-rc01
viene rilasciato.
La versione 1.0.0-rc01 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.3.
- Libreria di base:
- Modifica la logica di ordinamento del decodificatore del renderer per rispettare le preferenze di
MediaCodecSelector
, anche se un decodificatore segnala che potrebbe non essere in grado di riprodurre i contenuti multimediali in modo efficiente. Ad esempio, con il selettore predefinito, il decodificatore hardware con solo supporto funzionale verrà preferito al decodificatore software che supporta completamente il formato (#10604). - Aggiungi
ExoPlayer.Builder.setPlaybackLooper
che imposta un thread di riproduzione preesistente per una nuova istanza ExoPlayer. - Consentire l'eliminazione degli aiuti del gestore dei download (#10776).
- Aggiungi il parametro a
BasePlayer.seekTo
per indicare anche il comando utilizzato per la ricerca. - Utilizza il tema durante il caricamento di drawable su API 21 e versioni successive (#220).
- 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:
- Lancia un
ParserException
anziché unNullPointerException
se nella tabella di esempio (stbl) manca una descrizione del campione (stsd) obbligatoria durante l'analisi degli atomi trak. - Saltare correttamente i sample quando si cerca direttamente un frame di sincronizzazione in fMP4 (#10941).
- Lancia un
- Audio:
- Utilizza la velocità in bit del formato audio compresso per calcolare la dimensione minima del buffer per
AudioTrack
nelle riproduzioni dirette (passthrough).
- Utilizza la velocità in bit del formato audio compresso per calcolare la dimensione minima del buffer per
- Testo:
- Correggi
TextRenderer
che passa un indice non valido (negativo) aSubtitle.getEventTime
se un file di sottotitoli non contiene cue. - SubRip: è stato aggiunto il supporto per i file UTF-16 se iniziano con un indicatore di ordine di byte.
- Correggi
- Metadati:
- Analizza più valori separati da valori null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituto diMediaMetadata.folderType
. Il tipo di cartella verrà ritirato nella prossima release.
- DASH:
- Aggiunta di un'analisi completa per gli insiemi di adattamento delle immagini, inclusi i conteggi dei riquadri (#3752).
- Interfaccia utente:
- Correggi il valore deprecated
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
per assicurarti che le modifiche alla visibilità vengano trasmesse all'ascoltatore registrato (#229). - Correggere l'ordine dei controlli del player centrali in
PlayerView
quando si utilizza un layout da destra verso sinistra (RTL) (#227).
- Correggi il valore deprecated
- Sessione:
- Aggiungi
SimpleBasePlayer
astratto per contribuire a implementare l'interfacciaPlayer
per i player personalizzati. - Aggiungi un metodo di assistenza per convertire il token della sessione della piattaforma in Media3
SessionToken
(#171). - Utilizza
onMediaMetadataChanged
per attivare gli aggiornamenti della sessione media della piattaforma (#219). - Aggiungi la sessione multimediale come argomento di
getMediaButtons()
diDefaultMediaNotificationProvider
e utilizza elenchi immutabili per chiarezza (#216). - Aggiungi un ascoltatore di callback
onSetMediaItems
per fornire i mezzi per modificare/impostareMediaItem
elenco, indice iniziale e posizione per sessione prima di impostare sul player (#156). - Evita il rilevamento del doppio tocco per gli eventi dei pulsanti multimediali non Bluetooth (#233).
- Rendere
QueueTimeline
più solido in caso di stato della sessione precedente sospetto (#241).
- Aggiungi
- Metadati:
- Analizza più valori separati da valori null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituto diMediaMetadata.folderType
. Il tipo di cartella verrà ritirato nella prossima release.
- Estensione di trasmissione:
- Esegui l'upgrade della versione dell'SDK Cast alla versione 21.2.0.
- Estensione IMA:
- Rimuovi l'ascoltatore del player di
ImaServerSideAdInsertionMediaSource
sul thread dell'applicazione per evitare problemi di threading. - Aggiungi una proprietà
focusSkipButtonWhenAvailable
aImaServerSideAdInsertionMediaSource.AdsLoader.Builder
per richiedere il passaggio del focus al pulsante Salta sui dispositivi TV e impostala su true per impostazione predefinita. - Aggiungi un metodo
focusSkipButton()
alImaServerSideAdInsertionMediaSource.AdsLoader
per richiedere programmaticamente di mettere in primo piano il pulsante Salta. - Esegui l'upgrade della versione dell'SDK IMA alla versione 3.29.0.
- Rimuovi l'ascoltatore del player di
- App di prova:
- Richiedi l'autorizzazione di notifica per le notifiche di download in fase di esecuzione (#10884).
Versione 1.0.0-beta03
22 novembre 2022
androidx.media3:media3-*:1.0.0-beta03
viene rilasciato.
La versione 1.0.0-beta03 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.2.
- Libreria di base:
- Aggiungi
ExoPlayer.isTunnelingEnabled
per verificare se il tunneling è abilitato per i canali attualmente selezionati (#2518). - Aggiungi
WrappingMediaSource
per semplificare l'a capo di un singoloMediaSource
(#7279). - Elimina il buffer precedente prima che la riproduzione si blocchi a causa di una memoria disponibile insufficiente.
- Chiudi il blocco di monitoraggio "doSomeWork" quando l'offload è attivo.
- Risolvere il problema di monitoraggio delle sessioni con le ricerche rapide in
PlaybackStatsListener
(#180). - Invia il callback
onMediaItemTransition
mancante quando 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. - È stato corretto un bug per cui la rimozione degli ascoltatori durante il rilascio del player poteva causare un
IllegalStateException
(#10758).
- Aggiungi
- Build:
- Applica un valore minimo di
compileSdkVersion
per evitare errori di compilazione (#10684). - Evita di pubblicare il blocco quando è incluso in un'altra build di Gradle.
- Applica un valore minimo di
- Selezione tracce:
- Preferisci altri canali a Dolby Vision se il display non lo supporta. (#8944).
- Download:
- È stato corretto un potenziale loop infinito in
ProgressiveDownloader
causato dal download e dalla riproduzione simultanei con lo stessoPriorityTaskManager
(#10570). - Far apparire immediatamente la notifica di download (#183).
- Limita le rimozioni dei download in parallelo a 1 per evitare la creazione eccessiva di thread (#10458).
- È stato corretto un potenziale loop infinito in
- Video:
- Prova un decodificatore alternativo per Dolby Vision se il display non lo supporta. (#9794).
- Audio:
- Utilizza
SingleThreadExecutor
per rilasciare istanzeAudioTrack
per evitare errori OutOfMemory quando rilasci più giocatori contemporaneamente (#10057). - Aggiunge
AudioOffloadListener.onExperimentalOffloadedPlayback
per lo stato di offload di AudioTrack. (#134). - Rendi
AudioTrackBufferSizeProvider
un'interfaccia pubblica. - Aggiungi
ExoPlayer.setPreferredAudioDevice
per impostare il dispositivo di output audio preferito (#135). - Rinomina
androidx.media3.exoplayer.audio.AudioProcessor
inandroidx.media3.common.audio.AudioProcessor
. - Mappa l'audio a 8 e 12 canali alle maschere di canale 7.1 e 7.1.4 rispettivamente su tutte le versioni di Android (#10701).
- Utilizza
- Metadati:
- Ora
MetadataRenderer
può essere configurato per eseguire il rendering dei metadati non appena diventano disponibili. Crea un'istanza conMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
per specificare se il renderer deve generare i metadati in anticipo o in sincronia con la posizione del player.
- Ora
- DRM:
- Sfrutta una soluzione alternativa per un bug nell'implementazione di ClearKey di Android 13 che restituisce un URL licenza non vuoto, ma non valido.
- Correzione dell'errore
setMediaDrmSession failed: session not opened
durante il passaggio tra schemi DRM in una playlist (ad es. da Widevine a ClearKey).
- Testo:
- CEA-608: assicurati che i comandi di trasferimento del servizio nel campo 2 vengano gestiti correttamente (#10666).
- DASH:
- Analizza
EventStream.presentationTimeOffset
dai manifest (#10460).
- Analizza
- Interfaccia utente:
- Utilizzare le sostituzioni correnti del player come preset in
TrackSelectionDialogBuilder
(#10429).
- Utilizzare le sostituzioni correnti del player come preset in
- Sessione:
- Assicurati che i comandi vengano sempre eseguiti nell'ordine corretto, anche se alcuni richiedono una risoluzione asincrona (#85).
- Aggiungi
DefaultMediaNotificationProvider.Builder
per creareDefaultMediaNotificationProvider
istanze. Il generatore può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzato dal fornitore. Aggiungi anche il metodoDefaultMediaNotificationProvider.setSmallIcon(int)
per impostare la piccola icona delle notifiche. (#104). - Assicurati che i comandi inviati prima di
MediaController.release()
non vengano eliminati (#99). SimpleBitmapLoader
può caricare bitmap da URIfile://
(#108).- Correzione dell'affermazione che impedisce a
MediaController
di cercare oltre un annuncio in un periodo (#122). - Al termine della riproduzione,
MediaSessionService
viene interrotto in primo piano e viene visualizzata una notifica per riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112). - Non avviare un servizio in primo piano con un'intent in attesa per la messa in pausa (#167).
- Nascondere manualmente il "badge" associato alla notifica creata da
DefaultNotificationProvider
sulle API 26 e 27 (il badge viene nascosto automaticamente sulle API 28 e versioni successive) (#131). - Correzione del bug per cui una seconda connessione del binder da una MediaSession precedente a un MediaController Media3 causa IllegalStateExceptions (#49).
- RTSP:
- IMA:
- Aggiungi un timeout per il caricamento delle informazioni sull'annuncio per gestire i casi in cui l'SDK IMA si blocca durante il caricamento di un annuncio (#10510).
- Impedire di saltare gli annunci mid-roll quando si cerca la fine dei contenuti (#10685).
- Calcolare correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
- Estensione FFmpeg:
- Aggiungi i nuovi flag obbligatori per collegare le librerie FFmpeg con NDK 23.1.7779620 e versioni successive (#9933).
- Estensione AV1:
- Aggiorna la versione di CMake per evitare incompatibilità con le release più recenti di Android Studio (#9933).
- Estensione di trasmissione:
- Implementa
getDeviceInfo()
per poter identificareCastPlayer
quando controlli la riproduzione con unMediaController
(#142).
- Implementa
- Trasformatore:
- Aggiungi il timer del watchdog del muxer per rilevare quando la generazione di un sample di output è troppo lenta.
- Rimuovi i simboli non più supportati:
- Rimuovi
Transformer.Builder.setOutputMimeType(String)
. Questa funzionalità è stata rimossa. Il tipo MIME sarà sempre MP4 quando viene utilizzato il muxer predefinito.
- Rimuovi
Versione 1.0.0-beta02
21 luglio 2022
androidx.media3:media3-*:1.0.0-beta02
viene rilasciato.
La versione 1.0.0-beta02 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.1.
- Libreria di base:
- Assicurati che la sostituzione di
ShuffleOrder
conExoPlayer.setShuffleOrder
determini 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 nella cache (#10361).
- Consenti il logger personalizzato per tutta l'uscita dei log di ExoPlayer (#9752).
- Correzione dell'implementazione di
setDataSourceFactory
inDefaultMediaSourceFactory
, che non era funzionale in alcuni casi (#116).
- Assicurati che la sostituzione di
- Estrattori:
- DASH:
- Analizza l'URL della licenza ClearKey dai manifest (#10246).
- Interfaccia utente:
- Assicurati che TalkBack annunci l'opzione di velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
- RTSP:
- Aggiunta della gestione dei pacchetti frammentati VP8 (#110).
- Estensione Leanback:
- Ascolta le modifiche di
playWhenReady
inLeanbackAdapter
(10420).
- Ascolta le modifiche di
- Trasmissione:
Versione 1.0.0-beta01
16 giugno 2022
androidx.media3:media3-*:1.0.0-beta01
viene rilasciato.
La versione 1.0.0-beta01 contiene questi commit.
Corrisponde alla release di ExoPlayer 2.18.0.
- Libreria di base:
- Attiva il supporto della diagnostica della piattaforma Android tramite
MediaMetricsManager
. ExoPlayer inoltra alla piattaforma gli eventi di riproduzione e i dati sulle prestazioni, il che contribuisce a fornire informazioni sul debug e sulle prestazioni del sistema sul dispositivo. Questi dati possono essere raccolti anche da Google se la condivisione dei dati diagnostici e sull'utilizzo è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer conExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - È stato corretto un bug per cui i canali vengono reimpostati troppo spesso quando si utilizza
MergingMediaSource
, ad esempio quando si caricano sottotitoli laterali e si modificano i sottotitoli selezionati durante la riproduzione (#10248). - Interrompere il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Per queste riproduzioni si presume una rete 4G.
- Non consentire il passaggio di
null
aMediaSource.Factory.setDrmSessionManagerProvider
eMediaSource.Factory.setLoadErrorHandlingPolicy
. Se necessario, è possibile passare esplicitamente istanze diDefaultDrmSessionManagerProvider
eDefaultLoadErrorHandlingPolicy
. - Aggiungi
MediaItem.RequestMetadata
per rappresentare i metadati necessari per riprodurre i contenuti multimediali quando il valoreLocalConfiguration
esatto non è noto. Rimuovi ancheMediaMetadata.mediaUrl
, poiché ora è incluso inRequestMetadata
. - Aggiungi
Player.Command.COMMAND_SET_MEDIA_ITEM
per consentire ai giocatori di impostare un singolo elemento.
- Attiva il supporto della diagnostica della piattaforma Android tramite
- Selezione tracce:
- Applica l'appiattimento al corso
TrackSelectionOverrides
inTrackSelectionParameters
e promuoviTrackSelectionOverride
a corso di primo livello. - Rinomina
TracksInfo
inTracks
eTracksInfo.TrackGroupInfo
inTracks.Group
. AnchePlayer.getCurrentTracksInfo
ePlayer.Listener.onTracksInfoChanged
sono stati rinominati inPlayer.getCurrentTracks
ePlayer.Listener.onTracksChanged
. Ciò include il ritiro del nome del metodoPlayer.Listener.onTracksChanged
, ma con tipi di parametro diversi. - Modifica
DefaultTrackSelector.buildUponParameters
eDefaultTrackSelector.Parameters.buildUpon
in modo che restituiscanoDefaultTrackSelector.Parameters.Builder
anziché il valore deprecatedDefaultTrackSelector.ParametersBuilder
. - Aggiungi
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
che è attiva per impostazione predefinita. Se questa opzione è attivata,DefaultTrackSelector
preferirà le tracce audio il cui numero di canali non supera le funzionalità di output del dispositivo. Sui dispositivi portatili,DefaultTrackSelector
preferirà i formati audio stereo/mono rispetto a quelli multicanale, a meno che il formato multicanale non possa essere spazializzato (Android 12L e versioni successive) o non sia un formato audio surround Dolby. Inoltre, sui dispositivi che supportano la spazializzazione audio,DefaultTrackSelector
monitora le modifiche apportate alle proprietà di Spatializer e attiva una nuova selezione di tracce in base a queste. I dispositivi con unatelevision
modalità UI sono esclusi da questi vincoli e verrà preferito il formato con il numero di canali più elevato. Per attivare questa funzionalità, l'istanzaDefaultTrackSelector
deve essere creata con unContext
.
- Applica l'appiattimento al corso
- Video:
- Rinomina
DummySurface
inPlaceholderSurface
. - Aggiungi il supporto di AV1 al
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- Rinomina
- Audio:
- Utilizza il decodificatore audio LG AC3 che pubblicizza un tipo MIME non standard.
- Modifica il tipo di ritorno di
AudioAttributes.getAudioAttributesV21()
daandroid.media.AudioAttributes
a una nuova classe wrapperAudioAttributesV21
per evitare una verifica ART lenta su API < 21. - Esegui una query sulla piattaforma (API 29 e versioni successive) o assumi il numero di canali di codifica audio per il passthrough audio quando il numero di canali audio del formato non è impostato, il che si verifica con la preparazione senza chunk HLS (10204).
- Configura
AudioTrack
con la maschera di canaleAudioFormat.CHANNEL_OUT_7POINT1POINT4
se il decodificatore emette audio PCM a 12 canali (#10322.
- DRM
- Assicurati che la sessione DRM venga sempre aggiornata correttamente quando esegui la ricerca immediatamente dopo una modifica del formato (10274).
- Testo:
- Modifica
Player.getCurrentCues()
in modo che restituiscaCueGroup
anzichéList<Cue>
. - SSA: supporta l'impostazione dello stile
OutlineColour
quandoBorderStyle == 3
(ovveroOutlineColour
imposta lo sfondo dell'indicatore) (#8435). - CEA-708: analizza i dati in più blocchi di servizi e ignora i blocchi non associati al numero di servizio attualmente selezionato.
- Rimuovi
RawCcExtractor
, che veniva utilizzato solo per gestire un formato di sottotitoli interno a Google.
- Modifica
- Estrattori:
- Interfaccia utente:
- Correggere l'invio di eventi ai
OnClickListener
impostati suPlayerView
nel caso in cuiuseController=false
(#9605). Inoltre, viene corretto l'invio di eventi aOnLongClickListener
per tutte le configurazioni delle visualizzazioni. - È stato corretto il trattamento errato di una sequenza di eventi tocco che esce dai limiti di
PlayerView
prima diACTION_UP
come un clic (#9861). - Risolto un
PlayerView
problema di accessibilità per cui il tocco potrebbe attivare/disattivare la riproduzione anziché nascondere i controlli (#8627). - Riscrivi
TrackSelectionView
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 del modulo UI dal modulo ExoPlayer. Si tratta di una modifica sostanziale. - Non mostrare tracce con testo forzato nel selettore di tracce
PlayerView
e mantieni selezionata una traccia con testo forzato adatta se è selezionata "Nessuna" (#9432).
- Correggere l'invio di eventi ai
- DASH:
- Analizza il numero di canali dagli elementi DTS
AudioChannelConfiguration
. In questo modo viene riattivato il passthrough audio per gli stream DTS (#10159). - Non consentire il passaggio di
null
aDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Se necessario, è possibile passare istanze diDefaultCompositeSequenceableLoaderFactory
esplicitamente.
- Analizza il numero di canali dagli elementi DTS
- HLS:
- Riprendi la preparazione in 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
. Se necessario, è possibile passare esplicitamente istanze diDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
o un riferimento aDefaultHlsPlaylistTracker.FACTORY
.
- Riproduzione fluida:
- Non consentire il passaggio di
null
aSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Se necessario, le istanze diDefaultCompositeSequenceableLoaderFactory
possono essere passate esplicitamente.
- Non consentire il passaggio di
- RTSP:
- Aggiungi il lettore RTP per H263 (#63).
- Aggiungi il lettore RTP per MPEG4 (#35).
- Aggiunta del lettore RTP per HEVC (#36).
- Aggiungi il lettore RTP per AMR. Al momento sono supportati solo stream AMR monocanale non interlizzati. Il payload RTP AMR composto non è supportato. (#46)
- Aggiungi il lettore RTP per VP8 (#47).
- Aggiungi il lettore RTP per WAV (#56).
- Correggi l'intestazione di autorizzazione di base RTSP. (#9544).
- Interrompi il controllo dei campi SDP obbligatori perché ExoPlayer non li richiede (#10049).
- Viene lanciata un'eccezione controllata durante l'analisi del timing RTSP (#10165).
- Aggiunta del lettore RTP per VP9 (#47).
- Aggiungi il lettore RTP per OPUS (#53).
- Origini dati:
- Rinomina
DummyDataSource
inPlaceholderDataSource
. - Sfrutta una 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
. Puoi ottenere la stessa funzionalità utilizzandoMediaController.setMediaItem
eMediaSession.Callback.onAddMediaItems
. - Devia le chiamate
MediaController
legacy per riprodurre contenuti multimediali suMediaSession.Callback.onAddMediaItems
anziché suonSetMediaUri
. - Aggiungi
MediaNotification.Provider
eDefaultMediaNotificationProvider
per personalizzare la notifica. - Aggiungi
BitmapLoader
eSimpleBitmapLoader
per scaricare le immagini artwork. - Aggiungi
MediaSession.setCustomLayout()
per garantire la compatibilità con le versioni precedenti della sessione. - Aggiungi
MediaSession.setSessionExtras()
per garantire la parità di funzionalità con la sessione precedente. - Rinomina
MediaSession.MediaSessionCallback
inMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
eMediaSession.Builder.setSessionCallback
insetCallback
. - Risolto l'errore NPE in
MediaControllerImplLegacy
(#59). - Aggiorna le informazioni sulla posizione della sessione al cambio della cronologia(#51).
- Correzione dell'errore NPE in
MediaControllerImplBase
dopo il rilascio del controller (#74).
- Sostituisci
- Riproduzione dell'annuncio / IMA:
- Riduci la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms, in modo da allinearti ai consigli del Media Rating Council (MRC).
- Estensione FFmpeg:
- Aggiorna la versione di CMake a
3.21.0+
per evitare un bug di CMake che causa il fallimento della sincronizzazione di Gradle di Android Studio (#9933).
- Aggiorna la versione di CMake a
- Rimuovi i simboli non più supportati:
- 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 inutilizzati. - Rimuovi le costanti
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
eDEFAULT_TRACK_SELECTOR_PARAMETERS
. Se possibile, utilizzagetDefaultTrackSelectorParameters(Context)
e, in caso contrario,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Rimuovi il 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 rilasciato.
La versione 1.0.0-alpha03 contiene questi commit.
Corrisponde alla release ExoPlayer 2.17.1.
- Audio:
- Correzione dell'errore di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
- Estrattori:
- FMP4: è stato corretto un problema per cui i metadati dei sample emsg potevano essere visualizzati nell'ordine sbagliato per gli stream contenenti sia atomi emsg v0 che v1 (#9996).
- Testo:
- Correggere l'interazione di
SingleSampleMediaSource.Factory.setTrackId
eMediaItem.SubtitleConfiguration.Builder.setId
per dare la priorità alSubtitleConfiguration
campo e passare al valoreFactory
se non è impostato (#10016).
- Correggere l'interazione di
- Riproduzione dell'annuncio:
- Correggi le sottocorrenti audio tra i periodi di annunci negli stream SSAI HLS dal vivo.
Versione 1.0.0-alpha02
2 marzo 2022
androidx.media3:media3-*:1.0.0-alpha02
viene rilasciato.
La versione 1.0.0-alpha02 contiene questi commit.
Corrisponde alla release ExoPlayer 2.17.0.
- Libreria di base:
- Aggiungi il metodo protetto
DefaultRenderersFactory.getCodecAdapterFactory()
in modo che le sottoclassi diDefaultRenderersFactory
che sostituisconobuildVideoRenderers()
obuildAudioRenderers()
possano accedere alla fabbrica di adattatori di codec e trasmetterla alle istanze diMediaCodecRenderer
che creano. - Propaga i campi dell'intestazione ICY
name
egenre
aMediaMetadata.station
eMediaMetadata.genre
rispettivamente in modo che raggiungano l'app tramitePlayer.Listener.onMediaMetadataChanged()
(#9677). - Rimuovi le chiavi null da
DefaultHttpDataSource#getResponseHeaders
. - Sospendi e riprova quando la creazione di un'istanza
MediaCodec
non va a buon fine. In questo modo viene risolto un problema che si verifica su alcuni dispositivi quando si passa da un codec sicuro a un altro su una superficie (#8696). - Aggiungi
MediaCodecAdapter.getMetrics()
per consentire agli utenti di ottenere i dati delle metriche daMediaCodec
. (#9766). - Correzione della risoluzione delle dipendenze Maven (#8353).
- Disattivare la regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di una richiesta dell'utente che imposti la velocità (#9329).
- Rinomina
DecoderCounters#inputBufferCount
inqueuedInputBufferCount
. - Rendi privato
SimpleExoPlayer.renderers
. È possibile accedere ai renderer tramiteExoPlayer.getRenderer
. - Sono stati aggiornati alcuni valori costanti
AnalyticsListener.EventFlags
in modo che corrispondano ai valori inPlayer.EventFlags
. - Dividi
AnalyticsCollector
in un'interfaccia e un'implementazione predefinita per consentirne lo stripping da parte di R8 se un'app non ne ha bisogno.
- Aggiungi il metodo protetto
- Selezione tracce:
- Supporto dei flag dei ruoli video preferiti nella selezione della traccia (#9402).
- Aggiornamento della logica di selezione delle tracce video per tenere conto dei tipi MIME e dei flag di ruolo preferiti quando si selezionano più tracce video per l'adattamento (#9519).
- Aggiornamento della logica di selezione delle tracce audio e video per scegliere solo i formati per le selezioni dinamiche che hanno lo stesso livello di supporto per decodificatori e hardware (#9565).
- Aggiornamento della logica di selezione della traccia video per dare la preferenza ai codec più efficienti se diversi codec sono supportati dai decodificatori principali con accelerazione hardware (#4835).
- Dare la preferenza alle preferenze relative ai contenuti audio (ad esempio la traccia audio "predefinita" o una traccia corrispondente alla lingua locale del sistema) rispetto ai vincoli di selezione delle tracce tecniche (ad esempio il tipo MIME preferito o il numero massimo di canali).
- Risolto il problema di selezione dei canali per cui l'override di un gruppo di canali non disattivava gli altri gruppi di canali dello stesso tipo (#9675).
- È stato risolto un problema di selezione della traccia per cui una combinazione di sostituzioni di tracce vuote e non vuote non viene applicata correttamente (#9649).
- Vieta
TrackGroup
duplicati in unTrackGroupArray
. ITrackGroup
possono essere sempre distinti impostando unid
nel costruttoreTrackGroup
. In questo modo viene corretto un arresto anomalo durante la ripresa della riproduzione dopo aver messo l'app in background con un'override del canale attivo (#9718). - Modifica la logica in
AdaptiveTrackSelection
per consentire un aumento della qualità con una larghezza di banda di rete sufficiente anche se la riproduzione è molto vicina al bordo in tempo reale (#9784).
- Video:
- Correggi la logica di riserva del decodificatore per Dolby Vision in modo da utilizzare un decodificatore H264/H265 compatibile, se necessario.
- Audio:
- Correggere la logica di riserva del decodificatore per Dolby Atmos (E-AC3-JOC) per utilizzare un decodificatore E-AC3 compatibile, se necessario.
- Modifica le API
AudioCapabilities
in modo che richiedano il passaggio esplicito diAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
anzichénull
. - Consenti la personalizzazione del calcolo delle dimensioni del buffer
AudioTrack
inserendo unAudioTrackBufferSizeProvider
inDefaultAudioSink
. (#8891). - Riprova a creare il
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 creata dalla configurazione (#9673). - Aggiunta del supporto di base per i sottotitoli WebVTT nei contenitori Matroska (#9886).
- Impedisci a
Cea708Decoder
di leggere più delle dimensioni dichiarate di un blocco di servizio.
- Aggiungi un campo
- DRM:
- Vuoi rimuovere
playbackLooper
daDrmSessionManager.(pre)acquireSession
? Quando unDrmSessionManager
viene utilizzato da un'app in unMediaSource
personalizzato,playbackLooper
deve essere passato aDrmSessionManager.setPlayer
.
- Vuoi rimuovere
- Riproduzione dell'annuncio / IMA:
- Aggiunta del supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
- Aggiungi un metodo a
AdPlaybackState
per consentire il ripristino di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615). - Applicare una velocità di riproduzione di 1,0 durante la riproduzione dell'annuncio (#9018).
- Risolto il problema per cui un gruppo di annunci che non è stato caricato causava un immediato ripristino della riproduzione (#9929).
- Interfaccia utente:
- DASH:
- Aggiungi le proprietà essenziali e supplementari analizzate a
Representation
(#9579). - Supporta il ruolo di monitoraggio
forced-subtitle
(#9727). - Interrompi l'interpretazione del ruolo del canale
main
comeC.SELECTION_FLAG_DEFAULT
. - Correggere la logica di esclusione dell'URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
- Supporto degli URL
MPD.Location
relativi (#9939).
- Aggiungi le proprietà essenziali e supplementari analizzate a
- HLS:
- Compila correttamente
Format.label
per gli stream HLS solo audio (#9608). - Utilizza la preparazione senza chunk per impostazione predefinita per migliorare il tempo di avvio. Se le tue rielaborazioni contengono tracce con sottotitoli codificati combinati che non sono dichiarate nella playlist principale, devi aggiungerle alla playlist principale per renderle disponibili per la riproduzione o disattivare la preparazione senza chunk con
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Supporto della ricerca accurata dei fotogrammi chiave in HLS (#2882).
- Compila correttamente
- RTSP:
- Fornisci un'API client per eseguire l'override del valore
SocketFactory
utilizzato per qualsiasi connessione al server (#9606). - Preferisci il metodo di autenticazione DIGEST rispetto a BASIC se sono entrambi presenti (#9800).
- Gestire la situazione in cui la temporizzazione della traccia RTSP non è disponibile (#9775).
- Ignora i valori dell'intestazione RTP-Info non validi (#9619).
- Fornisci un'API client per eseguire l'override del valore
- Trasformatore:
- Aumenta la versione API minima 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. - Consentire la registrazione di più ascoltatori.
- È stato corretto il blocco del trasformatore quando l'output del codec viene letto parzialmente.
- Correggere un potenziale errore NPE in
Transformer.getProgress
quando viene rilasciato il muxer. - Aggiungi un'app di dimostrazione per applicare le trasformazioni.
- Estensione MediaSession:
- Per impostazione predefinita,
MediaSessionConnector
ora cancella la playlist all'arresto. Le app che vogliono conservare la playlist possono chiamaresetClearMediaItemsOnStop(false)
sul connettore.
- Per impostazione predefinita,
- Estensione di trasmissione:
- Estensione FFmpeg:
- Fai in modo che
build_ffmpeg.sh
dipenda dagli strumenti di bin di LLVM anziché da quelli 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 unIllegalArgumentException
quando vengono creati iPendingIntent
(#9528).
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
- Rimuovi i simboli non più supportati:
- Rimuovi
Player.EventListener
. Utilizza invecePlayer.Listener
. - Rimuovi
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
eMediaSourceFactory#setDrmUserAgent
. Utilizza inveceMediaSourceFactory#setDrmSessionManagerProvider
. - Rimuovi
MediaSourceFactory#setStreamKeys
. Utilizza inveceMediaItem.Builder#setStreamKeys
. - Rimuovi
MediaSourceFactory#createMediaSource(Uri)
. Utilizza inveceMediaSourceFactory#createMediaSource(MediaItem)
. - Rimuovi
setTag
daDashMediaSource
,HlsMediaSource
eSsMediaSource
. Utilizza inveceMediaItem.Builder#setTag
. - Rimuovi
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. UtilizzaMediaItem.Builder#setLiveConfiguration
eMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
per sostituire il manifest oDashMediaSource#setFallbackTargetLiveOffsetMs
per fornire un valore alternativo. - Rimuovi
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Non è più possibile disattivare l'applicazione forzata dei thread. - Rimuovi
ActionFile
eActionFileUpgradeUtil
. Utilizza ExoPlayer 2.16.1 o versioni precedenti per utilizzareActionFileUpgradeUtil
per unire i file di azioni precedenti inDefaultDownloadIndex
. - Rimuovi
ProgressiveMediaSource#setExtractorsFactory
. Utilizza invece il costruttoreProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. - Rimuovi
ProgressiveMediaSource.Factory#setTag
e, eProgressiveMediaSource.Factory#setCustomCacheKey
. UtilizzaMediaItem.Builder#setTag
eMediaItem.Builder#setCustomCacheKey
. - Rimuovi i costruttori
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
eDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Utilizza invece i costruttoriDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
eDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Rimuovi tutti i costruttori
CronetDataSource
pubblici. Utilizza inveceCronetDataSource.Factory
.
- Rimuovi
- Modifica il seguente
IntDefs
in@Target(TYPE_USE)
. Ciò potrebbe interrompere la compilazione degli utilizzi in Kotlin, ma il problema può essere risolto spostando l'annotazione per annotare il tipo (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(nel pacchettocom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(nelcom.google.android.exoplayer2.extractor.flac
pacchetto)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Versione 1.0.0-alpha01
27 ottobre 2021
androidx.media3:media3-*:1.0.0-alpha01
viene rilasciato.
La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
Media3 è la nuova casa delle librerie di supporto multimediale, tra cui ExoPlayer. La prima versione alpha contiene implementazioni iniziali e funzionali di librerie per implementare casi d'uso multimediali, tra cui:
- ExoPlayer, un media player a livello di applicazione per Android facile da personalizzare ed estendere.
- Funzionalità della sessione multimediale per esporre e controllare le riproduzioni. Questo nuovo
modulo della sessione utilizza la stessa interfaccia
Player
di ExoPlayer. - Componenti dell'interfaccia utente per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
- Moduli che racchiudono funzionalità in altre librerie per l'utilizzo con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.
Per maggiori informazioni, consulta il progetto GitHub Media3.
In precedenza, ExoPlayer era ospitato in un
progetto GitHub di ExoPlayer separato. In Media3 il nome del pacchetto è androidx.media3.exoplayer
. Abbiamo intenzione di continuare a mantenere e rilasciare il progetto GitHub di ExoPlayer per un po' di tempo per dare alle app il tempo di eseguire la migrazione a Media3. Media3 ha sostituzioni per tutti i moduli ExoPlayer, ad eccezione delle estensioni media2 e mediasession precedenti, che vengono sostituite dal nuovo modulo media3-session
. In questo modo, viene fornita un'integrazione diretta tra i player e le sessioni multimediali senza dover utilizzare una classe di adattatore/connettore.