Contenuti multimediali 3
Aggiornamento più recente | Release stabile | Candidato per l'uscita | Versione beta | Release alpha |
---|---|---|---|---|
10 luglio 2024 | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.0-alpha02 |
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:
Alla moda
dependencies { def media3_version = "1.4.0" // 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.4.0" // 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 saperne di più sulle dipendenze, consulta Aggiungere dipendenze nella 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-rc01
10 luglio 2024
Viene rilasciato androidx.media3:media3-*:1.4.0-rc01
.
La versione 1.4.0-rc01 contiene questi commit.
- Libreria comune:
- Aggiungi
Format.customData
per archiviare le informazioni personalizzate fornite dall'app sulle istanzeFormat
.
- Aggiungi
- ExoPlayer:
- Sono state risolte alcune incoerenze relative all'elemento attivo dell'audio, ad esempio la mancata segnalazione della perdita completa o temporanea dello stato attivo mentre il player è in pausa (#1436).
- Correggi i potenziali
IndexOutOfBoundsException
causati dagli estrattori che segnalano tracce aggiuntive dopo il passaggio di preparazione iniziale (#1476). Effects
inExoPlayer.setVideoEffect()
riceverà i timestamp con l'offset del renderer rimosso (#1098).- Correggi il potenziale
IllegalArgumentException
durante la gestione dell'errore del player verificato durante la lettura in un altro elemento della playlist (#1483).
- Testo:
- Correggi un
IllegalArgumentException
daLegacySubtitleUtil
quando un esempio di sottotitoli WebVTT non contiene segnali, ad esempio nell'ambito di uno stream DASH (#1516).
- Correggi un
- Sessione:
- Consenti di impostare l'attività della sessione per controller per eseguire l'override
dell'attività della sessione globale. L'attività della sessione può essere definita per un
controller al momento della connessione creando un elemento
ConnectionResult
conAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Una volta connessa, l'attività della sessione può essere aggiornata conMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - Migliora la replica degli errori delle chiamate a
MediaLibrarySession.Callback
. Ora puoi configurare la replica degli errori utilizzandoMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
per scegliere il tipo di errore o disattivare la replica degli errori, attiva per impostazione predefinita.
- Consenti di impostare l'attività della sessione per controller per eseguire l'override
dell'attività della sessione globale. L'attività della sessione può essere definita per un
controller al momento della connessione creando un elemento
- Interfaccia utente:
- Aggirare un bug della piattaforma che causa la visualizzazione prolungata o ritagliata del video quando utilizzi
SurfaceView
all'interno di un file ComposeAndroidView
sull'API 34 (#1237).
- Aggirare un bug della piattaforma che causa la visualizzazione prolungata o ritagliata del video quando utilizzi
- App demo:
- Usa
HttpEngineDataSource
comeHttpDataSource
quando supportato dal dispositivo.
- Usa
Versione 1.4.0-beta01
26 giugno 2024
Viene rilasciato androidx.media3:media3-*:1.4.0-beta01
.
La versione 1.4.0-beta01 contiene questi commit.
- ExoPlayer:
- Aggiungi
ExoPlayer.isReleased()
per controllare seExoplayer.release()
è stato chiamato. - Aggiungi
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs
per configurare la posizione massima per cuiseekToPrevious()
cerca l'elemento precedente (#1425).
- Aggiungi
- Trasformatore:
- Rimuovi campo
ExportResult.processedInputs
. Se utilizzi questo campo per i dettagli del codec, utilizza invece il criterioDefaultDecoderFactory.listener
. In caso di eccezione del codec, i dettagli del codec saranno disponibili inExportException.codecInfo
.
- Rimuovi campo
- Estrattori:
- Correggi l'estrazione del formato audio PCM nei contenitori AVI.
- Immagine:
- Consenti
null
come parametro perExoPlayer.setImageOutput
per cancellare unImageOutput
impostato in precedenza.
- Consenti
- Effetto:
- Rimuovi i
OverlaySettings.useHdr
inutilizzati poiché l'intervallo dinamico dell'overlay e del frame devono corrispondere. - Aggiungi il supporto HDR per
TextOverlay
. La luminanza dell'overlay di testo può essere regolata conOverlaySettings.setHdrLuminanceMultiplier
.
- Rimuovi i
- Sessione:
- Aggiungi
MediaSession.Callback.onPlayerInteractionFinished
per informare le sessioni quando una serie di interazioni dei giocatori da un controller specifico ha finito. - Aggiungi
SessionError
e utilizzalo inSessionResult
eLibraryResult
al posto del codice di errore per fornire maggiori informazioni sull'errore e su come risolverlo, se possibile. - Pubblica il codice per l'app di test del controller media3 che può essere utilizzato per testare le interazioni con le app che pubblicano una sessione multimediale.
- Propaga gli extra passati all'elemento
MediaSession[Builder].setSessionExtras()
di media3 aPlaybackStateCompat.getExtras()
di un controller media1. - Mappa errori irreversibili e non irreversibili da e verso la sessione della piattaforma. Un
PlaybackException
è mappato a uno stato di errore irreversibile dellaPlaybackStateCompat
. Un elementoSessionError
inviato al controller delle notifiche multimediali conMediaSession.sendError(ControllerInfo, SessionError)
è mappato a un errore non irreversibile inPlaybackStateCompat
, il che significa che il codice e il messaggio di errore sono impostati, ma lo stato della sessione della piattaforma rimane diverso suSTATE_ERROR
.
- Aggiungi
- Interfaccia utente:
- Estensione HLS:
- È stato corretto un bug per cui le playlist non principali non venivano aggiornate durante la riproduzione dal vivo (#1240).
- Rimuovi i simboli ritirati:
- Rimuovi l'interfaccia di
Bundleable
. È inclusa la rimozione di tutti i campi costantiBundleable.Creator<Foo> CREATOR
. I chiamanti dovrebbero usare invece i metodiBundle toBundle()
estatic Foo fromBundle(Bundle)
su ogni tipo.
- Rimuovi l'interfaccia di
Versione 1.4.0-alpha02
7 giugno 2024
Viene rilasciato androidx.media3:media3-*:1.4.0-alpha02
.
La versione 1.4.0-alpha02 contiene questi commit.
- Libreria comune:
- Inoltra le presunte chiamate di ricerca autonoma ai metodi
BasePlayer.seekTo
eSimpleBasePlayer.handleSeek
protetti invece di ignorarli. Se implementi questi metodi in un player personalizzato, potresti dover gestire queste chiamate aggiuntive conmediaItemIndex == C.INDEX_UNSET
. - Rimuovi la dipendenza dalla compilazione sul desugaring Java 8 migliorato (#1312).
- Assicurati che la durata passata a
MediaItem.Builder.setImageDurationMs
venga ignorata per unMediaItem
non di tipo immagine (come documentato).
- Inoltra le presunte chiamate di ricerca autonoma ai metodi
- ExoPlayer:
- Aggiungi
reset
aBasePreloadManager
per rilasciare tutte le origini di conservazione mantenendo l'istanza del gestore di precaricamento. - Aggiungi
ExoPlayer.setPriority
(eBuilder.setPriority
) per definire il valore di priorità utilizzato inPriorityTaskManager
e per l'importanza MediaCodec dall'API 35. - È stato risolto il problema relativo all'aggiornamento dell'ultimo tempo di rebuffer che causava la presenza di una chiave
bs
(inadempienza del buffer) errata nella CMCD (#1124). - Aggiungi
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
per indicare che l'origine è stata caricata fino alla fine. In questo modo le implementazioniDefaultPreloadManager
ePreloadMediaSource.PreloadControl
personalizzate possono precaricare la sorgente successiva o eseguire altre azioni. - Correzione del bug per cui l'azione di ignorare gli elementi silenziati alla fine degli elementi può attivare un'eccezione di riproduzione.
- Aggiungi
clear
aPreloadMediaSource
per ignorare il periodo di precaricamento. - Aggiungi il nuovo codice di errore
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
da utilizzare quando le risorse di codec vengono recuperate per attività con priorità più elevata. - Consenti a
AdsMediaSource
di caricare annunci pre-roll prima del completamento della preparazione iniziale dei contenuti multimediali (#1358). - È stato corretto il bug per cui la riproduzione si spostava su
STATE_ENDED
durante la ripreparazione di un live streaming DASH in più periodi dopo che il periodo originale era già stato rimosso dal file manifest. - Rinomina
onTimelineRefreshed
inonSourcePrepared
eonPrepared
inonTracksSelected
inPreloadMediaSource.PreloadControl
. Inoltre, rinomina gli IntDefs inDefaultPreloadManager.Stage
di conseguenza. - Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro con i cicli di attivazione della CPU e ritardare la riattivazione quando i renderer possono avanzare.
Puoi attivare questa funzionalità utilizzando
experimentalSetDynamicSchedulingEnabled
durante la configurazione dell'istanza ExoPlayer. - Aggiungi
Renderer.getDurationToProgressMs
. UnRenderer
può implementare questo metodo per restituire a ExoPlayer la durata dell'avanzamento della riproduzione affinché il renderer possa avanzare. SeExoPlayer
è impostato suexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
chiamerà questo metodo per calcolare il tempo per pianificare l'attività di lavoro. - Aggiungi
MediaCodecAdapter#OnBufferAvailableListener
all'avviso quando i buffer di input e output sono disponibili per l'utilizzo da parte diMediaCodecRenderer
.MediaCodecRenderer
segnaleràExoPlayer
quando riceve questi callback e, se il valoreExoPlayer
è impostato suexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
pianificherà il proprio loop di lavoro mentre i renderer possono procedere. - Utilizza le classi di dati per i metodi
LoadControl
anziché per i singoli parametri.
- Aggiungi
- Trasformatore:
- Aggirare un bug del decoder in cui il numero di canali audio era limitato in stereo durante la gestione dell'input PCM.
- Se selezioni le tracce in
ExoPlayerAssetLoader
, ignora i vincoli del numero di canali audio poiché si applicano solo alla riproduzione. - Sostituisci l'interfaccia
androidx.media3.transformer.Muxer
conandroidx.media3.muxer.Muxer
e rimuoviandroidx.media3.transformer.Muxer
. - È stato corretto il caricamento delle immagini HEIC dagli schemi degli URI dei contenuti. (N. 1373).
- Regola la durata della traccia audio in
AudioGraphInput
per migliorare la sincronizzazione AV.
- Estrattori:
- MPEG-TS: esegui il rollback della modifica assicurando che il rendering dell'ultimo frame venga eseguito passando l'ultima unità di accesso di uno stream alla coda di esempio (#7909). Integrazione di correzioni per risolvere i problemi emersi solo nei flussi HLS(#1150) e nei flussi HLS H.262 (#1126).
- MP3: preferisci le dimensioni dei dati di un frame
Info
rispetto a quelle riportate dallo stream sottostante (ad es. dimensioni del file o intestazione HTTPContent-Length
). In questo modo è possibile escludere i dati del trailer non riproducibili (ad es. la copertina dell'album) dai calcoli della velocità in bit costante, rendendo le ricerche più accurate (#1376). - MP3. Utilizza il numero di fotogrammi e altri dati in un frame
Info
(se presente) per calcolare una velocità in bit media per una ricerca di velocità in bit costante, anziché estrapolare la velocità in bit del frame dopo il frameInfo
, che potrebbe essere artificialmente ridotta, ad esempioPCUT
frame (#1376).
- Audio:
- Sono stati corretti gli attributi di codifica DTS:X del profilo 2 per la riproduzione passthrough (#1299).
- Per la riproduzione senza carico, reimposta il campo di monitoraggio per il completamento dello stream
in
DefaultAudioSink
prima di chiamareAudioTrack.stop()
in modo cheAudioTrack.StreamEventCallback#onPresentationEnded
identifichi correttamente quando sono stati riprodotti tutti i dati in sospeso. - È stato corretto il bug in
SilenceSkippingAudioProcessor
per cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) potevano causare la generazione di un'eccezione da parte del processore (#1352). - Implementa
MediaCodecAudioRenderer.getDurationToProgressUs
in modo che ExoPlayer pianifichi dinamicamente il suo loop di lavoro principale in base al momento in cui MediaCodecAudioRenderer può progredire.
- Video:
- Correggi la logica di fallback del decoder per Dolby Vision per utilizzare un decoder AV1 compatibile se necessario (#1389).
- Testo:
- È stato risolto il problema per cui i sottotitoli iniziavano prima di una posizione di ricerca saltata. Questo problema è stato introdotto solo in Media3 1.4.0-alpha01.
- Modifica il comportamento predefinito di analisi dei sottotitoli in modo che venga eseguito durante l'estrazione anziché durante il rendering (vedi il diagramma dell'architettura di ExoPlayer per conoscere la differenza tra estrazione e rendering).
- Questa modifica può essere ignorata chiamando sia
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
siaTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Consulta la documentazione sulla personalizzazione per sapere come collegare questi componenti in un'istanzaExoPlayer
. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli legacy) verranno rimossi in una release futura. - Le app con implementazioni personalizzate di
SubtitleDecoder
devono aggiornarle per implementareSubtitleParser
(eSubtitleParser.Factory
anzichéSubtitleDecoderFactory
).
- Questa modifica può essere ignorata chiamando sia
- Servizi per i giochi di Play: correggi la decodifica della lunghezza di esecuzione per risolvere
0
come indice di colore, anziché un valore letterale di colore (#1367). - CEA-708: ignora il valore
rowLock
. La specifica CEA-708-E S-2023 afferma cherowLock
ecolumnLock
devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto dicolumnLock
non è implementato, quindi si presume che sia sempre falso).- Inizialmente era incluso nelle note di rilascio di
1.3.0-alpha01
, ma la modifica è stata annullata per errore prima della release di1.3.0-rc01
. Il problema ora è stato risolto, pertanto la modifica è di nuovo presente.
- Inizialmente era incluso nelle note di rilascio di
- CEA-708: evita l'aggiunta di nuove righe duplicate tramite la gestione ingenua da parte di ExoPlayer del comando "set pen location" (#1315).
- Metadati:
- Correggi la mappatura dei tag di ordinamento da MP4 a ID3. In precedenza, i tag MP4 "album sort"
(
soal
), "artist sort" (soar
) e "album artist sort" (soaa
) erano erroneamente mappati ai tagTSO2
,TSOA
eTSOP
ID3 (#1302). - È stato corretto il problema di lettura dei tag numerici
gnre
(genere) etmpo
(tempo) MP4 (/iTunes) quando il valore superava un byte. - Propaga il frame ID3
TCON
aMediaMetadata.genre
(#1305).
- Correggi la mappatura dei tag di ordinamento da MP4 a ID3. In precedenza, i tag MP4 "album sort"
(
- Immagine:
- È stato aggiunto il supporto per griglie delle miniature DASH non quadrate (#1300).
- Aggiunta del supporto di AVIF per API 34 e versioni successive.
- Fonte:
- Consenti a
ByteArrayDataSource
di risolvere un URI in un array di byte duranteopen()
, anziché essere hardcoded in fase di creazione (#1405).
- Consenti a
- DRM:
- Consenti l'impostazione di un
LoadErrorHandlingPolicy
suDefaultDrmSessionManagerProvider
(#1271).
- Consenti l'impostazione di un
- Effetto:
- Correzione del bug per cui
TimestampWrapper
si arresta in modo anomalo se utilizzato conExoPlayer#setVideoEffects
(#821). - Consente di cambiare lo spazio di lavoro predefinito del colore SDR dai colori lineari al video SDR BT 709 elettrico. Offri anche la terza opzione per mantenere lo spazio colore originale.
- Consenti la definizione dell'ordine z indeterminato di EditedMediaItemSequences (#1055).
- Mantieni un intervallo di luminanza coerente su diverse parti dei contenuti HDR (utilizza l'intervallo HLG).
- Aggiunta del supporto degli overlay Ultra HDR (bitmap) sui contenuti HDR.
- Consenti l'utilizzo di
SeparableConvolution
effetti prima dell'API 26.
- Correzione del bug per cui
- Estensione IMA:
- Promuovere l'API necessaria per consentire alle app di riprodurre gli stream di annunci DAI in modo stabile.
- Aggiungi
replaceAdTagParameters(Map <String, String>)
aImaServerSideAdInsertionMediaSource.AdLoader
per consentire di sostituire i parametri del tag annuncio in fase di esecuzione. - È stato corretto il bug per cui
VideoAdPlayer.VideoAdPlayerCallback.onError
non veniva chiamato quando si è verificato un errore del player durante la riproduzione dell'annuncio (#1334). - Passa alla versione 3.33.0 dell'SDK IMA per correggere un
NullPointerException
quando utilizzidata://
URI del tag annuncio (#700).
- Sessione:
- Per nascondere la barra di scorrimento nella notifica dei contenuti multimediali per i live streaming, non imposta la durata nei metadati della sessione della piattaforma (#1256).
- Allinea la conversione di
MediaMetadata
aMediaDescriptionCompat
per utilizzare lo stesso ordine e la stessa logica preferiti nella selezione delle proprietà dei metadati di media1. - Aggiungi
MediaSession.sendError()
che consente l'invio di errori non irreversibili al controller Media3. Quando utilizzi il controller di notifica (vediMediaSession.getMediaNotificationControllerInfo()
), l'errore personalizzato viene utilizzato per aggiornarePlaybackState
della sessione della piattaforma a uno stato di errore con le informazioni sull'errore fornite (#543).
- Estensione Cronet:
- Correggi
SocketTimeoutException
inCronetDataSource
. In alcune versioni di Cronet, la richiesta fornita dal callback non è sempre la stessa. Questo comporta il mancato completamento del callback e il timeout della richiesta (https://issuetracker.google.com/328442628).
- Correggi
- Estensione HLS:
- È stato corretto il bug per cui gli esempi EMSG in attesa in attesa di una discontinuità venivano
delegati in
HlsSampleStreamWrapper
con un offset errato che causava unIndexOutOfBoundsException
o unIllegalArgumentException
(#1002). - È stato corretto il bug per cui le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
- È stato corretto il bug per cui l'abilitazione di CMCD per HLS con segmenti di inizializzazione causava
Source Error
eIllegalArgumentException
.
- È stato corretto il bug per cui gli esempi EMSG in attesa in attesa di una discontinuità venivano
delegati in
- Estensione DASH:
- Estensione Cast:
- È stato corretto il bug che converteva il titolo dell'album di
MediaQueueItem
nell'artista nell'elemento multimediale Media3 (#1255).
- È stato corretto il bug che converteva il titolo dell'album di
- App demo:
- Consenti l'impostazione della modalità di ripetizione con argomenti
Intent
dalla riga di comando (#1266).
- Consenti l'impostazione della modalità di ripetizione con argomenti
- Rimuovi i simboli ritirati:
- Rimuovi il metodo
setContentTypePredicate(Predicate)
daDefaultHttpDataSource
,OkHttpDataSource
eCronetDataSource
. Utilizza invece il metodo equivalente per ogniXXXDataSource.Factory
. - Rimuovi i costruttori
OkHttpDataSource
eOkHttpDataSourceFactory
. Usa invece il criterioOkHttpDataSource.Factory
. - Rimuovi
PlayerMessage.setHandler(Handler)
. Usa invecesetLooper(Looper)
. - Rimuovi campo
Timeline.Window.isLive
. Utilizza invece il metodoisLive()
. - Rimuovi i costruttori
DefaultHttpDataSource
. Usa inveceDefaultHttpDataSource.Factory
. - Rimuovi
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. Usa inveceDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
. - Rimuovi
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. Usa invece il criterioMediaCodecInfo.canReuseCodec(Format, Format)
. - Rimuovi i metodi
DrmSessionManager.DUMMY
egetDummyDrmSessionManager()
. Usa invece il criterioDrmSessionManager.DRM_UNSUPPORTED
. - Rimuovi
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
. Utilizza invece gli sovraccarichi che richiedono un'DecoderReuseEvaluation
. - Rimuovi le costanti
RendererSupport.FormatSupport
IntDef eFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
eFORMAT_UNSUPPORTED_TYPE
. Utilizza il valore IntDef e le costanti equivalenti inandroidx.media3.common.C
(ad es.C.FORMAT_HANDLED
).
- Rimuovi il metodo
Versione 1.4.0-alpha01
17 aprile 2024
Viene rilasciato androidx.media3:media3-*:1.4.0-alpha01
.
La versione 1.4.0-alpha01 contiene questi commit.
- ExoPlayer:
- Aggiungi
BasePreloadManager
che coordina il precaricamento per più origini in base alle priorità definite dal relativorankingData
. La personalizzazione è possibile estendendo questa classe. AggiungiDefaultPreloadManager
che utilizzaPreloadMediaSource
per precaricare esempi multimediali delle origini nella memoria e utilizza un numero interorankingData
che indica l'indice di un elemento nella UI. - Aggiungi
PlayerId
alla maggior parte dei metodi diLoadControl
per consentire alle implementazioni diLoadControl
di supportare più giocatori. - Rimuovi
Buffer.isDecodeOnly()
eC.BUFFER_FLAG_DECODE_ONLY
. Non è necessario impostare questo flag perché renderer e decoder decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate diRenderer
devono controllare se il tempo di buffer è almenoBaseRenderer.getLastResetPositionUs()
per decidere se deve essere mostrato un campione. Le implementazioni personalizzate diSimpleDecoder
possono controllareisAtLeastOutputStartTimeUs
se necessario oppure contrassegnare altri buffer conDecoderOutputBuffer.shouldBeSkipped
per ignorarli. - Consenti che
TargetPreloadStatusControl.getTargetPreloadStatus(T)
restituisca un valore nullo per indicare di non precaricare unMediaSource
con ilrankingData
specificato. - Aggiungi
remove(MediaSource)
aBasePreloadManager
.
- Aggiungi
- Trasformatore:
- Aggiungi
audioConversionProcess
evideoConversionProcess
aExportResult
per indicare come è stata creata la rispettiva traccia nel file di output. - Relax con controllo di livello H.264 con ottimizzazione dell'assetto.
- È stato aggiunto il supporto per passare dal supporto di input SDR a quello HDR e viceversa in una sequenza.
- Aggiunto 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 per cui
DefaultAudioMixer
non restituisce la quantità corretta di byte dopo essere stato reimpostato e riutilizzato.
- Aggiungi
- Video:
- Risolvi il problema per cui
Listener.onRenderedFirstFrame()
arriva troppo presto quando cambia superficie durante la riproduzione.
- Risolvi il problema per cui
- Fonte:
- Implementa il supporto per
android.resource://package/id
URI delle risorse non elaborate in cuipackage
è diverso dal pacchetto dell'applicazione attuale. Questa soluzione non funzionava, ma è un modo più efficiente di accedere alle risorse in un altro pacchetto rispetto al nome. - Controlla con attenzione che
url
non sia null nei costruttoriDataSpec
. Questo parametro è già stato annotato come non null.
- Implementa il supporto per
- Effetto:
- Supporta più cambi di velocità all'interno dello stesso
EditedMediaItem
oComposition
inSpeedChangeEffect
. - Supporto per l'output HLG e PQ dall'input bitmap ultra HDR.
- Aggiungi il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, al fine di migliorare l'output della superficie HLG in ExoPlayer.setVideoEffect e in Debuger SurfaceView di Transformer.
- Aggiorna l'implementazione della matrice overlay per renderla coerente con la documentazione capovolgendo i valori x e y applicati in
setOverlayFrameAnchor()
. Se utilizziOverlaySettings.Builder.setOverlayFrameAnchor()
, inverti i relativi valori x e y moltiplicandoli per-1
.
- Supporta più cambi di velocità all'interno dello stesso
- Sessione:
- Modifica il valore predefinito di
CommandButton.enabled
intrue
e assicurati che il valore possa rimanere falso per i controller anche se il comando associato è disponibile. - Aggiungi costanti icona per
CommandButton
da utilizzare al posto delle risorse per icone personalizzate. - Aggiungi
MediaSessionService.isPlaybackOngoing()
per consentire alle app di eseguire query se il servizio deve essere interrotto inonTaskRemoved()
(#1219). - Aggiungi
MediaSessionService.pauseAllPlayersAndStopSelf()
che permette 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 altro modo.
- Modifica il valore predefinito di
- Download:
- Assicurati che
DownloadHelper
non perda istanzeRenderer
non 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 prova:
- Implementa
onInit()
eonRelease()
inFakeRenderer
. - Modifica i metodi
TestPlayerRunHelper.runUntil/playUntil
in caso di errori non irreversibili (ad es. 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 inveceCronetDataSource.Factory
. - Rimuovi alcuni costruttori
DataSpec
. Usa invece il criterioDataSpec.Builder
.
- Rimuovi
Versione 1.3.0
Versione 1.3.1
11 aprile 2024
Viene rilasciato androidx.media3:media3-*:1.3.1
.
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 viene precaricato di nuovo. - Applica il valore
TrackSelectionResult
corrispondente corretto al periodo di riproduzione nella selezione della traccia. - Avvia renderer abilitati in anticipo solo dopo l'avanzamento del periodo di riproduzione durante la transizione da un elemento multimediale all'altro (#1017).
- Aggiungi il tipo restituito mancante alla regola
-keepclasseswithmembers
di proguard perDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Risolvi il problema per cui
- Trasformatore:
- Aggiungi una soluzione alternativa per l'eccezione generata perché
MediaMuxer
non supporta i timestamp di presentazione negativi precedenti all'API 30.
- Aggiungi una soluzione alternativa per l'eccezione generata perché
- Selezione delle tracce:
DefaultTrackSelector
: preferisci le tracce video con una frequenza fotogrammi "ragionevole" (>=10 f/s) rispetto a quelle con una frequenza fotogrammi più bassa o non impostata. Ciò garantisce che il player selezioni la traccia video "reale" negli MP4 estratti da foto in movimento che possono contenere due tracce HEVC di cui una ha una risoluzione più alta 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 finalizzata 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 I-frame (#1150) e gli stream HLS H.262 (#1126).
- Audio:
- Consenti il ripristino del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità offload.
- Video:
- Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione degli stream H265 a 60 f/s 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). (N. 966).
- È stato risolto il problema per cui la gestione delle informazioni sul colore HDR causa un comportamento anomalo del codec e impedisce la modifica del formato adattivo per le tracce video SDR (#1158).
- Testo:
- WebVTT: impedisci a segnali diretti consecutivi di creare istanze
CuesWithTiming
aggiuntive spurie daWebvttParser.parse
(#1177).
- WebVTT: impedisci a segnali diretti consecutivi di creare istanze
- DRM:
- Risolvi l'errore
NoSuchMethodError
che può essere generato dal frameworkMediaDrm
anziché daResourceBusyException
oNotProvisionedException
su alcuni dispositivi Android 14 (#1145).
- Risolvi l'errore
- Effetto:
- Mappatura dei toni PQ a SDR migliorata mediante la conversione degli spazi colore.
- Sessione:
- Interfaccia utente:
- Utilizza il fallback per includere il nome della lingua della traccia audio se
Locale
non può identificare un nome visualizzato (#988).
- Utilizza il fallback per includere il nome della lingua della traccia audio se
- Estensione DASH:
- Compila tutti gli elementi
Label
del file manifest inFormat.labels
(#1054).
- Compila tutti gli elementi
- Estensione RTSP:
- Salta i valori vuoti delle informazioni sulla sessione (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 repository Maven aggiuntivo. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riattivarlo.
Versione 1.3.0
6 marzo 2024
Viene rilasciato androidx.media3:media3-*:1.3.0
.
La versione 1.3.0 contiene questi commit.
- Libreria comune:
- Implementa il supporto per
android.resource://package/[type/]name
URI delle risorse non elaborate, dovepackage
è diverso dal pacchetto dell'applicazione attuale. Il funzionamento di questa soluzione è sempre stato documentato, ma finora non è stato implementato correttamente. - Normalizza i tipi MIME impostati dal codice dell'app o leggi dai contenuti multimediali in modo che siano completamente minuscoli.
- Definisci gli annunci con un valore
MediaItem
completo anziché un singoloUri
inAdPlaybackState
. - Aumenta
minSdk
a 19 (Android KitKat). Questa è allineata a tutte le altre librerie AndroidX ed è necessaria per eseguire l'upgrade alle versioni più recenti delle nostre dipendenze AndroidX. - Compila entrambi i campi
artworkUri
eartworkData
inMediaMetadata.Builder.populate(MediaMetadata)
quando almeno uno è diverso da null (#964).
- Implementa il supporto per
- 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 la fonte di contenuti multimediali per ricevere ilTimeline
, preparare e memorizzare nella cache il periodo nella posizione iniziale specificata, selezionare le tracce e caricare i dati multimediali per il periodo. Le app controllano l'avanzamento del precaricamento implementandoPreloadMediaSource.PreloadControl
e impostano l'origine precaricata sul player per la riproduzione. - Aggiungi
ExoPlayer.setImageOutput
che consente alle app di impostareImageRenderer.ImageOutput
. - Per impostazione predefinita,
DefaultRenderersFactory
fornisce ora un valoreImageRenderer
al player, conImageOutput
eImageDecoder.Factory.DEFAULT
nulli. - Emetti evento
Player.Listener.onPositionDiscontinuity
quando il silenzio viene ignorato (#765). - Aggiungi il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi
abilitare questa funzionalità utilizzando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Supporta le fonti multimediali adattive con
PreloadMediaSource
. - Implementa
HttpEngineDataSource
, unHttpDataSource
, utilizzando l'API HttpEngine. - Impedisci la creazione di sottoclassi
CompositeSequenceableLoader
. Questo componente è stato precedentemente estendibile, ma non è mai stato creato sottoclassi all'interno della libreria. È possibile eseguire le personalizzazioni eseguendo il wrapping di un'istanza tramite il pattern di arredamento e implementando unCompositeSequenceableLoaderFactory
personalizzato. - È stato risolto il problema per cui la ripetizione alla stessa ora causava la cancellazione dei metadati di questo elemento (#1007).
- Rinomina i metodi
experimentalSetSubtitleParserFactory
suBundledChunkExtractor.Factory
eDefaultHlsExtractorFactory
insetSubtitleParserFactory
e non consentire la trasmissione dinull
. Utilizza i nuovi metodiexperimentalParseSubtitlesDuringExtraction(boolean)
per controllare il comportamento di analisi. - Aggiungi il supporto per la personalizzazione del valore
SubtitleParser.Factory
utilizzato durante l'estrazione. Questo può essere ottenuto conMediaSource.Factory.setSubtitleParserFactory()
. - Aggiungi il prefisso di origine a tutti i campi
Format.id
generati daMergingMediaSource
. Questo consente di identificare l'origine che ha prodotto unFormat
(#883). - Correggi l'espressione regolare utilizzata per convalidare i nomi personalizzati delle chiavi CMCD (Common Media Client Data) modificandola in modo che utilizzi solo il trattino (#1028).
- Interrompi la doppia codifica dei parametri di query CMCD (#1075).
- Aggiungi
- Trasformatore:
- È stato aggiunto il supporto per la suddivisione dei video in slow motion H.265/HEVC SEF.
- Aumenta la velocità di trasmuxing, soprattutto in caso di modifiche "rimuovi video".
- Aggiungi un'API per assicurarti che il file di output venga avviato su un frame video. Ciò può rendere l'output delle operazioni di ritaglio più compatibile con le implementazioni dei player che non mostrano il primo fotogramma video fino al timestamp di presentazione (#829).
- È stato aggiunto il supporto per ottimizzare le operazioni di taglio di MP4 su asset singoli.
- Aggiungi il supporto per garantire che un fotogramma video abbia il primo timestamp nel file di output. Corregge i file di output che iniziano con un frame nero nei player basati su iOS (#829).
- Selezione delle tracce:
- Aggiungi
DefaultTrackSelector.selectImageTrack
per abilitare la selezione della traccia dell'immagine. - Aggiungi
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
per determinare se selezionare una traccia immagine se sono disponibili sia una traccia immagine che 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 AV1C all'estrattore MP4 per recuperare i valori
ColorInfo.colorSpace
,ColorInfo.colorTransfer
eColorInfo.colorRange
(#692). - MP3: utilizza la ricerca con velocità in bit costante (CBR) per la ricerca di file con un'intestazione
Info
(l'equivalente CBR dell'intestazioneXing
). In precedenza utilizzavamo la tabella di ricerca dall'intestazioneInfo
, ma ciò si traduce in una ricerca meno precisa rispetto a quando la ignoriamo e supponiamo che il file sia CBR. - MPEG2-TS: aggiunta del supporto DTS, DTS-LBR e DTS:X Profile2 (#275).
- Estrai tipi di audio dai descrittori TS e mappali a flag di ruolo, consentendo agli utenti di selezionare tracce audio più informate (#973).
- Aggiungi un'ulteriore analisi AV1C all'estrattore MP4 per recuperare i valori
- Audio:
- Video:
- Modifica il costruttore
MediaCodecVideoRenderer
che prende un argomentoVideoFrameProcessor.Factory
e sostituiscilo con un costruttore che accetta un argomentoVideoSinkProvider
. Le app che vogliono inserire unVideoFrameProcessor.Factory
personalizzato possono creare un'istanza di unCompositingVideoSinkProvider
che utilizza l'elementoVideoFrameProcessor.Factory
personalizzato e passare il provider del sink video aMediaCodecVideoRenderer
.
- Modifica il costruttore
- Testo:
- È stata corretta la serializzazione dei segnali bitmap per risolvere l'errore
Tried to marshall a Parcel that contained Binder objects
quando si utilizzaDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: ignora il valore
rowLock
. La specifica CEA-708-E S-2023 afferma cherowLock
ecolumnLock
devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto dicolumnLock
non è implementato, quindi si presume che sia sempre falso).
- È stata corretta la 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
in prossimità degli orari di presentazione.
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature a
- DRM:
- Riproduci immediatamente i campioni non criptati di "cancellazione lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i campioni criptati successivi non sono ancora pronte. Questo potrebbe causare un blocco a metà della riproduzione se i tasti non sono ancora pronti
quando la posizione di riproduzione raggiunge i campioni criptati (ma la riproduzione
in precedenza non sarebbe stata del tutto avviata). Questo comportamento può essere disabilitato con
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Riproduci immediatamente i campioni non criptati di "cancellazione lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i campioni criptati successivi non sono ancora pronte. Questo potrebbe causare un blocco a metà della riproduzione se i tasti non sono ancora pronti
quando la posizione di riproduzione raggiunge i campioni criptati (ma la riproduzione
in precedenza non sarebbe stata del tutto avviata). Questo comportamento può essere disabilitato con
- Estensione IMA:
- Risolvi il problema per cui gli annunci DASH e HLS senza l'estensione del file appropriata non potevano essere riprodotti.
- Sessione:
- Disattiva il rilevamento del doppio clic per le app TV (#962).
- È stato risolto il problema per cui non veniva trasmessa la lingua
MediaItem.RequestMetadata
con solo elementi extra non null tra sessioni e controller multimediali. - Aggiungi a
MediaLibrarySession.Builder
un costruttore che richiede solo unContext
anziché unMediaLibraryService
.
- Estensione HLS:
- Riduci
HlsMediaPeriod
alla visibilità privata del pacchetto. Questo tipo non deve dipendere direttamente dall'esterno del pacchetto HLS. - La funzionalità Risolvi cerca all'inizio di un segmento in modo più efficiente (#1031).
- Riduci
- Estensioni decoder (FFmpeg, VP9, AV1, MIDI, ecc.):
- Decoder MIDI: ignora i messaggi di evento SysEx (#710).
- Utilità di prova:
- Non mettere in pausa la riproduzione tra
TestPlayerRunHelper.playUntilPosition
. Il test mantiene la riproduzione in stato di riproduzione, ma sospende l'avanzamento finché il test non riesce ad aggiungere asserzioni e ulteriori azioni.
- Non mettere in pausa la riproduzione tra
- App demo:
- Aggiungi un modulo demo breve per dimostrare l'utilizzo di
PreloadMediaSource
con il caso d'uso dei contenuti in formato breve.
- Aggiungi un modulo demo 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:
- È stato risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
LiveConfiguration.min/maxOffset
continuavano a regolare l'offset di nuovo sumin/maxOffset
. - È stato risolto il problema a causa del quale i layout dei canali OPUS e VORBIS sono errati per 3, 5, 6, 7 e 8 canali (#8396).
- È stato risolto il problema per cui le selezioni delle tracce dopo aver eseguito la ricerca fino a zero in un live streaming lasciavano erroneamente l'avvio dello stream nella posizione predefinita (#9347).
- È stato risolto il problema per cui le nuove istanze di
CmcdData.Factory
ricevevano valori negativi perbufferedDurationUs
da origini di blocchi, generando unIllegalArgumentException
(#888).
- È stato risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
- Trasformatore:
- Aggirare un problema per cui il codificatore segnalava un problema 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 loro risoluzione più elevata. - Risoluzione del problema di rilevamento dei fotogrammi chiave errato per gli stream TS H264 (#864).
- Correggi la stima della durata dei flussi TS che superano i 47.721 secondi (#855).
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
- Audio:
- È stato risolto il problema di gestione di EOS per
SilenceSkippingAudioProcessor
quando la chiamata viene eseguita più volte (#712).
- È stato risolto il problema di gestione di EOS per
- Video:
- Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la segnalazione degli stream AVC a 60 f/s come non supportati (#693).
- Metadati:
- È stato corretto il bug per cui
MediaMetadata
era compilato solo dai commenti Vorbis con chiavi maiuscole (#876). - Rileva
OutOfMemoryError
durante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni sui tag anziché senza problemi di riproduzione.
- È stato corretto il bug per cui
- DRM:
- Estendi la soluzione alternativa per l'URL della licenza ClearKey
https://default.url
spuria all'API 33 e versioni successive (in precedenza la soluzione alternativa veniva applicata esattamente solo all'API 33) (#837). - È stato risolto il problema di
ERROR_DRM_SESSION_NOT_OPENED
quando si passa dalla piattaforma criptata a quella di cancellazione dei contenuti senza una superficie collegata al player. L'errore è dovuto all'utilizzo non corretto di un decoder sicuro per la riproduzione di 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). - È stato corretto il problema di trasmissione di
notifyChildrenChanged
per i controller precedenti (#644). - È stato corretto un bug per cui l'impostazione di un tempo negativo per un timer
setWhen
disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903). - È stato corretto il problema
IllegalStateException
quando non aveva completato la connessione del controller delle notifiche multimediali quando veniva richiesto il primo aggiornamento della notifica (#917).
- Inserisci le chiavi e i valori personalizzati in
- Interfaccia utente:
- È stato risolto il problema per cui i pulsanti Avanti e Indietro non erano visibili quando venivano utilizzati con Material Design in un BottomSheetDialogFragment (#511).
- È stato risolto il problema per cui i numeri nel pulsante per l'avanzamento veloce di
PlayerControlView
non erano ben allineati (#547).
- Estensione DASH:
- Analizza "f800" come numero di canali pari a 5 per Dolby nel file manifest DASH (#688).
- Estensioni decoder (FFmpeg, VP9, AV1, MIDI, ecc.):
- Estensione Cast:
- Pulisci la creazione di un
Timeline
per non causare l'arresto anomalo dell'app quando il caricamento dei contenuti multimediali non riesce sul dispositivo di trasmissione (#708).
- Pulisci la creazione di un
Versione 1.2.0
15 novembre 2023
- Libreria comune:
- Aggiungi un parametro
@Nullable Throwable
ai metodi nell'interfacciaLog.Logger
. Il parametromessage
per questi metodi non contiene più informazioni sulThrowable
passato ai metodiLog.{d,i,w,e}()
, quindi le implementazioni dovranno aggiungere manualmente queste informazioni, se lo desideri, (possibilmente utilizzandoLogger.appendThrowableString(String, Throwable)
). - È stato risolto il problema di compatibilità di Kotlin in cui i parametri di tipo generico con valore nullo e i tipi di elementi array con valori nulli non venivano rilevati come valori nulli. Esempi
sono i parametri dei metodi
TrackSelectorResult
eSimpleDecoder
(#6792). - Modifica il comportamento predefinito dell'UI e delle notifiche in
Util.shouldShowPlayButton
per mostrare un pulsante di riproduzione mentre la riproduzione viene temporaneamente soppressa (ad es. a causa di una perdita di messa a fuoco temporanea dell'audio). Il comportamento precedente può essere mantenuto utilizzandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Esegui l'upgrade di
androidx.annotation:annotation-experimental
a1.3.1
per risolvere il problema https://issuetracker.google.com/251172715. - Sposta
ExoPlayer.setAudioAttributes
nell'interfacciaPlayer
.
- Aggiungi un parametro
- ExoPlayer:
- Sono stati risolti i problemi di ricerca negli stream 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à viene attivata tramite
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Il motivo dell'eliminazione della riproduzione verrà aggiornato comePlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
se viene tentato di riprodurre la riproduzione quando non sono disponibili uscite audio adatte o se tutte le uscite adatte vengono disconnesse durante la riproduzione. Il motivo dell'eliminazione verrà rimosso quando viene connesso un output adatto. - Aggiungi
MediaSource.canUpdateMediaItem
eMediaSource.updateMediaItem
per accettare gli aggiornamentiMediaItem
dopo la creazione tramitePlayer.replaceMediaItem(s)
. - Consenti gli aggiornamenti di
MediaItem
per tutti iMediaSource
corsi forniti dalla libreria tramitePlayer.replaceMediaItem(s)
(#33, #9978). - Rinomina
MimeTypes.TEXT_EXOPLAYER_CUES
inMimeTypes.APPLICATION_MEDIA3_CUES
. - Aggiungi
PngExtractor
che invii e legge un intero file PNG inTrackOutput
come un unico esempio. - Migliora il metodo
SequenceableLoader.continueLoading(long)
nell'interfacciaSequenceableLoader
perSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
contiene parametri aggiuntivi, tra cuiplaybackSpeed
elastRebufferRealtimeMs
, oltre alplaybackPositionUs
esistente. - Migliora il metodo
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
nell'interfacciaChunkSource
inChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Aggiungi altri campi al logging dei dati CMCD (Common Media Client Data): buffer
starvation (
bs
), scadenza (dl
), velocità di riproduzione (pr
) e avvio (su
) (#8699). - Aggiungi luma e la profondità di bit della crominanza a
ColorInfo
(#491). - Aggiungi altri campi al logging dei dati CMCD (Common Media Client Data): richiesta di oggetto successiva (
nor
) e richiesta di intervallo successivo (nrr
) (#8699). - Aggiunta di funzionalità per trasmettere i dati Common Media Client Data (CMCD) utilizzando i parametri di query (#553).
- Correggi
ConcurrentModificationException
inExperimentalBandwidthMeter
(#612). - Aggiungi il parametro
MediaPeriodId
aCompositeMediaSource.getMediaTimeForChildMediaTime
. - Supporta
ClippingMediaSource
(e altre origini con offset di tempo periodo/finestra) inConcatenatingMediaSource2
(#11226). - Modifica
BaseRenderer.onStreamChanged()
per ricevere anche un argomentoMediaPeriodId
.
- Trasformatore:
- Analizza i dati di rotazione EXIF per gli input delle immagini.
- Rimuovi il tipo di annotazione
TransformationRequest.HdrMode
e le costanti associate. Usa inveceComposition.HdrMode
e le costanti associate. - Semplifica
OverlaySettings
per risolvere i problemi di rotazione. - Parametri
frameRate
edurationUs
diSampleConsumer.queueInputBitmap
cambiati inTimestampIterator
.
- Selezione delle tracce:
- Aggiungi
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
per consentire o impedire in modo esplicito l'adattamento non continuo. Il comportamento predefinito mantiene il comportamento attuale ditrue
.
- Aggiungi
- Estrattori:
- MPEG-TS: assicurati che il rendering dell'ultimo frame venga eseguito passando l'ultima unità di accesso di un flusso alla coda di esempio (#7909).
- Correggi l'errore ortografico durante la determinazione di
rotationDegrees
.projectionPosePitch
cambiato inprojectionPoseRoll
(#461). - Rimuovi il presupposto che le istanze
Extractor
possano essere ispezionate direttamente coninstanceof
. Se vuoi l'accesso di runtime ai dettagli di implementazione di unExtractor
, devi prima chiamareExtractor.getUnderlyingInstance
. - Aggiungi
BmpExtractor
. - Aggiungi
WebpExtractor
. - Aggiungi
HeifExtractor
. - Aggiungi il supporto QuickTime classico a
Mp4Extractor
.
- Audio:
- Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza
la codifica PCM per
lpcm
in MP4. - Aggiungi il supporto per l'estrazione dell'audio Vorbis in formato 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()
mediante il quale viene configurata la configurazione dell'offload nel sink audio. Il valore predefinito èAudioSink.OFFLOAD_MODE_DISABLED
. - L'offload può essere abilitato tramite
setAudioOffloadPreference
inTrackSelectionParameters
. Se la preferenza è impostata su "Attiva", il dispositivo supporta l'offload per il formato e la selezione delle tracce è una singola traccia audio, l'offload audio verrà attivato. - Se il criterio
audioOffloadModePreference
è impostato suAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,DefaultTrackSelector
selezionerà solo una traccia audio e solo se il formato di quella traccia è supportato in offload. Se nessuna traccia audio è supportata nell'offload, non verrà selezionata nessuna traccia. - È in corso la disattivazione del supporto senza interruzioni per l'offload quando il livello precedente dell'API 33 è dovuto a un problema della posizione di riproduzione dopo la transizione della traccia.
- Rimuovi il parametro
enableOffload
dalla firma del metodoDefaultRenderersFactory.buildAudioSink
. - Rimuovi il metodo
DefaultAudioSink.Builder.setOffloadMode
. - Rimuovi il valore intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Aggiungi il supporto per i metadati senza lacune di Opus durante la riproduzione senza caricamento.
- Consenti il recupero del renderer disattivando l'offload se l'operazione non è riuscita alla prima scrittura (#627).
- Attiva la pianificazione dell'offload per impostazione predefinita per la riproduzione non caricata in modalità solo audio.
- Elimina
ExoPlayer.experimentalSetOffloadSchedulingEnabled
eAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
è stato rinominatoonSleepingForOffloadChanged
eonExperimentalOffloadedPlayback
comeonOffloadedPlayback
.- Sposta le interfacce e le definizioni correlate alla modalità di offload audio
TrackSelectionParameters
in una classeAudioOffloadPreferences
interna. - Aggiungi callback
onAudioTrackInitialized
eonAudioTrackReleased
aAnalyticsListener
,AudioRendererEventListener
eAudioSink.Listener
. - Risoluzione del problema di underflow del buffer audio DTS Express (#650).
- Correzione del bug per cui le funzionalità controllano la E-AC3-JOC genera un
IllegalArgumentException
(#677).
- Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza
la codifica PCM per
- Video:
- Consenti a
MediaCodecVideoRenderer
di utilizzare un elementoVideoFrameProcessor.Factory
personalizzato. - È stato corretto il bug per cui non era possibile visualizzare il primo frame se lo stream audio iniziava con timestamp negativi (#291).
- Consenti a
- Testo:
- Rimuovi
ExoplayerCuesDecoder
. Le tracce di testo consampleMimeType = application/x-media3-cues
ora vengono gestite direttamente daTextRenderer
senza bisogno di un'istanzaSubtitleDecoder
.
- Rimuovi
- Metadati:
MetadataDecoder.decode
non verrà più richiamato per gli esempi di "sola decodifica", poiché l'implementazione deve comunque restituire un valore nullo.
- Effetto:
- Aggiungi
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
l'input bitmap in coda per timestamp. - Modifica
VideoFrameProcessor.registerInputStream()
in modo che non blocchi. Le app devono implementareVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Parametri
frameRate
edurationUs
diVideoFrameProcessor.queueInputBitmap
cambiati inTimestampIterator
.
- Aggiungi
- Estensione IMA:
- È stato corretto il bug per cui un live streaming DASH in più periodi che non era il primo elemento di una playlist poteva generare un'eccezione (#571).
- Rilascia StreamManager prima di chiamare
AdsLoader.destroy()
- Passa alla versione 3.31.0 dell'SDK IMA.
- Sessione:
- Imposta il comportamento del servizio in primo piano delle notifiche su
FOREGROUND_SERVICE_IMMEDIATE
inDefaultMediaNotificationProvider
(#167). - Utilizza solo
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
oltre l'API 31 per evitare problemi con l'API deprecata sui dispositivi Samsung (#167). - Utilizza il controller delle notifiche multimediali come proxy per impostare i comandi disponibili e il layout personalizzato utilizzati per compilare la notifica e la sessione della piattaforma.
- Converti gli eventi relativi ai 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 chiamante è sempre il controller delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica allo stesso modo su tutti i livelli API supportati. - Risolvi il bug per cui
MediaController.getCurrentPosition()
non avanza quando connesso a unMediaSessionCompat
precedente. - Aggiungi
MediaLibrarySession.getSubscribedControllers(mediaId)
per comodità. - Esegui l'override di
MediaLibrarySession.Callback.onSubscribe()
per dichiarare la disponibilità dell'ID principale a cui il controller si abbona. Se ha esito positivo, l'abbonamento viene accettato enotifyChildrenChanged()
viene chiamato immediatamente per informare il browser (#561). - Aggiungi il modulo dimostrativo della sessione per Automotive OS e attiva la demo della sessione per Android Auto.
- Non impostare la coda della sessione del framework quando
COMMAND_GET_TIMELINE
non è disponibile per il controller delle notifiche multimediali. Con Android Auto come controller client che legge la sessione framework, il pulsantequeue
nella UI di Android Auto non viene visualizzato (#339). - Utilizza
DataSourceBitmapLoader
per impostazione predefinita anzichéSimpleBitmapLoader
(#271, #327). - Aggiungi
MediaSession.Callback.onMediaButtonEvent(Intent)
che consente alle app di eseguire l'override della gestione predefinita degli eventi dei pulsanti multimediali.
- Imposta il comportamento del servizio in primo piano delle notifiche su
- Interfaccia utente:
- Aggiungi un'implementazione
Player.Listener
per i dispositivi Wear OS che gestisce l'eliminazione della riproduzione dovuta aPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
avviando una finestra di dialogo di sistema per consentire a un utente di connettere un'uscita audio adatta (ad esempio le cuffie Bluetooth). Il listener ripristina automaticamente la riproduzione se viene connesso un dispositivo idoneo entro un timeout configurabile (l'impostazione predefinita è 5 minuti).
- Aggiungi un'implementazione
- Download:
- Dichiara il tipo di servizio in primo piano "sincronizzazione dati" per
DownloadService
per garantire 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 dati" per
- Estensione HLS:
- Aggiorna la playlist live HLS con un intervallo calcolato dall'ora di inizio dell'ultimo caricamento anziché dall'ora di completamento dell'ultimo caricamento (#663).
- Estensione DASH:
- Consenti più identificatori DASH dello stesso nell'URL del modello di segmento.
- Aggiungi il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Questa funzionalità offre un supporto migliore per l'unione di sottotitoli sovrapposti, compresa la risoluzione dello sfarfallio durante il passaggio da un segmento di sottotitoli all'altro. Puoi
abilitare questa funzionalità utilizzando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Estensione RTSP:
- Risolvi il problema di una condizione di gara che potrebbe causare un errore di tipo
IndexOutOfBoundsException
in caso di ricorrenza su TCP o in caso di blocco della riproduzione in alcune situazioni. - Controlla lo stato nella configurazione RTSP quando viene restituito lo stato di caricamento
RtspMediaPeriod
(#577). - Ignora i metodi di richiesta RTS personalizzati nell'intestazione pubblica della risposta delle opzioni (#613).
- Utilizza il valore di timeout della risposta della configurazione RTSP nell'intervallo di tempo dell'invio di richieste di opzioni RTSP keep-alive (#662).
- Risolvi il problema di una condizione di gara che potrebbe causare un errore di tipo
- Estensioni decoder (FFmpeg, VP9, AV1, MIDI, ecc.):
- Rilascia il modulo di decodifica MIDI, che fornisce il supporto per la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
- Aggiungi
DecoderOutputBuffer.shouldBeSkipped
per contrassegnare direttamente i buffer di output che non devono essere presentati. È preferibile usare questa opzione rispetto aC.BUFFER_FLAG_DECODE_ONLY
che verrà deprecato. - Aggiungi
Decoder.setOutputStartTimeUs
eSimpleDecoder.isAtLeastOutputStartTimeUs
per consentire ai decoder di rilasciare campioni di sola decodifica prima dell'ora di inizio. Dovrebbe essere preferibile utilizzare questo tipo diBuffer.isDecodeOnly
che verrà deprecato. - È stato corretto il bug durante la pubblicazione dell'artefatto del decoder MIDI nel repository Maven. L'artefatto viene rinominato in
media3-exoplayer-midi
(#734).
- Estensione Leanback:
- Correzione del bug per cui la disattivazione di una superficie può causare un errore
ArithmeticException
nel codice Leanback (#617).
- Correzione del bug per cui la disattivazione di una superficie può causare un errore
- Utilità di prova:
- Rendi
TestExoPlayerBuilder
eFakeClock
compatibili con i test dell'UI di Espresso e i test dell'interfaccia utente di Compose. È stato corretto un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni in visualizzazione Espresso o Compose.
- Rendi
- Rimuovi i simboli ritirati:
- Rimuovi
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
eTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. UsaComposition.Builder.setHdrMode(int)
e passa il valoreComposition
aTransformer.start(Composition, String)
. - Rimuovi il metodo
DownloadNotificationHelper.buildProgressNotification
deprecato, utilizza un metodo non deprecato che accetta un parametronotMetRequirements
.
- Rimuovi
Versione 1.2.0-rc01
1° novembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-beta01
19 ottobre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha02
29 settembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha01
17 agosto 2023
Utilizza la versione stabile 1.2.0.
Versione 1.1.0
Versione 1.1.1
16 agosto 2023
- Libreria comune:
- Rimuovi la dipendenza
multidex
aggiunta per errore da tutti i moduli (#499).
- Rimuovi la dipendenza
- ExoPlayer:
- Risolvi il problema in
PlaybackStatsListener
per cui iPlaybackStats
non corretti vengono creati dopo l'eliminazione della playlist. - Aggiungi altri campi al logging CMCD (Common Media Client Data): formato di streaming (sf), tipo di flusso (st), versione (v), velocità bit superiore (tb), durata dell'oggetto (d), velocità effettiva misurata (mtp) e tipo di oggetto (ot) (#8699).
- Risolvi il problema in
- Audio:
- È stato corretto un bug che causava la transizione di
Player.getState()
aSTATE_ENDED
durante la riproduzione di file molto brevi (#538).
- È stato corretto un bug che causava la transizione di
- Offload audio:
- Anteponi le pagine di intestazione ID Ogg e di intestazione del commento in bitstream per la riproduzione Opus offload in base a RFC 7845.
- Video:
- H.265/HEVC: correzione delle informazioni dell'immagine di riferimento SPS a breve e lungo termine per l'analisi.
- Testo:
- CEA-608: modifica la logica di troncamento del segnale in modo che consideri solo il testo visibile. In precedenza, il rientro e l'offset di tabulazione erano inclusi quando si limitava la lunghezza del segnale a 32 caratteri (che era tecnicamente corretta dalla specifica) (#11019).
- Estensione IMA:
- Passa alla versione 3.30.3 dell'SDK IMA.
- Sessione:
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene chiamato
MediaController.Listener.onCustomLayoutChanged
. Le app che vogliono inviare layout personalizzati diversi a diversi controller Media3 possono farlo inMediaSession.Callback.onConnect
utilizzando unAcceptedResultBuilder
per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione. - Risolvi i casi in cui
MediaLibraryServiceLegacyStub
inviava un errore a unResult
che non supportava questo comportamento e che ha generato unUnsupportedOperationException
(#78). - Correggi il modo in cui
PlayerWrapper
crea unVolumeProviderCompat
determinandovolumeControlType
tramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUME
eCOMMAND_SET_DEVICE_VOLUME
) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
eCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene chiamato
Versione 1.1.0
5 luglio 2023
- Libreria comune:
- Aggiungi il motivo di eliminazione per il percorso audio non adatto e riproduci quando è pronto cambia il motivo per la soppressione troppo a 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
- Consente di aggiungere metodi di sovraccarico al player che consentono 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 da remoto. - Aggiungi
Player.replaceMediaItem(s)
come scorciatoia per aggiungere e rimuovere gli elementi nella stessa posizione (#8046).
- ExoPlayer:
- Consenti a ExoPlayer di controllare i metodi relativi al volume del dispositivo solo se
esplicitamente attivati. Utilizza
ExoPlayer.Builder.setDeviceVolumeControlEnabled
per avere accesso a:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
esetDeviceVolume(int, int)
increaseDeviceVolume(int)
eincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
edecreaseDeviceVolume(int, int)
- Aggiungi
FilteringMediaSource
che consente di filtrare i tipi di tracce disponibili da unMediaSource
. - Aggiungi il supporto per l'inclusione dei dati 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 API:- Il logging CMCD è disattivato 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 personalizzato.
- Il logging CMCD è disattivato 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 video. - Aggiorna
SampleQueue
per archiviaresourceId
comelong
anziché comeint
. Questa operazione modifica le firme dei metodi pubbliciSampleQueue.sourceId
eSampleQueue.peekSourceId
. - Aggiungi parametri ai metodi
LoadControl
shouldStartPlayback
eonTracksSelected
per consentire di associare questi metodi alMediaPeriod
pertinente. - Modifica la firma di
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
aggiungendo un parametro della sequenza temporale che contiene i periodi con gli UID utilizzati come chiavi nella mappa. Questa operazione è necessaria per evitare problemi di contemporaneità con i live streaming multiperiodo. - Ritira
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. In alternativa, può essere chiamata la variante dei metodi senzamediaTimeOffsetUs
. Tieni presente che anche per le varianti deprecate, l'offset non viene più aggiunto astartTimeUs
eendTimeUs
degli oggettiMediaLoadData
che vengono inviati dal supervisore. - Rinomina
ExoTrackSelection.blacklist
inexcludeTrack
eisBlacklisted
inisTrackExcluded
. - Correggi il comportamento incoerente tra
ExoPlayer.setMediaItem(s)
eaddMediaItem(s)
quando la chiamata viene chiamata in una playlist vuota.
- Consenti a ExoPlayer di controllare i metodi relativi al volume del dispositivo solo se
esplicitamente attivati. Utilizza
- Trasformatore:
- Rimuovi
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. Usa invece i criteriExoPlayerAssetLoader.Factory(MediaSource.Factory)
eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - Rimuovi
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - È stato corretto un bug per cui la trasformazione poteva bloccarsi (e causare il timeout del muxer) se veniva segnalata la fine dello stream video 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 del B-frame in
DefaultEncoderFactory
perché non funziona su alcuni dispositivi.
- Rimuovi
- Selezione delle tracce:
- Aggiungi l'
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
che è disattivata per impostazione predefinita. Quando l'opzione è attivata,DefaultTrackSelector
attiva una nuova selezione della traccia quando vengono modificate le funzionalità del renderer.
- Aggiungi l'
- Estrattori:
- Audio:
- È stato corretto il bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling è attivato e
AudioProcessors
erano attivi, ad esempio per il taglio senza intervalli (#10847). - Incapsula i frame Opus in pacchetti Ogg in riproduzioni dirette (offload).
- Estrapola la posizione corrente durante il sonno con la programmazione dell'offload.
- Aggiungi
Renderer.release()
eAudioSink.release()
per rilasciare le risorse al termine del ciclo di vita del player. - Ascolta le modifiche alle funzionalità audio in
DefaultAudioSink
. Aggiungi un parametro obbligatoriocontext
nel costruttore diDefaultAudioSink
, con il qualeDefaultAudioSink
verrà registrato come listener nellaAudioCapabilitiesReceiver
e aggiornerà la sua proprietàaudioCapabilities
quando viene comunicato una modifica delle funzionalità. - Propaga le modifiche alle funzionalità audio tramite un nuovo evento
onAudioCapabilitiesChanged
nell'interfacciaAudioSink.Listener
e una nuova interfacciaRendererCapabilities.Listener
che attiva gli eventionRendererCapabilitiesChanged
. - Aggiungi
ChannelMixingAudioProcessor
per applicare il ridimensionamento/il missaggio ai canali audio. - Aggiungi il nuovo valore int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
aDecoderDiscardReasons
per ignorare il decoder audio quando la modalità di bypass è possibile dopo la modifica delle funzionalità audio. - Aggiungi il supporto della riproduzione diretta per DTS Express e DTS:X (#335).
- È stato corretto il bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling è attivato e
- Video:
- Imposta
MediaCodecVideoRenderer
nei report perVideoSize
con larghezza e altezza pari a 0 quando il renderer è disattivato.Player.Listener.onVideoSizeChanged
viene richiamata 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 quando non sono ancora state stabilite le dimensioni della traccia video supportata.
- Imposta
- DRM:
- Riduci la visibilità di diversi metodi solo per uso interno su
DefaultDrmSession
che non si prevede vengano chiamati 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 gli stream DASH in tempo reale per più periodi per l'inserimento di annunci dinamici. Tieni presente che l'implementazione corrente non supporta ancora la ricerca nei live streaming (#10912).
- È stato corretto un bug per cui veniva inserito un nuovo gruppo di annunci nei live streaming perché la posizione dei contenuti calcolata in sequenze temporali consecutive varia leggermente.
- Sessione:
- Aggiungi il metodo helper
MediaSession.getControllerForCurrentRequest
per ottenere informazioni sul controller che attualmente chiama un metodoPlayer
. - Aggiungi
androidx.media3.session.MediaButtonReceiver
per consentire alle app di implementare la ripresa della riproduzione con eventi relativi al pulsante multimediale inviati, ad esempio, da cuffie Bluetooth (#167). - Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItems
per consentire il trasferimento deiMediaItems
richiesti aPlayer
se hannoLocalConfiguration
(ad es. URI) (#282). - Aggiungere i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItems
per consentire il trasferimento deiMediaItems
richiesti aPlayer
se hannoLocalConfiguration
(ad es. URI) (#282). - Aggiungere i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi il metodo helper
- Interfaccia utente:
- Aggiungi i metodi Util
shouldShowPlayButton
ehandlePlayPauseButtonAction
per scrivere elementi UI personalizzati con un pulsante di riproduzione/pausa.
- Aggiungi i metodi Util
- Estensione RTSP:
- Estensione DASH:
- Rimuovi lo scarto del tempo dei media da
MediaLoadData.startTimeMs
eMediaLoadData.endTimeMs
per gli stream DASH di più periodi. - È stato corretto un bug per cui la ripreparazione di una fonte multimediale Dash dal vivo per più periodi
generava un
IndexOutOfBoundsException
(#10838).
- Rimuovi lo scarto del tempo dei media da
- Estensione HLS:
- Aggiungi
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
per impostare un timeout per il thread di caricamento in modo da attendere l'inizializzazione diTimestampAdjuster
. Se l'inizializzazione non viene completata prima del timeout, viene restituito unPlaybackException
per evitare che la riproduzione si blocchi all'infinito. Per impostazione predefinita, il timeout è impostato su zero (#323).
- Aggiungi
- Utilità di prova:
- Verifica l'insensibilità alle maiuscole dello schema URI in
DataSourceContractTest
.
- Verifica l'insensibilità alle maiuscole dello schema URI in
- Rimuovi i simboli ritirati:
- Rimuovi i costruttori
DefaultAudioSink
, usa inveceDefaultAudioSink.Builder
. - Rimuovi
HlsMasterPlaylist
, usa inveceHlsMultivariantPlaylist
. - Rimuovi
Player.stop(boolean)
. Usa invecePlayer.stop()
ePlayer.clearMediaItems()
(sereset
ètrue
). - Rimuovi due costruttori
SimpleCache
deprecati, utilizza un costruttore non deprecato che utilizza invece unDatabaseProvider
per migliorare le prestazioni. - Rimuovi il costruttore
DefaultBandwidthMeter
e utilizzaDefaultBandwidthMeter.Builder
. - Rimuovi i costruttori
DefaultDrmSessionManager
e usaDefaultDrmSessionManager.Builder
. - Rimuovi due costruttori
HttpDataSource.InvalidResponseCodeException
deprecati, utilizza un costruttore non deprecato che accetta campi aggiuntivi(cause
,responseBody
) per migliorare il logging degli errori. - Rimuovi
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
eDownloadHelper.forSmoothStreaming
, usaDownloadHelper.forMediaItem
. - Rimuovi il costruttore
DownloadService
deprecato, utilizzane uno non deprecato che includa l'opzione per fornire un parametrochannelDescriptionResourceId
. - Rimuovi le costanti stringa deprecate per i set di caratteri (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
eUTF16LE_NAME
), utilizza i set di caratteri Kotlin del pacchettokotlin.text
,java.nio.charset.StandardCharsets
ocom.google.common.base.Charsets
. - Rimuovi il costruttore
WorkManagerScheduler
deprecato, utilizza un costruttore non deprecato che includa l'opzione per fornire un parametroContext
. - Rimuovi i metodi 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
. Utilizza invece i metodiFormat.buildUpon()
e setter. - Rimuovi l'elemento
ExoPlayer.retry()
deprecato, utilizza inveceprepare()
. - Rimuovi il costruttore zero-arg
DefaultTrackSelector
deprecato, usa inveceDefaultTrackSelector(Context)
. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato, usa inveceOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Rimuovi il costruttore
DownloadManager
deprecato, utilizza il costruttore che utilizza unExecutor
. - Rimuovi i costruttori
Cue
deprecati e usaCue.Builder
. - Rimuovi il costruttore
OfflineLicenseHelper
deprecato, usa inveceOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Rimuovi quattro metodi
AnalyticsListener
deprecati:onDecoderEnabled
, usa inveceonAudioEnabled
e/oonVideoEnabled
.onDecoderInitialized
, usaonAudioDecoderInitialized
e/oonVideoDecoderInitialized
.onDecoderInputFormatChanged
, usa inveceonAudioInputFormatChanged
e/oonVideoInputFormatChanged
.onDecoderDisabled
, usa inveceonAudioDisabled
e/oonVideoDisabled
.
- Rimuovi
Player.Listener.onSeekProcessed
eAnalyticsListener.onSeekProcessed
deprecati, utilizza inveceonPositionDiscontinuity
conDISCONTINUITY_REASON_SEEK
. - Rimuovi
ExoPlayer.setHandleWakeLock(boolean)
, utilizza invecesetWakeMode(int)
. - Rimuovi
DefaultLoadControl.Builder.createDefaultLoadControl()
deprecato, utilizza invecebuild()
. - Rimuovi l'elemento
MediaItem.PlaybackProperties
deprecato, utilizzaMediaItem.LocalConfiguration
al suo posto. Il campo obsoletoMediaItem.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
Viene rilasciato androidx.media3:media3-*:1.0.2
.
La versione 1.0.2 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.7.
Questa release contiene le seguenti modifiche rispetto alla release 1.0.1:
- Libreria di base:
- Aggiungi
Buffer.isLastSample()
che indica seBuffer
contiene la segnalazioneC.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 il campione alla fine dello stream. (N. 11079).
- Aggiungi
- Estrattori:
- Correggi l'analisi di H.265 SPS nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP ed MP4 (#303).
- Testo:
- SSA: aggiungi il supporto per i file UTF-16 se iniziano con un contrassegno di ordine byte (#319).
- Sessione:
- Risolvi il problema per cui
MediaController
non aggiorna i comandi disponibili quando connesso a unMediaSessionCompat
legacy che aggiorna le sue azioni. - È stato corretto il bug che impediva all'elemento
MediaLibraryService
di restituire un valore nullo per una chiamata dall'interfaccia utente di sistema aCallback.onGetLibraryRoot
conparams.isRecent == true
sull'API 30 (#355). - Correggi la perdita di memoria di
MediaSessionService
oMediaLibraryService
(#346). - Correzione del bug per cui un aggiornamento combinato di
Timeline
e della posizione in unMediaSession
potrebbe causare la generazione di unIllegalStateException
da parte di unMediaController
.
- Risolvi il problema per cui
Versione 1.0.1
18 aprile 2023
Viene rilasciato androidx.media3:media3-*:1.0.1
.
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 si cerca la posizione predefinita (#11051).
- È stato corretto il bug per cui stream di esempio vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
- Sessione:
- È stato corretto il bug per cui più elementi di coda identici pubblicati da un elemento
MediaSessionCompat
legacy generavano un'eccezione inMediaController
(#290). - Aggiungi l'inoltro mancante di
MediaSession.broadcastCustomCommand
alla legacyMediaControllerCompat.Callback.onSessionEvent
(#293). - Correggere il bug per cui la chiamata a
MediaSession.setPlayer
non aggiorna i comandi disponibili. - Risolvi il problema a causa del quale le istanze
TrackSelectionOverride
inviate da unMediaController
vengono ignorate se fanno riferimento a un gruppo conFormat.metadata
(#296). - Risolvi il problema per cui
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
deve essere disponibile per accedere ai metadati tramite la versione precedente diMediaSessionCompat
. - Risolvi il problema per cui le istanze
MediaSession
in un thread in background causano arresti anomali se utilizzate inMediaSessionService
(#318). - È stato risolto il problema per cui la libreria dichiarava un ricevitore di pulsanti multimediali senza che l'app lo avesse previsto (#314).
- È stato corretto il bug per cui più elementi di coda identici pubblicati da un elemento
- DASH:
- È stata corretta la gestione delle sequenze temporali dei segmenti vuote (#11014).
- Il feed RTSP:
- Riprova con TCP se la configurazione RTSP con UDP non va a buon fine e causa l'errore RTSP 461 Non supportato (#11069).
Versione 1.0.0
22 marzo 2023
Viene rilasciato androidx.media3:media3-*:1.0.0
.
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
Viene rilasciato androidx.media3:media3-*:1.0.0-rc02
.
La versione 1.0.0-rc02 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.4.
- Libreria di base:
- Download:
- Modifica al massimo l'ora di inizio di due segmenti da unire, configurabili in
SegmentDownloader
e nelle sottoclassi (#248).
- Modifica al massimo l'ora di inizio 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 causa che gli stream AVC a 60 f/s siano contrassegnati come non supportati (#10898).
- Risolvi i problemi di prestazioni durante il rilascio del frame durante la riproduzione di contenuti multimediali con una frequenza fotogrammi di gran lunga superiore a quella di aggiornamento dello schermo.
- Mappa il formato HEVC HDR10 a
- Trasmetti:
- Correggi i problemi relativi a
STATE_IDLE
temporaneo durante la transizione da un elemento multimediale (#245).
- Correggi i problemi relativi a
- Il feed RTSP:
- Rileva l'eccezione illegaleArgumentException generata durante l'analisi dei messaggi di risposta RTSP non validi (#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:
- Correggere 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.
- Correggere un bug che impediva l'avvio degli stream DAI senza annunci perché il primo evento
Versione 1.0.0-rc01
16 febbraio 2023
Viene rilasciato androidx.media3:media3-*:1.0.0-rc01
.
La versione 1.0.0-rc01 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.3.
- Libreria di base:
- Regola la logica di ordinamento del decoder del renderer in modo da mantenere le preferenze di
MediaCodecSelector
, anche se un decoder segnala che potrebbe non essere in grado di riprodurre i contenuti multimediali con prestazioni elevate. Ad esempio, con il selettore predefinito, il decoder hardware con solo supporto funzionale sarà preferito rispetto al decoder software che supporta completamente il formato (#10604). - Aggiungi
ExoPlayer.Builder.setPlaybackLooper
che imposti un thread di riproduzione preesistente per una nuova istanza ExoPlayer. - Consenti la cancellazione degli helper della gestione dei download (#10776).
- Aggiungi il parametro a
BasePlayer.seekTo
per indicare anche il comando utilizzato per la ricerca. - Utilizza il tema durante il caricamento dei drawable sull'API 21 e versioni successive (#220).
- Aggiungi
ConcatenatingMediaSource2
che consente di combinare più elementi multimediali in un'unica finestra (#247).
- Regola la logica di ordinamento del decoder del renderer in modo da mantenere le preferenze di
- Estrattori:
- Genera un
ParserException
anziché unNullPointerException
se nella tabella di esempio (stbl) manca una descrizione del campione richiesta (stsd) durante l'analisi degli atomi di trak. - Salta correttamente gli esempi quando cerchi direttamente su un frame di sincronizzazione in fMP4 (#10941).
- Genera un
- Audio:
- Utilizza la velocità in bit del formato audio compresso per calcolare la dimensione minima del buffer
per
AudioTrack
nelle riproduzioni dirette (passthrough).
- Utilizza la velocità in bit del formato audio compresso per calcolare la dimensione minima del buffer
per
- Testo:
- Correggi l'errore
TextRenderer
che trasmette un indice non valido (negativo) aSubtitle.getEventTime
se un file dei sottotitoli non contiene segnali. - SubRip: aggiungi il supporto per i file UTF-16 se iniziano con un contrassegno di ordine dei byte.
- Correggi l'errore
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituto diMediaMetadata.folderType
. Il tipo di cartella verrà deprecato nella prossima release.
- DASH:
- Aggiungi l'analisi completa per i set di adattamento dell'immagine, incluso il numero di riquadri (#3752).
- Interfaccia utente:
- Correggi l'elemento
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
deprecato per assicurarti che le modifiche di visibilità vengano passate al listener registrato (#229). - Correggi l'ordine dei controlli centrali del player in
PlayerView
quando utilizzi un layout da destra a sinistra (RTL) (#227).
- Correggi l'elemento
- Sessione:
- Aggiungi l'astratto
SimpleBasePlayer
per facilitare l'implementazione dell'interfaccia diPlayer
per player personalizzati. - Aggiungi il metodo helper per convertire il token di sessione della piattaforma in Media3
SessionToken
(#171). - Utilizza
onMediaMetadataChanged
per attivare gli aggiornamenti della sessione multimediale della piattaforma (#219). - Aggiungi la sessione multimediale come argomento di
getMediaButtons()
diDefaultMediaNotificationProvider
e utilizza elenchi immutabili per chiarezza (#216). - Aggiungi il listener di callback
onSetMediaItems
per fornire i mezzi per modificare/impostare l'elencoMediaItem
, l'indice e la posizione iniziali per sessione prima di impostare sul player (#156). - Evita il rilevamento del doppio tocco per eventi relativi a pulsanti multimediali non Bluetooth (#233).
- Rendi
QueueTimeline
più affidabile in caso di stato di sessione legacy non sicuro (#241).
- Aggiungi l'astratto
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaType
per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati. - Aggiungi
MediaMetadata.isBrowsable
come sostituto diMediaMetadata.folderType
. Il tipo di cartella verrà deprecato nella prossima release.
- Estensione Cast:
- Aggiorna l'SDK Cast alla 21.2.0.
- Estensione IMA:
- Rimuovi il listener del player
ImaServerSideAdInsertionMediaSource
dal thread dell'applicazione per evitare problemi di thread. - Aggiungi una proprietà
focusSkipButtonWhenAvailable
aImaServerSideAdInsertionMediaSource.AdsLoader.Builder
per richiedere di impostare lo stato attivo del pulsante Salta sui dispositivi TV e impostarlo su true per impostazione predefinita. - Aggiungi un metodo
focusSkipButton()
aImaServerSideAdInsertionMediaSource.AdsLoader
per richiedere in modo programmatico di impostare lo stato attivo sul pulsante Salta. - Passa alla versione 3.29.0 dell'SDK IMA.
- Rimuovi il listener del player
- App demo:
- Richiedi l'autorizzazione di accesso alle notifiche di download in fase di runtime (#10884).
Versione 1.0.0-beta03
22 novembre 2022
Viene rilasciato androidx.media3:media3-*:1.0.0-beta03
.
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 le tracce attualmente selezionate (#2518). - Aggiungi
WrappingMediaSource
per semplificare il wrapping di un singoloMediaSource
(#7279). - Elimina il back buffer prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
- Chiudi il blocco "doSomeWork" di tracciamento quando l'offload è abilitato.
- 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 restituisce le dimensioni della superficie su cui viene visualizzato il video. - È stato corretto il bug per cui la rimozione dei listener durante la release del player potrebbe causare un errore
IllegalStateException
(#10758).
- Aggiungi
- Creazione:
- Applica almeno
compileSdkVersion
per evitare errori di compilazione (#10684). - Evita di pubblicare il blocco se incluso in un'altra build di Gradle.
- Applica almeno
- Selezione delle tracce:
- Preferisci altre tracce a Dolby Vision se il display non la supporta. (#8944).
- Download:
- Correggi il potenziale loop infinito in
ProgressiveDownloader
causato da download e riproduzione simultanei con lo stessoPriorityTaskManager
(#10570). - Fai in modo che le notifiche di download siano visualizzate 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 decodificatore alternativo per Dolby Vision se il display non lo supporta. (#9794).
- Audio:
- Utilizza
SingleThreadExecutor
per il rilascio diAudioTrack
istanze ed evitare errori di OutOfMemory quando vengono rilasciati più player contemporaneamente (#10057). - Aggiunge
AudioOffloadListener.onExperimentalOffloadedPlayback
per lo stato di offload AudioTrack. (N. 134). - Rendi
AudioTrackBufferSizeProvider
un'interfaccia pubblica. - Aggiungi
ExoPlayer.setPreferredAudioDevice
per impostare il dispositivo di uscita audio preferito (#135). - Rinomina
androidx.media3.exoplayer.audio.AudioProcessor
inandroidx.media3.common.audio.AudioProcessor
. - Mappare 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).
- Utilizza
- Metadati:
- Ora puoi 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 sincronizzato con la posizione del player.
- Ora puoi 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: garantire che i comandi di Service Switch nel campo 2 siano gestiti correttamente (#10666).
- DASH:
- Analizza
EventStream.presentationTimeOffset
dai manifest (#10460).
- Analizza
- Interfaccia utente:
- Utilizza gli override correnti del player come predefiniti in
TrackSelectionDialogBuilder
(#10429).
- Utilizza gli override correnti del player come predefiniti 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. Lo strumento per la creazione può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzato dal fornitore. Inoltre, aggiungi il metodoDefaultMediaNotificationProvider.setSmallIcon(int)
per impostare la piccola icona delle notifiche. (N. 104). - Assicurati che i comandi inviati prima di
MediaController.release()
non vengano eliminati (#99). SimpleBitmapLoader
può caricare bitmap dafile://
URI (#108).- Correggi l'asserzione che impedisce a
MediaController
di cercare un annuncio in un periodo (#122). - Al termine della riproduzione, lo
MediaSessionService
viene interrotto dal primo piano e viene mostrata una notifica per riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112). - Non avviare un servizio in primo piano con un intent in attesa di pausa (#167).
- Nascondi manualmente il "badge" associato alla notifica creata da
DefaultNotificationProvider
nell'API 26 e nell'API 27 (il badge viene nascosto automaticamente nell'API 28 e versioni successive) (#131). - È stato corretto il bug per cui una seconda connessione binder da una versione precedente di MediaSession a un MediaController di Media3 causava eccezioni illegali (#49).
- Il feed RTSP:
- IMA:
- Aggiungi il timeout per il caricamento delle informazioni sugli annunci per 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 arrivi alla 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 richiesti per collegare le librerie FFmpeg a 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
quando controlli la riproduzione con unMediaController
(#142).
- Implementa
- Trasformatore:
- Aggiungi il timer watchdog del muxer per rilevare quando la generazione di un campione di output è troppo lenta.
- Rimuovi i simboli ritirati:
- Rimuovi
Transformer.Builder.setOutputMimeType(String)
. Questa funzionalità è stata rimossa. Se si utilizza il muxer predefinito, il tipo MIME sarà sempre MP4.
- Rimuovi
Versione 1.0.0-beta02
21 luglio 2022
Viene rilasciato androidx.media3:media3-*:1.0.0-beta02
.
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
restituisci una chiamata aPlayer.Listener#onTimelineChanged
conreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - Per i contenuti multimediali progressivi, includi solo le tracce selezionate nella posizione del buffer (#10361).
- Consenti logger personalizzato per tutti gli output di log di ExoPlayer (#9752).
- È stato corretto l'implementazione di
setDataSourceFactory
inDefaultMediaSourceFactory
, che in alcuni casi non era funzionante (#116).
- Assicurati che la modifica di
- Estrattori:
- DASH:
- Analizza l'URL della licenza ClearKey dai file manifest (#10246).
- Interfaccia utente:
- Assicurati che TalkBack pronunci l'opzione relativa alla velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
- Il feed RTSP:
- Aggiungi la gestione dei pacchetti frammentati VP8 (#110).
- Estensione Leanback:
- Ascolta le modifiche
playWhenReady
inLeanbackAdapter
(10420).
- Ascolta le modifiche
- Trasmetti:
Versione 1.0.0-beta01
16 giugno 2022
Viene rilasciato androidx.media3:media3-*:1.0.0-beta01
.
La versione 1.0.0-beta01 contiene questi commit.
Corrisponde alla release ExoPlayer 2.18.0.
- Libreria di base:
- Attiva il supporto della diagnostica della piattaforma Android tramite
MediaMetricsManager
. ExoPlayer inoltrerà gli eventi di riproduzione e i dati sulle prestazioni alla piattaforma, per fornire informazioni sulle prestazioni di sistema e di debug sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostica è stata attivata dall'utente del dispositivo. Le app possono disattivare la partecipazione alla diagnostica della piattaforma per ExoPlayer conExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Correzione del bug a causa del quale le tracce vengono reimpostate troppo spesso quando si utilizza
MergingMediaSource
, ad esempio durante il caricamento laterale dei sottotitoli e la modifica dei sottotitoli selezionati a metà riproduzione (#10248). - Interrompi il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Per queste riproduzioni si presume una rete 4G.
- Non consentire il passaggio di
null
aMediaSource.Factory.setDrmSessionManagerProvider
eMediaSource.Factory.setLoadErrorHandlingPolicy
. Le istanze diDefaultDrmSessionManagerProvider
eDefaultLoadErrorHandlingPolicy
possono essere trasmesse esplicitamente, se necessario. - Aggiungi
MediaItem.RequestMetadata
per rappresentare i metadati necessari per riprodurre 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 consentire l'impostazione di un singolo elemento.
- Attiva il supporto della diagnostica della piattaforma Android tramite
- Selezione delle tracce:
- Suddividi 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
. È incluso l'annullamento della deprecazione del nome del metodoPlayer.Listener.onTracksChanged
, ma con diversi tipi di parametri. - Modifica
DefaultTrackSelector.buildUponParameters
eDefaultTrackSelector.Parameters.buildUpon
per restituireDefaultTrackSelector.Parameters.Builder
anziché il valoreDefaultTrackSelector.ParametersBuilder
deprecato. - Aggiungi l'
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
che è abilitata per impostazione predefinita. Se attivata,DefaultTrackSelector
darà la priorità alle tracce audio con numero di canali che non supera le funzionalità di output del dispositivo. Sui dispositivi portatili,DefaultTrackSelector
darà la preferenza ai formati stereo/mono rispetto all'audio multicanale, a meno che il formato multicanale non sia spazializzato (Android 12L e versioni successive) o non sia un formato audio Dolby surround. Inoltre, sui dispositivi che supportano la spazializzazione audio,DefaultTrackSelector
monitorerà le modifiche nelle proprietà dello Strumento di Spaziatura e attiverà una nuova selezione di tracce su queste ultime. 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
.
- Suddividi la classe
- Video:
- Rinomina
DummySurface
inPlaceholderSurface
. - Aggiungi il supporto AV1 a
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- Rinomina
- Audio:
- Utilizza il decodificatore 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 che la verifica ART sia lenta nell'API < 21. - Esegui una query sulla piattaforma (API 29 e versioni successive) o supponi il conteggio dei canali di codifica audio per il passthrough audio se il conteggio dei canali audio del formato non è impostato, cosa che si verifica con la preparazione senza chunkless HLS (10204).
- Configura
AudioTrack
con la maschera del canaleAudioFormat.CHANNEL_OUT_7POINT1POINT4
se il decoder produce audio PCM a 12 canali (#10322.
- DRM
- Assicurati che la sessione DRM sia sempre aggiornata correttamente quando cerchi subito dopo una modifica del formato (10274).
- Testo:
- Modifica
Player.getCurrentCues()
per restituireCueGroup
anzichéList<Cue>
. - SSA: supporta l'impostazione di stile
OutlineColour
quandoBorderStyle == 3
(ad es.OutlineColour
imposta lo sfondo del segnale) (#8435). - CEA-708: analizza i dati in più blocchi di servizi e ignora i blocchi non associati al numero di servizio attualmente selezionato.
- Rimuovi l'elemento
RawCcExtractor
, che veniva utilizzato soltanto per gestire un formato dei sottotitoli interno a Google.
- Modifica
- Estrattori:
- Interfaccia utente:
- Correggi il recapito degli eventi ai
OnClickListener
impostati perPlayerView
nel caso in cuiuseController=false
(#9605). Correggi anche la pubblicazione degli eventi inOnLongClickListener
per tutte le configurazioni delle viste. - Correzione del trattamento errato di una sequenza di eventi touch che escono dai limiti di
PlayerView
prima diACTION_UP
come un clic (#9861). - Risolvi il problema di accessibilità di
PlayerView
per cui il tocco potrebbe attivare/disattivare la riproduzione anziché nascondere i controlli (#8627). - Riscrivi
TrackSelectionView
eTrackSelectionDialogBuilder
in modo che siano compatibili con l'interfacciaPlayer
anziché conExoPlayer
. In questo modo le viste possono essere utilizzate con altre implementazioniPlayer
e rimuove la dipendenza dal modulo UI al modulo ExoPlayer. Si tratta di un cambiamento radicale. - Non mostrare tracce di testo forzate nel selettore della traccia
PlayerView
e mantene selezionata una traccia di testo forzata adatta se viene selezionata l'opzione "Nessuna" (#9432).
- Correggi il recapito degli eventi ai
- DASH:
- Analizza il conteggio dei canali dagli elementi DTS
AudioChannelConfiguration
. In questo modo viene riattivato il passthrough audio per gli stream DTS (#10159). - Non consentire il passaggio di
null
aDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
possono essere trasmesse in modo esplicito, se necessario.
- Analizza il conteggio dei canali dagli elementi DTS
- HLS:
- Utilizza la preparazione di blocchi di riserva se l'attributo CODECS della playlist non contiene il codec audio (#10065).
- Non consentire la trasmissione di
null
aHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
eHlsMediaSource.Factory.setPlaylistTrackerFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
o un riferimento aDefaultHlsPlaylistTracker.FACTORY
possono essere trasmesse esplicitamente se necessario.
- Streaming fluido:
- Non consentire il passaggio di
null
aSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Le istanze diDefaultCompositeSequenceableLoaderFactory
possono essere passate esplicitamente, se necessario.
- Non consentire il passaggio di
- Il feed 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 monocanale e senza interleaving. Il payload RTP AMR composto non è supportato. (N. 46)
- Aggiungi un lettore RTP per VP8 (#47).
- Aggiungi un lettore RTP per WAV (#56).
- Correggi l'intestazione dell'autorizzazione di base RTSP. (N. 9544).
- Interrompi la verifica dei campi SDP obbligatori in quanto non sono necessari da ExoPlayer (#10049).
- Eccezione selezionata durante l'analisi dei tempi RTSP (#10165).
- Aggiungi un lettore RTP per VP9 (#47).
- Aggiungi un lettore RTP per OPUS (#53).
- Fonti dati:
- Rinomina
DummyDataSource
inPlaceholderDataSource
. - Soluzione alternativa per la gestione dell'interruzione OkHttp.
- Rinomina
- Sessione:
- Sostituisci
MediaSession.MediaItemFiller
conMediaSession.Callback.onAddMediaItems
per consentire la risoluzione asincrona delle richieste. - Supporta i metodi
setMediaItems(s)
quandoMediaController
si connette a una sessione multimediale precedente. - Rimuovi
MediaController.setMediaUri
eMediaSession.Callback.onSetMediaUri
. La stessa funzionalità può essere ottenuta utilizzandoMediaController.setMediaItem
eMediaSession.Callback.onAddMediaItems
. - Inoltra le chiamate
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 degli artwork. - Aggiungi
MediaSession.setCustomLayout()
per fornire la compatibilità con le versioni precedenti della sessione precedente. - Aggiungi
MediaSession.setSessionExtras()
per fornire parità di funzionalità con la sessione precedente. - Rinomina
MediaSession.MediaSessionCallback
inMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
eMediaSession.Builder.setSessionCallback
insetCallback
. - Correggi NPE in
MediaControllerImplLegacy
(#59). - Aggiornare le informazioni sulla posizione della sessione in caso di modifica della sequenza temporale(#51).
- È stato corretto il problema di NPE in
MediaControllerImplBase
dopo aver rilasciato il controller (#74).
- Sostituisci
- Riproduzione di annunci / IMA:
- Riduci la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms per rispettare i consigli del Media Rating Council (MRC).
- Estensione FFmpeg:
- Aggiorna la versione di CMake a
3.21.0+
per evitare un bug di CMake che causa la sincronizzazione di Gradle di AndroidStudio non riuscita (#9933).
- Aggiorna la versione di CMake a
- Rimuovi i simboli ritirati:
- Rimuovi
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. Usa invecePlayer.Listener.onTracksChanged(Tracks)
. - Rimuovi
Player.getCurrentTrackGroups
ePlayer.getCurrentTrackSelections
. Usa invecePlayer.getCurrentTracks
. Puoi anche continuare a utilizzareExoPlayer.getCurrentTrackGroups
eExoPlayer.getCurrentTrackSelections
, anche se questi metodi rimangono deprecati. - Rimuovi le costanti
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
eDEFAULT_TRACK_SELECTOR_PARAMETERS
. Se possibile, utilizzagetDefaultTrackSelectorParameters(Context)
eDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
negli altri casi. - Rimuovi il costruttore
DefaultTrackSelector(ExoTrackSelection.Factory)
. Usa invece il criterioDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Rimuovi
Transformer.Builder.setContext
.Context
deve essere invece passato al costruttoreTransformer.Builder
.
- Rimuovi
Versione 1.0.0-alpha03
14 marzo 2022
Viene rilasciato androidx.media3:media3-*:1.0.0-alpha03
.
La versione 1.0.0-alpha03 contiene questi commit.
Corrisponde alla release ExoPlayer 2.17.1.
- Audio:
- È stato corretto il problema di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
- Estrattori:
- FMP4: è stato risolto il problema per cui i metadati di esempio di emsg venivano generati nell'ordine errato per gli stream contenenti atomi di emsg sia v0 che v1 (#9996).
- Testo:
- Correggi l'interazione tra
SingleSampleMediaSource.Factory.setTrackId
eMediaItem.SubtitleConfiguration.Builder.setId
per assegnare la priorità al campoSubtitleConfiguration
e utilizza il valoreFactory
se non è impostato (#10016).
- Correggi l'interazione tra
- Riproduzione dell'annuncio:
- Correggi le interruzioni audio tra i periodi dell'annuncio negli stream SSAI HLS dal vivo.
Versione 1.0.0-alpha02
2 marzo 2022
Viene rilasciato androidx.media3:media3-*:1.0.0-alpha02
.
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 eseguono l'overridebuildVideoRenderers()
obuildAudioRenderers()
possano accedere alla fabbrica dell'adattatore di codec e passarla aMediaCodecRenderer
istanze che creano. - Propaga i campi intestazione ICY
name
egenre
rispettivamente aMediaMetadata.station
eMediaMetadata.genre
in modo che raggiungano l'app tramitePlayer.Listener.onMediaMetadataChanged()
(#9677). - Rimuovi le chiavi nulle da
DefaultHttpDataSource#getResponseHeaders
. - Sospendi e riprova quando la creazione di un'istanza
MediaCodec
non riesce. Ciò consente di risolvere un problema che si verifica su alcuni dispositivi durante il passaggio di una superficie 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 di Maven (#8353).
- Disattiva la regolazione automatica della velocità per i live streaming che non hanno funzionalità a bassa latenza né una richiesta dell'utente che ne imposta la velocità (#9329).
- Rinomina
DecoderCounters#inputBufferCount
inqueuedInputBufferCount
. - Imposta
SimpleExoPlayer.renderers
come privato. È possibile accedere ai renderer tramiteExoPlayer.getRenderer
. - Sono stati aggiornati alcuni valori costanti di
AnalyticsListener.EventFlags
per farli corrispondere ai valori inPlayer.EventFlags
. - Suddividi
AnalyticsCollector
in un'interfaccia e in un'implementazione predefinita per consentire che venga eliminato da R8 se non è necessario da un'app.
- Aggiungi il metodo protetto
- Selezione delle tracce:
- Supporta i flag dei ruoli video preferiti nella selezione delle tracce (#9402).
- Aggiorna la logica di selezione delle tracce video in modo che tenga conto dei tipi MIME preferiti e dei flag dei ruoli quando selezioni più tracce video per l'adattamento (#9519).
- Aggiorna la logica di selezione delle tracce audio e video in modo da scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto hardware e decodificatore (#9565).
- Aggiorna la logica di selezione delle tracce video per preferire codec più efficienti se sono supportati più codec da decoder primari con accelerazione hardware (#4835).
- Preferisci le preferenze per i contenuti audio (ad esempio, la traccia audio "predefinita" o una traccia corrispondente alla lingua delle impostazioni internazionali di sistema) rispetto ai vincoli di selezione delle tracce tecniche (ad esempio, tipo MIME preferito o numero massimo di canali).
- È stato risolto il problema di selezione delle tracce in cui la sostituzione di un gruppo di tracce non disattivava altri gruppi di tracce dello stesso tipo (#9675).
- È stato corretto il problema di selezione delle tracce per cui una combinazione di override delle tracce non vuote e vuote non veniva applicata correttamente (#9649).
- Non consentire
TrackGroup
duplicati in unTrackGroupArray
. ITrackGroup
possono essere sempre distinguibili impostando unid
nel costruttoreTrackGroup
. È stato corretto un arresto anomalo che si verificava quando si riprendeva la riproduzione dopo aver messo in background l'app con un override della traccia attiva (#9718). - Modifica la logica in
AdaptiveTrackSelection
per consentire un aumento della qualità in caso di larghezza di banda di rete sufficiente, anche se la riproduzione è molto vicina al limite live (#9784).
- Video:
- Correggi la logica di fallback del decoder per Dolby Vision per utilizzare un decoder H264/H265 compatibile, se necessario.
- Audio:
- Correggi la logica di fallback del decoder per Dolby Atmos (E-AC3-JOC) in modo da utilizzare un decoder E-AC3 compatibile, se necessario.
- Modifica le API
AudioCapabilities
per richiedere il passaggio esplicitoAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
anzichénull
. - Consenti la personalizzazione del calcolo della dimensione del buffer
AudioTrack
inserendo unAudioTrackBufferSizeProvider
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). - Aggiungi il supporto di base per i sottotitoli WebVTT nei contenitori Matroska (#9886).
- Impedisci a
Cea708Decoder
di leggere più di quelle dichiarate di un blocco di servizi.
- Aggiungi un campo
- DRM:
- Rimuovi
playbackLooper
daDrmSessionManager.(pre)acquireSession
. Quando unDrmSessionManager
viene utilizzato da un'app in unMediaSource
personalizzato, ilplaybackLooper
deve essere trasmesso aDrmSessionManager.setPlayer
.
- Rimuovi
- Riproduzione di annunci / IMA:
- Aggiungi il supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
- Aggiungi un metodo a
AdPlaybackState
per consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615). - Applica una velocità di riproduzione di 1,0 durante la riproduzione degli annunci (#9018).
- È stato risolto il problema per cui il caricamento di un gruppo di annunci non riuscito causava una reimpostazione immediata della riproduzione (#9929).
- Interfaccia utente:
- DASH:
- Aggiungi proprietà essenziali e supplementari analizzate a
Representation
(#9579). - Supporta il ruolo Traccia
forced-subtitle
(#9727). - Smetti di interpretare il ruolo della traccia
main
comeC.SELECTION_FLAG_DEFAULT
. - Correggi la logica di esclusione degli URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
- Supporta URL
MPD.Location
relativi (#9939).
- Aggiungi proprietà essenziali e supplementari analizzate a
- HLS:
- Compila correttamente
Format.label
per gli stream HLS solo audio (#9608). - Usa la preparazione senza chunkless per impostazione predefinita per migliorare i tempi di avvio. Se le tue
rappresentazioni contengono tracce di sottotitoli codificati con Mux che non sono dichiarate
nella playlist principale, devi aggiungerle alla playlist principale per renderle
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).
- Compila correttamente
- Il feed 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).
- Da gestire quando la sincronizzazione della traccia RTSP non è disponibile (#9775).
- Ignora i valori di intestazione RTP-Info non validi (#9619).
- Fornisci un'API client per eseguire l'override di
- Trasformatore:
- Aumenta la versione minima dell'API richiesta a 21.
TransformationException
ora viene utilizzato per descrivere gli errori che si verificano durante una trasformazione.- Aggiungi
TransformationRequest
per specificare le opzioni di trasformazione. - Consenti la registrazione di più listener.
- È stato risolto il problema del blocco del trasformatore quando l'output del codec veniva letto parzialmente.
- Correggi i potenziali NPE in
Transformer.getProgress
durante il rilascio dei lanci del muxer. - Aggiungi un'app demo per applicare le trasformazioni.
- Estensione MediaSession:
- Per impostazione predefinita, ora
MediaSessionConnector
cancella la playlist in pausa. Le app che vogliono conservare la playlist possono chiamaresetClearMediaItemsOnStop(false)
sul connettore.
- Per impostazione predefinita, ora
- Estensione Cast:
- Estensione FFmpeg:
- Fai in modo che
build_ffmpeg.sh
dipenda dai bin util della LLVM anziché da GNU (#9933).
- Fai in modo che
- Compatibilità con Android 12:
- Esegui l'upgrade dell'estensione Cast in modo che utilizzi
com.google.android.gms:play-services-cast-framework:20.1.0
. Le versioni precedenti diplay-services-cast-framework
non sono compatibili con le app destinate ad Android 12 e hanno un arresto anomalo con unIllegalArgumentException
durante la creazione diPendingIntent
(#9528).
- Esegui l'upgrade dell'estensione Cast in modo che utilizzi
- 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 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
. Utilizza ExoPlayer 2.16.1 o prima di utilizzareActionFileUpgradeUtil
per unire i file di azione precedenti inDefaultDownloadIndex
. - Rimuovi
ProgressiveMediaSource#setExtractorsFactory
. Usa invece il costruttoreProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. - Rimuovi
ProgressiveMediaSource.Factory#setTag
eProgressiveMediaSource.Factory#setCustomCacheKey
. Usa inveceMediaItem.Builder#setTag
eMediaItem.Builder#setCustomCacheKey
. - Rimuovi i costruttori
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
eDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Usa invece il costruttoreDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
eDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Rimuovi tutti i costruttori
CronetDataSource
pubblici. Usa inveceCronetDataSource.Factory
.
- Rimuovi
- Modifica il seguente valore:
IntDefs
solo in@Target(TYPE_USE)
. Questo potrebbe interrompere la compilazione degli utilizzi in Kotlin, che può essere corretta spostando l'annotazione per annotare il tipo (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(incom.google.android.exoplayer2.ext.flac
pacchetto)@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
Viene rilasciato androidx.media3:media3-*:1.0.0-alpha01
.
La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
Media3 è il nuovo punto di riferimento per le librerie di supporto multimediali, tra cui ExoPlayer. La prima versione alpha contiene le prime implementazioni funzionali delle librerie per l'implementazione di casi d'uso di contenuti multimediali, tra cui:
- ExoPlayer, un media player per Android a livello di applicazione facile da personalizzare ed estendere.
- Funzionalità di sessione multimediale, per l'esposizione e il controllo delle riproduzioni. Questo nuovo
modulo di sessione utilizza la stessa interfaccia
Player
di ExoPlayer. - Componenti dell'interfaccia utente per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
- I moduli aggregano funzionalità in altre librerie da utilizzare con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.
Per maggiori informazioni, consulta il progetto GitHub di Media3.
ExoPlayer era precedentemente ospitato in un progetto GitHub ExoPlayer separato. In Media3, il nome del pacchetto è androidx.media3.exoplayer
. Abbiamo in programma di continuare a mantenere e rilasciare per un po' di tempo il progetto ExoPlayer GitHub, 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 un'integrazione diretta tra player e sessioni multimediali senza la necessità di utilizzare una classe adattatore/connettore.