Contenuti multimediali 3

Librerie di supporto per i casi d'uso relativi ai contenuti multimediali.
Aggiornamento più recente Release stabile Candidato per l'uscita Versione beta Release alpha
26 giugno 2024 1.3.1 - 1.4.0-beta01 1.4.0-alpha02

Dichiarazione delle dipendenze

Per aggiungere una dipendenza su Media3, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per l'app o il modulo:

Trendy

dependencies {
    def media3_version = "1.3.1"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.3.1"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze nella build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Puoi utilizzare lo strumento Issue Tracker di Media3 per trovare risposte a domande, problemi noti e richieste di funzionalità, nonché per segnalare nuovi problemi.

Versione 1.4.0

Versione 1.4.0-beta01

26 giugno 2024

Viene rilasciato androidx.media3:media3-*:1.4.0-beta01. La versione 1.4.0-beta01 contiene questi commit.

  • ExoPlayer:
    • Aggiungi ExoPlayer.isReleased() per controllare se Exoplayer.release() è stato chiamato.
    • Aggiungi ExoPlayer.Builder.setMaxSeekToPreviousPositionMs per configurare la posizione massima per cui seekToPrevious() cerca l'elemento precedente (#1425).
  • Trasformatore:
    • Rimuovi campo ExportResult.processedInputs. Se utilizzi questo campo per i dettagli del codec, utilizza invece il criterio DefaultDecoderFactory.listener. In caso di eccezione del codec, i dettagli del codec saranno disponibili in ExportException.codecInfo.
  • Estrattori:
    • Correggi l'estrazione del formato audio PCM nei contenitori AVI.
  • Immagine:
    • Consenti null come parametro per ExoPlayer.setImageOutput per cancellare un ImageOutput impostato in precedenza.
  • Effetto:
    • Rimuovi i OverlaySettings.useHdr inutilizzati poiché l'intervallo dinamico dell'overlay e del frame devono corrispondere.
    • Aggiungi il supporto HDR per TextOverlay. La luminanza dell'overlay di testo può essere regolata con OverlaySettings.setHdrLuminanceMultiplier.
  • Sessione:
    • Aggiungi MediaSession.Callback.onPlayerInteractionFinished per informare le sessioni quando una serie di interazioni dei giocatori da un controller specifico ha finito.
    • Aggiungi SessionError e utilizzalo in SessionResult e LibraryResult al posto del codice di errore per fornire maggiori informazioni sull'errore e su come risolverlo, se possibile.
    • Pubblica il codice per l'app di test del controller media3 che può essere utilizzato per testare le interazioni con le app che pubblicano una sessione multimediale.
    • Propaga gli extra passati all'elemento MediaSession[Builder].setSessionExtras() di media3 a PlaybackStateCompat.getExtras() di un controller media1.
    • Mappa errori irreversibili e non irreversibili da e verso la sessione della piattaforma. Un PlaybackException è mappato a uno stato di errore irreversibile della PlaybackStateCompat. Un elemento SessionError inviato al controller delle notifiche multimediali con MediaSession.sendError(ControllerInfo, SessionError) è mappato a un errore non irreversibile in PlaybackStateCompat, il che significa che il codice e il messaggio di errore sono impostati, ma lo stato della sessione della piattaforma rimane diverso su STATE_ERROR.
  • Interfaccia utente:
    • Aggiungi il supporto per la visualizzazione di immagini a PlayerView quando connesso a un ExoPlayer (#1144).
    • Aggiungi la personalizzazione di varie icone in PlayerControlView tramite attributi XML per consentire drawable diversi per istanza PlayerView, anziché override globali (#1200).
  • Estensione HLS:
    • È stato corretto un bug per cui le playlist non principali non venivano aggiornate durante la riproduzione dal vivo (#1240).
  • Rimuovi i simboli ritirati:
    • Rimuovi l'interfaccia di Bundleable. È inclusa la rimozione di tutti i campi costanti Bundleable.Creator<Foo> CREATOR. I chiamanti dovrebbero usare invece i metodi Bundle toBundle() e static Foo fromBundle(Bundle) su ogni tipo.

Versione 1.4.0-alpha02

7 giugno 2024

Viene rilasciato androidx.media3:media3-*:1.4.0-alpha02. La versione 1.4.0-alpha02 contiene questi commit.

  • Libreria comune:
    • Inoltra le presunte chiamate di ricerca autonoma ai metodi BasePlayer.seekTo e SimpleBasePlayer.handleSeek protetti invece di ignorarli. Se implementi questi metodi in un player personalizzato, potresti dover gestire queste chiamate aggiuntive con mediaItemIndex == C.INDEX_UNSET.
    • Rimuovi la dipendenza dalla compilazione sul desugaring Java 8 migliorato (#1312).
    • Assicurati che la durata passata a MediaItem.Builder.setImageDurationMs venga ignorata per un MediaItem non di tipo immagine (come documentato).
  • ExoPlayer:
    • Aggiungi reset a BasePreloadManager per rilasciare tutte le origini di conservazione mantenendo l'istanza del gestore di precaricamento.
    • Aggiungi ExoPlayer.setPriority (e Builder.setPriority) per definire il valore di priorità utilizzato in PriorityTaskManager e per l'importanza MediaCodec dall'API 35.
    • È stato risolto il problema relativo all'aggiornamento dell'ultimo tempo di rebuffer che causava la presenza di una chiave bs (inadempienza del buffer) errata nella CMCD (#1124).
    • Aggiungi PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) per indicare che l'origine è stata caricata fino alla fine. In questo modo le implementazioni DefaultPreloadManager e PreloadMediaSource.PreloadControl personalizzate possono precaricare la sorgente successiva o eseguire altre azioni.
    • Correzione del bug per cui l'azione di ignorare gli elementi silenziati alla fine degli elementi può attivare un'eccezione di riproduzione.
    • Aggiungi clear a PreloadMediaSource per ignorare il periodo di precaricamento.
    • Aggiungi il nuovo codice di errore PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED da utilizzare quando le risorse di codec vengono recuperate per attività con priorità più elevata.
    • Consenti a AdsMediaSource di caricare annunci pre-roll prima del completamento della preparazione iniziale dei contenuti multimediali (#1358).
    • È stato corretto il bug per cui la riproduzione si spostava su STATE_ENDED durante la ripreparazione di un live streaming DASH in più periodi dopo che il periodo originale era già stato rimosso dal file manifest.
    • Rinomina onTimelineRefreshed in onSourcePrepared e onPrepared in onTracksSelected in PreloadMediaSource.PreloadControl. Inoltre, rinomina gli IntDefs in DefaultPreloadManager.Stage di conseguenza.
    • Aggiungi il supporto sperimentale per la pianificazione dinamica per allineare meglio il lavoro con i cicli di attivazione della CPU e ritardare la riattivazione quando i renderer possono avanzare. Puoi attivare questa funzionalità utilizzando experimentalSetDynamicSchedulingEnabled durante la configurazione dell'istanza ExoPlayer.
    • Aggiungi Renderer.getDurationToProgressMs. Un Renderer può implementare questo metodo per restituire a ExoPlayer la durata dell'avanzamento della riproduzione affinché il renderer possa avanzare. Se ExoPlayer è impostato su experimentalSetDynamicSchedulingEnabled, ExoPlayer chiamerà questo metodo per calcolare il tempo per pianificare l'attività di lavoro.
    • Aggiungi MediaCodecAdapter#OnBufferAvailableListener all'avviso quando i buffer di input e output sono disponibili per l'utilizzo da parte di MediaCodecRenderer. MediaCodecRenderer segnalerà ExoPlayer quando riceve questi callback e, se il valore ExoPlayer è impostato su experimentalSetDynamicSchedulingEnabled, ExoPlayer pianificherà il proprio loop di lavoro mentre i renderer possono procedere.
    • Utilizza le classi di dati per i metodi LoadControl anziché per i singoli parametri.
  • Trasformatore:
    • Aggirare un bug del decoder in cui il numero di canali audio era limitato in stereo durante la gestione dell'input PCM.
    • Se selezioni le tracce in ExoPlayerAssetLoader, ignora i vincoli del numero di canali audio poiché si applicano solo alla riproduzione.
    • Sostituisci l'interfaccia androidx.media3.transformer.Muxer con androidx.media3.muxer.Muxer e rimuovi androidx.media3.transformer.Muxer.
    • È stato corretto il caricamento delle immagini HEIC dagli schemi degli URI dei contenuti. (N. 1373).
    • Regola la durata della traccia audio in AudioGraphInput per migliorare la sincronizzazione AV.
  • Estrattori:
    • MPEG-TS: esegui il rollback della modifica assicurando che il rendering dell'ultimo frame venga eseguito passando l'ultima unità di accesso di uno stream alla coda di esempio (#7909). Integrazione di correzioni per risolvere i problemi emersi solo nei flussi HLS(#1150) e nei flussi HLS H.262 (#1126).
    • MP3: preferisci le dimensioni dei dati di un frame Info rispetto a quelle riportate dallo stream sottostante (ad es. dimensioni del file o intestazione HTTP Content-Length). In questo modo è possibile escludere i dati del trailer non riproducibili (ad es. la copertina dell'album) dai calcoli della velocità in bit costante, rendendo le ricerche più accurate (#1376).
    • MP3. Utilizza il numero di fotogrammi e altri dati in un frame Info (se presente) per calcolare una velocità in bit media per una ricerca di velocità in bit costante, anziché estrapolare la velocità in bit del frame dopo il frame Info, che potrebbe essere artificialmente ridotta, ad esempio PCUT frame (#1376).
  • Audio:
    • Sono stati corretti gli attributi di codifica DTS:X del profilo 2 per la riproduzione passthrough (#1299).
    • Per la riproduzione senza carico, reimposta il campo di monitoraggio per il completamento dello stream in DefaultAudioSink prima di chiamare AudioTrack.stop() in modo che AudioTrack.StreamEventCallback#onPresentationEnded identifichi correttamente quando sono stati riprodotti tutti i dati in sospeso.
    • È stato corretto il bug in SilenceSkippingAudioProcessor per cui le transizioni tra diversi formati audio (ad esempio da stereo a mono) potevano causare la generazione di un'eccezione da parte del processore (#1352).
    • Implementa MediaCodecAudioRenderer.getDurationToProgressUs in modo che ExoPlayer pianifichi dinamicamente il suo loop di lavoro principale in base al momento in cui MediaCodecAudioRenderer può progredire.
  • Video:
    • Correggi la logica di fallback del decoder per Dolby Vision per utilizzare un decoder AV1 compatibile se necessario (#1389).
  • Testo:
    • È stato risolto il problema per cui i sottotitoli iniziavano prima di una posizione di ricerca saltata. Questo problema è stato introdotto solo in Media3 1.4.0-alpha01.
    • Modifica il comportamento predefinito di analisi dei sottotitoli in modo che venga eseguito durante l'estrazione anziché durante il rendering (vedi il diagramma dell'architettura di ExoPlayer per conoscere la differenza tra estrazione e rendering).
      • Questa modifica può essere ignorata chiamando sia MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) sia TextRenderer.experimentalSetLegacyDecodingEnabled(true). Consulta la documentazione sulla personalizzazione per sapere come collegare questi componenti in un'istanza ExoPlayer. Questi metodi (e tutto il supporto per la decodifica dei sottotitoli legacy) verranno rimossi in una release futura.
      • Le app con implementazioni personalizzate di SubtitleDecoder devono aggiornarle per implementare SubtitleParser (e SubtitleParser.Factory anziché SubtitleDecoderFactory).
    • Servizi per i giochi di Play: correggi la decodifica della lunghezza di esecuzione per risolvere 0 come indice di colore, anziché un valore letterale di colore (#1367).
    • CEA-708: ignora il valore rowLock. La specifica CEA-708-E S-2023 afferma che rowLock e columnLock devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto di columnLock non è implementato, quindi si presume che sia sempre falso).
      • Inizialmente era incluso nelle note di rilascio di 1.3.0-alpha01, ma la modifica è stata annullata per errore prima della release di 1.3.0-rc01. Il problema ora è stato risolto, pertanto la modifica è di nuovo presente.
    • CEA-708: evita l'aggiunta di nuove righe duplicate tramite la gestione ingenua da parte di ExoPlayer del comando "set pen location" (#1315).
  • Metadati:
    • Correggi la mappatura dei tag di ordinamento da MP4 a ID3. In precedenza, i tag MP4 "album sort" (soal), "artist sort" (soar) e "album artist sort" (soaa) erano erroneamente mappati ai tag TSO2, TSOA e TSOP ID3 (#1302).
    • È stato corretto il problema di lettura dei tag numerici gnre (genere) e tmpo (tempo) MP4 (/iTunes) quando il valore superava un byte.
    • Propaga il frame ID3 TCON a MediaMetadata.genre (#1305).
  • Immagine:
    • È stato aggiunto il supporto per griglie delle miniature DASH non quadrate (#1300).
    • Aggiunta del supporto di AVIF per API 34 e versioni successive.
  • Fonte:
    • Consenti a ByteArrayDataSource di risolvere un URI in un array di byte durante open(), anziché essere hardcoded in fase di creazione (#1405).
  • DRM:
    • Consenti l'impostazione di un LoadErrorHandlingPolicy su DefaultDrmSessionManagerProvider (#1271).
  • Effetto:
    • Correzione del bug per cui TimestampWrapper si arresta in modo anomalo se utilizzato con ExoPlayer#setVideoEffects (#821).
    • Consente di cambiare lo spazio di lavoro predefinito del colore SDR dai colori lineari al video SDR BT 709 elettrico. Offri anche la terza opzione per mantenere lo spazio colore originale.
    • Consenti la definizione dell'ordine z indeterminato di EditedMediaItemSequences (#1055).
    • Mantieni un intervallo di luminanza coerente su diverse parti dei contenuti HDR (utilizza l'intervallo HLG).
    • Aggiunta del supporto degli overlay Ultra HDR (bitmap) sui contenuti HDR.
    • Consenti l'utilizzo di SeparableConvolution effetti prima dell'API 26.
  • Estensione IMA:
    • Promuovere l'API necessaria per consentire alle app di riprodurre gli stream di annunci DAI in modo stabile.
    • Aggiungi replaceAdTagParameters(Map <String, String>) a ImaServerSideAdInsertionMediaSource.AdLoader per consentire di sostituire i parametri del tag annuncio in fase di esecuzione.
    • È stato corretto il bug per cui VideoAdPlayer.VideoAdPlayerCallback.onError non veniva chiamato quando si è verificato un errore del player durante la riproduzione dell'annuncio (#1334).
    • Passa alla versione 3.33.0 dell'SDK IMA per correggere un NullPointerException quando utilizzi data:// URI del tag annuncio (#700).
  • Sessione:
    • Per nascondere la barra di scorrimento nella notifica dei contenuti multimediali per i live streaming, non imposta la durata nei metadati della sessione della piattaforma (#1256).
    • Allinea la conversione di MediaMetadata a MediaDescriptionCompat per utilizzare lo stesso ordine e la stessa logica preferiti nella selezione delle proprietà dei metadati di media1.
    • Aggiungi MediaSession.sendError() che consente l'invio di errori non irreversibili al controller Media3. Quando utilizzi il controller di notifica (vedi MediaSession.getMediaNotificationControllerInfo()), l'errore personalizzato viene utilizzato per aggiornare PlaybackState della sessione della piattaforma a uno stato di errore con le informazioni sull'errore fornite (#543).
  • Estensione Cronet:
    • Correggi SocketTimeoutException in CronetDataSource. In alcune versioni di Cronet, la richiesta fornita dal callback non è sempre la stessa. Questo comporta il mancato completamento del callback e il timeout della richiesta (https://issuetracker.google.com/328442628).
  • Estensione HLS:
    • È stato corretto il bug per cui gli esempi EMSG in attesa in attesa di una discontinuità venivano delegati in HlsSampleStreamWrapper con un offset errato che causava un IndexOutOfBoundsException o un IllegalArgumentException (#1002).
    • È stato corretto il bug per cui le playlist non principali continuavano a ricaricarsi per gli stream LL-HLS (#1240).
    • È stato corretto il bug per cui l'abilitazione di CMCD per HLS con segmenti di inizializzazione causava Source Error e IllegalArgumentException.
  • Estensione DASH:
    • Correzione del bug per cui la ripreparazione di un live streaming di più periodi può generare un IndexOutOfBoundsException (#1329).
    • Aggiungi il supporto per gli URL di licenza dashif:Laurl (#1345).
  • Estensione Cast:
    • È stato corretto il bug che converteva il titolo dell'album di MediaQueueItem nell'artista nell'elemento multimediale Media3 (#1255).
  • App demo:
    • Consenti l'impostazione della modalità di ripetizione con argomenti Intent dalla riga di comando (#1266).
  • Rimuovi i simboli ritirati:
    • Rimuovi il metodo setContentTypePredicate(Predicate) da DefaultHttpDataSource, OkHttpDataSource e CronetDataSource. Utilizza invece il metodo equivalente per ogni XXXDataSource.Factory.
    • Rimuovi i costruttori OkHttpDataSource e OkHttpDataSourceFactory. Usa invece il criterio OkHttpDataSource.Factory.
    • Rimuovi PlayerMessage.setHandler(Handler). Usa invece setLooper(Looper).
    • Rimuovi campo Timeline.Window.isLive. Utilizza invece il metodo isLive().
    • Rimuovi i costruttori DefaultHttpDataSource. Usa invece DefaultHttpDataSource.Factory.
    • Rimuovi DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Usa invece DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.
    • Rimuovi MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Usa invece il criterio MediaCodecInfo.canReuseCodec(Format, Format).
    • Rimuovi i metodi DrmSessionManager.DUMMY e getDummyDrmSessionManager(). Usa invece il criterio DrmSessionManager.DRM_UNSUPPORTED.
    • Rimuovi AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format), VideoRendererEventListener.onVideoInputFormatChanged(Format). Utilizza invece gli sovraccarichi che richiedono un'DecoderReuseEvaluation.
    • Rimuovi le costanti RendererSupport.FormatSupport IntDef e FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE e FORMAT_UNSUPPORTED_TYPE. Utilizza il valore IntDef e le costanti equivalenti in androidx.media3.common.C (ad es. C.FORMAT_HANDLED).

Versione 1.4.0-alpha01

17 aprile 2024

Viene rilasciato androidx.media3:media3-*:1.4.0-alpha01. La versione 1.4.0-alpha01 contiene questi commit.

  • ExoPlayer:
    • Aggiungi BasePreloadManager che coordina il precaricamento per più origini in base alle priorità definite dal relativo rankingData. La personalizzazione è possibile estendendo questa classe. Aggiungi DefaultPreloadManager che utilizza PreloadMediaSource per precaricare esempi multimediali delle origini nella memoria e utilizza un numero intero rankingData che indica l'indice di un elemento nella UI.
    • Aggiungi PlayerId alla maggior parte dei metodi di LoadControl per consentire alle implementazioni di LoadControl di supportare più giocatori.
    • Rimuovi Buffer.isDecodeOnly() e C.BUFFER_FLAG_DECODE_ONLY. Non è necessario impostare questo flag perché renderer e decoder decideranno di saltare i buffer in base al timestamp. Le implementazioni personalizzate di Renderer devono controllare se il tempo di buffer è almeno BaseRenderer.getLastResetPositionUs() per decidere se deve essere mostrato un campione. Le implementazioni personalizzate di SimpleDecoder possono controllare isAtLeastOutputStartTimeUs se necessario oppure contrassegnare altri buffer con DecoderOutputBuffer.shouldBeSkipped per ignorarli.
    • Consenti che TargetPreloadStatusControl.getTargetPreloadStatus(T) restituisca un valore nullo per indicare di non precaricare un MediaSource con il rankingData specificato.
    • Aggiungi remove(MediaSource) a BasePreloadManager.
  • Trasformatore:
    • Aggiungi audioConversionProcess e videoConversionProcess a ExportResult per indicare come è stata creata la rispettiva traccia nel file di output.
    • Relax con controllo di livello H.264 con ottimizzazione dell'assetto.
    • È stato aggiunto il supporto per passare dal supporto di input SDR a quello HDR e viceversa in una sequenza.
    • Aggiunto il supporto per gli effetti audio a livello di composizione.
    • Aggiungi il supporto per la transcodifica di immagini Ultra HDR in video HDR.
    • Risolvi il problema per cui DefaultAudioMixer non restituisce la quantità corretta di byte dopo essere stato reimpostato e riutilizzato.
  • Video:
    • Risolvi il problema per cui Listener.onRenderedFirstFrame() arriva troppo presto quando cambia superficie durante la riproduzione.
  • Fonte:
    • Implementa il supporto per android.resource://package/id URI delle risorse non elaborate in cui package è diverso dal pacchetto dell'applicazione attuale. Questa soluzione non funzionava, ma è un modo più efficiente di accedere alle risorse in un altro pacchetto rispetto al nome.
    • Controlla con attenzione che url non sia null nei costruttori DataSpec. Questo parametro è già stato annotato come non null.
  • Effetto:
    • Supporta più cambi di velocità all'interno dello stesso EditedMediaItem o Composition in SpeedChangeEffect.
    • Supporto per l'output HLG e PQ dall'input bitmap ultra HDR.
    • Aggiungi il supporto per EGL_GL_COLORSPACE_BT2020_HLG_EXT, al fine di migliorare l'output della superficie HLG in ExoPlayer.setVideoEffect e in Debuger SurfaceView di Transformer.
    • Aggiorna l'implementazione della matrice overlay per renderla coerente con la documentazione capovolgendo i valori x e y applicati in setOverlayFrameAnchor(). Se utilizzi OverlaySettings.Builder.setOverlayFrameAnchor(), inverti i relativi valori x e y moltiplicandoli per -1.
  • Sessione:
    • Modifica il valore predefinito di CommandButton.enabled in true e assicurati che il valore possa rimanere falso per i controller anche se il comando associato è disponibile.
    • Aggiungi costanti icona per CommandButton da utilizzare al posto delle risorse per icone personalizzate.
    • Aggiungi MediaSessionService.isPlaybackOngoing() per consentire alle app di eseguire query se il servizio deve essere interrotto in onTaskRemoved() (#1219).
    • Aggiungi MediaSessionService.pauseAllPlayersAndStopSelf() che permette comodamente di mettere in pausa la riproduzione di tutte le sessioni e chiama stopSelf per terminare il ciclo di vita di MediaSessionService.
    • Esegui l'override di MediaSessionService.onTaskRemoved(Intent) per fornire un'implementazione predefinita sicura che mantenga il servizio in esecuzione in primo piano se la riproduzione è in corso o se interrompe il servizio in altro modo.
  • Download:
    • Assicurati che DownloadHelper non perda istanze Renderer non rilasciate, il che potrebbe causare l'arresto anomalo di un'app con IllegalStateException: Too many receivers, total of 1000, registered for pid (#1224).
  • Utilità di prova:
    • Implementa onInit() e onRelease() in FakeRenderer.
    • Modifica i metodi TestPlayerRunHelper.runUntil/playUntil in caso di errori non irreversibili (ad es. quelli segnalati a AnalyticsListener.onVideoCodecError). Utilizza la nuova catena di metodi TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() per disabilitare questo comportamento.
  • App demo:
    • Usa DefaultPreloadManager nell'app demo in formato breve.
  • Rimuovi i simboli ritirati:
    • Rimuovi CronetDataSourceFactory. Usa invece CronetDataSource.Factory.
    • Rimuovi alcuni costruttori DataSpec. Usa invece il criterio DataSpec.Builder.

Versione 1.3.0

Versione 1.3.1

11 aprile 2024

Viene rilasciato androidx.media3:media3-*:1.3.1. La versione 1.3.1 contiene questi commit.

  • Libreria comune:
    • Aggiungi Format.labels per consentire etichette localizzate o altre etichette alternative.
  • ExoPlayer:
    • Risolvi il problema per cui PreloadMediaPeriod non riesce a conservare gli stream quando viene precaricato di nuovo.
    • Applica il valore TrackSelectionResult corrispondente corretto al periodo di riproduzione nella selezione della traccia.
    • Avvia renderer abilitati in anticipo solo dopo l'avanzamento del periodo di riproduzione durante la transizione da un elemento multimediale all'altro (#1017).
    • Aggiungi il tipo restituito mancante alla regola -keepclasseswithmembers di proguard per DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Trasformatore:
    • Aggiungi una soluzione alternativa per l'eccezione generata perché MediaMuxer non supporta i timestamp di presentazione negativi precedenti all'API 30.
  • Selezione delle tracce:
    • DefaultTrackSelector: preferisci le tracce video con una frequenza fotogrammi "ragionevole" (>=10 f/s) rispetto a quelle con una frequenza fotogrammi più bassa o non impostata. Ciò garantisce che il player selezioni la traccia video "reale" negli MP4 estratti da foto in movimento che possono contenere due tracce HEVC di cui una ha una risoluzione più alta ma un numero molto ridotto di fotogrammi (#1051).
  • Estrattori:
    • È stato risolto il problema per cui la spaziatura interna non veniva saltata durante la lettura di blocchi di dimensioni strane dai file WAV (#1117).
    • MP3: compila Format.averageBitrate dai frame di metadati come XING e VBRI.
    • MPEG-TS: ripristina una modifica finalizzata a garantire il rendering dell'ultimo frame passando l'ultima unità di accesso di uno stream alla coda di esempio (#7909). Ciò è dovuto alla modifica che causa nuovi problemi con i flussi HLS solo I-frame (#1150) e gli stream HLS H.262 (#1126).
  • Audio:
    • Consenti il ripristino del renderer disattivando l'offload se la traccia audio non viene inizializzata in modalità offload.
  • Video:
    • Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la visualizzazione degli stream H265 a 60 f/s come non supportati
    • Aggiungi una soluzione alternativa che garantisca che il primo frame venga sempre visualizzato durante il tunneling, anche se il dispositivo non lo fa automaticamente come richiesto dall'API (#1169). (N. 966).
    • È stato risolto il problema per cui la gestione delle informazioni sul colore HDR causa un comportamento anomalo del codec e impedisce la modifica del formato adattivo per le tracce video SDR (#1158).
  • Testo:
    • WebVTT: impedisci a segnali diretti consecutivi di creare istanze CuesWithTiming aggiuntive spurie da WebvttParser.parse (#1177).
  • DRM:
    • Risolvi l'errore NoSuchMethodError che può essere generato dal framework MediaDrm anziché da ResourceBusyException o NotProvisionedException su alcuni dispositivi Android 14 (#1145).
  • Effetto:
    • Mappatura dei toni PQ a SDR migliorata mediante la conversione degli spazi colore.
  • Sessione:
    • È stato risolto il problema per cui la posizione corrente tornava indietro quando il controller sostituisce l'elemento corrente (#951).
    • Risolvi il problema per cui non viene trasmessa MediaMetadata con un solo extras non nullo tra controller multimediali e sessioni (#1176).
  • Interfaccia utente:
    • Utilizza il fallback per includere il nome della lingua della traccia audio se Locale non può identificare un nome visualizzato (#988).
  • Estensione DASH:
    • Compila tutti gli elementi Label del file manifest in Format.labels (#1054).
  • Estensione RTSP:
    • Salta i valori vuoti delle informazioni sulla sessione (i-tag) nell'analisi SDP (#1087).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI, ecc.):
    • Disabilita l'estensione MIDI come dipendenza locale per impostazione predefinita perché richiede la configurazione di un repository Maven aggiuntivo. Gli utenti che hanno bisogno di questo modulo da una dipendenza locale possono riattivarlo.

Versione 1.3.0

6 marzo 2024

Viene rilasciato androidx.media3:media3-*:1.3.0. La versione 1.3.0 contiene questi commit.

  • Libreria comune:
    • Implementa il supporto per android.resource://package/[type/]name URI delle risorse non elaborate, dove package è diverso dal pacchetto dell'applicazione attuale. Il funzionamento di questa soluzione è sempre stato documentato, ma finora non è stato implementato correttamente.
    • Normalizza i tipi MIME impostati dal codice dell'app o leggi dai contenuti multimediali in modo che siano completamente minuscoli.
    • Definisci gli annunci con un valore MediaItem completo anziché un singolo Uri in AdPlaybackState.
    • Aumenta minSdk a 19 (Android KitKat). Questa è allineata a tutte le altre librerie AndroidX ed è necessaria per eseguire l'upgrade alle versioni più recenti delle nostre dipendenze AndroidX.
    • Compila entrambi i campi artworkUri e artworkData in MediaMetadata.Builder.populate(MediaMetadata) quando almeno uno è diverso da null (#964).
  • ExoPlayer:
    • Aggiungi PreloadMediaSource e PreloadMediaPeriod per consentire alle app di precaricare un'origine multimediale di contenuti in una posizione iniziale specifica prima della riproduzione. PreloadMediaSource si occupa di preparare la fonte di contenuti multimediali per ricevere il Timeline, 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 implementando PreloadMediaSource.PreloadControl e impostano l'origine precaricata sul player per la riproduzione.
    • Aggiungi ExoPlayer.setImageOutput che consente alle app di impostare ImageRenderer.ImageOutput.
    • Per impostazione predefinita, DefaultRenderersFactory fornisce ora un valore ImageRenderer al player, con ImageOutput e ImageDecoder.Factory.DEFAULT nulli.
    • Emetti evento Player.Listener.onPositionDiscontinuity quando il silenzio viene ignorato (#765).
    • Aggiungi il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Puoi abilitare questa funzionalità utilizzando MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Supporta le fonti multimediali adattive con PreloadMediaSource.
    • Implementa HttpEngineDataSource, un HttpDataSource, utilizzando l'API HttpEngine.
    • Impedisci la creazione di sottoclassi CompositeSequenceableLoader. Questo componente è stato precedentemente estendibile, ma non è mai stato creato sottoclassi all'interno della libreria. È possibile eseguire le personalizzazioni eseguendo il wrapping di un'istanza tramite il pattern di arredamento e implementando un CompositeSequenceableLoaderFactory personalizzato.
    • È stato risolto il problema per cui la ripetizione alla stessa ora causava la cancellazione dei metadati di questo elemento (#1007).
    • Rinomina i metodi experimentalSetSubtitleParserFactory su BundledChunkExtractor.Factory e DefaultHlsExtractorFactory in setSubtitleParserFactory e non consentire la trasmissione di null. Utilizza i nuovi metodi experimentalParseSubtitlesDuringExtraction(boolean) per controllare il comportamento di analisi.
    • Aggiungi il supporto per la personalizzazione del valore SubtitleParser.Factory utilizzato durante l'estrazione. Questo può essere ottenuto con MediaSource.Factory.setSubtitleParserFactory().
    • Aggiungi il prefisso di origine a tutti i campi Format.id generati da MergingMediaSource. Questo consente di identificare l'origine che ha prodotto un Format (#883).
    • Correggi l'espressione regolare utilizzata per convalidare i nomi personalizzati delle chiavi CMCD (Common Media Client Data) modificandola in modo che utilizzi solo il trattino (#1028).
    • Interrompi la doppia codifica dei parametri di query CMCD (#1075).
  • Trasformatore:
    • È stato aggiunto il supporto per la suddivisione dei video in slow motion H.265/HEVC SEF.
    • Aumenta la velocità di trasmuxing, soprattutto in caso di modifiche "rimuovi video".
    • Aggiungi un'API per assicurarti che il file di output venga avviato su un frame video. Ciò può rendere l'output delle operazioni di ritaglio più compatibile con le implementazioni dei player che non mostrano il primo fotogramma video fino al timestamp di presentazione (#829).
    • È stato aggiunto il supporto per ottimizzare le operazioni di taglio di MP4 su asset singoli.
    • Aggiungi il supporto per garantire che un fotogramma video abbia il primo timestamp nel file di output. Corregge i file di output che iniziano con un frame nero nei player basati su iOS (#829).
  • Selezione delle tracce:
    • Aggiungi DefaultTrackSelector.selectImageTrack per abilitare la selezione della traccia dell'immagine.
    • Aggiungi TrackSelectionParameters.isPrioritizeImageOverVideoEnabled per determinare se selezionare una traccia immagine se sono disponibili sia una traccia immagine che una traccia video. Il valore predefinito è false, il che significa che la selezione di una traccia video ha la priorità.
  • Estrattori:
    • Aggiungi un'ulteriore analisi AV1C all'estrattore MP4 per recuperare i valori ColorInfo.colorSpace, ColorInfo.colorTransfer e ColorInfo.colorRange (#692).
    • MP3: utilizza la ricerca con velocità in bit costante (CBR) per la ricerca di file con un'intestazione Info (l'equivalente CBR dell'intestazione Xing). In precedenza utilizzavamo la tabella di ricerca dall'intestazione Info, ma ciò si traduce in una ricerca meno precisa rispetto a quando la ignoriamo e supponiamo che il file sia CBR.
    • MPEG2-TS: aggiunta del supporto DTS, DTS-LBR e DTS:X Profile2 (#275).
    • Estrai tipi di audio dai descrittori TS e mappali a flag di ruolo, consentendo agli utenti di selezionare tracce audio più informate (#973).
  • Audio:
    • Migliora l'algoritmo di esclusione dei silenziosi con una rampa di volume fluida; mantenimento del silenzio minimo e durate di silenzio più naturali (#7423).
    • Segnala il silenzio saltato in modo più deterministico (#1035).
  • Video:
    • Modifica il costruttore MediaCodecVideoRenderer che prende un argomento VideoFrameProcessor.Factory e sostituiscilo con un costruttore che accetta un argomento VideoSinkProvider. Le app che vogliono inserire un VideoFrameProcessor.Factory personalizzato possono creare un'istanza di un CompositingVideoSinkProvider che utilizza l'elemento VideoFrameProcessor.Factory personalizzato e passare il provider del sink video a MediaCodecVideoRenderer.
  • Testo:
    • È stata corretta la serializzazione dei segnali bitmap per risolvere l'errore Tried to marshall a Parcel that contained Binder objects quando si utilizza DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708: ignora il valore rowLock. La specifica CEA-708-E S-2023 afferma che rowLock e columnLock devono essere entrambi considerati veri, indipendentemente dai valori presenti nel flusso (il supporto di columnLock non è implementato, quindi si presume che sia sempre falso).
  • Immagine:
    • Aggiungi il supporto per le miniature DASH. Le immagini della griglia vengono ritagliate e vengono fornite singole miniature a ImageOutput in prossimità degli orari di presentazione.
  • DRM:
  • Estensione IMA:
    • Risolvi il problema per cui gli annunci DASH e HLS senza l'estensione del file appropriata non potevano essere riprodotti.
  • Sessione:
    • Disattiva il rilevamento del doppio clic per le app TV (#962).
    • È stato risolto il problema per cui non veniva trasmessa la lingua MediaItem.RequestMetadata con solo elementi extra non null tra sessioni e controller multimediali.
    • Aggiungi a MediaLibrarySession.Builder un costruttore che richiede solo un Context anziché un MediaLibraryService.
  • Estensione HLS:
    • Riduci HlsMediaPeriod alla visibilità privata del pacchetto. Questo tipo non deve dipendere direttamente dall'esterno del pacchetto HLS.
    • La funzionalità Risolvi cerca all'inizio di un segmento in modo più efficiente (#1031).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI, ecc.):
    • Decoder MIDI: ignora i messaggi di evento SysEx (#710).
  • Utilità di prova:
    • Non mettere in pausa la riproduzione tra TestPlayerRunHelper.playUntilPosition. Il test mantiene la riproduzione in stato di riproduzione, ma sospende l'avanzamento finché il test non riesce ad aggiungere asserzioni e ulteriori azioni.
  • App demo:
    • Aggiungi un modulo demo breve per dimostrare l'utilizzo di PreloadMediaSource con il caso d'uso dei contenuti in formato breve.

Versione 1.3.0-rc01

22 febbraio 2024

Utilizza la versione stabile 1.3.0.

Versione 1.3.0-beta01

7 febbraio 2024

Utilizza la versione stabile 1.3.0.

Versione 1.3.0-alpha01

15 gennaio 2024

Utilizza la versione stabile 1.3.0.

Versione 1.2.0

Versione 1.2.1

9 gennaio 2024

  • ExoPlayer:
    • È stato risolto il problema per cui le ricerche manuali al di fuori dell'intervallo LiveConfiguration.min/maxOffset continuavano a regolare l'offset di nuovo su min/maxOffset.
    • È stato risolto il problema a causa del quale i layout dei canali OPUS e VORBIS sono errati per 3, 5, 6, 7 e 8 canali (#8396).
    • È stato risolto il problema per cui le selezioni delle tracce dopo aver eseguito la ricerca fino a zero in un live streaming lasciavano erroneamente l'avvio dello stream nella posizione predefinita (#9347).
    • È stato risolto il problema per cui le nuove istanze di CmcdData.Factory ricevevano valori negativi per bufferedDurationUs da origini di blocchi, generando un IllegalArgumentException (#888).
  • Trasformatore:
    • Aggirare un problema per cui il codificatore segnalava un problema al momento della configurazione a causa dell'impostazione di una frequenza operativa elevata.
  • Estrattori:
    • Contrassegna le tracce HEVC secondarie (non riproducibili) nelle foto in movimento JPEG come ROLE_FLAG_ALTERNATE per evitare che vengano selezionate automaticamente per la riproduzione a causa della loro risoluzione più elevata.
    • Risoluzione del problema di rilevamento dei fotogrammi chiave errato per gli stream TS H264 (#864).
    • Correggi la stima della durata dei flussi TS che superano i 47.721 secondi (#855).
  • Audio:
    • È stato risolto il problema di gestione di EOS per SilenceSkippingAudioProcessor quando la chiamata viene eseguita più volte (#712).
  • Video:
    • Aggiungi una soluzione alternativa per un problema del dispositivo su Galaxy Tab S7 FE, Chromecast con Google TV e Lenovo M10 FHD Plus che causa la segnalazione degli stream AVC a 60 f/s come non supportati (#693).
  • Metadati:
    • È stato corretto il bug per cui MediaMetadata era compilato solo dai commenti Vorbis con chiavi maiuscole (#876).
    • Rileva OutOfMemoryError durante l'analisi di frame ID3 molto grandi, il che significa che la riproduzione può continuare senza le informazioni sui tag anziché senza problemi di riproduzione.
  • DRM:
    • Estendi la soluzione alternativa per l'URL della licenza ClearKey https://default.url spuria all'API 33 e versioni successive (in precedenza la soluzione alternativa veniva applicata esattamente solo all'API 33) (#837).
    • È stato risolto il problema di ERROR_DRM_SESSION_NOT_OPENED quando si passa dalla piattaforma criptata a quella di cancellazione dei contenuti senza una superficie collegata al player. L'errore è dovuto all'utilizzo non corretto di un decoder sicuro per la riproduzione di contenuti chiari.
  • Sessione:
    • Inserisci le chiavi e i valori personalizzati in MediaMetadataCompat in MediaMetadata.extras e MediaMetadata.extras in MediaMetadataCompat (#756, #802).
    • È stato corretto il problema di trasmissione di notifyChildrenChanged per i controller precedenti (#644).
    • È stato corretto un bug per cui l'impostazione di un tempo negativo per un timer setWhen disattivato della notifica causava un arresto anomalo su alcuni dispositivi (#903).
    • È stato corretto il problema IllegalStateException quando non aveva completato la connessione del controller delle notifiche multimediali quando veniva richiesto il primo aggiornamento della notifica (#917).
  • Interfaccia utente:
    • È stato risolto il problema per cui i pulsanti Avanti e Indietro non erano visibili quando venivano utilizzati con Material Design in un BottomSheetDialogFragment (#511).
    • È stato risolto il problema per cui i numeri nel pulsante per l'avanzamento veloce di PlayerControlView non erano ben allineati (#547).
  • Estensione DASH:
    • Analizza "f800" come numero di canali pari a 5 per Dolby nel file manifest DASH (#688).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI, ecc.):
    • MIDI: è stato risolto il problema a causa del quale la ricerca in avanti saltava gli eventi di modifica del programma (#704).
    • Esegui la migrazione a FFmpeg 6.0 e aggiorna l'NDK supportato in r26b (#707, #867).
  • Estensione Cast:
    • Pulisci la creazione di un Timeline per non causare l'arresto anomalo dell'app quando il caricamento dei contenuti multimediali non riesce sul dispositivo di trasmissione (#708).

Versione 1.2.0

15 novembre 2023

  • Libreria comune:
    • Aggiungi un parametro @Nullable Throwable ai metodi nell'interfaccia Log.Logger. Il parametro message per questi metodi non contiene più informazioni sul Throwable passato ai metodi Log.{d,i,w,e}(), quindi le implementazioni dovranno aggiungere manualmente queste informazioni, se lo desideri, (possibilmente utilizzando Logger.appendThrowableString(String, Throwable)).
    • È stato risolto il problema di compatibilità di Kotlin in cui i parametri di tipo generico con valore nullo e i tipi di elementi array con valori nulli non venivano rilevati come valori nulli. Esempi sono i parametri dei metodi TrackSelectorResult e SimpleDecoder (#6792).
    • Modifica il comportamento predefinito dell'UI e delle notifiche in Util.shouldShowPlayButton per mostrare un pulsante di riproduzione mentre la riproduzione viene temporaneamente soppressa (ad es. a causa di una perdita di messa a fuoco temporanea dell'audio). Il comportamento precedente può essere mantenuto utilizzando PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) o MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Esegui l'upgrade di androidx.annotation:annotation-experimental a 1.3.1 per risolvere il problema https://issuetracker.google.com/251172715.
    • Sposta ExoPlayer.setAudioAttributes nell'interfaccia Player.
  • ExoPlayer:
    • Sono stati risolti i problemi di ricerca negli stream AC4 causati dalla mancata identificazione corretta degli esempi di sola decodifica (#11000).
    • Aggiungi l'eliminazione della riproduzione su dispositivi di output audio non adatti (ad esempio l'altoparlante integrato nei dispositivi Wear OS) quando questa funzionalità viene attivata tramite ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Il motivo dell'eliminazione della riproduzione verrà aggiornato come Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT se viene tentato di riprodurre la riproduzione quando non sono disponibili uscite audio adatte o se tutte le uscite adatte vengono disconnesse durante la riproduzione. Il motivo dell'eliminazione verrà rimosso quando viene connesso un output adatto.
    • Aggiungi MediaSource.canUpdateMediaItem e MediaSource.updateMediaItem per accettare gli aggiornamenti MediaItem dopo la creazione tramite Player.replaceMediaItem(s).
    • Consenti gli aggiornamenti di MediaItem per tutti i MediaSource corsi forniti dalla libreria tramite Player.replaceMediaItem(s) (#33, #9978).
    • Rinomina MimeTypes.TEXT_EXOPLAYER_CUES in MimeTypes.APPLICATION_MEDIA3_CUES.
    • Aggiungi PngExtractor che invii e legge un intero file PNG in TrackOutput come un unico esempio.
    • Migliora il metodo SequenceableLoader.continueLoading(long) nell'interfaccia SequenceableLoader per SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contiene parametri aggiuntivi, tra cui playbackSpeed e lastRebufferRealtimeMs, oltre al playbackPositionUs esistente.
    • Migliora il metodo ChunkSource.getNextChunk(long, long, List, ChunkHolder) nell'interfaccia ChunkSource in ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Aggiungi altri campi al logging dei dati CMCD (Common Media Client Data): buffer starvation (bs), scadenza (dl), velocità di riproduzione (pr) e avvio (su) (#8699).
    • Aggiungi luma e la profondità di bit della crominanza a ColorInfo (#491).
    • Aggiungi altri campi al logging dei dati CMCD (Common Media Client Data): richiesta di oggetto successiva (nor) e richiesta di intervallo successivo (nrr) (#8699).
    • Aggiunta di funzionalità per trasmettere i dati Common Media Client Data (CMCD) utilizzando i parametri di query (#553).
    • Correggi ConcurrentModificationException in ExperimentalBandwidthMeter (#612).
    • Aggiungi il parametro MediaPeriodId a CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Supporta ClippingMediaSource (e altre origini con offset di tempo periodo/finestra) in ConcatenatingMediaSource2 (#11226).
    • Modifica BaseRenderer.onStreamChanged() per ricevere anche un argomento MediaPeriodId.
  • Trasformatore:
    • Analizza i dati di rotazione EXIF per gli input delle immagini.
    • Rimuovi il tipo di annotazione TransformationRequest.HdrMode e le costanti associate. Usa invece Composition.HdrMode e le costanti associate.
    • Semplifica OverlaySettings per risolvere i problemi di rotazione.
    • Parametri frameRate e durationUs di SampleConsumer.queueInputBitmap cambiati in TimestampIterator.
  • Selezione delle tracce:
    • Aggiungi DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness per consentire o impedire in modo esplicito l'adattamento non continuo. Il comportamento predefinito mantiene il comportamento attuale di true.
  • Estrattori:
    • MPEG-TS: assicurati che il rendering dell'ultimo frame venga eseguito passando l'ultima unità di accesso di un flusso alla coda di esempio (#7909).
    • Correggi l'errore ortografico durante la determinazione di rotationDegrees. projectionPosePitch cambiato in projectionPoseRoll(#461).
    • Rimuovi il presupposto che le istanze Extractor possano essere ispezionate direttamente con instanceof. Se vuoi l'accesso di runtime ai dettagli di implementazione di un Extractor, devi prima chiamare Extractor.getUnderlyingInstance.
    • Aggiungi BmpExtractor.
    • Aggiungi WebpExtractor.
    • Aggiungi HeifExtractor.
    • Aggiungi il supporto QuickTime classico a Mp4Extractor.
  • Audio:
    • Aggiungi il supporto per PCM big-endian a 24/32 bit in MP4 e Matroska e analizza la codifica PCM per lpcm in MP4.
    • Aggiungi il supporto per l'estrazione dell'audio Vorbis in formato MP4.
    • Aggiungi AudioSink.getFormatOffloadSupport(Format) che recupera il livello di supporto dell'offload che il sink può fornire per il formato tramite un DefaultAudioOffloadSupportProvider. Restituisce il nuovo AudioOffloadSupport che contiene isFormatSupported, isGaplessSupported e isSpeedChangeSupported.
    • Aggiungi AudioSink.setOffloadMode() mediante il quale viene configurata la configurazione dell'offload nel sink audio. Il valore predefinito è AudioSink.OFFLOAD_MODE_DISABLED.
    • L'offload può essere abilitato tramite setAudioOffloadPreference in TrackSelectionParameters. Se la preferenza è impostata su "Attiva", il dispositivo supporta l'offload per il formato e la selezione delle tracce è una singola traccia audio, l'offload audio verrà attivato.
    • Se il criterio audioOffloadModePreference è impostato su AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, DefaultTrackSelector selezionerà solo una traccia audio e solo se il formato di quella traccia è supportato in offload. Se nessuna traccia audio è supportata nell'offload, non verrà selezionata nessuna traccia.
    • È in corso la disattivazione del supporto senza interruzioni per l'offload quando il livello precedente dell'API 33 è dovuto a un problema della posizione di riproduzione dopo la transizione della traccia.
    • Rimuovi il parametro enableOffload dalla firma del metodo DefaultRenderersFactory.buildAudioSink.
    • Rimuovi il metodo DefaultAudioSink.Builder.setOffloadMode.
    • Rimuovi il valore intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Aggiungi il supporto per i metadati senza lacune di Opus durante la riproduzione senza caricamento.
    • Consenti il recupero del renderer disattivando l'offload se l'operazione non è riuscita alla prima scrittura (#627).
    • Attiva la pianificazione dell'offload per impostazione predefinita per la riproduzione non caricata in modalità solo audio.
    • Elimina ExoPlayer.experimentalSetOffloadSchedulingEnabled e AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged è stato rinominato onSleepingForOffloadChanged e onExperimentalOffloadedPlayback come onOffloadedPlayback.
    • Sposta le interfacce e le definizioni correlate alla modalità di offload audio TrackSelectionParameters in una classe AudioOffloadPreferences interna.
    • Aggiungi callback onAudioTrackInitialized e onAudioTrackReleased a AnalyticsListener, AudioRendererEventListener e AudioSink.Listener.
    • Risoluzione del problema di underflow del buffer audio DTS Express (#650).
    • Correzione del bug per cui le funzionalità controllano la E-AC3-JOC genera un IllegalArgumentException (#677).
  • Video:
    • Consenti a MediaCodecVideoRenderer di utilizzare un elemento VideoFrameProcessor.Factory personalizzato.
    • È stato corretto il bug per cui non era possibile visualizzare il primo frame se lo stream audio iniziava con timestamp negativi (#291).
  • Testo:
    • Rimuovi ExoplayerCuesDecoder. Le tracce di testo con sampleMimeType = application/x-media3-cues ora vengono gestite direttamente da TextRenderer senza bisogno di un'istanza SubtitleDecoder.
  • Metadati:
    • MetadataDecoder.decode non verrà più richiamato per gli esempi di "sola decodifica", poiché l'implementazione deve comunque restituire un valore nullo.
  • Effetto:
    • Aggiungi VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) l'input bitmap in coda per timestamp.
    • Modifica VideoFrameProcessor.registerInputStream() in modo che non blocchi. Le app devono implementare VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Parametri frameRate e durationUs di VideoFrameProcessor.queueInputBitmap cambiati in TimestampIterator.
  • Estensione IMA:
    • È stato corretto il bug per cui un live streaming DASH in più periodi che non era il primo elemento di una playlist poteva generare un'eccezione (#571).
    • Rilascia StreamManager prima di chiamare AdsLoader.destroy()
    • Passa alla versione 3.31.0 dell'SDK IMA.
  • Sessione:
    • Imposta il comportamento del servizio in primo piano delle notifiche su FOREGROUND_SERVICE_IMMEDIATE in DefaultMediaNotificationProvider (#167).
    • Utilizza solo android.media.session.MediaSession.setMediaButtonBroadcastReceiver() oltre l'API 31 per evitare problemi con l'API deprecata sui dispositivi Samsung (#167).
    • Utilizza il controller delle notifiche multimediali come proxy per impostare i comandi disponibili e il layout personalizzato utilizzati per compilare la notifica e la sessione della piattaforma.
    • Converti gli eventi relativi ai pulsanti multimediali ricevuti da MediaSessionService.onStartCommand() all'interno di Media3 anziché indirizzarli alla sessione della piattaforma e di nuovo a Media3. In questo modo, il controller chiamante è sempre il controller delle notifiche multimediali e le app possono riconoscere facilmente le chiamate provenienti dalla notifica allo stesso modo su tutti i livelli API supportati.
    • Risolvi il bug per cui MediaController.getCurrentPosition() non avanza quando connesso a un MediaSessionCompat precedente.
    • Aggiungi MediaLibrarySession.getSubscribedControllers(mediaId) per comodità.
    • Esegui l'override di MediaLibrarySession.Callback.onSubscribe() per dichiarare la disponibilità dell'ID principale a cui il controller si abbona. Se ha esito positivo, l'abbonamento viene accettato e notifyChildrenChanged() viene chiamato immediatamente per informare il browser (#561).
    • Aggiungi il modulo dimostrativo della sessione per Automotive OS e attiva la demo della sessione per Android Auto.
    • Non impostare la coda della sessione del framework quando COMMAND_GET_TIMELINE non è disponibile per il controller delle notifiche multimediali. Con Android Auto come controller client che legge la sessione framework, il pulsante queue nella UI di Android Auto non viene visualizzato (#339).
    • Utilizza DataSourceBitmapLoader per impostazione predefinita anziché SimpleBitmapLoader (#271, #327).
    • Aggiungi MediaSession.Callback.onMediaButtonEvent(Intent) che consente alle app di eseguire l'override della gestione predefinita degli eventi dei pulsanti multimediali.
  • Interfaccia utente:
    • Aggiungi un'implementazione Player.Listener per i dispositivi Wear OS che gestisce l'eliminazione della riproduzione dovuta a Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT avviando una finestra di dialogo di sistema per consentire a un utente di connettere un'uscita audio adatta (ad esempio le cuffie Bluetooth). Il listener ripristina automaticamente la riproduzione se viene connesso un dispositivo idoneo entro un timeout configurabile (l'impostazione predefinita è 5 minuti).
  • Download:
    • Dichiara il tipo di servizio in primo piano "sincronizzazione dati" per DownloadService per garantire la compatibilità con Android 14. Quando utilizzi questo servizio, l'app deve anche aggiungere dataSync come foregroundServiceType nel file manifest e aggiungere l'autorizzazione FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • Estensione HLS:
    • Aggiorna la playlist live HLS con un intervallo calcolato dall'ora di inizio dell'ultimo caricamento anziché dall'ora di completamento dell'ultimo caricamento (#663).
  • Estensione DASH:
    • Consenti più identificatori DASH dello stesso nell'URL del modello di segmento.
    • Aggiungi il supporto sperimentale per l'analisi dei sottotitoli durante l'estrazione. Questa funzionalità offre un supporto migliore per l'unione di sottotitoli sovrapposti, compresa la risoluzione dello sfarfallio durante il passaggio da un segmento di sottotitoli all'altro. Puoi abilitare questa funzionalità utilizzando DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • Estensione RTSP:
    • Risolvi il problema di una condizione di gara che potrebbe causare un errore di tipo IndexOutOfBoundsException in caso di ricorrenza su TCP o in caso di blocco della riproduzione in alcune situazioni.
    • Controlla lo stato nella configurazione RTSP quando viene restituito lo stato di caricamento RtspMediaPeriod (#577).
    • Ignora i metodi di richiesta RTS personalizzati nell'intestazione pubblica della risposta delle opzioni (#613).
    • Utilizza il valore di timeout della risposta della configurazione RTSP nell'intervallo di tempo dell'invio di richieste di opzioni RTSP keep-alive (#662).
  • Estensioni decoder (FFmpeg, VP9, AV1, MIDI, ecc.):
    • Rilascia il modulo di decodifica MIDI, che fornisce il supporto per la riproduzione di file MIDI standard utilizzando la libreria Jsyn per sintetizzare l'audio.
    • Aggiungi DecoderOutputBuffer.shouldBeSkipped per contrassegnare direttamente i buffer di output che non devono essere presentati. È preferibile usare questa opzione rispetto a C.BUFFER_FLAG_DECODE_ONLY che verrà deprecato.
    • Aggiungi Decoder.setOutputStartTimeUs e SimpleDecoder.isAtLeastOutputStartTimeUs per consentire ai decoder di rilasciare campioni di sola decodifica prima dell'ora di inizio. Dovrebbe essere preferibile utilizzare questo tipo di Buffer.isDecodeOnly che verrà deprecato.
    • È stato corretto il bug durante la pubblicazione dell'artefatto del decoder MIDI nel repository Maven. L'artefatto viene rinominato in media3-exoplayer-midi (#734).
  • Estensione Leanback:
    • Correzione del bug per cui la disattivazione di una superficie può causare un errore ArithmeticException nel codice Leanback (#617).
  • Utilità di prova:
    • Rendi TestExoPlayerBuilder e FakeClock compatibili con i test dell'UI di Espresso e i test dell'interfaccia utente di Compose. È stato corretto un bug per cui la riproduzione avanza in modo non deterministico durante le interazioni in visualizzazione Espresso o Compose.
  • Rimuovi i simboli ritirati:
    • Rimuovi TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) e TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Usa Composition.Builder.setHdrMode(int) e passa il valore Composition a Transformer.start(Composition, String).
    • Rimuovi il metodo DownloadNotificationHelper.buildProgressNotification deprecato, utilizza un metodo non deprecato che accetta un parametro notMetRequirements.

Versione 1.2.0-rc01

1° novembre 2023

Utilizza la versione stabile 1.2.0.

Versione 1.2.0-beta01

19 ottobre 2023

Utilizza la versione stabile 1.2.0.

Versione 1.2.0-alpha02

29 settembre 2023

Utilizza la versione stabile 1.2.0.

Versione 1.2.0-alpha01

17 agosto 2023

Utilizza la versione stabile 1.2.0.

Versione 1.1.0

Versione 1.1.1

16 agosto 2023

  • Libreria comune:
    • Rimuovi la dipendenza multidex aggiunta per errore da tutti i moduli (#499).
  • ExoPlayer:
    • Risolvi il problema in PlaybackStatsListener per cui i PlaybackStats non corretti vengono creati dopo l'eliminazione della playlist.
    • Aggiungi altri campi al logging CMCD (Common Media Client Data): formato di streaming (sf), tipo di flusso (st), versione (v), velocità bit superiore (tb), durata dell'oggetto (d), velocità effettiva misurata (mtp) e tipo di oggetto (ot) (#8699).
  • Audio:
    • È stato corretto un bug che causava la transizione di Player.getState() a STATE_ENDED durante la riproduzione di file molto brevi (#538).
  • Offload audio:
    • Anteponi le pagine di intestazione ID Ogg e di intestazione del commento in bitstream per la riproduzione Opus offload in base a RFC 7845.
  • Video:
    • H.265/HEVC: correzione delle informazioni dell'immagine di riferimento SPS a breve e lungo termine per l'analisi.
  • Testo:
    • CEA-608: modifica la logica di troncamento del segnale in modo che consideri solo il testo visibile. In precedenza, il rientro e l'offset di tabulazione erano inclusi quando si limitava la lunghezza del segnale a 32 caratteri (che era tecnicamente corretta dalla specifica) (#11019).
  • Estensione IMA:
    • Passa alla versione 3.30.3 dell'SDK IMA.
  • Sessione:
    • Aggiungi un layout personalizzato allo stato del controller e fornisci un getter per accedervi. Quando il layout personalizzato cambia, viene chiamato MediaController.Listener.onCustomLayoutChanged. Le app che vogliono inviare layout personalizzati diversi a diversi controller Media3 possono farlo in MediaSession.Callback.onConnect utilizzando un AcceptedResultBuilder per assicurarsi che il layout personalizzato sia disponibile per il controller al termine della connessione.
    • Risolvi i casi in cui MediaLibraryServiceLegacyStub inviava un errore a un Result che non supportava questo comportamento e che ha generato un UnsupportedOperationException (#78).
    • Correggi il modo in cui PlayerWrapper crea un VolumeProviderCompat determinando volumeControlType tramite i comandi legacy (COMMAND_ADJUST_DEVICE_VOLUME e COMMAND_SET_DEVICE_VOLUME) e i nuovi comandi (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS e COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

Versione 1.1.0

5 luglio 2023

  • Libreria comune:
    • Aggiungi il motivo di eliminazione per il percorso audio non adatto e riproduci quando è pronto cambia il motivo per la soppressione troppo a lungo. (n. 15).
    • Aggiungi comandi al player:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Consente di aggiungere metodi di sovraccarico al player che consentono agli utenti di specificare flag di volume:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • Aggiungi Builder per DeviceInfo e ritira il costruttore esistente.
    • Aggiungi DeviceInfo.routingControllerId per specificare l'ID controller di routing per le riproduzioni da remoto.
    • Aggiungi Player.replaceMediaItem(s) come scorciatoia per aggiungere e rimuovere gli elementi nella stessa posizione (#8046).
  • ExoPlayer:
    • Consenti a ExoPlayer di controllare i metodi relativi al volume del dispositivo solo se esplicitamente attivati. Utilizza ExoPlayer.Builder.setDeviceVolumeControlEnabled per avere accesso a:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) e setDeviceVolume(int, int)
      • increaseDeviceVolume(int) e increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) e decreaseDeviceVolume(int, int)
    • Aggiungi FilteringMediaSource che consente di filtrare i tipi di tracce disponibili da un MediaSource.
    • Aggiungi il supporto per l'inclusione dei dati Common Media Client Data (CMCD) nelle richieste in uscita dei formati di streaming adattivi DASH, HLS e smoothStreaming. I seguenti campi, br, bl, cid, rtp e sid, sono stati incorporati (#8699). Struttura e metodi API:
      • Il logging CMCD è disattivato per impostazione predefinita. Utilizza MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) per abilitarlo.
      • Tutte le chiavi sono abilitate per impostazione predefinita. Esegui l'override di CmcdConfiguration.RequestConfig.isKeyAllowed(String key) per filtrare le chiavi registrate.
      • Esegui l'override di CmcdConfiguration.RequestConfig.getCustomData() per abilitare il logging delle chiavi personalizzato.
    • Aggiungi un'altra azione al manifest della demo principale per semplificare l'avvio dell'app demo con un file *.exolist.json personalizzato (#439).
    • Aggiungi ExoPlayer.setVideoEffects() per l'utilizzo di Effect durante la riproduzione video.
    • Aggiorna SampleQueue per archiviare sourceId come long anziché come int. Questa operazione modifica le firme dei metodi pubblici SampleQueue.sourceId e SampleQueue.peekSourceId.
    • Aggiungi parametri ai metodi LoadControl shouldStartPlayback e onTracksSelected per consentire di associare questi metodi al MediaPeriod pertinente.
    • Modifica la firma di ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) aggiungendo un parametro della sequenza temporale che contiene i periodi con gli UID utilizzati come chiavi nella mappa. Questa operazione è necessaria per evitare problemi di contemporaneità con i live streaming multiperiodo.
    • Ritira EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) e BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). In alternativa, può essere chiamata la variante dei metodi senza mediaTimeOffsetUs. Tieni presente che anche per le varianti deprecate, l'offset non viene più aggiunto a startTimeUs e endTimeUs degli oggetti MediaLoadData che vengono inviati dal supervisore.
    • Rinomina ExoTrackSelection.blacklist in excludeTrack e isBlacklisted in isTrackExcluded.
    • Correggi il comportamento incoerente tra ExoPlayer.setMediaItem(s) e addMediaItem(s) quando la chiamata viene chiamata in una playlist vuota.
  • Trasformatore:
    • Rimuovi Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Usa invece i criteri ExoPlayerAssetLoader.Factory(MediaSource.Factory) e Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • Rimuovi Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • È stato corretto un bug per cui la trasformazione poteva bloccarsi (e causare il timeout del muxer) se veniva segnalata la fine dello stream video nel momento in cui un frame di input era in attesa di elaborazione.
    • Esegui query sui codec tramite MediaCodecList anziché utilizzare le utilità findDecoder/EncoderForFormat per espandere il supporto.
    • Rimuovi la configurazione del B-frame in DefaultEncoderFactory perché non funziona su alcuni dispositivi.
  • Selezione delle tracce:
    • Aggiungi l'DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange che è disattivata per impostazione predefinita. Quando l'opzione è attivata, DefaultTrackSelector attiva una nuova selezione della traccia quando vengono modificate le funzionalità del renderer.
  • Estrattori:
    • Ogg: è stato corretto il bug per la ricerca di file di lunga durata (#391).
    • FMP4: è stato risolto il problema per cui TimestampAdjuster inizializza un offset di timestamp errato con tempo di esempio dei metadati da emsg atom (#356).
  • Audio:
    • È stato corretto il bug per cui alcune riproduzioni non andavano a buon fine quando il tunneling è attivato e AudioProcessors erano attivi, ad esempio per il taglio senza intervalli (#10847).
    • Incapsula i frame Opus in pacchetti Ogg in riproduzioni dirette (offload).
    • Estrapola la posizione corrente durante il sonno con la programmazione dell'offload.
    • Aggiungi Renderer.release() e AudioSink.release() per rilasciare le risorse al termine del ciclo di vita del player.
    • Ascolta le modifiche alle funzionalità audio in DefaultAudioSink. Aggiungi un parametro obbligatorio context nel costruttore di DefaultAudioSink, con il quale DefaultAudioSink verrà registrato come listener nella AudioCapabilitiesReceiver e aggiornerà la sua proprietà audioCapabilities quando viene comunicato una modifica delle funzionalità.
    • Propaga le modifiche alle funzionalità audio tramite un nuovo evento onAudioCapabilitiesChanged nell'interfaccia AudioSink.Listener e una nuova interfaccia RendererCapabilities.Listener che attiva gli eventi onRendererCapabilitiesChanged.
    • Aggiungi ChannelMixingAudioProcessor per applicare il ridimensionamento/il missaggio ai canali audio.
    • Aggiungi il nuovo valore int DISCARD_REASON_AUDIO_BYPASS_POSSIBLE a DecoderDiscardReasons per ignorare il decoder audio quando la modalità di bypass è possibile dopo la modifica delle funzionalità audio.
    • Aggiungi il supporto della riproduzione diretta per DTS Express e DTS:X (#335).
  • Video:
    • Imposta MediaCodecVideoRenderer nei report per VideoSize con larghezza e altezza pari a 0 quando il renderer è disattivato. Player.Listener.onVideoSizeChanged viene richiamata di conseguenza quando Player.getVideoSize() cambia. Con questa modifica, le dimensioni del video di ExoPlayer con MediaCodecVideoRenderer hanno larghezza e altezza pari a 0 quando Player.getCurrentTracks non supporta i video o quando non sono ancora state stabilite le dimensioni della traccia video supportata.
  • DRM:
    • Riduci la visibilità di diversi metodi solo per uso interno su DefaultDrmSession che non si prevede vengano chiamati dall'esterno del pacchetto DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Aggiungi una nuova libreria Muxer che può essere utilizzata per creare un file container MP4.
  • Estensione IMA:
    • Attiva gli stream DASH in tempo reale per più periodi per l'inserimento di annunci dinamici. Tieni presente che l'implementazione corrente non supporta ancora la ricerca nei live streaming (#10912).
    • È stato corretto un bug per cui veniva inserito un nuovo gruppo di annunci nei live streaming perché la posizione dei contenuti calcolata in sequenze temporali consecutive varia leggermente.
  • Sessione:
    • Aggiungi il metodo helper MediaSession.getControllerForCurrentRequest per ottenere informazioni sul controller che attualmente chiama un metodo Player.
    • Aggiungi androidx.media3.session.MediaButtonReceiver per consentire alle app di implementare la ripresa della riproduzione con eventi relativi al pulsante multimediale inviati, ad esempio, da cuffie Bluetooth (#167).
    • Aggiungi l'implementazione predefinita a MediaSession.Callback.onAddMediaItems per consentire il trasferimento dei MediaItems richiesti a Player se hanno LocalConfiguration (ad es. URI) (#282).
    • Aggiungere i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita per Android 12 e versioni precedenti (#410).
    • Aggiungi l'implementazione predefinita a MediaSession.Callback.onAddMediaItems per consentire il trasferimento dei MediaItems richiesti a Player se hanno LocalConfiguration (ad es. URI) (#282).
    • Aggiungere i pulsanti di comando "Vai al precedente" e "Vai al successivo" nella visualizzazione delle notifiche dei contenuti multimediali compatti per impostazione predefinita per Android 12 e versioni precedenti (#410).
  • Interfaccia utente:
    • Aggiungi i metodi Util shouldShowPlayButton e handlePlayPauseButtonAction per scrivere elementi UI personalizzati con un pulsante di riproduzione/pausa.
  • Estensione RTSP:
    • Per MPEG4-LATM, utilizza il valore predefinito di ID a livello di profilo, se non è presente nel messaggio Descrivi la risposta SDP (#302).
    • Utilizza l'URI di base per la risoluzione del percorso relativo della sessione RTSP, se presente nell'intestazione della risposta DESCRIBE (#11160).
  • Estensione DASH:
    • Rimuovi lo scarto del tempo dei media da MediaLoadData.startTimeMs e MediaLoadData.endTimeMs per gli stream DASH di più periodi.
    • È stato corretto un bug per cui la ripreparazione di una fonte multimediale Dash dal vivo per più periodi generava un IndexOutOfBoundsException (#10838).
  • Estensione HLS:
    • Aggiungi HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) per impostare un timeout per il thread di caricamento in modo da attendere l'inizializzazione di TimestampAdjuster. Se l'inizializzazione non viene completata prima del timeout, viene restituito un PlaybackException per evitare che la riproduzione si blocchi all'infinito. Per impostazione predefinita, il timeout è impostato su zero (#323).
  • Utilità di prova:
    • Verifica l'insensibilità alle maiuscole dello schema URI in DataSourceContractTest.
  • Rimuovi i simboli ritirati:
    • Rimuovi i costruttori DefaultAudioSink, usa invece DefaultAudioSink.Builder.
    • Rimuovi HlsMasterPlaylist, usa invece HlsMultivariantPlaylist.
    • Rimuovi Player.stop(boolean). Usa invece Player.stop() e Player.clearMediaItems() (se reset è true).
    • Rimuovi due costruttori SimpleCache deprecati, utilizza un costruttore non deprecato che utilizza invece un DatabaseProvider per migliorare le prestazioni.
    • Rimuovi il costruttore DefaultBandwidthMeter e utilizza DefaultBandwidthMeter.Builder.
    • Rimuovi i costruttori DefaultDrmSessionManager e usa DefaultDrmSessionManager.Builder.
    • Rimuovi due costruttori HttpDataSource.InvalidResponseCodeException deprecati, utilizza un costruttore non deprecato che accetta campi aggiuntivi(cause, responseBody) per migliorare il logging degli errori.
    • Rimuovi DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash e DownloadHelper.forSmoothStreaming, usa DownloadHelper.forMediaItem.
    • Rimuovi il costruttore DownloadService deprecato, utilizzane uno non deprecato che includa l'opzione per fornire un parametro channelDescriptionResourceId.
    • Rimuovi le costanti stringa deprecate per i set di caratteri (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME e UTF16LE_NAME), utilizza i set di caratteri Kotlin del pacchetto kotlin.text, java.nio.charset.StandardCharsets o com.google.common.base.Charsets.
    • Rimuovi il costruttore WorkManagerScheduler deprecato, utilizza un costruttore non deprecato che includa l'opzione per fornire un parametro Context.
    • Rimuovi i metodi deprecati createVideoSampleFormat, createAudioSampleFormat, createContainerFormat e createSampleFormat, che sono stati utilizzati per creare un'istanza della classe Format. Utilizza invece Format.Builder per creare istanze di Format.
    • Rimuovi i metodi deprecati copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate e copyWithVideoSize. Utilizza invece i metodi Format.buildUpon() e setter.
    • Rimuovi l'elemento ExoPlayer.retry() deprecato, utilizza invece prepare().
    • Rimuovi il costruttore zero-arg DefaultTrackSelector deprecato, usa invece DefaultTrackSelector(Context).
    • Rimuovi il costruttore OfflineLicenseHelper deprecato, usa invece OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Rimuovi il costruttore DownloadManager deprecato, utilizza il costruttore che utilizza un Executor.
    • Rimuovi i costruttori Cue deprecati e usa Cue.Builder.
    • Rimuovi il costruttore OfflineLicenseHelper deprecato, usa invece OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Rimuovi quattro metodi AnalyticsListener deprecati:
      • onDecoderEnabled, usa invece onAudioEnabled e/o onVideoEnabled.
      • onDecoderInitialized, usa onAudioDecoderInitialized e/o onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, usa invece onAudioInputFormatChanged e/o onVideoInputFormatChanged.
      • onDecoderDisabled, usa invece onAudioDisabled e/o onVideoDisabled.
    • Rimuovi Player.Listener.onSeekProcessed e AnalyticsListener.onSeekProcessed deprecati, utilizza invece onPositionDiscontinuity con DISCONTINUITY_REASON_SEEK.
    • Rimuovi ExoPlayer.setHandleWakeLock(boolean), utilizza invece setWakeMode(int).
    • Rimuovi DefaultLoadControl.Builder.createDefaultLoadControl() deprecato, utilizza invece build().
    • Rimuovi l'elemento MediaItem.PlaybackProperties deprecato, utilizza MediaItem.LocalConfiguration al suo posto. Il campo obsoleto MediaItem.playbackProperties ora è di tipo MediaItem.LocalConfiguration.

Versione 1.1.0-rc01

21 giu 2023

Utilizza la versione stabile 1.1.0.

Versione 1.1.0-beta01

7 giugno 2023

Utilizza la versione stabile 1.1.0.

Versione 1.1.0-alpha01

10 maggio 2023

Utilizza la versione stabile 1.1.0.

Versione 1.0.0

Versione 1.0.2

18 maggio 2023

Viene rilasciato androidx.media3:media3-*:1.0.2. La versione 1.0.2 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.7.

Questa release contiene le seguenti modifiche rispetto alla release 1.0.1:

  • Libreria di base:
    • Aggiungi Buffer.isLastSample() che indica se Buffer contiene la segnalazione C.BUFFER_FLAG_LAST_SAMPLE.
    • Risolvi il problema per cui l 'ultimo frame potrebbe non essere visualizzato se l'ultimo campione con frame viene rimosso dalla coda senza leggere il campione alla fine dello stream. (N. 11079).
  • Estrattori:
    • Correggi l'analisi di H.265 SPS nei file MPEG-TS riutilizzando la logica di analisi già utilizzata dagli estrattori RTSP ed MP4 (#303).
  • Testo:
    • SSA: aggiungi il supporto per i file UTF-16 se iniziano con un contrassegno di ordine byte (#319).
  • Sessione:
    • Risolvi il problema per cui MediaController non aggiorna i comandi disponibili quando connesso a un MediaSessionCompat legacy che aggiorna le sue azioni.
    • È stato corretto il bug che impediva all'elemento MediaLibraryService di restituire un valore nullo per una chiamata dall'interfaccia utente di sistema a Callback.onGetLibraryRoot con params.isRecent == true sull'API 30 (#355).
    • Correggi la perdita di memoria di MediaSessionService o MediaLibraryService (#346).
    • Correzione del bug per cui un aggiornamento combinato di Timeline e della posizione in un MediaSession potrebbe causare la generazione di un IllegalStateException da parte di un MediaController.

Versione 1.0.1

18 aprile 2023

Viene rilasciato androidx.media3:media3-*:1.0.1. La versione 1.0.1 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.6.

  • Libreria di base:
    • Reimposta l'override del live streaming target quando si cerca la posizione predefinita (#11051).
    • È stato corretto il bug per cui stream di esempio vuoti nei contenuti multimediali potevano causare il blocco della riproduzione.
  • Sessione:
    • È stato corretto il bug per cui più elementi di coda identici pubblicati da un elemento MediaSessionCompat legacy generavano un'eccezione in MediaController (#290).
    • Aggiungi l'inoltro mancante di MediaSession.broadcastCustomCommand alla legacy MediaControllerCompat.Callback.onSessionEvent (#293).
    • Correggere il bug per cui la chiamata a MediaSession.setPlayer non aggiorna i comandi disponibili.
    • Risolvi il problema a causa del quale le istanze TrackSelectionOverride inviate da un MediaController vengono ignorate se fanno riferimento a un gruppo con Format.metadata (#296).
    • Risolvi il problema per cui Player.COMMAND_GET_CURRENT_MEDIA_ITEM deve essere disponibile per accedere ai metadati tramite la versione precedente di MediaSessionCompat.
    • Risolvi il problema per cui le istanze MediaSession in un thread in background causano arresti anomali se utilizzate in MediaSessionService (#318).
    • È stato risolto il problema per cui la libreria dichiarava un ricevitore di pulsanti multimediali senza che l'app lo avesse previsto (#314).
  • DASH:
    • È stata corretta la gestione delle sequenze temporali dei segmenti vuote (#11014).
  • Il feed RTSP:
    • Riprova con TCP se la configurazione RTSP con UDP non va a buon fine e causa l'errore RTSP 461 Non supportato (#11069).

Versione 1.0.0

22 marzo 2023

Viene rilasciato androidx.media3:media3-*:1.0.0. La versione 1.0.0 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.5.

Non sono state apportate modifiche dalla versione 1.0.0-rc02.

Versione 1.0.0-rc02

2 marzo 2023

Viene rilasciato androidx.media3:media3-*:1.0.0-rc02. La versione 1.0.0-rc02 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.4.

  • Libreria di base:
    • Correggi il rilevamento del tipo di rete sull'API 33 (#10970).
    • Correggi NullPointerException durante la chiamata al numero ExoPlayer.isTunnelingEnabled (#10977).
  • Download:
    • Modifica al massimo l'ora di inizio di due segmenti da unire, configurabili in SegmentDownloader e nelle sottoclassi (#248).
  • Audio:
    • Risolvere i problemi relativi alla riproduzione di MP3 senza interruzioni sui dispositivi Samsung (#8594).
    • Correzione del bug per cui le velocità di riproduzione impostate subito dopo la disattivazione dell'audio potrebbero essere sostituite da un precedente cambiamento di velocità (#10882).
  • Video:
    • Mappa il formato HEVC HDR10 a HEVCProfileMain10HDR10 anziché a HEVCProfileMain10.
    • Aggiungi una soluzione alternativa per un problema del dispositivo su Chromecast con Google TV e Lenovo M10 FHD Plus che causa che gli stream AVC a 60 f/s siano contrassegnati come non supportati (#10898).
    • Risolvi i problemi di prestazioni durante il rilascio del frame durante la riproduzione di contenuti multimediali con una frequenza fotogrammi di gran lunga superiore a quella di aggiornamento dello schermo.
  • Trasmetti:
    • Correggi i problemi relativi a STATE_IDLE temporaneo durante la transizione da un elemento multimediale (#245).
  • Il feed RTSP:
    • Rileva l'eccezione illegaleArgumentException generata durante l'analisi dei messaggi di risposta RTSP non validi (#10971).
  • Sessione:
    • È stato corretto un bug per cui il pulsante di riproduzione/pausa delle notifiche non si aggiornava con lo stato del player (#192).
  • Estensione IMA:
    • Correggere un bug che impediva l'avvio degli stream DAI senza annunci perché il primo evento LOADED (e nel caso senza annunci l'unico) non è stato ricevuto.

Versione 1.0.0-rc01

16 febbraio 2023

Viene rilasciato androidx.media3:media3-*:1.0.0-rc01. La versione 1.0.0-rc01 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.3.

  • Libreria di base:
    • Regola la logica di ordinamento del decoder del renderer in modo da mantenere le preferenze di MediaCodecSelector, anche se un decoder segnala che potrebbe non essere in grado di riprodurre i contenuti multimediali con prestazioni elevate. Ad esempio, con il selettore predefinito, il decoder hardware con solo supporto funzionale sarà preferito rispetto al decoder software che supporta completamente il formato (#10604).
    • Aggiungi ExoPlayer.Builder.setPlaybackLooper che imposti un thread di riproduzione preesistente per una nuova istanza ExoPlayer.
    • Consenti la cancellazione degli helper della gestione dei download (#10776).
    • Aggiungi il parametro a BasePlayer.seekTo per indicare anche il comando utilizzato per la ricerca.
    • Utilizza il tema durante il caricamento dei drawable sull'API 21 e versioni successive (#220).
    • Aggiungi ConcatenatingMediaSource2 che consente di combinare più elementi multimediali in un'unica finestra (#247).
  • Estrattori:
    • Genera un ParserException anziché un NullPointerException se nella tabella di esempio (stbl) manca una descrizione del campione richiesta (stsd) durante l'analisi degli atomi di trak.
    • Salta correttamente gli esempi quando cerchi direttamente su un frame di sincronizzazione in fMP4 (#10941).
  • Audio:
    • Utilizza la velocità in bit del formato audio compresso per calcolare la dimensione minima del buffer per AudioTrack nelle riproduzioni dirette (passthrough).
  • Testo:
    • Correggi l'errore TextRenderer che trasmette un indice non valido (negativo) a Subtitle.getEventTime se un file dei sottotitoli non contiene segnali.
    • SubRip: aggiungi il supporto per i file UTF-16 se iniziano con un contrassegno di ordine dei byte.
  • Metadati:
    • Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
    • Aggiungi MediaMetadata.mediaType per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati.
    • Aggiungi MediaMetadata.isBrowsable come sostituto di MediaMetadata.folderType. Il tipo di cartella verrà deprecato nella prossima release.
  • DASH:
    • Aggiungi l'analisi completa per i set di adattamento dell'immagine, incluso il numero di riquadri (#3752).
  • Interfaccia utente:
    • Correggi l'elemento PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) deprecato per assicurarti che le modifiche di visibilità vengano passate al listener registrato (#229).
    • Correggi l'ordine dei controlli centrali del player in PlayerView quando utilizzi un layout da destra a sinistra (RTL) (#227).
  • Sessione:
    • Aggiungi l'astratto SimpleBasePlayer per facilitare l'implementazione dell'interfaccia di Player per player personalizzati.
    • Aggiungi il metodo helper per convertire il token di sessione della piattaforma in Media3 SessionToken (#171).
    • Utilizza onMediaMetadataChanged per attivare gli aggiornamenti della sessione multimediale della piattaforma (#219).
    • Aggiungi la sessione multimediale come argomento di getMediaButtons() di DefaultMediaNotificationProvider e utilizza elenchi immutabili per chiarezza (#216).
    • Aggiungi il listener di callback onSetMediaItems per fornire i mezzi per modificare/impostare l'elenco MediaItem, l'indice e la posizione iniziali per sessione prima di impostare sul player (#156).
    • Evita il rilevamento del doppio tocco per eventi relativi a pulsanti multimediali non Bluetooth (#233).
    • Rendi QueueTimeline più affidabile in caso di stato di sessione legacy non sicuro (#241).
  • Metadati:
    • Analizza più valori separati da null dai frame ID3, come consentito da ID3 v2.4.
    • Aggiungi MediaMetadata.mediaType per indicare il tipo di contenuti o il tipo di cartella descritto dai metadati.
    • Aggiungi MediaMetadata.isBrowsable come sostituto di MediaMetadata.folderType. Il tipo di cartella verrà deprecato nella prossima release.
  • Estensione Cast:
    • Aggiorna l'SDK Cast alla 21.2.0.
  • Estensione IMA:
    • Rimuovi il listener del player ImaServerSideAdInsertionMediaSource dal thread dell'applicazione per evitare problemi di thread.
    • Aggiungi una proprietà focusSkipButtonWhenAvailable a ImaServerSideAdInsertionMediaSource.AdsLoader.Builder per richiedere di impostare lo stato attivo del pulsante Salta sui dispositivi TV e impostarlo su true per impostazione predefinita.
    • Aggiungi un metodo focusSkipButton() a ImaServerSideAdInsertionMediaSource.AdsLoader per richiedere in modo programmatico di impostare lo stato attivo sul pulsante Salta.
    • Passa alla versione 3.29.0 dell'SDK IMA.
  • App demo:
    • Richiedi l'autorizzazione di accesso alle notifiche di download in fase di runtime (#10884).

Versione 1.0.0-beta03

22 novembre 2022

Viene rilasciato androidx.media3:media3-*:1.0.0-beta03. La versione 1.0.0-beta03 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.2.

  • Libreria di base:
    • Aggiungi ExoPlayer.isTunnelingEnabled per verificare se il tunneling è abilitato per le tracce attualmente selezionate (#2518).
    • Aggiungi WrappingMediaSource per semplificare il wrapping di un singolo MediaSource (#7279).
    • Elimina il back buffer prima che la riproduzione si blocchi a causa di memoria disponibile insufficiente.
    • Chiudi il blocco "doSomeWork" di tracciamento quando l'offload è abilitato.
    • Risolvi il problema di monitoraggio delle sessioni con le ricerche rapide in PlaybackStatsListener (#180).
    • Invia il callback onMediaItemTransition mancante quando chiami seekToNext o seekToPrevious in una playlist con un singolo elemento (#10667).
    • Aggiungi Player.getSurfaceSize che restituisce le dimensioni della superficie su cui viene visualizzato il video.
    • È stato corretto il bug per cui la rimozione dei listener durante la release del player potrebbe causare un errore IllegalStateException (#10758).
  • Creazione:
    • Applica almeno compileSdkVersion per evitare errori di compilazione (#10684).
    • Evita di pubblicare il blocco se incluso in un'altra build di Gradle.
  • Selezione delle tracce:
    • Preferisci altre tracce a Dolby Vision se il display non la supporta. (#8944).
  • Download:
    • Correggi il potenziale loop infinito in ProgressiveDownloader causato da download e riproduzione simultanei con lo stesso PriorityTaskManager (#10570).
    • Fai in modo che le notifiche di download siano visualizzate immediatamente (#183).
    • Limita le rimozioni di download paralleli a 1 per evitare la creazione eccessiva di thread (#10458).
  • Video:
    • Prova un decodificatore alternativo per Dolby Vision se il display non lo supporta. (#9794).
  • Audio:
    • Utilizza SingleThreadExecutor per il rilascio di AudioTrack istanze ed evitare errori di OutOfMemory quando vengono rilasciati più player contemporaneamente (#10057).
    • Aggiunge AudioOffloadListener.onExperimentalOffloadedPlayback per lo stato di offload AudioTrack. (N. 134).
    • Rendi AudioTrackBufferSizeProvider un'interfaccia pubblica.
    • Aggiungi ExoPlayer.setPreferredAudioDevice per impostare il dispositivo di uscita audio preferito (#135).
    • Rinomina androidx.media3.exoplayer.audio.AudioProcessor in androidx.media3.common.audio.AudioProcessor.
    • Mappare l'audio a 8 e 12 canali alle maschere dei canali 7.1 e 7.1.4 rispettivamente su tutte le versioni di Android (#10701).
  • Metadati:
    • Ora puoi configurare MetadataRenderer per visualizzare i metadati non appena sono disponibili. Crea un'istanza con MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) per specificare se il renderer restituirà i metadati in anticipo o sincronizzato con la posizione del player.
  • DRM:
    • Risolvi un bug nell'implementazione ClearKey di Android 13 che restituisce un URL di licenza non vuoto, ma non valido.
    • Correggi l'errore setMediaDrmSession failed: session not opened durante il passaggio da uno schema DRM all'altro in una playlist (ad es. da Widevine a ClearKey).
  • Testo:
    • CEA-608: garantire che i comandi di Service Switch nel campo 2 siano gestiti correttamente (#10666).
  • DASH:
    • Analizza EventStream.presentationTimeOffset dai manifest (#10460).
  • Interfaccia utente:
    • Utilizza gli override correnti del player come predefiniti in TrackSelectionDialogBuilder (#10429).
  • Sessione:
    • Assicurati che i comandi vengano sempre eseguiti nell'ordine corretto, anche se alcuni richiedono una risoluzione asincrona (#85).
    • Aggiungi DefaultMediaNotificationProvider.Builder per creare DefaultMediaNotificationProvider istanze. Lo strumento per la creazione può configurare l'ID notifica, l'ID canale di notifica e il nome del canale di notifica utilizzato dal fornitore. Inoltre, aggiungi il metodo DefaultMediaNotificationProvider.setSmallIcon(int) per impostare la piccola icona delle notifiche. (N. 104).
    • Assicurati che i comandi inviati prima di MediaController.release() non vengano eliminati (#99).
    • SimpleBitmapLoader può caricare bitmap da file:// URI (#108).
    • Correggi l'asserzione che impedisce a MediaController di cercare un annuncio in un periodo (#122).
    • Al termine della riproduzione, lo MediaSessionService viene interrotto dal primo piano e viene mostrata una notifica per riavviare la riproduzione dell'ultimo elemento multimediale riprodotto (#112).
    • Non avviare un servizio in primo piano con un intent in attesa di pausa (#167).
    • Nascondi manualmente il "badge" associato alla notifica creata da DefaultNotificationProvider nell'API 26 e nell'API 27 (il badge viene nascosto automaticamente nell'API 28 e versioni successive) (#131).
    • È stato corretto il bug per cui una seconda connessione binder da una versione precedente di MediaSession a un MediaController di Media3 causava eccezioni illegali (#49).
  • Il feed RTSP:
    • Aggiungi la gestione dei pacchetti frammentati H263 (#119).
    • Aggiungi il supporto per MP4A-LATM (#162).
  • IMA:
    • Aggiungi il timeout per il caricamento delle informazioni sugli annunci per gestire i casi in cui l'SDK IMA si blocca durante il caricamento di un annuncio (#10510).
    • Impedisci di saltare gli annunci mid-roll quando arrivi alla fine dei contenuti (#10685).
    • Calcola correttamente la durata della finestra per i live streaming con annunci inseriti lato server, ad esempio IMA DAI (#10764).
  • Estensione FFmpeg:
    • Aggiungi i nuovi flag richiesti per collegare le librerie FFmpeg a NDK 23.1.7779620 e versioni successive (#9933).
  • Estensione AV1:
    • Aggiorna la versione di CMake per evitare incompatibilità con le ultime release di Android Studio (#9933).
  • Estensione Cast:
    • Implementa getDeviceInfo() per poter identificare CastPlayer quando controlli la riproduzione con un MediaController (#142).
  • Trasformatore:
    • Aggiungi il timer watchdog del muxer per rilevare quando la generazione di un campione di output è troppo lenta.
  • Rimuovi i simboli ritirati:
    • Rimuovi Transformer.Builder.setOutputMimeType(String). Questa funzionalità è stata rimossa. Se si utilizza il muxer predefinito, il tipo MIME sarà sempre MP4.

Versione 1.0.0-beta02

21 luglio 2022

Viene rilasciato androidx.media3:media3-*:1.0.0-beta02. La versione 1.0.0-beta02 contiene questi commit.

Questa release corrisponde alla release ExoPlayer 2.18.1.

  • Libreria di base:
    • Assicurati che la modifica di ShuffleOrder con ExoPlayer.setShuffleOrder restituisci una chiamata a Player.Listener#onTimelineChanged con reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • Per i contenuti multimediali progressivi, includi solo le tracce selezionate nella posizione del buffer (#10361).
    • Consenti logger personalizzato per tutti gli output di log di ExoPlayer (#9752).
    • È stato corretto l'implementazione di setDataSourceFactory in DefaultMediaSourceFactory, che in alcuni casi non era funzionante (#116).
  • Estrattori:
    • Correzione dell'analisi dei set di immagini di riferimento a breve termine H265 (#10316).
    • È stata corretta l'analisi della velocità in bit da esds caselle (#10381).
  • DASH:
    • Analizza l'URL della licenza ClearKey dai file manifest (#10246).
  • Interfaccia utente:
    • Assicurati che TalkBack pronunci l'opzione relativa alla velocità attualmente attiva nel menu dei controlli di riproduzione (#10298).
  • Il feed RTSP:
    • Aggiungi la gestione dei pacchetti frammentati VP8 (#110).
  • Estensione Leanback:
    • Ascolta le modifiche playWhenReady in LeanbackAdapter (10420).
  • Trasmetti:
    • Utilizza il MediaItem che è stato passato ai metodi delle playlist come Window.mediaItem in CastTimeline (#25, #8212).
    • Supporta Player.getMetadata() e Listener.onMediaMetadataChanged() con CastPlayer (#25).

Versione 1.0.0-beta01

16 giugno 2022

Viene rilasciato androidx.media3:media3-*:1.0.0-beta01. La versione 1.0.0-beta01 contiene questi commit.

Corrisponde alla release ExoPlayer 2.18.0.

  • Libreria di base:
    • Attiva il supporto della diagnostica della piattaforma Android tramite MediaMetricsManager. ExoPlayer inoltrerà gli eventi di riproduzione e i dati sulle prestazioni alla piattaforma, per fornire informazioni sulle prestazioni di sistema e di debug sul dispositivo. Questi dati potrebbero anche essere raccolti da Google se la condivisione dei dati di utilizzo e diagnostica è stata attivata dall'utente del dispositivo. Le app possono disattivare la partecipazione alla diagnostica della piattaforma per ExoPlayer con ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Correzione del bug a causa del quale le tracce vengono reimpostate troppo spesso quando si utilizza MergingMediaSource, ad esempio durante il caricamento laterale dei sottotitoli e la modifica dei sottotitoli selezionati a metà riproduzione (#10248).
    • Interrompi il rilevamento del tipo di rete 5G-NSA sulle API 29 e 30. Per queste riproduzioni si presume una rete 4G.
    • Non consentire il passaggio di null a MediaSource.Factory.setDrmSessionManagerProvider e MediaSource.Factory.setLoadErrorHandlingPolicy. Le istanze di DefaultDrmSessionManagerProvider e DefaultLoadErrorHandlingPolicy possono essere trasmesse esplicitamente, se necessario.
    • Aggiungi MediaItem.RequestMetadata per rappresentare i metadati necessari per riprodurre contenuti multimediali quando il valore LocalConfiguration esatto non è noto. Rimuovi anche MediaMetadata.mediaUrl perché ora è incluso in RequestMetadata.
    • Aggiungi Player.Command.COMMAND_SET_MEDIA_ITEM per consentire ai giocatori di consentire l'impostazione di un singolo elemento.
  • Selezione delle tracce:
    • Suddividi la classe TrackSelectionOverrides in TrackSelectionParameters e promuovi TrackSelectionOverride a una classe di primo livello.
    • Rinomina TracksInfo in Tracks e TracksInfo.TrackGroupInfo in Tracks.Group. Anche Player.getCurrentTracksInfo e Player.Listener.onTracksInfoChanged sono stati rinominati Player.getCurrentTracks e Player.Listener.onTracksChanged. È incluso l'annullamento della deprecazione del nome del metodo Player.Listener.onTracksChanged, ma con diversi tipi di parametri.
    • Modifica DefaultTrackSelector.buildUponParameters e DefaultTrackSelector.Parameters.buildUpon per restituire DefaultTrackSelector.Parameters.Builder anziché il valore DefaultTrackSelector.ParametersBuilder deprecato.
    • Aggiungi l'DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities che è abilitata per impostazione predefinita. Se attivata, DefaultTrackSelector darà la priorità alle tracce audio con numero di canali che non supera le funzionalità di output del dispositivo. Sui dispositivi portatili, DefaultTrackSelector darà la preferenza ai formati stereo/mono rispetto all'audio multicanale, a meno che il formato multicanale non sia spazializzato (Android 12L e versioni successive) o non sia un formato audio Dolby surround. Inoltre, sui dispositivi che supportano la spazializzazione audio, DefaultTrackSelector monitorerà le modifiche nelle proprietà dello Strumento di Spaziatura e attiverà una nuova selezione di tracce su queste ultime. I dispositivi con una television modalità UI sono esclusi da questi vincoli e verrà preferito il formato con il numero di canali più elevato. Per abilitare questa funzionalità, l'istanza DefaultTrackSelector deve essere creata con un Context.
  • Video:
    • Rinomina DummySurface in PlaceholderSurface.
    • Aggiungi il supporto AV1 a MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Utilizza il decodificatore audio LG AC3 che pubblicizza un tipo MIME non standard.
    • Modifica il tipo restituito di AudioAttributes.getAudioAttributesV21() da android.media.AudioAttributes a una nuova classe wrapper AudioAttributesV21 per evitare che la verifica ART sia lenta nell'API < 21.
    • Esegui una query sulla piattaforma (API 29 e versioni successive) o supponi il conteggio dei canali di codifica audio per il passthrough audio se il conteggio dei canali audio del formato non è impostato, cosa che si verifica con la preparazione senza chunkless HLS (10204).
    • Configura AudioTrack con la maschera del canale AudioFormat.CHANNEL_OUT_7POINT1POINT4 se il decoder produce audio PCM a 12 canali (#10322.
  • DRM
    • Assicurati che la sessione DRM sia sempre aggiornata correttamente quando cerchi subito dopo una modifica del formato (10274).
  • Testo:
    • Modifica Player.getCurrentCues() per restituire CueGroup anziché List<Cue>.
    • SSA: supporta l'impostazione di stile OutlineColour quando BorderStyle == 3 (ad es. OutlineColour imposta lo sfondo del segnale) (#8435).
    • CEA-708: analizza i dati in più blocchi di servizi e ignora i blocchi non associati al numero di servizio attualmente selezionato.
    • Rimuovi l'elemento RawCcExtractor, che veniva utilizzato soltanto per gestire un formato dei sottotitoli interno a Google.
  • Estrattori:
    • Aggiungi il supporto per AVI (#2092).
    • Matroska: analizza DiscardPadding per le tracce Opus.
    • MP4: analizza la velocità in bit da esds caselle.
    • Ogg: consenti intestazioni di commento e ID Opus duplicate (#10038).
  • Interfaccia utente:
    • Correggi il recapito degli eventi ai OnClickListener impostati per PlayerView nel caso in cui useController=false (#9605). Correggi anche la pubblicazione degli eventi in OnLongClickListener per tutte le configurazioni delle viste.
    • Correzione del trattamento errato di una sequenza di eventi touch che escono dai limiti di PlayerView prima di ACTION_UP come un clic (#9861).
    • Risolvi il problema di accessibilità di PlayerView per cui il tocco potrebbe attivare/disattivare la riproduzione anziché nascondere i controlli (#8627).
    • Riscrivi TrackSelectionView e TrackSelectionDialogBuilder in modo che siano compatibili con l'interfaccia Player anziché con ExoPlayer. In questo modo le viste possono essere utilizzate con altre implementazioni Player e rimuove la dipendenza dal modulo UI al modulo ExoPlayer. Si tratta di un cambiamento radicale.
    • Non mostrare tracce di testo forzate nel selettore della traccia PlayerView e mantene selezionata una traccia di testo forzata adatta se viene selezionata l'opzione "Nessuna" (#9432).
  • DASH:
    • Analizza il conteggio dei canali dagli elementi DTS AudioChannelConfiguration. In questo modo viene riattivato il passthrough audio per gli stream DTS (#10159).
    • Non consentire il passaggio di null a DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory possono essere trasmesse in modo esplicito, se necessario.
  • HLS:
    • Utilizza la preparazione di blocchi di riserva se l'attributo CODECS della playlist non contiene il codec audio (#10065).
    • Non consentire la trasmissione di null a HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory e HlsMediaSource.Factory.setPlaylistTrackerFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory o un riferimento a DefaultHlsPlaylistTracker.FACTORY possono essere trasmesse esplicitamente se necessario.
  • Streaming fluido:
    • Non consentire il passaggio di null a SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Le istanze di DefaultCompositeSequenceableLoaderFactory possono essere passate esplicitamente, se necessario.
  • Il feed RTSP:
    • Aggiungi il lettore RTP per H263 (#63).
    • Aggiungi un lettore RTP per MPEG4 (#35).
    • Aggiungi un lettore RTP per HEVC (#36).
    • Aggiungi un lettore RTP per AMR. Attualmente sono supportati solo i flussi AMR monocanale e senza interleaving. Il payload RTP AMR composto non è supportato. (N. 46)
    • Aggiungi un lettore RTP per VP8 (#47).
    • Aggiungi un lettore RTP per WAV (#56).
    • Correggi l'intestazione dell'autorizzazione di base RTSP. (N. 9544).
    • Interrompi la verifica dei campi SDP obbligatori in quanto non sono necessari da ExoPlayer (#10049).
    • Eccezione selezionata durante l'analisi dei tempi RTSP (#10165).
    • Aggiungi un lettore RTP per VP9 (#47).
    • Aggiungi un lettore RTP per OPUS (#53).
  • Fonti dati:
    • Rinomina DummyDataSource in PlaceholderDataSource.
    • Soluzione alternativa per la gestione dell'interruzione OkHttp.
  • Sessione:
    • Sostituisci MediaSession.MediaItemFiller con MediaSession.Callback.onAddMediaItems per consentire la risoluzione asincrona delle richieste.
    • Supporta i metodi setMediaItems(s) quando MediaController si connette a una sessione multimediale precedente.
    • Rimuovi MediaController.setMediaUri e MediaSession.Callback.onSetMediaUri. La stessa funzionalità può essere ottenuta utilizzando MediaController.setMediaItem e MediaSession.Callback.onAddMediaItems.
    • Inoltra le chiamate MediaController precedenti per riprodurre contenuti multimediali a MediaSession.Callback.onAddMediaItems anziché a onSetMediaUri.
    • Aggiungi MediaNotification.Provider e DefaultMediaNotificationProvider per personalizzare la notifica.
    • Aggiungi BitmapLoader e SimpleBitmapLoader per scaricare le immagini degli artwork.
    • Aggiungi MediaSession.setCustomLayout() per fornire la compatibilità con le versioni precedenti della sessione precedente.
    • Aggiungi MediaSession.setSessionExtras() per fornire parità di funzionalità con la sessione precedente.
    • Rinomina MediaSession.MediaSessionCallback in MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback in MediaLibrarySession.Callback e MediaSession.Builder.setSessionCallback in setCallback.
    • Correggi NPE in MediaControllerImplLegacy (#59).
    • Aggiornare le informazioni sulla posizione della sessione in caso di modifica della sequenza temporale(#51).
    • È stato corretto il problema di NPE in MediaControllerImplBase dopo aver rilasciato il controller (#74).
  • Riproduzione di annunci / IMA:
    • Riduci la frequenza di polling degli annunci da ogni 100 ms a ogni 200 ms per rispettare i consigli del Media Rating Council (MRC).
  • Estensione FFmpeg:
    • Aggiorna la versione di CMake a 3.21.0+ per evitare un bug di CMake che causa la sincronizzazione di Gradle di AndroidStudio non riuscita (#9933).
  • Rimuovi i simboli ritirati:
    • Rimuovi Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Usa invece Player.Listener.onTracksChanged(Tracks).
    • Rimuovi Player.getCurrentTrackGroups e Player.getCurrentTrackSelections. Usa invece Player.getCurrentTracks. Puoi anche continuare a utilizzare ExoPlayer.getCurrentTrackGroups e ExoPlayer.getCurrentTrackSelections, anche se questi metodi rimangono deprecati.
    • Rimuovi le costanti DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT e DEFAULT_TRACK_SELECTOR_PARAMETERS. Se possibile, utilizza getDefaultTrackSelectorParameters(Context) e DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT negli altri casi.
    • Rimuovi il costruttore DefaultTrackSelector(ExoTrackSelection.Factory). Usa invece il criterio DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Rimuovi Transformer.Builder.setContext. Context deve essere invece passato al costruttore Transformer.Builder.

Versione 1.0.0-alpha03

14 marzo 2022

Viene rilasciato androidx.media3:media3-*:1.0.0-alpha03. La versione 1.0.0-alpha03 contiene questi commit.

Corrisponde alla release ExoPlayer 2.17.1.

  • Audio:
    • È stato corretto il problema di controllo delle funzionalità audio per Dolby Atmos (E-AC3-JOC) in HLS.
  • Estrattori:
    • FMP4: è stato risolto il problema per cui i metadati di esempio di emsg venivano generati nell'ordine errato per gli stream contenenti atomi di emsg sia v0 che v1 (#9996).
  • Testo:
    • Correggi l'interazione tra SingleSampleMediaSource.Factory.setTrackId e MediaItem.SubtitleConfiguration.Builder.setId per assegnare la priorità al campo SubtitleConfiguration e utilizza il valore Factory se non è impostato (#10016).
  • Riproduzione dell'annuncio:
    • Correggi le interruzioni audio tra i periodi dell'annuncio negli stream SSAI HLS dal vivo.

Versione 1.0.0-alpha02

2 marzo 2022

Viene rilasciato androidx.media3:media3-*:1.0.0-alpha02. La versione 1.0.0-alpha02 contiene questi commit.

Corrisponde alla release ExoPlayer 2.17.0.

  • Libreria di base:
    • Aggiungi il metodo protetto DefaultRenderersFactory.getCodecAdapterFactory() in modo che le sottoclassi di DefaultRenderersFactory che eseguono l'override buildVideoRenderers() o buildAudioRenderers() possano accedere alla fabbrica dell'adattatore di codec e passarla a MediaCodecRenderer istanze che creano.
    • Propaga i campi intestazione ICY name e genre rispettivamente a MediaMetadata.station e MediaMetadata.genre in modo che raggiungano l'app tramite Player.Listener.onMediaMetadataChanged() (#9677).
    • Rimuovi le chiavi nulle da DefaultHttpDataSource#getResponseHeaders.
    • Sospendi e riprova quando la creazione di un'istanza MediaCodec non riesce. Ciò consente di risolvere un problema che si verifica su alcuni dispositivi durante il passaggio di una superficie da un codec sicuro a un altro codec (#8696).
    • Aggiungi MediaCodecAdapter.getMetrics() per consentire agli utenti di ottenere i dati delle metriche da MediaCodec. (#9766).
    • Correggi la risoluzione delle dipendenze di Maven (#8353).
    • Disattiva la regolazione automatica della velocità per i live streaming che non hanno funzionalità a bassa latenza né una richiesta dell'utente che ne imposta la velocità (#9329).
    • Rinomina DecoderCounters#inputBufferCount in queuedInputBufferCount.
    • Imposta SimpleExoPlayer.renderers come privato. È possibile accedere ai renderer tramite ExoPlayer.getRenderer.
    • Sono stati aggiornati alcuni valori costanti di AnalyticsListener.EventFlags per farli corrispondere ai valori in Player.EventFlags.
    • Suddividi AnalyticsCollector in un'interfaccia e in un'implementazione predefinita per consentire che venga eliminato da R8 se non è necessario da un'app.
  • Selezione delle tracce:
    • Supporta i flag dei ruoli video preferiti nella selezione delle tracce (#9402).
    • Aggiorna la logica di selezione delle tracce video in modo che tenga conto dei tipi MIME preferiti e dei flag dei ruoli quando selezioni più tracce video per l'adattamento (#9519).
    • Aggiorna la logica di selezione delle tracce audio e video in modo da scegliere solo i formati per le selezioni adattive che hanno lo stesso livello di supporto hardware e decodificatore (#9565).
    • Aggiorna la logica di selezione delle tracce video per preferire codec più efficienti se sono supportati più codec da decoder primari con accelerazione hardware (#4835).
    • Preferisci le preferenze per i contenuti audio (ad esempio, la traccia audio "predefinita" o una traccia corrispondente alla lingua delle impostazioni internazionali di sistema) rispetto ai vincoli di selezione delle tracce tecniche (ad esempio, tipo MIME preferito o numero massimo di canali).
    • È stato risolto il problema di selezione delle tracce in cui la sostituzione di un gruppo di tracce non disattivava altri gruppi di tracce dello stesso tipo (#9675).
    • È stato corretto il problema di selezione delle tracce per cui una combinazione di override delle tracce non vuote e vuote non veniva applicata correttamente (#9649).
    • Non consentire TrackGroup duplicati in un TrackGroupArray. I TrackGroup possono essere sempre distinguibili impostando un id nel costruttore TrackGroup. È stato corretto un arresto anomalo che si verificava quando si riprendeva la riproduzione dopo aver messo in background l'app con un override della traccia attiva (#9718).
    • Modifica la logica in AdaptiveTrackSelection per consentire un aumento della qualità in caso di larghezza di banda di rete sufficiente, anche se la riproduzione è molto vicina al limite live (#9784).
  • Video:
    • Correggi la logica di fallback del decoder per Dolby Vision per utilizzare un decoder H264/H265 compatibile, se necessario.
  • Audio:
    • Correggi la logica di fallback del decoder per Dolby Atmos (E-AC3-JOC) in modo da utilizzare un decoder E-AC3 compatibile, se necessario.
    • Modifica le API AudioCapabilities per richiedere il passaggio esplicito AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES anziché null.
    • Consenti la personalizzazione del calcolo della dimensione del buffer AudioTrack inserendo un AudioTrackBufferSizeProvider in DefaultAudioSink. (#8891).
    • Riprova a creare AudioTrack se la dimensione del buffer richiesta era superiore a 1 MB. (#9712).
  • Estrattori:
    • WAV: aggiunta del supporto per gli stream RF64 (#9543).
    • Correggi l'analisi errata delle unità NAL SPS H.265 (#9719).
    • Analizza i commenti Vorbis (tra cui METADATA_BLOCK_PICTURE) nei file Ogg Opus e Ogg Vorbis.
  • Testo:
    • Aggiungi un campo MediaItem.SubtitleConfiguration.id che viene propagato al campo Format.id della traccia di sottotitoli creata dalla configurazione (#9673).
    • Aggiungi il supporto di base per i sottotitoli WebVTT nei contenitori Matroska (#9886).
    • Impedisci a Cea708Decoder di leggere più di quelle dichiarate di un blocco di servizi.
  • DRM:
    • Rimuovi playbackLooper da DrmSessionManager.(pre)acquireSession. Quando un DrmSessionManager viene utilizzato da un'app in un MediaSource personalizzato, il playbackLooper deve essere trasmesso a DrmSessionManager.setPlayer.
  • Riproduzione di annunci / IMA:
    • Aggiungi il supporto per l'inserimento di annunci dinamici (DAI) IMA (#8213).
    • Aggiungi un metodo a AdPlaybackState per consentire la reimpostazione di un gruppo di annunci in modo che possa essere riprodotto di nuovo (#9615).
    • Applica una velocità di riproduzione di 1,0 durante la riproduzione degli annunci (#9018).
    • È stato risolto il problema per cui il caricamento di un gruppo di annunci non riuscito causava una reimpostazione immediata della riproduzione (#9929).
  • Interfaccia utente:
    • Correggi il colore dei numeri nei pulsanti Riavvolgi e Avanti veloce di StyledPlayerView quando utilizzi determinati temi (#9765).
    • Traduci correttamente le stringhe della velocità di riproduzione (#9811).
  • DASH:
    • Aggiungi proprietà essenziali e supplementari analizzate a Representation (#9579).
    • Supporta il ruolo Traccia forced-subtitle (#9727).
    • Smetti di interpretare il ruolo della traccia main come C.SELECTION_FLAG_DEFAULT.
    • Correggi la logica di esclusione degli URL di base per i manifest che non dichiarano lo spazio dei nomi DVB (#9856).
    • Supporta URL MPD.Location relativi (#9939).
  • HLS:
    • Compila correttamente Format.label per gli stream HLS solo audio (#9608).
    • Usa la preparazione senza chunkless per impostazione predefinita per migliorare i tempi di avvio. Se le tue rappresentazioni contengono tracce di sottotitoli codificati con Mux che non sono dichiarate nella playlist principale, devi aggiungerle alla playlist principale per renderle disponibili per la riproduzione oppure disattivare la preparazione senza blocchi con HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • Supporta la ricerca accurata dei fotogrammi chiave in HLS (#2882).
  • Il feed RTSP:
    • Fornisci un'API client per eseguire l'override di SocketFactory utilizzato per qualsiasi connessione al server (#9606).
    • Preferisci il metodo di autenticazione DIGEST rispetto al metodo BASIC, se sono presenti entrambi (#9800).
    • Da gestire quando la sincronizzazione della traccia RTSP non è disponibile (#9775).
    • Ignora i valori di intestazione RTP-Info non validi (#9619).
  • Trasformatore:
    • Aumenta la versione minima dell'API richiesta a 21.
    • TransformationException ora viene utilizzato per descrivere gli errori che si verificano durante una trasformazione.
    • Aggiungi TransformationRequest per specificare le opzioni di trasformazione.
    • Consenti la registrazione di più listener.
    • È stato risolto il problema del blocco del trasformatore quando l'output del codec veniva letto parzialmente.
    • Correggi i potenziali NPE in Transformer.getProgress durante il rilascio dei lanci del muxer.
    • Aggiungi un'app demo per applicare le trasformazioni.
  • Estensione MediaSession:
    • Per impostazione predefinita, ora MediaSessionConnector cancella la playlist in pausa. Le app che vogliono conservare la playlist possono chiamare setClearMediaItemsOnStop(false) sul connettore.
  • Estensione Cast:
    • Correzione del bug che impediva a CastPlayer di chiamare correttamente onIsPlayingChanged (#9792).
    • Supporta i metadati audio, inclusi gli artwork con DefaultMediaItemConverter (#9663).
  • Estensione FFmpeg:
    • Fai in modo che build_ffmpeg.sh dipenda dai bin util della LLVM anziché da GNU (#9933).
  • Compatibilità con Android 12:
    • Esegui l'upgrade dell'estensione Cast in modo che utilizzi com.google.android.gms:play-services-cast-framework:20.1.0. Le versioni precedenti di play-services-cast-framework non sono compatibili con le app destinate ad Android 12 e hanno un arresto anomalo con un IllegalArgumentException durante la creazione di PendingIntent (#9528).
  • Rimuovi i simboli ritirati:
    • Rimuovi Player.EventListener. Usa invece il criterio Player.Listener.
    • Rimuovi MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory e MediaSourceFactory#setDrmUserAgent. Usa invece MediaSourceFactory#setDrmSessionManagerProvider.
    • Rimuovi MediaSourceFactory#setStreamKeys. Usa invece MediaItem.Builder#setStreamKeys.
    • Rimuovi MediaSourceFactory#createMediaSource(Uri). Usa invece MediaSourceFactory#createMediaSource(MediaItem).
    • Rimuovi setTag da DashMediaSource, HlsMediaSource e SsMediaSource. Usa invece il criterio MediaItem.Builder#setTag.
    • Rimuovi DashMediaSource#setLivePresentationDelayMs(long, boolean). Utilizza MediaItem.Builder#setLiveConfiguration e MediaItem.LiveConfiguration.Builder#setTargetOffsetMs per eseguire l'override del manifest o DashMediaSource#setFallbackTargetLiveOffsetMs per fornire un valore di riserva.
    • Rimuovi (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Non è più possibile disattivare l'applicazione forzata dei thread.
    • Rimuovi ActionFile e ActionFileUpgradeUtil. Utilizza ExoPlayer 2.16.1 o prima di utilizzare ActionFileUpgradeUtil per unire i file di azione precedenti in DefaultDownloadIndex.
    • Rimuovi ProgressiveMediaSource#setExtractorsFactory. Usa invece il costruttore ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • Rimuovi ProgressiveMediaSource.Factory#setTag e ProgressiveMediaSource.Factory#setCustomCacheKey. Usa invece MediaItem.Builder#setTag e MediaItem.Builder#setCustomCacheKey.
    • Rimuovi i costruttori DefaultRenderersFactory(Context, @ExtensionRendererMode int) e DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Usa invece il costruttore DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode e DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Rimuovi tutti i costruttori CronetDataSource pubblici. Usa invece CronetDataSource.Factory.
  • Modifica il seguente valore: IntDefs solo in @Target(TYPE_USE). Questo potrebbe interrompere la compilazione degli utilizzi in Kotlin, che può essere corretta spostando l'annotazione per annotare il tipo (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (in com.google.android.exoplayer2.ext.flac pacchetto)
    • @FlacExtractor.Flags (nel pacchetto com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Versione 1.0.0-alpha01

27 ottobre 2021

Viene rilasciato androidx.media3:media3-*:1.0.0-alpha01. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

Media3 è il nuovo punto di riferimento per le librerie di supporto multimediali, tra cui ExoPlayer. La prima versione alpha contiene le prime implementazioni funzionali delle librerie per l'implementazione di casi d'uso di contenuti multimediali, tra cui:

  • ExoPlayer, un media player per Android a livello di applicazione facile da personalizzare ed estendere.
  • Funzionalità di sessione multimediale, per l'esposizione e il controllo delle riproduzioni. Questo nuovo modulo di sessione utilizza la stessa interfaccia Player di ExoPlayer.
  • Componenti dell'interfaccia utente per la creazione di interfacce utente per la riproduzione di contenuti multimediali.
  • I moduli aggregano funzionalità in altre librerie da utilizzare con ExoPlayer, ad esempio l'inserimento di annunci tramite l'SDK IMA.

Per maggiori informazioni, consulta il progetto GitHub di Media3.

ExoPlayer era precedentemente ospitato in un progetto GitHub ExoPlayer separato. In Media3, il nome del pacchetto è androidx.media3.exoplayer. Abbiamo in programma di continuare a mantenere e rilasciare per un po' di tempo il progetto ExoPlayer GitHub, per dare alle app il tempo di eseguire la migrazione a Media3. Media3 sostituisce tutti i moduli ExoPlayer, ad eccezione delle estensioni media2 e mediasession legacy, che vengono sostituite dal nuovo modulo media3-session. Ciò consente un'integrazione diretta tra player e sessioni multimediali senza la necessità di utilizzare una classe adattatore/connettore.