Elemento multimediale 3
Aggiornamento più recente | Release stabile | Candidato per la release | Versione beta | Release alpha |
---|---|---|---|---|
12 aprile 2024 | 1.3.1 | - | - | 1.4.0-alpha01 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza su Media3, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
Trendy
dependencies { def media3_version = "1.3.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.3.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare lo strumento Issue Tracker di Media3 per trovare risposte a domande, problemi noti e richieste di funzionalità, nonché per segnalare nuovi problemi.
Versione 1.4.0
Versione 1.4.0-alpha01
17 aprile 2024
androidx.media3:media3-*:1.4.0-alpha01
viene rilasciato.
La versione 1.4.0-alpha01 contiene questi commit.
- ExoPlayer:
- Aggiungi
BasePreloadManager
che coordina il precaricamento per più origini in base alle priorità definite dai rispettivirankingData
. La personalizzazione è possibile estendendo questa classe. AggiungiDefaultPreloadManager
, che utilizzaPreloadMediaSource
per precaricare in memoria campioni multimediali delle origini e utilizza un numero interorankingData
che indica l'indice di un elemento nella UI. - Aggiungi
PlayerId
alla maggior parte dei metodi diLoadControl
per abilitare le implementazioniLoadControl
per supportare più player. - Rimuovi
Buffer.isDecodeOnly()
eC.BUFFER_FLAG_DECODE_ONLY
. Non è necessario impostare questo flag poiché i renderer e i decoder decideranno di saltare i buffer in base al timestamp. Le implementazioniRenderer
personalizzate devono controllare se il tempo di buffer è almenoBaseRenderer.getLastResetPositionUs()
per decidere se mostrare un campione. Le implementazioniSimpleDecoder
personalizzate possono controllareisAtLeastOutputStartTimeUs
se necessario o contrassegnare altri buffer conDecoderOutputBuffer.shouldBeSkipped
per ignorarli. - Consenti a
TargetPreloadStatusControl.getTargetPreloadStatus(T)
di restituire un valore null per indicare di non precaricare unMediaSource
con ilrankingData
specificato. - Aggiungi
remove(MediaSource)
aBasePreloadManager
.
- Aggiungi
- Transformer:
- Aggiungi
audioConversionProcess
evideoConversionProcess
aExportResult
per indicare come è stata creata la rispettiva traccia nel file di output. - Riduci i controlli di livello H.264 per l'ottimizzazione del ritaglio.
- Aggiunta del supporto per il passaggio tra i contenuti multimediali di input SDR e HDR in sequenza.
- Aggiungi il supporto per gli effetti audio a livello di composizione.
- Aggiungi il supporto per la transcodifica di immagini Ultra HDR in video HDR.
- Risolvi il problema in cui
DefaultAudioMixer
non genera la quantità corretta di byte dopo il ripristino e il riutilizzo.
- Aggiungi
- Video:
- Risolvi il problema per cui
Listener.onRenderedFirstFrame()
arriva troppo presto quando cambiando le piattaforme a metà della riproduzione.
- Risolvi il problema per cui
- Fonte dei dati:
- Implementa il supporto per
android.resource://package/id
URI di risorse non elaborate in cuipackage
è diverso dal pacchetto dell'applicazione corrente. Questa funzionalità non è stata dimostrata in precedenza, ma è un modo più efficiente per accedere alle risorse in un altro pacchetto rispetto al nome. - Controlla con attenzione che
url
non sia null nei costruttoriDataSpec
. Questo parametro era già stato annotato in modo che non sia null.
- Implementa il supporto per
- Effetto:
- Supporta più variazioni di velocità all'interno dello stesso
EditedMediaItem
oComposition
inSpeedChangeEffect
. - Supporto per output HLG e PQ dall'input bitmap ultra HDR.
- Aggiungi il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, che migliora l'output della superficie HLG in ExoPlayer.setVideoEffect e SurfaceView di debug di Transformer.
- Aggiorna l'implementazione della matrice di overlay per renderla coerente con la documentazione invertendo i valori x e y applicati in
setOverlayFrameAnchor()
. Se utilizziOverlaySettings.Builder.setOverlayFrameAnchor()
, inverti i suoi valori x e y moltiplicandoli per-1
.
- Supporta più variazioni di velocità all'interno dello stesso
- Sessione:
- Modifica il valore predefinito di
CommandButton.enabled
intrue
e assicurati che il valore rimanga false per i controller anche se il comando associato è disponibile. - Aggiungi le costanti delle icone per
CommandButton
da utilizzare al posto delle risorse di icone personalizzate. - Aggiungi
MediaSessionService.isPlaybackOngoing()
per consentire alle app di interrogare se il servizio deve essere interrotto inonTaskRemoved()
(#1219). - Aggiungi
MediaSessionService.pauseAllPlayersAndStopSelf()
che consenta comodamente di mettere in pausa la riproduzione di tutte le sessioni e chiamastopSelf
per terminare il ciclo di vita diMediaSessionService
. - Esegui l'override di
MediaSessionService.onTaskRemoved(Intent)
per fornire un'implementazione predefinita sicura che mantenga il servizio in esecuzione in primo piano se la riproduzione è in corso o se interrompe il servizio in caso contrario.
- Modifica il valore predefinito di
- Download:
- Assicurati che
DownloadHelper
non diffonda istanzeRenderer
non ancora rilasciate, il che potrebbe causare l'arresto anomalo di un'app conIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- Assicurati che
- Utilità di test:
- Implementa
onInit()
eonRelease()
inFakeRenderer
. - Modifica i metodi
TestPlayerRunHelper.runUntil/playUntil
in modo che non vadano a buon fine in caso di errori non irreversibili (ad esempio quelli segnalati aAnalyticsListener.onVideoCodecError
). Utilizza la nuova catena di metodiTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
per disabilitare questo comportamento.
- Implementa
- App demo:
- Usa
DefaultPreloadManager
nell'app demo in formato breve.
- Usa
- Rimuovi i simboli ritirati:
- Rimuovi
CronetDataSourceFactory
. Usa invece il criterioCronetDataSource.Factory
. - Rimuovi alcuni costruttori
DataSpec
. Usa invece il criterioDataSpec.Builder
.
- Rimuovi
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:
- Risolvi il problema per cui
PreloadMediaPeriod
non riesce a conservare gli stream quando vengono precaricati di nuovo. - Applica il valore
TrackSelectionResult
corrispondente corretto al periodo di riproduzione durante la selezione della traccia. - Avvia i renderer attivati in anticipo solo dopo aver avanzato il periodo di riproduzione durante il passaggio da un elemento multimediale a un altro (#1017).
- Aggiungi il tipo restituito mancante alla regola
-keepclasseswithmembers
ProGuard perDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Risolvi il problema per cui
- Transformer:
- Aggiungi una soluzione alternativa per l'eccezione generata perché
MediaMuxer
non supporta i timestamp della presentazione negativi precedenti all'API 30.
- Aggiungi una soluzione alternativa per l'eccezione generata perché
- Selezione della traccia:
DefaultTrackSelector
: scegli tracce video con una frequenza fotogrammi "ragionevole" (>=10 f/s) rispetto a quelle con una frequenza fotogrammi più bassa o non impostata. In questo modo, il player seleziona la traccia video "reale" in MP4 estratta da foto in movimento che possono contenere due tracce HEVC e una con una risoluzione maggiore ma un numero molto ridotto di fotogrammi (#1051).
- Estrattori:
- È stato risolto il problema per cui la spaziatura interna non veniva saltata durante la lettura di blocchi di dimensioni strane dai file WAV (#1117).
- MP3: compila
Format.averageBitrate
dai frame di metadati comeXING
eVBRI
. - MPEG-TS: ripristina una modifica volta a garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di esempio (#7909). Ciò è dovuto alla modifica che causa nuovi problemi con i flussi HLS solo con frame I (#1150) e i flussi HLS H.262 (#1126).
- Audio:
- Consenti il ripristino del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità di trasferimento.
- Video:
- Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che fa sì che gli stream H265 a 60 f/s siano contrassegnati come non supportati
- Aggiungi una soluzione alternativa che garantisca che il primo frame venga sempre visualizzato durante il tunneling anche se il dispositivo non lo fa automaticamente come richiesto dall'API (#1169). (#966).
- Risolvi il problema per cui la gestione delle informazioni sul colore HDR causa il comportamento errato del codec e impedisce le opzioni di cambio di formato adattivo per le tracce video SDR (#1158).
- Testo:
- WebVTT: impedisce a segnali direttamente consecutivi di creare istanze
CuesWithTiming
aggiuntive fittizie daWebvttParser.parse
(#1177).
- WebVTT: impedisce a segnali direttamente consecutivi di creare istanze
- DRM:
- Risolvi un
NoSuchMethodError
che può essere generato dal frameworkMediaDrm
invece diResourceBusyException
oNotProvisionedException
su alcuni dispositivi Android 14 (#1145).
- Risolvi un
- Effetto:
- Mappatura dei toni da PQ a SDR migliorata grazie alla conversione degli spazi colore.
- Sessione:
- Interfaccia utente:
- Utilizza di riserva per includere il nome della lingua della traccia audio se
Locale
non può identificare un nome visualizzato (#988).
- Utilizza di riserva per includere il nome della lingua della traccia audio se
- Estensione DASH:
- Completare tutti gli elementi
Label
dal manifest inFormat.labels
(#1054).
- Completare tutti gli elementi
- Estensione RTSP:
- Salta i valori vuoti delle informazioni sulle sessioni (i-tag) nell'analisi SDP (#1087).
- Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
- Disabilita l'estensione MIDI come dipendenza locale per impostazione predefinita, perché richiede la configurazione di un altro Repository Maven. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riabilitarlo.
Versione 1.3.0
6 marzo 2024
androidx.media3:media3-*:1.3.0
viene rilasciato.
La versione 1.3.0 contiene questi commit.
- Libreria comune:
- Implementa il supporto per gli URI delle risorse non elaborati
android.resource://package/[type/]name
, dovepackage
è diverso dal pacchetto dell'applicazione corrente. Questa procedura è sempre stata documentata, ma finora non è stata implementata correttamente. - Normalizza i tipi MIME impostati dal codice dell'app o letti dai contenuti multimediali in modo che utilizzino solo lettere minuscole.
- Definisci gli annunci con un
MediaItem
completo anziché un singoloUri
inAdPlaybackState
. - Aumenta
minSdk
a 19 (Android Lollipop). È allineato a tutte le altre librerie AndroidX ed è necessario per eseguire l'upgrade alle versioni più recenti delle nostre dipendenze AndroidX. - Compila
artworkUri
eartworkData
inMediaMetadata.Builder.populate(MediaMetadata)
quando almeno uno di loro non è null (#964).
- Implementa il supporto per gli URI delle risorse non elaborati
- ExoPlayer:
- Aggiungi
PreloadMediaSource
ePreloadMediaPeriod
per consentire alle app di precaricare un'origine multimediale di contenuti in una posizione iniziale specifica prima della riproduzione.PreloadMediaSource
si occupa di preparare l'origine dei contenuti multimediali a ricevereTimeline
, preparare e memorizzare nella cache il periodo nella posizione iniziale specificata, selezionare le tracce e caricare i dati multimediali per il periodo. Le app controllano l'avanzamento del precaricamento implementandoPreloadMediaSource.PreloadControl
e impostano l'origine precaricata sul player per la riproduzione. - Aggiungi
ExoPlayer.setImageOutput
che consente alle app di impostareImageRenderer.ImageOutput
. DefaultRenderersFactory
ora fornisce unImageRenderer
al player per impostazione predefinita, conImageOutput
eImageDecoder.Factory.DEFAULT
null.- Emetti un evento
Player.Listener.onPositionDiscontinuity
quando il silenzio viene saltato (#765). - È stato aggiunto il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi
abilitare questa funzionalità utilizzando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Supporta le fonti di contenuti multimediali adattivi con
PreloadMediaSource
. - Implementa
HttpEngineDataSource
, unHttpDataSource
utilizzando l'API HttpEngine. - Impedisci la sottoclasse
CompositeSequenceableLoader
. Questo componente è stato precedentemente reso estendibile, ma non è mai stato sottoclasse all'interno della libreria. Le personalizzazioni possono essere effettuate tramite il wrapping di un'istanza mediante il pattern di decorazione e l'implementazione di unCompositeSequenceableLoaderFactory
personalizzato. - Risolvi il problema per cui la ripetizione della stessa ora causa la cancellazione dei metadati di questo elemento (#1007).
- Rinomina i metodi
experimentalSetSubtitleParserFactory
suBundledChunkExtractor.Factory
eDefaultHlsExtractorFactory
insetSubtitleParserFactory
e non consentire il trasferimento dinull
. Utilizza i nuovi metodiexperimentalParseSubtitlesDuringExtraction(boolean)
per controllare il comportamento di analisi. - Aggiungi il supporto per la personalizzazione del
SubtitleParser.Factory
utilizzato durante l'estrazione. Puoi ottenere questo risultato conMediaSource.Factory.setSubtitleParserFactory()
. - Aggiungi il prefisso di origine a tutti i campi
Format.id
generati daMergingMediaSource
. Ciò consente di identificare la fonte che ha generato unFormat
(#883). - Correggi l'espressione regolare utilizzata per convalidare i nomi delle chiavi Common Media Client Data (CMCD) personalizzate modificandola in modo che controlli solo il trattino (#1028).
- Interrompi la doppia codifica dei parametri di query CMCD (#1075).
- Aggiungi
- Transformer:
- Aggiungi il supporto per la suddivisione dei video in slow motion H.265/HEVC SEF.
- Aumenta la velocità di transmuxing, in particolare per le modifiche di tipo "rimuovi video".
- Aggiungi l'API per assicurarti che il file di output venga avviato su un frame video. Ciò può rendere l'output delle operazioni di taglio più compatibile con le implementazioni dei player che non mostrano il primo frame video fino al timestamp di presentazione (#829).
- Aggiunta del supporto per l'ottimizzazione delle operazioni di ritaglio dei file MP4 di un singolo asset.
- Aggiungi il supporto per assicurarti che un fotogramma video abbia il primo timestamp nel file di output. Corregge i file di output che iniziano con il frame nero sui player basati su iOS (#829).
- Selezione della traccia:
- Aggiungi
DefaultTrackSelector.selectImageTrack
per attivare la selezione del canale immagine. - Aggiungi
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
per determinare se selezionare una traccia immagine nel caso in cui siano disponibili sia una traccia immagine sia una traccia video. Il valore predefinito èfalse
, il che significa che la selezione di una traccia video ha la priorità.
- Aggiungi
- Estrattori:
- Aggiungi un'ulteriore analisi di AV1C all'estrattore MP4 per recuperare i valori
ColorInfo.colorSpace
,ColorInfo.colorTransfer
eColorInfo.colorRange
(#692). - MP3: usa la ricerca a 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 ciò comporta una ricerca meno precisa rispetto a quando la ignoriamo e presupponiamo che il file sia CBR. - MPEG2-TS: Aggiungere il supporto DTS, DTS-LBR e DTS:X Profile2 (#275).
- Estrai tipi audio dai descrittori TS e mappali ai flag di ruolo, consentendo agli utenti di selezionare tracce audio in modo più informato (#973).
- Aggiungi un'ulteriore analisi di AV1C all'estrattore MP4 per recuperare i valori
- Audio:
- Video:
- Modifica il costruttore
MediaCodecVideoRenderer
che richiede un argomentoVideoFrameProcessor.Factory
e sostituiscilo con un costruttore che richiede un argomentoVideoSinkProvider
. Le app che vogliono inserire unVideoFrameProcessor.Factory
personalizzato possono creare un'istanza diCompositingVideoSinkProvider
che utilizza l'VideoFrameProcessor.Factory
personalizzato e trasmettere il provider del sink video aMediaCodecVideoRenderer
.
- Modifica il costruttore
- Testo:
- Correggi l'errore di serializzazione dei segnali bitmap per risolvere l'errore
Tried to marshall a Parcel that contained Binder objects
quando utilizziDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: ignora il valore
rowLock
. La specifica CEA-708-E S-2023 afferma cherowLock
ecolumnLock
devono essere entrambi considerati vere, indipendentemente dai valori presenti nel flusso (il supportocolumnLock
non è implementato, quindi si presume che sia sempre false).
- Correggi l'errore di serializzazione dei segnali bitmap per risolvere l'errore
- Immagine:
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature a
ImageOutput
poco prima degli orari di presentazione.
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature a
- DRM:
- Per impostazione predefinita, riproduci immediatamente campioni non criptati "cancella lead" nei contenuti DRM, anche se le chiavi per gli esempi criptati successivi non sono ancora pronte. Ciò potrebbe comportare blocchi durante la riproduzione se i tasti non sono ancora pronti quando la posizione di riproduzione raggiunge i campioni criptati (ma in precedenza la riproduzione non era iniziata a questo punto). Questo comportamento può essere disattivato con
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Per impostazione predefinita, riproduci immediatamente campioni non criptati "cancella lead" nei contenuti DRM, anche se le chiavi per gli esempi criptati successivi non sono ancora pronte. Ciò potrebbe comportare blocchi durante la riproduzione se i tasti non sono ancora pronti quando la posizione di riproduzione raggiunge i campioni criptati (ma in precedenza la riproduzione non era iniziata a questo punto). Questo comportamento può essere disattivato con
- Estensione IMA:
- Risolvi il problema per cui gli annunci DASH e HLS senza l'estensione del file appropriata non possono essere riprodotti.
- Sessione:
- Disattiva il rilevamento del doppio clic per le app TV (#962).
- Risolvi il problema per cui
MediaItem.RequestMetadata
con solo extra non null non viene trasmesso tra controller multimediali e sessioni. - Aggiungi il costruttore a
MediaLibrarySession.Builder
che richiede soloContext
anzichéMediaLibraryService
.
- Estensione HLS:
- Riduci
HlsMediaPeriod
alla visibilità privata dei pacchetti. Questo tipo non deve dipendere direttamente dall'esterno del pacchetto HLS. - Risolvi cerca l'inizio di un segmento in modo più efficiente (#1031).
- Riduci
- Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
- Decodificatore MIDI: ignora i messaggi evento SysEx (#710).
- Utilità di test:
- Non mettere in pausa la riproduzione in
TestPlayerRunHelper.playUntilPosition
. Il test mantiene la riproduzione in riproduzione, ma sospende l'avanzamento finché il test non è in grado di aggiungere asserzioni e ulteriori azioni.
- Non mettere in pausa la riproduzione in
- App demo:
- Aggiungi un modulo dimostrativo breve per dimostrare l'utilizzo di
PreloadMediaSource
con il caso d'uso dei contenuti nel formato breve.
- Aggiungi un modulo dimostrativo breve per dimostrare l'utilizzo di
Versione 1.3.0-rc01
22 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-beta01
7 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-alpha01
15 gennaio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.2.0
Versione 1.2.1
9 gennaio 2024
- ExoPlayer:
- Risolvi il problema per cui le ricerche manuali al di fuori dell'intervallo
LiveConfiguration.min/maxOffset
continuano a riportare l'offset amin/maxOffset
. - Risolvi il problema a causa del quale i layout dei canali OPUS e VORBIS sono errati per 3, 5, 6, 7 e 8 canali (#8396).
- Risolvi il problema per cui le selezioni delle tracce dopo aver cercato di azzerare il video in un live streaming consentono erroneamente di avviare lo stream nella posizione predefinita (#9347).
- Risolvi il problema per cui le nuove istanze di
CmcdData.Factory
ricevevano valori negativi perbufferedDurationUs
da origini di blocchi, con il risultato diIllegalArgumentException
(#888).
- Risolvi il problema per cui le ricerche manuali al di fuori dell'intervallo
- Transformer:
- Risolvi il problema di output dell'encoder al momento della configurazione a causa dell'impostazione di una frequenza operativa elevata.
- Estrattori:
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
ROLE_FLAG_ALTERNATE
per evitare che vengano selezionate automaticamente per la riproduzione a causa della risoluzione più elevata. - È stato corretto il rilevamento errato dei fotogrammi chiave per gli stream TS H264 (#864).
- Correggi la stima della durata degli stream TS superiori a 47.721 secondi (#855).
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
- Audio:
- Correggi la gestione di EOS per
SilenceSkippingAudioProcessor
quando viene effettuata la chiamata più volte (#712).
- Correggi la gestione di EOS per
- Video:
- Aggiungi una soluzione alternativa a un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus per cui gli stream AVC a 60 FPS sono contrassegnati come non supportati (#693).
- Metadati:
- Correggi il bug per cui il campo
MediaMetadata
veniva compilato solo dai commenti Vorbis con chiavi maiuscole (#876). - Cattura
OutOfMemoryError
durante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni relative ai tag anziché non riuscire completamente a farlo.
- Correggi il bug per cui il campo
- DRM:
- Estendi la soluzione alternativa per l'URL della licenza ClearKey
https://default.url
fittizio all'API 33 e versioni successive (in precedenza la soluzione alternativa applicata solo all'API 33 esattamente) (#837). - Correggi l'errore
ERROR_DRM_SESSION_NOT_OPENED
quando passi dai contenuti criptati a quelli cancellati senza una piattaforma collegata al player. L'errore è dovuto all'uso non corretto di un decodificatore sicuro per riprodurre i contenuti chiari.
- Estendi la soluzione alternativa per l'URL della licenza ClearKey
- Sessione:
- Inserisci le chiavi e i valori personalizzati in
MediaMetadataCompat
inMediaMetadata.extras
eMediaMetadata.extras
inMediaMetadataCompat
(#756, #802). - Correggi la trasmissione di
notifyChildrenChanged
per i controller legacy (#644). - Correggi un bug per cui l'impostazione di un tempo negativo per un timer
setWhen
disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903). - Correggi
IllegalStateException
quando il controller delle notifiche dei contenuti multimediali non ha completato la connessione quando è richiesto il primo aggiornamento della notifica (#917).
- Inserisci le chiavi e i valori personalizzati in
- Interfaccia utente:
- Estensione DASH:
- Analizza "f800" come numero di canali pari a 5 per il Dolby nel manifest DASH (#688).
- Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
- Estensione Cast:
- Elimina la creazione di un elemento
Timeline
per evitare l'arresto anomalo dell'app in caso di errore di caricamento dei contenuti multimediali sul dispositivo di trasmissione (#708).
- Elimina la creazione di un elemento
Versione 1.2.0
15 novembre 2023
- Libreria comune:
- Aggiungi un parametro
@Nullable Throwable
ai metodi nell'interfacciaLog.Logger
. Il parametromessage
per questi metodi non contiene più informazioni sul valoreThrowable
passato ai metodiLog.{d,i,w,e}()
, pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se necessario (possibilmente utilizzandoLogger.appendThrowableString(String, Throwable)
). - Risolvi il problema di compatibilità di Kotlin in cui i parametri di tipo generico null e i tipi di elementi array con valori nulli non vengono rilevati come null. Alcuni esempi sono i parametri dei metodi
TrackSelectorResult
eSimpleDecoder
(#6792). - Modifica il comportamento predefinito dell'interfaccia utente e delle notifiche in
Util.shouldShowPlayButton
per mostrare un pulsante di riproduzione mentre la riproduzione viene temporaneamente soppressa (ad esempio a causa della perdita temporanea dell'audio). Il comportamento legacy può essere mantenuto utilizzandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Esegui l'upgrade di
androidx.annotation:annotation-experimental
a1.3.1
per risolvere il problema https://issuetracker.google.com/251172715. - Sposta
ExoPlayer.setAudioAttributes
nell'interfaccia diPlayer
.
- Aggiungi un parametro
- ExoPlayer:
- Risolvi i problemi di ricerca nei flussi AC4 causati dalla mancata identificazione corretta degli esempi di sola decodifica (#11000).
- Aggiungi l'eliminazione della riproduzione su dispositivi di output audio non adatti (ad esempio l'altoparlante integrato nei dispositivi Wear OS) quando questa funzionalità è attivata tramite
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Il motivo dell'eliminazione della riproduzione verrà aggiornato comePlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
se si tenta di riprodurre quando non sono disponibili output audio adatti o se tutti gli output idonei sono disconnessi durante la riproduzione. Il motivo dell'eliminazione verrà rimosso quando viene collegato un output idoneo. - Aggiungi
MediaSource.canUpdateMediaItem
eMediaSource.updateMediaItem
per accettare gli aggiornamentiMediaItem
dopo la creazione tramitePlayer.replaceMediaItem(s)
. - Consenti gli aggiornamenti di
MediaItem
per tutti i corsiMediaSource
forniti dalla libreria tramitePlayer.replaceMediaItem(s)
(#33, #9978). - Rinomina
MimeTypes.TEXT_EXOPLAYER_CUES
inMimeTypes.APPLICATION_MEDIA3_CUES
. - Aggiungi
PngExtractor
che invia e legge un intero file PNG inTrackOutput
come un singolo campione. - Migliora il metodo
SequenceableLoader.continueLoading(long)
nell'interfacciaSequenceableLoader
inSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
contiene parametri aggiuntivi, tra cuiplaybackSpeed
elastRebufferRealtimeMs
oltre a quelliplaybackPositionUs
esistenti. - Metodo
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
migliorato nell'interfacciaChunkSource
aChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Aggiungi altri campi al logging dei dati Common Media Client Data (CMCD): buffer
starvation (
bs
), scadenza (dl
), velocità di riproduzione (pr
) e avvio (su
) (#8699). - Aggiungi luma e crominanza in bit a
ColorInfo
(#491). - Aggiungi altri campi al logging di Common Media Client Data (CMCD): richiesta di oggetto successiva (
nor
) e richiesta di intervallo successivo (nrr
) (#8699). - Aggiunta di una funzionalità per trasmettere i dati Common Media Client Data (CMCD) utilizzando i parametri di query (#553).
- Correggi
ConcurrentModificationException
inExperimentalBandwidthMeter
(#612). - Aggiungi il parametro
MediaPeriodId
aCompositeMediaSource.getMediaTimeForChildMediaTime
. - Supporta
ClippingMediaSource
(e altre origini con differenze di tempo per periodo/finestra) inConcatenatingMediaSource2
(#11226). - Modifica
BaseRenderer.onStreamChanged()
per ricevere anche un argomentoMediaPeriodId
.
- Transformer:
- Analizza i dati di rotazione EXIF per gli input dell'immagine.
- Rimuovi il tipo di annotazione
TransformationRequest.HdrMode
e le relative costanti associate. Utilizza inveceComposition.HdrMode
e le relative costanti associate. - Semplifica
OverlaySettings
per risolvere i problemi di rotazione. - Parametri
frameRate
edurationUs
diSampleConsumer.queueInputBitmap
modificati inTimestampIterator
.
- Selezione della traccia:
- Aggiungi
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
per consentire o impedire esplicitamente l'adattamento senza interruzioni. Il comportamento predefinito ditrue
rimane invariato.
- Aggiungi
- Estrattori:
- MPEG-TS: assicurati che venga eseguito il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di esempio (#7909).
- Correggi l'errore ortografico durante la determinazione di
rotationDegrees
.projectionPosePitch
modificato inprojectionPoseRoll
(#461). - Rimuovi il presupposto che le istanze
Extractor
possono essere esaminate direttamente coninstanceof
. Se vuoi che in fase di runtime l'accesso ai dettagli dell'implementazione di unExtractor
, devi prima chiamareExtractor.getUnderlyingInstance
. - Aggiungi
BmpExtractor
. - Aggiungi
WebpExtractor
. - Aggiungi
HeifExtractor
. - Aggiungi il supporto della versione classica di QuickTime a
Mp4Extractor
.
- Audio:
- Aggiunta del supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analisi della codifica PCM per
lpcm
in MP4. - Aggiungi il supporto per l'estrazione dell'audio Vorbis in MP4.
- Aggiungi
AudioSink.getFormatOffloadSupport(Format)
che recupera il livello di supporto dell'offload che il sink può fornire per il formato tramite unDefaultAudioOffloadSupportProvider
. Restituisce il nuovoAudioOffloadSupport
che contieneisFormatSupported
,isGaplessSupported
eisSpeedChangeSupported
. - Aggiungi
AudioSink.setOffloadMode()
tramite il quale è configurata la configurazione di offload sul sink audio. Il valore predefinito èAudioSink.OFFLOAD_MODE_DISABLED
. - L'offload può essere abilitato tramite
setAudioOffloadPreference
inTrackSelectionParameters
. Se la preferenza impostata è attivata, il dispositivo supporta l'offload per il formato e la selezione della traccia è una singola traccia audio, quindi verrà attivato l'offload audio. - Se
audioOffloadModePreference
è impostato suAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,DefaultTrackSelector
selezionerà solo una traccia audio e solo se il relativo formato è supportato nell'offload. Se nessuna traccia audio è supportata nel download, non verrà selezionata alcuna traccia. - Disabilitazione del supporto gapless per l'offload quando si è pre-livello API 33 a causa di un problema relativo alla posizione di riproduzione dopo la transizione della traccia.
- Rimuovi il parametro
enableOffload
dalla firma del metodoDefaultRenderersFactory.buildAudioSink
. - Rimuovi metodo
DefaultAudioSink.Builder.setOffloadMode
. - Rimuovi valore intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Aggiunta del supporto per i metadati gapless Opus durante la riproduzione offload.
- Consenti il recupero del renderer disattivando l'offload se l'operazione non è riuscita alla prima scrittura (#627).
- Attiva per impostazione predefinita la pianificazione dell'offload per la riproduzione in modalità solo audio.
- Elimina
ExoPlayer.experimentalSetOffloadSchedulingEnabled
eAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
è stato rinominatoonSleepingForOffloadChanged
eonExperimentalOffloadedPlayback
comeonOffloadedPlayback
.- Sposta le interfacce e le definizioni
TrackSelectionParameters
correlate alla modalità di offload audio in una classeAudioOffloadPreferences
interna. - Aggiungi i callback
onAudioTrackInitialized
eonAudioTrackReleased
aAnalyticsListener
,AudioRendererEventListener
eAudioSink.Listener
. - Risolvi il problema di underflow del buffer audio DTS Express (#650).
- Correggere il bug in cui il controllo delle funzionalità di E-AC3-JOC genera un
IllegalArgumentException
(#677).
- 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 usare unVideoFrameProcessor.Factory
personalizzato. - Correggi il bug per cui non è stato possibile visualizzare il primo frame se lo stream audio inizia con timestamp negativi (#291).
- Consenti a
- Testo:
- Rimuovi
ExoplayerCuesDecoder
. Ora le tracce di testo consampleMimeType = application/x-media3-cues
vengono gestite direttamente daTextRenderer
, senza bisogno di un'istanzaSubtitleDecoder
.
- Rimuovi
- Metadati:
MetadataDecoder.decode
non verrà più chiamato per gli esempi "solo di decodifica", perché l'implementazione deve comunque restituire un valore nullo.
- Effetto:
- Aggiungi
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
aggiungendo in coda l'input bitmap in base al timestamp. - Modifica
VideoFrameProcessor.registerInputStream()
in modo che non blocchi. Le app devono implementareVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Parametri
frameRate
edurationUs
diVideoFrameProcessor.queueInputBitmap
modificati inTimestampIterator
.
- Aggiungi
- Estensione IMA:
- È stato corretto il bug per cui un live streaming DASH di più periodi che non è il primo elemento di una playlist può generare un'eccezione (#571).
- Rilascia StreamManager prima di chiamare
AdsLoader.destroy()
- Aggiorna la versione dell'SDK IMA alla versione 3.31.0.
- Sessione:
- Imposta il comportamento del servizio in primo piano delle notifiche su
FOREGROUND_SERVICE_IMMEDIATE
inDefaultMediaNotificationProvider
(#167). - Utilizzala solo
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
versione sopra API 31 per evitare problemi con l'API deprecata sui dispositivi Samsung (#167). - Utilizza il controller di notifica multimediale come proxy per impostare i comandi disponibili e il layout personalizzato utilizzato per completare la notifica e la sessione della piattaforma.
- Converti gli eventi dei pulsanti multimediali ricevuti da
MediaSessionService.onStartCommand()
all'interno di Media3 anziché indirizzarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controller del chiamante è sempre il controller delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli API supportati. - Correggi il bug per cui
MediaController.getCurrentPosition()
non avanza con la connessione a una versione precedente diMediaSessionCompat
. - Aggiungi
MediaLibrarySession.getSubscribedControllers(mediaId)
per praticità. - Esegui l'override di
MediaLibrarySession.Callback.onSubscribe()
per rivendicare la disponibilità dell'ID principale per cui il controller sottoscrive l'abbonamento. Se l'esito è positivo, l'abbonamento viene accettato enotifyChildrenChanged()
viene chiamato immediatamente per informare il browser (#561). - Aggiungi il modulo demo della sessione per Automotive OS e abilita la demo della sessione per Android Auto.
- Non impostare la coda della sessione del framework quando
COMMAND_GET_TIMELINE
non è disponibile per il controller delle notifiche multimediali. Se Android Auto è il controller client che legge dalla sessione framework, il pulsantequeue
nell'interfaccia utente di Android Auto non viene visualizzato (#339). - Usa
DataSourceBitmapLoader
per impostazione predefinita anzichéSimpleBitmapLoader
(#271, #327). - Aggiungi
MediaSession.Callback.onMediaButtonEvent(Intent)
che consente alle app di sostituire la gestione predefinita degli eventi del pulsante multimediale.
- Imposta il comportamento del servizio in primo piano delle notifiche su
- Interfaccia utente:
- Aggiungi un'implementazione
Player.Listener
per i dispositivi Wear OS che gestiscono l'eliminazione della riproduzione dovuta all'Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
avviando una finestra di dialogo di sistema per consentire all'utente di collegare un'uscita audio adeguata (ad esempio cuffie Bluetooth). Il listener riprenderà automaticamente la riproduzione se un dispositivo adatto viene collegato entro un timeout configurabile (il valore predefinito è 5 minuti).
- Aggiungi un'implementazione
- Download:
- Dichiara il tipo di servizio in primo piano "sincronizzazione dei dati" per
DownloadService
per la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungeredataSync
comeforegroundServiceType
nel file manifest e aggiungere l'autorizzazioneFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- Dichiara il tipo di servizio in primo piano "sincronizzazione dei dati" per
- Estensione HLS:
- Aggiorna la playlist dal vivo HLS con un intervallo calcolato dall'ora di inizio dell'ultimo caricamento anziché dall'ora di completamento dell'ultimo caricamento (#663).
- Estensione DASH:
- Consenti più identificatori dello stesso DASH nell'URL del modello di segmento.
- È stato aggiunto il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. In questo modo, è possibile unire meglio i sottotitoli, ad esempio per risolvere lo sfarfallio durante il passaggio da un segmento di sottotitoli all'altro. Puoi
abilitare questa funzionalità utilizzando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Estensione RTSP:
- Correggi una condizione di gara che potrebbe portare a
IndexOutOfBoundsException
quando rischi di utilizzare TCP o a una riproduzione in pausa in alcune situazioni. - Controlla lo stato nella configurazione RTSP quando restituisci lo stato di caricamento di
RtspMediaPeriod
(#577). - Ignora i metodi di richiesta Rtsp personalizzati nell'intestazione pubblica della risposta Opzioni (#613).
- Utilizza il valore di timeout della risposta alla configurazione RTSP nell'intervallo di tempo dell'invio delle richieste per le opzioni RTSP keep-alive (#662).
- Correggi una condizione di gara che potrebbe portare a
- Estensioni decoder (FFmpeg, VP9, AV1, MIDI ecc.):
- Rilascia il modulo di decodifica MIDI, che supporta la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
- Aggiungi
DecoderOutputBuffer.shouldBeSkipped
per contrassegnare direttamente i buffer di output che non devono essere presentati. Questo ha la priorità rispetto aC.BUFFER_FLAG_DECODE_ONLY
che verrà deprecato. - Aggiungi
Decoder.setOutputStartTimeUs
eSimpleDecoder.isAtLeastOutputStartTimeUs
per consentire ai decoder di ignorare i campioni solo di decodifica prima dell'ora di inizio. Questa opzione deve essere preferita aBuffer.isDecodeOnly
, che verrà deprecata. - Correggi il bug relativo alla pubblicazione dell'artefatto del decodificatore MIDI nel Repository Maven. L'elemento viene rinominato in
media3-exoplayer-midi
(#734).
- Estensione Leanback:
- Risolvi il bug per cui la disattivazione di una piattaforma può causare un
ArithmeticException
nel codice Leanback (#617).
- Risolvi il bug per cui la disattivazione di una piattaforma può causare un
- Utilità di test:
- Rendi
TestExoPlayerBuilder
eFakeClock
compatibili con i test dell'UI di Espresso e dell'UI di Compose. Questo risolve un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con le visualizzazioni Espresso o Compose.
- Rendi
- Rimuovi i simboli ritirati:
- Rimuovi
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
eTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. UsaComposition.Builder.setHdrMode(int)
e trasmettiComposition
aTransformer.start(Composition, String)
. - Rimuovi il metodo
DownloadNotificationHelper.buildProgressNotification
deprecato, utilizza un metodo non deprecato che preveda invece 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 accidentalmente da tutti i moduli (#499).
- Rimuovi la dipendenza
- ExoPlayer:
- Risolvi il problema in
PlaybackStatsListener
per cui vengono createPlaybackStats
false dopo la cancellazione della playlist. - Aggiungi altri campi al logging di Common Media Client Data (CMCD): formato di flusso (sf), tipo di flusso (st), versione (v), birate superiore (tb), durata dell'oggetto (d), velocità effettiva misurata (mtp) e tipo di oggetto (ot) (#8699).
- Risolvi il problema in
- Audio:
- Correggi un bug per cui
Player.getState()
non è mai passato aSTATE_ENDED
durante la riproduzione di file molto brevi (#538).
- Correggi un bug per cui
- Offload audio:
- Anteponi le pagine di intestazione dell'ID Ogg e dei commenti al flusso di bit per la riproduzione Opus non caricata in base a RFC 7845.
- Video:
- H.265/HEVC: risoluzione dei problemi relativi all'analisi delle informazioni sull'immagine di riferimento a breve e a lungo termine dell'SPS.
- Testo:
- CEA-608: modifica la logica di troncamento del cue point per considerare solo il testo visibile. In precedenza, il rientro e l'offset della scheda erano inclusi quando si limitava la lunghezza del cue a 32 caratteri (tecnicamente corretti in base alla specifica) (#11019).
- Estensione IMA:
- Aggiorna la versione dell'SDK IMA alla versione 3.30.3.
- Sessione:
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene richiamato
MediaController.Listener.onCustomLayoutChanged
. Le app che vogliono inviare layout personalizzati diversi a un controller Media3 diverso possono farlo inMediaSession.Callback.onConnect
utilizzando unAcceptedResultBuilder
per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione. - Correggi i casi in cui
MediaLibraryServiceLegacyStub
inviava un errore a unResult
che non lo supportava e questo ha generato un erroreUnsupportedOperationException
(#78). - Correggi il modo in cui
PlayerWrapper
crea unVolumeProviderCompat
determinandovolumeControlType
tramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUME
eCOMMAND_SET_DEVICE_VOLUME
) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
eCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene richiamato
Versione 1.1.0
5 luglio 2023
- Libreria comune:
- Aggiungi il motivo dell'eliminazione per il percorso audio non adatto e riproducilo quando è pronto. Il motivo della modifica per Soppresso troppo lungo. (n. 15).
- Aggiungi comandi al player:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Aggiungi metodi di sovraccarico al Player che consentano agli utenti di specificare flag di volume:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Aggiungi
Builder
perDeviceInfo
e ritira il costruttore esistente. - Aggiungi
DeviceInfo.routingControllerId
per specificare l'ID controller di routing per le riproduzioni remote. - Aggiungi
Player.replaceMediaItem(s)
come scorciatoia per aggiungere e rimuovere elementi dalla stessa posizione (#8046).
- ExoPlayer:
- Consenti a ExoPlayer di avere il controllo dei metodi del volume del dispositivo solo se
attivati esplicitamente. Utilizza
ExoPlayer.Builder.setDeviceVolumeControlEnabled
per avere accesso a:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
esetDeviceVolume(int, int)
increaseDeviceVolume(int)
eincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
edecreaseDeviceVolume(int, int)
- Aggiungi
FilteringMediaSource
per filtrare i tipi di monitoraggio disponibili da unMediaSource
. - Aggiungi il supporto per l'inclusione di Common Media Client Data (CMCD) nelle richieste in uscita dei formati di streaming adattivi DASH, HLS e smoothStreaming. I seguenti campi,
br
,bl
,cid
,rtp
esid
, sono stati incorporati (#8699). Struttura e metodi delle API:- Il logging CMCD è disabilitato per impostazione predefinita. Utilizza
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
per abilitarlo. - Tutte le chiavi sono abilitate per impostazione predefinita. Esegui l'override di
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
per filtrare le chiavi registrate. - Esegui l'override di
CmcdConfiguration.RequestConfig.getCustomData()
per abilitare il logging delle chiavi personalizzate.
- Il logging CMCD è disabilitato per impostazione predefinita. Utilizza
- Aggiungi un'altra azione al manifest della demo principale per semplificare l'avvio dell'app demo con un file
*.exolist.json
personalizzato (#439). - Aggiungi
ExoPlayer.setVideoEffects()
per l'utilizzo diEffect
durante la riproduzione del video. - Aggiorna
SampleQueue
per archiviaresourceId
comelong
anziché comeint
. Questo modifica le firme dei metodi pubbliciSampleQueue.sourceId
eSampleQueue.peekSourceId
. - Aggiungi parametri ai metodi
LoadControl
shouldStartPlayback
eonTracksSelected
che consentono di associare questi metodi alMediaPeriod
pertinente. - Modifica la firma di
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
aggiungendo un parametro della sequenza temporale che contenga i periodi con gli UID utilizzati come chiavi nella mappa. Questa operazione è necessaria per evitare problemi di contemporaneità con i live streaming di più periodi. - Ritira
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. È possibile chiamare la variante dei metodi senzamediaTimeOffsetUs
. Tieni presente che anche per le varianti deprecate, l'offset non viene più aggiunto astartTimeUs
eendTimeUs
degli oggettiMediaLoadData
inviati dal supervisore. - Rinomina
ExoTrackSelection.blacklist
inexcludeTrack
eisBlacklisted
inisTrackExcluded
. - Correggi il comportamento incoerente tra
ExoPlayer.setMediaItem(s)
eaddMediaItem(s)
quando viene richiamato in una playlist vuota.
- Consenti a ExoPlayer di avere il controllo dei metodi del volume del dispositivo solo se
attivati esplicitamente. Utilizza
- Transformer:
- Rimuovi
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. Utilizza i criteriExoPlayerAssetLoader.Factory(MediaSource.Factory)
eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - Rimuovi
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - Risolvi un bug per cui la trasformazione potrebbe bloccarsi (portando a un timeout del muxer) se la fine dello stream video era segnalata nel momento in cui un frame di input era in attesa di elaborazione.
- Esegui query sui codec tramite
MediaCodecList
anziché utilizzare le utilitàfindDecoder/EncoderForFormat
per espandere il supporto. - Rimuovi la configurazione B-frame in
DefaultEncoderFactory
perché non funziona su alcuni dispositivi.
- Rimuovi
- Selezione della traccia:
- Aggiungi
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
che è disabilitato per impostazione predefinita. Se attivato,DefaultTrackSelector
attiverà la selezione di una nuova traccia quando le funzionalità del renderer cambiano.
- Aggiungi
- Estrattori:
- Audio:
- Correggi il bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e
AudioProcessors
sono attivi, ad esempio per il taglio senza interruzioni (#10847). - Incapsula i frame Opus in pacchetti Ogg durante riproduzioni dirette (offload).
- Estrai la posizione corrente durante il sonno con la programmazione dell'offload.
- Aggiungi
Renderer.release()
eAudioSink.release()
per rilasciare le risorse alla fine del ciclo di vita del player. - Ascolta i cambiamenti delle funzionalità audio in
DefaultAudioSink
. Aggiungi un parametro obbligatoriocontext
nel costruttore diDefaultAudioSink
, con cuiDefaultAudioSink
si registra come listener diAudioCapabilitiesReceiver
e aggiorna la sua proprietàaudioCapabilities
quando viene informata di una modifica delle funzionalità. - Propaga le modifiche alle funzionalità audio tramite un nuovo evento
onAudioCapabilitiesChanged
nell'interfaccia diAudioSink.Listener
e una nuova interfacciaRendererCapabilities.Listener
che attiva eventionRendererCapabilitiesChanged
. - Aggiungi
ChannelMixingAudioProcessor
per applicare lo ridimensionamento/il missaggio ai canali audio. - Aggiungi un nuovo valore int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
aDecoderDiscardReasons
per ignorare il decodificatore audio quando è possibile la modalità di bypass dopo la modifica delle funzionalità audio. - Aggiunta del supporto della riproduzione diretta per DTS Express e DTS:X (#335).
- Correggi il bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e
- Video:
- Fai in modo che
MediaCodecVideoRenderer
riporti unVideoSize
con larghezza e altezza pari a 0 quando il renderer è disattivato.Player.Listener.onVideoSizeChanged
viene richiamato di conseguenza quandoPlayer.getVideoSize()
cambia. Con questa modifica, le dimensioni del video di ExoPlayer conMediaCodecVideoRenderer
hanno larghezza e altezza pari a 0 quandoPlayer.getCurrentTracks
non supporta i video o non sono ancora state determinate le dimensioni della traccia video supportata.
- Fai in modo che
- DRM:
- Riduci la visibilità di diversi metodi solo per uso interno su
DefaultDrmSession
che non sono previste chiamate dall'esterno del pacchetto DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Riduci la visibilità di diversi metodi solo per uso interno su
- Muxer:
- Aggiungi una nuova libreria muxer che può essere utilizzata per creare un file container MP4.
- Estensione IMA:
- Attiva live streaming DASH multi-periodo per DAI. Tieni presente che l'implementazione attuale non supporta ancora la ricerca nei live streaming (#10912).
- Correggi un bug relativo all'inserimento di un nuovo gruppo di annunci nei live streaming perché la posizione dei contenuti calcolati in sequenze temporali consecutive varia leggermente.
- Sessione:
- Aggiungi il metodo helper
MediaSession.getControllerForCurrentRequest
per ottenere informazioni sul controller che sta chiamando un metodoPlayer
. - Aggiungi
androidx.media3.session.MediaButtonReceiver
per consentire alle app di implementare la ripresa della riproduzione con eventi del pulsante multimediale inviati, ad esempio, da cuffie Bluetooth (#167). - Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItems
per consentire il trasferimento diMediaItems
richiesto aPlayer
se haLocalConfiguration
(ad es. URI) (#282). - Aggiungi i pulsanti di comando "Vai alla precedente" e "Vai alla successiva" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita su Android 12 e versioni precedenti (#410).
- Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItems
per consentire il trasferimento diMediaItems
richiesto aPlayer
se haLocalConfiguration
(ad es. URI) (#282). - Aggiungi i pulsanti di comando "Vai alla precedente" e "Vai alla successiva" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita su Android 12 e versioni precedenti (#410).
- Aggiungi il metodo helper
- Interfaccia utente:
- Aggiungi i metodi di utilizzo
shouldShowPlayButton
ehandlePlayPauseButtonAction
per scrivere elementi UI personalizzati con un pulsante di riproduzione/pausa.
- Aggiungi i metodi di utilizzo
- Estensione RTSP:
- Estensione DASH:
- Rimuovi lo scarto con fuso orario multimediale da
MediaLoadData.startTimeMs
eMediaLoadData.endTimeMs
per gli stream DASH multiperiodo. - È stato corretto un bug per cui la preparazione di un'origine di contenuti multimediali Dash live di più periodi ha generato un valore
IndexOutOfBoundsException
(#10838).
- Rimuovi lo scarto con fuso orario multimediale da
- Estensione HLS:
- Aggiungi
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
per impostare un timeout per il thread di caricamento in attesa dell'inizializzazione diTimestampAdjuster
. Se l'inizializzazione non viene completata prima del timeout, viene generato un valorePlaybackException
per evitare lo stallo della riproduzione. Il timeout è impostato su zero per impostazione predefinita (#323).
- Aggiungi
- Utilità di test:
- Verifica l'insensibilità alle maiuscole dello schema dell'URI in
DataSourceContractTest
.
- Verifica l'insensibilità alle maiuscole dello schema dell'URI in
- Rimuovi i simboli ritirati:
- Rimuovi i costruttori
DefaultAudioSink
, utilizza inveceDefaultAudioSink.Builder
. - Rimuovi
HlsMasterPlaylist
, utilizza inveceHlsMultivariantPlaylist
. - Rimuovi
Player.stop(boolean)
. Usa invecePlayer.stop()
ePlayer.clearMediaItems()
(sereset
ètrue
). - Rimuovi due costruttori
SimpleCache
deprecati, utilizza un costruttore non obsoleto che richiede unDatabaseProvider
per migliorare le prestazioni. - Rimuovi il costruttore
DefaultBandwidthMeter
, utilizzaDefaultBandwidthMeter.Builder
invece. - Rimuovi i costruttori
DefaultDrmSessionManager
, utilizzaDefaultDrmSessionManager.Builder
invece. - Rimuovi due costruttori
HttpDataSource.InvalidResponseCodeException
deprecati, utilizza un costruttore non deprecato che accetti campi aggiuntivi(cause
,responseBody
) per migliorare il logging degli errori. - Rimuovi
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
eDownloadHelper.forSmoothStreaming
, usa inveceDownloadHelper.forMediaItem
. - Rimuovi il costruttore
DownloadService
deprecato, utilizza un costruttore non deprecato che includa l'opzione per fornire un parametrochannelDescriptionResourceId
. - Rimuovi le costanti Stringhe deprecate per i set di caratteri (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
eUTF16LE_NAME
), utilizza invece i set di caratteri Kotlin dal pacchettokotlin.text
,java.nio.charset.StandardCharsets
ocom.google.common.base.Charsets
. - Rimuovi il costruttore
WorkManagerScheduler
deprecato, utilizza un costruttore non obsoleto che includa l'opzione per fornire invece un parametroContext
. - Rimuovi i metodi deprecati
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
ecreateSampleFormat
, che sono stati utilizzati per creare un'istanza della classeFormat
. Utilizza inveceFormat.Builder
per creare istanze diFormat
. - Rimuovi i metodi deprecati
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
ecopyWithVideoSize
, quindi utilizza i metodiFormat.buildUpon()
e setter. - Rimuovi
ExoPlayer.retry()
deprecato, utilizzaprepare()
al suo posto. - Rimuovi il costruttore
DefaultTrackSelector
zero-arg deprecato, utilizzaDefaultTrackSelector(Context)
invece. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato, utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
invece. - Rimuovi il costruttore
DownloadManager
deprecato, utilizza invece il costruttore che richiede unExecutor
. - Rimuovi i costruttori
Cue
deprecati, utilizza inveceCue.Builder
. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato, utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
invece. - Rimuovi quattro metodi
AnalyticsListener
ritirati:onDecoderEnabled
, usaonAudioEnabled
e/oonVideoEnabled
.onDecoderInitialized
, usaonAudioDecoderInitialized
e/oonVideoDecoderInitialized
.onDecoderInputFormatChanged
, usaonAudioInputFormatChanged
e/oonVideoInputFormatChanged
.onDecoderDisabled
, usaonAudioDisabled
e/oonVideoDisabled
.
- Rimuovi i valori
Player.Listener.onSeekProcessed
eAnalyticsListener.onSeekProcessed
deprecati, utilizza inveceonPositionDiscontinuity
conDISCONTINUITY_REASON_SEEK
. - Rimuovi
ExoPlayer.setHandleWakeLock(boolean)
, utilizza invecesetWakeMode(int)
. - Rimuovi l'elemento deprecato
DefaultLoadControl.Builder.createDefaultLoadControl()
, utilizza invecebuild()
. - Rimuovi
MediaItem.PlaybackProperties
deprecato, utilizzaMediaItem.LocalConfiguration
al suo posto. 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 cheBuffer
contiene il flagC.BUFFER_FLAG_LAST_SAMPLE
. - Risolvi il problema per cui l'ultimo frame potrebbe non essere visualizzato se l'ultimo campione con frame viene rimosso dalla coda senza leggere l'esempio di "fine dello stream". (#11079).
- Aggiungi
- Estrattori:
- Correggi l'analisi dei file H.265 SPS nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP e MP4 (#303).
- Testo:
- SSA: aggiungi il supporto per i file UTF-16 se iniziano con un contrassegno d'ordine di byte (#319).
- Sessione:
- Risolvi il problema per cui
MediaController
non aggiorna i suoi comandi disponibili quando è collegato a una versione precedente diMediaSessionCompat
che aggiorna le sue azioni. - Risolvi il bug che impediva a
MediaLibraryService
di restituire un valore null per una chiamata dalla UI di sistema aCallback.onGetLibraryRoot
conparams.isRecent == true
nell'API 30 (#355). - Correggi la perdita di memoria di
MediaSessionService
oMediaLibraryService
(#346). - Correggi il bug per cui un aggiornamento combinato di
Timeline
e della posizione in unMediaSession
potrebbe causare la generazione di unIllegalStateException
da parte diMediaController
.
- Risolvi 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:
- Reimposta l'override del live streaming target quando cerchi la posizione predefinita (#11051).
- Correggi il bug per cui stream di esempio vuoti potrebbero causare il blocco della riproduzione.
- Sessione:
- Risolvi il bug per cui più elementi di coda identici pubblicati da un elemento precedente
MediaSessionCompat
generano un'eccezione inMediaController
(#290). - Aggiungi l'inoltro mancante di
MediaSession.broadcastCustomCommand
alla versione precedente diMediaControllerCompat.Callback.onSessionEvent
(#293). - Risolvi il bug per cui la chiamata a
MediaSession.setPlayer
non aggiorna i comandi disponibili. - Risolvi il problema per cui le istanze
TrackSelectionOverride
inviate da unMediaController
vengono ignorate se fanno riferimento a un gruppo conFormat.metadata
(#296). - Risolvi il problema in cui
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
deve essere disponibile per accedere ai metadati tramite la versione precedente diMediaSessionCompat
. - Risolvi il problema per cui le istanze
MediaSession
in un thread in background causano arresti anomali quando vengono utilizzate inMediaSessionService
(#318). - Risolvi il problema in cui un ricevitore del pulsante multimediale è stato dichiarato dalla raccolta senza che l'app lo avesse previsto (#314).
- Risolvi il bug per cui più elementi di coda identici pubblicati da un elemento precedente
- DASH:
- Correggi la gestione delle sequenze temporali dei segmenti vuote (#11014).
- RTSP:
- Riprova con TCP se la configurazione di RTSP con UDP non va a buon fine con l'errore RTSP 461 Non supportato (#11069).
Versione 1.0.0
22 marzo 2023
androidx.media3:media3-*:1.0.0
viene rilasciato.
La versione 1.0.0 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.5.
Non sono state apportate modifiche dalla versione 1.0.0-rc02.
Versione 1.0.0-rc02
2 marzo 2023
androidx.media3:media3-*:1.0.0-rc02
viene rilasciato.
La versione 1.0.0-rc02 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.4.
- Libreria di base:
- Download:
- Aumenta l'ora di inizio massima di due segmenti da unire configurabili in
SegmentDownloader
e nelle sottoclassi (#248).
- Aumenta l'ora di inizio massima di due segmenti da unire configurabili in
- Audio:
- Video:
- Mappa il formato HEVC HDR10 a
HEVCProfileMain10HDR10
anziché aHEVCProfileMain10
. - Aggiungi una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e Lenovo M10 FHD Plus che fa sì che gli stream AVC a 60 FPS siano contrassegnati come non supportati (#10898).
- Risolvi i problemi di prestazioni di rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza fotogrammi molto superiore a quella di aggiornamento dello schermo.
- Mappa il formato HEVC HDR10 a
- Trasmetti:
- Correggi il problema
STATE_IDLE
temporaneo durante la transizione da un elemento multimediale a un altro (#245).
- Correggi il problema
- RTSP:
- Individuare l'illegitArgumentException generata durante l'analisi di RTSP non valido Descrivi i messaggi di risposta (#10971).
- Sessione:
- È stato corretto un bug per cui il pulsante di riproduzione/pausa delle notifiche non si aggiornava con lo stato del player (#192).
- Estensione IMA:
- Correggi un bug che impediva l'avvio degli stream DAI senza annunci perché il primo evento
LOADED
(e nel caso senza annunci è l'unico) non è stato ricevuto.
- Correggi un bug che impediva l'avvio degli stream DAI senza annunci perché il primo 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 decoder del renderer per confermare le preferenze di
MediaCodecSelector
, anche se un decoder potrebbe non essere in grado di riprodurre i contenuti multimediali in modo efficiente. Ad esempio, con il selettore predefinito, il decoder hardware con solo supporto funzionale sarà preferito rispetto al decodificatore software che supporta completamente il formato (#10604). - Aggiungi
ExoPlayer.Builder.setPlaybackLooper
che imposta un thread di riproduzione preesistente per una nuova istanza ExoPlayer. - Consenti la cancellazione degli helper del gestore dei download (#10776).
- Aggiungi parametro a
BasePlayer.seekTo
per indicare anche il comando utilizzato per la ricerca. - Utilizza il tema durante il caricamento dei disegni su API 21 e versioni successive (#220).
- Aggiungi
ConcatenatingMediaSource2
che consenta di combinare più elementi multimediali in un'unica finestra (#247).
- Modifica la logica di ordinamento del decoder del renderer per confermare le preferenze di
- Estrattori:
- Genera
ParserException
anzichéNullPointerException
se nella tabella di esempio (stbl) manca una descrizione del campione obbligatoria (stsd) durante l'analisi degli atomi di trak. - Ignora correttamente i campioni quando cerchi direttamente un frame di sincronizzazione in fMP4 (#10941).
- Genera
- 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 segnali. - SubRip: aggiungi il supporto per i file UTF-16 se iniziano con un contrassegno d'ordine di byte.
- Correggi
- Metadati:
- Analizza più valori separati da null dei frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituzione diMediaMetadata.folderType
. Il tipo di cartella sarà deprecato nella prossima release.
- DASH:
- Aggiungi un'analisi completa per i set di adattamento delle immagini, inclusi il numero di riquadri (#3752).
- Interfaccia utente:
- Correggi il problema ritirato
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
per assicurarti che le modifiche di visibilità vengano trasmesse al listener registrato (#229). - Correggi l'ordine dei controlli del player centrali in
PlayerView
quando utilizzi un layout da destra a sinistra (RTL) (#227).
- Correggi il problema ritirato
- Sessione:
- Aggiungi l'astratto
SimpleBasePlayer
per implementare l'interfacciaPlayer
per i player personalizzati. - Aggiungi un metodo helper per convertire il token della sessione della piattaforma in Media3
SessionToken
(#171). - Utilizza
onMediaMetadataChanged
per attivare gli aggiornamenti della sessione multimediale della piattaforma (#219). - Aggiungi la sessione multimediale come argomento di
getMediaButtons()
delDefaultMediaNotificationProvider
e usa elenchi immutabili per chiarezza (#216). - Aggiungi il listener di callback
onSetMediaItems
per fornire mezzi per modificare/impostare l'elencoMediaItem
, iniziando l'indice e la posizione per sessione prima di impostare il player (#156). - Evita il rilevamento del doppio tocco per eventi del pulsante multimediale non Bluetooth (#233).
- Rendi
QueueTimeline
più solido in caso di uno stato della sessione legacy non valido (#241).
- Aggiungi l'astratto
- Metadati:
- Analizza più valori separati da null dei frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituzione diMediaMetadata.folderType
. Il tipo di cartella sarà deprecato nella prossima release.
- Estensione Cast:
- Aggiorna la versione dell'SDK Cast alla 21.2.0.
- Estensione IMA:
- Rimuovi il listener del player di
ImaServerSideAdInsertionMediaSource
dal thread dell'applicazione per evitare problemi di raggruppamento. - Aggiungi una proprietà
focusSkipButtonWhenAvailable
aImaServerSideAdInsertionMediaSource.AdsLoader.Builder
per richiedere di impostare il pulsante Salta sui dispositivi TV e impostalo su true per impostazione predefinita. - Aggiungi un metodo
focusSkipButton()
aImaServerSideAdInsertionMediaSource.AdsLoader
per richiedere in modo programmatico di impostare lo stato attivo sul pulsante Salta. - Aggiorna la versione dell'SDK IMA alla versione 3.29.0.
- Rimuovi il listener del player di
- App demo:
- Richiedi l'autorizzazione alle notifiche per le notifiche di download in fase di runtime (#10884).
Versione 1.0.0-beta03
22 novembre 2022
androidx.media3:media3-*:1.0.0-beta03
viene rilasciato.
La versione 1.0.0-beta03 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.2.
- Libreria di base:
- Aggiungi
ExoPlayer.isTunnelingEnabled
per verificare se il tunneling è abilitato per i canali attualmente selezionati (#2518). - Aggiungi
WrappingMediaSource
per semplificare il wrapping di un singoloMediaSource
(#7279). - Elimina il buffer precedente prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
- Chiudi il blocco Tracciamento "doSomeWork" quando è abilitato l'offload.
- Risolvi il problema di monitoraggio delle sessioni con le ricerche rapide in
PlaybackStatsListener
(#180). - Invia il callback
onMediaItemTransition
mancante quando chiamiseekToNext
oseekToPrevious
in una playlist con un singolo elemento (#10667). - Aggiungi
Player.getSurfaceSize
che restituisca le dimensioni della superficie su cui viene visualizzato il video. - Correggi il bug per cui la rimozione dei listener durante la release del player può causare un errore
IllegalStateException
(#10758).
- Aggiungi
- Creazione:
- Applica almeno
compileSdkVersion
per evitare errori di compilazione (#10684). - Evita il blocco della pubblicazione se incluso in un'altra build Gradle.
- Applica almeno
- Selezione della traccia:
- Preferisci altri brani a Dolby Vision se il display non lo supporta. (#8944).
- Download:
- Correggi il potenziale loop infinito in
ProgressiveDownloader
causato da download e riproduzione simultanei con lo stessoPriorityTaskManager
(#10570). - Fai in modo che la notifica di download venga visualizzata immediatamente (#183).
- Limita le rimozioni di download paralleli a 1 per evitare la creazione eccessiva di thread (#10458).
- Correggi il potenziale loop infinito in
- Video:
- Prova un decoder alternativo per Dolby Vision se il display non lo supporta. (#9794).
- Audio:
- Usa
SingleThreadExecutor
per rilasciareAudioTrack
istanze ed evitare errori di OutOfMemory quando rilasci più player contemporaneamente (#10057). - Aggiunge
AudioOffloadListener.onExperimentalOffloadedPlayback
per lo stato di offload AudioTrack. (#134). - Imposta
AudioTrackBufferSizeProvider
come interfaccia pubblica. - Aggiungi
ExoPlayer.setPreferredAudioDevice
per impostare il dispositivo di output audio preferito (#135). - Rinomina
androidx.media3.exoplayer.audio.AudioProcessor
inandroidx.media3.common.audio.AudioProcessor
. - Mappa l'audio a 8 e 12 canali alle maschere dei canali 7.1 e 7.1.4 rispettivamente su tutte le versioni di Android (#10701).
- Usa
- Metadati:
- Ora è possibile configurare
MetadataRenderer
per visualizzare i metadati non appena sono disponibili. Crea un'istanza conMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
per specificare se il renderer restituirà i metadati in anticipo o in sincronizzazione con la posizione del player.
- Ora è possibile configurare
- DRM:
- Risolvi un bug nell'implementazione ClearKey di Android 13 che restituisce un URL di licenza non vuoto ma non valido.
- Correggi l'errore
setMediaDrmSession failed: session not opened
durante il passaggio da uno schema DRM all'altro in una playlist (ad es. da Widevine a ClearKey).
- Testo:
- CEA-608: assicurati che i comandi dell'interruttore di servizio nel campo 2 siano gestiti correttamente (#10666).
- DASH:
- Analizza
EventStream.presentationTimeOffset
dei file manifest (#10460).
- Analizza
- Interfaccia utente:
- Usa gli override attuali del player come preimpostati in
TrackSelectionDialogBuilder
(#10429).
- Usa gli override attuali del player come preimpostati 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 builder può configurare l'ID notifica, l'ID del canale di notifica e il nome del canale di notifica utilizzato dal provider. Inoltre, aggiungi il 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).- Correggi l'asserzione che impedisce a
MediaController
di eseguire la ricerca su un annuncio in un periodo (#122). - Al termine della riproduzione, l'elemento
MediaSessionService
viene interrotto dalla primo piano e viene visualizzata una notifica che richiede di riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112). - Non avviare un servizio in primo piano con un intent in attesa per mettere in pausa (#167).
- Nascondi manualmente il "badge" associato alla notifica creata da
DefaultNotificationProvider
su API 26 e API 27 (il badge viene nascosto automaticamente nell'API 28+) (#131). - Risolvi il bug per cui una connessione di un secondo binder da una MediaSession legacy a un MediaController causa sobrioStateExceptions (#49).
- RTSP:
- IMA:
- Aggiungi un timeout per il caricamento delle informazioni sugli annunci in modo da gestire i casi in cui l'SDK IMA si blocca durante il caricamento di un annuncio (#10510).
- Impedisci di saltare gli annunci mid-roll quando cerchi la fine dei contenuti (#10685).
- Calcola correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
- Estensione FFmpeg:
- Aggiungi i nuovi flag obbligatori per collegare le librerie FFmpeg con NDK 23.1.7779620 e versioni successive (#9933).
- Estensione AV1:
- Aggiorna la versione di CMake per evitare incompatibilità con le ultime release di Android Studio (#9933).
- Estensione Cast:
- Implementa
getDeviceInfo()
per poter identificareCastPlayer
durante il controllo della riproduzione con unMediaController
(#142).
- Implementa
- Transformer:
- Aggiungi un timer watchdog muxer per rilevare quando la generazione di un campione di output è troppo lenta.
- Rimuovi i simboli ritirati:
- Rimuovi
Transformer.Builder.setOutputMimeType(String)
. Questa funzionalità è stata rimossa. Il tipo MIME è sempre MP4 quando viene utilizzato il muxer predefinito.
- 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 modifica di
ShuffleOrder
conExoPlayer.setShuffleOrder
venga chiamata aPlayer.Listener#onTimelineChanged
conreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - Per i contenuti multimediali progressivi, includi solo le tracce selezionate nella posizione del buffer (#10361).
- Consenti logger personalizzato per tutti gli output di log di ExoPlayer (#9752).
- Correggi l'implementazione di
setDataSourceFactory
inDefaultMediaSourceFactory
, che in alcuni casi non funzionava (#116).
- Assicurati che la modifica di
- Estrattori:
- DASH:
- Analizza l'URL della licenza ClearKey dei file manifest (#10246).
- Interfaccia utente:
- Assicurati che TalkBack pronunci l'opzione per la velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
- RTSP:
- Aggiungi la gestione dei pacchetti frammentati VP8 (#110).
- Estensione Leanback:
- Ascolta le modifiche di
playWhenReady
inLeanbackAdapter
(10420).
- Ascolta le modifiche di
- Trasmetti:
Versione 1.0.0-beta01
16 giugno 2022
androidx.media3:media3-*:1.0.0-beta01
viene rilasciato.
La versione 1.0.0-beta01 contiene questi commit.
Corrisponde alla release ExoPlayer 2.18.0.
- Libreria di base:
- Attiva il supporto per la diagnostica della piattaforma Android tramite
MediaMetricsManager
. ExoPlayer inoltrerà i dati sulle prestazioni e gli eventi di riproduzione alla piattaforma, il che contribuisce a fornire informazioni sulle prestazioni del sistema e di debug sul dispositivo. Questi dati possono anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostica è abilitata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer conExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Correggi il bug per cui le tracce vengono reimpostate troppo spesso quando utilizzi
MergingMediaSource
, ad esempio quando esegui il sideload dei sottotitoli e la modifica del sottotitolo selezionato durante la riproduzione (#10248). - Interrompi il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Queste riproduzioni suppongono una rete 4G.
- Non consentire di trasmettere
null
aMediaSource.Factory.setDrmSessionManagerProvider
eMediaSource.Factory.setLoadErrorHandlingPolicy
. Le istanze diDefaultDrmSessionManagerProvider
eDefaultLoadErrorHandlingPolicy
possono essere passate esplicitamente, se necessario. - Aggiungi
MediaItem.RequestMetadata
per rappresentare i metadati necessari per riprodurre i contenuti multimediali quando il valoreLocalConfiguration
esatto non è noto. Rimuovi ancheMediaMetadata.mediaUrl
perché ora è incluso inRequestMetadata
. - Aggiungi
Player.Command.COMMAND_SET_MEDIA_ITEM
per consentire ai giocatori di impostare un singolo elemento.
- Attiva il supporto per la diagnostica della piattaforma Android tramite
- Selezione della traccia:
- Suddivide la classe
TrackSelectionOverrides
inTrackSelectionParameters
e promuoviTrackSelectionOverride
a una classe di primo livello. - Rinomina
TracksInfo
inTracks
eTracksInfo.TrackGroupInfo
inTracks.Group
. AnchePlayer.getCurrentTracksInfo
ePlayer.Listener.onTracksInfoChanged
sono stati rinominatiPlayer.getCurrentTracks
ePlayer.Listener.onTracksChanged
. Ciò include l'annullamento del ritiro del nome del metodoPlayer.Listener.onTracksChanged
, ma con tipi di parametri diversi. - Modifica
DefaultTrackSelector.buildUponParameters
eDefaultTrackSelector.Parameters.buildUpon
per restituireDefaultTrackSelector.Parameters.Builder
anziché la versione deprecataDefaultTrackSelector.ParametersBuilder
. - Aggiungi
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
che è abilitato per impostazione predefinita. Se attivata,DefaultTrackSelector
darà priorità alle tracce audio il cui numero di canali non supera le capacità di output del dispositivo. Sui dispositivi portatili,DefaultTrackSelector
predilige i formati audio stereo/mono rispetto ai formati audio multicanale, a meno che il formato multicanale non sia spazializzato (Android 12L e versioni successive) o sia un formato audio surround Dolby. Inoltre, sui dispositivi che supportano la spazializzazione audio,DefaultTrackSelector
monitorerà le modifiche nelle proprietà spazializzatore e attiverà una nuova selezione di tracce. I dispositivi con unatelevision
modalità UI sono esclusi da questi vincoli e verrà preferito il formato con il numero di canali più elevato. Per abilitare questa funzionalità, l'istanzaDefaultTrackSelector
deve essere creata con unContext
.
- Suddivide la classe
- Video:
- Rinomina
DummySurface
inPlaceholderSurface
. - Aggiungi il supporto AV1 a
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- Rinomina
- Audio:
- Utilizza il decoder audio LG AC3 che pubblicizza un tipo MIME non standard.
- Modifica il tipo restituito di
AudioAttributes.getAudioAttributesV21()
daandroid.media.AudioAttributes
a una nuova classe wrapperAudioAttributesV21
, per evitare la verifica ART lenta su API < 21. - Esegui una query sulla piattaforma (API 29 o versioni successive) o supponiamo che il numero dei canali di codifica audio per il passthrough audio non sia impostato quando il numero dei canali audio non è impostato, il che si verifica con la preparazione senza blocchi HLS (10204).
- Configura
AudioTrack
con la maschera di canaleAudioFormat.CHANNEL_OUT_7POINT1POINT4
se il decoder genera audio PCM a 12 canali (#10322.
- DRM
- Assicurati che la sessione DRM sia sempre aggiornata correttamente quando cerchi immediatamente dopo una modifica del formato (10274).
- Testo:
- Modifica
Player.getCurrentCues()
per restituireCueGroup
anzichéList<Cue>
. - SSA: supporta l'impostazione di stile
OutlineColour
quandoBorderStyle == 3
(ovveroOutlineColour
imposta lo sfondo del consiglio) (#8435). - CEA-708: analizza i dati in più blocchi di servizio e ignora i blocchi non associati al numero di servizio attualmente selezionato.
- Rimuovi
RawCcExtractor
, che è stato utilizzato solo per gestire un formato dei sottotitoli interno a Google.
- Modifica
- Estrattori:
- Interfaccia utente:
- Correggi la pubblicazione degli eventi negli eventi
OnClickListener
impostati suPlayerView
nel caso in cuiuseController=false
(#9605). Correggi anche la pubblicazione degli eventi inOnLongClickListener
per tutte le configurazioni delle viste. - È stato risolto il problema del trattamento errato di una sequenza di eventi tocco che esce dai limiti
di
PlayerView
prima diACTION_UP
come clic (#9861). - È stato risolto il problema di accessibilità
PlayerView
per cui il tocco potrebbe attivare/disattivare la riproduzione anziché nascondere i controlli (#8627). - Riscrivi
TrackSelectionView
eTrackSelectionDialogBuilder
affinché funzionino con l'interfacciaPlayer
anzichéExoPlayer
. In questo modo le viste possono essere utilizzate con altre implementazioniPlayer
e viene rimossa la dipendenza dal modulo UI al modulo ExoPlayer. Questo è un cambiamento radicale. - Non mostrare le tracce di testo forzate nel selettore di tracce
PlayerView
e mantieni selezionata una traccia di testo forzata adatta se è selezionata l'opzione "Nessuna" (#9432).
- Correggi la pubblicazione degli eventi negli eventi
- DASH:
- Analizza il conteggio dei canali dagli elementi
AudioChannelConfiguration
DTS. Ciò riattiva il passthrough audio per gli stream DTS (#10159). - Non consentire la trasmissione di
null
aDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
possono essere passate in modo esplicito se necessario.
- Analizza il conteggio dei canali dagli elementi
- HLS:
- Utilizza la preparazione dei blocchi se l'attributo CODECS della playlist non contiene il codec audio (#10065).
- Non consentire di trasmettere
null
aHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
eHlsMediaSource.Factory.setPlaylistTrackerFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
o un riferimento aDefaultHlsPlaylistTracker.FACTORY
possono essere passati esplicitamente, se necessario.
- Streaming fluido:
- Non consentire la trasmissione di
null
aSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
possono essere passate esplicitamente se necessario.
- Non consentire la trasmissione di
- RTSP:
- Aggiungi il lettore RTP per H263 (#63).
- Aggiungi un lettore RTP per MPEG4 (#35).
- Aggiungi un lettore RTP per HEVC (#36).
- Aggiungi un lettore RTP per AMR. Attualmente sono supportati solo i flussi AMR mono-canale e senza interleaving. Il payload RTP AMR composto non è supportato. (n. 46)
- Aggiungi il lettore RTP per VP8 (#47).
- Aggiungi un lettore RTP per WAV (#56).
- Correggi l'intestazione dell'autorizzazione di base RTSP. (#9544).
- Interrompi il controllo dei campi SDP obbligatori perché non sono necessari da ExoPlayer (#10049).
- Genera un'eccezione verificata durante l'analisi delle tempistiche RTSP (#10165).
- Aggiungi un lettore RTP per VP9 (#47).
- Aggiungi un lettore RTP per OPUS (#53).
- Origini dati:
- Rinomina
DummyDataSource
inPlaceholderDataSource
. - Soluzione alternativa gestione dell'interruzione OkHttp.
- Rinomina
- Sessione:
- Sostituisci
MediaSession.MediaItemFiller
conMediaSession.Callback.onAddMediaItems
per consentire la risoluzione asincrona delle richieste. - Sono supportati i metodi
setMediaItems(s)
quandoMediaController
si connette a una sessione multimediale legacy. - Rimuovi
MediaController.setMediaUri
eMediaSession.Callback.onSetMediaUri
. Puoi ottenere la stessa funzionalità utilizzandoMediaController.setMediaItem
eMediaSession.Callback.onAddMediaItems
. - Inoltra le chiamate
MediaController
precedenti per riprodurre contenuti multimediali aMediaSession.Callback.onAddMediaItems
anziché aonSetMediaUri
. - Aggiungi
MediaNotification.Provider
eDefaultMediaNotificationProvider
per personalizzare la notifica. - Aggiungi
BitmapLoader
eSimpleBitmapLoader
per scaricare le immagini dell'artwork. - Aggiungi
MediaSession.setCustomLayout()
per garantire la compatibilità con le versioni precedenti con la sessione precedente. - Aggiungi
MediaSession.setSessionExtras()
per fornire la parità delle funzionalità con la sessione legacy. - Rinomina
MediaSession.MediaSessionCallback
inMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
eMediaSession.Builder.setSessionCallback
insetCallback
. - Correggi gli NPE in
MediaControllerImplLegacy
(#59). - Aggiornare le informazioni sulla posizione della sessione in caso di variazione della sequenza temporale(#51).
- Correggi gli NPE in
MediaControllerImplBase
dopo aver rilasciato il controller (#74).
- Sostituisci
- Riproduzione dell'annuncio / IMA:
- Riduci la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms per allinearti ai consigli del Media Rating Council (MRC).
- Estensione FFmpeg:
- Aggiorna la versione di CMake a
3.21.0+
per evitare un bug di CMake che causa la mancata riuscita della sincronizzazione graduale di AndroidStudio (#9933).
- Aggiorna la versione di CMake a
- Rimuovi i simboli ritirati:
- Rimuovi
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. Usa invece il criterioPlayer.Listener.onTracksChanged(Tracks)
. - Rimuovi
Player.getCurrentTrackGroups
ePlayer.getCurrentTrackSelections
. Usa invece il criterioPlayer.getCurrentTracks
. Puoi anche continuare a utilizzareExoPlayer.getCurrentTrackGroups
eExoPlayer.getCurrentTrackSelections
, anche se questi metodi rimangono deprecati. - Rimuovi le costanti
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
eDEFAULT_TRACK_SELECTOR_PARAMETERS
. UsagetDefaultTrackSelectorParameters(Context)
se possibile eDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
in caso contrario. - Rimuovi il costruttore
DefaultTrackSelector(ExoTrackSelection.Factory)
. Usa invece il criterioDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Rimuovi
Transformer.Builder.setContext
. Il valoreContext
deve essere invece 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:
- È stato corretto l'errore durante il controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
- Estrattori:
- FMP4: Risolvi il problema in cui i metadati di esempio dell'emsg potrebbero essere restituiti nell'ordine sbagliato per i flussi contenenti gli atomi di emsg v0 e v1 (#9996).
- Testo:
- Correggi l'interazione di
SingleSampleMediaSource.Factory.setTrackId
eMediaItem.SubtitleConfiguration.Builder.setId
per dare la priorità al campoSubtitleConfiguration
e utilizza nuovamente il valoreFactory
se non è impostato (#10016).
- Correggi l'interazione di
- Riproduzione dell'annuncio:
- Correggi gli inferimenti audio tra i periodi dell'annuncio negli stream HLS SSAI dal vivo.
Versione 1.0.0-alpha02
2 marzo 2022
androidx.media3:media3-*:1.0.0-alpha02
viene rilasciato.
La versione 1.0.0-alpha02 contiene questi commit.
Corrisponde alla release ExoPlayer 2.17.0.
- Libreria di base:
- Aggiungi il metodo protetto
DefaultRenderersFactory.getCodecAdapterFactory()
in modo che le sottoclassi diDefaultRenderersFactory
che sostituisconobuildVideoRenderers()
obuildAudioRenderers()
possano accedere al fabbrica dell'adattatore codec e passarlo aMediaCodecRenderer
istanze che creano. - Propaga i campi di intestazione ICY
name
egenre
rispettivamente aMediaMetadata.station
eMediaMetadata.genre
in modo che raggiungano l'app tramitePlayer.Listener.onMediaMetadataChanged()
(#9677). - Rimuovi chiavi null da
DefaultHttpDataSource#getResponseHeaders
. - Sospendi e riprova quando la creazione di un'istanza
MediaCodec
non va a buon fine. Questo risolve un problema che si verifica su alcuni dispositivi quando si passa da un codec sicuro a un altro codec (#8696). - Aggiungi
MediaCodecAdapter.getMetrics()
per consentire agli utenti di ottenere i dati delle metriche daMediaCodec
. (#9766). - Correggi la risoluzione delle dipendenze Maven (#8353).
- Disattiva la regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di una richiesta dell'utente che imposti la velocità (#9329).
- Rinomina
DecoderCounters#inputBufferCount
inqueuedInputBufferCount
. - Imposta
SimpleExoPlayer.renderers
come privato. È possibile accedere ai renderer tramiteExoPlayer.getRenderer
. - Sono stati aggiornati alcuni valori della costante
AnalyticsListener.EventFlags
affinché corrispondano ai valori inPlayer.EventFlags
. - Suddividi
AnalyticsCollector
in un'interfaccia e un'implementazione predefinita per consentirne la rimozione da parte di R8 se non è necessaria per un'app.
- Aggiungi il metodo protetto
- Selezione della traccia:
- Supporto dei flag di ruolo video preferiti nella selezione della traccia (#9402).
- Aggiorna la logica di selezione delle tracce video per tenere conto dei tipi MIME e dei flag di ruolo preferiti quando selezioni più tracce video per l'adattamento (#9519).
- Aggiorna la logica di selezione delle tracce audio e video per scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto per decodificatore e hardware (#9565).
- Aggiorna la logica di selezione delle tracce video per preferire codec più efficienti se più codec sono supportati da decoder primari con accelerazione hardware (#4835).
- Preferisci le preferenze relative ai contenuti audio (ad esempio, la traccia audio "predefinita" o una traccia corrispondente alla lingua delle impostazioni internazionali di sistema) rispetto ai vincoli tecnici per la selezione delle tracce (ad esempio, tipo MIME preferito o numero massimo di canali).
- Risolvi il problema di selezione delle tracce per cui l'override di un gruppo di tracce non disabilitava altri gruppi di tracce dello stesso tipo (#9675).
- Risolvi il problema di selezione delle tracce per cui una combinazione di override delle tracce non vuote e vuote non viene applicata correttamente (#9649).
- Vieta
TrackGroup
duplicati in unTrackGroupArray
. È sempre possibile rendere distinguibili iTrackGroup
impostando unid
nel costruttoreTrackGroup
. È stato corretto un arresto anomalo durante la ripresa della riproduzione dopo aver eseguito l'override dell'app in background con un override della traccia attivo (#9718). - Modifica la logica in
AdaptiveTrackSelection
per consentire un aumento della qualità in una larghezza di banda di rete sufficiente anche se la riproduzione è molto vicina al live edge (#9784).
- Video:
- Correggi la logica di fallback del decoder per Dolby Vision per utilizzare un decodificatore H264/H265 compatibile, se necessario.
- Audio:
- Correggi la logica di fallback del decoder per Dolby Atmos (E-AC3-JOC) per utilizzare un decoder E-AC3 compatibile, se necessario.
- Modifica le API
AudioCapabilities
in modo che richiedano il trasferimento esplicitoAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
anzichénull
. - Consenti la personalizzazione del calcolo delle dimensioni del buffer
AudioTrack
inserendo un valoreAudioTrackBufferSizeProvider
inDefaultAudioSink
. (#8891). - Riprova a creare
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 di sottotitoli creata dalla configurazione (#9673). - Aggiunta del supporto di base per i sottotitoli WebVTT nei container Matroska (#9886).
- Impedisci a
Cea708Decoder
di leggere dimensioni superiori a quelle dichiarate di un blocco di servizio.
- Aggiungi un campo
- DRM:
- Rimuovi
playbackLooper
daDrmSessionManager.(pre)acquireSession
. Quando unDrmSessionManager
viene utilizzato da un'app in unMediaSource
personalizzato, ilplaybackLooper
deve essere invece trasmesso aDrmSessionManager.setPlayer
.
- Rimuovi
- Riproduzione dell'annuncio / IMA:
- Aggiungi il supporto per inserimento di annunci dinamici (DAI) IMA (#8213).
- Aggiungi un metodo a
AdPlaybackState
per consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615). - Imporre una velocità di riproduzione pari a 1,0 durante la riproduzione dell'annuncio (#9018).
- Risolvi il problema per cui il caricamento di un gruppo di annunci non riuscito causava la reimpostazione immediata della riproduzione (#9929).
- Interfaccia utente:
- DASH:
- Aggiungi proprietà essenziali e supplementari analizzate a
Representation
(#9579). - Supporta il ruolo della traccia
forced-subtitle
(#9727). - Non interpretare più il ruolo della traccia
main
comeC.SELECTION_FLAG_DEFAULT
. - Correggi la logica di esclusione dell'URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
- Supporta gli URL
MPD.Location
relativi (#9939).
- Aggiungi proprietà essenziali e supplementari analizzate a
- HLS:
- Inserisci correttamente
Format.label
per gli stream HLS solo audio (#9608). - Utilizza la preparazione senza blocchi per impostazione predefinita per migliorare i tempi di avvio. Se i tuoi
rendimenti contengono tracce di sottotitolaggio codificato che non sono state dichiarate
nella playlist principale, devi aggiungerle alla playlist principale in modo che siano
disponibili per la riproduzione oppure disattivare la preparazione senza blocchi con
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Supporta la ricerca accurata dei fotogrammi chiave in HLS (#2882).
- Inserisci correttamente
- RTSP:
- Fornisci un'API client per eseguire l'override di
SocketFactory
utilizzato per qualsiasi connessione al server (#9606). - Preferisci il metodo di autenticazione DIGEST rispetto al metodo BASIC se sono presenti entrambi (#9800).
- Gestisci quando la sincronizzazione delle tracce RTSP non è disponibile (#9775).
- Ignora i valori dell'intestazione RTP-Info non validi (#9619).
- Fornisci un'API client per eseguire l'override di
- Transformer:
- Aumenta la versione minima dell'API richiesta a 21.
TransformationException
viene ora utilizzato per descrivere gli errori che si verificano durante una trasformazione.- Aggiungi
TransformationRequest
per specificare le opzioni di trasformazione. - Consenti la registrazione di più listener.
- È stato risolto il problema del blocco di Transformer quando l'output del codec è stato letto parzialmente.
- Correggi i potenziali NPE in
Transformer.getProgress
quando rilasci i lanci muxer. - Aggiungi un'app demo per applicare le trasformazioni.
- Estensione MediaSession:
- Per impostazione predefinita, ora
MediaSessionConnector
cancella la playlist in caso di interruzione. Le app che vogliono che la playlist venga conservata possono chiamaresetClearMediaItemsOnStop(false)
sul connettore.
- Per impostazione predefinita, ora
- Estensione Cast:
- Estensione FFmpeg:
- Imposta
build_ffmpeg.sh
in base agli util bin di LLVM anziché a GNU (#9933).
- Imposta
- 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
durante la creazione diPendingIntent
(#9528).
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
- Rimuovi i simboli ritirati:
- Rimuovi
Player.EventListener
. Usa invece il criterioPlayer.Listener
. - Rimuovi
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
eMediaSourceFactory#setDrmUserAgent
. Usa inveceMediaSourceFactory#setDrmSessionManagerProvider
. - Rimuovi
MediaSourceFactory#setStreamKeys
. Usa inveceMediaItem.Builder#setStreamKeys
. - Rimuovi
MediaSourceFactory#createMediaSource(Uri)
. Usa inveceMediaSourceFactory#createMediaSource(MediaItem)
. - Rimuovi
setTag
daDashMediaSource
,HlsMediaSource
eSsMediaSource
. Usa invece il criterioMediaItem.Builder#setTag
. - Rimuovi
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. UtilizzaMediaItem.Builder#setLiveConfiguration
eMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
per eseguire l'override del file manifest oDashMediaSource#setFallbackTargetLiveOffsetMs
per fornire un valore di riserva. - Rimuovi
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Non è più possibile disattivare l'applicazione forzata dei thread. - Rimuovi
ActionFile
eActionFileUpgradeUtil
. Usa ExoPlayer 2.16.1 o prima per usareActionFileUpgradeUtil
per unire i file di azioni legacy inDefaultDownloadIndex
. - Rimuovi
ProgressiveMediaSource#setExtractorsFactory
. Usa inveceProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
il costruttore. - Rimuovi
ProgressiveMediaSource.Factory#setTag
ed eProgressiveMediaSource.Factory#setCustomCacheKey
. Utilizza inveceMediaItem.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. Usa inveceCronetDataSource.Factory
.
- Rimuovi
- Modifica il seguente valore
IntDefs
solo per@Target(TYPE_USE)
. Questo potrebbe interrompere la compilazione degli utilizzi in Kotlin, che può essere risolta spostando l'annotazione per annotare il tipo (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(nel pacchettocom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(nel pacchettocom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Versione 1.0.0-alpha01
27 ottobre 2021
androidx.media3:media3-*:1.0.0-alpha01
viene rilasciato.
La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
Media3 è la nuova dimora per le librerie che supportano i contenuti multimediali, tra cui ExoPlayer. La prima versione alpha contiene implementazioni iniziali e funzionali delle librerie per implementare casi d'uso multimediali, tra cui:
- ExoPlayer, un media player a livello di applicazione per Android, facile da personalizzare ed estendere.
- Funzionalità di sessione multimediale, per visualizzare e controllare le riproduzioni. Questo nuovo
modulo di sessione utilizza la stessa interfaccia
Player
di ExoPlayer. - Componenti UI per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
- Funzionalità di wrapping di moduli in altre librerie da utilizzare con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.
Per ulteriori informazioni, consulta il progetto GitHub di Media3.
ExoPlayer era precedentemente ospitato in un progetto GitHub ExoPlayer separato. In Media3, il nome del pacchetto è androidx.media3.exoplayer
. Prevediamo di continuare a gestire e rilasciare il progetto GitHub ExoPlayer per un po' di tempo per dare alle app il tempo di eseguire la migrazione a Media3. Media3 sostituisce tutti i moduli ExoPlayer, ad eccezione delle estensioni media2 e mediasession legacy, che vengono sostituite dal nuovo modulo media3-session
. Ciò consente l'integrazione diretta tra player e
sessioni multimediali senza bisogno di utilizzare una classe adattatore/connettore.