Media3
| Ultimo aggiornamento | Release stabile | Candidato per la release | Release beta | Release alpha |
|---|---|---|---|---|
| 30 luglio 2025 | 1.8.0 | - | - | - |
Dichiarazione di dipendenze
Per aggiungere una dipendenza da Media3, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle per
la tua app o il tuo modulo:
Alla moda
dependencies { def media3_version = "1.8.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 using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.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 using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare lo strumento di monitoraggio dei problemi di Media3 per trovare risposte a domande, problemi noti e richieste di funzionalità e per segnalare nuovi problemi.
Versione 1.8.0
Versione 1.8.0
30 luglio 2025
La versione 1.8.0 contiene questi commit.
- Libreria comune:
- Aggiungi il supporto per la sostituzione del giocatore in
ForwardingSimpleBasePlayer.
- Aggiungi il supporto per la sostituzione del giocatore in
- ExoPlayer:
- Aggiungi il getter per la modalità di riproduzione casuale all'interfaccia
ExoPlayer(#2522). - Genera un'eccezione in modo più chiaro se si accede a
DefaultAudioSinkda più thread. Se ciò accade a causa di una chiamata aRendererCapabilities.getFormatSupportal di fuori del player, assicurati di chiamare questo metodo nello stesso thread del thread di riproduzione di ExoPlayer o di utilizzare un'istanza diversa da quella utilizzata per la riproduzione (#1191). - È stato corretto il bug per cui i formati audio non stereo sulle TV potrebbero essere contrassegnati come
non supportati da
DefaultTrackSelector. - Assicurati che l'ultimo fotogramma venga visualizzato correttamente quando utilizzi il flag
DECODE_ONLYdi MediaCodec (che è abilitato per impostazione predefinita in modalità di scorrimento). - Aggiungi il supporto per l'utilizzo dell'ID dispositivo virtuale di
Contextpassato aExoPlayer.Builder. - Attiva la pianificazione dinamica per impostazione predefinita in modalità di scrubbing.
- Evita il ricaricamento non necessario di una sorgente quando cerchi la fine di un elemento.
- Utilizza
MediaCodec.BUFFER_FLAG_DECODE_ONLYper impostazione predefinita in modalità di scorrimento. - Genera
IllegalStateExceptionquandoPreloadMediaSourceviene riprodotto da unExoPlayercon un thread di riproduzione diverso dal thread di precaricamento (#2495). - Aggiungi
cloneAndMoveaShuffleModecon un'implementazione predefinita (#2226). - Modifica il comportamento predefinito di
Renderer.getMinDurationToProgressUsin modo che restituisca un valore maggiore se non è necessaria alcuna chiamata arender. - È stato corretto un bug per cui la pianificazione interna ritardava l'ultimo fotogramma durante la ricerca alla fine della riproduzione in pausa. Per ora, la correzione del bug ha effetto solo se
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledè abilitato. - Aggiungi il metodo
ExoPlayer.setScrubbingModeEnabled(boolean). In questo modo, il player viene ottimizzato per molte ricerche frequenti (ad esempio, quando un utente trascina una barra di scorrimento). Il comportamento della modalità di scorrimento può essere personalizzato consetScrubbingModeParameters(..)suExoPlayereExoPlayer.Builder. - Consenti la personalizzazione della tolleranza di ricerca frazionaria in modalità di pulizia.
- Aumenta la velocità di funzionamento del codec in modalità Scrubbing.
- Correzione del bug per cui gli errori di preparazione nei contenuti di
AdsMediaSourcepotrebbero non essere mai segnalati (#2337). - Correzione della perdita di memoria in
MergingMediaSource, ad esempio utilizzata durante il caricamento laterale dei sottotitoli (#2338). - Consenti a
CmcdConfiguration.Factorydi restituirenullper disattivare la registrazione CMCD per elementi multimediali specifici (#2386). - Aumenta la dimensione predefinita del buffer delle immagini da 128 kB (errore di copia e incolla dalle tracce di testo) a 26 MB, una dimensione sufficiente per le immagini Ultra HDR da 50 MP (#2417).
- Aggiungi
PreCacheHelperche consente alle app di pre-memorizzare nella cache un singolo media con posizione iniziale e durata specificate. - Aggiungi il supporto del precaricamento dalla posizione specificata in
DefaultPreloadManager.
- Aggiungi il getter per la modalità di riproduzione casuale all'interfaccia
- Transformer:
- Aggiungi
CodecDbLiteche consente ottimizzazioni specifiche del chipset delle impostazioni di codifica video. - Aggiungi il flag
setEnableCodecDbLiteaDefaultEncoderFactoryper attivare l'ottimizzazione delle impostazioni di CodecDB Lite. Per impostazione predefinita, questo flag è impostato su false. - Il riempimento di un intervallo iniziale (aggiunto tramite
addGap()) con audio silenzioso ora richiede l'impostazione esplicita diexperimentalSetForceAudioTrack(true)inEditedMediaItemSequence.Builder. Se la lacuna si trova al centro della sequenza, questo flag non è obbligatorio. - Sposta l'interfaccia
Muxerdamedia3-transformeramedia3-muxer. - Rendi obbligatoria l'impostazione
MediaItem.Builder().setImageDuration(long)per importare un elemento multimediale come immagine. - Aggiungi
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)che include un elenco di modifiche MP4 durante il taglio per indicare ai giocatori di ignorare i campioni tra il fotogramma chiave prima del punto di inizio del taglio e il punto di inizio del taglio. - Aggiorna l'app demo di composizione per utilizzare Kotlin e Jetpack Compose e aggiungi un
VideoCompositorSettingspersonalizzato per disporre le sequenze in un layout 2x2 o PIP.
- Aggiungi
- Estrattori:
- Analizza i metadati dei file MP4 frammentati (#2084).
- JPEG: supporta le foto in movimento che non hanno un segmento Exif all'inizio (#2552).
- Aggiungi il supporto per la ricerca in MP4 frammentati con più atomi
sidx. Questo comportamento può essere attivato utilizzando il flagFLAG_MERGE_FRAGMENTED_SIDXsuFragmentedMp4Extractor(#9373). - Ignora le tabelle di ricerca vuote nei file FLAC (incluse quelle contenenti solo punti di ricerca segnaposto) e ripristina la ricerca binaria se la durata del file è nota (#2327).
- È stato corretto l'analisi delle unità SEI H.265 per ignorare completamente i tipi SEI non riconosciuti (#2456).
- Aggiorna
WavExtractorper utilizzare i dati SubFormat dell'estensione dell'intestazione per il formato audio durante l'analisi di un file di tipoWAVE_FORMAT_EXTENSIBLE. - MP4: aggiungi il supporto per le caselle
ipcmefpcmche definiscono le tracce audio PCM non elaborate (il PCM in virgola mobile a 64 bit non è supportato). - MP4: gestisce la parte di rotazione delle matrici di trasformazione
tkhdche ruotano e riflettono il video. In questo modo, i video riflessi realizzati dalla fotocamera anteriore dell'iPhone vengono visualizzati nel modo corretto, ma riflessi in modo errato sull'asse Y (#2012). - MP3: utilizza la durata e le dimensioni dei dati dei metadati Xing, VBRI e simili con bitrate variabile non ricercabili quando esegui il fallback alla ricerca con bitrate costante a causa di
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Audio:
- È stato corretto un bug per cui
AnalyticsListener.onAudioPositionAdvancingnon viene chiamato quando la riproduzione audio viene avviata molto vicino alla fine dei contenuti multimediali. - Aggiungi il supporto di tutti i formati di campioni PCM lineari in
ChannelMappingAudioProcessoreTrimmingAudioProcessor. - Aggiungi il supporto per i vuoti audio in
CompositionPlayer. - Rimuovi chiamata fraudolenta a
BaseAudioProcessor#flush()daBaseAudioProcessor#reset(). - Consenti l'upsampling/downsampling costante della potenza in DefaultAudioMixer.
- Rendi pubblici
ChannelMappingAudioProcessor,TrimmingAudioProcessoreToFloatPcmAudioProcessor(#2339). - Utilizza
AudioTrack#getUnderrunCount()inAudioTrackPositionTrackerper rilevare gli underrun inDefaultAudioSinkanziché la stima ottimale. - Migliora l'uniformità dei timestamp audio per la deriva imprevista della posizione dal dispositivo di uscita audio.
- Corretto un bug per cui la sincronizzazione A/V non funziona per i primi 10 secondi dopo la riproduzione dopo la pausa quando il dispositivo è connesso a dispositivi Bluetooth.
- Correzione del bug per cui
AnalyticsListener.onAudioPositionAdvancingnon registrava l'ora in cui l'audio iniziava ad avanzare, ma l'ora della prima misurazione. - Correzione del ripristino dell'audio multicanale dopo il fallback all'audio stereo su alcuni dispositivi (#2258).
- È stato corretto un bug per cui
- Video:
- Estendi la soluzione alternativa per la superficie staccata ai dispositivi "lenovo" e "motorola" (#2059).
- Migliora il rilascio dei frame video fluidi all'avvio quando i campioni audio non iniziano esattamente nella posizione richiesta.
- Estendi la soluzione alternativa per la superficie staccata ai dispositivi "realme" (#2059).
- Aggiungi l'API sperimentale
ExoPlayerper includere il flagMediaCodec.BUFFER_FLAG_DECODE_ONLYdurante l'accodamento dei buffer di input di sola decodifica. Questo flag segnala al decoder di saltare i buffer di sola decodifica, con conseguente ricerca più rapida. Attivalo conDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. - Migliora i controlli delle prestazioni dei codec per i codec video software. Ciò potrebbe
comportare la classificazione di alcune tracce aggiuntive come
EXCEEDS_CAPABILITIES. - Correzione degli errori di riproduzione VP9 Widevine su alcuni dispositivi (#2408).
- Testo:
- Aggiunta del supporto per le tracce VobSub nei file MP4 (#2510).
- Correzione di un blocco della riproduzione quando un segmento di sottotitoli non viene caricato inizialmente e viene caricato correttamente in un secondo momento, seguito da diversi segmenti di sottotitoli vuoti (#2517).
- Correzione di SSA e SubRip per visualizzare un cue in corso durante l'attivazione dei sottotitoli codificati (#2309).
- È stato risolto il problema di blocco della riproduzione quando si passa da uno stream con un errore nei sottotitoli codificati a un live streaming con una traccia dei sottotitoli codificati vuota (#2328).
- È stato risolto il problema relativo ai sottotitoli codificati CEA-608 illeggibili durante la riproduzione di stream H.262 contenenti B-frame (#2372).
- Aggiungi il supporto per i sottotitoli SSA con
CodecId = S_TEXT/SSAnei file Matroska. In precedenza,MatroskaExtractorsupportava soloCodecId = S_TEXT/ASS, che ha lo scopo di rappresentare la variante "avanzata" (v4+) dei sottotitoli SubStation Alpha (ma la logica di analisi di ExoPlayer è la stessa per entrambe le varianti) (#2384). - Aggiungi il supporto della proprietà
layernei file di sottotitoli SubStation Alpha (SSA), che viene utilizzata per definire l'ordine di visualizzazione delle battute quando più di una viene mostrata sullo schermo contemporaneamente (#2124).
- Metadati:
- Aggiunto il supporto per il recupero della durata dei contenuti multimediali e di
TimelineaMetadataRetrievere migrato a un'APIAutoCloseablebasata su istanze. Utilizza il nuovoBuilderper creare un'istanza per unMediaItem, quindi chiamaretrieveTrackGroups(),retrieveTimeline()eretrieveDurationUs()per ottenereListenableFutureper i metadati. I metodi statici precedenti sono ora deprecati (#2462).
- Aggiunto il supporto per il recupero della durata dei contenuti multimediali e di
- Immagine:
- Limita le bitmap decodificate alle dimensioni del display in
BitmapFactoryImageDecoderper evitare che un'app si arresti in modo anomalo conCanvas: trying to draw too large bitmap.daPlayerViewquando tenta di visualizzare immagini molto grandi (ad es. 50 MP). - Modifica la firma di
DefaultRenderersFactory.getImageDecoderFactory()per accettare un parametroContext. - Allinea la dimensione massima di output bitmap utilizzata in
CompositionPlayera quella già utilizzata inTransformer(il che significa cheCompositionPlayernon considera la dimensione del display durante la decodifica delle bitmap, a differenza diExoPlayer).
- Limita le bitmap decodificate alle dimensioni del display in
- DRM:
- Aggiungi un nuovo overload di
OfflineLicenseHelper.newWidevineInstanceche accetta unMediaItem.DrmConfigurationin modo che le intestazioni delle richieste HTTP possano essere applicate correttamente (#2169).
- Aggiungi un nuovo overload di
- Effetto:
- Aggiungi
Presentation.createForShortSide(int)che crea unPresentationche garantisce che il lato più corto corrisponda sempre al valore specificato, indipendentemente dall'orientamento dell'input.
- Aggiungi
- Muxer:
- Correzione di un bug per cui non venivano impostati i flag di esempio corretti per i campioni audio in MP4 frammentato.
- L'API
writeSampleData()ora utilizza la classeBufferInfospecifica del muxer anzichéMediaCodec.BufferInfo. - Aggiungi
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, che è impostato su false per impostazione predefinita.
- Estensione IMA:
- È stato corretto un bug per cui un errore di caricamento in un annuncio poteva invalidare accidentalmente un altro gruppo di annunci.
- È stato corretto il bug a causa del quale la riproduzione dei gruppi di annunci dopo la fine di una finestra VOD si bloccava.
I gruppi di annunci con un orario di inizio successivo alla finestra non vengono più inseriti nella coda di
MediaPeriodQueue(#2215).
- Sessione:
- Corregge il bug per cui le connessioni da controller Media3 non privilegiati di terze parti vengono ignorate.
- Rimuovi il controllo dei comandi disponibili quando invii comandi personalizzati a un
MediaBrowserServiceCompatlegacy. Questo comportamento è in linea con quello dei controller/browser precedenti quando sono connessi a un'app precedente. - È stato corretto un bug che causa il trattamento errato del primo errore di riproduzione di un player come eccezione personalizzata persistente. Ciò impedisce il ripristino dell'applicazione.
- Correzione del bug per cui alcune modifiche al controller non gestite dalla
sessione potrebbero causare
IllegalStateExceptions. - Correzione del bug per cui le azioni del controller non gestite dalla sessione potrebbero lasciare il controller in uno stato non valido.
- Correzione dell'avviso di violazione di lancio non sicuro di StrictMode (#2330).
- Correzione del bug per cui la chiamata di
setSessionExtrasdal thread principale durante l'esecuzione del player da un thread dell'applicazione diverso dal thread principale causava unIllegalStateException(#2265). - Non mostrare automaticamente una notifica se un player è configurato con elementi multimediali
senza prepararli o riprodurli
(#2423https://github.com/androidx/media/issues/2423). Questo comportamento
è configurabile tramite
MediaSessionService.setShowNotificationForIdlePlayer. - Aggiungi
PlaybackExceptionpersonalizzati per tutti i controller o per quelli selezionati. - Correzione del bug per cui la ricerca in un live streaming su un
MediaControllerpuò causare unIllegalArgumentException. - Per i live streaming, interrompi la pubblicazione di una posizione di riproduzione e la possibilità di cercare nell'elemento corrente i controlli multimediali della piattaforma, per evitare artefatti di posizione nella UI di Android Auto (e in altri controlli che utilizzano queste informazioni dalla sessione multimediale della piattaforma) (#1758).
- È stato corretto un bug per cui il passaggio di un valore nullo in
getLibraryRootdi unMediaBrowsercollegato a unMediaBrowserServiceCompatlegacy produceva unNullPointerException. - È stato corretto un bug per cui l'invio di azioni personalizzate, di un risultato di ricerca o di una richiesta getItem
causava l'arresto anomalo dell'app di sessione precedente con un
ClassNotFoundException. - È stato corretto un bug per cui
MediaItem.LocalConfiguration.uriveniva condiviso conMediaMetadatadelle sessioni della piattaforma. Per condividere intenzionalmente un URI per consentire ai controller di richiedere nuovamente i contenuti multimediali, impostaMediaItem.RequestMetadata.mediaUri.
- UI:
- È stato corretto il bug a causa del quale
PlayerSurfaceall'interno di componenti riutilizzabili comeLazyColumnnon funzionava correttamente (#2493). - Correzione di un bug di Compose che causava un intervallo tra l'impostazione degli stati iniziali dei pulsanti e l'osservazione della modifica dello stato (ad es. forme delle icone o attivazione). Eventuali modifiche apportate al giocatore al di fuori del periodo di osservazione vengono ora rilevate (#2313).
- Aggiungi state holder e composable al modulo
media3-ui-composeperSeekBackButtonStateeSeekForwardButtonState. - Aggiungi il supporto della modalità di scorrimento di ExoPlayer a
PlayerControlView. Se attivata, questa modalità mette il player in modalità di scorrimento quando l'utente inizia a trascinare la barra di scorrimento, invia una chiamataplayer.seekToper ogni movimento e poi esce dalla modalità di scorrimento quando il tocco viene sollevato dallo schermo. Questa integrazione può essere attivata contime_bar_scrubbing_enabled = truein XML o con il metodosetTimeBarScrubbingEnabled(boolean)di Java/Kotlin. - Fai in modo che
PlayerSurfaceaccetti un argomentoPlayerche ammette valori nulli.
- È stato corretto il bug a causa del quale
- Download:
- Aggiungi il supporto per il download parziale per gli stream progressivi. Le app possono preparare uno
stream progressivo con
DownloadHelpere richiedere unDownloadRequestdall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. Il valore restituitoDownloadRequestcontiene l'intervallo di byte risolto, con il quale è possibile creare unProgressiveDownloadere scaricare i contenuti corrispondenti. - Aggiungi
DownloadHelper.Factorycon cui vengono sostituiti i metodi staticiDownloadHelper.forMediaItem(). - Aggiungi
Factoryper le implementazioni diSegmentDownloader. - Aggiungi il supporto del download parziale per gli stream adattivi. Le app possono preparare uno stream adattivo con
DownloadHelpere richiedere unDownloadRequestdall'helper specificando le posizioni di inizio e fine dei contenuti multimediali basati sul tempo che il download deve coprire. IlDownloadRequestrestituito contiene l'intervallo di tempo risolto, con il quale è possibile creare unSegmentDownloaderconcreto e scaricare i contenuti corrispondenti.
- Aggiungi il supporto per il download parziale per gli stream progressivi. Le app possono preparare uno
stream progressivo con
- Estensione Cronet:
- Aggiungi la gestione automatica dei cookie (#5975).
- Estensione HLS:
- È stato corretto il bug per cui
HlsSampleStreamWrappertenta di eseguire la ricerca all'interno del buffer quando non sono disponibili blocchi nel buffer #2598. - È stato corretto il bug a causa del quale la selezione delle tracce cambia dopo il caricamento delle parti a bassa latenza e i suggerimenti di precaricamento possono causare l'interruzione o il blocco della riproduzione (#2299).
- Evita ricariche eccessive attendendo la metà della durata target quando
CAN-BLOCK-RELOAD=YESnon viene rispettato dal server (#2317). - Correzione del bug per cui la riproduzione si bloccava all'avvio di uno stream di interstitial prima di un mid-roll e veniva tentata la risoluzione dell'elenco degli asset per l'annuncio sbagliato (#2558).
- Correggi l'analisi delle playlist per accettare
\f(avanzamento modulo) nei valori degli attributi delle stringhe tra virgolette (#2420). - Supporto dell'aggiornamento degli interstitial con lo stesso ID (#2427).
- È stato corretto un bug per cui a volte gli errori di caricamento delle playlist non vengono propagati una volta che un live streaming esaurisce i segmenti da caricare (#2401https://github.com/androidx/media/issues/2401).
- Raggruppa le versioni dei sottotitoli codificati in base al tag NAME, in modo simile a come vengono raggruppate le versioni audio (#1666).
- Supporta X-ASSET-LIST e i live streaming con
HlsInterstitialsAdsLoader.
- È stato corretto il bug per cui
- Estensione DASH:
- È stato risolto il problema per cui il set di adattamento per la riproduzione con trucco viene unito al set di adattamento principale per formare un
TrackGroupnon valido (#2148). - Correzione del bug per cui l'abbreviazione della durata di un periodo DASH può generare un'eccezione quando i campioni oltre la nuova durata sono già stati letti dalla pipeline di rendering (#2440).
- Correzione del bug per cui il reindirizzamento non veniva seguito quando venivano utilizzati i parametri di ricerca CMCD (#2475).
- È stato risolto il problema per cui il set di adattamento per la riproduzione con trucco viene unito al set di adattamento principale per formare un
- Estensione RTSP:
- Aggiungi il supporto per il pacchetto di aggregazione RTP per H265 in conformità con RFC 7798#4.4.2 (#2413).
- Correzione di
RtspClientper utilizzare l'URI della posizione fornito durante l'elaborazione di una risposta HTTP 302 (#2398). - Aggiunta del supporto dell'analisi per SessionDescriptions contenenti righe con caratteri di spazio vuoto finali (#2357).
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Correzione del bug per cui
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangenon ha effetto per le estensioni del decodificatore audio (#2258).
- Correzione del bug per cui
- Estensione Cast:
- Test Utilities:
- Aggiungi
advance(player).untilPositionAtLeasteuntilMediaItemIndexaTestPlayerRunHelperper far avanzare il giocatore fino a raggiungere una posizione specificata. Nella maggior parte dei casi, questi metodi sono più affidabili dei metodiuntilPositioneuntilStartOfMediaItemesistenti. - Sposta
FakeDownloadernel modulotest-utils-robolectricper riutilizzarlo in altri test. transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)etransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)rimossi. UtilizzaShadowMediaCodecConfigper configurare encoder e decoder ombra.- Il prefisso "exotest" è stato sostituito con "media3" nei nomi dei codec segnalati da
ShadowMediaCodecConfig.
- Aggiungi
- Rimuovi i simboli ritirati:
- Rimosso il costruttore
SegmentDownloaderdeprecatoSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)e i costruttori corrispondenti nelle relative sottoclassiDashDownloader,HlsDownloadereSsDownloader. - Rimozione di
Player.hasNext(),Player.hasNextWindow()obsoleti. UtilizzaPlayer.hasNextMediaItem(). - Rimossa
Player.next()obsoleta. Utilizza invecePlayer.seekToNextMediaItem(). - Rimossa
Player.seekToPreviousWindow()obsoleta. UtilizzaPlayer.seekToPreviousMediaItem(). - Rimossa
Player.seekToNextWindow()obsoleta. UtilizzaPlayer.seekToNextMediaItem(). - Rimozione di
BaseAudioProcessordeprecato nel moduloexoplayer. UtilizzaBaseAudioProcessornel modulocommon. - Rimuovi il costruttore
MediaCodecVideoRendererdeprecatoMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- Rimosso il costruttore
Versione 1.8.0-rc02
24 luglio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.8.0-rc01
16 luglio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.8.0-beta01
2 luglio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.8.0-alpha01
19 maggio 2025
Utilizza la versione stabile 1.8.0.
Versione 1.7.0
Versione 1.7.1
16 maggio 2025
Questa release ha lo stesso codice della 1.6.1 e viene rilasciata per garantire che venga visualizzata come release "più recente" rispetto alla 1.7.0, che era una release alpha taggata per errore come stabile (vedi sotto).
Versione 1.7.0
16 maggio 2025
Questa release avrebbe dovuto essere 1.7.0-alpha01, ma è stata erroneamente taggata
1.7.0 (ovvero stabile) su maven.google.com. Non utilizzarla. Rimani sulla versione
1.6.1 o esegui l'upgrade alla versione 1.7.1 (che ha lo stesso codice della versione 1.6.1).
Versione 1.6.0
1.6.1
14 aprile 2025
androidx.media3:media3-*:1.6.1 viene rilasciata.
La versione 1.6.1 contiene
questi commit.
- Libreria comune:
- Aggiungi il metodo
PlaybackParameters.withPitch(float)per copiare facilmente unPlaybackParameterscon un nuovo valorepitch(#2257).
- Aggiungi il metodo
- ExoPlayer:
- È stato risolto il problema per cui la transizione degli elementi multimediali non riusciva a causa di un errore recuperabile del renderer durante l'inizializzazione dell'elemento multimediale successivo (#2229).
- È stato risolto il problema a causa del quale
ProgressiveMediaPeriodgenera unIllegalStateExceptionquandoPreloadMediaSourcetenta di chiamare il suogetBufferedDurationUs()prima che sia pronto (#2315). - Correzione dell'invio di
CmcdDatanelle richieste di manifest per DASH, HLS e Smooth Streaming (#2253). - Assicurati che
AdPlaybackState.withAdDurationsUs(long[][])possa essere utilizzato dopo la rimozione dei gruppi di annunci. L'utente deve comunque trasmettere un array di durate per i gruppi di annunci rimossi, che può essere vuoto o nullo (#2267).
- Estrattori:
- MP4: analizza
alternate_groupdalla casellatkhded esponilo come voceMp4AlternateGroupDatanelFormat.metadatadi ogni traccia (#2242).
- MP4: analizza
- Audio:
- Correzione del problema di scaricamento in cui la posizione potrebbe bloccarsi durante la riproduzione di una playlist di contenuti brevi (#1920).
- Sessione:
- Riduzione del timeout di aggregazione per i callback della piattaforma
MediaSessionda 500 a 100 millisecondi e aggiunta di un setter sperimentale per consentire alle app di configurare questo valore. - Risolto il problema per cui le notifiche riappaiono dopo essere state chiuse dall'utente (#2302).
- Correzione di un bug per cui la sessione restituiva una cronologia di un solo elemento quando il
lettore incorporato è in realtà vuoto. Questo si è verificato quando il player incorporato
non dispone di
COMMAND_GET_TIMELINEmentreCOMMAND_GET_CURRENT_MEDIA_ITEMè disponibile e il player incorporato è vuoto (#2320). - Correzione di un bug per cui la chiamata di
MediaSessionService.setMediaNotificationProviderviene ignorata dopo altre interazioni con il servizio, ad esempiosetForegroundServiceTimeoutMs(#2305).
- Riduzione del timeout di aggregazione per i callback della piattaforma
- UI:
- Attiva
PlayerSurfaceper utilizzareExoPlayer.setVideoEffectseCompositionPlayer. - Correzione del bug per cui
PlayerSurfacenon può essere ricomposto con un nuovoPlayer.
- Attiva
- Estensione HLS:
- È stato risolto il problema per cui la durata del chunk non veniva impostata in
CmcdDataper i contenuti multimediali HLS, causando un errore di asserzione durante l'elaborazione dei segmenti multimediali criptati (#2312).
- È stato risolto il problema per cui la durata del chunk non veniva impostata in
- Estensione RTSP:
- Aggiungi il supporto per l'URI con lo schema RTSPT come modo per configurare la sessione RTSP in modo che utilizzi TCP (#1484).
- Estensione Cast:
- Aggiungi il supporto per i metadati delle playlist (#2235).
1.6.0
26 marzo 2025
androidx.media3:media3-*:1.6.0 viene rilasciata.
La versione 1.6.0 contiene
questi commit.
- Libreria comune:
- Aggiungi
AudioManagerCompateAudioFocusRequestCompatper sostituire le classi equivalenti inandroidx.media. - Esegui l'upgrade di Kotlin dalla versione 1.9.20 alla 2.0.20 e utilizza il plug-in Gradle di Compose Compiler. Esegui l'upgrade della libreria KotlinX Coroutines dalla versione 1.8.1 alla 1.9.0.
- Rimuovi il metodo
Format.toBundle(boolean excludeMetadata), utilizzaFormat.toBundle(). - È stato corretto un bug in
SimpleBasePlayerin cui l'impostazione di un nuovocurrentMediaItemIndexinStatedoposetPlaylistconnullMediaMetadatanon rivaluta i metadati (#1940). - Modifica l'accesso a
SimpleBasePlayer.Stateda protetto a pubblico per semplificare la gestione degli aggiornamenti in altre classi (#2128).
- Aggiungi
- ExoPlayer:
- Aggiungi
MediaExtractorCompat, una nuova classe che fornisce funzionalità equivalenti alla piattaformaMediaExtractor. - Aggiungi il supporto sperimentale del pre-riscaldamento "ExoPlayer" per la riproduzione utilizzando
MediaCodecVideoRenderer. Puoi configurareDefaultRenderersFactorytramiteexperimentalSetEnableMediaCodecVideoRendererPrewarmingper fornire unMediaCodecVideoRenderersecondario aExoPlayer. Se attivata,ExoPlayerpre-elabora il video di elementi multimediali consecutivi durante la riproduzione per ridurre la latenza di transizione degli elementi multimediali. - Riduci i valori predefiniti per
bufferForPlaybackMsebufferForPlaybackAfterRebufferMsinDefaultLoadControla 1000 e 2000 ms rispettivamente. - Inizializza
DeviceInfoe il volume del dispositivo in modo asincrono (se abilitato utilizzandosetDeviceVolumeControlEnabled). Questi valori non sono disponibili immediatamente dopoExoPlayer.Builder.build()ePlayer.Listenernotifica le modifiche tramiteonDeviceInfoChangedeonDeviceVolumeChanged. - L'ID sessione audio iniziale non è più disponibile immediatamente dopo la creazione del player. Puoi utilizzare
AnalyticsListener.onAudioSessionIdChangedper ascoltare l'aggiornamento iniziale, se necessario. - Tieni conto della lingua quando selezioni una traccia video. Per impostazione predefinita, seleziona una traccia video "principale" che corrisponda alla lingua della traccia audio selezionata, se disponibile. Le preferenze esplicite per la lingua dei video possono essere
espresse con
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Aggiungi il parametro
selectedAudioLanguageal metodoDefaultTrackSelector.selectVideoTrack(). - Aggiungi il parametro
retryCountaMediaSourceEventListener.onLoadStartede i metodiMediaSourceEventListener.EventDispatchercorrispondenti. - È stato corretto il bug a causa del quale gli elementi della playlist o i periodi nei flussi DASH multi-periodo con durate che non corrispondono ai contenuti effettivi potevano causare il blocco dei fotogrammi alla fine dell'elemento (#1698).
- Sposta
BasePreloadManager.Listenerin un elemento di primo livelloPreloadManagerListener. RenderersFactory.createSecondaryRendererpuò essere implementato per fornire renderer secondari per il pre-riscaldamento. Il pre-riscaldamento consente transizioni più rapide tra gli elementi multimediali durante la riproduzione.- Attiva l'invio di
CmcdDataper le richieste di manifest nei formati di streaming adattivo DASH, HLS e Smooth Streaming (#1951). - Fornisci
MediaCodecInfodel codec che verrà inizializzato inMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Modifica
AdsMediaSourceper consentire aAdPlaybackStatesdi crescere aggiungendo gruppi di annunci. Vengono rilevate modifiche non valide e viene generata un'eccezione. - È stato risolto il problema a causa del quale potevano essere visualizzati fotogrammi aggiuntivi di sola decodifica in rapida successione durante la transizione ai contenuti multimediali dopo un annuncio mid-roll.
- Fai in modo che
DefaultRenderersFactoryaggiunga due istanzeMetadataRendererper consentire alle app di ricevere due diversi schemi di metadati per impostazione predefinita. - Rivaluta se il caricamento in corso di un chunk deve essere annullato quando la riproduzione viene sospesa (#1785).
- Aggiungi l'opzione
ClippingMediaSourceper consentire il ritaglio nei contenuti multimediali non riproducibili. - È stato corretto un bug per cui la ricerca con il pre-riscaldamento poteva bloccare la transizione all'elemento multimediale successivo.
- È stato corretto un bug per cui
ExoPlayer.isLoading()rimanetruementre è passato aSTATE_IDLEoSTATE_ENDED(#2133). - Aggiungi
lastRebufferRealtimeMsaLoadControl.Parameter(#2113).
- Aggiungi
- Transformer:
- Aggiungi il supporto per il transmuxing in formati alternativi compatibili con le versioni precedenti.
- Aggiungi il supporto per la transcodifica e il transmuxing del formato Dolby Vision (profilo 8).
- Aggiorna i parametri di
VideoFrameProcessor.registerInputStreameVideoFrameProcessor.Listener.onInputStreamRegisteredper utilizzareFormat. - Genera metadati statici HDR quando utilizzi
DefaultEncoderFactory. - Attiva il supporto per la diagnostica della piattaforma Android utilizzando
MediaMetricsManager. Transformer inoltra gli eventi di modifica e i dati sul rendimento alla piattaforma, il che contribuisce a fornire informazioni sul rendimento del sistema e sul debug sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostici è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per Transformer conTransformer.Builder.setUsePlatformDiagnostics(false). - Dividi
InAppMuxerinInAppMp4MuxereInAppFragmentedMp4Muxer. UtilizziInAppMp4Muxerper produrre un file MP4 non frammentato, mentreInAppFragmentedMp4Muxerper produrre un file MP4 frammentato. - Sposta l'interfaccia
Muxerdamedia3-muxeramedia3-transformer. - Aggiungi
MediaProjectionAssetLoader, che fornisce contenuti multimediali da unMediaProjectionper la registrazione dello schermo, e aggiungi il supporto per la registrazione dello schermo all'app demo Transformer. - Aggiungi
#getInputFormat()all'interfacciaCodec. - Trasferisci la responsabilità di rilasciare il
GlObjectsProvideral chiamante inDefaultVideoFrameProcessoreDefaultVideoCompositorquando possibile.
- Estrattori:
- AVI: correzione della gestione dei file con audio compresso a bitrate costante in cui l'intestazione del flusso memorizza il numero di byte anziché il numero di chunk.
- Correzione della gestione delle unità NAL con lunghezze espresse in 1 o 2 byte (anziché 4).
- Correzione di
ArrayIndexOutOfBoundsExceptionnegli elenchi di modifica MP4 quando l'elenco di modifica inizia con un frame non sincronizzato senza frame di sincronizzazione precedente (#2062). - È stato risolto un problema per cui gli stream TS potevano bloccarsi su alcuni dispositivi (#2069).
- FLAC: aggiungi il supporto per i file FLAC a 32 bit. In precedenza, la riproduzione non riusciva
con
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Audio:
- Correggi
onAudioPositionAdvancingin modo che venga chiamato quando la riproduzione riprende (in precedenza veniva chiamato quando la riproduzione veniva messa in pausa). - Non ignorare
SonicAudioProcessorquandoSpeedChangingAudioProcessorè configurato con i parametri predefiniti. - È stato corretto un problema di underflow in
Sonic#getOutputSize()che poteva causare l'interruzione diDefaultAudioSink. - Correggi
MediaCodecAudioRenderer.getDurationToProgressUs()eDecoderAudioRenderer.getDurationToProgressUs()in modo che le ricerche ripristinino correttamente le durate fornite. - Rendi
androidx.media3.common.audio.SonicAudioProcessordefinitivo. - Aggiungi il supporto per float PCM a
ChannelMappingAudioProcessoreTrimmingAudioProcessor.
- Correggi
- Video:
- Modifica
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacein protetto in modo che le applicazioni possano eseguire l'override per bloccare l'utilizzo di segnalazioni segnaposto (#1905). - Aggiungi l'analisi delle dipendenze dei campioni
ExoPlayerAV1 sperimentale per velocizzare la ricerca. Abilitala con la nuova APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - Aggiungi l'API sperimentale
ExoPlayerper eliminare i buffer di input del decodificatoreMediaCodecVideoRendererin ritardo da cui non dipende. Attivalo conDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. - È stato risolto il problema per cui un giocatore senza una superficie era pronto immediatamente e decodificava molto lentamente i frame in attesa (#1973).
- Escludi i dispositivi Xiaomi e OPPO dalla modalità con superficie staccata per evitare lo sfarfallio dello schermo (#2059).
- Modifica
- Testo:
- Aggiunta del supporto per i sottotitoli VobSub (#8260).
- Interrompi il caricamento eager di tutti i file dei sottotitoli codificati con
MediaItem.Builder.setSubtitleConfigurationse carica solo un file se viene selezionato dalla selezione della traccia (#1721). - TTML: aggiungi il supporto per il riferimento a
tts:originetts:extentutilizzandostyle(#2953). - Limita i timestamp WebVTT e SubRip a esattamente 3 cifre decimali. In precedenza, analizzavamo erroneamente qualsiasi numero di cifre decimali, ma presupponevamo sempre che il valore fosse espresso in millisecondi, il che portava a timestamp errati (#1997).
- Risolto il problema di blocco della riproduzione quando una playlist contiene elementi tagliati con sottotitoli codificati CEA-608 o CEA-708.
- Correzione di
IllegalStateExceptionquando un file SSA contiene un cue con durata zero (ora di inizio e fine uguali) (#2052). - Elimina (e registra) gli errori di analisi dei sottotitoli quando questi vengono multiplexati nello stesso contenitore di audio e video (#2052).
- È stato corretto il problema di gestione dei caratteri UTF-8 multibyte nei file WebVTT che utilizzano i terminatori di riga CR (#2167).
- DRM:
- Correzione dell'errore
MediaCodec$CryptoException: Operation not supported in this configurationdurante la riproduzione di contenuti ClearKey su dispositivi con API < 27 (#1732).
- Correzione dell'errore
- Effetto:
- Abbiamo spostato la funzionalità di
OverlaySettingsinStaticOverlaySettings.OverlaySettingspuò essere suddivisa in sottoclassi per consentire impostazioni di overlay dinamiche.
- Abbiamo spostato la funzionalità di
- Muxer:
MuxerExceptionè stato spostato dall'interfacciaMuxerper evitare un nome completo molto lungo.- Il metodo
setSampleCopyEnabled()è stato rinominato insetSampleCopyingEnabled()sia inMp4Muxer.Builderche inFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()eFragmentedMp4Muxer.addTrack()ora restituiscono un ID tracciaintanziché unTrackToken.Mp4MuxereFragmentedMp4Muxernon implementano più l'interfacciaMuxer.- Disattiva il raggruppamento e la copia dei batch di esempio di
Mp4Muxerper impostazione predefinita. - Correzione di un bug in
FragmentedMp4Muxerche crea molti frammenti quando viene scritta solo la traccia audio.
- Sessione:
- Mantieni lo stato del servizio in primo piano per altri 10 minuti quando la riproduzione
si interrompe, si arresta o non va a buon fine. Ciò consente agli utenti di riprendere la riproduzione entro questo
timeout senza rischiare limitazioni del servizio in primo piano su vari
dispositivi. Tieni presente che la semplice chiamata a
player.pause()non può più essere utilizzata per interrompere il servizio in primo piano prima distopSelf()quando esegui l'override dionTaskRemoved, utilizzaMediaSessionService.pauseAllPlayersAndStopSelf()in alternativa. - Mantiene la notifica visibile quando la riproduzione entra in uno stato di errore o interruzione. La notifica viene rimossa solo se la playlist viene cancellata o il player viene rilasciato.
- Migliora la gestione delle azioni MediaSession della piattaforma Android ACTION_PLAY e ACTION_PAUSE per impostarne solo una in base ai comandi disponibili e accettare anche se ne è impostata solo una.
- Aggiungi
Contextcome parametro aMediaButtonReceiver.shouldStartForegroundService(#1887). - Correzione del bug per cui la chiamata di un metodo
Playersu unMediaControllerconnesso a una sessione precedente eliminava le modifiche da un aggiornamento in attesa. - Rendi
MediaSession.setSessionActivity(PendingIntent)accettabile il valore null (#2109). - È stato corretto un bug per cui una notifica obsoleta rimane visibile quando la playlist viene cancellata (#2211).
- Mantieni lo stato del servizio in primo piano per altri 10 minuti quando la riproduzione
si interrompe, si arresta o non va a buon fine. Ciò consente agli utenti di riprendere la riproduzione entro questo
timeout senza rischiare limitazioni del servizio in primo piano su vari
dispositivi. Tieni presente che la semplice chiamata a
- UI:
- Aggiungi state holder e composable al modulo
media3-ui-composeperPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateePlaybackSpeedState.
- Aggiungi state holder e composable al modulo
- Download:
- Correzione del bug in
CacheWriterche lascia aperte le origini dati e le aree della cache bloccate nel caso in cui l'origine dati generi unExceptiondiverso daIOException(#9760).
- Correzione del bug in
- Estensione HLS:
- Aggiungi una prima versione di
HlsInterstitialsAdsLoader. Il caricatore di annunci legge gli interstitial HLS di una playlist multimediale HLS e li mappa alAdPlaybackStatepassato aAdsMediaSource. Questa versione iniziale supporta solo gli stream VOD HLS con attributiX-ASSET-URI. - Aggiungi
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Le app possono utilizzarlo per creare istanzeAdsMediaSourceche utilizzano unHlsInterstitialsAdsLoaderin modo comodo e sicuro. - Analizza il tag
SUPPLEMENTAL-CODECSdalla playlist HLS per rilevare i formati Dolby Vision (#1785). - Allenta la condizione per la ricerca della sincronizzazione delle posizioni in uno stream HLS (#2209).
- Aggiungi una prima versione di
- Estensione DASH:
- Aggiunta del supporto del formato AC-4 Livello 4 per DASH (#1898).
- Risolvi il problema durante il calcolo dell'intervallo di aggiornamento per l'inserimento di annunci nei live streaming multi-periodo (#1698).
- Analizza l'attributo
scte214:supplementalCodecsdal manifest DASH per rilevare i formati Dolby Vision (#1785). - Migliora la gestione delle transizioni di periodo nei live streaming in cui il periodo contiene campioni multimediali oltre la durata del periodo dichiarata (#1698).
- È stato risolto il problema per cui i set di adattamento contrassegnati con
adaptation-set-switchingma con lingue o flag di ruolo diversi vengono uniti (#2222).
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Aggiungi il modulo di decodifica MPEG-H che utilizza il decodificatore MPEG-H integrato per decodificare l'audio MPEG-H (#1826).
- Estensione MIDI:
- Integra le istanze personalizzate di
AudioSinkeAudioRendererEventListenerinMidiRenderer.
- Integra le istanze personalizzate di
- Estensione Cast:
- Aumenta la dipendenza
play-services-cast-frameworkalla versione 21.5.0 per correggere un arresto anomalo diFLAG_MUTABLEnelle app che hanno come target l'API 34 o versioni successive sui dispositivi con Google Play Services installato ma disattivato (#2178).
- Aumenta la dipendenza
- App demo:
- Estendi
demo-composecon pulsanti aggiuntivi e migliora l'integrazione diPlayerSurfacecon il supporto di ridimensionamento e otturatore.
- Estendi
- Rimuovi i simboli ritirati:
- Rimuovi il metodo
AudioMixer.create()deprecato. UtilizzaDefaultAudioMixer.Factory().create(). - Rimuovi i seguenti metodi
Transformer.Builderdeprecati:setTransformationRequest(), utilizzasetAudioMimeType(),setVideoMimeType()esetHdrMode().setAudioProcessors(), imposta il processore audio in unEditedMediaItem.Builder.setEffects()e passalo aTransformer.start().setVideoEffects(), imposta l'effetto video in unEditedMediaItem.Builder.setEffects()e passalo aTransformer.start().setRemoveAudio(), utilizzaEditedMediaItem.Builder.setRemoveAudio()per rimuovere l'audio daEditedMediaItempassato aTransformer.start().setRemoveVideo(), utilizzaEditedMediaItem.Builder.setRemoveVideo()per rimuovere il video daEditedMediaItempassato aTransformer.start().setFlattenForSlowMotion(), usaEditedMediaItem.Builder.setFlattenForSlowMotion()per appiattireEditedMediaItempassato aTransformer.start().setListener(), utilizzaaddListener(),removeListener()oremoveAllListeners().
- Rimuovi i seguenti metodi
Transformer.Listenerdeprecati:onTransformationCompleted(MediaItem), utilizzaonCompleted(Composition, ExportResult).onTransformationCompleted(MediaItem, TransformationResult), utilizzaonCompleted(Composition, ExportResult).onTransformationError(MediaItem, Exception), utilizzaonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationException), utilizzaonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationResult, TransformationException), utilizzaonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), utilizzaonFallbackApplied(Composition, TransformationRequest, TransformationRequest).
- Rimuovi la classe
TransformationResultdeprecata. Utilizza inveceExportResult. - Rimuovi la classe
TransformationExceptiondeprecata. Utilizza inveceExportException. - Rimuovi
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONdeprecato. UtilizzaTransformer.PROGRESS_STATE_NOT_STARTED. - Rimuovi
Transformer.setListener()deprecato. UtilizzaTransformer.addListener(),Transformer.removeListener()oTransformer.removeAllListeners(). - Rimuovi
Transformer.startTransformation()deprecato. UtilizzaTransformer.start(MediaItem, String). - Rimuovi
SingleFrameGlShaderProgramdeprecato. UtilizzaBaseGlShaderProgram. - Rimuovi
Transformer.flattenForSlowMotion. UtilizzaEditedMediaItem.flattenForSlowMotion. ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponenteExoPlayer.DeviceComponentrimossi.androidx.media3.exoplayer.audio.SonicAudioProcessorrimosso.- Sono stati rimossi i seguenti metodi
DownloadHelperdeprecati:- Costruttore
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), utilizzaDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). getRendererCapabilities(RenderersFactory), una funzionalità equivalente può essere ottenuta creando unDefaultRendererCapabilitiesListcon unRenderersFactorye chiamandoDefaultRendererCapabilitiesList.getRendererCapabilities().
- Costruttore
- Rimosso
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)metodo. UtilizzaPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)e trasferisci(MediaSession.Token) compatToken.getToken().
- Rimuovi il metodo
1.6.0-rc02
19 marzo 2025
Utilizza la versione stabile 1.6.0.
1.6.0-rc01
12 marzo 2025
Utilizza la versione stabile 1.6.0.
1.6.0-beta01
26 febbraio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha03
6 febbraio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha02
30 gennaio 2025
Utilizza la versione stabile 1.6.0.
Versione 1.6.0-alpha01
20 dicembre 2024
Utilizza la versione stabile 1.6.0.
Versione 1.5
Versione 1.5.1
19 dicembre 2024
androidx.media3:media3-*:1.5.1 viene rilasciata.
La versione 1.5.1 contiene questi commit.
- ExoPlayer:
- Disattiva l'utilizzo della decrittografia asincrona in MediaCodec per evitare problemi di timeout del codec segnalati con questa API della piattaforma (#1641).
- Estrattori:
- MP3: non interrompere la riproduzione in anticipo quando l'indice di un frame
VBRInon copre tutti i dati MP3 in un file (#1904).
- MP3: non interrompere la riproduzione in anticipo quando l'indice di un frame
- Video:
- Rollback dell'utilizzo dei valori delle proporzioni pixel forniti per
MediaCodecAdapterse forniti durante l'elaborazione dionOutputFormatChanged(#1371).
- Rollback dell'utilizzo dei valori delle proporzioni pixel forniti per
- Testo:
- È stato corretto un bug in
ReplacingCuesResolver.discardCuesBeforeTimeUsper cui il cue attivo alle oretimeUs(iniziato prima ma non ancora terminato) veniva scartato in modo errato (#1939).
- È stato corretto un bug in
- Metadati:
- Estrai la numerazione di dischi/tracce e il genere dai commenti Vorbis in
MediaMetadata(#1958).
- Estrai la numerazione di dischi/tracce e il genere dai commenti Vorbis in
Versione 1.5.0
27 novembre 2024
androidx.media3:media3-*:1.5.0 viene rilasciata.
La versione 1.5.0 contiene questi commit.
- Libreria comune:
- Aggiungi
ForwardingSimpleBasePlayerche consente l'inoltro a un altro player con piccoli aggiustamenti, garantendo al contempo la piena coerenza e la gestione degli ascoltatori (#1183). - Sostituisci
SimpleBasePlayer.State.playlistcon il metodogetPlaylist(). - Aggiungi l'override per
SimpleBasePlayer.State.Builder.setPlaylist()per specificare direttamente unTimelinee unTrackse unMetadataanziché creare una struttura di playlist. - Aumenta
minSdka 21 (Android Lollipop). Questo è in linea con tutte le altre librerie AndroidX. - Aggiungi l'artefatto
androidx.media3:media3-common-ktxche fornisce funzionalità specifiche di Kotlin basate sulla libreria Common - Aggiungi la funzione di estensione di sospensione
Player.listenper avviare una coroutine per ascoltarePlayer.Eventsnella libreriamedia3-common-ktx. - Rimuovi le annotazioni
@DoNotInlinedalle classi interne manualmente fuori linea progettate per evitare errori di verifica della classe in fase di runtime. Le versioni recenti di R8 ora eseguono automaticamente chiamate out-of-line come queste per evitare errori di runtime (quindi l'out-of-lining manuale non è più necessario). Tutti gli utenti Gradle della libreria devono già utilizzare una versione del plug-in Gradle per Android che utilizza una versione di R8 che lo fa,a causa dicompileSdk = 35. Gli utenti della libreria con sistemi di compilazione non Gradle dovranno assicurarsi che il passaggio di riduzione/offuscamento equivalente a R8 esegua un processo automatico di estrazione simile per evitare errori di verifica della classe di runtime. Questa modifica è già stata apportata in altre librerie AndroidX.
- Aggiungi
- ExoPlayer:
- Ora
MediaCodecRenderer.onProcessedStreamChange()può essere chiamato per ogni elemento multimediale. In precedenza non era richiesto per il primo. UtilizzaMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()per attivarlo. - Aggiungi
PreloadMediaSource.PreloadControl.onPreloadErrorper consentire alle implementazioniPreloadMediaSource.PreloadControldi intraprendere azioni quando si verifica un errore. - Aggiungi
BasePreloadManager.Listenerper propagare gli eventi di precaricamento alle app. - Consenti di modificare il timeout del client SNTP e di riprovare con indirizzi alternativi in caso di timeout (#1540).
- Rimuovi
MediaCodecAdapter.Configuration.flagsperché il campo era sempre zero. - Consente all'utente di selezionare l'altoparlante integrato per la riproduzione su Wear OS API 35+ (dove il dispositivo pubblicizza il supporto).
- Rimanda la chiamata di blocco a
Context.getSystemService(Context.AUDIO_SERVICE)finché non viene attivata la gestione della messa a fuoco audio. In questo modo, la chiamata di blocco non viene eseguita se la gestione della messa a fuoco audio non è abilitata (#1616). - Consenti la riproduzione indipendentemente dalla durata del buffer in caso di errore di caricamento (#1571).
- Aggiungi
AnalyticsListener.onRendererReadyChanged()per indicare quando i singoli renderer consentono la riproduzione. - Correzione del problema per cui
MediaCodec.CryptoExceptiona volte viene segnalato come "errore di runtime imprevisto" quandoMediaCodecviene eseguito in modalità asincrona (comportamento predefinito su API 31+). - Passa
bufferedDurationUsanzichébufferedPositionUsconPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Inoltre, modificaDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSinDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, quindi le app devono passare un valore che rappresenti una durata specifica dalla posizione iniziale predefinita per cui la sorgente media corrispondente deve essere precaricata con questo IntDef, anziché una posizione. - Aggiungi l'implementazione di
ForwardingRendererche inoltra tutte le chiamate di metodo a un altro renderer (1703). - Aggiungi il precaricamento della playlist per l'elemento successivo della playlist. Le app possono
attivare il precaricamento chiamando
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)di conseguenza. Per impostazione predefinita, il precaricamento è disattivato. Se l'opzione è attivata e per non interferire con la riproduzione,DefaultLoadControllimita il precaricamento all'inizio e continua solo quando il caricamento del player non è in corso per la riproduzione. Le app possono modificare questo comportamento implementandoLoadControl.shouldContinuePreloading()di conseguenza (ad esempio quando esegui l'override di questo metodo inDefaultLoadControl). L'implementazione predefinita diLoadControldisattiva il precaricamento nel caso in cui un'app utilizzi un'implementazione personalizzata diLoadControl. - Aggiungi il metodo
MediaSourceEventListener.EventDispatcher.dispatchEvent()per consentire l'invocazione di eventi di listener di sottoclassi (1736). - Aggiungi
DefaultPreloadManager.Builderche crea le istanzeDefaultPreloadManagereExoPlayercon configurazioni condivise in modo coerente. - Rimuovi il parametro
Renderer[]daLoadControl.onTracksSelected(), in quanto l'implementazioneDefaultLoadControlpuò recuperare i tipi di stream daExoTrackSelection[]. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])è stato ritirato e il metodo è stato contrassegnato come finale per evitare override. Al suo posto, utilizza il nuovoDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]).- Report sugli eventi
MediaSourceEventListenerda origini secondarie inMergingMediaSource. In questo modo, gli eventi di caricamento avvio/errore/annullamento/completamento verranno segnalati per i sottotitoli caricati manualmente (quelli aggiunti conMediaItem.LocalConfiguration.subtitleConfigurations), che potrebbero essere visualizzati come eventi di caricamento duplicati emessi daAnalyticsListener. - Evita che gli errori di sottotitoli codificati e metadati interrompano completamente la riproduzione.
La traccia problematica viene disattivata e la riproduzione delle tracce rimanenti continua
(#1722).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), vengono generati errori di analisi (ad es.
dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati
tramite i callback
onLoadError. - Nella gestione dei sottotitoli codificati legacy (durante il rendering), solo gli errori di caricamento associati vengono emessi tramite i callback
onLoadError, mentre gli errori di analisi vengono ignorati automaticamente (questo è il comportamento preesistente).
- Nella nuova gestione dei sottotitoli (durante l'estrazione), vengono generati errori di analisi (ad es.
dati dei sottotitoli non validi) e di caricamento (ad es. HTTP 404) associati
tramite i callback
- È stato corretto il bug a causa del quale gli elementi della playlist o i periodi nei flussi DASH multi-periodo con durate che non corrispondono ai contenuti effettivi potevano causare il blocco dei fotogrammi alla fine dell'elemento (#1698).
- Aggiungi un setter a
SntpClientper impostare il tempo massimo trascorso dall'ultimo aggiornamento dopo il quale il client viene reinizializzato (#1794).
- Ora
- Transformer:
- Aggiungi
SurfaceAssetLoader, che supporta la messa in coda dei dati video a Transformer tramite unSurface. ImageAssetLoadersegnala l'input non supportato tramiteAssetLoader.onErroranziché generare unIllegalStateException.- Rendi obbligatoria l'impostazione della durata dell'immagine utilizzando
MediaItem.Builder.setImageDurationMsper l'esportazione dell'immagine. - Aggiungi il supporto per l'esportazione di spazi vuoti nelle sequenze di EditedMediaItem audio.
- Aggiungi
- Selezione tracce:
DefaultTrackSelector: preferisci l'audio basato sugli oggetti rispetto a quello basato sui canali quando gli altri fattori sono uguali.
- Estrattori:
- Consenti a
Mp4ExtractoreFragmentedMp4Extractordi identificare i campioni H264 che non vengono utilizzati come riferimento dai campioni successivi. - Aggiungi l'opzione per attivare la ricerca basata sull'indice in
AmrExtractor. - Considera i file MP3 con più di 128 kB tra i frame validi come troncati
(anziché non validi). Ciò significa che i file con dati non MP3 alla fine,
senza altri metadati che indichino la lunghezza dei byte MP3, ora interrompono
la riproduzione alla fine dei dati MP3 anziché non riuscire con
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Correzione della gestione dei campioni preroll per le posizioni di inizio dei contenuti multimediali non keyframe durante l'elaborazione degli elenchi di modifica nei file MP4 (#1659).
- Miglioramento del calcolo della frequenza fotogrammi utilizzando la durata dei contenuti multimediali dalla casella
mdhdinMp4ExtractoreFragmentedMp4Extractor(#1531). - Correzione del ridimensionamento errato di
media_timenegli elenchi di modifica MP4. Mentresegment_durationera già scalato correttamente utilizzando la scala temporale del film,media_timeora è scalato correttamente utilizzando la scala temporale della traccia, come specificato dallo standard del formato MP4 (#1792). - Gestisci i frame fuori ordine nel calcolo di
endIndicesper MP4 con lista di modifica (#1797). - È stato corretto l'analisi della durata dei contenuti multimediali nella casella
mdhddei file MP4 per gestire i valori-1(#1819). - Aggiungi il supporto per l'identificazione della casella
h263nei file MP4 per i video H.263 (#1821). - Aggiungi il supporto del formato file multimediale di base ISO AC-4 di livello 4 (#1265).
- Consenti a
- DataSource:
- Aggiorna
HttpEngineDataSourceper consentire l'utilizzo a partire dall'estensione 7 della versione S anziché dal livello API 34 (#1262). DataSourceContractTest: verifica cheDataSource.getUri()restituisca l'URI risolto (come documentato). Se questo valore è diverso dall'URI richiesto, i test possono indicarlo utilizzando il nuovo metodoDataSourceContractTest.TestResource.Builder.setResolvedUri().DataSourceContractTest: verifica cheDataSource.getUri()egetResponseHeaders()restituiscano il valore "open" dopo una chiamata non riuscita aopen()(a causa di una risorsa "non trovata") e prima di una successiva chiamataclose().- L'override di
DataSourceContractTest.getNotFoundResources()consente alle sottoclassi di test di fornire più risorse "non trovate" e di fornire anche eventuali intestazioni previste. Ciò consente di distinguere tra HTTP 404 (con intestazioni) e "server non trovato" (senza intestazioni).
- L'override di
- Aggiorna
- Audio:
- Configura automaticamente i metadati di intensità CTA-2075 sul codec se presenti nei contenuti multimediali.
- Assicurati che il volume si abbassi gradualmente durante la ricerca.
- Correzione dei rumori di scoppio che possono verificarsi durante le ricerche.
- È stato corretto l'accumulo di errori di troncamento per l'algoritmo di allungamento/spostamento del tono di Sonic.
- Correzione del bug in
SpeedChangingAudioProcessorche causa la perdita di frame di output.
- Video:
MediaCodecVideoRendererevita di decodificare i campioni che non vengono visualizzati né utilizzati come riferimento da altri campioni.- Sulle API 35 e successive,
MediaCodecAdapterora può ricevere unnullSurfaceinconfiguree chiamate a un nuovo metododetachOutputSurfaceper rimuovere unSurfaceimpostato in precedenza se il codec lo supporta (MediaCodecInfo.detachedSurfaceSupported). - Utilizza i valori delle proporzioni pixel forniti per
MediaCodecAdapter, se disponibili, durante l'elaborazione dionOutputFormatChanged(#1371). - Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE che causa la marcatura come non supportati dei flussi H264 sicuri a 60 fps (#1619).
- Aggiungi una soluzione alternativa per i codec che si bloccano dopo l'ultimo campione senza restituire un segnale di fine flusso.
- Testo:
- Aggiungi un
VoiceSpanpersonalizzato e compilalo per gli intervalli vocali WebVTT (#1632). - Assicurati che i file WebVTT in HLS con timestamp dei sottotitoli molto grandi (che superano
un
longa 64 bit se rappresentati in microsecondi e moltiplicati per la base temporale MPEG90,000) vengano visualizzati (#1763). - Supporto dei sottotitoli CEA-608 nei contenuti Dolby Vision (#1820).
- È stato risolto il problema di blocco della riproduzione sui flussi multi-periodo DASH quando i sottotitoli codificati CEA-608 sono attivi (#1863).
- Aggiungi un
- Metadati:
- Assegna il tipo
C.TRACK_TYPE_METADATAalle tracce contenenti contenuti icy o vnd.dvb.ait.
- Assegna il tipo
- Immagine:
- Aggiungi
ExternallyLoadedImageDecoderper un'integrazione semplificata con librerie di caricamento di immagini esterne come Glide o Coil.
- Aggiungi
- DataSource:
- Aggiungi
FileDescriptorDataSource, un nuovoDataSourceche può essere utilizzato per leggere da unFileDescriptor(#3757).
- Aggiungi
- Effetto:
- Aggiungi soluzione alternativa
DefaultVideoFrameProcessorper scalabilitàSurfaceTextureminore.SurfaceTexturepuò includere un piccolo ridimensionamento che taglia un bordo di 1 texel attorno al bordo di un buffer ritagliato. Ora questo problema è gestito in modo che l'output sia più vicino a quello previsto. - Velocizza
DefaultVideoFrameProcessor.queueInputBitmap(). Di conseguenza, l'esportazione di immagini in video conTransformerè più veloce.
- Aggiungi soluzione alternativa
- Estensione IMA:
- Risolto un bug per cui la cancellazione della playlist potrebbe causare un
ArrayIndexOutOfBoundsExceptioninImaServerSideAdInsertionMediaSource. - Correzione del bug per cui gli stream DAI inseriti lato server senza preroll possono
comportare un
ArrayIndexOutOfBoundsExceptiondurante la riproduzione dopo l'ultimo mid-roll (#1741).
- Risolto un bug per cui la cancellazione della playlist potrebbe causare un
- Sessione:
- Aggiungi
MediaButtonReceiver.shouldStartForegroundService(Intent)per consentire alle app di eliminare un comando di riproduzione in arrivo per la ripresa della riproduzione eseguendo l'override di questo metodo. Per impostazione predefinita, il servizio viene sempre avviato e la riproduzione non può essere interrotta senza che il sistema arresti il servizio con un erroreForegroundServiceDidNotStartInTimeException(#1528). - Correzione del bug che causava l'invio di comandi personalizzati da un
MediaBrowseraMediaSessionCompat.Callbackanziché alla varianteMediaBrowserServiceCompatdel metodo quando connesso a un servizio legacy. Ciò ha impedito aMediaBrowserdi ricevere il valore di ritorno effettivo inviato dal servizio legacy (#1474). - Gestisci
IllegalArgumentExceptiongenerato dai dispositivi di alcuni produttori quando imposti il ricevitore di trasmissione per gli intent dei pulsanti multimediali (#1730). - Aggiungi pulsanti di comando per gli elementi multimediali. In questo modo viene aggiunta l'API Media3 per quella che era nota come
Custom browse actionscon la libreria legacy conMediaBrowserCompat. Tieni presente che con i pulsanti di comando Media3 per gli elementi multimediali sono disponibili siaMediaBrowsercheMediaController. Consulta Implementare azioni di navigazione personalizzate. - Correzione del bug per cui a volte un controller Media3 non riusciva a consentire a un'app di sessione di avviare un servizio in primo piano dopo aver richiesto
play(). - Limita
CommandButton.Builder.setIconUriall'accettazione solo di URI dei contenuti. - Passa gli hint di connessione di un browser Media3 all'
MediaBrowserCompatiniziale quando ti connetti a unMediaBrowserCompatlegacy. Il servizio può ricevere i suggerimenti per la connessione passati come suggerimenti radice con la prima chiamata aonGetRoot(). - È stato corretto il bug per cui un
MediaBrowserconnesso a un servizio browser legacy non riceveva un errore inviato dal servizio dopo che il browser aveva eseguito la sottoscrizione a unparentid. - Migliora il comportamento di interoperabilità, in modo che un browser Media3 connesso a un
MediaBrowserServicelegacy non richieda due volte i figli di unparentIdquando si iscrive a un publisher principale.
- Aggiungi
- UI:
- Attiva la soluzione alternativa per i video allungati/ritagliati in
PlayerView-in-Compose-AndroidViewa causa di problemi con le transizioni condivise basate su XML. Le app che utilizzanoPlayerViewall'interno diAndroidViewdevono chiamarePlayerView.setEnableComposeSurfaceSyncWorkaroundper attivare (#1237, #1594). - Aggiungi
setFullscreenButtonStateaPlayerViewper consentire gli aggiornamenti dell'icona del pulsante a schermo intero su richiesta, ovvero fuori banda e non in modo reattivo a un'interazione di clic (#1590, #184). - È stato corretto il bug per cui la scelta "Nessuno" nella selezione del testo non funziona se sono presenti preferenze di selezione delle tracce di testo definite dall'app.
- Attiva la soluzione alternativa per i video allungati/ritagliati in
- Estensione DASH:
- Aggiungi il supporto per i periodi che iniziano a metà di un segmento (#1440).
- Estensione Smooth Streaming:
- Correzione dell'errore
Bad magic number for Bundledurante la riproduzione di stream SmoothStreaming con tracce di testo (#1779).
- Correzione dell'errore
- Estensione RTSP:
- Estensioni del decodificatore (FFmpeg, VP9, AV1 e così via):
- Aggiungi il modulo di decodifica IAMF, che fornisce supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- La riproduzione è abilitata con un layout stereo e 5.1 con spazializzazione insieme al tracciamento della testa opzionale abilitato, ma il supporto della riproduzione binaurale non è attualmente disponibile.
- Aggiungi il supporto delle pagine da 16 kB per le estensioni del decodificatore su Android 15 (#1685).
- Aggiungi il modulo di decodifica IAMF, che fornisce supporto per la riproduzione di file MP4 contenenti tracce IAMF utilizzando la libreria nativa libiamf per sintetizzare l'audio.
- Estensione Cast:
- Interrompi la pulizia della cronologia dopo la disconnessione di CastSession, il che consente all'app mittente di riprendere la riproduzione in locale dopo una disconnessione.
- Compila
DeviceInfodi CastPlayer quando viene fornito unContext. In questo modo è possibile collegareMediaSessionaRoutingSession, il che è necessario per integrare Output Switcher (#1056).
- Test Utilities:
DataSourceContractTestora include test per verificare:- Lo stream di input
read positionè stato aggiornato. - Il buffer di output
offsetviene applicato correttamente.
- Lo stream di input
- App demo
- Risolvi le perdite di memoria nell'app demo di video brevi (#1839).
- Rimuovi i simboli ritirati:
- Rimuovi
Player.hasPreviousePlayer.hasPreviousWindow()obsoleti. Utilizza invecePlayer.hasPreviousMediaItem(). - Rimuovi il metodo
Player.previous()deprecato. UtilizzaPlayer.seekToPreviousMediaItem(). - Rimuovi il metodo
DrmSessionEventListener.onDrmSessionAcquireddeprecato. - Rimuovi i costruttori
DefaultEncoderFactorydeprecati. UtilizzaDefaultEncoderFactory.Builder.
- Rimuovi
Versione 1.5.0-rc02
19 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-rc01
13 novembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-beta01
30 ottobre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.5.0-alpha01
10 settembre 2024
Utilizza la versione stabile 1.5.0.
Versione 1.4.0
Versione 1.4.1
27 agosto 2024
androidx.media3:media3-*:1.4.1 viene rilasciata.
La versione 1.4.1 contiene questi commit.
- ExoPlayer:
- Estrattori:
- MP3: correggi l'errore
Searched too many bytesignorando correttamente i dati non MP3 finali in base al campo lunghezza in un frameInfo(#1480).
- MP3: correggi l'errore
- Testo:
- TTML: correggi la gestione dei valori di percentuale
tts:fontSizeper assicurarti che vengano ereditati correttamente dai nodi principali con valori di percentualetts:fontSize. - Correzione di
IndexOutOfBoundsExceptioninLegacySubtitleUtila causa della gestione errata del caso in cui l'ora di inizio dell'output richiesta è maggiore o uguale all'ora dell'evento finale inSubtitle(#1516).
- TTML: correggi la gestione dei valori di percentuale
- DRM:
- Correzione dell'errore
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEsui dispositivi con API 31 e versioni successive che riproducono contenuti Widevine L1. Questo errore è causato da un'implementazione incompleta del metodoMediaDrm.requiresSecureDecoderdel framework (#1603).
- Correzione dell'errore
- Effetto:
- Aggiungi un metodo
release()aGlObjectsProvider.
- Aggiungi un metodo
- Sessione:
- Trasforma un doppio tocco di
KEYCODE_HEADSETHOOKin un'azione di "avanzamento", come documentato (#1493). - Gestisci
KEYCODE_HEADSETHOOKcome comando "play" inMediaButtonReceiverquando decidi se ignorarlo per evitare unForegroundServiceDidNotStartInTimeException(#1581).
- Trasforma un doppio tocco di
- Estensione RTSP:
- Ignora le descrizioni multimediali non valide nell'analisi SDP (#1087).
Versione 1.4.0
25 luglio 2024
androidx.media3:media3-*:1.4.0 viene rilasciata.
La versione 1.4.0 contiene questi commit.
- Libreria comune:
- Inoltra le chiamate di ricerca presunte no-op ai metodi protetti
BasePlayer.seekTo()eSimpleBasePlayer.handleSeek()anziché ignorarle. Se implementi questi metodi in un player personalizzato, potresti dover gestire queste chiamate aggiuntive conmediaItemIndex == C.INDEX_UNSET. - Rimuovi la dipendenza di compilazione dal desugaring Java 8 avanzato (#1312).
- Assicurati che la durata passata a
MediaItem.Builder.setImageDurationMs()venga ignorata per unMediaItemnon immagine (come documentato). - Aggiungi
Format.customDataper archiviare informazioni personalizzate fornite dall'app sulle istanze diFormat.
- Inoltra le chiamate di ricerca presunte no-op ai metodi protetti
- ExoPlayer:
- Aggiungi
BasePreloadManagerche coordina il precaricamento per più origini in base alle priorità definite dal relativorankingData. La personalizzazione è possibile estendendo questa classe. AggiungiDefaultPreloadManagerche utilizzaPreloadMediaSourceper precaricare i campioni multimediali delle sorgenti in memoria e utilizza un numero interorankingDatache indica l'indice di un elemento nell'interfaccia utente. - Aggiungi
PlayerIdalla maggior parte dei metodi diLoadControlper consentire alle implementazioni diLoadControldi supportare più giocatori. - Rimuovi
Buffer.isDecodeOnly()eC.BUFFER_FLAG_DECODE_ONLY. Non è necessario impostare questo flag, in quanto i renderer e i decoder decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate diRendererdevono verificare se il tempo di buffer è almenoBaseRenderer.getLastResetPositionUs()per decidere se mostrare un campione. Le implementazioni personalizzate diSimpleDecoderpossono controllareisAtLeastOutputStartTimeUs()se necessario o contrassegnare altri buffer conDecoderOutputBuffer.shouldBeSkippedper ignorarli. - Consenti la restituzione di un valore null da
TargetPreloadStatusControl.getTargetPreloadStatus(T)per indicare di non precaricare unMediaSourcecon ilrankingDataspecificato. - Aggiungi
remove(MediaSource)aBasePreloadManager. - Aggiungi
reset()aBasePreloadManagerper rilasciare tutte le sorgenti di attesa mantenendo l'istanza di Gestore precaricamento. - Aggiungi
ExoPlayer.setPriority()(eBuilder.setPriority()) per definire il valore di priorità utilizzato inPriorityTaskManagere per l'importanza di MediaCodec dall'API 35. - Risolto un problema relativo all'aggiornamento dell'ultimo tempo di ribuffer che comportava
la chiave
bs(buffer starvation) errata in CMCD (#1124). - Aggiungi
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)per indicare che la fonte è stata caricata fino alla fine. Ciò consente alle implementazioniDefaultPreloadManagere a quelle personalizzatePreloadMediaSource.PreloadControldi precaricare la prossima origine o eseguire altre azioni. - Correzione del bug per cui il salto del silenzio alla fine degli elementi può attivare un'eccezione di riproduzione.
- Aggiungi
clearaPreloadMediaSourceper ignorare il periodo di precaricamento. - Aggiungi un nuovo codice di errore
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDutilizzato quando le risorse del codec vengono recuperate per attività con priorità più alta. - Consenti a
AdsMediaSourcedi caricare gli annunci pre-roll prima del completamento della preparazione iniziale dei contenuti multimediali (#1358). - È stato corretto un bug per cui la riproduzione veniva spostata su
STATE_ENDEDquando veniva ripreparato un live streaming DASH multi-periodo dopo che il periodo originale era già stato rimosso dal manifest. - Rinomina
onTimelineRefreshed()inonSourcePrepared()eonPrepared()inonTracksSelected()inPreloadMediaSource.PreloadControl. Rinomina anche IntDefs inDefaultPreloadManager.Stagedi conseguenza. - Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro
con i cicli di attivazione della CPU e ritardare l'attivazione fino a quando i renderer possono avanzare.
Puoi attivarlo utilizzando
experimentalSetDynamicSchedulingEnabled()durante la configurazione dell'istanza di ExoPlayer. - Aggiungi
Renderer.getDurationToProgressUs(). UnRendererpuò implementare questo metodo per restituire a ExoPlayer la durata di avanzamento della riproduzione perché il renderer possa progredire. SeExoPlayerè impostato conexperimentalSetDynamicSchedulingEnabled(),ExoPlayerchiamerà questo metodo durante il calcolo del tempo per pianificare l'attività di lavoro. - Aggiungi
MediaCodecAdapter#OnBufferAvailableListenerper ricevere un avviso quando i buffer di input e output sono disponibili per l'utilizzo da parte diMediaCodecRenderer.MediaCodecRenderersegnaleràExoPlayerquando riceve questi callback e seExoPlayerè impostato conexperimentalSetDynamicSchedulingEnabled(),ExoPlayerpianificherà il suo ciclo di lavoro man mano che i renderer fanno progressi. - Utilizza la classe di dati per i metodi
LoadControlanziché i singoli parametri. - Aggiungi
ExoPlayer.isReleased()per verificare seExoplayer.release()è stato chiamato. - Aggiungi
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()per configurare la posizione massima per cuiseekToPrevious()cerca l'elemento precedente (#1425). - Correzione di alcune incoerenze della messa a fuoco dell'audio, ad es. mancata segnalazione della perdita di messa a fuoco completa o temporanea durante la pausa del player (#1436).
- Correzione di potenziali
IndexOutOfBoundsExceptioncausati da estrattori che segnalano tracce aggiuntive dopo il passaggio di preparazione iniziale (#1476). EffectsinExoPlayer.setVideoEffect()riceveranno i timestamp con l'offset del renderer rimosso (#1098).- Correzione di un potenziale
IllegalArgumentExceptiondurante la gestione dell'errore del player verificatosi durante la lettura anticipata di un altro elemento della playlist (#1483).
- Aggiungi
- Transformer:
- Aggiungi
audioConversionProcessevideoConversionProcessaExportResultper indicare come è stata creata la rispettiva traccia nel file di output. - Rilassa i controlli del livello H.264 per l'ottimizzazione del taglio.
- Aggiungi il supporto per il passaggio da un supporto di input SDR a uno HDR in una sequenza.
- Aggiungi il supporto per gli effetti audio a livello di composizione.
- Aggiungi il supporto per la transcodifica delle immagini Ultra HDR in video HDR.
- Risolto il problema per cui
DefaultAudioMixernon restituisce la quantità corretta di byte dopo essere stato reimpostato e riutilizzato. - Soluzione alternativa a un bug del decodificatore in cui il numero di canali audio era limitato allo stereo durante la gestione dell'input PCM.
- Quando selezioni le tracce in
ExoPlayerAssetLoader, ignora i vincoli relativi al numero di canali audio, in quanto si applicano solo alla riproduzione. - Sostituisci l'interfaccia
androidx.media3.transformer.Muxerconandroidx.media3.muxer.Muxere rimuoviandroidx.media3.transformer.Muxer. - Correzione del caricamento delle immagini HEIC dagli schemi URI dei contenuti. (#1373).
- Regola la durata della traccia audio in
AudioGraphInputper migliorare la sincronizzazione audio/video. - Rimuovi il campo
ExportResult.processedInputs. Se utilizzi questo campo per i dettagli del codec, utilizza inveceDefaultDecoderFactory.listener. In caso di eccezione del codec, i dettagli del codec saranno disponibili inExportException.codecInfo.
- Aggiungi
- Estrattori:
- MPEG-TS: esegui il roll forward della modifica assicurandoti che l'ultimo frame venga sottoposto a rendering passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Sono stati incorporati correzioni per risolvere i problemi emersi negli stream HLS solo con I-frame(#1150) e negli stream HLS H.262 (#1126).
- MP3: preferisci le dimensioni dei dati di un frame
Inforispetto a quelle riportate dallo stream sottostante (ad es. dimensioni del file o intestazione HTTPContent-Length). In questo modo, i dati dei trailer non riproducibili (ad es. la copertina dell'album) vengono esclusi dai calcoli di ricerca del bitrate costante, rendendo le ricerche più accurate (#1376). - MP3: utilizza il conteggio dei frame e altri dati in un frame
Info(se presente) per calcolare un bitrate medio per la ricerca a bitrate costante, anziché estrapolare dal bitrate del frame dopo il frameInfo, che potrebbe essere artificialmente piccolo, ad es. framePCUT(#1376). - Correzione dell'estrazione del formato audio PCM nei container AVI.
- Audio:
- Correzione degli attributi di codifica del profilo 2 DTS:X per la riproduzione passthrough (#1299).
- Per la riproduzione scaricata, reimposta il campo di monitoraggio per il completamento dello stream
in
DefaultAudioSinkprima di chiamareAudioTrack.stop()in modo cheAudioTrack.StreamEventCallback#onPresentationEndedidentifichi correttamente quando sono stati riprodotti tutti i dati in attesa. - Correzione del bug in
SilenceSkippingAudioProcessorin cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) possono causare l'interruzione del processore (#1352). - Implementa
MediaCodecAudioRenderer.getDurationToProgressUs()in modo che ExoPlayer pianifichi dinamicamente il suo ciclo di lavoro principale in modo che MediaCodecAudioRenderer possa fare progressi.
- Video:
- È stato risolto il problema a causa del quale
Listener.onRenderedFirstFrame()arriva troppo presto quando si cambia dispositivo durante la riproduzione. - Correzione della logica di fallback del decodificatore per Dolby Vision per utilizzare un decodificatore AV1 compatibile, se necessario (#1389).
- Correzione dell'eccezione del codec che può essere causata dall'attivazione di un renderer video durante la riproduzione.
- È stato risolto il problema a causa del quale
- Testo:
- È stato risolto il problema per cui i sottotitoli che iniziano prima di una posizione di ricerca vengono ignorati. Questo problema è stato introdotto solo in Media3 1.4.0-alpha01.
- Modifica il comportamento predefinito di analisi dei sottotitoli codificati in modo che avvenga durante l'estrazione anziché durante il rendering (vedi il diagramma dell'architettura di ExoPlayer per la differenza tra estrazione e rendering).
- Questa modifica può essere ignorata chiamando sia
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)siaTextRenderer.experimentalSetLegacyDecodingEnabled(true). Consulta la documentazione sulla personalizzazione per scoprire come integrare questi componenti in un'istanzaExoPlayer. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli codificati precedenti) verranno rimossi in una release futura. - Le app con implementazioni
SubtitleDecoderpersonalizzate devono aggiornarle per implementareSubtitleParser(eSubtitleParser.FactoryanzichéSubtitleDecoderFactory).
- Questa modifica può essere ignorata chiamando sia
- PGS: correggi la decodifica run-length per risolvere
0come indice di colore, anziché un valore letterale di colore (#1367). - CEA-708: ignora il valore
rowLock. La specifica CEA-708-E S-2023 indica cherowLockecolumnLockdevono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto dicolumnLocknon è implementato, quindi si presume che sia sempre falso).- Inizialmente era incluso nelle note di rilascio di
1.3.0-alpha01, ma la modifica è stata annullata per errore prima della release di1.3.0-rc01. Il problema è stato risolto e la modifica è di nuovo presente.
- Inizialmente era incluso nelle note di rilascio di
- CEA-708: evita l'aggiunta di nuove righe duplicate da parte della gestione semplice del comando "set pen location" di ExoPlayer (#1315).
- Correzione di un
IllegalArgumentExceptiondiLegacySubtitleUtilquando un campione di sottotitoli WebVTT non contiene cue, ad esempio nell'ambito di uno stream DASH (#1516).
- Metadati:
- Correzione del mapping di MP4 ai tag di ordinamento ID3. In precedenza, i tag MP4 "ordinamento album"
(
soal), "ordinamento artisti" (soar) e "ordinamento artisti album" (soaa) erano mappati in modo errato ai tag ID3TSO2,TSOAeTSOP(#1302). - Correzione della lettura dei tag numerici
gnre(genere) etmpo(tempo) MP4 (/iTunes) quando il valore è più lungo di un byte. - Propaga il frame ID3
TCONaMediaMetadata.genre(#1305).
- Correzione del mapping di MP4 ai tag di ordinamento ID3. In precedenza, i tag MP4 "ordinamento album"
(
- Immagine:
- Aggiungi il supporto per le griglie di miniature DASH non quadrate (#1300).
- Aggiungi il supporto per AVIF per l'API 34+.
- Consenti
nullcome parametro perExoPlayer.setImageOutput()per cancellare unImageOutputimpostato in precedenza.
- DataSource:
- Implementa il supporto per gli URI delle risorse non elaborate
android.resource://package/iddovepackageè diverso dal pacchetto dell'applicazione corrente. In precedenza non era documentato che funzionasse, ma è un modo più efficiente di accedere alle risorse in un altro pacchetto rispetto al nome. - Controlla con attenzione che
urlnon sia null nei costruttoriDataSpec. Questo parametro è già stato annotato come non nullo. - Consenti a
ByteArrayDataSourcedi risolvere un URI in un array di byte duranteopen(), anziché essere codificato in modo permanente durante la costruzione (#1405).
- Implementa il supporto per gli URI delle risorse non elaborate
- DRM:
- Consenti l'impostazione di un
LoadErrorHandlingPolicysuDefaultDrmSessionManagerProvider(#1271).
- Consenti l'impostazione di un
- Effetto:
- Supporta più modifiche della velocità all'interno dello stesso
EditedMediaItemoCompositioninSpeedChangeEffect. - Supporto per l'output HLG e PQ dall'input bitmap ultra HDR.
- Aggiungi il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, che migliora l'output della superficie HLG in ExoPlayer.setVideoEffect e Debug SurfaceView di Transformer.
- Aggiorna l'implementazione della matrice di overlay per renderla coerente con la
documentazione invertendo i valori x e y applicati in
setOverlayFrameAnchor(). Se utilizziOverlaySettings.Builder.setOverlayFrameAnchor(), inverti i valori x e y moltiplicandoli per-1. - Correzione del bug per cui
TimestampWrappersi arresta in modo anomalo quando viene utilizzato conExoPlayer#setVideoEffects(#821). - Modifica lo spazio di lavoro predefinito per i colori SDR da colori lineari a video SDR BT.709 elettrico. Fornisci anche la terza opzione per mantenere lo spazio colore originale.
- Consenti la definizione dell'ordine Z indeterminato di EditedMediaItemSequences (#1055).
- Mantenere un intervallo di luminanza coerente in diversi contenuti HDR (utilizza l'intervallo HLG).
- Aggiungi il supporto per le sovrapposizioni Ultra HDR (bitmap) sui contenuti HDR.
- Consenti l'utilizzo degli effetti
SeparableConvolutionprima dell'API 26. - Rimuovi
OverlaySettings.useHdrinutilizzati poiché l'intervallo dinamico della sovrapposizione e del frame deve corrispondere. - Aggiungi il supporto HDR per
TextOverlay. La luminanza dell'overlay di testo può essere regolata conOverlaySettings.Builder.setHdrLuminanceMultiplier().
- Supporta più modifiche della velocità all'interno dello stesso
- Estensione IMA:
- Promuovi l'API richiesta per la riproduzione di stream di annunci DAI alla versione stabile.
- Aggiungi
replaceAdTagParameters(Map <String, String>)aImaServerSideAdInsertionMediaSource.AdLoaderche consente di sostituire i parametri del tag annuncio in fase di runtime. - Correzione del bug per cui
VideoAdPlayer.VideoAdPlayerCallback.onError()non veniva chiamato quando si verificava un errore del player durante la riproduzione dell'annuncio (#1334). - Aumenta la versione dell'SDK IMA a 3.33.0 per correggere un
NullPointerExceptionquando utilizzi gli URI dei tag annunciodata://(#700).
- Sessione:
- Modifica il valore predefinito di
CommandButton.enabledintruee assicurati che il valore possa rimanere false per i controller anche se il comando associato è disponibile. - Aggiungi costanti di icone per
CommandButtonda utilizzare al posto delle risorse di icone personalizzate. - Aggiungi
MediaSessionService.isPlaybackOngoing()per consentire alle app di verificare se il servizio deve essere interrotto inonTaskRemoved()(#1219). - Aggiungi
MediaSessionService.pauseAllPlayersAndStopSelf()che consente comodamente di mettere in pausa la riproduzione di tutte le sessioni e chiamarestopSelf()per terminare il ciclo di vita diMediaSessionService. - Esegui l'override di
MediaSessionService.onTaskRemoved(Intent)per fornire un'implementazione predefinita sicura che mantiene il servizio in esecuzione in primo piano se la riproduzione è in corso o lo interrompe in caso contrario. - Nascondi la barra di ricerca nella notifica multimediale per i live streaming non impostando la durata nei metadati della sessione della piattaforma (#1256).
- Allinea la conversione di
MediaMetadataaMediaDescriptionCompatper utilizzare lo stesso ordine e la stessa logica preferiti quando selezioni le proprietà dei metadati come in media1. - Aggiungi
MediaSession.sendError()che consente di inviare errori non irreversibili al controller Media3. Quando utilizzi il controller di notifica (vediMediaSession.getMediaNotificationControllerInfo()), l'errore personalizzato viene utilizzato per aggiornare loPlaybackStatedella sessione della piattaforma a uno stato di errore con le informazioni sull'errore fornite (#543). - Aggiungi
MediaSession.Callback.onPlayerInteractionFinished()per informare le sessioni quando una serie di interazioni del giocatore da un controller specifico è terminata. - Aggiungi
SessionErrore utilizzalo inSessionResulteLibraryResultanziché il codice di errore per fornire maggiori informazioni sull'errore e su come risolverlo, se possibile. - Pubblica il codice dell'app di test del controller media3 che può essere utilizzata per testare le interazioni con le app che pubblicano una sessione multimediale.
- Propaga gli extra passati a
MediaSession[Builder].setSessionExtras()di media3 aPlaybackStateCompat.getExtras()di un controller media1. - Mappa gli errori irreversibili e non irreversibili da e verso la sessione della piattaforma. Un
PlaybackExceptionviene mappato a uno stato di errore irreversibile diPlaybackStateCompat. UnSessionErrorinviato al controller di notifica dei contenuti multimediali conMediaSession.sendError(ControllerInfo, SessionError)viene mappato a un errore non fatale inPlaybackStateCompat, il che significa che il codice e il messaggio di errore sono impostati, ma lo stato della sessione della piattaforma rimane diverso daSTATE_ERROR. - Consente di impostare l'attività della sessione per controller in modo da ignorare l'attività della sessione globale. L'attività della sessione può essere definita per un
controller al momento della connessione creando un
ConnectionResultconAcceptedResultBuilder.setSessionActivivty(PendingIntent). Una volta connessa, l'attività della sessione può essere aggiornata conMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - Migliora la replica degli errori delle chiamate a
MediaLibrarySession.Callback. La replica degli errori ora può essere configurata utilizzandoMediaLibrarySession.Builder.setLibraryErrorReplicationMode()per scegliere il tipo di errore o disattivare la replica degli errori, che è attiva per impostazione predefinita.
- Modifica il valore predefinito di
- UI:
- Aggiungi il supporto per la visualizzazione delle immagini a
PlayerViewquando è connesso a unExoPlayer(#1144). - Aggiungi la personalizzazione di varie icone in
PlayerControlViewtramite attributi XML per consentire diversi elementi disegnabili per istanzaPlayerView, anziché override globali (#1200). - Soluzione alternativa a un bug della piattaforma che causa lo stiramento/il ritaglio del video quando si utilizza
SurfaceViewall'interno di unAndroidViewsull'API 34 (#1237).
- Aggiungi il supporto per la visualizzazione delle immagini a
- Download:
- Assicurati che
DownloadHelpernon rilasci istanzeRenderernon rilasciate, che possono causare l'arresto anomalo di un'app conIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- Assicurati che
- Estensione Cronet:
- Correggi
SocketTimeoutExceptioninCronetDataSource. In alcune versioni di Cronet, la richiesta fornita dal callback non è sempre la stessa. Ciò comporta il mancato completamento del callback e il timeout della richiesta (https://issuetracker.google.com/328442628).
- Correggi
- Estensione HLS:
- Correzione del bug per cui i campioni EMSG in attesa di una discontinuità venivano
delegati in
HlsSampleStreamWrappercon un offset errato che causava unIndexOutOfBoundsExceptiono unIllegalArgumentException(#1002). - È stato corretto un bug a causa del quale le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
- Correzione del bug per cui l'attivazione di CMCD per HLS con segmenti di inizializzazione
comportava
Source ErroreIllegalArgumentException. - È stato corretto un bug a causa del quale le playlist di riproduzione non principali non venivano aggiornate durante la riproduzione live (#1240).
- Correzione del bug per cui l'attivazione di CMCD per i live streaming HLS causa
ArrayIndexOutOfBoundsException(#1395).
- Correzione del bug per cui i campioni EMSG in attesa di una discontinuità venivano
delegati in
- Estensione DASH:
- Estensione Cast:
- Correzione del bug che convertiva il titolo dell'album di
MediaQueueItemnell'artista nell'elemento multimediale Media3 (#1255).
- Correzione del bug che convertiva il titolo dell'album di
- Test Utilities:
- Implementa
onInit()eonRelease()inFakeRenderer. - Modifica i metodi
TestPlayerRunHelper.runUntil()/playUntil()in modo che non vengano eseguiti in caso di errori non irreversibili (ad es. quelli segnalati aAnalyticsListener.onVideoCodecError()). Utilizza la nuova catena di metodiTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()per disattivare questo comportamento.
- Implementa
- App demo:
- Utilizza
DefaultPreloadManagernell'app demo per i video nel formato breve. - Consente di impostare la modalità di ripetizione con gli argomenti
Intentdalla riga di comando (#1266). - Utilizzare
HttpEngineDataSourcecomeHttpDataSourcese supportato dal dispositivo.
- Utilizza
- Rimuovi i simboli ritirati:
- Rimuovi
CronetDataSourceFactory. Utilizza inveceCronetDataSource.Factory. - Rimuovi alcuni costruttori di
DataSpec. Utilizza inveceDataSpec.Builder. - Rimuovi il metodo
setContentTypePredicate(Predicate)daDefaultHttpDataSource,OkHttpDataSourceeCronetDataSource. Utilizza il metodo equivalente su ogniXXXDataSource.Factory. - Rimuovi i costruttori
OkHttpDataSourceeOkHttpDataSourceFactory. Utilizza inveceOkHttpDataSource.Factory. - Rimuovi
PlayerMessage.setHandler(Handler). Utilizza invecesetLooper(Looper). - Rimuovi il campo
Timeline.Window.isLive. Utilizza invece il metodoisLive(). - Rimuovi i costruttori
DefaultHttpDataSource. UtilizzaDefaultHttpDataSource.Factory. - Rimuovi
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. UtilizzaDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS. - Rimuovi
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Utilizza inveceMediaCodecInfo.canReuseCodec(Format, Format). - Rimuovi il metodo
DrmSessionManager.DUMMYegetDummyDrmSessionManager(). Utilizza inveceDrmSessionManager.DRM_UNSUPPORTED. - Rimuovi
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Utilizza gli overload che accettano unDecoderReuseEvaluation. - Rimuovi le costanti
RendererSupport.FormatSupportIntDef eFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPE,FORMAT_UNSUPPORTED_TYPE. Utilizza le costanti e IntDef equivalenti inandroidx.media3.common.C(ad es.C.FORMAT_HANDLED). - Rimuovi l'interfaccia
Bundleable. Ciò include la rimozione di tutti i campi costantiBundleable.Creator<Foo> CREATOR. I chiamanti devono utilizzare i metodiBundle toBundle()estatic Foo fromBundle(Bundle)su ogni tipo.
- Rimuovi
Versione 1.4.0-rc01
10 luglio 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-beta01
26 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha02
7 giugno 2024
Utilizza la versione stabile 1.4.0.
Versione 1.4.0-alpha01
17 aprile 2024
Utilizza la versione stabile 1.4.0.
Versione 1.3.0
Versione 1.3.1
11 aprile 2024
androidx.media3:media3-*:1.3.1 viene rilasciata.
La versione 1.3.1 contiene questi commit.
- Libreria comune:
- Aggiungi
Format.labelsper consentire etichette localizzate o alternative.
- Aggiungi
- ExoPlayer:
- È stato risolto il problema per cui
PreloadMediaPeriodnon riesce a conservare gli stream quando vengono precaricati di nuovo. - Applica il valore
TrackSelectionResultcorrispondente corretto al periodo di riproduzione nella riselezione della traccia. - Avvia i renderer con attivazione anticipata solo dopo aver fatto avanzare il periodo di riproduzione durante la transizione tra gli elementi multimediali (#1017).
- Aggiungi il tipo restituito mancante alla regola Proguard
-keepclasseswithmembersperDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- È stato risolto il problema per cui
- Transformer:
- Aggiungi una soluzione alternativa per l'eccezione generata perché
MediaMuxernon supporta i timestamp di presentazione negativi prima dell'API 30.
- Aggiungi una soluzione alternativa per l'eccezione generata perché
- Selezione tracce:
DefaultTrackSelector: preferisce le tracce video con una frequenza di frame "ragionevole" (>=10 fps) rispetto a quelle con una frequenza di frame inferiore o non impostata. In questo modo, il player seleziona la traccia video "reale" nei file MP4 estratti dalle foto in movimento che possono contenere due tracce HEVC, una con una risoluzione più alta ma un numero di frame molto ridotto (#1051).
- Estrattori:
- Risolto il problema per cui il padding non veniva ignorato durante la lettura di blocchi di dimensioni dispari dai file WAV (#1117).
- MP3: compila
Format.averageBitratedai frame dei metadati, ad esempioXINGeVBRI. - MPEG-TS: ripristina una modifica che mirava a garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909). Ciò è dovuto alla modifica che causa nuovi problemi con gli stream HLS solo con I-frame (#1150) e gli stream HLS H.262 (#1126).
- Audio:
- Consenti il recupero del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità offload.
- Video:
- Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione degli stream H265 a 60 fps come non supportati
- Aggiungi una soluzione alternativa che garantisca il rendering del primo frame durante il tunneling anche se il dispositivo non lo esegue automaticamente come richiesto dall'API (#1169). (#966).
- Risolto il problema per cui la gestione delle informazioni sul colore HDR causa un comportamento anomalo del codec e impedisce il cambio di formato adattivo per le tracce video SDR (#1158).
- Testo:
- WebVTT: impedisci che cue consecutivi creino istanze
CuesWithTimingaggiuntive spurie daWebvttParser.parse(#1177).
- WebVTT: impedisci che cue consecutivi creino istanze
- DRM:
- Soluzione alternativa per un
NoSuchMethodErrorche può essere generato dal frameworkMediaDrmanziché daResourceBusyExceptionoNotProvisionedExceptionsu alcuni dispositivi Android 14 (#1145).
- Soluzione alternativa per un
- Effetto:
- Miglioramento della mappatura della tonalità PQ in SDR mediante la conversione degli spazi colore.
- Sessione:
- UI:
- Esegui il fallback per includere il nome della lingua della traccia audio se
Localenon riesce a identificare un nome visualizzato (#988).
- Esegui il fallback per includere il nome della lingua della traccia audio se
- Estensione DASH:
- Inserisci tutti gli elementi
Labeldel manifest inFormat.labels(#1054).
- Inserisci tutti gli elementi
- Estensione RTSP:
- Ignora i valori vuoti delle informazioni sulla sessione (i-tag) nell'analisi SDP (#1087).
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Disattiva l'estensione MIDI come dipendenza locale per impostazione predefinita perché richiede la configurazione di un repository Maven aggiuntivo. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riattivarlo.
Versione 1.3.0
6 marzo 2024
androidx.media3:media3-*:1.3.0 viene rilasciata.
La versione 1.3.0 contiene questi commit.
- Libreria comune:
- Implementa il supporto per gli URI delle risorse non elaborate
android.resource://package/[type/]namein cuipackageè diverso dal pacchetto dell'applicazione corrente. È sempre stato documentato che funziona, ma non è stato implementato correttamente fino ad ora. - Normalizza i tipi MIME impostati dal codice dell'app o letti dai contenuti multimediali in modo che siano completamente in minuscolo.
- Definisci gli annunci con un
MediaItemcompleto anziché un singoloUriinAdPlaybackState. - Aumenta
minSdka 19 (Android KitKat). Questo è in linea con tutte le altre librerie AndroidX ed è necessario per eseguire l'upgrade alle versioni più recenti delle nostre dipendenze AndroidX. - Compila sia
artworkUrisiaartworkDatainMediaMetadata.Builder.populate(MediaMetadata)quando almeno uno dei due non è nullo (#964).
- Implementa il supporto per gli URI delle risorse non elaborate
- ExoPlayer:
- Aggiungi
PreloadMediaSourceePreloadMediaPeriodche consentono alle app di precaricare un'origine multimediale di contenuti in una posizione iniziale specifica prima della riproduzione.PreloadMediaSourcesi occupa di preparare l'origine dei contenuti multimediali per ricevere ilTimeline, preparare e memorizzare nella cache il periodo nella posizione iniziale specificata, selezionare le tracce e caricare i dati multimediali per il periodo. Le app controllano l'avanzamento del precaricamento implementandoPreloadMediaSource.PreloadControle impostano l'origine precaricata sul player per la riproduzione. - Aggiungi
ExoPlayer.setImageOutputche consente alle app di impostareImageRenderer.ImageOutput. DefaultRenderersFactoryora fornisce unImageRendereral giocatore per impostazione predefinita conImageOutputeImageDecoder.Factory.DEFAULTnulli.- Emetti l'evento
Player.Listener.onPositionDiscontinuityquando il silenzio viene saltato (#765). - Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi
abilitare questa opzione utilizzando
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - Supporta le origini multimediali adattive con
PreloadMediaSource. - Implementa
HttpEngineDataSource, unHttpDataSourceutilizzando l'API HttpEngine. - Evita la creazione di sottoclassi
CompositeSequenceableLoader. Questo componente è stato precedentemente reso estensibile ma non è mai stato creato come sottoclasse all'interno della libreria. Le personalizzazioni possono essere eseguite wrapping di un'istanza utilizzando il pattern Decorator e implementando unCompositeSequenceableLoaderFactorypersonalizzato. - È stato risolto il problema per cui la ripetizione dello stesso orario causava la cancellazione dei metadati di questo elemento (#1007).
- Rinomina i metodi
experimentalSetSubtitleParserFactorysuBundledChunkExtractor.FactoryeDefaultHlsExtractorFactoryinsetSubtitleParserFactorye non consentire il passaggio dinull. Utilizza i nuovi metodiexperimentalParseSubtitlesDuringExtraction(boolean)per controllare il comportamento di analisi. - Aggiungi il supporto per la personalizzazione di
SubtitleParser.Factoryutilizzato durante l'estrazione. È possibile ottenere questo risultato conMediaSource.Factory.setSubtitleParserFactory(). - Aggiungi il prefisso dell'origine a tutti i campi
Format.idgenerati daMergingMediaSource. In questo modo è più facile identificare l'origine che ha prodotto unFormat(#883). - Correggi l'espressione regolare utilizzata per la convalida dei nomi delle chiavi Common Media Client Data (CMCD) personalizzate modificandola in modo che controlli solo il trattino (#1028).
- Interrompi la doppia codifica dei parametri di query CMCD (#1075).
- Aggiungi
- Transformer:
- Aggiunta del supporto per l'appiattimento dei video in slow motion H.265/HEVC SEF.
- Aumenta la velocità di transmuxing, soprattutto per le modifiche di "rimozione video".
- Aggiungi l'API per assicurarti che il file di output inizi con un frame video. In questo modo, l'output delle operazioni di taglio è più compatibile con le implementazioni del player che non mostrano il primo frame video finché non viene visualizzato il timestamp di presentazione (#829).
- Aggiungi il supporto per l'ottimizzazione delle operazioni di taglio MP4 di un singolo asset.
- Aggiungi il supporto per garantire che un fotogramma video abbia il primo timestamp nel file di output. Correzioni dei file di output che iniziano con un fotogramma nero sui lettori basati su iOS (#829).
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.selectImageTrackper attivare la selezione della traccia dell'immagine. - Aggiungi
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledper determinare se selezionare una traccia di immagini se sono disponibili sia una traccia di immagini che una traccia video. Il valore predefinito èfalse, il che significa che la selezione di una traccia video è prioritaria.
- Aggiungi
- Estrattori:
- Aggiungi l'analisi AV1C aggiuntiva all'estrattore MP4 per recuperare i valori
ColorInfo.colorSpace,ColorInfo.colorTransfereColorInfo.colorRange(#692). - MP3: utilizza la ricerca a bitrate costante (CBR) per i file con un'intestazione
Info(l'equivalente CBR dell'intestazioneXing). In precedenza utilizzavamo la tabella di ricerca dall'intestazioneInfo, ma ciò comporta una ricerca meno precisa rispetto a quando la ignoriamo e supponiamo che il file sia CBR. - MPEG2-TS: aggiungi il supporto di DTS, DTS-LBR e DTS:X Profile2 (#275).
- Estrai i tipi di audio dai descrittori TS e mappali ai flag di ruolo, consentendo agli utenti di effettuare selezioni più informate delle tracce audio (#973).
- Aggiungi l'analisi AV1C aggiuntiva all'estrattore MP4 per recuperare i valori
- Audio:
- Video:
- Modifica il costruttore
MediaCodecVideoRendererche accetta un argomentoVideoFrameProcessor.Factorye sostituiscilo con un costruttore che accetta un argomentoVideoSinkProvider. Le app che vogliono inserire unVideoFrameProcessor.Factorypersonalizzato possono istanziare unCompositingVideoSinkProviderche utilizza ilVideoFrameProcessor.Factorypersonalizzato e passare il fornitore del sink video aMediaCodecVideoRenderer.
- Modifica il costruttore
- Testo:
- Correzione della serializzazione dei cue bitmap per risolvere l'errore
Tried to marshall a Parcel that contained Binder objectsquando si utilizzaDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: ignora il valore
rowLock. La specifica CEA-708-E S-2023 indica cherowLockecolumnLockdevono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto dicolumnLocknon è implementato, quindi si presume che sia sempre falso).
- Correzione della serializzazione dei cue bitmap per risolvere l'errore
- Immagine:
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e le singole miniature vengono fornite a
ImageOutputin prossimità degli orari di presentazione.
- Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e le singole miniature vengono fornite a
- DRM:
- Riproduci immediatamente i campioni non criptati "clear lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i campioni criptati successivi non sono ancora pronte. Ciò potrebbe causare interruzioni della riproduzione se le chiavi non sono ancora pronte
quando la posizione di riproduzione raggiunge i campioni criptati (ma in precedenza
la riproduzione non sarebbe iniziata affatto a questo punto). Questo comportamento può
essere disattivato con
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyoDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.
- Riproduci immediatamente i campioni non criptati "clear lead" nei contenuti DRM per impostazione predefinita, anche se le chiavi per i campioni criptati successivi non sono ancora pronte. Ciò potrebbe causare interruzioni della riproduzione se le chiavi non sono ancora pronte
quando la posizione di riproduzione raggiunge i campioni criptati (ma in precedenza
la riproduzione non sarebbe iniziata affatto a questo punto). Questo comportamento può
essere disattivato con
- Estensione IMA:
- Risolvi il problema per cui gli annunci DASH e HLS senza l'estensione file appropriata non possono essere riprodotti.
- Sessione:
- Disattivare il rilevamento del doppio clic per le app TV (#962).
- Risolto il problema per cui
MediaItem.RequestMetadatacon solo extra non nulli non viene trasmesso tra i controller multimediali e le sessioni. - Aggiungi un costruttore a
MediaLibrarySession.Builderche accetta solo unContextanziché unMediaLibraryService.
- Estensione HLS:
- Riduci
HlsMediaPeriodalla visibilità privata del pacchetto. Questo tipo non deve dipendere direttamente dall'esterno del pacchetto HLS. - Risoluzione della ricerca all'inizio di un segmento in modo più efficiente (#1031).
- Riduci
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Decodificatore MIDI: ignora i messaggi di eventi SysEx (#710).
- Test Utilities:
- Non mettere in pausa la riproduzione in
TestPlayerRunHelper.playUntilPosition. Il test mantiene la riproduzione in stato di riproduzione, ma sospende l'avanzamento finché non è in grado di aggiungere asserzioni e ulteriori azioni.
- Non mettere in pausa la riproduzione in
- App demo:
- Aggiungi un modulo demo di shortform per dimostrare l'utilizzo di
PreloadMediaSourcecon il caso d'uso dei contenuti nel formato breve.
- Aggiungi un modulo demo di shortform per dimostrare l'utilizzo di
Versione 1.3.0-rc01
22 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-beta01
7 febbraio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.3.0-alpha01
15 gennaio 2024
Utilizza la versione stabile 1.3.0.
Versione 1.2.0
Versione 1.2.1
9 gennaio 2024
- ExoPlayer:
- Risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
LiveConfiguration.min/maxOffsetcontinuano a regolare l'offset sumin/maxOffset. - Correzione del problema relativo ai layout dei canali OPUS e VORBIS errati per 3, 5, 6, 7 e 8 canali (#8396).
- È stato risolto il problema per cui le selezioni delle tracce dopo la ricerca fino a zero in un live streaming consentivano erroneamente l'avvio dello stream nella posizione predefinita (#9347).
- Risolvi il problema per cui le nuove istanze di
CmcdData.Factoryricevevano valori negativi perbufferedDurationUsdalle origini dei chunk, con conseguenteIllegalArgumentException(#888).
- Risolto il problema per cui le ricerche manuali al di fuori dell'intervallo
- Transformer:
- Soluzione alternativa a un problema per cui l'encoder generava un errore in fase di configurazione a causa dell'impostazione di una frequenza operativa elevata.
- Estrattori:
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
ROLE_FLAG_ALTERNATEper evitare che vengano selezionate automaticamente per la riproduzione a causa della loro risoluzione più elevata. - Correzione del rilevamento errato dei fotogrammi chiave per gli stream TS H264 (#864).
- Correzione della stima della durata dei flussi TS più lunghi di 47721 secondi (#855).
- Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come
- Audio:
- Correzione della gestione di EOS per
SilenceSkippingAudioProcessorquando viene chiamato più volte (#712).
- Correzione della gestione di EOS per
- Video:
- Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione dei flussi AVC a 60 fps come non supportati (#693).
- Metadati:
- Correzione del bug per cui
MediaMetadataveniva compilato solo dai commenti Vorbis con chiavi in maiuscolo (#876). - Catch
OutOfMemoryErrordurante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni del tag anziché interrompersi completamente.
- Correzione del bug per cui
- DRM:
- Estendi la soluzione alternativa per l'URL della licenza ClearKey
https://default.urlspurio all'API 33+ (in precedenza la soluzione alternativa si applicava solo all'API 33) (#837). - Correzione di
ERROR_DRM_SESSION_NOT_OPENEDquando si passa da contenuti criptati a contenuti non criptati senza una superficie collegata al lettore. L'errore è stato causato dall'utilizzo errato di un decoder sicuro per riprodurre i contenuti non protetti.
- Estendi la soluzione alternativa per l'URL della licenza ClearKey
- Sessione:
- Inserisci le chiavi e i valori personalizzati in
MediaMetadataCompatperMediaMetadata.extraseMediaMetadata.extrasperMediaMetadataCompat(#756, #802). - Correzione della trasmissione
notifyChildrenChangedper i controller legacy (#644). - È stato corretto un bug per cui l'impostazione di un tempo negativo per un timer
setWhendisattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903). - Correzione di
IllegalStateExceptionquando il controller di notifica dei contenuti multimediali non ha completato la connessione quando viene richiesto il primo aggiornamento della notifica (#917).
- Inserisci le chiavi e i valori personalizzati in
- UI:
- Estensione DASH:
- Analizza "f800" come conteggio dei canali pari a 5 per Dolby nel manifest DASH (#688).
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Estensione Cast:
- Sanitizzazione della creazione di un
Timelineper evitare l'arresto anomalo dell'app durante il caricamento il caricamento dei contenuti multimediali non riesce sul dispositivo di trasmissione (#708).
- Sanitizzazione della creazione di un
Versione 1.2.0
15 novembre 2023
- Libreria comune:
- Aggiungi un parametro
@Nullable Throwableai metodi nell'interfacciaLog.Logger. Il parametromessagedi questi metodi non contiene più alcuna informazione suThrowablepassato ai metodiLog.{d,i,w,e}(), pertanto le implementazioni dovranno aggiungere manualmente queste informazioni, se necessario (possibilmente utilizzandoLogger.appendThrowableString(String, Throwable)). - Risolvi il problema di compatibilità di Kotlin per cui i parametri di tipo generico nullable
e i tipi di elementi array nullable non vengono rilevati come nullable. Esempi
sono i parametri dei metodi
TrackSelectorResulteSimpleDecoder(#6792). - Modifica il comportamento predefinito della UI e delle notifiche in
Util.shouldShowPlayButtonper mostrare un pulsante "Riproduci" mentre la riproduzione è temporaneamente sospesa (ad es. a causa della perdita temporanea della messa a fuoco audio). Il comportamento precedente può essere mantenuto utilizzandoPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)oMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Esegui l'upgrade di
androidx.annotation:annotation-experimentala1.3.1per correggere https://issuetracker.google.com/251172715. - Sposta
ExoPlayer.setAudioAttributesnell'interfacciaPlayer.
- Aggiungi un parametro
- ExoPlayer:
- Correzione dei problemi di ricerca negli stream AC4 causati dalla mancata identificazione corretta dei campioni di sola decodifica (#11000).
- Aggiungi la soppressione della riproduzione su dispositivi di output audio non adatti (ad es. l'altoparlante integrato sui dispositivi Wear OS) quando questa funzionalità è attivata tramite
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Il motivo della soppressione della riproduzione verrà aggiornato aPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTse si tenta la riproduzione quando non sono disponibili uscite audio adatte o se tutte le uscite adatte vengono disconnesse durante la riproduzione. Il motivo della soppressione verrà rimosso quando viene collegato un output adatto. - Aggiungi
MediaSource.canUpdateMediaItemeMediaSource.updateMediaItemper accettare gli aggiornamenti diMediaItemdopo la creazione tramitePlayer.replaceMediaItem(s). - Consenti gli aggiornamenti di
MediaItemper tutte le classiMediaSourcefornite dalla libreria tramitePlayer.replaceMediaItem(s)(#33, #9978). - Rinomina
MimeTypes.TEXT_EXOPLAYER_CUESinMimeTypes.APPLICATION_MEDIA3_CUES. - Aggiungi
PngExtractorche invia e legge un intero file PNG inTrackOutputcome un campione. - Migliora il metodo
SequenceableLoader.continueLoading(long)nell'interfacciaSequenceableLoaderperSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfocontiene parametri aggiuntivi, tra cuiplaybackSpeedelastRebufferRealtimeMs, oltre aplaybackPositionUs. - Migliora il metodo
ChunkSource.getNextChunk(long, long, List, ChunkHolder)nell'interfacciaChunkSourceperChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Aggiungi campi aggiuntivi alla registrazione dei dati del client multimediale comune (CMCD): buffer
starvation (
bs), deadline (dl), playback rate (pr) and startup (su) (#8699). - Aggiungi la profondità di bit di luminanza e crominanza a
ColorInfo(#491). - Aggiungi campi aggiuntivi alla registrazione dei dati del client multimediale comune (CMCD): richiesta dell'oggetto successivo (
nor) e richiesta dell'intervallo successivo (nrr) (#8699). - Aggiungi la funzionalità per trasmettere i dati Common Media Client Data (CMCD) utilizzando i parametri di query (#553).
- Correggi
ConcurrentModificationExceptioninExperimentalBandwidthMeter(#612). - Aggiungi il parametro
MediaPeriodIdaCompositeMediaSource.getMediaTimeForChildMediaTime. - Supporta
ClippingMediaSource(e altre origini con offset di periodo/intervallo di tempo) inConcatenatingMediaSource2(#11226). - Modifica
BaseRenderer.onStreamChanged()per ricevere anche un argomentoMediaPeriodId.
- Transformer:
- Analizza i dati di rotazione EXIF per gli input immagine.
- Rimuovi il tipo di annotazione
TransformationRequest.HdrModee le relative costanti. UtilizzaComposition.HdrModee le relative costanti. - Semplifica il
OverlaySettingsper risolvere i problemi di rotazione. - Modificati i parametri
frameRateedurationUsdiSampleConsumer.queueInputBitmapinTimestampIterator.
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessper consentire o vietare esplicitamente l'adattamento non ottimale. Il valore predefinito rimane al comportamento attuale ditrue.
- Aggiungi
- Estrattori:
- MPEG-TS: assicurati che l'ultimo frame venga sottoposto a rendering passando l'ultima unità di accesso di uno stream alla coda di campioni (#7909).
- Correzione dell'errore ortografico durante la determinazione di
rotationDegrees. Modifica apportata daprojectionPosePitchaprojectionPoseRoll(#461). - Rimuovi l'ipotesi che le istanze
Extractorpossano essere ispezionate direttamente coninstanceof. Se vuoi accedere in fase di runtime ai dettagli di implementazione di unExtractor, devi prima chiamareExtractor.getUnderlyingInstance. - Aggiungi
BmpExtractor. - Aggiungi
WebpExtractor. - Aggiungi
HeifExtractor. - Aggiungi
il supporto di QuickTime Classic
a
Mp4Extractor.
- Audio:
- Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza
la codifica PCM per
lpcmin MP4. - Aggiungi il supporto per l'estrazione dell'audio Vorbis in MP4.
- Aggiungi
AudioSink.getFormatOffloadSupport(Format)che recupera il livello di supporto dell'offload che il sink può fornire per il formato tramite unDefaultAudioOffloadSupportProvider. Restituisce il nuovoAudioOffloadSupportche contieneisFormatSupported,isGaplessSupportedeisSpeedChangeSupported. - Aggiungi
AudioSink.setOffloadMode()tramite cui viene configurata la configurazione di offload sul sink audio. Il valore predefinito èAudioSink.OFFLOAD_MODE_DISABLED. - Il trasferimento può essere attivato tramite
setAudioOffloadPreferenceinTrackSelectionParameters. Se la preferenza impostata è l'attivazione, il dispositivo supporta l'offload per il formato e la selezione della traccia è una singola traccia audio, l'offload audio verrà attivato. - Se
audioOffloadModePreferenceè impostato suAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED,DefaultTrackSelectorselezionerà solo una traccia audio e solo se il formato della traccia è supportato nell'offload. Se nessuna traccia audio è supportata nell'offload, non verrà selezionata alcuna traccia. - Disattivazione del supporto gapless per l'offload quando il livello API è precedente a 33 a causa di un problema di posizione di riproduzione dopo la transizione della traccia.
- Rimuovi il parametro
enableOffloaddalla firma del metodoDefaultRenderersFactory.buildAudioSink. - Rimuovi il metodo
DefaultAudioSink.Builder.setOffloadMode. - Rimuovi il valore intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Aggiungi il supporto per i metadati gapless di Opus durante la riproduzione con scaricamento.
- Consenti il recupero del renderer disattivando l'offload se non è riuscito alla prima scrittura (#627).
- Attiva la pianificazione dell'offload per impostazione predefinita per la riproduzione con offload solo audio.
- Elimina
ExoPlayer.experimentalSetOffloadSchedulingEnabledeAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. onExperimentalSleepingForOffloadChangedè stato rinominato inonSleepingForOffloadChangedeonExperimentalOffloadedPlaybackinonOffloadedPlayback.- Sposta le interfacce e le definizioni relative alla modalità di offload audio in una classe
AudioOffloadPreferencesinterna.TrackSelectionParameters - Aggiungi i callback
onAudioTrackInitializedeonAudioTrackReleasedaAnalyticsListener,AudioRendererEventListenereAudioSink.Listener. - Correzione del problema di underflow del buffer audio DTS Express (#650).
- Correzione del bug per cui il controllo delle funzionalità per E-AC3-JOC genera un
IllegalArgumentException(#677).
- Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza
la codifica PCM per
- Video:
- Consenti a
MediaCodecVideoRendererdi utilizzare unVideoFrameProcessor.Factorypersonalizzato. - È stato corretto un bug a causa del quale non era possibile eseguire il rendering del primo frame se lo stream audio inizia con timestamp negativi (#291).
- Consenti a
- Testo:
- Rimuovi
ExoplayerCuesDecoder. Le tracce di testo consampleMimeType = application/x-media3-cuesora vengono gestite direttamente daTextRenderersenza bisogno di un'istanzaSubtitleDecoder.
- Rimuovi
- Metadati:
MetadataDecoder.decodenon verrà più chiamato per i campioni "solo decodifica" perché l'implementazione deve comunque restituire null.
- Effetto:
- Aggiungi
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)input bitmap in coda in base al timestamp. - Modifica
VideoFrameProcessor.registerInputStream()in modo che non blocchi. Le app devono implementareVideoFrameProcessor.Listener#onInputStreamRegistered(). - Modificati i parametri
frameRateedurationUsdiVideoFrameProcessor.queueInputBitmapinTimestampIterator.
- Aggiungi
- Estensione IMA:
- È stato corretto un bug per cui un live streaming DASH multi-periodo che non è il primo elemento di una playlist può generare un'eccezione (#571).
- Rilascia StreamManager prima di chiamare
AdsLoader.destroy() - Aumenta la versione dell'SDK IMA a 3.31.0.
- Sessione:
- Imposta il comportamento del servizio in primo piano delle notifiche su
FOREGROUND_SERVICE_IMMEDIATEinDefaultMediaNotificationProvider(#167). - Utilizza solo
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()sopra l'API 31 per evitare problemi con l'API ritirata sui dispositivi Samsung (#167). - Utilizza il controller di notifica dei contenuti multimediali come proxy per impostare i comandi disponibili e il layout personalizzato utilizzato per compilare la notifica e la sessione della piattaforma.
- Converti gli eventi dei pulsanti multimediali ricevuti da
MediaSessionService.onStartCommand()in Media3 anziché indirizzarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controller del chiamante è sempre il controller delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica nello stesso modo su tutti i livelli API supportati. - È stato corretto un bug per cui
MediaController.getCurrentPosition()non avanza quando è connesso a unMediaSessionCompatlegacy. - Aggiungi
MediaLibrarySession.getSubscribedControllers(mediaId)per comodità. - Esegui l'override di
MediaLibrarySession.Callback.onSubscribe()per confermare la disponibilità dell'ID genitore a cui è iscritto il controller. Se l'operazione va a buon fine, l'abbonamento viene accettato enotifyChildrenChanged()viene chiamato immediatamente per informare il browser (#561). - Aggiungi il modulo demo della sessione per Automotive OS e attiva la demo della sessione per Android Auto.
- Non impostare la coda della sessione del framework quando
COMMAND_GET_TIMELINEnon è disponibile per il controller di notifica multimediale. Con Android Auto come controller client che legge dalla sessione del framework, il pulsantequeuenell'interfaccia utente di Android Auto non viene visualizzato (#339). - Utilizza
DataSourceBitmapLoaderper impostazione predefinita anzichéSimpleBitmapLoader(#271, #327). - Aggiungi
MediaSession.Callback.onMediaButtonEvent(Intent)che consente alle app di ignorare la gestione predefinita degli eventi dei pulsanti multimediali.
- Imposta il comportamento del servizio in primo piano delle notifiche su
- UI:
- Aggiungi un'implementazione di
Player.Listenerper i dispositivi Wear OS che gestisce la soppressione della riproduzione a causa diPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTavviando una finestra di dialogo di sistema per consentire a un utente di connettere un'uscita audio adatta (ad es. cuffie Bluetooth). Il listener riprenderà automaticamente la riproduzione se viene connesso un dispositivo adatto entro un timeout configurabile (il valore predefinito è 5 minuti).
- Aggiungi un'implementazione di
- Download:
- Dichiara il tipo di servizio in primo piano "data sync" per
DownloadServiceper la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungeredataSynccomeforegroundServiceTypenel manifest e aggiungere l'autorizzazioneFOREGROUND_SERVICE_DATA_SYNC(#11239).
- Dichiara il tipo di servizio in primo piano "data sync" per
- Estensione HLS:
- Aggiorna la playlist live HLS con un intervallo calcolato in base all'ora di inizio dell'ultimo caricamento anziché all'ora di completamento dell'ultimo caricamento (#663).
- Estensione DASH:
- Consenti più identificatori DASH uguali nell'URL del modello di segmento.
- Aggiunta del supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Questo
supporta meglio l'unione di sottotitoli sovrapposti, inclusa
la risoluzione dello sfarfallio durante la transizione tra segmenti di sottotitoli. Puoi
attivare questa opzione
utilizzando
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288).
- Estensione RTSP:
- Correzione di una condizione di competizione che potrebbe causare
IndexOutOfBoundsExceptiondurante il fallback a TCP o l'interruzione della riproduzione in alcune situazioni. - Controlla lo stato nella configurazione RTSP quando viene restituito lo stato di caricamento di
RtspMediaPeriod(#577). - Ignora i metodi di richiesta RTSP personalizzati nell'intestazione pubblica della risposta OPTIONS (#613).
- Utilizza il valore di timeout della risposta di configurazione RTSP nell'intervallo di tempo di invio delle richieste di opzioni RTSP keep-alive (#662).
- Correzione di una condizione di competizione che potrebbe causare
- Estensioni del decodificatore (FFmpeg, VP9, AV1, MIDI e così via):
- Rilascia il modulo del decoder MIDI, che fornisce supporto per la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
- Aggiungi
DecoderOutputBuffer.shouldBeSkippedper contrassegnare direttamente i buffer di output che non devono essere presentati. Questa soluzione è preferibile aC.BUFFER_FLAG_DECODE_ONLY, che verrà ritirato. - Aggiungi
Decoder.setOutputStartTimeUseSimpleDecoder.isAtLeastOutputStartTimeUsper consentire ai decoder di eliminare i campioni di sola decodifica prima dell'ora di inizio. Questo valore deve essere preferito aBuffer.isDecodeOnly, che verrà ritirato. - Correzione del bug relativo alla pubblicazione dell'artefatto del decodificatore MIDI nel repository Maven. L'artefatto è stato rinominato in
media3-exoplayer-midi(#734).
- Estensione Leanback:
- Correzione del bug per cui la disattivazione di una superficie può causare un
ArithmeticExceptionnel codice Leanback (#617).
- Correzione del bug per cui la disattivazione di una superficie può causare un
- Test Utilities:
- Rendi
TestExoPlayerBuildereFakeClockcompatibili con i test della UI Espresso e i test della UI Compose. È stato corretto un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni con le visualizzazioni Espresso o Compose.
- Rendi
- Rimuovi i simboli ritirati:
- Rimuovi
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)eTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). UtilizzaComposition.Builder.setHdrMode(int)e passaCompositionaTransformer.start(Composition, String). - Rimuovi il metodo
DownloadNotificationHelper.buildProgressNotificationdeprecato e utilizza un metodo non deprecato che accetta un parametronotMetRequirements.
- Rimuovi
Versione 1.2.0-rc01
1° novembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-beta01
19 ottobre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha02
29 settembre 2023
Utilizza la versione stabile 1.2.0.
Versione 1.2.0-alpha01
17 agosto 2023
Utilizza la versione stabile 1.2.0.
Versione 1.1.0
Versione 1.1.1
16 agosto 2023
- Libreria comune:
- Rimuovi la dipendenza
multidexaggiunta per errore da tutti i moduli (#499).
- Rimuovi la dipendenza
- ExoPlayer:
- È stato risolto un problema in
PlaybackStatsListenerper cui vengono creatiPlaybackStatsspuri dopo la cancellazione della playlist. - Aggiungi altri campi alla registrazione dei dati del client multimediale comune (CMCD): formato di streaming (sf), tipo di stream (st), versione (v), bitrate massimo (tb), durata dell'oggetto (d), throughput misurato (mtp) e tipo di oggetto (ot) (#8699).
- È stato risolto un problema in
- Audio:
- È stato corretto un bug per cui
Player.getState()non passava mai aSTATE_ENDEDdurante la riproduzione di file molto brevi (#538).
- È stato corretto un bug per cui
- Audio Offload:
- Aggiungi le pagine di intestazione dell'ID Ogg e dell'intestazione dei commenti al bitstream per la riproduzione di Opus offload in conformità con la RFC 7845.
- Video:
- H.265/HEVC: correggi l'analisi delle informazioni sulle immagini di riferimento a breve e lungo termine dell'SPS.
- Testo:
- CEA-608: modifica la logica di troncamento dei cue in modo che prenda in considerazione solo il testo visibile. In precedenza, il rientro e l'offset della tabulazione venivano inclusi quando si limitava la lunghezza del cue a 32 caratteri (il che era tecnicamente corretto secondo le specifiche) (#11019).
- Estensione IMA:
- Aumenta la versione dell'SDK IMA a 3.30.3.
- Sessione:
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia,
viene chiamato
MediaController.Listener.onCustomLayoutChanged. Le app che vogliono inviare layout personalizzati diversi a controller Media3 diversi possono farlo inMediaSession.Callback.onConnectutilizzando unAcceptedResultBuilderper assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione. - Correzione dei casi in cui
MediaLibraryServiceLegacyStubha inviato un errore a unResultche non supportava questa operazione, il che ha prodotto unUnsupportedOperationException(#78). - Correggi il modo in cui
PlayerWrappercrea unVolumeProviderCompatdeterminandovolumeControlTypetramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUMEeCOMMAND_SET_DEVICE_VOLUME) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSeCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia,
viene chiamato
Versione 1.1.0
5 luglio 2023
- Libreria comune:
- Aggiungi il motivo della soppressione per l'itinerario audio non idoneo e riproduci quando è pronto. Modifica il motivo della soppressione perché è troppo lungo. (#15).
- Aggiungere comandi al Player:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Aggiungi metodi sovraccarichi a Player che consentono agli utenti di specificare i flag del volume:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- Aggiungi
BuilderperDeviceInfoe ritira il costruttore esistente. - Aggiungi
DeviceInfo.routingControllerIdper specificare l'ID del controller di routing per le riproduzioni remote. - Aggiungi
Player.replaceMediaItem(s)come scorciatoia per aggiungere e rimuovere elementi nella stessa posizione (#8046).
- ExoPlayer:
- Consenti a ExoPlayer di controllare i metodi di volume del dispositivo solo se
esplicitamente attivati. Usa
ExoPlayer.Builder.setDeviceVolumeControlEnabledper accedere a:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)esetDeviceVolume(int, int)increaseDeviceVolume(int)eincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)edecreaseDeviceVolume(int, int)
- Aggiungi
FilteringMediaSourceche consente di filtrare i tipi di traccia disponibili da unMediaSource. - Aggiungi il supporto per l'inclusione di Common Media Client Data (CMCD) nelle
richieste in uscita dei formati di streaming adattivo DASH, HLS e
Smooth Streaming. I seguenti campi,
br,bl,cid,rtpesid, sono stati incorporati (#8699). Struttura dell'API e metodi dell'API:- La registrazione CMCD è disattivata per impostazione predefinita. Utilizza
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)per attivarla. - Tutte le chiavi sono 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 attivare la registrazione delle chiavi personalizzate.
- La registrazione CMCD è disattivata per impostazione predefinita. Utilizza
- Aggiungi un'azione aggiuntiva al manifest della demo principale per semplificare l'avvio dell'app demo con un file
*.exolist.jsonpersonalizzato (#439). - Aggiungi
ExoPlayer.setVideoEffects()per l'utilizzo diEffectdurante la riproduzione video. - Aggiorna
SampleQueueper archiviaresourceIdcomelonganziché comeint. In questo modo, le firme dei metodi pubbliciSampleQueue.sourceIdeSampleQueue.peekSourceIdvengono modificate. - Aggiungi parametri ai metodi
LoadControlshouldStartPlaybackeonTracksSelectedche consentono di associare questi metodi alMediaPeriodpertinente. - Modifica la firma di
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)aggiungendo un parametro della sequenza temporale che contiene i periodi con gli UID utilizzati come chiavi nella mappa. Questo è necessario per evitare problemi di concorrenza con i live streaming multi-periodo. - Depreca
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)eBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). È possibile chiamare la variante dei metodi senzamediaTimeOffsetUs. Tieni presente che anche per le varianti ritirate, l'offset non viene più aggiunto astartTimeUseendTimeUsdegli oggettiMediaLoadDatainviati dal dispatcher. - Rinomina
ExoTrackSelection.blacklistinexcludeTrackeisBlacklistedinisTrackExcluded. - Correzione del comportamento incoerente tra
ExoPlayer.setMediaItem(s)eaddMediaItem(s)quando vengono chiamati su una playlist vuota.
- Consenti a ExoPlayer di controllare i metodi di volume del dispositivo solo se
esplicitamente attivati. Usa
- Transformer:
- Rimuovi
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). UtilizzaExoPlayerAssetLoader.Factory(MediaSource.Factory)eTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)invece. - Rimuovi
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - È stato corretto un bug per cui la trasformazione poteva bloccarsi (con conseguente timeout del muxer) se la fine dello stream video veniva segnalata nel momento in cui era in attesa di elaborazione un frame di input.
- Esegui query sui codec tramite
MediaCodecListanziché utilizzare le utilitàfindDecoder/EncoderForFormatper ampliare il supporto. - Rimuovi la configurazione dei frame B in
DefaultEncoderFactoryperché non funziona su alcuni dispositivi.
- Rimuovi
- Selezione tracce:
- Aggiungi
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeche è disattivato per impostazione predefinita. Se abilitato,DefaultTrackSelectorattiverà una nuova selezione della traccia quando le funzionalità del renderer sono cambiate.
- Aggiungi
- Estrattori:
- Audio:
- Correzione di un bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e
AudioProcessorssono attivi, ad esempio per il taglio senza interruzioni (#10847). - Incapsula i frame Opus nei pacchetti Ogg nelle riproduzioni dirette (offload).
- Estrapola la posizione attuale durante il sonno con la pianificazione dell'offload.
- Aggiungi
Renderer.release()eAudioSink.release()per rilasciare le risorse alla fine del ciclo di vita del giocatore. - Ascolta le modifiche alle funzionalità audio in
DefaultAudioSink. Aggiungi un parametro obbligatoriocontextnel costruttore diDefaultAudioSink, con cuiDefaultAudioSinksi registrerà come listener diAudioCapabilitiesReceivere aggiornerà la proprietàaudioCapabilitiesquando riceve una notifica di modifica delle funzionalità. - Propaga le modifiche alle funzionalità audio tramite un nuovo evento
onAudioCapabilitiesChangednell'interfacciaAudioSink.Listenere una nuova interfacciaRendererCapabilities.Listenerche attiva gli eventionRendererCapabilitiesChanged. - Aggiungi
ChannelMixingAudioProcessorper applicare il ridimensionamento/il mixaggio ai canali audio. - Aggiungi il nuovo valore int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEaDecoderDiscardReasonsper eliminare il decodificatore audio quando è possibile la modalità bypass dopo la modifica delle funzionalità audio. - Aggiungi il supporto della riproduzione diretta per DTS Express e DTS:X (#335).
- Correzione di un bug per cui alcune riproduzioni non riescono quando il tunneling è abilitato e
- Video:
- Fai in modo che
MediaCodecVideoRenderergeneri unVideoSizecon larghezza e altezza pari a 0 quando il renderer è disattivato.Player.Listener.onVideoSizeChangedviene chiamato di conseguenza quandoPlayer.getVideoSize()cambia. Con questa modifica, le dimensioni del video di ExoPlayer conMediaCodecVideoRendererhanno larghezza e altezza pari a 0 quandoPlayer.getCurrentTracksnon supporta il video o le dimensioni della traccia video supportata non sono ancora state determinate.
- Fai in modo che
- DRM:
- Ridurre la visibilità di diversi metodi solo interni su
DefaultDrmSessionche non dovrebbero essere chiamati dall'esterno del pacchetto DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Ridurre la visibilità di diversi metodi solo interni su
- Muxer:
- Aggiungi una nuova libreria muxer che può essere utilizzata per creare un file contenitore MP4.
- Estensione IMA:
- Attiva i live streaming DASH multi-periodo per DAI. Tieni presente che l'implementazione attuale non supporta ancora la ricerca nei live streaming (#10912).
- Correzione di un bug per cui un nuovo gruppo di annunci viene inserito nei live streaming perché la posizione dei contenuti calcolata in sequenza temporale consecutiva varia leggermente.
- Sessione:
- Aggiungi il metodo helper
MediaSession.getControllerForCurrentRequestper ottenere informazioni sul controller che attualmente chiama un metodoPlayer. - Aggiungi
androidx.media3.session.MediaButtonReceiverper consentire alle app di implementare la riproduzione con gli eventi dei pulsanti multimediali inviati, ad esempio, da cuffie Bluetooth (#167). - Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItemsper consentire il passaggio diMediaItemsrichiesto aPlayerse hannoLocalConfiguration(ad es. URI) (#282). - Aggiungi i pulsanti di comando "Cerca precedente" e "Cerca successivo" nella visualizzazione delle notifiche multimediali compatte per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi l'implementazione predefinita a
MediaSession.Callback.onAddMediaItemsper consentire il passaggio diMediaItemsrichiesto aPlayerse hannoLocalConfiguration(ad es. URI) (#282). - Aggiungi i pulsanti di comando "Cerca precedente" e "Cerca successivo" nella visualizzazione delle notifiche multimediali compatte per impostazione predefinita per Android 12 e versioni precedenti (#410).
- Aggiungi il metodo helper
- UI:
- Aggiungi i metodi Util
shouldShowPlayButtonehandlePlayPauseButtonActionper scrivere elementi dell'interfaccia utente personalizzati con un pulsante di riproduzione/pausa.
- Aggiungi i metodi Util
- Estensione RTSP:
- Estensione DASH:
- Rimuovi l'offset temporale dei contenuti multimediali da
MediaLoadData.startTimeMseMediaLoadData.endTimeMsper gli stream DASH multiperiodo. - È stato corretto un bug per cui la ripreparazione di una sorgente multimediale live Dash multi-periodo
produceva un errore
IndexOutOfBoundsException(#10838).
- Rimuovi l'offset temporale dei contenuti multimediali da
- Estensione HLS:
- Aggiungi
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)per impostare un timeout per il thread di caricamento in modo che attenda l'inizializzazione diTimestampAdjuster. Se l'inizializzazione non viene completata prima del timeout, viene generato unPlaybackExceptionper evitare il blocco infinito della riproduzione. Il timeout è impostato su zero per impostazione predefinita (#323).
- Aggiungi
- Test Utilities:
- Verifica l'insensibilità alle maiuscole e minuscole dello schema URI in
DataSourceContractTest.
- Verifica l'insensibilità alle maiuscole e minuscole dello schema URI in
- Rimuovi i simboli ritirati:
- Rimuovi i costruttori
DefaultAudioSink, utilizzaDefaultAudioSink.Builderinvece. - Rimuovi
HlsMasterPlayliste utilizzaHlsMultivariantPlaylist. - Rimuovi
Player.stop(boolean). UtilizzaPlayer.stop()ePlayer.clearMediaItems()(seresetètrue). - Rimuovi due costruttori
SimpleCachedeprecati e utilizza un costruttore non deprecato che accetta unDatabaseProviderper migliorare il rendimento. - Rimuovi il costruttore
DefaultBandwidthMeter, utilizzaDefaultBandwidthMeter.Builder. - Rimuovi i costruttori
DefaultDrmSessionManager, utilizzaDefaultDrmSessionManager.Builder. - Rimuovi due costruttori
HttpDataSource.InvalidResponseCodeExceptiondeprecati, utilizza un costruttore non deprecato che accetta campi aggiuntivi(cause,responseBody) per migliorare la registrazione degli errori. - Rimuovi
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDasheDownloadHelper.forSmoothStreaming, utilizzaDownloadHelper.forMediaItem. - Rimuovi il costruttore
DownloadServiceritirato, utilizza un costruttore non ritirato che includa l'opzione per fornire un parametrochannelDescriptionResourceId. - Rimuovi le costanti stringa obsolete per i set di caratteri (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEeUTF16LE_NAME), utilizza i set di caratteri Kotlin dal pacchettokotlin.text,java.nio.charset.StandardCharsetsocom.google.common.base.Charsets. - Rimuovi il costruttore
WorkManagerSchedulerdeprecato e utilizza un costruttore non deprecato che includa l'opzione per fornire un parametroContext. - Rimuovi i metodi ritirati
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatecreateSampleFormat, che venivano utilizzati per creare un'istanza della classeFormat. Utilizza inveceFormat.Builderper creare istanze diFormat. - Rimuovi i metodi ritirati
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateecopyWithVideoSize, utilizzaFormat.buildUpon()e i metodi setter. - Rimuovi
ExoPlayer.retry()deprecato e utilizzaprepare(). - Rimuovi il costruttore
DefaultTrackSelectordeprecato senza argomenti, utilizzaDefaultTrackSelector(Context). - Rimuovi il costruttore
OfflineLicenseHelperdeprecato, utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Rimuovi il costruttore
DownloadManagerdeprecato e utilizza il costruttore che accetta unExecutor. - Rimuovi i costruttori
Cuedeprecati, utilizzaCue.Builder. - Rimuovi il costruttore
OfflineLicenseHelperdeprecato, utilizzaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Rimuovi quattro metodi
AnalyticsListenerdeprecati:onDecoderEnabled, utilizzaonAudioEnablede/oonVideoEnabledin alternativa.onDecoderInitialized, utilizzaonAudioDecoderInitializede/oonVideoDecoderInitialized.onDecoderInputFormatChanged, utilizzaonAudioInputFormatChangede/oonVideoInputFormatChanged.onDecoderDisabled, utilizzaonAudioDisablede/oonVideoDisabledin alternativa.
- Rimuovi
Player.Listener.onSeekProcessedeAnalyticsListener.onSeekProcesseddeprecati, utilizzaonPositionDiscontinuityconDISCONTINUITY_REASON_SEEK. - Rimuovi
ExoPlayer.setHandleWakeLock(boolean), utilizzasetWakeMode(int)in alternativa. - Rimuovi il criterio deprecato
DefaultLoadControl.Builder.createDefaultLoadControl()e utilizzabuild()al suo posto. - Rimuovi
MediaItem.PlaybackPropertiesdeprecato, utilizzaMediaItem.LocalConfiguration. Il campo deprecatoMediaItem.playbackPropertiesora è di tipoMediaItem.LocalConfiguration.
- Rimuovi i costruttori
Versione 1.1.0-rc01
21 giu 2023
Utilizza la versione stabile 1.1.0.
Versione 1.1.0-beta01
7 giugno 2023
Utilizza la versione stabile 1.1.0.
Versione 1.1.0-alpha01
10 maggio 2023
Utilizza la versione stabile 1.1.0.
Versione 1.0.0
Versione 1.0.2
18 maggio 2023
androidx.media3:media3-*:1.0.2 viene rilasciata.
La versione 1.0.2 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.7.
Questa release contiene le seguenti modifiche rispetto alla versione 1.0.1:
- Libreria principale:
- Aggiungi
Buffer.isLastSample()che indica seBuffercontiene il flagC.BUFFER_FLAG_LAST_SAMPLE. - Risolvi il problema per cui l'ultimo fotogramma potrebbe non essere visualizzato se l'ultimo campione con i fotogrammi viene rimosso dalla coda senza leggere il campione "fine dello stream". (#11079).
- Aggiungi
- Estrattori:
- Correggi l'analisi di SPS H.265 nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP e MP4 (#303).
- Testo:
- SSA: aggiungi il supporto per i file UTF-16 se iniziano con un indicatore dell'ordine dei byte (#319).
- Sessione:
- Risolto il problema per cui
MediaControllernon aggiorna i comandi disponibili quando è connesso a unMediaSessionCompatlegacy che aggiorna le azioni. - Correzione del bug che impediva a
MediaLibraryServicedi restituire il valore null per una chiamata dall'interfaccia utente di sistema aCallback.onGetLibraryRootconparams.isRecent == truesull'API 30 (#355). - Correzione della perdita di memoria di
MediaSessionServiceoMediaLibraryService(#346). - È stato corretto un bug per cui un aggiornamento combinato di
Timelinee posizione in unMediaSessionpuò causare la generazione di unMediaControllerche genera unIllegalStateException.
- Risolto il problema per cui
Versione 1.0.1
18 aprile 2023
androidx.media3:media3-*:1.0.1 viene rilasciata.
La versione 1.0.1 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.6.
- Libreria principale:
- Ripristina l'override del live streaming di destinazione quando cerchi la posizione predefinita (#11051).
- È stato corretto il bug per cui i flussi di campioni vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
- Sessione:
- È stato corretto un bug per cui più elementi della coda identici pubblicati da un
MediaSessionCompatlegacy generano un'eccezione inMediaController(#290). - Aggiungi l'inoltro mancante di
MediaSession.broadcastCustomCommandaMediaControllerCompat.Callback.onSessionEventlegacy (#293). - È stato corretto un bug per cui la chiamata a
MediaSession.setPlayernon aggiorna i comandi disponibili. - Risolvi il problema per cui le istanze
TrackSelectionOverrideinviate da unMediaControllervengono ignorate se fanno riferimento a un gruppo conFormat.metadata(#296). - Risolvi il problema per cui
Player.COMMAND_GET_CURRENT_MEDIA_ITEMdeve essere disponibile per accedere ai metadati tramiteMediaSessionCompatlegacy. - Risolto il problema per cui le istanze
MediaSessionsu un thread in background causano arresti anomali se utilizzate inMediaSessionService(#318). - È stato risolto il problema per cui una libreria dichiarava un ricevitore di pulsanti multimediali senza che l'app lo avesse previsto (#314).
- È stato corretto un bug per cui più elementi della coda identici pubblicati da un
- DASH:
- Correzione della gestione delle sequenze temporali dei segmenti vuoti (#11014).
- RTSP:
- Riprova con TCP se la configurazione RTSP con UDP non riesce e viene visualizzato l'errore RTSP 461 UnsupportedTransport (#11069).
Versione 1.0.0
22 marzo 2023
androidx.media3:media3-*:1.0.0 viene rilasciata.
La versione 1.0.0 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.5.
Non sono state apportate modifiche dalla versione 1.0.0-rc02.
Versione 1.0.0-rc02
2 marzo 2023
androidx.media3:media3-*:1.0.0-rc02 viene rilasciata.
La versione 1.0.0-rc02 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.4.
- Libreria principale:
- Download:
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
SegmentDownloadere nelle sottoclassi (#248).
- Rendi configurabile la differenza massima dell'ora di inizio di due segmenti da unire in
- Audio:
- Video:
- Mappa il formato HEVC HDR10 su
HEVCProfileMain10HDR10anziché suHEVCProfileMain10. - Aggiungi una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione dei flussi AVC a 60 fps come non supportati (#10898).
- Risolvi i problemi di prestazioni di rilascio dei frame durante la riproduzione di contenuti multimediali con una frequenza di frame molto superiore alla frequenza di aggiornamento dello schermo.
- Mappa il formato HEVC HDR10 su
- Cast:
- Correzione di
STATE_IDLEtemporaneo durante la transizione tra elementi multimediali (#245).
- Correzione di
- RTSP:
- Recupera l'IllegalArgumentException generata durante l'analisi di RTSP non valido Descrivi i messaggi di risposta (#10971).
- Sessione:
- È stato corretto un bug a causa del quale il pulsante di riproduzione/pausa delle notifiche non si aggiorna con lo stato del player (#192).
- Estensione IMA:
- Correzione di un bug che impediva l'avvio degli stream DAI senza annunci
perché il primo (e nel caso senza annunci l'unico) evento
LOADEDnon è stato ricevuto.
- Correzione di un bug che impediva l'avvio degli stream DAI senza annunci
perché il primo (e nel caso senza annunci l'unico) evento
Versione 1.0.0-rc01
16 febbraio 2023
androidx.media3:media3-*:1.0.0-rc01 viene rilasciata.
La versione 1.0.0-rc01 contiene questi commit.
Questa release corrisponde alla release ExoPlayer 2.18.3.
- Libreria principale:
- Modifica la logica di ordinamento del decodificatore del renderer per rispettare le preferenze di
MediaCodecSelector, anche se un decodificatore segnala che potrebbe non essere in grado di riprodurre i contenuti multimediali in modo efficiente. Ad esempio, con il selettore predefinito, il decodificatore hardware con solo supporto funzionale verrà preferito al decodificatore software che supporta completamente il formato (#10604). - Aggiungi
ExoPlayer.Builder.setPlaybackLooperche imposta un thread di riproduzione preesistente per una nuova istanza di ExoPlayer. - Consenti la cancellazione dei componenti di Download Manager (#10776).
- Aggiungi il parametro a
BasePlayer.seekToper indicare anche il comando utilizzato per la ricerca. - Utilizza il tema durante il caricamento delle risorse grafiche su API 21+ (#220).
- Aggiungi
ConcatenatingMediaSource2che consente di combinare più elementi multimediali in un'unica finestra (#247).
- Modifica la logica di ordinamento del decodificatore del renderer per rispettare le preferenze di
- Estrattori:
- Genera un errore
ParserExceptionanziché un erroreNullPointerExceptionse la tabella dei campioni (stbl) non contiene una descrizione dei campioni (stsd) richiesta durante l'analisi degli atomi trak. - Salta correttamente i campioni quando cerchi direttamente un frame di sincronizzazione in fMP4 (#10941).
- Genera un errore
- Audio:
- Utilizza il bitrate del formato audio compresso per calcolare le dimensioni minime del buffer
per
AudioTracknelle riproduzioni dirette (passthrough).
- Utilizza il bitrate del formato audio compresso per calcolare le dimensioni minime del buffer
per
- Testo:
- Correzione di
TextRendererche passa un indice non valido (negativo) aSubtitle.getEventTimese un file di sottotitoli codificati non contiene cue. - SubRip: aggiungi il supporto dei file UTF-16 se iniziano con un indicatore dell'ordine dei byte.
- Correzione di
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaTypeper indicare il tipo di contenuti o il tipo di cartella descritta dai metadati. - Aggiungi
MediaMetadata.isBrowsablecome sostituzione diMediaMetadata.folderType. Il tipo di cartella verrà ritirato nella prossima release.
- DASH:
- Aggiunta dell'analisi completa per i set di adattamento delle immagini, inclusi i conteggi dei riquadri (#3752).
- UI:
- Correggi l'elemento deprecato
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)per assicurarti che le modifiche alla visibilità vengano trasmesse al listener registrato (#229). - Correzione dell'ordine dei controlli del lettore centrale in
PlayerViewquando si utilizza un layout da destra a sinistra (RTL) (#227).
- Correggi l'elemento deprecato
- Sessione:
- Aggiungi l'astrazione
SimpleBasePlayerper implementare l'interfacciaPlayerper i player personalizzati. - Aggiungi il metodo helper per convertire il token di sessione della piattaforma in Media3
SessionToken(#171). - Utilizza
onMediaMetadataChangedper attivare gli aggiornamenti della sessione multimediale della piattaforma (#219). - Aggiungi la sessione multimediale come argomento di
getMediaButtons()diDefaultMediaNotificationProvidere utilizza elenchi immutabili per chiarezza (#216). - Aggiungi il listener di callback
onSetMediaItemsper fornire i mezzi per modificare/impostare l'elencoMediaItem, l'indice iniziale e la posizione per sessione prima di impostare il lettore (#156). - Evita il rilevamento del doppio tocco per gli eventi dei pulsanti multimediali non Bluetooth (#233).
- Rendi
QueueTimelinepiù solido in caso di stato della sessione precedente sospetto (#241).
- Aggiungi l'astrazione
- Metadati:
- Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
- Aggiungi
MediaMetadata.mediaTypeper indicare il tipo di contenuti o il tipo di cartella descritta dai metadati. - Aggiungi
MediaMetadata.isBrowsablecome sostituzione diMediaMetadata.folderType. Il tipo di cartella verrà ritirato nella prossima release.
- Estensione Cast:
- Aumenta la versione dell'SDK Cast a 21.2.0.
- Estensione IMA:
- Rimuovi il listener del lettore di
ImaServerSideAdInsertionMediaSourcesul thread dell'applicazione per evitare problemi di threading. - Aggiungi una proprietà
focusSkipButtonWhenAvailableaImaServerSideAdInsertionMediaSource.AdsLoader.Builderper richiedere di mettere a fuoco il pulsante Salta sui dispositivi TV e impostarlo su true per impostazione predefinita. - Aggiungi un metodo
focusSkipButton()aImaServerSideAdInsertionMediaSource.AdsLoaderper richiedere programmaticamente lo stato attivo sul pulsante Salta. - Aumenta la versione dell'SDK IMA a 3.29.0.
- Rimuovi il listener del lettore di
- App demo:
- Richiedi l'autorizzazione per le notifiche di download in fase di runtime (#10884).
Versione 1.0.0-beta03
22 novembre 2022
androidx.media3:media3-*:1.0.0-beta03 viene rilasciata.
La versione 1.0.0-beta03 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.2.
- Libreria principale:
- Aggiungi
ExoPlayer.isTunnelingEnabledper verificare se il tunneling è abilitato per le tracce attualmente selezionate (#2518). - Aggiungi
WrappingMediaSourceper semplificare il wrapping di un singoloMediaSource(#7279). - Elimina il buffer posteriore prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
- Chiudi il blocco di tracciamento "doSomeWork" quando il trasferimento è attivato.
- Risoluzione del problema di monitoraggio della sessione con le ricerche rapide in
PlaybackStatsListener(#180). - Invia il callback
onMediaItemTransitionmancante quando chiamiseekToNextoseekToPreviousin una playlist con un solo elemento (#10667). - Aggiungi
Player.getSurfaceSizeche restituisce le dimensioni della superficie su cui viene visualizzato il video. - Correzione di un bug per cui la rimozione degli ascoltatori durante il rilascio del player può causare un
IllegalStateException(#10758).
- Aggiungi
- Build:
- Imponi un valore minimo di
compileSdkVersionper evitare errori di compilazione (#10684). - Evita di pubblicare il blocco quando è incluso in un'altra build Gradle.
- Imponi un valore minimo di
- Selezione tracce:
- Preferisci altre tracce a Dolby Vision se il display non lo supporta. (#8944).
- Download:
- Correzione del potenziale ciclo infinito in
ProgressiveDownloadercausato da download e riproduzione simultanei con lo stessoPriorityTaskManager(#10570). - Visualizzazione immediata della notifica di download (#183).
- Limita a 1 le rimozioni di download paralleli per evitare la creazione eccessiva di thread (#10458).
- Correzione del potenziale ciclo infinito in
- Video:
- Prova un decoder alternativo per Dolby Vision se il display non lo supporta. (#9794).
- Audio:
- Utilizza
SingleThreadExecutorper rilasciare le istanzeAudioTracked evitare errori OutOfMemory quando rilasci più giocatori contemporaneamente (#10057). - Aggiunge
AudioOffloadListener.onExperimentalOffloadedPlaybackper lo stato di scaricamento di AudioTrack. (#134). - Rendi
AudioTrackBufferSizeProviderun'interfaccia pubblica. - Aggiungi
ExoPlayer.setPreferredAudioDeviceper impostare il dispositivo di output audio preferito (#135). - Rinomina
androidx.media3.exoplayer.audio.AudioProcessorinandroidx.media3.common.audio.AudioProcessor. - Mappa l'audio a 8 e 12 canali rispettivamente sulle maschere dei canali 7.1 e 7.1.4 su tutte le versioni di Android (#10701).
- Utilizza
- Metadati:
- Ora
MetadataRendererpuò essere configurato per il rendering dei metadati non appena sono disponibili. Crea un'istanza conMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)per specificare se il renderer restituirà i metadati in anticipo o in sincronia con la posizione del player.
- Ora
- DRM:
- Soluzione alternativa a un bug nell'implementazione di ClearKey di Android 13 che restituisce un URL di licenza non vuoto ma non valido.
- È stato corretto l'errore
setMediaDrmSession failed: session not openeddurante il passaggio tra schemi DRM in una playlist (ad es. da Widevine a ClearKey).
- Testo:
- CEA-608: assicurati che i comandi di cambio servizio nel campo 2 vengano gestiti correttamente (#10666).
- DASH:
- Analizza
EventStream.presentationTimeOffsetdai manifest (#10460).
- Analizza
- UI:
- Utilizzare gli override correnti del player come preimpostazione in
TrackSelectionDialogBuilder(#10429).
- Utilizzare gli override correnti del player come preimpostazione in
- Sessione:
- Assicurati che i comandi vengano sempre eseguiti nell'ordine corretto anche se alcuni richiedono una risoluzione asincrona (#85).
- Aggiungi
DefaultMediaNotificationProvider.Builderper creare istanzeDefaultMediaNotificationProvider. Il builder può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzati dal fornitore. Inoltre, aggiungi il metodoDefaultMediaNotificationProvider.setSmallIcon(int)per impostare l'icona piccola delle notifiche. (#104). - Assicurati che i comandi inviati prima di
MediaController.release()non vengano eliminati (#99). SimpleBitmapLoaderpuò caricare bitmap dagli URIfile://(#108).- Correzione dell'asserzione che impedisce a
MediaControllerdi cercare un annuncio in un periodo (#122). - Al termine della riproduzione, la
MediaSessionServiceviene interrotta in primo piano e viene visualizzata una notifica per riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112). - Non avviare un servizio in primo piano con un intent in attesa per la pausa (#167).
- Nascondi manualmente il "badge" associato alla notifica creata da
DefaultNotificationProvidersu API 26 e API 27 (il badge viene nascosto automaticamente su API 28+) (#131). - Correzione del bug per cui una seconda connessione del binder da una MediaSession precedente a un MediaController Media3 causa IllegalStateExceptions (#49).
- RTSP:
- IMA:
- Aggiungi il timeout per il caricamento delle informazioni sugli annunci per gestire i casi in cui l'SDK IMA non riesce a caricare un annuncio (#10510).
- Impedire l'omissione degli annunci mid-roll quando si cerca la fine dei contenuti (#10685).
- Calcola correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
- Estensione FFmpeg:
- Aggiungi i flag appena richiesti per collegare le librerie FFmpeg con NDK 23.1.7779620 e versioni successive (#9933).
- Estensione AV1:
- Aggiorna la versione di CMake per evitare incompatibilità con le ultime versioni di Android Studio (#9933).
- Estensione Cast:
- Implementa
getDeviceInfo()per poter identificareCastPlayerquando controlli la riproduzione con unMediaController(#142).
- Implementa
- Transformer:
- Aggiungi il timer watchdog del muxer per rilevare quando la generazione di un campione di output è troppo lenta.
- Rimuovi i simboli ritirati:
- Rimuovi
Transformer.Builder.setOutputMimeType(String). Questa funzionalità è stata rimossa. Il tipo MIME sarà sempre MP4 quando viene utilizzato il muxer predefinito.
- Rimuovi
Versione 1.0.0-beta02
21 luglio 2022
androidx.media3:media3-*:1.0.0-beta02 viene rilasciata.
La versione 1.0.0-beta02 contiene questi commit.
Questa release corrisponde alla release di ExoPlayer 2.18.1.
- Libreria principale:
- Assicurati che la modifica di
ShuffleOrderconExoPlayer.setShuffleOrdercomporti una chiamata aPlayer.Listener#onTimelineChangedconreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED(#9889). - Per i contenuti multimediali progressivi, includi solo le tracce selezionate nella posizione memorizzata nel buffer (#10361).
- Consenti il logger personalizzato per tutti gli output dei log di ExoPlayer (#9752).
- Correzione dell'implementazione di
setDataSourceFactoryinDefaultMediaSourceFactory, che in alcuni casi non funzionava (#116).
- Assicurati che la modifica di
- Estrattori:
- DASH:
- Analizza l'URL della licenza ClearKey dai manifest (#10246).
- UI:
- Assicurati che TalkBack annunci l'opzione di velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
- RTSP:
- Aggiunta della gestione dei pacchetti frammentati VP8 (#110).
- Estensione Leanback:
- Ascolta le modifiche apportate a
playWhenReadyinLeanbackAdapter(10420).
- Ascolta le modifiche apportate a
- Cast:
Versione 1.0.0-beta01
16 giugno 2022
androidx.media3:media3-*:1.0.0-beta01 viene rilasciata.
La versione 1.0.0-beta01 contiene questi commit.
Ciò corrisponde alla versione 2.18.0 di ExoPlayer.
- Libreria principale:
- Attiva il supporto per la diagnostica della piattaforma Android tramite
MediaMetricsManager. ExoPlayer inoltrerà gli eventi di riproduzione e i dati sulle prestazioni alla piattaforma, il che contribuisce a fornire informazioni sul debug e sulle prestazioni del sistema sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostici è attivata dall'utente del dispositivo. Le app possono disattivare il contributo alla diagnostica della piattaforma per ExoPlayer conExoPlayer.Builder.setUsePlatformDiagnostics(false). - Correzione del bug che causa il ripristino troppo frequente delle tracce quando si utilizza
MergingMediaSource, ad esempio quando si caricano lateralmente i sottotitoli codificati e si cambiano i sottotitoli codificati selezionati a metà riproduzione (#10248). - Interrompi il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Queste riproduzioni presuppongono una rete 4G.
- Non consentire il passaggio di
nullaMediaSource.Factory.setDrmSessionManagerProvidereMediaSource.Factory.setLoadErrorHandlingPolicy. Le istanze diDefaultDrmSessionManagerProvidereDefaultLoadErrorHandlingPolicypossono essere trasmesse esplicitamente, se necessario. - Aggiungi
MediaItem.RequestMetadataper rappresentare i metadati necessari per riprodurre i contenuti multimediali quando ilLocalConfigurationesatto non è noto. Rimuovi ancheMediaMetadata.mediaUrlperché ora è incluso inRequestMetadata. - Aggiungi
Player.Command.COMMAND_SET_MEDIA_ITEMper consentire ai giocatori di impostare un singolo elemento.
- Attiva il supporto per la diagnostica della piattaforma Android tramite
- Selezione tracce:
- Comprimi il corso
TrackSelectionOverridesinTrackSelectionParameterse promuoviTrackSelectionOverridea corso di primo livello. - Rinomina
TracksInfoinTrackseTracksInfo.TrackGroupInfoinTracks.Group.Player.getCurrentTracksInfoePlayer.Listener.onTracksInfoChangedsono stati rinominati anche inPlayer.getCurrentTracksePlayer.Listener.onTracksChanged. Ciò include l'annullamento del ritiro del nome del metodoPlayer.Listener.onTracksChanged, ma con tipi di parametri diversi. - Modifica
DefaultTrackSelector.buildUponParameterseDefaultTrackSelector.Parameters.buildUponper restituireDefaultTrackSelector.Parameters.Builderanziché il valore deprecatoDefaultTrackSelector.ParametersBuilder. - Aggiungi
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesche è attivo per impostazione predefinita. Se attivata, laDefaultTrackSelectorpreferirà le tracce audio il cui numero di canali non supera le capacità di output del dispositivo. Sui dispositivi portatili, ilDefaultTrackSelectorpreferirà i formati audio stereo/mono rispetto a quelli multicanale, a meno che il formato multicanale non possa essere spazializzato (Android 12L+) o sia un formato audio surround Dolby. Inoltre, sui dispositivi che supportano la spazializzazione audio,DefaultTrackSelectormonitorerà le modifiche apportate alle proprietà dello spazializzatore e attiverà una nuova selezione della traccia. I dispositivi con unatelevisionmodalità UI sono esclusi da questi vincoli e verrà preferito il formato con il maggior numero di canali. Per attivare questa funzionalità, l'istanzaDefaultTrackSelectordeve essere creata con unContext.
- Comprimi il corso
- Video:
- Rinomina
DummySurfaceinPlaceholderSurface. - Aggiungi il supporto di AV1 a
MediaCodecVideoRenderer.getCodecMaxInputSize.
- Rinomina
- Audio:
- Utilizza la pubblicità del decodificatore audio LG AC3 per il tipo MIME non standard.
- Modifica il tipo restituito di
AudioAttributes.getAudioAttributesV21()daandroid.media.AudioAttributesa una nuova classe wrapperAudioAttributesV21per evitare una verifica ART lenta su API < 21. - Esegui query sulla piattaforma (API 29+) o presupponi il conteggio dei canali di codifica audio per il passthrough audio quando il conteggio dei canali audio del formato non è impostato, il che si verifica con la preparazione senza chunk HLS (10204).
- Configura
AudioTrackcon la maschera del canaleAudioFormat.CHANNEL_OUT_7POINT1POINT4se il decoder genera audio PCM a 12 canali (#10322.
- DRM
- Assicurati che la sessione DRM venga sempre aggiornata correttamente quando cerchi immediatamente dopo una modifica del formato (10274).
- Testo:
- Modifica
Player.getCurrentCues()in modo che restituiscaCueGroupanzichéList<Cue>. - SSA: supporta l'impostazione dello stile
OutlineColourquandoBorderStyle == 3(ad es.OutlineColourimposta lo sfondo del cue)#8435. - CEA-708: analizza i dati in più blocchi di servizio e ignora i blocchi non associati al numero di servizio attualmente selezionato.
- Rimuovi
RawCcExtractor, che veniva utilizzato solo per gestire un formato di sottotitoli codificati interno a Google.
- Modifica
- Estrattori:
- UI:
- Correzione della pubblicazione degli eventi per
OnClickListenerimpostati suPlayerViewnel caso in cuiuseController=false(#9605). Inoltre, correggi la pubblicazione degli eventi suOnLongClickListenerper tutte le configurazioni delle visualizzazioni. - Correzione del trattamento errato di una sequenza di eventi tocco che escono dai limiti
di
PlayerViewprima diACTION_UPcome clic (#9861). - È stato risolto il problema di accessibilità
PlayerViewper cui il tocco potrebbe attivare/disattivare la riproduzione anziché nascondere i controlli (#8627). - Riscrivi
TrackSelectionVieweTrackSelectionDialogBuilderin modo che funzionino con l'interfacciaPlayeranziché conExoPlayer. In questo modo, le visualizzazioni possono essere utilizzate con altre implementazioni diPlayere viene rimossa la dipendenza dal modulo UI al modulo ExoPlayer. Si tratta di una modifica che causa interruzioni. - Non mostrare le tracce di testo forzate nel selettore di tracce
PlayerViewe mantieni selezionata una traccia di testo forzata adatta se è selezionata l'opzione "Nessuna" (#9432).
- Correzione della pubblicazione degli eventi per
- 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
nullaDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze diDefaultCompositeSequenceableLoaderFactorypossono essere passate in modo esplicito, se necessario.
- Analizza il conteggio dei canali dagli elementi DTS
- HLS:
- Esegui il fallback alla preparazione in blocchi se l'attributo CODECS della playlist non contiene il codec audio (#10065).
- Non consentire il passaggio di
nullaHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryeHlsMediaSource.Factory.setPlaylistTrackerFactory. Le istanze diDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryo un riferimento aDefaultHlsPlaylistTracker.FACTORYpossono essere trasmesse in modo esplicito, se necessario.
- Smooth Streaming:
- Non consentire il passaggio di
nullaSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze diDefaultCompositeSequenceableLoaderFactorypossono essere trasmesse in modo esplicito se necessario.
- Non consentire il passaggio di
- RTSP:
- Aggiungi il lettore RTP per H263 (#63).
- Aggiungi il lettore RTP per MPEG4 (#35).
- Aggiungi il lettore RTP per HEVC (#36).
- Aggiungi il lettore RTP per AMR. Al momento sono supportati solo i flussi AMR non interlacciati a un solo canale. Il payload RTP AMR composto non è supportato. (#46)
- Aggiungi lettore RTP per VP8 (#47).
- Aggiungi il lettore RTP per WAV (#56).
- Correggi l'intestazione di autorizzazione di base RTSP. (#9544).
- Interrompi il controllo dei campi SDP obbligatori perché ExoPlayer non ne ha bisogno (#10049).
- Genera un'eccezione controllata durante l'analisi della sincronizzazione RTSP (#10165).
- Aggiungi il lettore RTP per VP9 (#47).
- Aggiungi il lettore RTP per OPUS (#53).
- Origini dati:
- Rinomina
DummyDataSourceinPlaceholderDataSource. - Soluzione alternativa per la gestione delle interruzioni di OkHttp.
- Rinomina
- Sessione:
- Sostituisci
MediaSession.MediaItemFillerconMediaSession.Callback.onAddMediaItemsper consentire la risoluzione asincrona delle richieste. - Supporta i metodi
setMediaItems(s)quandoMediaControllersi connette a una sessione multimediale precedente. - Rimuovi
MediaController.setMediaUrieMediaSession.Callback.onSetMediaUri. La stessa funzionalità può essere ottenuta utilizzandoMediaController.setMediaItemeMediaSession.Callback.onAddMediaItems. - Inoltra le chiamate legacy
MediaControllerper riprodurre contenuti multimediali aMediaSession.Callback.onAddMediaItemsanziché aonSetMediaUri. - Aggiungi
MediaNotification.ProvidereDefaultMediaNotificationProviderper personalizzare la notifica. - Aggiungi
BitmapLoadereSimpleBitmapLoaderper scaricare le immagini delle copertine. - Aggiungi
MediaSession.setCustomLayout()per fornire la compatibilità con le versioni precedenti con la sessione legacy. - Aggiungi
MediaSession.setSessionExtras()per fornire parità di funzionalità con la sessione precedente. - Rinomina
MediaSession.MediaSessionCallbackinMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackinMediaLibrarySession.CallbackeMediaSession.Builder.setSessionCallbackinsetCallback. - Correzione di NPE in
MediaControllerImplLegacy(#59). - Aggiorna le informazioni sulla posizione della sessione nella cronologia modifica(#51).
- Correzione di NPE in
MediaControllerImplBasedopo il rilascio del controller (#74).
- Sostituisci
- Riproduzione degli annunci / IMA:
- Ridurre la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms, in linea con i suggerimenti del Media Rating Council (MRC).
- Estensione FFmpeg:
- Aggiorna la versione di CMake a
3.21.0+per evitare un bug di CMake che causa l'errore di sincronizzazione di Gradle di Android Studio (#9933).
- Aggiorna la versione di CMake a
- Rimuovi i simboli ritirati:
- Rimuovi
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Utilizza invecePlayer.Listener.onTracksChanged(Tracks). - Rimuovi
Player.getCurrentTrackGroupsePlayer.getCurrentTrackSelections. Utilizza invecePlayer.getCurrentTracks. Puoi anche continuare a utilizzareExoPlayer.getCurrentTrackGroupseExoPlayer.getCurrentTrackSelections, anche se questi metodi rimangono deprecati. - Rimuovi le costanti
DownloadHelper,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTeDEFAULT_TRACK_SELECTOR_PARAMETERS. Se possibile, utilizzagetDefaultTrackSelectorParameters(Context), altrimentiDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT. - Rimuovi costruttore
DefaultTrackSelector(ExoTrackSelection.Factory). Utilizza inveceDefaultTrackSelector(Context, ExoTrackSelection.Factory). - Rimuovi
Transformer.Builder.setContext.Contextdeve essere passato al costruttoreTransformer.Builder.
- Rimuovi
Versione 1.0.0-alpha03
14 marzo 2022
androidx.media3:media3-*:1.0.0-alpha03 viene rilasciata.
La versione 1.0.0-alpha03 contiene questi commit.
Corrisponde alla release di ExoPlayer 2.17.1.
- Audio:
- Correzione dell'errore di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
- Estrattori:
- FMP4: risolvi il problema per cui i metadati di esempio emsg potrebbero essere restituiti nell'ordine errato per gli stream contenenti atomi emsg v0 e v1 (#9996).
- Testo:
- Correggi l'interazione di
SingleSampleMediaSource.Factory.setTrackIdeMediaItem.SubtitleConfiguration.Builder.setIdper dare la priorità al campoSubtitleConfiguratione ripristinare il valoreFactoryse non è impostato (#10016).
- Correggi l'interazione di
- Riproduzione dell'annuncio:
- Correzione dei buffer di riempimento dell'audio tra i periodi pubblicitari nei live streaming HLS SSAI.
Versione 1.0.0-alpha02
2 marzo 2022
androidx.media3:media3-*:1.0.0-alpha02 viene rilasciata.
La versione 1.0.0-alpha02 contiene questi commit.
Ciò corrisponde al rilascio di ExoPlayer 2.17.0.
- Libreria di base:
- Aggiungi il metodo protetto
DefaultRenderersFactory.getCodecAdapterFactory()in modo che le sottoclassi diDefaultRenderersFactoryche eseguono l'override dibuildVideoRenderers()obuildAudioRenderers()possano accedere alla fabbrica di adattatori di codec e passarla alle istanzeMediaCodecRendererche creano. - Propaga i campi di intestazione ICY
nameegenrerispettivamente aMediaMetadata.stationeMediaMetadata.genrein modo che raggiungano l'app tramitePlayer.Listener.onMediaMetadataChanged()(#9677). - Rimuovi le chiavi null da
DefaultHttpDataSource#getResponseHeaders. - Sospendi e riprova quando la creazione di un'istanza
MediaCodecnon va a buon fine. In questo modo si risolve un problema che si verifica su alcuni dispositivi quando si passa da una superficie da un codec sicuro a un altro codec (#8696). - Aggiungi
MediaCodecAdapter.getMetrics()per consentire agli utenti di ottenere dati delle metriche daMediaCodec. (#9766). - Correzione della risoluzione delle dipendenze Maven (#8353).
- Disattiva la regolazione automatica della velocità per i live streaming che non dispongono di funzionalità a bassa latenza né di un'impostazione di richiesta dell'utente che imposta la velocità (#9329).
- Rinomina
DecoderCounters#inputBufferCountinqueuedInputBufferCount. - Rendi privato
SimpleExoPlayer.renderers. È possibile accedere ai renderer tramiteExoPlayer.getRenderer. - Sono stati aggiornati alcuni valori costanti di
AnalyticsListener.EventFlagsin modo che corrispondano ai valori diPlayer.EventFlags. - Dividi
AnalyticsCollectorin un'interfaccia e un'implementazione predefinita per consentire la rimozione da parte di R8 se un'app non ne ha bisogno.
- Aggiungi il metodo protetto
- Selezione tracce:
- Supporta i flag dei ruoli video preferiti nella selezione delle tracce (#9402).
- Aggiorna la logica di selezione delle tracce video in modo che tenga conto dei tipi MIME e dei flag di ruolo preferiti quando seleziona più tracce video per l'adattamento (#9519).
- Aggiorna la logica di selezione delle tracce video e audio in modo da scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto di decoder e hardware (#9565).
- Aggiorna la logica di selezione delle tracce video in modo da preferire codec più efficienti se più codec sono supportati dai decodificatori primari con accelerazione hardware (#4835).
- Preferisci le preferenze per i contenuti audio (ad esempio, la traccia audio "predefinita" o una traccia che corrisponde alla lingua delle impostazioni internazionali del sistema) ai vincoli tecnici di selezione delle tracce (ad esempio, tipo MIME preferito o numero massimo di canali).
- Correzione del problema di selezione delle tracce per cui l'override di un gruppo di tracce non disattivava gli altri gruppi di tracce dello stesso tipo (#9675).
- Correzione del problema di selezione delle tracce per cui una combinazione di override di tracce non vuote e vuote non viene applicata correttamente (#9649).
- Vietare
TrackGroupduplicati in unTrackGroupArray.TrackGroups possono sempre essere resi distinguibili impostando unidnel costruttoreTrackGroup. Questo problema è stato risolto in caso di arresto anomalo durante la riproduzione dopo aver messo l'app in background con una sostituzione della traccia attiva (#9718). - Modifica la logica in
AdaptiveTrackSelectionper consentire un aumento della qualità con una larghezza di banda di rete sufficiente anche se la riproduzione è molto vicina al limite live (#9784).
- Video:
- Correggi la logica di fallback del decoder per Dolby Vision in modo da utilizzare un decoder H264/H265 compatibile, se necessario.
- Audio:
- Correggi la logica di fallback del decoder per Dolby Atmos (E-AC3-JOC) in modo che utilizzi un decoder E-AC3 compatibile, se necessario.
- Modifica le API
AudioCapabilitiesin modo che richiedano il passaggio esplicito diAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESanzichénull. - Consenti la personalizzazione del calcolo delle dimensioni del buffer
AudioTrackinserendo unAudioTrackBufferSizeProviderinDefaultAudioSink. (#8891). - Riprova la creazione di
AudioTrackse la dimensione del buffer richiesta era superiore a 1 MB. (#9712).
- Estrattori:
- Testo:
- Aggiungi un campo
MediaItem.SubtitleConfiguration.idche viene propagato al campoFormat.iddella traccia dei sottotitoli codificata dalla configurazione (#9673). - Aggiungi il supporto di base per i sottotitoli WebVTT nei contenitori Matroska (#9886).
- Impedisci a
Cea708Decoderdi leggere più delle dimensioni dichiarate di un blocco di servizio.
- Aggiungi un campo
- DRM:
- Vuoi rimuovere
playbackLooperdaDrmSessionManager.(pre)acquireSession? Quando un'app utilizza unDrmSessionManagerin unMediaSourcepersonalizzato, ilplaybackLooperdeve essere passato aDrmSessionManager.setPlayerinvece.
- Vuoi rimuovere
- Riproduzione degli annunci / IMA:
- Aggiungi il supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
- Aggiungi un metodo a
AdPlaybackStateper consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615). - Imponi la velocità di riproduzione 1.0 durante la riproduzione dell'annuncio (#9018).
- Risolto il problema per cui un gruppo di annunci che non è stato caricato causava un ripristino immediato della riproduzione (#9929).
- UI:
- DASH:
- Aggiungi le proprietà essenziali e supplementari analizzate a
Representation(#9579). - Supporta il ruolo di traccia
forced-subtitle(#9727). - Interrompi l'interpretazione del ruolo della traccia
maincomeC.SELECTION_FLAG_DEFAULT. - Correzione della logica di esclusione dell'URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
- Supporto degli URL relativi
MPD.Location(#9939).
- Aggiungi le proprietà essenziali e supplementari analizzate a
- HLS:
- Compila correttamente
Format.labelper gli stream HLS solo audio (#9608). - Utilizza la preparazione senza blocchi per impostazione predefinita per migliorare il tempo di avvio. Se le tue
versioni contengono tracce di sottotitoli codificati muxati che non sono dichiarate
nella playlist principale, devi aggiungerle alla playlist principale per renderle
disponibili per la riproduzione oppure disattivare la preparazione senza chunk con
HlsMediaSource.Factory.setAllowChunklessPreparation(false). - Supporta la ricerca precisa dei keyframe in HLS (#2882).
- Compila correttamente
- RTSP:
- Fornisci un'API client per eseguire l'override di
SocketFactoryutilizzato per qualsiasi connessione al server (#9606). - Preferisci il metodo di autenticazione DIGEST a BASIC se sono presenti entrambi (#9800).
- Gestisci quando la sincronizzazione della traccia RTSP non è disponibile (#9775).
- Ignora i valori di intestazione RTP-Info non validi (#9619).
- Fornisci un'API client per eseguire l'override di
- Transformer:
- Aumenta la versione minima dell'API richiesta a 21.
TransformationExceptionviene ora utilizzato per descrivere gli errori che si verificano durante una trasformazione.- Aggiungi
TransformationRequestper specificare le opzioni di trasformazione. - Consenti la registrazione di più ascoltatori.
- È stato risolto il problema del blocco di Transformer quando l'output del codec viene letto parzialmente.
- Correzione del potenziale NPE in
Transformer.getProgressdurante il rilascio del muxer genera un'eccezione. - Aggiungi un'app demo per applicare le trasformazioni.
- Estensione MediaSession:
- Per impostazione predefinita,
MediaSessionConnectorora cancella la playlist quando la riproduzione viene interrotta. Le app che vogliono che la playlist venga conservata possono chiamaresetClearMediaItemsOnStop(false)sul connettore.
- Per impostazione predefinita,
- Estensione Cast:
- Estensione FFmpeg:
- Fai in modo che
build_ffmpeg.shdipenda dalle utilità bin di LLVM anziché da quelle di GNU (#9933).
- Fai in modo che
- Compatibilità con Android 12:
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
com.google.android.gms:play-services-cast-framework:20.1.0. Le versioni precedenti diplay-services-cast-frameworknon sono compatibili con le app che hanno come target Android 12 e si arrestano in modo anomalo con un erroreIllegalArgumentExceptiondurante la creazione diPendingIntent(#9528).
- Esegui l'upgrade dell'estensione Cast in modo che dipenda da
- Rimuovi i simboli ritirati:
- Rimuovi
Player.EventListener. Utilizza invecePlayer.Listener. - Rimuovi
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryeMediaSourceFactory#setDrmUserAgent. UtilizzaMediaSourceFactory#setDrmSessionManagerProvider. - Rimuovi
MediaSourceFactory#setStreamKeys. UtilizzaMediaItem.Builder#setStreamKeys. - Rimuovi
MediaSourceFactory#createMediaSource(Uri). UtilizzaMediaSourceFactory#createMediaSource(MediaItem). - Rimuovi
setTagdaDashMediaSource,HlsMediaSourceeSsMediaSource. Utilizza inveceMediaItem.Builder#setTag. - Rimuovi
DashMediaSource#setLivePresentationDelayMs(long, boolean). UtilizzaMediaItem.Builder#setLiveConfigurationeMediaItem.LiveConfiguration.Builder#setTargetOffsetMsper ignorare il manifest oDashMediaSource#setFallbackTargetLiveOffsetMsper fornire un valore di riserva. - Rimuovi
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Non è più possibile disattivare l'applicazione dei thread. - Rimuovi
ActionFileeActionFileUpgradeUtil. Utilizza ExoPlayer 2.16.1 o versioni precedenti per utilizzareActionFileUpgradeUtilper unire i file di intent legacy inDefaultDownloadIndex. - Rimuovi
ProgressiveMediaSource#setExtractorsFactory. Utilizza invece il costruttoreProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory). - Rimuovi
ProgressiveMediaSource.Factory#setTageProgressiveMediaSource.Factory#setCustomCacheKey. UtilizzaMediaItem.Builder#setTageMediaItem.Builder#setCustomCacheKeyinvece. - Rimuovi i costruttori
DefaultRenderersFactory(Context, @ExtensionRendererMode int)eDefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Utilizza invece il costruttoreDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModeeDefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - Rimuovi tutti i costruttori
CronetDataSourcepubblici. UtilizzaCronetDataSource.Factory.
- Rimuovi
- Modifica il seguente
IntDefsin@Target(TYPE_USE). Ciò potrebbe interrompere la compilazione degli utilizzi in Kotlin, che può essere corretta spostando l'annotazione per annotare il tipo (Int).@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type@FlacExtractor.Flags(nel pacchettocom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(nel pacchettocom.google.android.exoplayer2.extractor.flac)@FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
Versione 1.0.0-alpha01
27 ottobre 2021
androidx.media3:media3-*:1.0.0-alpha01 viene rilasciata.
La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
Media3 è la nuova sede delle librerie di supporto multimediale, tra cui ExoPlayer. La prima versione alpha contiene implementazioni funzionali iniziali di librerie per l'implementazione di casi d'uso multimediali, tra cui:
- ExoPlayer, un player di contenuti multimediali a livello di applicazione per Android facile da personalizzare ed estendere.
- Funzionalità della sessione multimediale per esporre e controllare le riproduzioni. Questo nuovo
modulo di sessione utilizza la stessa interfaccia
Playerdi ExoPlayer. - Componenti dell'interfaccia utente per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
- Moduli che racchiudono funzionalità in altre librerie da utilizzare con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.
Per maggiori informazioni, consulta il progetto GitHub di Media3.
In precedenza, ExoPlayer era ospitato in un
progetto GitHub ExoPlayer separato. In Media3 il nome del pacchetto è androidx.media3.exoplayer. Abbiamo intenzione di continuare a gestire e
rilasciare il progetto GitHub ExoPlayer per un po' di tempo per dare alle app il tempo di eseguire la migrazione a
Media3. Media3 ha sostituti per tutti i moduli ExoPlayer, ad eccezione delle estensioni legacy media2 e mediasession, che vengono sostituite dal nuovo modulo media3-session. Ciò consente l'integrazione diretta tra i player e
le sessioni multimediali senza dover utilizzare una classe adattatore/connettore.