Media3
| Letzte Aktualisierung | Stabile Version | Releasekandidat | Betarelease | Alpha-Release |
|---|---|---|---|---|
| 22. Oktober 2025 | 1.8.0 | - | - | 1.9.0-alpha01 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Media3 hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle für Ihre App oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Cool
dependencies { def media3_version = "1.8.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Im Media3-Issue Tracker finden Sie Antworten auf Fragen, bekannte Probleme und Funktionsanfragen. Außerdem können Sie dort neue Probleme melden.
Version 1.9.0
Version 1.9.0-alpha01
22. Oktober 2025
androidx.media3:media3-*:1.9.0-alpha01 ist veröffentlicht.
Version 1.9.0-alpha01 enthält diese Commits.
- Gemeinsame Mediathek:
- Aktualisieren Sie
minSdkauf23, um die Bibliothek an andere AndroidX-Bibliotheken anzugleichen. PlayerTransferStatewurde hinzugefügt, um die Übertragung des Wiedergabestatus zwischenPlayer-Instanzen zu ermöglichen.- Füge der Klasse „Player“ die Methoden
void mute()undvoid unmute()hinzu, um die Lautstärke des Players zu speichern und wiederherzustellen, bevor und nachdem sie auf null gesetzt wurde. - Die Dienstprogrammklassen
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerundStuckPlayerDetector, die zuvor intern vonExoPlayerverwendet wurden, werden veröffentlicht, damit sie von anderen Playern wiederverwendet werden können (#1893). - Problem behoben:
ForwardingPlayer-Listener-Verarbeitung, wenn der zugrunde liegende Delegate-Player Referenzgleichheit zum Vergleichen von Listener-Instanzen verwendet (#2675). - Fügen Sie der
media3-common-ktx-Bibliothek einePlayer.listenTo-Erweiterungsfunktion hinzu, die diePlayer.Eventsangibt, auf die reagiert werden soll. - Ein Absturz in
BasePlayer.getBufferedPercentagewurde behoben, der durch einen Ganzzahlüberlauf verursacht wurde, wenn die gemeldete gepufferte Position unplausibel viel größer als die gemeldete Dauer war (#2750).
- Aktualisieren Sie
- ExoPlayer:
- Eine Erkennung für hängende Player hinzufügen, die einen
StuckPlayerException-Playerfehler auslöst, wenn der Player hängen bleibt. Dies geschieht in den folgenden Fällen, wobei jedes Standard-Zeitlimit bei Bedarf inExoPlayer.Builderkonfiguriert werden kann:- Nach 10 Minuten
STATE_BUFFERINGbeim Versuch, die Wiedergabe zu starten, ohne dass der Puffer fortschreitet. - Nach 10 Sekunden
STATE_READYbeim Versuch, die Wiedergabe zu starten, ohne dass die Wiedergabe fortschreitet. - Nach 1 Minute
STATE_READYüber die angegebene Dauer hinaus, ohne dass das Ende des Artikels erreicht wird. - Nach 10 Minuten mit einem Grund für die Wiedergabeunterdrückung beim Versuch, die Wiedergabe zu starten.
- Nach 10 Minuten
- Die Verarbeitung von Wake Locks ist standardmäßig aktiviert, um Probleme mit dem Puffern bei der Wiedergabe im Hintergrund zu beheben. Dies entspricht dem Festlegen von
ExoPlayer.Builder.setWakeModeaufC.WAKE_MODE_LOCAL. - Füge eine Listener-Logik hinzu, um die ID des virtuellen Geräts automatisch zu aktualisieren, wenn eine Änderung an
Contextgemeldet wird, die ursprünglich anExoPlayer.Builderübergeben wurde. - Fügen Sie
ExoPlayer.setVirtualDeviceIdhinzu, um die vomContextabgeleitete virtuelle Geräte-ID, die anExoPlayer.Builderübergeben wird, manuell zu aktualisieren. - Achte darauf, dass Renderer nicht mehr als 10 Sekunden vor dem Ende des aktuellen Elements Daten aus dem nächsten Playlist-Element abrufen.
- Fügen Sie
setSeekBackIncrementMs,setSeekForwardIncrementMsundsetMaxSeekToPreviousPositionMszuExoPlayerhinzu, um diese Einstellungen nach der Erstellung zu aktualisieren (#2736). - Fügen Sie in
DefaultPreloadManagereine Funktion für das Vorab-Caching hinzu. Apps können jetzt überTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)oderDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)zurückgeben, um anzugeben, dass ein Media-Element vorab im Cache gespeichert werden muss. - Verwenden Sie die Pre-Caching-Funktion von
DefaultPreloadManagerin der Shortform-Demo-App. - Füge
DefaultLoadControl.Builder-Setter für die lokale Wiedergabe hinzu und passe die Standardwerte vonDefaultLoadControlso an, dass sie mit einer Vielzahl lokaler Dateien funktionieren. - Ein Fehler wurde behoben, bei dem der Player nach dem Festlegen einer leeren Playlist im Status
STATE_READYoderSTATE_BUFFERINGverblieb. - Die APIs des Preload-Managers wurden verbessert:
- Fügen Sie
addMediaItems(List<MediaItem>, List<T>)undaddMediaSources(List<MediaSource>, List<T>)hinzu, um die Media-Elemente oder Media-Quellen im Batch hinzuzufügen undinvalidate()automatisch aufzurufen. - Fügen Sie
removeMediaItems((List<MediaItem>)undremoveMediaSources(List<MediaSource>)hinzu, um die Media-Elemente oder Media-Quellen im Batch zu entfernen. Achten Sie darauf, dass der Preload-Manager nach dem Entfernen nicht mit dem Preload beginnt oder den Preload für eines der Elemente fortsetzt. DefaultPreloadManager.setCurrentPlayingIndex(int)darf sich automatisch ungültig machen. Apps müsseninvalidate()nicht mehr explizit aufrufen, nachdem der aktuelle Wiedergabeindex aktualisiert wurde.
- Fügen Sie
- Es ist jetzt möglich, das Zurücksetzen von Keyframes bei Vorwärtssuchen innerhalb derselben Gruppe von Bildern im Scrubbing-Modus zu überspringen.
- Fügen Sie
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)für Apps hinzu, um einen Wert für die Zielpufferbytes für einen Player mit dem angegebenenplayerNamefestzulegen. DerDefaultLoadControlkann jetzt Entscheidungen für jeden Player separat auf Grundlage der zugewiesenen Bytes und der Zielpufferbytes treffen. - Fügen Sie
SkipInfodemAdPlaybackState.AdGrouphinzu, um Informationen zum Überspringen für jede Anzeige in der Anzeigengruppe zu übertragen. - Ein Fehler wurde behoben, bei dem das Aufrufen von
removeMediaItems(List)während der Wiedergabe eines Post-Roll-Ads zu einem Absturz führte (#2746). - Wir haben ein Problem behoben, durch das es bei der Wiedergabe von Playlists zu Rucklern kam, weil Frames fälschlicherweise immer als letztes Sample festgelegt und gerendert wurden.
- Wiederholungsversuch aktivieren, wenn der Player keine Audio-Sitzungs-ID generieren kann (#2382, #2678).
- Unterstützung zum Steuern der gesamten Pufferbytes für die Quellen in
DefaultPreloadManagerhinzugefügt, um zu verhindern, dass die gesamten Pufferbytes für das Vorladen beliebig ansteigen. Um die Standardsteuerungslogik zu verwenden, können Apps die Zielpufferbytes für das Vorabladen überDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)für einplayerNamevonPlayerId.Preload.name(„preload“) festlegen und das erstellteDefaultLoadControlüberDefaultPreloadManager.Builder.setLoadControl(LoadControl)einfügen.
- Eine Erkennung für hängende Player hinzufügen, die einen
- CompositionPlayer:
- Veröffentlichen Sie
CompositionPlayermit der neuen Anmerkung@ExperimentalApi, um anzugeben, dass sie für Tests verfügbar ist, sich aber noch in der Entwicklung befindet. Einige APIs werden sich in zukünftigen Versionen wahrscheinlich erheblich ändern. Außerdem gibt es bekannte Probleme und Einschränkungen bei einigen Anwendungsfällen (einige sind nicht dokumentiert). - Unterstützung für
COMMAND_SET_AUDIO_ATTRIBUTESund die Verarbeitung des Audiofokus inCompositionPlayerhinzugefügt. - Unterstützung für das Ändern der Geschwindigkeit in sekundären Sequenzen in
CompositionPlayerhinzugefügt.
- Veröffentlichen Sie
- Transformer:
InAppMp4Muxerals Standard-Muxer verwenden.- Fügen Sie
EditedMediaItem.Builder#setSpeed()hinzu und stellen SieEffects#createExperimentalSpeedChangingEffects()ein. - Ersetzen Sie
forceAudioTrackundforceVideoTrackdurchtrackTypesinEditedMediaItemSequence.
- Titelauswahl:
- Fügen Sie
TrackSelectionParameters.selectTextByDefaulthinzu, um die Auswahl eines beliebigen Text-Tracks zu bevorzugen, ohne andere spezifischere Einstellungen anzugeben. - Fügen Sie
preferredVideoLabels,preferredAudioLabelsundpreferredTextLabelsinTrackSelectionParametershinzu, um eine Präferenz für Tracks mit einem bestimmten Label anzugeben, z. B. für Tracks, die aus HLS-NAME-Tags (#1666) gelesen werden.
- Fügen Sie
- Extraktoren:
- FLAC: Die Header-Erkennung wurde optimiert, um die Wahrscheinlichkeit zu verringern, dass in den codierten FLAC-Daten fälschlicherweise Header gefunden werden, was zu Decodierungsfehlern führt (#558).
- MP3: Lücken zwischen (und vor) ID3-Tags am Anfang von MP3-Dateien zulassen (#811, #5718).
- MP4: Unterscheide zwischen den MIME-Typen
audio/mpeg(MP3),audio/mpeg-L1undaudio/mpeg-L2, indem du den Layer-Wert des ersten Samples prüfst, bevor du ein Trackformat vom Extractor ausgibst (#2683). - MP4: Die Effizienz des Sniffing-Vorgangs bei sehr großen Dateien wird verbessert, indem davon ausgegangen wird, dass ein
stbl-Feld, das größer als 1 MB ist, bedeutet, dass die Datei nicht fragmentiert sein darf (#2650). - Matroska: Unterstützung für die DTS‑HD-Erkennung hinzugefügt (#6225).
- Ein Problem in
MatroskaExtractorwurde behoben, bei dem die Suche bei Dateien mit mehreren Tracks ungenau sein konnte. Cue-Punkte sind jetzt korrekt den jeweiligen Tracks zugeordnet, was zu einer präziseren Suche führt. - MP4: Unterstützung für die Metadaten
©mvn(Name der Bewegung) und©mvi(Bewegungsindex) hinzugefügt. Diese werden jetzt alsTextInformationFrame-Objekte inFormat.metadatamit den IDsMVNMbzw.MVINausgegeben (#2754). - MPEG-TS: Fehler
IllegalArgumentExceptionausReorderingBufferQueuebehoben, der durch PES-Pakete ohne Zeitstempel verursacht wurde (#2764). - MP4: Tracks mit fehlendem
stsd-Feld werden ignoriert (anstatt die gesamte Datei nicht zu parsen). - Unterstützung für das Extrahieren von HEIC-Bewegungsfotos hinzugefügt. Die
HeifExtractorkann jetzt HEIC-Dateien mit eingebetteten Video- und Audiotracks parsen. - MP3: Ändern Sie
FLAG_ENABLE_INDEX_SEEKING, um die Suche nach Informationen aus Metadaten-Headern (wie Xing und VBRI) zu bevorzugen, sofern verfügbar. Wenn keine anderen Suchinformationen vorhanden sind, wird auf die indexbasierte Suche zurückgegriffen. Dadurch wird die Leistung für Dateien mit Suchmetadaten verbessert (#2839).
- Prüfer:
- Ein neues
:media3-inspector-Modul wurde eingeführt, das als dedizierter Ort für Media-Prüftools dient. Dieses Modul enthält jetzt eine neueandroidx.media3.inspector.MetadataRetriever, die eine einheitliche API für die Metadaten- und Frame-Extraktion bietet. Die vorhandeneandroidx.media3.exoplayer.MetadataRetrieverwird zugunsten dieser neuen Version eingestellt. - Einführung von
androidx.media3.inspector.FrameExtractor, einer neuen öffentlichen API für die Frame-Extraktion. DieseAutoCloseable-Klasse bietet eine Möglichkeit, Frames mit Unterstützung für HDR-Video, Videoeffekte und die Auswahl benutzerdefinierter Decoder zu extrahieren. Es sollte über dasBuilderfür ein bestimmtesMediaItemerstellt werden. - FrameExtractor: Mit
getThumbnail()kann ein repräsentativer Miniaturbild-Frame aus einer Media-Datei extrahiert werden, ohne dass ein bestimmter Zeitstempel erforderlich ist.
- Ein neues
- Audio:
AudioProcessor-Instanzen über die Suche informieren- Ermöglicht das Einfügen der neuen
AudioOutputProvider-Schnittstelle inDefaultAudioSink.Builderzur Unterstützung benutzerdefinierter Audioausgabepfade. Der Standardwert istAudioTrackAudioOutputProvider. - Suche in
GainProcessor. - AC‑4‑Decoderprofil- und ‑pegel-Funktionen bei der Bewertung der Unterstützung von Trackformaten nutzen (#2580).
- Potenzielle Verzögerungen durch die Verarbeitung von Rückrufen für Routing-Änderungen zu Beginn der Wiedergabe vermeiden (#2646).
- Wiederverwendung von Codecs für die Formate EAC3, EAC3-JOC und AC-4 zulassen (#1346).
- Unterstützung für Float-PCM-Samples in
Sonichinzugefügt. - Unterstützung für 16-Bit-PCM-Samples in
ToFloatPcmAudioProcessorhinzugefügt.
- Video:
- Deaktivieren Sie die Codec-Wiederverwendung für Dolby Vision-Inhalte mit unterschiedlichen Profilen.
- Text:
- Die Analyse von CEA-608/708-Untertiteln in Dolby Vision-Inhalten wurde korrigiert (#2775).
- Bild:
- Ein Problem mit „ScrubbingMode“ wurde behoben, bei dem der Player beim Scrubben eines DASH-Thumbnail-Tracks hängen blieb (#2815).
- DRM:
- Der Rückgabetyp von
MediaDrmCallback-Methoden wird vonbyte[]in einen neuenMediaDrmCallback.Response-Typ geändert, um die Rückgabe zusätzlicher optionaler Informationen zu ermöglichen. Dies ist eine Quelländerung, die zu Problemen führen kann. Diese lassen sich jedoch leicht beheben, indem Sie den vorherigen Rückgabewertbyte[]vor der Rückgabe mitnew Responseumschließen. - Fügen Sie Informationen zur Schlüsselanfrage wie URL und Latenz zu
AnalyticsListener.onDrmKeysLoadedhinzu (#1001). - Daten der Bereitstellungsanfrage von einem URL-Parameter in den POST-Hauptteil verschieben.
- Der Rückgabetyp von
- Muxer:
- Fügen Sie
MediaMuxerCompathinzu, einen Drop-in-Ersatz für das FrameworkMediaMuxer. - Fügen Sie
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()hinzu, um die Erstellung von Bewegtbildfotos zu ermöglichen. - Fügen Sie
WebmMuxerhinzu, um das Multiplexen vonOPUS-,VORBIS-,VP8- undVP9-Medienstreams in das Dateiformatwebmzu ermöglichen.
- Fügen Sie
- IMA-Erweiterung:
- Benutzerdefinierte ProGuard-Regeln werden entfernt, damit Apps stattdessen die im IMA-Android-Archiv veröffentlichten Regeln verwenden können.
ImaServerSideAdInsertionUriBuilder.setNetworkCode: Neue API zum Festlegen des Google Ad Manager-Netzwerkcodes für das IMA SDK, damit Anzeigenkennungen wie in den Google Ad Manager-Einstellungen angegeben verarbeitet werden. Netzwerkcodes sind optional, werden aber für Anfragen für Full-Service-Streams empfohlen. Informationen dazu, wie du den Netzwerkcode ermittelst, findest du in diesem Artikel.- Die IMA-Abhängigkeit wurde auf Version 3.37.0 aktualisiert. Dazu ist es erforderlich, das Desugaring der Core-Bibliothek zu aktivieren. Dies muss auch von abhängigen Apps aktiviert werden. Weitere Informationen finden Sie in den Konfigurationshinweisen von IMA.
- Unterstützung von benutzerdefinierten IMA DAI-UI-Optionen im SSAI-URI-Generator. Zu den benutzerdefinierten UI-Optionen für die serverseitige dynamische Anzeigenbereitstellung gehören die Unterstützung für das Rendern von „Überspringbar“ und „Informationen zur Anzeige“. Die Funktion ist derzeit für ausgewählte Publisher verfügbar, die auf einer Zulassungsliste stehen. Durch diese Änderung wird auch die IMA SDK-Version auf 3.38.0 aktualisiert (Versionshinweise), um auf die API für benutzerdefinierte UI-Optionen zuzugreifen.
- Sitzung:
- Neuer Parameter für
MediaSession.Callback.onPlaybackResumption, um anzugeben, ob der Aufruf nur zum Erfassen von Informationen oder zum Starten der Wiedergabe erfolgt (#1764). - Aktualisiere
MediaSession.ControllerInfo.isTrusted, um auch Controller aus der eigenen App als vertrauenswürdig zu deklarieren (#2542). - Fügen Sie
MediaSessionService.triggerNotificationUpdatehinzu, um eine Benachrichtigungsaktualisierung manuell auszulösen (#1833). ProgressListenerwurde benutzerdefinierten Befehlsmethoden hinzugefügt.- Ändern Sie den Standardwert für
MediaLibrarySession.Builder.setLibraryErrorReplicationModein „nicht schwerwiegend“. - Fügen Sie der Funktion
MediaButtonReceiver.onForegroundServiceStartNotAllowedExceptioneinenContext-Parameter hinzu (#2625). - Die Lautstärkeregelungs-ID wird von der Plattform
PlaybackInfogelesen, anstatt sie über den Binder abzurufen. So wird sichergestellt, dass Wiedergabetyp und Lautstärkeregelungs-ID atomar gelesen werden und zueinander passen. - Es wurde ein Fehler behoben, bei dem
ACTION_UP-Schlüsselereignisse herausgefiltert wurden, bevor sie zur benutzerdefinierten Verarbeitung an den Callback übergeben wurden. Dadurch wird die Parität mit dem erreicht, was media1 getan hat und was die Plattform tut (#2637). - Ein Fehler wurde behoben, bei dem
getCurrentTimeline()vonPlayerWrapperaufgerufen wurde, auch wenn der Befehl nicht verfügbar ist (#2665). - Ein Fehler wurde behoben, bei dem eine Nachricht in der Nachrichtenwarteschlange des Hauptloopers verblieb, was nach dem Beenden des Dienstes zu einem Speicherleck führte (#2692).
- Wenn eine Verbindung zu einer alten Sitzungs-App mit einem
MediaBrowserbesteht, werden benutzerdefinierte Befehle nur dann an die Sitzung gesendet, wenn die benutzerdefinierte Aktion inPlaybackStateCompatder alten Sitzung als benutzerdefinierte Aktion beworben wird. Alle anderen benutzerdefinierten Aktionen werden an den Dienst gesendet. onAudioSessionIdChangedwurde implementiert, um Media-Controller zu benachrichtigen, wenn eine Audio-Sitzungs-ID von der Sitzung festgelegt wird (#244).- Ein Fehler wurde behoben, bei dem
KEYCODE_HEADSETHOOKden Player nicht gestartet hat, nachdem das Media-SchlüsselereignisIntentinonStartCommand()eingetroffen ist. Das Problem wird behoben, indem „KEYCODE_HEADSETHOOK“ wieKEYCODE_MEDIA_PLAY_PAUSE(#2816) behandelt wird. - Es wurde ein Fehler behoben, bei dem die Größe der Oberfläche nicht zwischen der Sitzung und dem Controller kommuniziert wurde. Dadurch konnten in der Demo-Sitzung keine Videoeffekte angewendet werden. Wenn Sie einen Controller verwenden, kann dies eine schwerwiegende Änderung sein, wenn Ihr Player keinen
setVideoSurfaceHolder-Aufruf verarbeiten kann. - Die Weitergabe von Nicht-
String-CharSequence-Metadatenwerten wie span-formatierten Strings wurde korrigiert (#2853).
- Neuer Parameter für
- UI:
- Fügen Sie dem Modul
media3-ui-composedie KlasseProgressStateWithTickIntervalund das entsprechende ComposablerememberProgressStateWithTickIntervalhinzu. Dieser Status-Holder wird indemo-composeverwendet, um die aktuelle Position und Dauer in Textform anzuzeigen. - Fügen Sie
MuteButtonStatezuui-composehinzu, um die Stummschaltung desPlayer-Volumes zu verarbeiten. Dieser Status-Holder wird indemo-composeverwendet, um die Ein/Aus-Schaltfläche für die Stummschaltung anzuzeigen. - Fügen Sie dem Modul
media3-ui-composedieProgressStateWithTickCount-Klassen und die entsprechenderememberProgressStateWithTickCount-Composable hinzu. Dieser Status-Holder wird indemo-composeverwendet, um den Fortschritt als horizontalen schreibgeschützten Fortschrittsbalken anzuzeigen. - Fügen Sie
ContentFrameComposable zumedia3-ui-composehinzu. Dadurch wird die Verwaltung vonPlayerSurfacemit dem Anpassen des Seitenverhältnisses und dem Abdecken mit einem Verschluss kombiniert. - Umgehen eines bekannten Plattformfehlers in API 34, der dazu führt, dass Videos gestreckt oder zugeschnitten werden, wenn
SurfaceViewin einem Compose-AndroidViewverwendet wird. Dies betrifft daher die ComposablesContentFrameundPlayerSurfacemitSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - Erstelle ein neues
media3-ui-compose-material3-Modul und füge ihm Composables mit Material3-Design hinzu (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - Unterstützung für das Platzieren einer Schaltfläche für die Media-Route in
PlayerViewhinzugefügt.
- Fügen Sie dem Modul
- HLS-Erweiterung:
- HLS-Attribute zum Überspringen von Interstitials parsen.
- Ordnen Sie die Attribute für die Überspringen-Steuerung aus der HLS-Playlist und dem Asset-Listendokument dem
AdPlaybackStatefür den öffentlichen Zugriff zu. - Ein Fehler wurde behoben, durch den die Startzeit der Playlist verloren ging, wenn das Tag EXT-X-PROGRAM-START-DATE, das die Startzeit definiert, aus einer Playlist entfernt wurde (#2760).
- Verwenden Sie die binäre Suche, um den Segmentindex einer bestimmten Position in der Playlist zu finden (#2826).
- DASH-Erweiterung:
- Problem mit
UnsupportedOperationExceptionbei der Wiedergabe von DASH-Streams mit einem nicht hierarchischendata:-URI-Manifest behoben (#2688). - Setzen Sie
LiveConfigurationauf den Wert zurück, der von derMediaItemderDashMediaSourcebei der Veröffentlichung und bei der Aktualisierung des Media-Elements durch den Nutzer bereitgestellt wird (#2606). - Abstürze vermeiden, die durch ungültige Manifestaktualisierungen verursacht werden, die nicht als Player-Fehler gemeldet wurden (#2805).
- Problem mit
- RTSP-Erweiterung:
- Fehlerbehandlung für fehlende RTP-Pakete bei der Verarbeitung fragmentierter NAL-Einheiten für H264 und H265 (#2613).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- AV1-Erweiterung: Der AV1-Softwaredecoder verwendet jetzt die leistungsstarke
dav1d-Bibliothek. Die vorherigelibgav1-Implementierung wurde ersetzt, um die Decodierungsgeschwindigkeit zu verbessern.
- AV1-Erweiterung: Der AV1-Softwaredecoder verwendet jetzt die leistungsstarke
- Cast-Erweiterung:
- Füge
CastPlayer.Builderhinzu, damitCastPlayersowohl die lokale als auch die Cast-Wiedergabe ausführen kann. Wenn Sie das alteCastPlayer-Verhalten beibehalten möchten, bei dem nur die Cast-Wiedergabe unterstützt wird, können SieRemoteCastPlayerverwenden. Die vorhandenenCastPlayer-Konstruktoren behalten ihr altes Verhalten bei, sind aber zugunsten der Verwendung derCastPlayer- oderRemoteCastPlayer-Builder veraltet. - Die Erzwingung eines MIME-Typs, der nicht null ist, in
DefaultMediaItemConverterwird beendet. - Verwende
MediaItem.mediaMetadata.mediaType, um den MEDIA_TYPE für Cast abzuleiten, der inDefaultCastOptionsProvider#toMediaQueueItemverwendet werden soll, sofern verfügbar. - Aktiviere die Übertragung von Inhalten von einem Remote-Gerät auf ein lokales Gerät in
DefaultCastOptionsProvider. - Unterstützung für Cast in der Sitzungsdemo hinzugefügt
- Unterstützung für die Anzeige einer Schaltfläche für die Media-Route in einer zusammensetzbaren Benutzeroberfläche hinzugefügt.
- Unterstützung für die Anzeige einer Schaltfläche für die Media-Route in einem Menü der Aktionsleiste hinzugefügt.
- Unterstützung für die Anzeige einer Schaltfläche für die Media-Route als View-UI hinzugefügt.
- Füge
- Test-Tools:
- Fügen Sie die maximale Zeitdifferenz für das automatische Vorrücken von
FakeClockhinzu. Der Standardwert ist 1 Sekunde, er kann aber überFakeClock.Builderkonfiguriert werden. - Fügen Sie die maximale Zeitdifferenz zwischen Nachrichten für
RobolectricUtil.runMainLooperUntil(undrunLooperUntil) hinzu. Der Standardwert ist 1 Sekunde, kann aber über neue Überladungen dieser Methoden konfiguriert werden. - Verschiebe
CapturingRenderersFactoryvontest-utilsnachtest-utils-robolectric.
- Fügen Sie die maximale Zeitdifferenz für das automatische Vorrücken von
- Entfernen Sie die veralteten Symbole:
- Entfernen Sie den eingestellten Konstruktor
DefaultPreloadManager. Verwenden Sie stattdessenDefaultPreloadManager.Builder. - Veraltete
EditedMediaItemSequence-Konstruktoren wurden entfernt. Verwenden Sie stattdessenEditedMediaItemSequence.Builder.
- Entfernen Sie den eingestellten Konstruktor
Version 1.8.0
Version 1.8.0
30. Juli 2025
Version 1.8.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Unterstützung für das Ersetzen des Players in
ForwardingSimpleBasePlayerhinzugefügt.
- Unterstützung für das Ersetzen des Players in
- ExoPlayer:
- Getter für den Zufallsmodus zur
ExoPlayer-Schnittstelle hinzufügen (#2522). - Es wird deutlicher eine Ausnahme ausgelöst, wenn auf
DefaultAudioSinküber mehrere Threads zugegriffen wird. Wenn dies aufgrund eines Aufrufs vonRendererCapabilities.getFormatSupportaußerhalb des Players geschieht, rufen Sie diese Methode im selben Thread wie den Wiedergabe-Thread von ExoPlayer auf oder verwenden Sie eine andere Instanz als die für die Wiedergabe verwendete (#1191). - Ein Fehler wurde behoben, durch den Nicht-Stereo-Audioformate auf Fernsehern möglicherweise als nicht unterstützt von
DefaultTrackSelectorgekennzeichnet wurden. - Achte darauf, dass der letzte Frame korrekt gerendert wird, wenn du das
DECODE_ONLY-Flag von MediaCodec verwendest (das im Scrubbing-Modus standardmäßig aktiviert ist). - Unterstützung für die Verwendung der virtuellen Geräte-ID aus dem
Context, die anExoPlayer.Builderübergeben wird, hinzufügen. - Dynamische Planung im Scrubbing-Modus standardmäßig aktivieren
- Vermeide unnötiges Neuladen einer Quelle, wenn du zum Ende eines Elements springst.
- Standardmäßig
MediaCodec.BUFFER_FLAG_DECODE_ONLYim Scrubbing-Modus verwenden - Löst
IllegalStateExceptionaus, wennPreloadMediaSourcevon einemExoPlayermit einem Wiedergabethread wiedergegeben wird, der sich vom Preload-Thread unterscheidet (#2495). cloneAndMovezuShuffleModemit einer Standardimplementierung hinzufügen (#2226).- Das Standardverhalten von
Renderer.getMinDurationToProgressUswird so geändert, dass ein größerer Wert zurückgegeben wird, wenn kein Aufruf vonrendererforderlich ist. - Es wurde ein Fehler behoben, durch den die interne Planung den letzten Frame verzögerte, wenn während der Pause zum Ende gesucht wurde. Der Fehlerkorrektur ist derzeit nur wirksam, wenn
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledaktiviert ist. - Die Methode
ExoPlayer.setScrubbingModeEnabled(boolean)wurde hinzugefügt. Dadurch wird der Player für viele häufige Suchvorgänge optimiert, z. B. wenn ein Nutzer den Scrubbing-Balken zieht. Das Verhalten des Scrubbing-Modus kann mitsetScrubbingModeParameters(..)aufExoPlayerundExoPlayer.Builderangepasst werden. - Anpassen der Toleranz für die Suche nach Bruchteilen im Scrubbing-Modus zulassen.
- Die Codec-Betriebsrate im Scrubbing-Modus wurde erhöht.
- Es wurde ein Fehler behoben, bei dem Vorbereitungsfehler im Inhalt von
AdsMediaSourcemöglicherweise nie gemeldet wurden (#2337). - Speicherleck in
MergingMediaSourcebehoben, das z. B. beim Sideloading von Untertiteln verwendet wird (#2338). - Ermöglichen Sie, dass
CmcdConfiguration.Factorynullzurückgibt, um das CMCD-Logging für bestimmte Media-Elemente zu deaktivieren (#2386). - Die Standardgröße des Bildpuffers wurde von 128 KB (Kopierfehler aus Text-Tracks) auf 26 MB erhöht. Das ist groß genug für Ultra-HDR-Bilder mit 50 MP (#2417).
- Füge
PreCacheHelperhinzu, damit Apps ein einzelnes Medium mit einer bestimmten Startposition und Dauer vorab im Cache speichern können. - Unterstützung für das Vorladen ab einer bestimmten Position in
DefaultPreloadManagerhinzugefügt.
- Getter für den Zufallsmodus zur
- Transformer:
CodecDbLitehinzugefügt, um chipsatzspezifische Optimierungen der Video-Codierungseinstellungen zu ermöglichen.- Fügen Sie dem
DefaultEncoderFactorydas FlagsetEnableCodecDbLitehinzu, um die Optimierung der CodecDB Lite-Einstellungen zu aktivieren. Dieses Flag ist standardmäßig auf „false“ gesetzt. - Wenn Sie eine anfängliche Lücke (die über
addGap()hinzugefügt wurde) mit stummem Audio füllen möchten, müssen Sie jetztexperimentalSetForceAudioTrack(true)inEditedMediaItemSequence.Builderexplizit festlegen. Wenn sich die Lücke in der Mitte der Sequenz befindet, ist dieses Flag nicht erforderlich. - Verschieben Sie die
Muxer-Schnittstelle vonmedia3-transformernachmedia3-muxer. - Die Einstellung
MediaItem.Builder().setImageDuration(long)ist jetzt erforderlich, um ein Media-Element als Bild zu importieren. - Füge
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)hinzu. Diese enthält eine MP4-Bearbeitungsliste, die Playern mitteilt, dass sie Samples zwischen dem Keyframe vor dem Startpunkt des Schnitts und dem Startpunkt des Schnitts ignorieren sollen. - Die Composition Demo-App wurde aktualisiert, um Kotlin und Jetpack Compose zu verwenden. Außerdem wurde ein benutzerdefiniertes
VideoCompositorSettingshinzugefügt, um Sequenzen in einem 2×2- oder BiB-Layout anzuordnen.
- Extraktoren:
- Metadaten aus fragmentierten MP4-Dateien parsen (#2084)
- JPEG: Unterstützung von Fotos mit Bewegtbild, die kein EXIF-Segment am Anfang haben (#2552).
- Unterstützung für das Suchen in fragmentierten MP4-Dateien mit mehreren
sidx-Atomen hinzugefügt. Dieses Verhalten kann mit dem FlagFLAG_MERGE_FRAGMENTED_SIDXinFragmentedMp4Extractoraktiviert werden (#9373). - Leere Suchtabellen in FLAC-Dateien (einschließlich solcher, die nur Platzhalter-Suchpunkte enthalten) werden ignoriert und es wird auf die binäre Suche zurückgegriffen, wenn die Dauer der Datei bekannt ist (#2327).
- Das Parsen von H.265‑SEI-Einheiten wurde korrigiert, um unbekannte SEI-Typen vollständig zu überspringen (#2456).
- Aktualisieren Sie
WavExtractor, damit die SubFormat-Daten der Header-Erweiterung für das Audioformat verwendet werden, wenn eine Datei vom TypWAVE_FORMAT_EXTENSIBLEgeparst wird. - MP4: Unterstützung für die Felder
ipcmundfpcmzum Definieren von PCM-Rohaudiotracks (64-Bit-Gleitkomma-PCM wird nicht unterstützt). - MP4: Verarbeitet den Rotationsanteil von
tkhd-Transformationsmatrizen, die das Video sowohl drehen als auch spiegeln. So wird dafür gesorgt, dass mit der nach vorn gerichteten iPhone-Kamera aufgenommene gespiegelte Videos richtig ausgerichtet, aber falsch an der Y-Achse gespiegelt werden (#2012). - MP3: Verwenden Sie Dauer und Datengröße aus nicht suchbaren Xing-, VBRI- und ähnlichen Metadaten mit variabler Bitrate, wenn aufgrund von
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194) auf die Suche mit konstanter Bitrate zurückgegriffen wird.
- Audio:
- Ein Fehler wurde behoben, bei dem
AnalyticsListener.onAudioPositionAdvancingnicht aufgerufen wurde, wenn die Audiowiedergabe sehr kurz vor dem Ende der Medien gestartet wurde. - Unterstützung für alle linearen PCM-Beispielformate in
ChannelMappingAudioProcessorundTrimmingAudioProcessorhinzugefügt. - Unterstützung für Audio-Lücken in
CompositionPlayerhinzugefügt. - Entferne den fälschlichen Anruf an
BaseAudioProcessor#flush()vonBaseAudioProcessor#reset(). - Konstantes Power-Upmixing/Downmixing in DefaultAudioMixer zulassen.
ChannelMappingAudioProcessor,TrimmingAudioProcessorundToFloatPcmAudioProcessoröffentlich machen (#2339).- Verwenden Sie
AudioTrack#getUnderrunCount()inAudioTrackPositionTracker, um Unterläufe inDefaultAudioSinkzu erkennen, anstatt eine Schätzung nach dem Best-Effort-Prinzip zu verwenden. - Die Glättung von Audio-Zeitstempeln wurde verbessert, um unerwartete Positionsabweichungen des Audioausgabegeräts zu berücksichtigen.
- Es wurde ein Fehler behoben, bei dem die A/V-Synchronisierung in den ersten 10 Sekunden nach dem Fortsetzen der Wiedergabe nach einer Pause unterbrochen wurde, wenn das Gerät mit Bluetooth-Geräten verbunden war.
- Es wurde ein Fehler behoben, durch den
AnalyticsListener.onAudioPositionAdvancingnicht die Zeit angab, zu der die Audioausgabe begann, sondern die Zeit der ersten Messung. - Problem behoben, bei dem die Wiederherstellung von Mehrkanal-Audio nach dem Fallback auf Stereo-Audio auf einigen Geräten nicht funktionierte (#2258).
- Ein Fehler wurde behoben, bei dem
- Video:
- Problemumgehung für abgelöste Oberflächen auf Geräten von Lenovo und Motorola erweitert (#2059).
- Die reibungslose Videofreigabe bei der Initialisierung wurde verbessert, wenn Audio-Samples nicht genau an der angeforderten Position beginnen.
- Workaround für abgelöste Oberflächen auf Realme-Geräten ausweiten (#2059).
- Experimentelle
ExoPlayer-API hinzugefügt, um das FlagMediaCodec.BUFFER_FLAG_DECODE_ONLYbeim Einreihen von Eingabepuffern nur für die Decodierung zu verwenden. Dieses Flag weist den Decoder an, die reinen Decodierungspuffer zu überspringen, was zu einem schnelleren Suchen führt. Aktivieren Sie die Funktion mitDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. - Verbesserte Codec-Leistungsprüfungen für Software-Video-Codecs. Dies kann dazu führen, dass einige zusätzliche Tracks als
EXCEEDS_CAPABILITIESmarkiert werden. - Problem behoben, bei dem es auf einigen Geräten zu VP9-Widevine-Wiedergabefehlern kam (#2408).
- Text:
- Unterstützung für VobSub-Tracks in MP4-Dateien hinzugefügt (#2510).
- Ein Wiedergabestopp wurde behoben, der auftrat, wenn ein Untertitelsegment zuerst nicht geladen werden konnte, dann aber erfolgreich geladen wurde, gefolgt von mehreren leeren Untertitelsegmenten (#2517).
- Das Problem, dass bei SSA- und SubRip-Dateien kein Cue für den Fortschritt angezeigt wurde, wenn Untertitel aktiviert wurden, wurde behoben (#2309).
- Das Problem, dass die Wiedergabe beim Wechsel von einem Stream mit Untertitel-Fehler zu einem Livestream mit einem leeren Untertitel-Track hängen bleibt, wurde behoben (#2328).
- Es wurde ein Fehler behoben, durch den CEA-608-Untertitel bei der Wiedergabe von H.262-Streams mit B-Frames verstümmelt wurden (#2372).
- Unterstützung für SSA-Untertitel mit
CodecId = S_TEXT/SSAin Matroska-Dateien hinzugefügt. Bisher wurde inMatroskaExtractornurCodecId = S_TEXT/ASSunterstützt, was die „erweiterte“ (v4+) Variante von SubStation Alpha-Untertiteln darstellen soll. Die Parsing-Logik von ExoPlayer ist jedoch für beide Varianten gleich (#2384). - Unterstützung für das Attribut
layerin SubStation Alpha-Untertiteldateien (SSA) hinzugefügt, mit dem die Z-Reihenfolge von Cues definiert wird, wenn mehrere gleichzeitig auf dem Bildschirm angezeigt werden (#2124).
- Metadaten:
- Die Unterstützung für das Abrufen der Medienlänge und
TimelinefürMetadataRetrieverwurde hinzugefügt und zur instanzbasiertenAutoCloseableAPI migriert. Verwenden Sie die neueBuilder, um eine Instanz für eineMediaItemzu erstellen, und rufen Sie dannretrieveTrackGroups(),retrieveTimeline()undretrieveDurationUs()auf, umListenableFutures für die Metadaten abzurufen. Die bisherigen statischen Methoden sind jetzt veraltet (#2462).
- Die Unterstützung für das Abrufen der Medienlänge und
- Bild:
- Beschränken Sie die decodierten Bitmaps auf die Displaygröße in
BitmapFactoryImageDecoder, um zu vermeiden, dass eine App mitCanvas: trying to draw too large bitmap.ausPlayerViewabstürzt, wenn versucht wird, sehr große Bilder (z.B. 50 MP) anzuzeigen. - Ändern Sie die Signatur von
DefaultRenderersFactory.getImageDecoderFactory(), sodass sie einenContext-Parameter akzeptiert. - Richten Sie die maximale Bitmap-Ausgabegröße, die in
CompositionPlayerverwendet wird, an der Größe aus, die bereits inTransformerverwendet wird. Das bedeutet, dass beiCompositionPlayerim Gegensatz zuExoPlayerdie Displaygröße beim Decodieren von Bitmaps nicht berücksichtigt wird.
- Beschränken Sie die decodierten Bitmaps auf die Displaygröße in
- DRM:
- Es wurde eine neue Überladung von
OfflineLicenseHelper.newWidevineInstancehinzugefügt, die einMediaItem.DrmConfigurationakzeptiert, damit HTTP-Anfrageheader korrekt angewendet werden können (#2169).
- Es wurde eine neue Überladung von
- Wirkung:
- Fügen Sie
Presentation.createForShortSide(int)hinzu, um einPresentationzu erstellen, bei dem die kürzeste Seite immer dem angegebenen Wert entspricht, unabhängig von der Ausrichtung der Eingabe.
- Fügen Sie
- Muxer:
- Ein Fehler wurde behoben, bei dem für Audio-Samples in fragmentierten MP4-Dateien nicht die richtigen Sample-Flags festgelegt wurden.
- Die
writeSampleData()API verwendet jetzt die muxerspezifischeBufferInfo-Klasse anstelle vonMediaCodec.BufferInfo. - Fügen Sie
Muxer.Factory#supportsWritingNegativeTimestampsInEditListhinzu, das standardmäßig auf „false“ gesetzt ist.
- IMA-Erweiterung:
- Ein Fehler wurde behoben, durch den ein Ladefehler in einer Anzeige versehentlich eine andere Anzeigengruppe ungültig machen konnte.
- Es wurde ein Fehler behoben, durch den die Wiedergabe von Anzeigengruppen nach dem Ende eines VOD-Fensters angehalten wurde.
Anzeigengruppen mit einer Startzeit nach dem Fenster werden nicht mehr in die
MediaPeriodQueueeingereiht (#2215).
- Sitzung:
- Es wurde ein Fehler behoben, bei dem Verbindungen von nicht privilegierten Media3-Controllern von Drittanbietern ignoriert wurden.
- Die Prüfung auf verfügbare Befehle wird entfernt, wenn benutzerdefinierte Befehle an ein altes
MediaBrowserServiceCompatgesendet werden. Das Verhalten entspricht dem von älteren Controllern/Browsern, wenn sie mit einer älteren App verbunden sind. - Ein Fehler wurde behoben, der dazu führte, dass der erste Wiedergabefehler eines Nutzers fälschlicherweise als dauerhafte benutzerdefinierte Ausnahme behandelt wurde. Dadurch kann sich die Anwendung nicht erholen.
- Es wurde ein Fehler behoben, bei dem einige Controller-Änderungen, die nicht von der Sitzung verarbeitet werden,
IllegalStateExceptionsverursachen konnten. - Es wurde ein Fehler behoben, bei dem Controlleraktionen, die nicht von der Sitzung verarbeitet werden, den Controller in einem ungültigen Zustand hinterlassen konnten.
- Warnung zu StrictMode-Verstoß bei unsicherem Start behoben (#2330).
- Es wurde ein Fehler behoben, bei dem der Aufruf von
setSessionExtrasüber den Hauptthread beim Ausführen des Players über einen anderen Anwendungs-Thread als den Hauptthread zu einemIllegalStateExceptiongeführt hat (#2265). - Es wird nicht automatisch eine Benachrichtigung angezeigt, wenn ein Player mit Media-Elementen eingerichtet wird, ohne sie vorzubereiten oder abzuspielen (#2423https://github.com/androidx/media/issues/2423). Dieses Verhalten kann über
MediaSessionService.setShowNotificationForIdlePlayerkonfiguriert werden. - Fügen Sie allen oder ausgewählten Controllern benutzerdefinierte
PlaybackExceptionhinzu. - Ein Fehler wurde behoben, durch den das Suchen in einem Livestream auf einem
MediaControllerzu einemIllegalArgumentExceptionführen konnte. - Bei Livestreams wird die Veröffentlichung einer Wiedergabeposition und die Möglichkeit, im aktuellen Element für Media-Controller der Plattform zu suchen, beendet, um Positionsartefakte in der Android Auto-Benutzeroberfläche (und anderen Controllern, die diese Informationen aus der Media-Sitzung der Plattform verwenden) zu vermeiden (#1758).
- Ein Fehler wurde behoben, bei dem das Übergeben von „null“ in
getLibraryRooteinerMediaBrowser, die mit einer altenMediaBrowserServiceCompatverbunden ist, zu einerNullPointerExceptionführte. - Ein Fehler wurde behoben, durch den das Senden benutzerdefinierter Aktionen, eines Suchergebnisses oder einer „getItem“-Anfrage die Legacy-Sitzungs-App mit einem
ClassNotFoundExceptionzum Absturz brachte. - Es wurde ein Fehler behoben, durch den
MediaItem.LocalConfiguration.urifür dieMediaMetadatader Plattform-Sitzungen freigegeben wurde. Wenn Sie absichtlich einen URI freigeben möchten, damit Controller die Medien noch einmal anfordern können, legen Sie stattdessenMediaItem.RequestMetadata.mediaUrifest.
- UI:
- Ein Fehler wurde behoben, durch den
PlayerSurfacein wiederverwendbaren Komponenten wieLazyColumnnicht richtig funktionierte (#2493). - Es wurde ein Fehler in Compose behoben, der zu einer Lücke zwischen dem Festlegen der anfänglichen Schaltflächenstatus und dem Beobachten der Statusänderung (z.B. Symbolformen oder Aktivierung) geführt hat. Änderungen, die außerhalb des Beobachtungszeitraums am Player vorgenommen wurden, werden jetzt berücksichtigt (#2313).
- Fügen Sie dem
media3-ui-compose-Modul Status-Holder und Composables fürSeekBackButtonStateundSeekForwardButtonStatehinzu. - Unterstützung für den Scrubbing-Modus von ExoPlayer für
PlayerControlViewhinzugefügt. Wenn diese Option aktiviert ist, wird der Player in den Scrubbing-Modus versetzt, wenn der Nutzer beginnt, die Scrubbing-Leiste zu ziehen. Für jede Bewegung wird einplayer.seekTo-Aufruf ausgegeben. Der Scrubbing-Modus wird beendet, wenn die Berührung vom Bildschirm entfernt wird. Diese Integration kann entweder mittime_bar_scrubbing_enabled = truein XML oder mit der MethodesetTimeBarScrubbingEnabled(boolean)aus Java/Kotlin aktiviert werden. PlayerSurfacesoll ein Argument vom Typ „nullable“Playerakzeptieren.
- Ein Fehler wurde behoben, durch den
- Downloads:
- Unterstützung für partielle Downloads für progressive Streams hinzugefügt. Apps können mit
DownloadHelpereinen progressiven Stream vorbereiten und mit Angabe der zeitbasierten Media-Start- und ‑Endpositionen, die der Download abdecken soll, eineDownloadRequestvom Helper anfordern. Die zurückgegebeneDownloadRequestenthält den aufgelösten Bytebereich, mit dem einProgressiveDownloadererstellt und der Inhalt entsprechend heruntergeladen werden kann. - Fügen Sie
DownloadHelper.Factoryhinzu, durch die die statischenDownloadHelper.forMediaItem()-Methoden ersetzt werden. - Fügen Sie
FactoryfürSegmentDownloader-Implementierungen hinzu. - Unterstützung für partielle Downloads für adaptive Streams hinzugefügt. Apps können einen adaptiven Stream mit
DownloadHelpervorbereiten und mit Angabe der zeitbasierten Start- und Endpositionen der Medien, die der Download abdecken soll, eineDownloadRequestvom Helfer anfordern. Der zurückgegebeneDownloadRequestenthält den aufgelösten Zeitraum, mit dem ein konkreterSegmentDownloadererstellt und der Inhalt entsprechend heruntergeladen werden kann.
- Unterstützung für partielle Downloads für progressive Streams hinzugefügt. Apps können mit
- Cronet-Erweiterung:
- Automatische Cookie-Verarbeitung hinzufügen (#5975).
- HLS-Erweiterung:
- Es wurde ein Fehler behoben, bei dem
HlsSampleStreamWrapperversucht, im Puffer zu suchen, wenn keine Chunks im Puffer verfügbar sind. #2598 - Ein Fehler wurde behoben, durch den sich die Auswahl des Tracks nach dem Laden von Teilen mit geringer Latenz ändert. Außerdem kann es durch Preload-Hinweise dazu kommen, dass die Wiedergabe hängen bleibt oder einfriert (#2299).
- Verhindern Sie übermäßige Neuladevorgänge, indem Sie die Hälfte der Zieldauer abwarten, wenn
CAN-BLOCK-RELOAD=YESvom Server nicht berücksichtigt wird (#2317). - Ein Fehler wurde behoben, bei dem die Wiedergabe beim Starten eines Interstitial-Streams vor einem Mid-Roll unterbrochen wurde und die Asset-Liste für die falsche Anzeige aufgelöst wurde (#2558).
- Die Playlist-Analyse wurde korrigiert, sodass
\f(Seitenvorschub) in Attributwerten mit Anführungszeichen akzeptiert wird (#2420). - Unterstützung für das Aktualisieren von Interstitials mit derselben ID (#2427).
- Ein Fehler wurde behoben, bei dem Fehler beim Laden von Playlists manchmal nicht weitergegeben wurden, wenn bei einem Livestream keine Segmente mehr zum Laden vorhanden waren (#2401https://github.com/androidx/media/issues/2401).
- Untertitel-Renditionen nach NAME-Tag gruppieren, ähnlich wie Audio-Renditionen bereits gruppiert werden (#1666).
- Unterstützung von X-ASSET-LIST und Livestreams mit
HlsInterstitialsAdsLoader.
- Es wurde ein Fehler behoben, bei dem
- DASH-Erweiterung:
- Es wurde ein Problem behoben, bei dem der Trickplay-Anpassungssatz mit dem zugehörigen Hauptanpassungssatz zusammengeführt wurde, um ein ungültiges
TrackGroupzu bilden (#2148). - Es wurde ein Fehler behoben, durch den beim Verkürzen der Dauer eines DASH-Zeitraums eine Ausnahme ausgelöst werden konnte, wenn Samples, die über die neue Dauer hinausgehen, bereits von der Rendering-Pipeline gelesen wurden (#2440).
- Ein Fehler wurde behoben, bei dem Weiterleitungen bei Verwendung von CMCD-Suchparametern nicht gefolgt wurde (#2475).
- Es wurde ein Problem behoben, bei dem der Trickplay-Anpassungssatz mit dem zugehörigen Hauptanpassungssatz zusammengeführt wurde, um ein ungültiges
- RTSP-Erweiterung:
- Unterstützung für RTP-Aggregationspakete für H265 gemäß RFC 7798#4.4.2 hinzugefügt (#2413).
- Der Fehler
RtspClientwurde behoben, sodass der Standort-URI verwendet wird, der bei der Verarbeitung einer HTTP 302-Antwort angegeben wurde (#2398). - Unterstützung für das Parsen von SessionDescriptions mit Zeilen mit nachfolgenden Leerzeichen wurde hinzugefügt (#2357).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Fehler behoben, bei dem
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangekeine Auswirkungen auf Audio-Decoder-Erweiterungen hatte (#2258).
- Fehler behoben, bei dem
- Cast-Erweiterung:
- Test-Tools:
- Fügen Sie
advance(player).untilPositionAtLeastunduntilMediaItemIndexzuTestPlayerRunHelperhinzu, um den Spieler bis zu einer bestimmten Position zu bewegen. In den meisten Fällen sind diese Methoden zuverlässiger als die vorhandenen MethodenuntilPositionunduntilStartOfMediaItem. - Verschieben Sie
FakeDownloaderin das Modultest-utils-robolectric, um es in anderen Tests wiederzuverwenden. transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)undtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)wurden entfernt. Verwenden Sie stattdessenShadowMediaCodecConfig, um Shadow-Encoder und ‑Decoder zu konfigurieren.- Das Präfix „exotest“ wurde in den von
ShadowMediaCodecConfiggemeldeten Codec-Namen durch „media3“ ersetzt.
- Fügen Sie
- Entfernen Sie die veralteten Symbole:
- Der veraltete
SegmentDownloader-KonstruktorSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)und die entsprechenden Konstruktoren in den UnterklassenDashDownloader,HlsDownloaderundSsDownloaderwurden entfernt. - Die eingestellten
Player.hasNext()undPlayer.hasNextWindow()wurden entfernt. Verwenden Sie stattdessenPlayer.hasNextMediaItem(). - Die veraltete Funktion
Player.next()wurde entfernt. Verwenden Sie stattdessenPlayer.seekToNextMediaItem(). - Die veraltete Funktion
Player.seekToPreviousWindow()wurde entfernt. Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem(). - Die veraltete Funktion
Player.seekToNextWindow()wurde entfernt. Verwenden Sie stattdessenPlayer.seekToNextMediaItem(). - Veraltetes
BaseAudioProcessorim Modulexoplayerentfernt. VerwendeBaseAudioProcessorim Modulcommon. - Entfernen Sie den verworfenen Konstruktor
MediaCodecVideoRendererMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- Der veraltete
Version 1.8.0-rc02
24. Juli 2025
Verwenden Sie die stabile Version 1.8.0.
Version 1.8.0-rc01
16. Juli 2025
Verwenden Sie die stabile Version 1.8.0.
Version 1.8.0-beta01
2. Juli 2025
Verwenden Sie die stabile Version 1.8.0.
Version 1.8.0-alpha01
19. Mai 2025
Verwenden Sie die stabile Version 1.8.0.
Version 1.7.0
Version 1.7.1
16. Mai 2025
Diese Version hat denselben Code wie 1.6.1 und wird veröffentlicht, damit sie als „neuere“ Version als 1.7.0 angezeigt wird. 1.7.0 war eine Alphaversion, die versehentlich als stabil gekennzeichnet wurde (siehe unten).
Version 1.7.0
16. Mai 2025
Diese Version sollte 1.7.0-alpha01 sein, wurde aber auf maven.google. com versehentlich mit 1.7.0 (d.h.stabil) getaggt. Bitte verwenden Sie sie nicht. Sie können bei Version 1.6.1 bleiben oder auf Version 1.7.1 aktualisieren (die denselben Code wie Version 1.6.1 hat).
Version 1.6.0
1.6.1
14. April 2025
androidx.media3:media3-*:1.6.1 ist veröffentlicht.
Version 1.6.1 enthält diese Commits.
- Gemeinsame Mediathek:
- Die Methode
PlaybackParameters.withPitch(float)wurde hinzugefügt, um das Kopieren einesPlaybackParametersmit einem neuenpitch-Wert zu vereinfachen (#2257).
- Die Methode
- ExoPlayer:
- Ein Problem wurde behoben, bei dem der Übergang von Media-Elementen aufgrund eines behebaren Renderer-Fehlers während der Initialisierung des nächsten Media-Elements fehlgeschlagen ist (#2229).
- Ein Problem wurde behoben, bei dem
ProgressiveMediaPeriodeineIllegalStateExceptionauslöst, wennPreloadMediaSourceversucht,getBufferedDurationUs()aufzurufen, bevor sie vorbereitet wurde (#2315). - Das Senden von
CmcdDatain Manifestanfragen für DASH, HLS und SmoothStreaming wurde korrigiert (#2253). - Prüfen Sie, ob
AdPlaybackState.withAdDurationsUs(long[][])auch nach dem Entfernen von Anzeigengruppen verwendet werden kann. Der Nutzer muss weiterhin ein Array mit Zeiträumen für entfernte Anzeigengruppen übergeben, das leer oder null sein kann (#2267).
- Extraktoren:
- MP4: Parsen Sie
alternate_groupaus dem Feldtkhdund stellen Sie es alsMp4AlternateGroupData-Eintrag imFormat.metadatajedes Tracks bereit (#2242).
- MP4: Parsen Sie
- Audio:
- Ein Problem beim Offload wurde behoben, bei dem die Position beim Abspielen einer Playlist mit kurzen Inhalten hängen bleiben konnte (#1920).
- Sitzung:
- Das Aggregations-Zeitlimit für
MediaSession-Callbacks der Plattform wurde von 500 auf 100 Millisekunden gesenkt. Außerdem wurde ein experimenteller Setter hinzugefügt, mit dem Apps diesen Wert konfigurieren können. - Es wurde ein Problem behoben, bei dem Benachrichtigungen wieder angezeigt wurden, nachdem sie vom Nutzer geschlossen worden waren (#2302).
- Ein Fehler wurde behoben, bei dem in der Sitzung eine Timeline mit einem einzelnen Element zurückgegeben wurde, obwohl der umhüllte Player leer war. Das ist der Fall, wenn der umhüllte Player
COMMAND_GET_TIMELINEnicht unterstützt,COMMAND_GET_CURRENT_MEDIA_ITEMaber schon, und der umhüllte Player leer ist (#2320). - Ein Fehler wurde behoben, bei dem der Aufruf von
MediaSessionService.setMediaNotificationProvidernach anderen Interaktionen mit dem Dienst wiesetForegroundServiceTimeoutMsstillschweigend ignoriert wurde (#2305).
- Das Aggregations-Zeitlimit für
- UI:
- Aktivieren Sie
PlayerSurface, um mitExoPlayer.setVideoEffectsundCompositionPlayerzu arbeiten. - Es wurde ein Fehler behoben, bei dem
PlayerSurfacenicht mit einem neuenPlayerneu zusammengesetzt werden konnte.
- Aktivieren Sie
- HLS-Erweiterung:
- Ein Problem wurde behoben, bei dem die Chunk-Dauer in
CmcdDatafür HLS-Media nicht festgelegt wurde, was zu einem Zusicherungsfehler bei der Verarbeitung verschlüsselter Media-Segmente führte (#2312).
- Ein Problem wurde behoben, bei dem die Chunk-Dauer in
- RTSP-Erweiterung:
- Unterstützung für URI mit RTSPT-Schema als Möglichkeit zum Konfigurieren der RTSP-Sitzung für die Verwendung von TCP hinzugefügt (#1484).
- Cast-Erweiterung:
- Unterstützung für Playlist-Metadaten hinzugefügt (#2235).
1.6.0
26. März 2025
androidx.media3:media3-*:1.6.0 ist veröffentlicht.
Version 1.6.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Fügen Sie
AudioManagerCompatundAudioFocusRequestCompathinzu, um die entsprechenden Klassen inandroidx.mediazu ersetzen. - Führen Sie ein Upgrade von Kotlin von 1.9.20 auf 2.0.20 durch und verwenden Sie das Compose Compiler Gradle-Plug-in. Aktualisieren Sie die KotlinX Coroutines-Bibliothek von Version 1.8.1 auf Version 1.9.0.
- Entfernen Sie die Methode
Format.toBundle(boolean excludeMetadata)und verwenden Sie stattdessenFormat.toBundle(). - Fehler in
SimpleBasePlayerbehoben, bei dem das Festlegen eines neuencurrentMediaItemIndexinStatenachsetPlaylistmitnullMediaMetadatadie Metadaten nicht neu bewertet (#1940). - Der Zugriff auf
SimpleBasePlayer.Statewird von „protected“ zu „public“ geändert, um Updates in anderen Klassen zu vereinfachen (#2128).
- Fügen Sie
- ExoPlayer:
MediaExtractorCompatwurde hinzugefügt, eine neue Klasse, die ähnliche Funktionen wie die PlattformMediaExtractorbietet.- Experimentelle Unterstützung für das Vorbereiten von ExoPlayer für die Wiedergabe mit
MediaCodecVideoRendererhinzugefügt. Sie könnenDefaultRenderersFactoryüberexperimentalSetEnableMediaCodecVideoRendererPrewarmingkonfigurieren, um einen sekundärenMediaCodecVideoRendererbisExoPlayerbereitzustellen. Wenn diese Option aktiviert ist, verarbeitetExoPlayerdas Video aufeinanderfolgender Media-Elemente während der Wiedergabe vorab, um die Latenz beim Übergang zwischen Media-Elementen zu verringern. - Reduzieren Sie die Standardwerte für
bufferForPlaybackMsundbufferForPlaybackAfterRebufferMsinDefaultLoadControlauf 1.000 bzw. 2.000 ms. - Initialisiere
DeviceInfound die Lautstärke des Geräts asynchron (falls mitsetDeviceVolumeControlEnabledaktiviert). Diese Werte sind nicht sofort nachExoPlayer.Builder.build()verfügbar.Player.Listenerbenachrichtigt über Änderungen überonDeviceInfoChangedundonDeviceVolumeChanged. - Die ursprüngliche Audio-Sitzungs-ID ist nicht mehr sofort nach dem Erstellen des Players verfügbar. Bei Bedarf können Sie sich die erste Aktualisierung mit
AnalyticsListener.onAudioSessionIdChangedvorlesen lassen. - Berücksichtige die Sprache bei der Auswahl eines Videotracks. Standardmäßig wird ein „Haupt“-Videotrack ausgewählt, der der Sprache des ausgewählten Audiotracks entspricht, sofern verfügbar. Explizite Einstellungen für die Videosprache können mit
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)angegeben werden. - Fügen Sie der Methode
DefaultTrackSelector.selectVideoTrack()den ParameterselectedAudioLanguagehinzu. - Fügen Sie den Parameter
retryCountzuMediaSourceEventListener.onLoadStartedund den entsprechendenMediaSourceEventListener.EventDispatcher-Methoden hinzu. - Es wurde ein Fehler behoben, bei dem es bei Playlist-Elementen oder Zeiträumen in DASH-Streams mit mehreren Zeiträumen mit einer Dauer, die nicht mit dem tatsächlichen Inhalt übereinstimmt, am Ende des Elements zu Frame-Freezes kommen konnte (#1698).
- Verschieben Sie
BasePreloadManager.Listenerin einPreloadManagerListenerauf oberster Ebene. RenderersFactory.createSecondaryRendererkann implementiert werden, um sekundäre Renderer für das Vorwärmen bereitzustellen. Durch das Vorab-Caching können Medienübergänge während der Wiedergabe schneller erfolgen.- Das Senden von
CmcdDatafür Manifestanfragen in adaptiven Streamingformaten wie DASH, HLS und SmoothStreaming wurde aktiviert (#1951). - Geben Sie
MediaCodecInfodes Codecs an, der inMediaCodecRenderer.onReadyToInitializeCodecinitialisiert wird (#1963). - Ändern Sie
AdsMediaSource, damit dieAdPlaybackStatesdurch Anhängen von Anzeigengruppen erweitert werden kann. Es wurden ungültige Änderungen erkannt, die eine Ausnahme auslösen. - Es wurde ein Problem behoben, durch das beim Übergang zu Inhaltsmedien nach einer Mid-Roll-Anzeige möglicherweise zusätzliche Frames nur zum Decodieren in schneller Folge angezeigt wurden.
DefaultRenderersFactoryfügt zweiMetadataRenderer-Instanzen hinzu, damit Apps standardmäßig zwei verschiedene Metadatenschemas empfangen können.- Es wurde neu bewertet, ob das laufende Laden eines Chunks abgebrochen werden sollte, wenn die Wiedergabe pausiert wird (#1785).
- Es wurde eine Option für
ClippingMediaSourcehinzugefügt, mit der das Erstellen von Clips in nicht suchbaren Medien möglich ist. - Ein Fehler wurde behoben, durch den das Suchen mit Pre-Warming den Übergang zum nächsten Medienelement blockieren konnte.
- Es wurde ein Fehler behoben, bei dem
ExoPlayer.isLoading()trueblieb, obwohl es zuSTATE_IDLEoderSTATE_ENDEDgewechselt war (#2133). - Fügen Sie
lastRebufferRealtimeMszuLoadControl.Parameterhinzu (#2113).
- Transformer:
- Unterstützung für das Transmuxing in alternative abwärtskompatible Formate hinzugefügt.
- Unterstützung für die Transcodierung und das Transmuxing von Dolby Vision (Profil 8) wurde hinzugefügt.
- Aktualisieren Sie die Parameter von
VideoFrameProcessor.registerInputStreamundVideoFrameProcessor.Listener.onInputStreamRegistered, umFormatzu verwenden. - Generieren Sie statische HDR-Metadaten, wenn Sie
DefaultEncoderFactoryverwenden. - Aktivieren Sie die Unterstützung für Android-Plattformdiagnosen mit
MediaMetricsManager. Der Transformer leitet Bearbeitungsereignisse und Leistungsdaten an die Plattform weiter, was dazu beiträgt, Systemleistungs- und Debugging-Informationen auf dem Gerät bereitzustellen. Diese Daten können auch von Google erhoben werden, wenn der Nutzer des Geräts die Weitergabe von Nutzungs- und Diagnosedaten aktiviert hat. Apps können die Teilnahme an der Plattformdiagnose für Transformer mitTransformer.Builder.setUsePlatformDiagnostics(false)deaktivieren. - Teile
InAppMuxerinInAppMp4MuxerundInAppFragmentedMp4Muxerauf. MitInAppMp4Muxerwird eine nicht fragmentierte MP4-Datei erstellt, mitInAppFragmentedMp4Muxereine fragmentierte MP4-Datei. - Verschiebe die
Muxer-Schnittstelle vonmedia3-muxernachmedia3-transformer. - Fügen Sie
MediaProjectionAssetLoaderhinzu, das Medien aus einemMediaProjectionfür die Bildschirmaufzeichnung bereitstellt, und fügen Sie der Transformer-Demo-App Unterstützung für die Bildschirmaufzeichnung hinzu. - Fügen Sie
#getInputFormat()derCodec-Schnittstelle hinzu. - Übertrage die Verantwortung für die Freigabe des
GlObjectsProvidernach Möglichkeit auf den Anrufer inDefaultVideoFrameProcessorundDefaultVideoCompositor.
- Extraktoren:
- AVI: Die Verarbeitung von Dateien mit Audio, das mit konstanter Bitrate komprimiert wurde und bei denen im Streamheader die Anzahl der Byte anstelle der Anzahl der Chunks gespeichert ist, wurde korrigiert.
- Die Verarbeitung von NAL-Einheiten mit Längen, die in 1 oder 2 Bytes (statt 4) ausgedrückt werden, wurde korrigiert.
- Fehler bei
ArrayIndexOutOfBoundsExceptionin MP4-Bearbeitungslisten behoben, wenn die Bearbeitungsliste mit einem nicht synchronisierten Frame ohne vorherigen synchronisierten Frame beginnt (#2062). - Problem behoben, bei dem TS-Streams auf einigen Geräten hängen bleiben konnten (#2069).
- FLAC: Unterstützung für 32‑Bit-FLAC-Dateien hinzugefügt. Bisher konnten diese Inhalte mit
IllegalStateException: Playback stuck buffering and not loadingnicht wiedergegeben werden (#2197).
- Audio:
- Der Fehler wurde behoben, sodass
onAudioPositionAdvancingjetzt aufgerufen wird, wenn die Wiedergabe fortgesetzt wird (zuvor wurde sie aufgerufen, wenn die Wiedergabe pausiert wurde). - Umgehen Sie
SonicAudioProcessornicht, wennSpeedChangingAudioProcessormit Standardparametern konfiguriert ist. - Ein Unterlauf in
Sonic#getOutputSize()wurde behoben, der dazu führen konnte, dassDefaultAudioSinknicht mehr reagierte. - Korrigieren Sie
MediaCodecAudioRenderer.getDurationToProgressUs()undDecoderAudioRenderer.getDurationToProgressUs(), damit die Suchvorgänge die angegebenen Zeiträume korrekt zurücksetzen. androidx.media3.common.audio.SonicAudioProcessorabschließen.- Unterstützung für Float-PCM zu
ChannelMappingAudioProcessorundTrimmingAudioProcessorhinzufügen.
- Der Fehler wurde behoben, sodass
- Video:
- Ändere
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacein „protected“, damit Anwendungen die Verwendung von Platzhalter-Oberflächen blockieren können (#1905). - Es wurde eine experimentelle
ExoPlayerAV1-Beispielabhängigkeitsanalyse hinzugefügt, um das Suchen zu beschleunigen. Aktivieren Sie sie mit der neuenDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI. - Die experimentelle
ExoPlayerAPI wurde hinzugefügt, um späteMediaCodecVideoRenderer-Decodereingabepuffer zu verwerfen, von denen keine Abhängigkeiten bestehen. Aktivieren Sie die Funktion mitDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. - Ein Problem wurde behoben, bei dem ein Player ohne Oberfläche sofort bereit war und alle ausstehenden Frames sehr langsam decodiert wurden (#1973).
- Xiaomi- und OPPO-Geräte aus dem Modus „Abgenommenes Display“ ausschließen, um Bildschirmflackern zu vermeiden (#2059).
- Ändere
- Text:
- Unterstützung für VobSub-Untertitel hinzugefügt (#8260).
- Das eifrige Laden aller Untertiteldateien, die mit
MediaItem.Builder.setSubtitleConfigurationskonfiguriert sind, wird beendet. Stattdessen wird nur eine Datei geladen, wenn sie durch die Auswahl des Tracks ausgewählt wird (#1721). - TTML: Unterstützung für das Referenzieren von
tts:originundtts:extentmitstylewurde hinzugefügt (#2953). - Beschränken Sie WebVTT- und SubRip-Zeitstempel auf genau 3 Dezimalstellen. Bisher haben wir eine beliebige Anzahl von Dezimalstellen falsch geparst, aber immer davon ausgegangen, dass der Wert in Millisekunden angegeben ist. Das hat zu falschen Zeitstempeln geführt (#1997).
- Es wurde ein Fehler behoben, der dazu führte, dass die Wiedergabe hängen blieb, wenn eine Playlist gekürzte Elemente mit CEA-608- oder CEA-708-Untertiteln enthielt.
- Fehlerbehebung für
IllegalStateException, wenn eine SSA-Datei einen Cue mit der Dauer null enthält (Start- und Endzeit sind gleich) (#2052). - Unterdrücken (und protokollieren) von Fehlern beim Parsen von Untertiteln, wenn Untertitel in denselben Container wie Audio und Video gemuxt werden (#2052).
- Der Umgang mit Multibyte-UTF-8-Zeichen in WebVTT-Dateien mit CR-Zeilenenden wurde korrigiert (#2167).
- DRM:
- Fehler
MediaCodec$CryptoException: Operation not supported in this configurationbeim Abspielen von ClearKey-Inhalten auf Geräten mit API-Version < 27 behoben (#1732).
- Fehler
- Wirkung:
- Die Funktionalität von
OverlaySettingswurde inStaticOverlaySettingsverschoben.OverlaySettingskann abgeleitet werden, um dynamische Overlays zu ermöglichen.
- Die Funktionalität von
- Muxer:
MuxerExceptionwurde aus derMuxer-Schnittstelle entfernt, um einen sehr langen vollständig qualifizierten Namen zu vermeiden.- Die Methode
setSampleCopyEnabled()wurde sowohl inMp4Muxer.Builderals auch inFragmentedMp4Muxer.BuilderinsetSampleCopyingEnabled()umbenannt. Mp4Muxer.addTrack()undFragmentedMp4Muxer.addTrack()geben jetzt eineint-Track-ID anstelle einerTrackTokenzurück.Mp4MuxerundFragmentedMp4Muxerimplementieren dieMuxer-Schnittstelle nicht mehr.Mp4Muxer-Stichproben-Batching und ‑Kopieren standardmäßig deaktivieren- Ein Fehler in
FragmentedMp4Muxerwurde behoben, der viele Fragmente erstellte, wenn nur der Audiotrack geschrieben wurde.
- Sitzung:
- Der Status des Vordergrunddiensts wird für weitere 10 Minuten beibehalten, wenn die Wiedergabe pausiert, beendet oder fehlgeschlagen ist. So können Nutzer die Wiedergabe innerhalb dieses Zeitlimits fortsetzen, ohne dass auf verschiedenen Geräten Einschränkungen für Dienste im Vordergrund drohen. Beachten Sie, dass der Aufruf von
player.pause()nicht mehr verwendet werden kann, um den Dienst im Vordergrund vorstopSelf()zu beenden. Verwenden Sie stattdessenMediaSessionService.pauseAllPlayersAndStopSelf(), wenn SieonTaskRemovedüberschreiben. - Benachrichtigung sichtbar lassen, wenn die Wiedergabe in einen Fehler- oder Stoppstatus wechselt. Die Benachrichtigung wird nur entfernt, wenn die Playlist gelöscht oder der Player freigegeben wird.
- Die Verarbeitung der MediaSession-Aktionen ACTION_PLAY und ACTION_PAUSE der Android-Plattform wurde verbessert. Es wird nur eine der beiden Aktionen entsprechend den verfügbaren Befehlen festgelegt. Außerdem wird akzeptiert, wenn nur eine der beiden Aktionen festgelegt ist.
- Fügen Sie
Contextals Parameter zuMediaButtonReceiver.shouldStartForegroundServicehinzu (#1887). - Es wurde ein Fehler behoben, bei dem durch den Aufruf einer
Player-Methode für einMediaController, das mit einer alten Sitzung verbunden war, Änderungen aus einem ausstehenden Update verloren gingen. MediaSession.setSessionActivity(PendingIntent)akzeptiert jetzt „null“ (#2109).- Es wurde ein Fehler behoben, durch den eine alte Benachrichtigung sichtbar blieb, wenn die Playlist gelöscht wurde (#2211).
- Der Status des Vordergrunddiensts wird für weitere 10 Minuten beibehalten, wenn die Wiedergabe pausiert, beendet oder fehlgeschlagen ist. So können Nutzer die Wiedergabe innerhalb dieses Zeitlimits fortsetzen, ohne dass auf verschiedenen Geräten Einschränkungen für Dienste im Vordergrund drohen. Beachten Sie, dass der Aufruf von
- UI:
- Fügen Sie dem
media3-ui-compose-Modul Status-Holder und Composables fürPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateundPlaybackSpeedStatehinzu.
- Fügen Sie dem
- Downloads:
- Fehler in
CacheWriterbehoben, durch den Datenquellen offen und Cachebereiche gesperrt bleiben, wenn die Datenquelle einen anderenExceptionalsIOException(#9760) ausgibt.
- Fehler in
- HLS-Erweiterung:
- Fügen Sie eine erste Version von
HlsInterstitialsAdsLoaderhinzu. Der Anzeigen-Loader liest die HLS-Interstitials einer HLS-Mediaplaylist und ordnet sie demAdPlaybackStatezu, das anAdsMediaSourceübergeben wird. Diese erste Version unterstützt nur HLS-VOD-Streams mitX-ASSET-URI-Attributen. - Fügen Sie
HlsInterstitialsAdsLoader.AdsMediaSourceFactoryhinzu. Apps können damitAdsMediaSource-Instanzen erstellen, die auf bequeme und sichere Weise einHlsInterstitialsAdsLoaderverwenden. - Das
SUPPLEMENTAL-CODECS-Tag aus der HLS-Playlist wird geparst, um Dolby Vision-Formate zu erkennen (#1785). - Die Bedingung für das Suchen nach Synchronisierungspositionen in einem HLS-Stream wurde gelockert (#2209).
- Fügen Sie eine erste Version von
- DASH-Erweiterung:
- Unterstützung für das AC-4-Format der Stufe 4 für DASH hinzufügen (#1898).
- Problem bei der Berechnung des Updateintervalls für das Einfügen von Anzeigen in Live-Streams mit mehreren Zeiträumen behoben (#1698).
- Das Attribut
scte214:supplementalCodecswird aus dem DASH-Manifest geparst, um Dolby Vision-Formate zu erkennen (#1785). - Die Verarbeitung von Periodenübergängen in Livestreams wurde verbessert, wenn die Periode Mediensamples enthält, die über die angegebene Periodendauer hinausgehen (#1698).
- Ein Problem wurde behoben, bei dem Anpassungssätze, die mit
adaptation-set-switchinggekennzeichnet sind, aber unterschiedliche Sprach- oder Rollen-Flags haben, zusammengeführt wurden (#2222).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Das MPEG-H-Decodermodul wurde hinzugefügt, das den integrierten MPEG-H-Decoder zum Decodieren von MPEG-H-Audio verwendet (#1826).
- MIDI-Erweiterung:
- Benutzerdefinierte
AudioSink- undAudioRendererEventListener-Instanzen inMidiRenderereinbinden
- Benutzerdefinierte
- Cast-Erweiterung:
- Aktualisieren Sie die
play-services-cast-framework-Abhängigkeit auf Version 21.5.0, um einenFLAG_MUTABLE-Absturz in Apps zu beheben, die auf API 34 oder höher ausgerichtet sind und auf Geräten mit installierten, aber deaktivierten Google Play-Diensten ausgeführt werden (#2178).
- Aktualisieren Sie die
- Demo-App:
demo-composemit zusätzlichen Schaltflächen erweitern und diePlayerSurface-Integration mit Skalierungs- und Auslöserunterstützung verbessern.
- Entfernen Sie die veralteten Symbole:
- Veraltete
AudioMixer.create()-Methode entfernt. Verwenden Sie stattdessenDefaultAudioMixer.Factory().create(). - Entfernen Sie die folgenden veralteten
Transformer.Builder-Methoden:setTransformationRequest(): Verwenden Sie stattdessensetAudioMimeType(),setVideoMimeType()undsetHdrMode().setAudioProcessors(), legen Sie den Audioprozessor in einemEditedMediaItem.Builder.setEffects()fest und übergeben Sie ihn stattdessen anTransformer.start().setVideoEffects(), setze den Videoeffekt in einemEditedMediaItem.Builder.setEffects()und übergib ihn stattdessen anTransformer.start().setRemoveAudio(). Verwenden Sie stattdessenEditedMediaItem.Builder.setRemoveAudio(), um das Audio aus dem anTransformer.start()übergebenenEditedMediaItemzu entfernen.setRemoveVideo(). VerwendeEditedMediaItem.Builder.setRemoveVideo(), um das Video aus demEditedMediaItemzu entfernen, das anTransformer.start()übergeben wird.setFlattenForSlowMotion(). Verwenden Sie stattdessenEditedMediaItem.Builder.setFlattenForSlowMotion(), um das anTransformer.start()übergebeneEditedMediaItemzu reduzieren.setListener(): Verwenden Sie stattdessenaddListener(),removeListener()oderremoveAllListeners().
- Entfernen Sie die folgenden veralteten
Transformer.Listener-Methoden:onTransformationCompleted(MediaItem). Verwenden Sie stattdessenonCompleted(Composition, ExportResult).onTransformationCompleted(MediaItem, TransformationResult). Verwenden Sie stattdessenonCompleted(Composition, ExportResult).onTransformationError(MediaItem, Exception). Verwenden Sie stattdessenonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationException). Verwenden Sie stattdessenonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationResult, TransformationException). Verwenden Sie stattdessenonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest). Verwenden Sie stattdessenonFallbackApplied(Composition, TransformationRequest, TransformationRequest).
- Entfernen Sie die eingestellte Klasse
TransformationResult. Verwenden Sie stattdessenExportResult. - Entfernen Sie die eingestellte Klasse
TransformationException. Verwenden Sie stattdessenExportException. - Entfernen Sie die veraltete
Transformer.PROGRESS_STATE_NO_TRANSFORMATION. Verwenden Sie stattdessenTransformer.PROGRESS_STATE_NOT_STARTED. - Entfernen Sie die veraltete
Transformer.setListener(). Verwenden Sie stattdessenTransformer.addListener(),Transformer.removeListener()oderTransformer.removeAllListeners(). - Entfernen Sie die veraltete
Transformer.startTransformation(). Verwenden Sie stattdessenTransformer.start(MediaItem, String). - Entfernen Sie die veraltete
SingleFrameGlShaderProgram. Verwenden Sie stattdessenBaseGlShaderProgram. - Entfernen Sie
Transformer.flattenForSlowMotion. Verwenden Sie stattdessenEditedMediaItem.flattenForSlowMotion. ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentundExoPlayer.DeviceComponentwurden entfernt.androidx.media3.exoplayer.audio.SonicAudioProcessorwurde entfernt.- Die folgenden veralteten
DownloadHelper-Methoden wurden entfernt:- Konstruktor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), verwenden Sie stattdessenDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). getRendererCapabilities(RenderersFactory): Eine entsprechende Funktion kann erreicht werden, indem Sie eineDefaultRendererCapabilitiesListmit einemRenderersFactoryerstellen undDefaultRendererCapabilitiesList.getRendererCapabilities()aufrufen.
- Konstruktor
- Die Methode
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)wurde entfernt. Verwenden Sie stattdessenPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)und übergeben Sie(MediaSession.Token) compatToken.getToken().
- Veraltete
1.6.0-rc02
19. März 2025
Verwenden Sie die stabile Version 1.6.0.
1.6.0-rc01
12. März 2025
Verwenden Sie die stabile Version 1.6.0.
1.6.0-beta01
26. Februar 2025
Verwenden Sie die stabile Version 1.6.0.
Version 1.6.0-alpha03
6. Februar 2025
Verwenden Sie die stabile Version 1.6.0.
Version 1.6.0-alpha02
30. Januar 2025
Verwenden Sie die stabile Version 1.6.0.
Version 1.6.0-alpha01
20. Dezember 2024
Verwenden Sie die stabile Version 1.6.0.
Version 1.5
Version 1.5.1
19. Dezember 2024
androidx.media3:media3-*:1.5.1 ist veröffentlicht.
Version 1.5.1 enthält diese Commits.
- ExoPlayer:
- Deaktivieren Sie die Verwendung der asynchronen Entschlüsselung in MediaCodec, um die gemeldeten Probleme mit dem Codec-Timeout bei dieser Plattform-API zu vermeiden (#1641).
- Extraktoren:
- MP3: Die Wiedergabe darf nicht vorzeitig beendet werden, wenn das Inhaltsverzeichnis eines
VBRI-Frames nicht alle MP3-Daten in einer Datei abdeckt (#1904).
- MP3: Die Wiedergabe darf nicht vorzeitig beendet werden, wenn das Inhaltsverzeichnis eines
- Video:
- Rollback der Verwendung von
MediaCodecAdapter-Werten für das bereitgestellte Pixel-Seitenverhältnis bei der Verarbeitung vononOutputFormatChanged(#1371).
- Rollback der Verwendung von
- Text:
- Es wurde ein Fehler in
ReplacingCuesResolver.discardCuesBeforeTimeUsbehoben, bei dem der Cue, der beitimeUsaktiv war (vorher gestartet, aber noch nicht beendet), fälschlicherweise verworfen wurde (#1939).
- Es wurde ein Fehler in
- Metadaten:
- Extrahieren der Datenträger-/Tracknummerierung und des Genres aus Vorbis-Kommentaren in
MediaMetadata(#1958).
- Extrahieren der Datenträger-/Tracknummerierung und des Genres aus Vorbis-Kommentaren in
Version 1.5.0
27. November 2024
androidx.media3:media3-*:1.5.0 ist veröffentlicht.
Version 1.5.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Füge
ForwardingSimpleBasePlayerhinzu, das das Weiterleiten an einen anderen Player mit kleinen Anpassungen ermöglicht und gleichzeitig für vollständige Konsistenz und Listener-Verarbeitung sorgt (#1183). - Ersetzen Sie
SimpleBasePlayer.State.playlistdurch die MethodegetPlaylist(). - Fügen Sie einen Überschreibungsbefehl für
SimpleBasePlayer.State.Builder.setPlaylist()hinzu, um direkt einTimelineund das aktuelleTracksundMetadataanzugeben, anstatt eine Playliststruktur zu erstellen. - Erhöhen Sie
minSdkauf 21 (Android Lollipop). Dies entspricht allen anderen AndroidX-Bibliotheken. - Fügen Sie das
androidx.media3:media3-common-ktx-Artefakt hinzu, das Kotlin-spezifische Funktionen bietet, die auf der Common-Bibliothek basieren. - Fügen Sie der
media3-common-ktx-Bibliothek die suspendierende ErweiterungsfunktionPlayer.listenhinzu, um eine Coroutine zu starten, die aufPlayer.Eventswartet. - Entfernen Sie
@DoNotInline-Annotationen aus manuell ausgelagerten inneren Klassen, die dazu dienen, Fehler bei der Laufzeitklassenüberprüfung zu vermeiden. In aktuellen Versionen von R8 werden solche Inline-Aufrufe jetzt automatisch ausgelagert, um Laufzeitfehler zu vermeiden. Die manuelle Auslagerung ist also nicht mehr erforderlich. Alle Gradle-Nutzer der Bibliothek müssen bereits eine Version des Android-Gradle-Plug-ins verwenden, in der eine R8-Version enthalten ist, die dies unterstützt, aufgrund voncompileSdk = 35. Nutzer der Bibliothek mit Build-Systemen, die nicht auf Gradle basieren, müssen dafür sorgen, dass ihr R8-äquivalenter Schritt zum Verkleinern/Verschleiern einen ähnlichen automatischen Out-of-Lining-Prozess durchführt, um Laufzeitfehler bei der Klassenüberprüfung zu vermeiden. Diese Änderung wurde bereits in anderen AndroidX-Bibliotheken vorgenommen.
- Füge
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()kann jetzt für jedes Medienelement aufgerufen werden. Bisher wurde sie für die erste nicht aufgerufen. Verwenden SieMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart(), um diese Funktion zu aktivieren.- Fügen Sie
PreloadMediaSource.PreloadControl.onPreloadErrorhinzu, damitPreloadMediaSource.PreloadControl-Implementierungen Aktionen ausführen können, wenn ein Fehler auftritt. - Fügen Sie
BasePreloadManager.Listenerhinzu, um Preload-Ereignisse an Apps weiterzugeben. - Ändern des SNTP-Client-Timeouts und Wiederholen alternativer Adressen bei Timeout zulassen (#1540).
- Entfernen Sie
MediaCodecAdapter.Configuration.flags, da das Feld immer null war. - Der Nutzer kann den integrierten Lautsprecher für die Wiedergabe auf Wear OS ab API 35 auswählen, sofern das Gerät dies unterstützt.
- Den blockierenden Aufruf an
Context.getSystemService(Context.AUDIO_SERVICE)bis zur Aktivierung der Audiofokus-Verarbeitung verschieben. Dadurch wird sichergestellt, dass der blockierende Aufruf nicht erfolgt, wenn die Verarbeitung des Audiofokus nicht aktiviert ist (#1616). - Wiedergabe unabhängig von der gepufferten Dauer zulassen, wenn das Laden fehlschlägt (#1571).
- Fügen Sie
AnalyticsListener.onRendererReadyChanged()hinzu, um zu signalisieren, wann die Wiedergabe auf einzelnen Renderern bereit ist. - Der Fehler
MediaCodec.CryptoExceptionwird manchmal als „unerwarteter Laufzeitfehler“ gemeldet, wennMediaCodecim asynchronen Modus ausgeführt wird (Standardverhalten bei API 31 und höher). - Übergeben Sie
bufferedDurationUsanstelle vonbufferedPositionUsmitPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Außerdem wirdDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSinDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MSgeändert. Apps müssen dann anstelle einer Position einen Wert übergeben, der eine bestimmte Dauer ab der Standardstartposition angibt, für die die entsprechende Media-Quelle mit diesem IntDef vorab geladen werden muss. - Fügen Sie die
ForwardingRenderer-Implementierung hinzu, die alle Methodenaufrufe an einen anderen Renderer weiterleitet (1703). - Vorabladen von Playlists für das nächste Element in der Playlist hinzufügen Apps können das Vorabladen aktivieren, indem sie
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)aufrufen. Das Vorabladen ist standardmäßig deaktiviert. Wenn Sie die Funktion aktiviert haben, wird das Vorabladen durchDefaultLoadControleingeschränkt. Es wird nur gestartet und fortgesetzt, wenn der Player nicht für die Wiedergabe geladen wird. Apps können dieses Verhalten ändern, indem sieLoadControl.shouldContinuePreloading()entsprechend implementieren (z. B. durch Überschreiben dieser Methode inDefaultLoadControl). Bei der Standardimplementierung vonLoadControlwird das Vorabladen deaktiviert, wenn eine App eine benutzerdefinierte Implementierung vonLoadControlverwendet. - Die Methode
MediaSourceEventListener.EventDispatcher.dispatchEvent()wurde hinzugefügt, um das Aufrufen von Ereignissen von Unterklassen-Listenern zu ermöglichen (1736). - Fügen Sie
DefaultPreloadManager.Builderhinzu, mit dem dieDefaultPreloadManager- undExoPlayer-Instanzen mit einheitlich freigegebenen Konfigurationen erstellt werden. - Entfernen Sie den Parameter
Renderer[]ausLoadControl.onTracksSelected(), da dieDefaultLoadControl-Implementierung die Streamtypen ausExoTrackSelection[]abrufen kann. - Die Methode
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])ist veraltet und wurde als „final“ markiert, um Überschreibungen zu verhindern. Verwenden Sie stattdessen die neueDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]). MediaSourceEventListener-Ereignisse aus sekundären Quellen inMergingMediaSourcemelden Dies führt dazu, dass für per Sideloading hinzugefügte Untertitel (die mitMediaItem.LocalConfiguration.subtitleConfigurationshinzugefügt wurden) Ereignisse vom Typ „loadstart“/„error“/„cancelled“/„completed“ gemeldet werden. Diese Ereignisse werden möglicherweise als doppelte Ladevorgänge angezeigt, die vonAnalyticsListenerausgegeben werden.- Verhindern, dass Fehler bei Untertiteln und Metadaten die Wiedergabe vollständig stoppen.
Stattdessen wird der problematische Titel deaktiviert und die Wiedergabe der verbleibenden Titel wird fortgesetzt (#1722).
- Bei der neuen Untertitelverarbeitung (während der Extraktion) werden zugehörige Parse- (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über
onLoadError-Callbacks ausgegeben. - Bei der alten Untertitelverarbeitung (während des Renderns) werden nur zugehörige Ladefehler über
onLoadError-Callbacks ausgegeben, während Parsing-Fehler stillschweigend ignoriert werden (dies ist das bisherige Verhalten).
- Bei der neuen Untertitelverarbeitung (während der Extraktion) werden zugehörige Parse- (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über
- Es wurde ein Fehler behoben, bei dem es bei Playlist-Elementen oder Zeiträumen in DASH-Streams mit mehreren Zeiträumen mit einer Dauer, die nicht mit dem tatsächlichen Inhalt übereinstimmt, am Ende des Elements zu Frame-Freezes kommen konnte (#1698).
- Setter für
SntpClienthinzufügen, um die maximale verstrichene Zeit seit der letzten Aktualisierung festzulegen, nach der der Client neu initialisiert wird (#1794).
- Transformer:
- Füge
SurfaceAssetLoaderhinzu, das das Einreihen von Videodaten in die Transformer-Warteschlange über eineSurfaceunterstützt. ImageAssetLoadermeldet nicht unterstützte Eingaben überAssetLoader.onError, anstatt eineIllegalStateExceptionauszulösen.- Die Einstellung der Bilddauer über
MediaItem.Builder.setImageDurationMsist für den Bildexport obligatorisch. - Unterstützung für den Export von Lücken in Sequenzen von bearbeiteten Audio-MediaItems hinzugefügt.
- Füge
- Titelauswahl:
DefaultTrackSelector: Objektbasierte Audioinhalte sollten kanalbasierten Audioinhalten vorgezogen werden, wenn andere Faktoren gleich sind.
- Extraktoren:
- Mit
Mp4ExtractorundFragmentedMp4Extractorkönnen H264-Samples identifiziert werden, die nicht als Referenz für nachfolgende Samples verwendet werden. - Option zum Aktivieren der indexbasierten Suche in
AmrExtractorhinzugefügt. - MP3-Dateien mit mehr als 128 KB zwischen gültigen Frames werden als gekürzt (und nicht als ungültig) behandelt. Das bedeutet, dass die Wiedergabe von Dateien mit Nicht-MP3-Daten am Ende, bei denen keine anderen Metadaten die Länge der MP3-Bytes angeben, jetzt am Ende der MP3-Daten beendet wird, anstatt mit
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563) zu fehlschlagen. - Die Verarbeitung von Preroll-Samples für Media-Startpositionen, die keine Keyframes sind, wurde korrigiert, wenn Bearbeitungslisten in MP4-Dateien verarbeitet werden (#1659).
- Die Berechnung der Frame-Rate wurde verbessert, indem die Medienlänge aus dem Feld
mdhdinMp4ExtractorundFragmentedMp4Extractorverwendet wird (#1531). - Falsche Skalierung von
media_timein MP4-Bearbeitungslisten korrigieren Währendsegment_durationbereits korrekt mit der Zeiteinteilung des Films skaliert wurde, wirdmedia_timejetzt korrekt mit der Zeiteinteilung des Tracks skaliert, wie im MP4-Formatstandard angegeben (#1792). - Behandlung von Frames in falscher Reihenfolge bei der
endIndices-Berechnung für MP4-Dateien mit Bearbeitungsliste (#1797). - Die Analyse der Medienlänge im
mdhd-Feld von MP4-Dateien wurde korrigiert, um-1-Werte zu verarbeiten (#1819). - Unterstützung für die Identifizierung des
h263-Felds in MP4-Dateien für H.263-Video hinzugefügt (#1821). - Unterstützung für das ISO-Basismediendateiformat AC-4 Level 4 hinzugefügt (#1265).
- Mit
- DataSource:
- Aktualisierung von
HttpEngineDataSource, sodass die Verwendung ab Version S-Extension 7 anstelle von API-Level 34 möglich ist (#1262). DataSourceContractTest: Bestätigen, dassDataSource.getUri()den aufgelösten URI zurückgibt (wie dokumentiert). Wenn dies vom angeforderten URI abweicht, kann dies in Tests mit der neuen MethodeDataSourceContractTest.TestResource.Builder.setResolvedUri()angegeben werden.DataSourceContractTest: Es wird geprüft, obDataSource.getUri()undgetResponseHeaders()ihren „open“-Wert nach einem fehlgeschlagenen Aufruf vonopen()(aufgrund einer nicht gefundenen Ressource) und vor einem nachfolgendenclose()-Aufruf zurückgeben.- Durch Überschreiben von
DataSourceContractTest.getNotFoundResources()können Testunterklassen mehrere „nicht gefunden“-Ressourcen und alle erwarteten Header bereitstellen. So kann zwischen HTTP 404 (mit Headern) und „Server nicht gefunden“ (ohne Header) unterschieden werden.
- Durch Überschreiben von
- Aktualisierung von
- Audio:
- Konfiguriert automatisch CTA-2075-Lautheitsmetadaten für den Codec, sofern sie in den Media vorhanden sind.
- Achte darauf, dass die Lautstärke beim Suchen gleichmäßig verringert wird.
- Problem mit Knackgeräuschen behoben, die bei der Suche auftreten können.
- Die Anhäufung von Rundungsfehlern beim Time-Stretching-/Pitch-Shifting-Algorithmus von Sonic wurde behoben.
- Fehler in
SpeedChangingAudioProcessorbeheben, der zu fehlenden Ausgabeframes führt.
- Video:
MediaCodecVideoRenderervermeidet das Decodieren von Samples, die weder gerendert noch von anderen Samples als Referenz verwendet werden.- Bei API 35 und höher kann
MediaCodecAdapterjetzt einnull-Surfaceinconfigureempfangen und eine neue MethodedetachOutputSurfaceaufrufen, um ein zuvor festgelegtesSurfacezu entfernen, wenn der Codec dies unterstützt (MediaCodecInfo.detachedSurfaceSupported). - Verwenden Sie die bereitgestellten Werte für das Pixel-Seitenverhältnis
MediaCodecAdapter, falls verfügbar, wenn SieonOutputFormatChangedverarbeiten (#1371). - Es wurde eine Behelfslösung für ein Geräteproblem auf dem Galaxy Tab S7 FE hinzugefügt, das dazu führt, dass sichere H264-Streams mit 60 fps als nicht unterstützt markiert werden (#1619).
- Es wurde eine Problemumgehung für Codecs hinzugefügt, die nach dem letzten Sample hängen bleiben, ohne ein End-of-Stream-Signal zurückzugeben.
- Text:
- Fügen Sie eine benutzerdefinierte
VoiceSpanhinzu und füllen Sie sie für WebVTT-Voice-Spans aus (#1632). - Achte darauf, dass WebVTT in HLS mit sehr großen Untertitel-Zeitstempeln (die einen 64-Bit-
longüberlaufen, wenn sie als Mikrosekunden dargestellt und mit der90,000-MPEG-Zeitbasis multipliziert werden) angezeigt werden (#1763). - Unterstützung von CEA-608-Untertiteln in Dolby Vision-Inhalten (#1820).
- Das Problem, dass die Wiedergabe bei DASH-Streams mit mehreren Zeiträumen hängen bleibt, wenn CEA-608-Untertitel aktiviert sind, wurde behoben (#1863).
- Fügen Sie eine benutzerdefinierte
- Metadaten:
- Weisen Sie Tracks mit icy- oder vnd.dvb.ait-Inhalten den Typ
C.TRACK_TYPE_METADATAzu.
- Weisen Sie Tracks mit icy- oder vnd.dvb.ait-Inhalten den Typ
- Bild:
- Fügen Sie
ExternallyLoadedImageDecoderhinzu, um die Integration in externe Bibliotheken zum Laden von Bildern wie Glide oder Coil zu vereinfachen.
- Fügen Sie
- DataSource:
FileDescriptorDataSourcewurde hinzugefügt, ein neuesDataSource, das zum Lesen aus einemFileDescriptorverwendet werden kann (#3757).
- Wirkung:
- Es wurde eine
DefaultVideoFrameProcessor-Problemumgehung für die geringfügigeSurfaceTexture-Skalierung hinzugefügt.SurfaceTexturekann eine kleine Skalierung enthalten, durch die ein 1-Texel-Rahmen am Rand eines zugeschnittenen Puffers abgeschnitten wird. Das Problem wurde behoben und die Ausgabe entspricht nun eher den Erwartungen. - Schnelleres
DefaultVideoFrameProcessor.queueInputBitmap()Dadurch geht der Export von Bildern in Videos mitTransformerschneller.
- Es wurde eine
- IMA-Erweiterung:
- Ein Fehler wurde behoben, bei dem das Löschen der Playlist zu einem
ArrayIndexOutOfBoundsExceptioninImaServerSideAdInsertionMediaSourceführen konnte. - Es wurde ein Fehler behoben, bei dem serverseitig eingefügte DAI-Streams ohne Preroll bei der Wiedergabe nach dem letzten Mid-Roll zu einem
ArrayIndexOutOfBoundsExceptionführen konnten (#1741).
- Ein Fehler wurde behoben, bei dem das Löschen der Playlist zu einem
- Sitzung:
- Füge
MediaButtonReceiver.shouldStartForegroundService(Intent)hinzu, damit Apps einen eingehenden Play-Befehl zum Fortsetzen der Wiedergabe unterdrücken können, indem sie diese Methode überschreiben. Standardmäßig wird der Dienst immer gestartet und die Wiedergabe kann nicht unterdrückt werden, ohne dass der Dienst mit einemForegroundServiceDidNotStartInTimeException(#1528) abstürzt. - Ein Fehler wurde behoben, der dazu führte, dass benutzerdefinierte Befehle, die von einem
MediaBrowsergesendet wurden, an dieMediaSessionCompat.Callbackanstatt an dieMediaBrowserServiceCompat-Variante der Methode gesendet wurden, wenn eine Verbindung zu einem Legacy-Dienst bestand. Dadurch konnteMediaBrowserden tatsächlichen Rückgabewert, der vom alten Dienst zurückgesendet wurde, nicht empfangen (#1474). - Behandlung von
IllegalArgumentException, das von Geräten bestimmter Hersteller ausgelöst wird, wenn der Broadcast-Empfänger für Media-Button-Intents festgelegt wird (#1730). - Befehlsschaltflächen für Media-Elemente hinzufügen Dadurch wird die Media3 API für das hinzugefügt, was als
Custom browse actionsmit der alten Bibliothek mitMediaBrowserCompatbekannt war. Hinweis: Mit Media3 sind Befehlsschaltflächen für Media-Elemente sowohl fürMediaBrowserals auch fürMediaControllerverfügbar. Weitere Informationen finden Sie unter Benutzerdefinierte Suchaktionen implementieren. - Es wurde ein Fehler behoben, bei dem ein Media3-Controller manchmal nicht zulassen konnte, dass eine Sitzungs-App einen Dienst im Vordergrund startet, nachdem
play()angefordert wurde. - Beschränken Sie
CommandButton.Builder.setIconUriso, dass nur Inhalts-URIs akzeptiert werden. - Übergeben Sie Verbindungshinweise eines Media3-Browsers an das ursprüngliche
MediaBrowserCompat, wenn Sie eine Verbindung zu einem Legacy-MediaBrowserCompatherstellen. Der Dienst kann die als Stammhinweise übergebenen Verbindungshinweise mit dem ersten Aufruf vononGetRoot()empfangen. - Ein Fehler wurde behoben, bei dem ein
MediaBrowser, das mit einem Legacy-Browserdienst verbunden war, keinen vom Dienst gesendeten Fehler empfangen hat, nachdem der Browser einenparentidabonniert hatte. - Das Interoperabilitätsverhalten wurde verbessert, sodass ein Media3-Browser, der mit einem Legacy-
MediaBrowserServiceverbunden ist, die untergeordneten Elemente einesparentIdnicht zweimal anfordert, wenn er einen übergeordneten Dienst abonniert.
- Füge
- UI:
- Das gestreckte/zugeschnittene Video im
PlayerView-in-Compose-AndroidView-Workaround aktivieren, da es Probleme mit XML-basierten gemeinsamen Übergängen gibt. Apps, diePlayerViewinnerhalb vonAndroidViewverwenden, müssenPlayerView.setEnableComposeSurfaceSyncWorkaroundaufrufen, um die Funktion zu aktivieren (#1237, #1594). - Füge
setFullscreenButtonStatezuPlayerViewhinzu, um Updates des Symbols der Vollbildschaltfläche auf Anfrage zu ermöglichen, d.h. außerhalb des Bandes und nicht reaktiv auf eine Klickinteraktion (#1590, #184). - Es wurde ein Fehler behoben, bei dem die Option „Keine“ in der Textauswahl nicht funktionierte, wenn von der App definierte Einstellungen für die Auswahl von Text-Tracks vorhanden waren.
- Das gestreckte/zugeschnittene Video im
- DASH-Erweiterung:
- Unterstützung für Zeiträume hinzugefügt, die in der Mitte eines Segments beginnen (#1440).
- Smooth Streaming-Erweiterung:
- Ein
Bad magic number for Bundle-Fehler beim Abspielen von SmoothStreaming-Streams mit Text-Tracks wurde behoben (#1779).
- Ein
- RTSP-Erweiterung:
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Fügen Sie das IAMF-Decodermodul hinzu, das die Wiedergabe von MP4-Dateien mit IAMF-Tracks unterstützt. Dazu wird die native libiamf-Bibliothek verwendet, um Audio zu synthetisieren.
- Die Wiedergabe ist mit einem Stereolayout sowie mit 5.1 mit Räumlichkeit und optional aktivierter Erfassung von Kopfbewegungen möglich. Die Unterstützung der binauralen Wiedergabe ist derzeit jedoch nicht verfügbar.
- Unterstützung von 16‑KB-Seiten für Decodererweiterungen unter Android 15 hinzugefügt (#1685).
- Fügen Sie das IAMF-Decodermodul hinzu, das die Wiedergabe von MP4-Dateien mit IAMF-Tracks unterstützt. Dazu wird die native libiamf-Bibliothek verwendet, um Audio zu synthetisieren.
- Cast-Erweiterung:
- Die Bereinigung der Zeitachse wird nach dem Trennen der CastSession beendet. So kann die Sender-App die Wiedergabe nach dem Trennen der Verbindung lokal fortsetzen.
- Füllen Sie
DeviceInfovon CastPlayer aus, wenn einContextangegeben wird. Dadurch kann dieMediaSessionmit einerRoutingSessionverknüpft werden, was für die Integration von Output Switcher erforderlich ist (#1056).
- Test-Tools:
DataSourceContractTestenthält jetzt Tests, um Folgendes zu überprüfen:- Der Eingabestream
read positionwurde aktualisiert. - Der Ausgabepuffer
offsetwird korrekt angewendet.
- Der Eingabestream
- Demo-App
- Beheben Sie die Speicherlecks in der Demo-App für Kurzvideos (#1839).
- Entfernen Sie die veralteten Symbole:
- Die eingestellten
Player.hasPreviousundPlayer.hasPreviousWindow()wurden entfernt. Verwenden Sie stattdessenPlayer.hasPreviousMediaItem(). - Veraltete
Player.previous()-Methode entfernt. Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem(). - Veraltete
DrmSessionEventListener.onDrmSessionAcquired-Methode entfernt. - Entfernen Sie eingestellte
DefaultEncoderFactory-Konstruktoren. Verwenden Sie stattdessenDefaultEncoderFactory.Builder.
- Die eingestellten
Version 1.5.0-rc02
19. November 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-rc01
13. November 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-beta01
30. Oktober 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-alpha01
10. September 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.4.0
Version 1.4.1
27. August 2024
androidx.media3:media3-*:1.4.1 ist veröffentlicht.
Version 1.4.1 enthält diese Commits.
- ExoPlayer:
- Extraktoren:
- MP3: Der
Searched too many bytes-Fehler wird behoben, indem nachfolgende Nicht-MP3-Daten basierend auf dem Längenfeld in einemInfo-Frame korrekt ignoriert werden (#1480).
- MP3: Der
- Text:
- TTML: Die Verarbeitung von Prozentwerten für
tts:fontSizewurde korrigiert, damit sie korrekt von übergeordneten Knoten mit Prozentwerten fürtts:fontSizeübernommen werden. - Fehler
IndexOutOfBoundsExceptioninLegacySubtitleUtilbehoben, der durch die falsche Verarbeitung des Falls verursacht wurde, in dem die angeforderte Startzeit der Ausgabe größer oder gleich der Endzeit des Ereignisses inSubtitleist (#1516).
- TTML: Die Verarbeitung von Prozentwerten für
- DRM:
- Fehler
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEauf Geräten mit API 31 oder höher beheben, auf denen L1-Widevine-Inhalte wiedergegeben werden. Dieser Fehler wird durch eine unvollständige Implementierung der Framework-MethodeMediaDrm.requiresSecureDecoder(#1603) verursacht.
- Fehler
- Wirkung:
- Fügen Sie
GlObjectsProvidereinerelease()-Methode hinzu.
- Fügen Sie
- Sitzung:
- Wandle ein Doppeltippen auf
KEYCODE_HEADSETHOOKin die Aktion „Zum nächsten Titel springen“ um, wie dokumentiert (#1493). - Behandle
KEYCODE_HEADSETHOOKals „play“-Befehl inMediaButtonReceiver, wenn du entscheidest, ob du ihn ignorieren möchtest, um einenForegroundServiceDidNotStartInTimeException(#1581) zu vermeiden.
- Wandle ein Doppeltippen auf
- RTSP-Erweiterung:
- Ungültige Media-Beschreibungen beim SDP-Parsing überspringen (#1087).
Version 1.4.0
25. Juli 2024
androidx.media3:media3-*:1.4.0 ist veröffentlicht.
Version 1.4.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Leiten Sie mutmaßliche No-Op-Suchaufrufe an die geschützten Methoden
BasePlayer.seekTo()undSimpleBasePlayer.handleSeek()weiter, anstatt sie zu ignorieren. Wenn Sie diese Methoden in einem benutzerdefinierten Player implementieren, müssen Sie diese zusätzlichen Aufrufe möglicherweise mitmediaItemIndex == C.INDEX_UNSETverarbeiten. - Die Kompilierungsabhängigkeit von der erweiterten Java 8-Desugarisierung wurde entfernt (#1312).
- Achten Sie darauf, dass die an
MediaItem.Builder.setImageDurationMs()übergebene Dauer für einMediaItem, das kein Bild ist, ignoriert wird (wie dokumentiert). - Fügen Sie
Format.customDatahinzu, um benutzerdefinierte Informationen zuFormat-Instanzen zu speichern, die von der App bereitgestellt werden.
- Leiten Sie mutmaßliche No-Op-Suchaufrufe an die geschützten Methoden
- ExoPlayer:
- Fügen Sie
BasePreloadManagerhinzu, um das Vorladen für mehrere Quellen basierend auf den Prioritäten zu koordinieren, die durch ihrrankingDatadefiniert werden. Sie können diese Klasse erweitern, um sie anzupassen. Fügen SieDefaultPreloadManagerhinzu, dasPreloadMediaSourceverwendet, um Media-Samples der Quellen in den Arbeitsspeicher vorzuladen, und eine GanzzahlrankingData, die den Index eines Elements auf der Benutzeroberfläche angibt. - Fügen Sie
PlayerIdzu den meisten Methoden vonLoadControlhinzu, damitLoadControl-Implementierungen mehrere Spieler unterstützen. - Entfernen Sie
Buffer.isDecodeOnly()undC.BUFFER_FLAG_DECODE_ONLY. Dieses Flag muss nicht festgelegt werden, da Renderer und Decoder entscheiden, ob Puffer basierend auf dem Zeitstempel übersprungen werden. Bei benutzerdefiniertenRenderer-Implementierungen sollte geprüft werden, ob die Pufferzeit mindestensBaseRenderer.getLastResetPositionUs()beträgt, um zu entscheiden, ob eine Probe angezeigt werden soll. BenutzerdefinierteSimpleDecoder-Implementierungen können bei BedarfisAtLeastOutputStartTimeUs()prüfen oder andere Puffer mitDecoderOutputBuffer.shouldBeSkippedmarkieren, um sie zu überspringen. - Ermöglicht, dass von
TargetPreloadStatusControl.getTargetPreloadStatus(T)ein Nullwert zurückgegeben wird, um anzugeben, dass keinMediaSourcemit dem angegebenenrankingDatavorab geladen werden soll. - Fügen Sie
remove(MediaSource)zuBasePreloadManagerhinzu. - Fügen Sie
reset()zuBasePreloadManagerhinzu, um alle Quellen freizugeben, die gehalten werden, und die Preload Manager-Instanz beizubehalten. - Fügen Sie
ExoPlayer.setPriority()(undBuilder.setPriority()) hinzu, um den Prioritätswert zu definieren, der inPriorityTaskManagerund für die MediaCodec-Wichtigkeit ab API 35 verwendet wird. - Problem mit der Aktualisierung der letzten Rebuffer-Zeit behoben, das zu einem falschen
bs-Schlüssel (Buffer Starvation) in CMCD geführt hat (#1124). - Fügen Sie
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)hinzu, um anzugeben, dass die Quelle bis zum Ende geladen wurde. So können die Implementierungen vonDefaultPreloadManagerundPreloadMediaSource.PreloadControldie nächste Quelle vorab laden oder andere Aktionen ausführen. - Ein Fehler wurde behoben, durch den das Überspringen von Stille am Ende von Elementen eine Wiedergabeausnahme auslösen konnte.
- Fügen Sie
clearzuPreloadMediaSourcehinzu, um den Zeitraum für das Vorabladen zu verwerfen. - Neuen Fehlercode
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDhinzufügen, der verwendet wird, wenn Codec-Ressourcen für Aufgaben mit höherer Priorität freigegeben werden. AdsMediaSourcekann Pre-Roll-Anzeigen laden, bevor die Vorbereitung der ersten Inhalte abgeschlossen ist (#1358).- Ein Fehler wurde behoben, durch den die Wiedergabe zu
STATE_ENDEDwechselte, wenn ein DASH-Livestream mit mehreren Zeiträumen neu vorbereitet wurde, nachdem der ursprüngliche Zeitraum bereits aus dem Manifest entfernt worden war. - Benennen Sie
onTimelineRefreshed()inonSourcePrepared()undonPrepared()inonTracksSelected()inPreloadMediaSource.PreloadControlum. Benennen Sie auch die IntDefs inDefaultPreloadManager.Stageentsprechend um. - Experimentelle Unterstützung für dynamische Planung hinzugefügt, um die Arbeit besser an CPU-Aktivierungszyklen auszurichten und das Aktivieren zu verzögern, bis Renderer Fortschritte machen können.
Sie können diese Funktion aktivieren, indem Sie
experimentalSetDynamicSchedulingEnabled()verwenden, wenn Sie Ihre ExoPlayer-Instanz einrichten. - Fügen Sie
Renderer.getDurationToProgressUs()hinzu. EinRendererkann diese Methode implementieren, um ExoPlayer die Dauer zurückzugeben, um die die Wiedergabe voranschreiten muss, damit der Renderer fortfahren kann. WennExoPlayermitexperimentalSetDynamicSchedulingEnabled()festgelegt ist, ruftExoPlayerdiese Methode auf, wenn die Zeit für die Planung der Arbeitsaufgabe berechnet wird. - Fügen Sie
MediaCodecAdapter#OnBufferAvailableListenerhinzu, um eine Benachrichtigung zu erhalten, wenn Ein- und Ausgabepuffer für die Verwendung durchMediaCodecRendererverfügbar sind.MediaCodecRenderersignalisiertExoPlayerbeim Empfang dieser Callbacks. WennExoPlayermitexperimentalSetDynamicSchedulingEnabled()festgelegt ist, plantExoPlayerseinen Arbeitszyklus, da Renderer Fortschritte machen können. - Verwenden Sie für
LoadControl-Methoden eine Datenklasse anstelle einzelner Parameter. - Fügen Sie
ExoPlayer.isReleased()hinzu, um zu prüfen, obExoplayer.release()aufgerufen wurde. - Fügen Sie
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()hinzu, um die maximale Position zu konfigurieren, für dieseekToPrevious()nach dem vorherigen Element sucht (#1425). - Einige Inkonsistenzen beim Audiofokus wurden behoben, z.B. wenn der vollständige oder vorübergehende Fokusverlust nicht gemeldet wurde, während der Player pausiert war (#1436).
- Behebe potenzielle
IndexOutOfBoundsException, die dadurch entstehen, dass Extractor nach dem ersten Vorbereitungsschritt zusätzliche Tracks melden (#1476). EffectsinExoPlayer.setVideoEffect()erhält die Zeitstempel ohne Renderer-Offset (#1098).- Mögliche
IllegalArgumentExceptionbeim Behandeln eines Player-Fehlers behoben, der beim Vorlesen eines anderen Playlist-Elements aufgetreten ist (#1483).
- Fügen Sie
- Transformer:
- Fügen Sie
audioConversionProcessundvideoConversionProcesszuExportResulthinzu, um anzugeben, wie der jeweilige Track in der Ausgabedatei erstellt wurde. - Die H.264-Level-Prüfungen für die Schnittoptimierung werden gelockert.
- Unterstützung für den Wechsel zwischen SDR- und HDR-Eingabemedien in einer Sequenz wurde hinzugefügt.
- Unterstützung für Audioeffekte auf Kompositionsebene hinzugefügt
- Unterstützung für das Transcodieren von Ultra-HDR-Bildern in HDR-Videos hinzugefügt
- Ein Problem wurde behoben, bei dem
DefaultAudioMixernach dem Zurücksetzen und Wiederverwenden nicht die richtige Anzahl von Byte ausgegeben hat. - Es wurde ein Decoder-Fehler behoben, bei dem die Anzahl der Audiokanäle bei der Verarbeitung von PCM-Eingaben auf Stereo begrenzt war.
- Wenn Sie in
ExoPlayerAssetLoaderTracks auswählen, ignorieren Sie die Einschränkungen für die Anzahl der Audiokanäle, da sie nur für die Wiedergabe gelten. - Ersetzen Sie die
androidx.media3.transformer.Muxer-Schnittstelle durchandroidx.media3.muxer.Muxerund entfernen Sieandroidx.media3.transformer.Muxer. - Das Laden von HEIC-Bildern über Content-URI-Schemas wurde korrigiert. (#1373).
- Passe die Dauer des Audiotracks in
AudioGraphInputan, um die A/V-Synchronisierung zu verbessern. - Entfernen Sie das Feld „
ExportResult.processedInputs“. Wenn Sie dieses Feld für Codec-Details verwenden, nutzen Sie stattdessenDefaultDecoderFactory.listener. Bei einer Codec-Ausnahme sind die Codec-Details in derExportException.codecInfoverfügbar.
- Fügen Sie
- Extraktoren:
- MPEG-TS: Führe die Änderung aus, sodass der letzte Frame gerendert wird, indem du die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergibst (#7909). Es wurden Korrekturen vorgenommen, um die Probleme zu beheben, die bei HLS-Streams mit nur I-Frames(#1150) und H.262-HLS-Streams (#1126) aufgetreten sind.
- MP3: Bevorzugen Sie die Datengröße aus einem
Info-Frame gegenüber der Größe, die vom zugrunde liegenden Stream gemeldet wird (z.B. Dateigröße oder HTTP-Content-Length-Header). So werden nicht abspielbare Trailerdaten (z.B. Albumcover) aus den Berechnungen für die Suche mit konstanter Bitrate ausgeschlossen, wodurch die Suche genauer wird (#1376). - MP3: Verwenden Sie die Frame-Anzahl und andere Daten in einem
Info-Frame (falls vorhanden), um eine durchschnittliche Bitrate für die Suche mit konstanter Bitrate zu berechnen, anstatt die Bitrate des Frames nach demInfo-Frame zu extrapolieren, die künstlich klein sein kann, z.B.PCUT-Frame (#1376). - Die Extraktion des PCM-Audioformats in AVI-Containern wurde korrigiert.
- Audio:
- DTS:X Profile 2-Codierungsattribute für die Passthrough-Wiedergabe korrigieren (#1299).
- Setze für die ausgelagerte Wiedergabe das Tracking-Feld für den Abschluss des Streams in
DefaultAudioSinkzurück, bevor duAudioTrack.stop()aufrufst, damitAudioTrack.StreamEventCallback#onPresentationEndedkorrekt erkennt, wann alle ausstehenden Daten wiedergegeben wurden. - Ein Fehler in
SilenceSkippingAudioProcessorwurde behoben, bei dem Übergänge zwischen verschiedenen Audioformaten (z. B. von Stereo zu Mono) dazu führen konnten, dass der Prozessor eine Ausnahme ausgibt (#1352). - Implementieren Sie
MediaCodecAudioRenderer.getDurationToProgressUs(), damit ExoPlayer seine Hauptarbeitsloop dynamisch für den Zeitpunkt plant, zu dem der MediaCodecAudioRenderer Fortschritte machen kann.
- Video:
- Ein Problem wurde behoben, durch das
Listener.onRenderedFirstFrame()beim Wechseln von Oberflächen während der Wiedergabe zu früh angezeigt wurde. - Die Fallback-Logik für den Dolby Vision-Decoder wurde korrigiert, sodass bei Bedarf ein kompatibler AV1-Decoder verwendet wird (#1389).
- Es wurde eine Codec-Ausnahme behoben, die durch das Aktivieren eines Video-Renderers während der Wiedergabe verursacht werden konnte.
- Ein Problem wurde behoben, durch das
- Text:
- Es wurde ein Problem behoben, bei dem Untertitel, die vor einer Suchposition beginnen, übersprungen wurden. Dieses Problem wurde erst in Media3 1.4.0-alpha01 eingeführt.
- Das Standardverhalten für das Parsen von Untertiteln wird so geändert, dass es während der Extraktion statt während des Renderns erfolgt (siehe Architekturdiagramm von ExoPlayer für den Unterschied zwischen Extraktion und Rendern).
- Diese Änderung kann durch Aufrufen von sowohl
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)als auchTextRenderer.experimentalSetLegacyDecodingEnabled(true)überschrieben werden. In der Dokumentation zur Anpassung erfahren Sie, wie Sie diese Komponenten in eineExoPlayer-Instanz einbinden. Diese Methoden und die Unterstützung für die alte Untertiteldecodierung werden in einer zukünftigen Version entfernt. - Apps mit benutzerdefinierten
SubtitleDecoder-Implementierungen müssen aktualisiert werden, um stattdessenSubtitleParserzu implementieren (undSubtitleParser.Factoryanstelle vonSubtitleDecoderFactory).
- Diese Änderung kann durch Aufrufen von sowohl
- PGS: Die Run-Length-Decodierung wurde korrigiert, um
0als Farbindex anstelle eines Literal-Farbwerts (#1367) aufzulösen. - CEA-708: Ignoriere den Wert
rowLock. In der CEA-708-E S-2023-Spezifikation wird angegeben, dass sowohlrowLockals auchcolumnLockals „true“ angenommen werden sollten, unabhängig von den im Stream vorhandenen Werten (columnLockwird nicht unterstützt, daher wird effektiv immer „false“ angenommen).- Diese Änderung war ursprünglich in den Versionshinweisen für
1.3.0-alpha01enthalten, wurde aber vor dem Release von1.3.0-rc01versehentlich rückgängig gemacht. Das Problem wurde behoben und die Änderung ist wieder vorhanden.
- Diese Änderung war ursprünglich in den Versionshinweisen für
- CEA-708: Vermeiden Sie, dass durch die naive Verarbeitung des Befehls „Stiftposition festlegen“ durch ExoPlayer doppelte Zeilenumbrüche hinzugefügt werden (#1315).
- Beheben Sie einen
IllegalArgumentExceptionausLegacySubtitleUtil, wenn ein WebVTT-Untertitelbeispiel keine Cues enthält, z.B. als Teil eines DASH-Streams (#1516).
- Metadaten:
- Die Zuordnung von MP4-Dateien zu ID3-Sortiertags wurde korrigiert. Bisher wurden die MP4-Tags „album sort“ (
soal), „artist sort“ (soar) und „album artist sort“ (soaa) fälschlicherweise den ID3-TagsTSO2,TSOAundTSOPzugeordnet (#1302). - Das Lesen von numerischen
gnre- (Genre) undtmpo-Tags (Tempo) in MP4-Dateien (/iTunes) wurde korrigiert, wenn der Wert mehr als ein Byte lang ist. - ID3-Frame
TCONanMediaMetadata.genreweitergeben (#1305).
- Die Zuordnung von MP4-Dateien zu ID3-Sortiertags wurde korrigiert. Bisher wurden die MP4-Tags „album sort“ (
- Bild:
- Unterstützung für nicht quadratische DASH-Miniaturansichtraster hinzugefügt (#1300).
- Unterstützung für AVIF für API 34+ hinzugefügt.
- Lassen Sie
nullals Parameter fürExoPlayer.setImageOutput()zu, um eine zuvor festgelegteImageOutputzu löschen.
- DataSource:
- Implementieren Sie die Unterstützung für
android.resource://package/id-Rohressourcen-URIs, wobeipackagesich vom Paket der aktuellen Anwendung unterscheidet. Das war bisher nicht dokumentiert, ist aber eine effizientere Methode, um auf Ressourcen in einem anderen Paket zuzugreifen als über den Namen. - Prüfen Sie in den
DataSpec-Konstruktoren, oburlnicht null ist. Dieser Parameter wurde bereits als „nicht null“ annotiert. - Ermöglichen Sie
ByteArrayDataSource, einen URI währendopen()in ein Byte-Array aufzulösen, anstatt ihn bei der Erstellung fest zu codieren (#1405).
- Implementieren Sie die Unterstützung für
- DRM:
- Das Festlegen eines
LoadErrorHandlingPolicyfürDefaultDrmSessionManagerProviderist jetzt möglich. (#1271)
- Das Festlegen eines
- Wirkung:
- Unterstützung mehrerer Geschwindigkeitsänderungen innerhalb desselben
EditedMediaItemoderCompositioninSpeedChangeEffect. - Unterstützung für HLG- und PQ-Ausgabe aus Ultra HDR-Bitmap-Eingabe.
- Unterstützung für EGL_GL_COLORSPACE_BT2020_HLG_EXT hinzugefügt, wodurch die HLG-Oberflächenausgabe in ExoPlayer.setVideoEffect und Transformer DebugSurfaceView verbessert wird.
- Aktualisieren Sie die Implementierung der Overlay-Matrix, damit sie mit der Dokumentation übereinstimmt. Dazu müssen Sie die in
setOverlayFrameAnchor()angewendeten x- und y-Werte tauschen. Wenn SieOverlaySettings.Builder.setOverlayFrameAnchor()verwenden, tauschen Sie die x- und y-Werte, indem Sie sie mit-1multiplizieren. - Ein Fehler wurde behoben, bei dem
TimestampWrapperbei Verwendung mitExoPlayer#setVideoEffectsabgestürzt ist (#821). - Ändern Sie den Standard-SDR-Farbarbeitsbereich von linearen Farben zu elektrischem BT.709-SDR-Video. Außerdem gibt es eine dritte Option, um den ursprünglichen Farbraum beizubehalten.
- Es ist jetzt möglich, eine unbestimmte Z-Reihenfolge für EditedMediaItemSequences zu definieren (#1055).
- Behalten Sie einen einheitlichen Luminanzbereich für verschiedene HDR-Inhalte bei (HLG-Bereich).
- Unterstützung für Ultra HDR-Overlays (Bitmap) auf HDR-Inhalten hinzugefügt
- Zulassen, dass
SeparableConvolution-Effekte vor API 26 verwendet werden. - Entfernen Sie nicht verwendete
OverlaySettings.useHdr, da der dynamische Bereich von Overlay und Frame übereinstimmen muss. - HDR-Unterstützung für
TextOverlayhinzufügen Die Luminanz des Text-Overlays kann mitOverlaySettings.Builder.setHdrLuminanceMultiplier()angepasst werden.
- Unterstützung mehrerer Geschwindigkeitsänderungen innerhalb desselben
- IMA-Erweiterung:
- Die Promote API, die für die Wiedergabe von DAI-Anzeigenstreams in Apps erforderlich ist, ist jetzt stabil.
- Fügen Sie
replaceAdTagParameters(Map <String, String>)zuImaServerSideAdInsertionMediaSource.AdLoaderhinzu, damit Parameter für Anzeigen-Tags zur Laufzeit ersetzt werden können. - Ein Fehler wurde behoben, bei dem
VideoAdPlayer.VideoAdPlayerCallback.onError()nicht aufgerufen wurde, wenn während der Anzeigenwiedergabe ein Playerfehler aufgetreten ist (#1334). - Die IMA SDK-Version wurde auf 3.33.0 aktualisiert, um einen
NullPointerExceptionbei Verwendung vondata://-Anzeigen-Tag-URIs zu beheben (#700).
- Sitzung:
- Ändere den Standardwert von
CommandButton.enabledintrueund sorge dafür, dass der Wert für Controller auch dann „false“ bleiben kann, wenn der zugehörige Befehl verfügbar ist. - Fügen Sie Symbolkonstanten für
CommandButtonhinzu, die anstelle von benutzerdefinierten Symbolressourcen verwendet werden sollen. - Fügen Sie
MediaSessionService.isPlaybackOngoing()hinzu, damit Apps abfragen können, ob der Dienst inonTaskRemoved()beendet werden muss (#1219). - Füge
MediaSessionService.pauseAllPlayersAndStopSelf()hinzu, um die Wiedergabe aller Sitzungen anzuhalten, und rufestopSelf()auf, um den Lebenszyklus vonMediaSessionServicezu beenden. - Überschreiben Sie
MediaSessionService.onTaskRemoved(Intent), um eine sichere Standardimplementierung bereitzustellen, die den Dienst im Vordergrund ausführt, wenn die Wiedergabe läuft, oder den Dienst andernfalls beendet. - Die Fortschrittsanzeige in der Medienbenachrichtigung für Livestreams wird ausgeblendet, wenn die Dauer nicht in den Metadaten der Plattform-Sitzung festgelegt wird (#1256).
- Die Konvertierung von
MediaMetadatazuMediaDescriptionCompatmuss so erfolgen, dass bei der Auswahl von Metadateneigenschaften dieselbe bevorzugte Reihenfolge und Logik wie in media1 verwendet wird. MediaSession.sendError()hinzugefügt, damit nicht schwerwiegende Fehler an den Media3-Controller gesendet werden können. Wenn Sie den Notification Controller verwenden (sieheMediaSession.getMediaNotificationControllerInfo()), wird der benutzerdefinierte Fehler verwendet, um denPlaybackStateder Plattform-Session mit den angegebenen Fehlerinformationen in einen Fehlerstatus zu ändern (#543).- Fügen Sie
MediaSession.Callback.onPlayerInteractionFinished()hinzu, um Sitzungen darüber zu informieren, wenn eine Reihe von Spielerinteraktionen von einem bestimmten Controller abgeschlossen ist. - Fügen Sie
SessionErrorhinzu und verwenden Sie es inSessionResultundLibraryResultanstelle des Fehlercodes, um weitere Informationen zum Fehler und zur Behebung des Fehlers (falls möglich) bereitzustellen. - Veröffentliche den Code für die Media3 Controller Test App, mit der Interaktionen mit Apps getestet werden können, die eine Mediensitzung veröffentlichen.
- Extras, die an
MediaSession[Builder].setSessionExtras()von Media3 übergeben werden, anPlaybackStateCompat.getExtras()eines Media1-Controllers weitergeben. - Schwerwiegende und nicht schwerwiegende Fehler der Plattform-Session zuordnen. Ein
PlaybackExceptionwird einem schwerwiegenden Fehlerstatus desPlaybackStateCompatzugeordnet. EinSessionError, das mitMediaSession.sendError(ControllerInfo, SessionError)an den Media Notification Controller gesendet wird, wird inPlaybackStateCompateinem nicht schwerwiegenden Fehler zugeordnet. Das bedeutet, dass Fehlercode und ‑meldung festgelegt werden, der Status der Plattform-Session jedoch nicht inSTATE_ERRORgeändert wird. - Ermöglicht es, die Sitzungsaktivität pro Controller festzulegen, um die globale Sitzungsaktivität zu überschreiben. Die Sitzungsaktivität kann für einen Controller bei der Verbindung definiert werden, indem ein
ConnectionResultmitAcceptedResultBuilder.setSessionActivivty(PendingIntent)erstellt wird. Sobald die Verbindung hergestellt ist, kann die Sitzungsaktivität mitMediaSession.setSessionActivity(ControllerInfo, PendingIntent)aktualisiert werden. - Die Fehlerreplikation von Aufrufen von
MediaLibrarySession.Callbackwurde verbessert. Die Fehlerreplikation kann jetzt mitMediaLibrarySession.Builder.setLibraryErrorReplicationMode()konfiguriert werden, um den Fehlertyp auszuwählen oder die Fehlerreplikation zu deaktivieren, die standardmäßig aktiviert ist.
- Ändere den Standardwert von
- UI:
- Unterstützung für die Bildanzeige in
PlayerViewhinzufügen, wenn eine Verbindung zu einemExoPlayerbesteht (#1144). - Es wurde die Möglichkeit hinzugefügt, verschiedene Symbole in
PlayerControlViewüber XML-Attribute anzupassen, um unterschiedliche Drawables proPlayerView-Instanz zu ermöglichen und nicht nur globale Überschreibungen (#1200). - Umgehen eines Plattformfehlers, der bei Verwendung von
SurfaceViewin einem Compose-AndroidViewauf API 34 zu gestreckten oder zugeschnittenen Videos führt (#1237).
- Unterstützung für die Bildanzeige in
- Downloads:
- Achten Sie darauf, dass
DownloadHelperkeine nicht veröffentlichtenRenderer-Instanzen weitergibt, da dies letztendlich dazu führen kann, dass eine App mitIllegalStateException: Too many receivers, total of 1000, registered for pidabstürzt (#1224).
- Achten Sie darauf, dass
- Cronet-Erweiterung:
- Behebe das Problem
SocketTimeoutExceptioninCronetDataSource. In einigen Versionen von Cronet ist die vom Callback bereitgestellte Anfrage nicht immer dieselbe. Dies führt dazu, dass der Callback nicht abgeschlossen wird und die Zeit für die Anfrage abläuft (https://issuetracker.google.com/328442628).
- Behebe das Problem
- HLS-Erweiterung:
- Es wurde ein Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Unterbrechung warteten, in
HlsSampleStreamWrappermit einem falschen Offset delegiert wurden, was zu einemIndexOutOfBoundsExceptionoder einemIllegalArgumentExceptionführte (#1002). - Ein Fehler wurde behoben, durch den nicht primäre Playlists für LL-HLS-Streams immer wieder neu geladen wurden (#1240).
- Es wurde ein Fehler behoben, durch den die Aktivierung von CMCD für HLS mit Initialisierungssegmenten zu
Source ErrorundIllegalArgumentExceptionführte. - Behebung eines Fehlers, durch den nicht primäre Playlists während der Livewiedergabe nicht aktualisiert wurden (#1240).
- Ein Fehler wurde behoben, bei dem die Aktivierung von CMCD für HLS-Livestreams zu
ArrayIndexOutOfBoundsExceptionführte ( (#1395).
- Es wurde ein Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Unterbrechung warteten, in
- DASH-Erweiterung:
- Cast-Erweiterung:
- Fehler behoben, durch den der Albumtitel von
MediaQueueItemim Media3-Media-Item in den Künstlernamen umgewandelt wurde (#1255).
- Fehler behoben, durch den der Albumtitel von
- Test-Tools:
- Implementieren Sie
onInit()undonRelease()inFakeRenderer. - Ändern Sie
TestPlayerRunHelper.runUntil()/playUntil()-Methoden so, dass sie bei nicht schwerwiegenden Fehlern (z.B. bei Fehlern, die anAnalyticsListener.onVideoCodecError()gemeldet werden) fehlschlagen. Verwenden Sie die neueTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()-Methodenkette, um dieses Verhalten zu deaktivieren.
- Implementieren Sie
- Demo-App:
- Verwenden Sie
DefaultPreloadManagerin der Demo-App für Kurzformen. - Wiederholungsmodus kann mit
Intent-Argumenten über die Befehlszeile festgelegt werden (#1266). - Verwenden Sie
HttpEngineDataSourcealsHttpDataSource, wenn das Gerät dies unterstützt.
- Verwenden Sie
- Entfernen Sie die veralteten Symbole:
- Entfernen Sie
CronetDataSourceFactory. Verwenden Sie stattdessenCronetDataSource.Factory. - Einige
DataSpec-Konstruktoren entfernen. Verwenden Sie stattdessenDataSpec.Builder. - Entfernen Sie die Methode
setContentTypePredicate(Predicate)ausDefaultHttpDataSource,OkHttpDataSourceundCronetDataSource. Verwenden Sie stattdessen die entsprechende Methode für jedesXXXDataSource.Factory. - Entfernen Sie
OkHttpDataSource-Konstruktoren undOkHttpDataSourceFactory. Verwenden Sie stattdessenOkHttpDataSource.Factory. - Entfernen Sie
PlayerMessage.setHandler(Handler). Verwenden Sie stattdessensetLooper(Looper). - Entfernen Sie das Feld „
Timeline.Window.isLive“. Verwenden Sie stattdessen die MethodeisLive(). - Entfernen Sie
DefaultHttpDataSource-Konstruktoren. Verwenden Sie stattdessenDefaultHttpDataSource.Factory. - Entfernen Sie
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Verwenden Sie stattdessenDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS. - Entfernen Sie
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Verwenden Sie stattdessenMediaCodecInfo.canReuseCodec(Format, Format). - Entfernen Sie die Methode
DrmSessionManager.DUMMYundgetDummyDrmSessionManager(). Verwenden Sie stattdessenDrmSessionManager.DRM_UNSUPPORTED. - Entferne
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Verwenden Sie stattdessen die Überladungen, die einDecoderReuseEvaluationakzeptieren. - Entfernen Sie die Konstanten
RendererSupport.FormatSupportIntDef undFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPEundFORMAT_UNSUPPORTED_TYPE. Verwenden Sie stattdessen die entsprechenden IntDef- und Konstanten inandroidx.media3.common.C(z.B.C.FORMAT_HANDLED). - Entfernen Sie die
Bundleable-Schnittstelle. Dazu gehört auch das Entfernen aller konstantenBundleable.Creator<Foo> CREATOR-Felder. Aufrufer sollten stattdessen die MethodenBundle toBundle()undstatic Foo fromBundle(Bundle)für jeden Typ verwenden.
- Entfernen Sie
Version 1.4.0-rc01
10. Juli 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-beta01
26. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha02
7. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha01
17. April 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.3.0
Version 1.3.1
11. April 2024
androidx.media3:media3-*:1.3.1 ist veröffentlicht.
Version 1.3.1 enthält diese Commits.
- Gemeinsame Mediathek:
- Fügen Sie
Format.labelshinzu, um lokalisierte oder andere alternative Labels zuzulassen.
- Fügen Sie
- ExoPlayer:
- Das Problem, dass
PreloadMediaPerioddie Streams nicht beibehalten kann, wenn sie noch einmal vorab geladen wird, wurde behoben. - Wenden Sie bei der erneuten Auswahl von Tracks das richtige
TrackSelectionResultfür den Wiedergabezeitraum an. - Renderer mit Early-Enablement sollten erst nach dem Fortschreiten des Wiedergabezeitraums gestartet werden, wenn zwischen Media-Elementen gewechselt wird (#1017).
- Der ProGuard-Regel
-keepclasseswithmembersfürDefaultVideoFrameProcessor.Factory.Builder.build()wurde der fehlende Rückgabetyp hinzugefügt (#1187).
- Das Problem, dass
- Transformer:
- Es wurde eine Problemumgehung für Ausnahmen hinzugefügt, die aufgrund von
MediaMuxerausgelöst werden, da negative Präsentationszeitstempel vor API 30 nicht unterstützt werden.
- Es wurde eine Problemumgehung für Ausnahmen hinzugefügt, die aufgrund von
- Titelauswahl:
DefaultTrackSelector: Bevorzuge Videotracks mit einer „angemessenen“ Framerate (>=10 fps) gegenüber solchen mit einer niedrigeren oder nicht festgelegten Framerate. So wird sichergestellt, dass der Player den „echten“ Videotrack in MP4-Dateien auswählt, die aus Bewegungsfotos extrahiert wurden. Diese können zwei HEVC-Tracks enthalten, von denen einer eine höhere Auflösung, aber eine sehr geringe Anzahl von Frames hat (#1051).
- Extraktoren:
- Ein Problem wurde behoben, bei dem das Padding beim Lesen von Chunks mit ungerader Größe aus WAV-Dateien nicht übersprungen wurde (#1117).
- MP3: Füllen Sie
Format.averageBitrateaus Metadaten-Frames wieXINGundVBRI. - MPEG-TS: Eine Änderung wurde rückgängig gemacht, die sicherstellen sollte, dass der letzte Frame gerendert wird. Dazu wurde die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergeben (#7909). Das liegt daran, dass die Änderung neue Probleme mit reinen I-Frame-HLS-Streams (#1150) und H.262-HLS-Streams (#1126) verursacht.
- Audio:
- Wiedergabe-Engine-Wiederherstellung ermöglichen, indem das Offloading deaktiviert wird, wenn die Initialisierung des Audiotracks im Offload-Modus fehlschlägt.
- Video:
- Es wurde eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, dem Chromecast mit Google TV und dem Lenovo M10 FHD Plus hinzugefügt, das dazu führt, dass H265-Streams mit 60 fps als nicht unterstützt markiert werden.
- Es wurde ein Workaround hinzugefügt, der dafür sorgt, dass der erste Frame beim Tunneling immer gerendert wird, auch wenn das Gerät dies nicht automatisch wie von der API gefordert tut (#1169). (#966).
- Es wurde ein Problem behoben, bei dem die Verarbeitung von HDR-Farbinformationen zu einem fehlerhaften Verhalten des Codecs führte und adaptive Formatwechsel für SDR-Videotracks verhindert wurden (#1158).
- Text:
- WebVTT: Verhindern, dass direkt aufeinanderfolgende Cues fälschlicherweise zusätzliche
CuesWithTiming-Instanzen ausWebvttParser.parseerstellen (#1177).
- WebVTT: Verhindern, dass direkt aufeinanderfolgende Cues fälschlicherweise zusätzliche
- DRM:
- Umgehen Sie eine
NoSuchMethodError, die vomMediaDrm-Framework anstelle vonResourceBusyExceptionoderNotProvisionedExceptionauf einigen Android 14-Geräten ausgelöst werden kann (#1145).
- Umgehen Sie eine
- Wirkung:
- Verbessertes Tone-Mapping von PQ zu SDR durch Konvertieren von Farbräumen.
- Sitzung:
- UI:
- Als Fallback wird der Name der Audiotrack-Sprache verwendet, wenn
Localekeinen Anzeigenamen ermitteln kann (#988).
- Als Fallback wird der Name der Audiotrack-Sprache verwendet, wenn
- DASH-Erweiterung:
- Füllen Sie alle
Label-Elemente aus dem Manifest inFormat.labelsein (#1054).
- Füllen Sie alle
- RTSP-Erweiterung:
- Leere Werte für Sitzungsinformationen (i-Tags) beim SDP-Parsing überspringen (#1087).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Die MIDI-Erweiterung ist standardmäßig als lokale Abhängigkeit deaktiviert, da ein zusätzliches Maven-Repository konfiguriert werden muss. Nutzer, die dieses Modul aus einer lokalen Abhängigkeit benötigen, können es wieder aktivieren.
Version 1.3.0
6. März 2024
androidx.media3:media3-*:1.3.0 ist veröffentlicht.
Version 1.3.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Implementieren Sie die Unterstützung für
android.resource://package/[type/]name-Rohressourcen-URIs, wobei sichpackagevom Paket der aktuellen Anwendung unterscheidet. Das hat immer funktioniert, war aber bisher nicht richtig implementiert. - MIME-Typen, die vom App-Code festgelegt oder aus Medien gelesen werden, werden normalisiert, sodass sie nur aus Kleinbuchstaben bestehen.
- Definieren Sie Anzeigen mit einem vollständigen
MediaItemanstelle eines einzelnenUriinAdPlaybackState. - Erhöhen Sie
minSdkauf 19 (Android KitKat). Dies entspricht allen anderen AndroidX-Bibliotheken und ist erforderlich, damit wir auf die neuesten Versionen unserer AndroidX-Abhängigkeiten aktualisieren können. - Füllen Sie sowohl
artworkUrials auchartworkDatainMediaMetadata.Builder.populate(MediaMetadata)aus, wenn mindestens eines der beiden Elemente nicht null ist (#964).
- Implementieren Sie die Unterstützung für
- ExoPlayer:
- Fügen Sie
PreloadMediaSourceundPreloadMediaPeriodhinzu, damit Apps eine Inhaltsquelle für Medien an einer bestimmten Startposition vor der Wiedergabe vorab laden können.PreloadMediaSourcebereitet die Inhaltsmedienquelle für den Empfang vonTimelinevor, bereitet den Zeitraum an der angegebenen Startposition vor und speichert ihn im Cache, wählt Tracks aus und lädt die Media-Daten für den Zeitraum. Apps steuern den Preload-Fortschritt durch die Implementierung vonPreloadMediaSource.PreloadControlund legen die vorab geladene Quelle für die Wiedergabe im Player fest. - Fügen Sie
ExoPlayer.setImageOutputhinzu, damit AppsImageRenderer.ImageOutputfestlegen können. DefaultRenderersFactorystellt dem Player jetzt standardmäßig einImageRenderermit nullImageOutputundImageDecoder.Factory.DEFAULTzur Verfügung.- Das
Player.Listener.onPositionDiscontinuity-Ereignis wird ausgegeben, wenn Stille übersprungen wird (#765). - Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzugefügt. Sie können diese Option mit
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()aktivieren. - Unterstützung für adaptive Media-Quellen mit
PreloadMediaSource. - Implementieren Sie
HttpEngineDataSource, eineHttpDataSourcemit der HttpEngine API. - Unterklassenbildung verhindern
CompositeSequenceableLoaderDiese Komponente wurde bereits erweiterbar gemacht, aber nie in der Bibliothek untergeordnet. Sie können eine Instanz mit dem Decorator-Muster umschließen und eine benutzerdefinierteCompositeSequenceableLoaderFactoryimplementieren. - Ein Problem wurde behoben, bei dem durch Wiederholen derselben Zeit die Metadaten dieses Elements gelöscht wurden (#1007).
- Benennen Sie die
experimentalSetSubtitleParserFactory-Methoden fürBundledChunkExtractor.FactoryundDefaultHlsExtractorFactoryinsetSubtitleParserFactoryum und verbieten Sie die Übergabe vonnull. Verwenden Sie die neuenexperimentalParseSubtitlesDuringExtraction(boolean)-Methoden, um das Parsing-Verhalten zu steuern. - Unterstützung für die Anpassung des
SubtitleParser.Factoryhinzugefügt, das während der Extraktion verwendet wird. Dies kann mitMediaSource.Factory.setSubtitleParserFactory()erreicht werden. - Fügen Sie allen
Format.id-Feldern, die ausMergingMediaSourcegeneriert werden, das Quellpräfix hinzu. So lässt sich ermitteln, welche Quelle eineFormatgeneriert hat (#883). - Der reguläre Ausdruck, der zum Validieren benutzerdefinierter CMCD-Schlüsselnamen (Common Media Client Data) verwendet wird, wurde korrigiert. Er prüft jetzt nur noch auf Bindestriche (#1028).
- Doppelte Codierung von CMCD-Abfrageparametern beenden (#1075).
- Fügen Sie
- Transformer:
- Unterstützung für das Zusammenführen von H.265/HEVC-Zeitlupenvideos im SEF-Format hinzugefügt
- Die Transmuxing-Geschwindigkeit wurde erhöht, insbesondere bei Bearbeitungen vom Typ „Video entfernen“.
- Fügen Sie eine API hinzu, damit die Ausgabedatei mit einem Videobild beginnt. Dadurch kann die Ausgabe von Zuschneidevorgängen besser mit Player-Implementierungen kompatibel sein, die den ersten Videoframes erst dann anzeigen, wenn ihr Präsentationszeitstempel (#829) erreicht ist.
- Unterstützung für die Optimierung von MP4-Zuschneidevorgängen für einzelne Assets wurde hinzugefügt.
- Unterstützung hinzugefügt, um sicherzustellen, dass ein Videobild den ersten Zeitstempel in der Ausgabedatei hat. Es wurde ein Fehler behoben, durch den Ausgabedateien auf iOS-basierten Playern mit einem schwarzen Frame begannen (#829).
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.selectImageTrackhinzu, um die Auswahl von Bild-Tracks zu aktivieren. - Fügen Sie
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledhinzu, um festzulegen, ob ein Bild-Track ausgewählt werden soll, wenn sowohl ein Bild- als auch ein Video-Track verfügbar sind. Der Standardwert istfalse. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
- Fügen Sie
- Extraktoren:
- Dem MP4-Extractor wurde zusätzliches AV1C-Parsing hinzugefügt, um die Werte
ColorInfo.colorSpace,ColorInfo.colorTransferundColorInfo.colorRangeabzurufen (#692). - MP3: Verwenden Sie die Suche mit konstanter Bitrate (CBR) für Dateien mit einem
Info-Header (das CBR-Äquivalent desXing-Headers). Bisher haben wir die Suchtabelle aus demInfo-Header verwendet. Dies führt jedoch zu einer weniger präzisen Suche als wenn wir sie ignorieren und davon ausgehen, dass die Datei CBR ist. - MPEG2-TS: Unterstützung für DTS, DTS-LBR und DTS:X Profile2 hinzugefügt (#275).
- Audiotypen aus TS-Deskriptoren extrahieren und Rollenflags zuordnen, damit Nutzer fundiertere Entscheidungen bei der Auswahl von Audiotracks treffen können (#973).
- Dem MP4-Extractor wurde zusätzliches AV1C-Parsing hinzugefügt, um die Werte
- Audio:
- Video:
- Ändern Sie den
MediaCodecVideoRenderer-Konstruktor, der einVideoFrameProcessor.Factory-Argument verwendet, und ersetzen Sie ihn durch einen Konstruktor, der einVideoSinkProvider-Argument verwendet. Apps, die ein benutzerdefiniertesVideoFrameProcessor.Factoryeinfügen möchten, können einCompositingVideoSinkProviderinstanziieren, das das benutzerdefinierteVideoFrameProcessor.Factoryverwendet, und den Video-Sink-Anbieter anMediaCodecVideoRendererübergeben.
- Ändern Sie den
- Text:
- Die Serialisierung von Bitmap-Hinweisen wurde korrigiert, um den Fehler
Tried to marshall a Parcel that contained Binder objectsbei Verwendung vonDefaultExtractorsFactory.setTextTrackTranscodingEnabledzu beheben (#836). - CEA-708: Ignoriere den Wert
rowLock. In der CEA-708-E S-2023-Spezifikation wird angegeben, dass sowohlrowLockals auchcolumnLockals „true“ angenommen werden sollten, unabhängig von den im Stream vorhandenen Werten (columnLockwird nicht unterstützt, daher wird effektiv immer „false“ angenommen).
- Die Serialisierung von Bitmap-Hinweisen wurde korrigiert, um den Fehler
- Bild:
- Unterstützung für DASH-Thumbnails hinzugefügt Rasterbilder werden zugeschnitten und einzelne Thumbnails werden
ImageOutputkurz vor dem jeweiligen Präsentationszeitpunkt bereitgestellt.
- Unterstützung für DASH-Thumbnails hinzugefügt Rasterbilder werden zugeschnitten und einzelne Thumbnails werden
- DRM:
- Spiele unverschlüsselte „Clear Lead“-Samples in DRM-Inhalten sofort ab, auch wenn die Schlüssel für die späteren verschlüsselten Samples noch nicht verfügbar sind. Dies kann zu Unterbrechungen während der Wiedergabe führen, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Zuvor hätte die Wiedergabe jedoch überhaupt nicht begonnen. Dieses Verhalten kann mit
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyoderDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysdeaktiviert werden.
- Spiele unverschlüsselte „Clear Lead“-Samples in DRM-Inhalten sofort ab, auch wenn die Schlüssel für die späteren verschlüsselten Samples noch nicht verfügbar sind. Dies kann zu Unterbrechungen während der Wiedergabe führen, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Zuvor hätte die Wiedergabe jedoch überhaupt nicht begonnen. Dieses Verhalten kann mit
- IMA-Erweiterung:
- Ein Problem wurde behoben, durch das DASH- und HLS-Anzeigen ohne die entsprechende Dateiendung nicht abgespielt werden konnten.
- Sitzung:
- Doppelklickerkennung für TV-Apps deaktivieren (#962).
- Ein Problem wurde behoben, bei dem
MediaItem.RequestMetadatamit nur nicht leeren Extras nicht zwischen Media-Controllern und Sitzungen übertragen wurde. - Fügen Sie
MediaLibrarySession.Buildereinen Konstruktor hinzu, der nur einContextanstelle einesMediaLibraryServiceakzeptiert.
- HLS-Erweiterung:
- Reduzieren Sie
HlsMediaPeriodauf die Sichtbarkeit „package-private“. Von außerhalb des HLS-Pakets sollte nicht direkt von diesem Typ abgeleitet werden. - Die Auflösung wird effizienter zum Beginn eines Segments gesucht (#1031).
- Reduzieren Sie
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- MIDI-Decoder: SysEx-Ereignismeldungen ignorieren (#710).
- Test-Tools:
- Pausiere die Wiedergabe in
TestPlayerRunHelper.playUntilPositionnicht. Beim Test wird die Wiedergabe fortgesetzt, aber der Fortschritt wird angehalten, bis der Test Zusicherungen und weitere Aktionen hinzufügen kann.
- Pausiere die Wiedergabe in
- Demo-App:
- Füge ein Shortform-Demomodul hinzu, um die Verwendung von
PreloadMediaSourceim Anwendungsfall für Shortform-Inhalte zu demonstrieren.
- Füge ein Shortform-Demomodul hinzu, um die Verwendung von
Version 1.3.0-rc01
22. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-beta01
7. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-alpha01
15. Januar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.2.0
Version 1.2.1
9. Januar 2024
- ExoPlayer:
- Ein Problem wurde behoben, durch das bei manuellen Suchvorgängen außerhalb des Bereichs
LiveConfiguration.min/maxOffsetder Offset immer wieder aufmin/maxOffsetzurückgesetzt wurde. - Das Problem wurde behoben, dass die OPUS- und VORBIS-Channel-Layouts für 3, 5, 6, 7 und 8 Channels falsch waren (#8396).
- Ein Problem wurde behoben, durch das die Auswahl von Tracks nach dem Zurückspulen auf null in einem Livestream fälschlicherweise dazu führte, dass der Stream an der Standardposition gestartet wurde (#9347).
- Das Problem wurde behoben, dass neue Instanzen von
CmcdData.Factorynegative Werte fürbufferedDurationUsaus Chunk-Quellen erhalten haben, was zu einemIllegalArgumentException(#888) geführt hat.
- Ein Problem wurde behoben, durch das bei manuellen Suchvorgängen außerhalb des Bereichs
- Transformer:
- Problem umgehen, bei dem der Encoder bei der Konfiguration aufgrund einer hohen Betriebsrate einen Fehler ausgibt.
- Extraktoren:
- Markieren Sie sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Bewegungsfotos als
ROLE_FLAG_ALTERNATE, damit sie aufgrund ihrer höheren Auflösung nicht automatisch für die Wiedergabe ausgewählt werden. - Falsche Keyframe-Erkennung für TS-H264-Streams korrigieren (#864)
- Die Schätzung der Dauer von TS-Streams, die länger als 47.721 Sekunden sind, wurde korrigiert (#855).
- Markieren Sie sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Bewegungsfotos als
- Audio:
- Die Verarbeitung von EOS für
SilenceSkippingAudioProcessorwurde korrigiert, wenn sie mehrmals aufgerufen wird (#712).
- Die Verarbeitung von EOS für
- Video:
- Es wurde eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzugefügt, das dazu führt, dass AVC-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#693).
- Metadaten:
- Ein Fehler wurde behoben, bei dem
MediaMetadatanur aus Vorbis-Kommentaren mit Großbuchstabenschlüsseln gefüllt wurde (#876). OutOfMemoryErrorwird abgefangen, wenn sehr große ID3-Frames geparst werden. Die Wiedergabe kann also ohne die Tag-Informationen fortgesetzt werden, anstatt dass sie komplett fehlschlägt.
- Ein Fehler wurde behoben, bei dem
- DRM:
- Die Problemumgehung für die fälschliche ClearKey-Lizenz-URL
https://default.urlwurde auf API 33 und höher ausgeweitet. Zuvor wurde sie nur auf API 33 angewendet (#837). - Es wurde ein Problem mit
ERROR_DRM_SESSION_NOT_OPENEDbehoben, das beim Wechsel von verschlüsselten zu unverschlüsselten Inhalten auftrat, wenn dem Player keine Oberfläche zugewiesen war. Der Fehler ist aufgetreten, weil ein sicherer Decoder fälschlicherweise zum Abspielen der unverschlüsselten Inhalte verwendet wurde.
- Die Problemumgehung für die fälschliche ClearKey-Lizenz-URL
- Sitzung:
- Die benutzerdefinierten Schlüssel und Werte werden in
MediaMetadataCompatbisMediaMetadata.extrasundMediaMetadata.extrasbisMediaMetadataCompateingefügt (#756, #802). - Problem mit der Übertragung
notifyChildrenChangedfür Legacy-Controller behoben (#644). - Ein Fehler wurde behoben, bei dem das Festlegen einer negativen Zeit für einen deaktivierten
setWhen-Timer der Benachrichtigung auf einigen Geräten zu einem Absturz führte (#903). - Behebe
IllegalStateException, wenn der Media-Benachrichtigungscontroller die Verbindung noch nicht abgeschlossen hat, wenn das erste Benachrichtigungsupdate angefordert wird (#917).
- Die benutzerdefinierten Schlüssel und Werte werden in
- UI:
- Ein Problem wurde behoben, bei dem die Schaltflächen zum Vor- und Zurückspulen nicht sichtbar waren, wenn sie mit Material Design in einem BottomSheetDialogFragment verwendet wurden (#511).
- Das Problem, dass die Zahlen auf der Schnellvorlauftaste des
PlayerControlViewfalsch ausgerichtet waren (#547), wurde behoben.
- DASH-Erweiterung:
- „f800“ als Kanalanzahl 5 für Dolby im DASH-Manifest parsen (#688).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Cast-Erweiterung:
- Die Erstellung von
Timelinewurde bereinigt, damit die App nicht abstürzt, wenn das Laden von Media auf dem Cast-Gerät fehlschlägt (#708).
- Die Erstellung von
Version 1.2.0
15. November 2023
- Gemeinsame Mediathek:
- Fügen Sie den Methoden in der
Log.Logger-Schnittstelle einen@Nullable Throwable-Parameter hinzu. Der Parametermessagefür diese Methoden enthält keine Informationen mehr zuThrowable, das an dieLog.{d,i,w,e}()-Methoden übergeben wurde. Implementierungen müssen diese Informationen daher bei Bedarf manuell anhängen (möglicherweise mitLogger.appendThrowableString(String, Throwable)). - Ein Kotlin-Kompatibilitätsproblem wurde behoben, bei dem generische Typparameter, die Nullwerte zulassen, und Array-Elementtypen, die Nullwerte zulassen, nicht als Nullwerte zulassend erkannt wurden. Beispiele sind die Methodenparameter
TrackSelectorResultundSimpleDecoder(#6792). - Ändern Sie das Standardverhalten der Benutzeroberfläche und der Benachrichtigungen in
Util.shouldShowPlayButton, um eine Schaltfläche zum Abspielen anzuzeigen, wenn die Wiedergabe vorübergehend unterdrückt wird (z.B. aufgrund eines vorübergehenden Verlusts des Audiofokus). Das alte Verhalten kann beibehalten werden, indem SiePlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)oderMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)verwenden (#11213). - Führen Sie ein Upgrade von
androidx.annotation:annotation-experimentalauf1.3.1durch, um das Problem unter https://issuetracker.google.com/251172715 zu beheben. - Verschieben Sie
ExoPlayer.setAudioAttributeszurPlayer-Schnittstelle.
- Fügen Sie den Methoden in der
- ExoPlayer:
- Problem mit der Suche in AC4-Streams behoben, das dadurch verursacht wurde, dass „decode-only“-Samples nicht richtig identifiziert wurden (#11000).
- Wiedergabe auf ungeeigneten Audioausgabegeräten (z.B. dem integrierten Lautsprecher auf Wear OS-Geräten) unterdrücken, wenn diese Funktion über
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutputaktiviert ist. Der Grund für die Unterdrückung der Wiedergabe wird aufPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTaktualisiert, wenn die Wiedergabe versucht wird, wenn keine geeigneten Audioausgänge verfügbar sind, oder wenn alle geeigneten Ausgänge während der Wiedergabe getrennt werden. Der Grund für die Unterdrückung wird entfernt, wenn eine geeignete Ausgabe verbunden ist. - Fügen Sie
MediaSource.canUpdateMediaItemundMediaSource.updateMediaItemhinzu, umMediaItem-Aktualisierungen nach der Erstellung überPlayer.replaceMediaItem(s)zu akzeptieren. MediaItem-Updates für alleMediaSource-Klassen, die von der Bibliothek bereitgestellt werden, überPlayer.replaceMediaItem(s)zulassen (#33, #9978).- Benennen Sie
MimeTypes.TEXT_EXOPLAYER_CUESinMimeTypes.APPLICATION_MEDIA3_CUESum. - Fügen Sie
PngExtractorhinzu, um eine ganze PNG-Datei als ein Beispiel inTrackOutputzu senden und zu lesen. - Die Methode
SequenceableLoader.continueLoading(long)in der SchnittstelleSequenceableLoaderwurde verbessert, umSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfoenthält neben dem vorhandenenplaybackPositionUszusätzliche Parameter, darunterplaybackSpeedundlastRebufferRealtimeMs. - Erweitere die Methode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)in der SchnittstelleChunkSourcezuChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: „buffer starvation“ (
bs), „deadline“ (dl), „playback rate“ (pr) und „startup“ (su) (#8699). - Luma- und Chroma-Bit-Tiefe zu
ColorInfohinzufügen (#491). - Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: nächste Objektanfrage (
nor) und nächste Bereichsanfrage (nrr) (#8699). - Funktionalität zum Übertragen von CMCD-Daten (Common Media Client Data) mithilfe von Abfrageparametern hinzufügen (#553).
- Behebe das Problem mit
ConcurrentModificationExceptioninExperimentalBandwidthMeter(#612). - Fügen Sie
CompositeMediaSource.getMediaTimeForChildMediaTimeden ParameterMediaPeriodIdhinzu. - Unterstützung von
ClippingMediaSource(und anderen Quellen mit Zeitversatz für Zeitraum/Zeitfenster) inConcatenatingMediaSource2(#11226). - Ändern Sie
BaseRenderer.onStreamChanged()so, dass auch einMediaPeriodId-Argument empfangen wird.
- Transformer:
- EXIF-Rotationsdaten für Bildeingaben parsen.
- Entfernen Sie den Annotationstyp
TransformationRequest.HdrModeund die zugehörigen Konstanten. Verwenden Sie stattdessenComposition.HdrModeund die zugehörigen Konstanten. - Vereinfachen Sie die
OverlaySettings, um Probleme mit der Drehung zu beheben. - Die Parameter
frameRateunddurationUsvonSampleConsumer.queueInputBitmapwurden inTimestampIteratorgeändert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenesshinzu, um die nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Die Standardeinstellung bleibt beitrue.
- Fügen Sie
- Extraktoren:
- MPEG-TS: Achten Sie darauf, dass der letzte Frame gerendert wird, indem Sie die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergeben (#7909).
- Tippfehler bei der Bestimmung von
rotationDegreesbehoben.projectionPosePitchwurde inprojectionPoseRollgeändert (#461). - Die Annahme, dass
Extractor-Instanzen direkt mitinstanceofgeprüft werden können, wird entfernt. Wenn Sie Laufzeitzugriff auf die Implementierungsdetails einesExtractorbenötigen, müssen Sie zuerstExtractor.getUnderlyingInstanceaufrufen. - Fügen Sie
BmpExtractorhinzu. - Fügen Sie
WebpExtractorhinzu. - Fügen Sie
HeifExtractorhinzu. - QuickTime Classic-Unterstützung für
Mp4Extractorhinzufügen
- Audio:
- Unterstützung für 24-/32-Bit-Big-Endian-PCM in MP4 und Matroska hinzugefügt und PCM-Codierung für
lpcmin MP4 geparst. - Unterstützung für das Extrahieren von Vorbis-Audio in MP4 hinzugefügt.
- Füge
AudioSink.getFormatOffloadSupport(Format)hinzu, um den Grad der Offload-Unterstützung abzurufen, die das Senken für das Format über eineDefaultAudioOffloadSupportProviderbieten kann. Es wird das neueAudioOffloadSupportzurückgegeben, dasisFormatSupported,isGaplessSupportedundisSpeedChangeSupportedenthält. - Fügen Sie
AudioSink.setOffloadMode()hinzu, über das die Offload-Konfiguration auf der Audio-Senke konfiguriert wird. Der Standardwert istAudioSink.OFFLOAD_MODE_DISABLED. - Die Auslagerung kann über
setAudioOffloadPreferenceinTrackSelectionParametersaktiviert werden. Wenn die festgelegte Einstellung „Aktivieren“ lautet, das Gerät das Offload für das Format unterstützt und die Titelauswahl ein einzelner Audiotrack ist, wird Audio-Offload aktiviert. - Wenn
audioOffloadModePreferenceaufAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIREDgesetzt ist, wird mitDefaultTrackSelectornur ein Audiotrack ausgewählt und nur, wenn das Format dieses Tracks im Offload unterstützt wird. Wenn kein Audiotrack für den Offload unterstützt wird, wird kein Track ausgewählt. - Die Unterstützung von nahtlosem Offload wird für Geräte vor API-Level 33 deaktiviert, da es nach dem Übergang zwischen Titeln zu Problemen mit der Wiedergabeposition kommt.
- Entfernen Sie den Parameter
enableOffloadaus der MethodensignaturDefaultRenderersFactory.buildAudioSink. - Entfernen Sie die Methode
DefaultAudioSink.Builder.setOffloadMode. - Entfernen Sie den intdef-Wert
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Unterstützung für Opus-Metadaten für lückenlose Wiedergabe während der Offload-Wiedergabe hinzugefügt.
- Renderer-Wiederherstellung durch Deaktivieren des Offloads ermöglichen, wenn der erste Schreibvorgang fehlgeschlagen ist (#627).
- Standardmäßig die Offload-Planung für die Offload-Wiedergabe nur von Audio aktivieren.
- Löschen Sie
ExoPlayer.experimentalSetOffloadSchedulingEnabledundAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. onExperimentalSleepingForOffloadChangedwurde inonSleepingForOffloadChangedundonExperimentalOffloadedPlaybackinonOffloadedPlaybackumbenannt.- Verschieben Sie die
TrackSelectionParameters-Schnittstellen und ‑Definitionen für den Audio-Offload-Modus in eine innereAudioOffloadPreferences-Klasse. - Fügen Sie
onAudioTrackInitialized- undonAudioTrackReleased-Callbacks zuAnalyticsListener,AudioRendererEventListenerundAudioSink.Listenerhinzu. - Problem mit DTS Express-Audio-Pufferunterlauf behoben (#650).
- Fehler behoben, bei dem die Prüfung der E-AC3-JOC-Funktionen einen
IllegalArgumentException-Fehler auslöste (#677).
- Unterstützung für 24-/32-Bit-Big-Endian-PCM in MP4 und Matroska hinzugefügt und PCM-Codierung für
- Video:
MediaCodecVideoRendererdarf eine benutzerdefinierteVideoFrameProcessor.Factoryverwenden.- Es wurde ein Fehler behoben, bei dem der erste Frame nicht gerendert werden konnte, wenn der Audiostream mit negativen Zeitstempeln beginnt (#291).
- Text:
- Entfernen Sie
ExoplayerCuesDecoder. Textspuren mitsampleMimeType = application/x-media3-cueswerden jetzt direkt vonTextRendererverarbeitet, ohne dass eineSubtitleDecoder-Instanz erforderlich ist.
- Entfernen Sie
- Metadaten:
MetadataDecoder.decodewird für „Nur-Decodieren“-Samples nicht mehr aufgerufen, da die Implementierung ohnehin „null“ zurückgeben muss.
- Wirkung:
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)-Bitmap-Eingabe nach Zeitstempel hinzufügen.- Ändern Sie
VideoFrameProcessor.registerInputStream()in einen nicht blockierenden Aufruf. Apps müssenVideoFrameProcessor.Listener#onInputStreamRegistered()implementieren. - Die Parameter
frameRateunddurationUsvonVideoFrameProcessor.queueInputBitmapwurden inTimestampIteratorgeändert.
- IMA-Erweiterung:
- Es wurde ein Fehler behoben, durch den bei einem DASH-Livestream mit mehreren Zeiträumen, der nicht das erste Element in einer Playlist ist, eine Ausnahme ausgelöst werden konnte (#571).
- StreamManager vor dem Aufrufen von
AdsLoader.destroy()freigeben - IMA SDK-Version auf 3.31.0 aktualisiert.
- Sitzung:
- Legen Sie das Verhalten des Benachrichtigungsdienstes im Vordergrund auf
FOREGROUND_SERVICE_IMMEDIATEinDefaultMediaNotificationProviderfest (#167). - Verwenden Sie nur
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()über API 31, um Probleme mit der eingestellten API auf Samsung-Geräten zu vermeiden (#167). - Verwenden Sie den Media-Benachrichtigungs-Controller als Proxy, um verfügbare Befehle und das benutzerdefinierte Layout festzulegen, mit denen die Benachrichtigung und die Plattform-Sitzung gefüllt werden.
- Medientastenereignisse, die von
MediaSessionService.onStartCommand()in Media3 empfangen werden, werden konvertiert, anstatt an die Plattform-Session und zurück an Media3 weitergeleitet zu werden. Dadurch ist der Anrufer-Controller immer der Controller für Medienbenachrichtigungen und Apps können Anrufe, die über die Benachrichtigung eingehen, auf allen unterstützten API-Ebenen auf dieselbe Weise erkennen. - Es wurde ein Fehler behoben, durch den
MediaController.getCurrentPosition()nicht weiterging, wenn eine Verbindung zu einem altenMediaSessionCompatbestand. - Fügen Sie
MediaLibrarySession.getSubscribedControllers(mediaId)hinzu, um die Bedienung zu vereinfachen. - Überschreiben Sie
MediaLibrarySession.Callback.onSubscribe(), um die Verfügbarkeit der übergeordneten ID zu bestätigen, für die der Controller abonniert ist. Wenn die Anfrage erfolgreich ist, wird das Abo akzeptiert undnotifyChildrenChanged()wird sofort aufgerufen, um den Browser zu informieren (#561). - Sitzungsdemomodul für Automotive OS hinzugefügt und Sitzungsdemo für Android Auto aktiviert.
- Legen Sie die Warteschlange der Framework-Sitzung nicht fest, wenn
COMMAND_GET_TIMELINEfür den Media Notification Controller nicht verfügbar ist. Wenn Android Auto als Clientcontroller die Daten aus der Framework-Sitzung liest, hat dies zur Folge, dass die Schaltflächequeuein der Benutzeroberfläche von Android Auto nicht angezeigt wird (#339). - Verwenden Sie standardmäßig
DataSourceBitmapLoaderanstelle vonSimpleBitmapLoader(#271, #327). - Fügen Sie
MediaSession.Callback.onMediaButtonEvent(Intent)hinzu, damit Apps die Standardbehandlung von Medientastenereignissen überschreiben können.
- Legen Sie das Verhalten des Benachrichtigungsdienstes im Vordergrund auf
- UI:
- Füge eine
Player.Listener-Implementierung für Wear OS-Geräte hinzu, die die Wiedergabeunterdrückung aufgrund vonPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTverarbeitet, indem ein Systemdialogfeld gestartet wird, in dem ein Nutzer einen geeigneten Audioausgang (z.B. Bluetooth-Kopfhörer) verbinden kann. Die Wiedergabe wird automatisch fortgesetzt, wenn innerhalb eines konfigurierbaren Zeitlimits (Standard: 5 Minuten) ein geeignetes Gerät verbunden wird.
- Füge eine
- Downloads:
- Deklarieren Sie den Typ des Dienstes im Vordergrund „dataSync“ für
DownloadService, um die Kompatibilität mit Android 14 zu gewährleisten. Wenn Sie diesen Dienst verwenden, muss die App auchdataSyncalsforegroundServiceTypeim Manifest hinzufügen und die BerechtigungFOREGROUND_SERVICE_DATA_SYNC(#11239) hinzufügen.
- Deklarieren Sie den Typ des Dienstes im Vordergrund „dataSync“ für
- HLS-Erweiterung:
- Die HLS-Live-Playlist wird in einem Intervall aktualisiert, das auf Grundlage der letzten Startzeit des Ladevorgangs und nicht der letzten Abschlusszeit des Ladevorgangs berechnet wird (#663).
- DASH-Erweiterung:
- Mehrere DASH-IDs desselben Typs in der Segmentvorlagen-URL zulassen.
- Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzugefügt. Das Zusammenführen von sich überschneidenden Untertiteln wird besser unterstützt, einschließlich der Behebung von Flackern beim Übergang zwischen Untertitelsegmenten. Sie können diese Option mit
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288) aktivieren.
- RTSP-Erweiterung:
- Eine Race-Bedingung wurde behoben, die beim Fallback auf TCP zu
IndexOutOfBoundsExceptionoder in einigen Situationen zu einer hängenden Wiedergabe führen konnte. - Prüfe den Status bei der RTSP-Einrichtung, wenn der Ladestatus von
RtspMediaPeriodzurückgegeben wird (#577). - Benutzerdefinierte RTSP-Anfragemethoden im öffentlichen Header der Options-Antwort ignorieren (#613).
- Verwenden Sie den RTSP-Setup-Antwort-Zeitlimitwert im Zeitintervall zum Senden von Keep-Alive-RTSP-Optionsanfragen (#662).
- Eine Race-Bedingung wurde behoben, die beim Fallback auf TCP zu
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Das MIDI-Decodermodul wird veröffentlicht. Es bietet Unterstützung für die Wiedergabe von Standard-MIDI-Dateien mithilfe der Jsyn-Bibliothek zur Audiosynthese.
- Fügen Sie
DecoderOutputBuffer.shouldBeSkippedhinzu, um Ausgabepuffer direkt zu markieren, die nicht präsentiert werden müssen. Diese Methode wird gegenüberC.BUFFER_FLAG_DECODE_ONLYbevorzugt, da diese eingestellt wird. - Fügen Sie
Decoder.setOutputStartTimeUsundSimpleDecoder.isAtLeastOutputStartTimeUshinzu, damit Decoder reine Decodierungs-Samples vor der Startzeit verwerfen können. Diese Methode sollte gegenüberBuffer.isDecodeOnlybevorzugt werden, daBuffer.isDecodeOnlyeingestellt wird. - Fehler beim Veröffentlichen des MIDI-Decoder-Artefakts im Maven-Repository behoben. Das Artefakt wird in
media3-exoplayer-midiumbenannt (#734).
- Leanback-Erweiterung:
- Fehler behoben, bei dem das Deaktivieren einer Oberfläche zu einem
ArithmeticExceptionim Leanback-Code führen konnte (#617).
- Fehler behoben, bei dem das Deaktivieren einer Oberfläche zu einem
- Test-Tools:
TestExoPlayerBuilderundFakeClockmit Espresso-UI-Tests und Compose-UI-Tests kompatibel machen Damit wird ein Fehler behoben, bei dem die Wiedergabe während Espresso- oder Compose-Ansichtsinteraktionen nicht deterministisch fortgesetzt wurde.
- Entfernen Sie die veralteten Symbole:
- Entfernen Sie
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)undTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Verwenden SieComposition.Builder.setHdrMode(int)und übergeben SieCompositionstattdessen anTransformer.start(Composition, String). - Die verworfene Methode
DownloadNotificationHelper.buildProgressNotificationwurde entfernt. Verwenden Sie stattdessen eine nicht verworfene Methode, die den ParameternotMetRequirementsakzeptiert.
- Entfernen Sie
Version 1.2.0-rc01
1. November 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-beta01
19. Oktober 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-alpha02
29. September 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-alpha01
17. August 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.1.0
Version 1.1.1
16. August 2023
- Gemeinsame Mediathek:
- Entfernen Sie die versehentlich hinzugefügte
multidex-Abhängigkeit aus allen Modulen (#499).
- Entfernen Sie die versehentlich hinzugefügte
- ExoPlayer:
- Ein Problem in
PlaybackStatsListenerwurde behoben, bei dem nach dem Löschen der Playlist fälschlicherweisePlaybackStatserstellt wurden. - Zusätzliche Felder für die Protokollierung von Common Media Client Data (CMCD) hinzugefügt: Streamingformat (sf), Streamtyp (st), Version (v), höchste Bitrate (tb), Objektdauer (d), gemessener Durchsatz (mtp) und Objekttyp (ot) (#8699).
- Ein Problem in
- Audio:
- Es wurde ein Fehler behoben, durch den
Player.getState()bei der Wiedergabe sehr kurzer Dateien nie inSTATE_ENDEDüberging (#538).
- Es wurde ein Fehler behoben, durch den
- Audio-Offload:
- Füge dem Bitstream gemäß RFC 7845 den Ogg-ID-Header und die Kommentar-Header-Seiten für die ausgelagerte Opus-Wiedergabe voran.
- Video:
- H.265/HEVC: Das Parsen von SPS-Informationen zu kurz- und langfristigen Referenzbildern wurde korrigiert.
- Text:
- CEA-608: Die Logik zum Kürzen von Cues wurde so geändert, dass nur sichtbarer Text berücksichtigt wird. Bisher wurden Einrückung und Tabulatorversatz berücksichtigt, wenn die Cue-Länge auf 32 Zeichen begrenzt wurde (was technisch gesehen der Spezifikation entsprach) (#11019).
- IMA-Erweiterung:
- IMA SDK-Version auf 3.30.3 aktualisiert.
- Sitzung:
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie eine Getter-Methode für den Zugriff darauf bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
MediaController.Listener.onCustomLayoutChangedaufgerufen. Apps, die verschiedenen Media3-Controllern unterschiedliche benutzerdefinierte Layouts senden möchten, können dies inMediaSession.Callback.onConnecttun. Verwenden Sie dazu einAcceptedResultBuilder, um dafür zu sorgen, dass das benutzerdefinierte Layout für den Controller verfügbar ist, wenn die Verbindung hergestellt wurde. - Es wurde ein Problem behoben, bei dem
MediaLibraryServiceLegacyStubeinen Fehler an eineResultgesendet hat, die dies nicht unterstützt hat, was zu einemUnsupportedOperationException(#78) geführt hat. - Die Art und Weise, wie
PlayerWrappereineVolumeProviderCompaterstellt, wurde korrigiert, indemvolumeControlTypesowohl über Legacy-Befehle (COMMAND_ADJUST_DEVICE_VOLUMEundCOMMAND_SET_DEVICE_VOLUME) als auch über neue Befehle (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSundCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) ermittelt wird (#554).
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie eine Getter-Methode für den Zugriff darauf bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
Version 1.1.0
5. Juli 2023
- Gemeinsame Mediathek:
- Grund für die Unterdrückung für ungeeignete Audio-Route hinzufügen und bei Bedarf wiedergeben Grund für die Unterdrückung zu lang ändern. (#15).
- Befehle zum Player hinzufügen:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Dem Player wurden überlastete Methoden hinzugefügt, mit denen Nutzer Lautstärke-Flags angeben können:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
BuilderfürDeviceInfohinzugefügt und vorhandener Konstruktor eingestellt.- Fügen Sie
DeviceInfo.routingControllerIdhinzu, um die ID des Routing-Controllers für die Remote-Wiedergabe anzugeben. Player.replaceMediaItem(s)als Tastenkombination zum Hinzufügen und Entfernen von Elementen an derselben Position hinzugefügt (#8046).
- ExoPlayer:
- ExoPlayer darf nur dann die Methoden zur Steuerung der Gerätelautstärke verwenden, wenn dies explizit aktiviert wurde. Mit
ExoPlayer.Builder.setDeviceVolumeControlEnabledhaben Sie Zugriff auf Folgendes:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)undsetDeviceVolume(int, int)increaseDeviceVolume(int)undincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)unddecreaseDeviceVolume(int, int)
- Fügen Sie
FilteringMediaSourcehinzu, damit verfügbare Tracktypen aus einemMediaSourcegefiltert werden können. - Unterstützung für die Einbeziehung von Common Media Client Data (CMCD) in die ausgehenden Anfragen der adaptiven Streamingformate DASH, HLS und SmoothStreaming. Die folgenden Felder wurden integriert:
br,bl,cid,rtpundsid(#8699). API-Struktur und API-Methoden:- CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory), um es zu aktivieren. - Alle Schlüssel sind standardmäßig aktiviert. Überschreiben Sie
CmcdConfiguration.RequestConfig.isKeyAllowed(String key), um zu filtern, welche Schlüssel protokolliert werden. - Überschreiben Sie
CmcdConfiguration.RequestConfig.getCustomData(), um das benutzerdefinierte Schlüssel-Logging zu aktivieren.
- CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
- Dem Manifest der Hauptdemo wurde eine zusätzliche Aktion hinzugefügt, um das Starten der Demo-App mit einer benutzerdefinierten
*.exolist.json-Datei zu vereinfachen (#439). - Fügen Sie
ExoPlayer.setVideoEffects()für die Verwendung vonEffectwährend der Videowiedergabe hinzu. - Aktualisieren Sie
SampleQueue, umsourceIdalslonganstatt alsintzu speichern. Dadurch ändern sich die Signaturen der öffentlichen MethodenSampleQueue.sourceIdundSampleQueue.peekSourceId. - Fügen Sie den
LoadControl-MethodenshouldStartPlaybackundonTracksSelectedParameter hinzu, mit denen diese Methoden den relevantenMediaPeriodzugeordnet werden können. - Ändern Sie die Signatur von
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>), indem Sie einen Zeitachsenparameter hinzufügen, der die Zeiträume mit den UIDs enthält, die als Schlüssel in der Karte verwendet werden. Dies ist erforderlich, um Probleme mit der Gleichzeitigkeit bei Livestreams mit mehreren Zeiträumen zu vermeiden. EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)undBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)einstellen. Stattdessen kann die Variante der Methoden ohnemediaTimeOffsetUsaufgerufen werden. Auch bei den verworfenen Varianten wird der Offset nicht mehr zustartTimeUsundendTimeUsderMediaLoadData-Objekte hinzugefügt, die vom Dispatcher gesendet werden.- Benennen Sie
ExoTrackSelection.blacklistinexcludeTrackundisBlacklistedinisTrackExcludedum. - Es wurde ein Problem behoben, bei dem das Verhalten von
ExoPlayer.setMediaItem(s)undaddMediaItem(s)bei Aufruf für eine leere Playlist inkonsistent war.
- ExoPlayer darf nur dann die Methoden zur Steuerung der Gerätelautstärke verwenden, wenn dies explizit aktiviert wurde. Mit
- Transformer:
- Entfernen Sie
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Verwenden Sie stattdessenExoPlayerAssetLoader.Factory(MediaSource.Factory)undTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - Entfernen Sie
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Es wurde ein Fehler behoben, durch den die Transformation hängen bleiben konnte (was zu einem Muxer-Zeitüberschreitungsfehler führte), wenn das Ende des Videostreams zu dem Zeitpunkt signalisiert wurde, als ein Eingabe-Frame noch auf die Verarbeitung wartete.
- Verwenden Sie für Codec-Abfragen
MediaCodecListanstelle vonfindDecoder/EncoderForFormat-Dienstprogrammen, um die Unterstützung zu erweitern. - Entferne die B-Frame-Konfiguration in
DefaultEncoderFactory, da sie auf einigen Geräten nicht funktioniert.
- Entfernen Sie
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangehinzu, das standardmäßig deaktiviert ist. Wenn diese Option aktiviert ist, wird durchDefaultTrackSelectoreine neue Auswahl des Tracks ausgelöst, wenn sich die Renderer-Funktionen geändert haben.
- Fügen Sie
- Extraktoren:
- Audio:
- Ein Fehler wurde behoben, bei dem einige Wiedergaben fehlschlugen, wenn Tunneling aktiviert und
AudioProcessorsaktiv waren, z.B. beim nahtlosen Zuschneiden (#10847). - Opus-Frames in Ogg-Pakete für die direkte Wiedergabe (Offload) einbetten.
- Die aktuelle Position während des Schlafs wird durch Offload-Planung extrapoliert.
- Fügen Sie
Renderer.release()undAudioSink.release()hinzu, um die Ressourcen am Ende des Lebenszyklus des Players freizugeben. - Änderungen der Audiofunktionen in
DefaultAudioSinkbeobachten Fügen Sie im Konstruktor vonDefaultAudioSinkden erforderlichen Parametercontexthinzu, mit dem sichDefaultAudioSinkals Listener fürAudioCapabilitiesReceiverregistriert und seineaudioCapabilities-Property aktualisiert, wenn eine Änderung der Funktionen gemeldet wird. - Änderungen an den Audiofunktionen über ein neues Ereignis in der
onAudioCapabilitiesChanged-Schnittstelle und eine neue SchnittstelleRendererCapabilities.Listenerweitergeben, dieonRendererCapabilitiesChanged-Ereignisse auslöst.AudioSink.Listener - Fügen Sie
ChannelMixingAudioProcessorhinzu, um Skalierung/Mixing auf Audiochannels anzuwenden. - Füge den neuen int-Wert
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEzuDecoderDiscardReasonshinzu, um den Audio-Decoder zu verwerfen, wenn der Bypass-Modus nach einer Änderung der Audiofunktionen möglich ist. - Unterstützung für die direkte Wiedergabe von DTS Express und DTS:X hinzugefügt (#335).
- Ein Fehler wurde behoben, bei dem einige Wiedergaben fehlschlugen, wenn Tunneling aktiviert und
- Video:
- Sorgen Sie dafür, dass
MediaCodecVideoRenderereineVideoSizemit einer Breite und Höhe von 0 meldet, wenn der Renderer deaktiviert ist.Player.Listener.onVideoSizeChangedwird entsprechend aufgerufen, wenn sichPlayer.getVideoSize()ändert. Durch diese Änderung hat die Videogröße von ExoPlayer mitMediaCodecVideoRenderereine Breite und Höhe von 0, wennPlayer.getCurrentTrackskeine Videos unterstützt oder die Größe des unterstützten Videotracks noch nicht bestimmt wurde.
- Sorgen Sie dafür, dass
- DRM:
- Die Sichtbarkeit mehrerer interner Methoden in
DefaultDrmSessionwurde reduziert, da sie voraussichtlich nicht von außerhalb des DRM-Pakets aufgerufen werden:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Die Sichtbarkeit mehrerer interner Methoden in
- Muxer:
- Eine neue Muxer-Bibliothek wird hinzugefügt, mit der eine MP4-Containerdatei erstellt werden kann.
- IMA-Erweiterung:
- Aktivieren Sie DASH-Livestreams mit mehreren Zeiträumen für die dynamische Anzeigenbereitstellung. Die aktuelle Implementierung unterstützt das Suchen in Livestreams noch nicht (#10912).
- Es wurde ein Fehler behoben, durch den eine neue Anzeigengruppe in Livestreams eingefügt wurde, weil die berechnete Inhaltsposition in aufeinanderfolgenden Zeitachsen leicht variierte.
- Sitzung:
- Die Hilfsmethode
MediaSession.getControllerForCurrentRequestwurde hinzugefügt, um Informationen zum Controller abzurufen, der gerade einePlayer-Methode aufruft. - Füge
androidx.media3.session.MediaButtonReceiverhinzu, damit Apps die Wiedergabe mit Media-Schaltflächen-Ereignissen fortsetzen können, die beispielsweise von einem Bluetooth-Headset gesendet werden (#167). - Fügen Sie
MediaSession.Callback.onAddMediaItemseine Standardimplementierung hinzu, damit angeforderteMediaItemsanPlayerübergeben werden können, wenn sieLocalConfigurationhaben (z.B. URI) (#282). - Für Android 12 und niedriger werden in der kompakten Benachrichtigungsansicht für Medien standardmäßig Schaltflächen für die Befehle „Zum vorherigen Titel springen“ und „Zum nächsten Titel springen“ hinzugefügt (#410).
- Fügen Sie
MediaSession.Callback.onAddMediaItemseine Standardimplementierung hinzu, damit angeforderteMediaItemsanPlayerübergeben werden können, wenn sieLocalConfigurationhaben (z.B. URI) (#282). - Für Android 12 und niedriger werden in der kompakten Benachrichtigungsansicht für Medien standardmäßig Schaltflächen für die Befehle „Zum vorherigen Titel springen“ und „Zum nächsten Titel springen“ hinzugefügt (#410).
- Die Hilfsmethode
- UI:
- Fügen Sie die Util-Methoden
shouldShowPlayButtonundhandlePlayPauseButtonActionhinzu, um benutzerdefinierte UI-Elemente mit einer Schaltfläche zum Abspielen/Pausieren zu erstellen.
- Fügen Sie die Util-Methoden
- RTSP-Erweiterung:
- DASH-Erweiterung:
- Entfernen Sie den Media-Zeitversatz aus
MediaLoadData.startTimeMsundMediaLoadData.endTimeMsfür DASH-Streams mit mehreren Zeiträumen. - Ein Fehler wurde behoben, bei dem das erneute Vorbereiten einer Live-DASH-Media-Quelle mit mehreren Zeiträumen einen
IndexOutOfBoundsException-Fehler verursacht hat (#10838).
- Entfernen Sie den Media-Zeitversatz aus
- HLS-Erweiterung:
- Fügen Sie
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)hinzu, um ein Zeitlimit für den Ladethread festzulegen, bisTimestampAdjusterinitialisiert wird. Wenn die Initialisierung nicht vor dem Zeitlimit abgeschlossen wird, wird einePlaybackExceptionausgelöst, um zu verhindern, dass die Wiedergabe endlos verzögert wird. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
- Fügen Sie
- Test-Tools:
- Prüfen Sie, ob das URI-Schema in
DataSourceContractTestunabhängig von der Groß-/Kleinschreibung ist.
- Prüfen Sie, ob das URI-Schema in
- Entfernen Sie die veralteten Symbole:
- Entfernen Sie
DefaultAudioSink-Konstruktoren und verwenden Sie stattdessenDefaultAudioSink.Builder. - Entfernen Sie
HlsMasterPlaylistund verwenden Sie stattdessenHlsMultivariantPlaylist. - Entfernen Sie
Player.stop(boolean). Verwenden Sie stattdessenPlayer.stop()undPlayer.clearMediaItems()(wennresetgleichtrueist). - Entfernen Sie zwei eingestellte
SimpleCache-Konstruktoren und verwenden Sie stattdessen einen nicht eingestellten Konstruktor, der einDatabaseProviderakzeptiert, um eine bessere Leistung zu erzielen. - Entfernen Sie den Konstruktor
DefaultBandwidthMeterund verwenden Sie stattdessenDefaultBandwidthMeter.Builder. - Entfernen Sie
DefaultDrmSessionManager-Konstruktoren und verwenden Sie stattdessenDefaultDrmSessionManager.Builder. - Entfernen Sie zwei verworfene
HttpDataSource.InvalidResponseCodeException-Konstruktoren und verwenden Sie einen nicht verworfenen Konstruktor, der zusätzliche Felder(cause,responseBody) akzeptiert, um die Fehlerprotokollierung zu verbessern. - Entfernen Sie
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDashundDownloadHelper.forSmoothStreamingund verwenden Sie stattdessenDownloadHelper.forMediaItem. - Entfernen Sie den eingestellten
DownloadService-Konstruktor und verwenden Sie einen nicht eingestellten Konstruktor, der die Option zum Bereitstellen eineschannelDescriptionResourceId-Parameters enthält. - Entfernen Sie die eingestellten Stringkonstanten für Zeichensätze (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEundUTF16LE_NAME) und verwenden Sie stattdessen Kotlin-Zeichensätze aus dem Paketkotlin.text,java.nio.charset.StandardCharsetsodercom.google.common.base.Charsets. - Entfernen Sie den eingestellten Konstruktor
WorkManagerSchedulerund verwenden Sie stattdessen einen nicht eingestellten Konstruktor, der die Option bietet, einenContext-Parameter anzugeben. - Entfernen Sie die verworfenen Methoden
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatundcreateSampleFormat, die zum Instanziieren der KlasseFormatverwendet wurden. Verwenden Sie stattdessenFormat.Builder, um Instanzen vonFormatzu erstellen. - Entfernen Sie die verworfenen Methoden
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateundcopyWithVideoSizeund verwenden Sie stattdessenFormat.buildUpon()und Setter-Methoden. - Entfernen Sie das verworfene
ExoPlayer.retry()und verwenden Sie stattdessenprepare(). - Entfernen Sie den verworfenen
DefaultTrackSelector-Konstruktor ohne Argumente und verwenden Sie stattdessenDefaultTrackSelector(Context). - Entfernen Sie den verworfenen Konstruktor
OfflineLicenseHelperund verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Entfernen Sie den eingestellten Konstruktor
DownloadManagerund verwenden Sie stattdessen den Konstruktor, der einExecutorakzeptiert. - Entfernen Sie die verworfenen
Cue-Konstruktoren und verwenden Sie stattdessenCue.Builder. - Entfernen Sie den verworfenen Konstruktor
OfflineLicenseHelperund verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Vier veraltete
AnalyticsListener-Methoden wurden entfernt:onDecoderEnabled. Verwenden Sie stattdessenonAudioEnabledund/oderonVideoEnabled.onDecoderInitialized. Verwenden Sie stattdessenonAudioDecoderInitializedund/oderonVideoDecoderInitialized.onDecoderInputFormatChanged. Verwenden Sie stattdessenonAudioInputFormatChangedund/oderonVideoInputFormatChanged.onDecoderDisabled. Verwenden Sie stattdessenonAudioDisabledund/oderonVideoDisabled.
- Entfernen Sie die verworfenen
Player.Listener.onSeekProcessedundAnalyticsListener.onSeekProcessedund verwenden Sie stattdessenonPositionDiscontinuitymitDISCONTINUITY_REASON_SEEK. - Entfernen Sie
ExoPlayer.setHandleWakeLock(boolean)und verwenden Sie stattdessensetWakeMode(int). - Entfernen Sie das verworfene
DefaultLoadControl.Builder.createDefaultLoadControl()und verwenden Sie stattdessenbuild(). - Entfernen Sie das verworfene
MediaItem.PlaybackPropertiesund verwenden Sie stattdessenMediaItem.LocalConfiguration. Das nicht mehr unterstützte FeldMediaItem.playbackPropertieshat jetzt den TypMediaItem.LocalConfiguration.
- Entfernen Sie
Version 1.1.0-rc01
21. Juni 2023
Verwenden Sie die stabile Version 1.1.0.
Version 1.1.0-beta01
7. Juni 2023
Verwenden Sie die stabile Version 1.1.0.
Version 1.1.0-alpha01
10. Mai 2023
Verwenden Sie die stabile Version 1.1.0.
Version 1.0.0
Version 1.0.2
18. Mai 2023
androidx.media3:media3-*:1.0.2 ist veröffentlicht.
Version 1.0.2 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.7.
Diese Version enthält die folgenden Änderungen seit der Version 1.0.1:
- Core-Bibliothek:
- Fügen Sie
Buffer.isLastSample()hinzu, um anzugeben, obBufferdas FlagC.BUFFER_FLAG_LAST_SAMPLEenthält. - Es wurde ein Problem behoben, bei dem der letzte Frame möglicherweise nicht gerendert wurde, wenn das letzte Sample mit Frames aus der Warteschlange entfernt wurde, ohne das Sample „end of stream“ (Ende des Streams) zu lesen. (#11079).
- Fügen Sie
- Extraktoren:
- Die Verarbeitung von H.265-SPS in MPEG-TS-Dateien wurde korrigiert, indem die bereits von RTSP- und MP4-Extraktoren verwendete Parsing-Logik wiederverwendet wurde (#303).
- Text:
- SSA: Unterstützung für UTF-16-Dateien wurde hinzugefügt, wenn sie mit einer Bytereihenfolge-Marke (Byte Order Mark, BOM) beginnen (#319).
- Sitzung:
- Ein Problem wurde behoben, bei dem
MediaControllerseine verfügbaren Befehle nicht aktualisiert hat, wenn es mit einem altenMediaSessionCompatverbunden war, das seine Aktionen aktualisiert hat. - Es wurde ein Fehler behoben, der verhindert hat, dass
MediaLibraryServicefür einen Aufruf von der System-UI anCallback.onGetLibraryRootmitparams.isRecent == trueauf API 30 (#355) „null“ zurückgegeben hat. - Speicherleck von
MediaSessionServiceoderMediaLibraryServicebehoben (#346). - Ein Fehler wurde behoben, bei dem eine kombinierte
Timeline- und Positionsaktualisierung in einemMediaSessiondazu führen konnte, dass einMediaControllereineIllegalStateExceptionauslöste.
- Ein Problem wurde behoben, bei dem
Version 1.0.1
18. April 2023
androidx.media3:media3-*:1.0.1 ist veröffentlicht.
Version 1.0.1 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.6.
- Core-Bibliothek:
- Überschreibung des Ziel-Livestreams beim Suchen zur Standardposition zurücksetzen ( #11051).
- Es wurde ein Fehler behoben, durch den die Wiedergabe hängen blieb, wenn leere Beispielstreams in den Medien vorhanden waren.
- Sitzung:
- Ein Fehler wurde behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
MediaSessionCompatveröffentlicht wurden, zu einer Ausnahme inMediaControllerführten (#290). - Die Weiterleitung von
MediaSession.broadcastCustomCommandan das alteMediaControllerCompat.Callback.onSessionEventwurde hinzugefügt (#293). - Ein Fehler wurde behoben, bei dem durch Aufrufen von
MediaSession.setPlayerdie verfügbaren Befehle nicht aktualisiert wurden. - Ein Problem wurde behoben, bei dem
TrackSelectionOverride-Instanzen, die von einemMediaControllergesendet wurden, ignoriert wurden, wenn sie auf eine Gruppe mitFormat.metadataverwiesen haben (#296). - Problem beheben, bei dem
Player.COMMAND_GET_CURRENT_MEDIA_ITEMverfügbar sein muss, um über die alteMediaSessionCompatauf Metadaten zuzugreifen. - Problem behoben, bei dem
MediaSession-Instanzen in einem Hintergrundthread Abstürze verursacht haben, wenn sie inMediaSessionServiceverwendet wurden (#318). - Ein Problem wurde behoben, bei dem ein Media-Button-Receiver von der Bibliothek deklariert wurde, ohne dass die App dies beabsichtigt hatte (#314).
- Ein Fehler wurde behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
- DASH:
- Die Verarbeitung leerer Segmentzeitachsen wurde korrigiert (#11014).
- RTSP:
- Versuchen Sie es noch einmal mit TCP, wenn die RTSP-Einrichtung mit UDP mit dem RTSP-Fehler 461 „UnsupportedTransport“ (#11069) fehlschlägt.
Version 1.0.0
22. März 2023
androidx.media3:media3-*:1.0.0 ist veröffentlicht.
Version 1.0.0 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.5.
Seit Version 1.0.0-rc02 hat sich nichts geändert.
Version 1.0.0-rc02
2. März 2023
androidx.media3:media3-*:1.0.0-rc02 ist veröffentlicht.
Version 1.0.0-rc02 enthält diese Commits.
Dieser Release entspricht dem ExoPlayer-Release 2.18.4.
- Core-Bibliothek:
- Downloads:
- Die maximale Differenz der Startzeit von zwei Segmenten, die zusammengeführt werden sollen, kann in
SegmentDownloaderund Unterklassen konfiguriert werden (#248).
- Die maximale Differenz der Startzeit von zwei Segmenten, die zusammengeführt werden sollen, kann in
- Audio:
- Problem mit der lückenlosen MP3-Wiedergabe auf Samsung-Geräten behoben (#8594).
- Ein Fehler wurde behoben, durch den Wiedergabegeschwindigkeiten, die unmittelbar nach dem Deaktivieren von Audio festgelegt wurden, möglicherweise durch eine vorherige Geschwindigkeitsänderung überschrieben wurden (#10882).
- Video:
- HEVC-HDR10-Format wird
HEVCProfileMain10HDR10stattHEVCProfileMain10zugeordnet. - Es wurde eine Problemumgehung für ein Geräteproblem auf dem Chromecast mit Google TV und dem Lenovo M10 FHD Plus hinzugefügt, das dazu führt, dass AVC-Streams mit 60 fps als nicht unterstützt markiert werden (#10898).
- Probleme mit der Frame-Ausgabe bei der Wiedergabe von Medien mit einer Framerate, die viel höher als die Aktualisierungsrate des Displays ist, wurden behoben.
- HEVC-HDR10-Format wird
- Besetzung:
- Problem mit vorübergehenden
STATE_IDLEbeim Übergang zwischen Media-Elementen behoben (#245).
- Problem mit vorübergehenden
- RTSP:
- Die beim Parsen ungültiger RTSP-Describe-Antwortnachrichten ausgelöste IllegalArgumentException wird abgefangen (#10971).
- Sitzung:
- Es wurde ein Fehler behoben, durch den die Schaltfläche „Wiedergabe/Pause“ in Benachrichtigungen nicht mit dem Playerstatus aktualisiert wurde (#192).
- IMA-Erweiterung:
- Ein Fehler wurde behoben, der verhinderte, dass DAI-Streams ohne Anzeigen gestartet wurden, da das erste (und im Fall ohne Anzeigen das einzige)
LOADED-Ereignis nicht empfangen wurde.
- Ein Fehler wurde behoben, der verhinderte, dass DAI-Streams ohne Anzeigen gestartet wurden, da das erste (und im Fall ohne Anzeigen das einzige)
Version 1.0.0-rc01
16. Februar 2023
androidx.media3:media3-*:1.0.0-rc01 ist veröffentlicht.
Version 1.0.0-rc01 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.3.
- Core-Bibliothek:
- Die Decoder-Reihenfolgelogik des Renderers wird so angepasst, dass die Einstellungen von
MediaCodecSelectoreingehalten werden, auch wenn ein Decoder meldet, dass er die Medien möglicherweise nicht leistungsstark wiedergeben kann. Beispielsweise wird bei der Standardauswahl ein Hardware-Decoder mit nur funktionaler Unterstützung einem Software-Decoder vorgezogen, der das Format vollständig unterstützt (#10604). - Fügen Sie
ExoPlayer.Builder.setPlaybackLooperhinzu, um einen vorhandenen Wiedergabethread für eine neue ExoPlayer-Instanz festzulegen. - Download-Manager-Helfer können gelöscht werden (#10776).
- Fügen Sie dem Parameter
BasePlayer.seekToden Befehl hinzu, der für die Suche verwendet wurde. - Design beim Laden von Drawables unter API 21 und höher verwenden (#220).
ConcatenatingMediaSource2hinzugefügt, mit der mehrere Media-Elemente in einem einzigen Fenster kombiniert werden können (#247).
- Die Decoder-Reihenfolgelogik des Renderers wird so angepasst, dass die Einstellungen von
- Extraktoren:
- Löst beim Parsen von „trak“-Atomen einen
ParserExceptionanstelle einesNullPointerExceptionaus, wenn in der Beispieltabellenbox (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt. - Behebung eines Problems, bei dem Samples beim direkten Suchen nach einem Synchronisationsframe in fMP4 nicht korrekt übersprungen wurden (#10941).
- Löst beim Parsen von „trak“-Atomen einen
- Audio:
- Verwende die Bitrate des komprimierten Audioformats, um die Mindestpuffergröße für
AudioTrackbei direkter Wiedergabe (Passthrough) zu berechnen.
- Verwende die Bitrate des komprimierten Audioformats, um die Mindestpuffergröße für
- Text:
- Es wurde ein ungültiger (negativer) Index an
Subtitle.getEventTimeübergeben, wenn eine Untertiteldatei keine Cues enthält.TextRenderer - SubRip: Unterstützung für UTF-16-Dateien hinzugefügt, wenn sie mit einer Byte Order Mark beginnen.
- Es wurde ein ungültiger (negativer) Index an
- Metadaten:
- Mehrere durch Null getrennte Werte aus ID3-Frames parsen, wie in ID3 v2.4 zulässig.
- Fügen Sie
MediaMetadata.mediaTypehinzu, um den Inhaltstyp oder den Typ des Ordners anzugeben, der in den Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsableals Ersatz fürMediaMetadata.folderTypehinzu. Der Ordner wird im nächsten Release eingestellt.
- DASH:
- Vollständiges Parsen für Bildanpassungssätze wurde hinzugefügt, einschließlich der Anzahl der Kacheln (#3752).
- UI:
- Beheben Sie die Einstellung der
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)-Eigenschaft, damit Änderungen an der Sichtbarkeit an den registrierten Listener übergeben werden (#229). - Die Reihenfolge der Steuerelemente für den mittleren Player in
PlayerViewwurde korrigiert, wenn ein RTL-Layout (Right-to-Left, von rechts nach links) verwendet wird (#227).
- Beheben Sie die Einstellung der
- Sitzung:
- Fügen Sie die abstrakte Klasse
SimpleBasePlayerhinzu, um diePlayer-Schnittstelle für benutzerdefinierte Player zu implementieren. - Hilfsmethode zum Konvertieren des Plattform-Sitzungstokens in Media3 hinzugefügt
SessionToken(#171). - Verwende
onMediaMetadataChanged, um Updates der Media-Session der Plattform auszulösen (#219). - Fügen Sie die Mediensitzung als Argument von
getMediaButtons()desDefaultMediaNotificationProviderhinzu und verwenden Sie zur besseren Übersicht unveränderliche Listen (#216). onSetMediaItems-Callback-Listener hinzugefügt, um die Möglichkeit zu bieten, die ListeMediaItem, den Startindex und die Position nach Sitzung zu ändern/festzulegen, bevor sie im Player festgelegt werden (#156).- Doppeltippen für Media-Schaltflächenereignisse, die nicht über Bluetooth gesendet werden, vermeiden (#233).
QueueTimelinewurde robuster gemacht, falls ein fragwürdiger alter Sitzungsstatus vorliegt (#241).
- Fügen Sie die abstrakte Klasse
- Metadaten:
- Mehrere durch Null getrennte Werte aus ID3-Frames parsen, wie in ID3 v2.4 zulässig.
- Fügen Sie
MediaMetadata.mediaTypehinzu, um den Inhaltstyp oder den Typ des Ordners anzugeben, der in den Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsableals Ersatz fürMediaMetadata.folderTypehinzu. Der Ordner wird im nächsten Release eingestellt.
- Cast-Erweiterung:
- Die Cast SDK-Version wurde auf 21.2.0 aktualisiert.
- IMA-Erweiterung:
- Entfernen Sie den Player-Listener von
ImaServerSideAdInsertionMediaSourceim Anwendungs-Thread, um Threading-Probleme zu vermeiden. - Fügen Sie dem
ImaServerSideAdInsertionMediaSource.AdsLoader.Builderdas AttributfocusSkipButtonWhenAvailablehinzu, um die Skip-Schaltfläche auf TV-Geräten zu fokussieren, und legen Sie es standardmäßig auf „true“ fest. - Fügen Sie der
ImaServerSideAdInsertionMediaSource.AdsLoadereine MethodefocusSkipButton()hinzu, um den Fokus programmatisch auf die Schaltfläche „Überspringen“ zu legen. - IMA SDK-Version auf 3.29.0 aktualisiert.
- Entfernen Sie den Player-Listener von
- Demo-App:
- Benachrichtigungsberechtigung für Downloadbenachrichtigungen zur Laufzeit anfordern (#10884).
Version 1.0.0-beta03
22. November 2022
androidx.media3:media3-*:1.0.0-beta03 ist veröffentlicht.
Version 1.0.0-beta03 enthält diese Commits.
Diese Version entspricht ExoPlayer 2.18.2.
- Core-Bibliothek:
- Fügen Sie
ExoPlayer.isTunnelingEnabledhinzu, um zu prüfen, ob Tunneling für die aktuell ausgewählten Tracks aktiviert ist (#2518). WrappingMediaSourcewurde hinzugefügt, um das Umbrechen eines einzelnenMediaSourcezu vereinfachen (#7279).- Verwerfe den Backbuffer, bevor die Wiedergabe aufgrund von zu wenig verfügbarem Arbeitsspeicher hängen bleibt.
- Schließe den Tracing-Block „doSomeWork“, wenn die Auslagerung aktiviert ist.
- Problem mit der Sitzungsanalyse bei schnellen Suchvorgängen in
PlaybackStatsListenerbehoben (#180). - Fehlenden
onMediaItemTransition-Callback beim Aufrufen vonseekToNextoderseekToPreviousin einer Playlist mit einem einzelnen Element senden (#10667). - Fügen Sie
Player.getSurfaceSizehinzu, um die Größe der Oberfläche zurückzugeben, auf der das Video gerendert wird. - Fehler behoben, bei dem das Entfernen von Listenern während der Player-Freigabe zu einem
IllegalStateExceptionführen konnte (#10758).
- Fügen Sie
- Build:
- Mindestversion von
compileSdkVersionerzwingen, um Kompilierungsfehler zu vermeiden (#10684). - Veröffentlichen Sie den Block nicht, wenn er in einem anderen Gradle-Build enthalten ist.
- Mindestversion von
- Titelauswahl:
- Andere Tracks als Dolby Vision bevorzugen, wenn das Display diese Technologie nicht unterstützt. (#8944).
- Downloads:
- Potenzielle Endlosschleife in
ProgressiveDownloaderbehoben, die durch gleichzeitiges Herunterladen und Abspielen mit demselbenPriorityTaskManagerverursacht wurde (#10570). - Downloadbenachrichtigung sofort anzeigen lassen ( #183).
- Die Anzahl paralleler Downloads wurde auf 1 begrenzt, um die Erstellung zu vieler Threads zu vermeiden (#10458).
- Potenzielle Endlosschleife in
- Video:
- Verwende einen alternativen Decoder für Dolby Vision, wenn das Display diese Funktion nicht unterstützt. (#9794).
- Audio:
- Verwenden Sie
SingleThreadExecutor, umAudioTrack-Instanzen freizugeben, damit beim gleichzeitigen Freigeben mehrerer Player keine OutOfMemory-Fehler auftreten (#10057). - Fügt
AudioOffloadListener.onExperimentalOffloadedPlaybackfür den Offload-Status von AudioTrack hinzu. (#134). - Machen Sie
AudioTrackBufferSizeProviderzu einer öffentlichen Schnittstelle. - Fügen Sie
ExoPlayer.setPreferredAudioDevicehinzu, um das bevorzugte Audioausgabegerät festzulegen (#135). - Benennen Sie
androidx.media3.exoplayer.audio.AudioProcessorinandroidx.media3.common.audio.AudioProcessorum. - 8‑Kanal- und 12‑Kanal-Audio auf allen Android-Versionen den Kanalmasken 7.1 bzw. 7.1.4 zuordnen (#10701).
- Verwenden Sie
- Metadaten:
MetadataRendererkann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstellen Sie eine Instanz mitMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean), um anzugeben, ob der Renderer Metadaten frühzeitig oder synchron mit der Position des Players ausgeben soll.
- DRM:
- Umgehen Sie einen Fehler in der ClearKey-Implementierung von Android 13, der eine nicht leere, aber ungültige Lizenz-URL zurückgibt.
- Der
setMediaDrmSession failed: session not opened-Fehler beim Wechseln zwischen DRM-Schemata in einer Playlist (z.B. von Widevine zu ClearKey) wurde behoben.
- Text:
- CEA-608: Befehle zum Umschalten des Dienstes in Feld 2 werden korrekt verarbeitet (#10666).
- DASH:
EventStream.presentationTimeOffsetaus Manifesten parsen (#10460).
- UI:
- Verwenden Sie die aktuellen Überschreibungen des Players als Voreinstellung in
TrackSelectionDialogBuilder(#10429).
- Verwenden Sie die aktuellen Überschreibungen des Players als Voreinstellung in
- Sitzung:
- Achten Sie darauf, dass Befehle immer in der richtigen Reihenfolge ausgeführt werden, auch wenn für einige eine asynchrone Auflösung erforderlich ist (#85).
- Fügen Sie
DefaultMediaNotificationProvider.Builderhinzu, umDefaultMediaNotificationProvider-Instanzen zu erstellen. Der Builder kann die Benachrichtigungs-ID, die Benachrichtigungskanal-ID und den vom Anbieter verwendeten Benachrichtigungskanalnamen konfigurieren. Fügen Sie außerdem die MethodeDefaultMediaNotificationProvider.setSmallIcon(int)hinzu, um das kleine Symbol für Benachrichtigungen festzulegen. (#104). - Befehle, die vor
MediaController.release()gesendet werden, dürfen nicht verloren gehen (#99). SimpleBitmapLoaderkann Bitmaps ausfile://-URIs laden (#108).- Behebe die Assertion, die verhindert, dass
MediaControllerin einem Zeitraum über eine Anzeige hinweg sucht (#122). - Wenn die Wiedergabe endet, wird die
MediaSessionServiceim Vordergrund beendet und eine Benachrichtigung wird angezeigt, um die Wiedergabe des zuletzt wiedergegebenen Media-Elements neu zu starten (#112). - Starte keinen Dienst im Vordergrund mit einem ausstehenden Intent zum Pausieren (#167).
- Blenden Sie das Symbol, das mit der von
DefaultNotificationProvidererstellten Benachrichtigung verknüpft ist, unter API 26 und API 27 manuell aus. Unter API 28 und höher wird das Symbol automatisch ausgeblendet (#131). - Fehler behoben, bei dem eine zweite Binder-Verbindung von einer alten MediaSession zu einem Media3-MediaController IllegalStateExceptions verursacht hat (#49).
- RTSP:
- IMA:
- Es wurde ein Zeitlimit für das Laden von Anzeigeninformationen hinzugefügt, um Fälle zu berücksichtigen, in denen das IMA SDK beim Laden einer Anzeige hängen bleibt (#10510).
- Das Überspringen von Mid-Roll-Anzeigen beim Vorspulen zum Ende des Inhalts wird verhindert. (#10685)
- Die Fensterdauer für Livestreams mit serverseitig eingefügten Anzeigen, z. B. IMA DAI, wird korrekt berechnet (#10764).
- FFmpeg-Erweiterung:
- Es wurden neue erforderliche Flags hinzugefügt, um FFmpeg-Bibliotheken mit NDK 23.1.7779620 und höher zu verknüpfen (#9933).
- AV1-Erweiterung:
- Die CMake-Version wurde aktualisiert, um Inkompatibilitäten mit den neuesten Android Studio-Versionen zu vermeiden (#9933).
- Cast-Erweiterung:
- Implementiere
getDeviceInfo(), umCastPlayeridentifizieren zu können, wenn die Wiedergabe mit einemMediaControllergesteuert wird (#142).
- Implementiere
- Transformer:
- Es wurde ein Muxer-Watchdog-Timer hinzugefügt, um zu erkennen, wenn das Generieren einer Ausgabeprobe zu langsam ist.
- Entfernen Sie die veralteten Symbole:
- Entfernen Sie
Transformer.Builder.setOutputMimeType(String). Diese Funktion wurde entfernt. Der MIME-Typ ist immer MP4, wenn der Standard-Muxer verwendet wird.
- Entfernen Sie
Version 1.0.0-beta02
21. Juli 2022
androidx.media3:media3-*:1.0.0-beta02 ist veröffentlicht.
Version 1.0.0-beta02 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.1.
- Core-Bibliothek:
- Achten Sie darauf, dass das Ändern von
ShuffleOrderinExoPlayer.setShuffleOrdereinen Aufruf vonPlayer.Listener#onTimelineChangedmitreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDzur Folge hat (#9889). - Bei progressiven Media werden nur ausgewählte Tracks in der gepufferten Position berücksichtigt. (#10361)
- Benutzerdefiniertes Logger für alle ExoPlayer-Logausgaben zulassen (#9752).
- Die Implementierung von
setDataSourceFactoryinDefaultMediaSourceFactorywurde korrigiert. Sie war in einigen Fällen nicht funktionsfähig (#116).
- Achten Sie darauf, dass das Ändern von
- Extraktoren:
- DASH:
- ClearKey-Lizenz-URL aus Manifesten parsen (#10246).
- UI:
- Achte darauf, dass TalkBack die aktuell aktive Geschwindigkeitsoption im Menü für die Wiedergabesteuerung ansagt (#10298).
- RTSP:
- Verarbeitung fragmentierter VP8-Pakete hinzugefügt (#110).
- Leanback-Erweiterung:
- Änderungen an
playWhenReadyinLeanbackAdapteranhören (10420).
- Änderungen an
- Besetzung:
Version 1.0.0-beta01
16. Juni 2022
androidx.media3:media3-*:1.0.0-beta01 ist veröffentlicht.
Version 1.0.0-beta01 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.18.0.
- Core-Bibliothek:
- Aktivieren Sie die Unterstützung für die Android-Plattformdiagnose über
MediaMetricsManager. ExoPlayer leitet Wiedergabeereignisse und Leistungsdaten an die Plattform weiter, was dazu beiträgt, Informationen zur Systemleistung und zum Debugging auf dem Gerät bereitzustellen. Diese Daten können auch von Google erhoben werden, wenn der Nutzer des Geräts die Weitergabe von Nutzungs- und Diagnosedaten aktiviert hat. Apps können die Teilnahme an der Plattformdiagnose für ExoPlayer mitExoPlayer.Builder.setUsePlatformDiagnostics(false)deaktivieren. - Es wurde ein Fehler behoben, durch den Tracks bei Verwendung von
MergingMediaSourcezu oft zurückgesetzt wurden, z. B. beim Sideloading von Untertiteln und beim Ändern der ausgewählten Untertitel während der Wiedergabe (#10248). - Die Erkennung des 5G-NSA-Netzwerktyps auf API 29 und 30 wird eingestellt. Bei diesen Wiedergaben wird von einem 4G-Netzwerk ausgegangen.
- Das Übergeben von
nullanMediaSource.Factory.setDrmSessionManagerProviderundMediaSource.Factory.setLoadErrorHandlingPolicynicht zulassen. Instanzen vonDefaultDrmSessionManagerProviderundDefaultLoadErrorHandlingPolicykönnen bei Bedarf explizit übergeben werden. - Fügen Sie
MediaItem.RequestMetadatahinzu, um Metadaten darzustellen, die zum Abspielen von Media erforderlich sind, wenn der genaueLocalConfigurationnicht bekannt ist. Entferne auchMediaMetadata.mediaUrl, da es jetzt inRequestMetadataenthalten ist. - Fügen Sie
Player.Command.COMMAND_SET_MEDIA_ITEMhinzu, damit Spieler ein einzelnes Element festlegen können.
- Aktivieren Sie die Unterstützung für die Android-Plattformdiagnose über
- Titelauswahl:
- Fasse die Klasse
TrackSelectionOverridesinTrackSelectionParameterszusammen und stufeTrackSelectionOverridein eine Klasse der obersten Ebene hoch. - Benennen Sie
TracksInfoinTracksundTracksInfo.TrackGroupInfoinTracks.Groupum.Player.getCurrentTracksInfoundPlayer.Listener.onTracksInfoChangedwurden inPlayer.getCurrentTracksundPlayer.Listener.onTracksChangedumbenannt. Dazu gehört auch, den MethodennamenPlayer.Listener.onTracksChangedwieder zu aktivieren, jedoch mit anderen Parametertypen. - Ändern Sie
DefaultTrackSelector.buildUponParametersundDefaultTrackSelector.Parameters.buildUponso, dassDefaultTrackSelector.Parameters.Builderanstelle vonDefaultTrackSelector.ParametersBuilderzurückgegeben wird. - Fügen Sie
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitieshinzu, das standardmäßig aktiviert ist. Wenn diese Option aktiviert ist, werden fürDefaultTrackSelectorAudiotracks bevorzugt, deren Kanalanzahl die Ausgabefunktionen des Geräts nicht überschreitet. Auf Mobilgeräten wird beiDefaultTrackSelectorStereo-/Mono-Audioformaten gegenüber Mehrkanal-Audioformaten der Vorzug gegeben, es sei denn, das Mehrkanalformat kann räumlich wiedergegeben werden (Android 12L+) oder ist ein Dolby-Surround-Sound-Format. Außerdem wird auf Geräten, die die räumliche Audioausgabe unterstützen, mitDefaultTrackSelectornach Änderungen an den Spatializer-Eigenschaften gesucht und bei Änderungen eine neue Titelauswahl ausgelöst. Geräte mit demtelevision-UI-Modus sind von diesen Einschränkungen ausgeschlossen und das Format mit der höchsten Anzahl an Kanälen wird bevorzugt. Damit diese Funktion aktiviert werden kann, muss dieDefaultTrackSelector-Instanz mit einemContexterstellt werden.
- Fasse die Klasse
- Video:
- Benennen Sie
DummySurfaceinPlaceholderSurfaceum. - AV1-Unterstützung für
MediaCodecVideoRenderer.getCodecMaxInputSizehinzugefügt
- Benennen Sie
- Audio:
- Der LG AC3-Audiodecoder wirbt mit einem nicht standardmäßigen MIME-Typ.
- Ändern Sie den Rückgabetyp von
AudioAttributes.getAudioAttributesV21()vonandroid.media.AudioAttributesin eine neue Wrapper-KlasseAudioAttributesV21, um eine langsame ART-Überprüfung bei API < 21 zu verhindern. - Frage die Plattform ab (API 29+) oder gehe von der Anzahl der Audio-Encodierungskanäle für die Audio-Passthrough-Funktion aus, wenn die Anzahl der Audio-Kanäle des Formats nicht festgelegt ist. Das ist bei der HLS-Chunkless-Vorbereitung (10204) der Fall.
- Konfiguriere
AudioTrackmit der ChannelmaskeAudioFormat.CHANNEL_OUT_7POINT1POINT4, wenn der Decoder 12‑Kanal-PCM-Audio ausgibt (#10322.
- DRM
- Achte darauf, dass die DRM-Sitzung beim Suchen unmittelbar nach einer Formatänderung immer korrekt aktualisiert wird (10274).
- Text:
- Ändern Sie
Player.getCurrentCues()so, dassCueGroupanstelle vonList<Cue>zurückgegeben wird. - SSA: Unterstützung der Stileinstellung
OutlineColourbeiBorderStyle == 3(d.h.OutlineColourlegt den Hintergrund des Cues fest) (#8435). - CEA-708: Daten in mehrere Serviceblöcke parsen und Blöcke ignorieren, die nicht mit der aktuell ausgewählten Servicenummer verknüpft sind.
- Entfernen Sie
RawCcExtractor, das nur für ein Google-internes Untertitelformat verwendet wurde.
- Ändern Sie
- Extraktoren:
- UI:
- Die Zustellung von Ereignissen an
OnClickListener, die inPlayerViewfestgelegt sind, wird korrigiert, wennuseController=false(#9605). Außerdem wurde die Übermittlung von Ereignissen anOnLongClickListenerfür alle Ansichtskonfigurationen korrigiert. - Es wurde ein Problem behoben, bei dem eine Folge von Touch-Ereignissen, die die Grenzen von
PlayerViewvorACTION_UPverlassen, fälschlicherweise als Klick behandelt wurden (#9861). - Das Problem mit der Bedienungshilfe
PlayerViewwurde behoben. Durch Tippen wird jetzt nicht mehr die Wiedergabe umgeschaltet, sondern die Steuerelemente werden ausgeblendet (#8627). - Schreibe
TrackSelectionViewundTrackSelectionDialogBuilderso um, dass sie mit derPlayer-Schnittstelle anstelle vonExoPlayerfunktionieren. Dadurch können die Ansichten mit anderenPlayer-Implementierungen verwendet werden und die Abhängigkeit des UI-Moduls vom ExoPlayer-Modul wird entfernt. Dies ist eine funktionsgefährdende Änderung. - Erzwungene Text-Tracks werden nicht in der
PlayerView-Track-Auswahl angezeigt und ein geeigneter erzwungener Text-Track bleibt ausgewählt, wenn „Keine“ ausgewählt ist (#9432).
- Die Zustellung von Ereignissen an
- DASH:
- Parsen der Kanalanzahl aus DTS-
AudioChannelConfiguration-Elementen. Dadurch wird das Audio-Passthrough für DTS-Streams wieder aktiviert (#10159). - Das Übergeben von
nullanDashMediaSource.Factory.setCompositeSequenceableLoaderFactorynicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactorykönnen bei Bedarf explizit übergeben werden.
- Parsen der Kanalanzahl aus DTS-
- HLS:
- Wenn das Attribut „CODECS“ der Playlist den Audio-Codec nicht enthält (#10065), wird auf die Vorbereitung in Chunks zurückgegriffen.
- Die Übergabe von
nullanHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryundHlsMediaSource.Factory.setPlaylistTrackerFactorynicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryoder ein Verweis aufDefaultHlsPlaylistTracker.FACTORYkönnen bei Bedarf explizit übergeben werden.
- Smooth Streaming:
- Das Übergeben von
nullanSsMediaSource.Factory.setCompositeSequenceableLoaderFactorynicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactorykönnen bei Bedarf explizit übergeben werden.
- Das Übergeben von
- RTSP:
- RTP-Reader für H263 hinzugefügt (#63).
- RTP-Leser für MPEG4 hinzufügen (#35).
- RTP-Leser für HEVC hinzugefügt (#36).
- RTP-Reader für AMR hinzufügen. Derzeit werden nur Mono-Channel-AMR-Streams ohne Interleaving unterstützt. Die zusammengesetzte AMR-RTP-Nutzlast wird nicht unterstützt. (#46)
- RTP-Leser für VP8 hinzufügen (#47).
- RTP-Leser für WAV hinzufügen (#56).
- RTSP-Header für die grundlegende Autorisierung korrigieren. (#9544).
- Die Prüfung von obligatorischen SDP-Feldern wird beendet, da ExoPlayer sie nicht benötigt (#10049).
- Es wird eine geprüfte Ausnahme ausgelöst, wenn die RTSP-Zeitangabe geparst wird (#10165).
- RTP-Leser für VP9 hinzugefügt (#47).
- RTP-Reader für OPUS hinzufügen (#53).
- Datenquellen:
- Benennen Sie
DummyDataSourceinPlaceholderDataSourceum. - Problemumgehung für die Unterbrechungsbehandlung von OkHttp.
- Benennen Sie
- Sitzung:
- Ersetzen Sie
MediaSession.MediaItemFillerdurchMediaSession.Callback.onAddMediaItems, um die asynchrone Auflösung von Anfragen zu ermöglichen. - Unterstützung von
setMediaItems(s)-Methoden, wennMediaControllereine Verbindung zu einer alten Media Session herstellt. - Entfernen Sie
MediaController.setMediaUriundMediaSession.Callback.onSetMediaUri. Dieselbe Funktionalität kann mitMediaController.setMediaItemundMediaSession.Callback.onAddMediaItemserreicht werden. - Leite alte
MediaController-Anrufe zur Medienwiedergabe anMediaSession.Callback.onAddMediaItemsstatt anonSetMediaUriweiter. - Fügen Sie
MediaNotification.ProviderundDefaultMediaNotificationProviderhinzu, um die Benachrichtigung anzupassen. - Fügen Sie
BitmapLoaderundSimpleBitmapLoaderzum Herunterladen von Artwork-Bildern hinzu. - Fügen Sie
MediaSession.setCustomLayout()hinzu, um die Abwärtskompatibilität mit der alten Sitzung zu gewährleisten. - Fügen Sie
MediaSession.setSessionExtras()hinzu, um die Funktionsparität mit der alten Sitzung zu erreichen. - Benenne
MediaSession.MediaSessionCallbackinMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackinMediaLibrarySession.CallbackundMediaSession.Builder.setSessionCallbackinsetCallbackum. - NPE in
MediaControllerImplLegacybehoben. (#59) - Aktualisieren der Informationen zur Sitzungsposition in der Zeitachse bei Änderungen(#51).
- NPE in
MediaControllerImplBasenach dem Loslassen des Controllers behoben (#74).
- Ersetzen Sie
- Anzeigenwiedergabe / IMA:
- Die Abrufrate für Anzeigen wird von 100 ms auf 200 ms gesenkt, um den Empfehlungen des Media Rating Council (MRC) zu entsprechen.
- FFmpeg-Erweiterung:
- Aktualisieren Sie die CMake-Version auf
3.21.0+, um einen CMake-Fehler zu vermeiden, der dazu führt, dass die Gradle-Synchronisierung von Android Studio fehlschlägt (#9933).
- Aktualisieren Sie die CMake-Version auf
- Entfernen Sie die veralteten Symbole:
- Entfernen Sie
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Verwenden Sie stattdessenPlayer.Listener.onTracksChanged(Tracks). - Entfernen Sie
Player.getCurrentTrackGroupsundPlayer.getCurrentTrackSelections. Verwenden Sie stattdessenPlayer.getCurrentTracks. Sie könnenExoPlayer.getCurrentTrackGroupsundExoPlayer.getCurrentTrackSelectionsweiterhin verwenden, obwohl diese Methoden weiterhin als veraltet gelten. - Entfernen Sie die Konstanten
DownloadHelper,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTundDEFAULT_TRACK_SELECTOR_PARAMETERS. Verwenden Sie nach MöglichkeitgetDefaultTrackSelectorParameters(Context)und andernfallsDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT. - Entfernen Sie den Konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory). Verwenden Sie stattdessenDefaultTrackSelector(Context, ExoTrackSelection.Factory). - Entfernen Sie
Transformer.Builder.setContext. DieContextsollte stattdessen an denTransformer.Builder-Konstruktor übergeben werden.
- Entfernen Sie
Version 1.0.0-alpha03
14. März 2022
androidx.media3:media3-*:1.0.0-alpha03 ist veröffentlicht.
Version 1.0.0-alpha03 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.17.1.
- Audio:
- Fehler beim Prüfen der Audiofunktionen für Dolby Atmos (E-AC3-JOC) in HLS behoben.
- Extraktoren:
- FMP4: Das Problem wurde behoben, dass die emsg-Beispielmetadaten für Streams mit v0- und v1-emsg-Atomen in der falschen Reihenfolge ausgegeben werden konnten (#9996).
- Text:
- Beheben Sie die Interaktion von
SingleSampleMediaSource.Factory.setTrackIdundMediaItem.SubtitleConfiguration.Builder.setId, um das FeldSubtitleConfigurationzu priorisieren und auf den WertFactoryzurückzugreifen, wenn er nicht festgelegt ist (#10016).
- Beheben Sie die Interaktion von
- Anzeigenwiedergabe:
- Audio-Underruns zwischen Anzeigenblöcken in HLS-Livestreams mit SSAI beheben.
Version 1.0.0-alpha02
2. März 2022
androidx.media3:media3-*:1.0.0-alpha02 ist veröffentlicht.
Version 1.0.0-alpha02 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.17.0.
- Core-Bibliothek:
- Füge die geschützte Methode
DefaultRenderersFactory.getCodecAdapterFactory()hinzu, damit Unterklassen vonDefaultRenderersFactory, diebuildVideoRenderers()oderbuildAudioRenderers()überschreiben, auf die Codec-Adapter-Factory zugreifen und sie anMediaCodecRenderer-Instanzen übergeben können, die sie erstellen. - Leite die ICY-Headerfelder
nameundgenreanMediaMetadata.stationbzw.MediaMetadata.genreweiter, damit sie die App überPlayer.Listener.onMediaMetadataChanged()(#9677) erreichen. - Nullschlüssel aus
DefaultHttpDataSource#getResponseHeadersentfernen. - Wenn das Erstellen einer
MediaCodec-Instanz fehlschlägt, wird eine Pause eingelegt und der Vorgang wird wiederholt. Damit wird ein Problem umgangen, das auf einigen Geräten auftritt, wenn eine Oberfläche von einem sicheren Codec zu einem anderen Codec gewechselt wird (#8696). - Fügen Sie
MediaCodecAdapter.getMetrics()hinzu, damit Nutzer Messwertdaten ausMediaCodecabrufen können. (#9766). - Problem mit der Maven-Abhängigkeitsauflösung behoben (#8353).
- Deaktiviere die automatische Geschwindigkeitsanpassung für Livestreams, die weder Low-Latency-Funktionen noch eine Nutzereinstellung für die Geschwindigkeit haben (#9329).
- Benennen Sie
DecoderCounters#inputBufferCountinqueuedInputBufferCountum. SimpleExoPlayer.renderersprivat machen Auf Renderers kann überExoPlayer.getRendererzugegriffen werden.- Einige
AnalyticsListener.EventFlags-Konstantenwerte wurden aktualisiert, damit sie mit den Werten inPlayer.EventFlagsübereinstimmen. AnalyticsCollectorin eine Schnittstelle und eine Standardimplementierung aufteilen, damit sie von R8 entfernt werden kann, wenn eine App sie nicht benötigt.
- Füge die geschützte Methode
- Titelauswahl:
- Unterstützung bevorzugter Video-Rollen-Flags bei der Titelauswahl (#9402).
- Die Logik für die Auswahl von Videotracks wurde aktualisiert, um bevorzugte MIME-Typen und Rollen-Flags bei der Auswahl mehrerer Videotracks für die Anpassung zu berücksichtigen (#9519).
- Die Logik für die Auswahl von Video- und Audio-Tracks wurde aktualisiert, sodass nur Formate für adaptive Auswahlen ausgewählt werden, die dasselbe Niveau an Decoder- und Hardwareunterstützung haben (#9565).
- Die Logik für die Auswahl von Videotracks wurde aktualisiert, um effizientere Codecs zu bevorzugen, wenn mehrere Codecs von primären, hardwarebeschleunigten Decodern unterstützt werden (#4835).
- Bevorzuge Einstellungen für Audioinhalte (z. B. den „Standard“-Audio-Track oder einen Track, der der Sprache des Systemgebietsschemas entspricht) gegenüber technischen Einschränkungen bei der Trackauswahl (z. B. bevorzugter MIME-Typ oder maximale Anzahl von Kanälen).
- Ein Problem bei der Auswahl von Tracks wurde behoben. Wenn eine Trackgruppe überschrieben wurde, wurden andere Trackgruppen desselben Typs nicht deaktiviert (#9675).
- Ein Problem bei der Auswahl von Tracks wurde behoben, bei dem eine Mischung aus nicht leeren und leeren Track-Überschreibungen nicht korrekt angewendet wurde (#9649).
- Doppelte
TrackGroupin einemTrackGroupArrayverbieten.TrackGroups können immer durch Festlegen einesidimTrackGroup-Konstruktor unterschieden werden. Dadurch wird ein Absturz behoben, der beim Fortsetzen der Wiedergabe nach dem Minimieren der App mit einer aktiven Track-Überschreibung aufgetreten ist (#9718). - Die Logik in
AdaptiveTrackSelectionwurde so geändert, dass die Qualität auch bei ausreichender Netzwerkbandbreite erhöht werden kann, selbst wenn die Wiedergabe sehr nah am Live-Edge liegt (#9784).
- Video:
- Die Decoder-Fallback-Logik für Dolby Vision wurde korrigiert, sodass bei Bedarf ein kompatibler H264/H265-Decoder verwendet wird.
- Audio:
- Die Fallback-Logik des Decoders für Dolby Atmos (E-AC3-JOC) wurde korrigiert, sodass bei Bedarf ein kompatibler E-AC3-Decoder verwendet wird.
- Bei
AudioCapabilities-APIs muss explizitAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESanstelle vonnullübergeben werden. - Die Berechnung der
AudioTrack-Puffergröße kann angepasst werden, indem einAudioTrackBufferSizeProviderinDefaultAudioSinkeingefügt wird. (#8891). - Wiederholen Sie die Erstellung von
AudioTrack, wenn die angeforderte Puffergröße > 1 MB war. (#9712).
- Extraktoren:
- Text:
- Fügen Sie ein
MediaItem.SubtitleConfiguration.id-Feld hinzu, das in dasFormat.id-Feld des Untertitel-Tracks übernommen wird, der aus der Konfiguration erstellt wurde (#9673). - Grundlegende Unterstützung für WebVTT-Untertitel in Matroska-Containern hinzugefügt (#9886).
- Verhindern Sie, dass
Cea708Decodermehr als die deklarierte Größe eines Serviceblocks liest.
- Fügen Sie ein
- DRM:
- Entfernen Sie
playbackLooperausDrmSessionManager.(pre)acquireSession. Wenn einDrmSessionManagervon einer App in einem benutzerdefiniertenMediaSourceverwendet wird, muss dasplaybackLooperstattdessen anDrmSessionManager.setPlayerübergeben werden.
- Entfernen Sie
- Anzeigenwiedergabe / IMA:
- Unterstützung für die IMA-Lösung für die dynamische Anzeigenbereitstellung hinzugefügt (#8213).
- Eine Methode für
AdPlaybackStatehinzufügen, um eine Anzeigengruppe zurückzusetzen, damit sie noch einmal abgespielt werden kann (#9615). - Wiedergabegeschwindigkeit von 1,0 während der Anzeigenwiedergabe erzwingen ( #9018).
- Ein Problem wurde behoben, bei dem eine Anzeigengruppe, die nicht geladen werden konnte, zu einem sofortigen Zurücksetzen der Wiedergabe geführt hat (#9929).
- UI:
- DASH:
- Fügen Sie dem
Representation(#9579) geparste wichtige und zusätzliche Properties hinzu. - Unterstützung der Trackrolle
forced-subtitle(#9727). - Die Rolle des
main-Tracks nicht mehr alsC.SELECTION_FLAG_DEFAULTinterpretieren. - Die Ausschlusslogik für die Basis-URL für Manifeste, in denen der DVB-Namespace nicht deklariert wird, wurde korrigiert (#9856).
- Unterstützung relativer
MPD.Location-URLs (#9939).
- Fügen Sie dem
- HLS:
Format.labelfür reine Audio-HLS-Streams korrekt ausfüllen (#9608).- Verwenden Sie standardmäßig die chunklose Vorbereitung, um die Startzeit zu verkürzen. Wenn Ihre Renditionen gemischte Untertitel-Tracks enthalten, die nicht in der Master-Playlist deklariert sind, sollten Sie sie der Master-Playlist hinzufügen, damit sie für die Wiedergabe verfügbar sind, oder die chunklose Vorbereitung mit
HlsMediaSource.Factory.setAllowChunklessPreparation(false)deaktivieren. - Unterstützung der Keyframe-genauen Suche in HLS (#2882).
- RTSP:
- Stellen Sie eine Client-API bereit, um die
SocketFactoryzu überschreiben, die für jede Serververbindung verwendet wird (#9606). - Die DIGEST-Authentifizierungsmethode sollte gegenüber BASIC bevorzugt werden, wenn beide vorhanden sind (#9800).
- Behandlung, wenn das Timing des RTSP-Tracks nicht verfügbar ist (#9775).
- Ungültige RTP-Info-Headerwerte ignorieren (#9619).
- Stellen Sie eine Client-API bereit, um die
- Transformer:
- Die erforderliche Mindest-API-Version wird auf 21 erhöht.
TransformationExceptionwird jetzt verwendet, um Fehler zu beschreiben, die während einer Transformation auftreten.- Fügen Sie
TransformationRequesthinzu, um die Transformationsoptionen anzugeben. - Es können mehrere Zuhörer registriert werden.
- Das Problem, dass der Transformer hängen bleibt, wenn die Codec-Ausgabe teilweise gelesen wird, wurde behoben.
- Mögliche NPE in
Transformer.getProgressbehoben, wenn beim Freigeben des Muxers eine Ausnahme ausgelöst wird. - Demo-App zum Anwenden von Transformationen hinzufügen
- MediaSession-Erweiterung:
- Standardmäßig wird die Playlist in
MediaSessionConnectorjetzt beim Stoppen gelöscht. Apps, die die Playlist beibehalten möchten, könnensetClearMediaItemsOnStop(false)für den Connector aufrufen.
- Standardmäßig wird die Playlist in
- Cast-Erweiterung:
- FFmpeg-Erweiterung:
build_ffmpeg.shvon den Binärdienstprogrammen von LLVM anstelle von GNU abhängig machen (#9933).
- Android 12-Kompatibilität:
- Aktualisieren Sie die Cast-Erweiterung, sodass sie von
com.google.android.gms:play-services-cast-framework:20.1.0abhängt. Ältere Versionen vonplay-services-cast-frameworksind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind, und stürzen mit einemIllegalArgumentExceptionab, wennPendingIntents erstellt werden (#9528).
- Aktualisieren Sie die Cast-Erweiterung, sodass sie von
- Entfernen Sie die veralteten Symbole:
- Entfernen Sie
Player.EventListener. Verwenden Sie stattdessenPlayer.Listener. - Entfernen Sie
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryundMediaSourceFactory#setDrmUserAgent. Verwenden Sie stattdessenMediaSourceFactory#setDrmSessionManagerProvider. - Entfernen Sie
MediaSourceFactory#setStreamKeys. Verwenden Sie stattdessenMediaItem.Builder#setStreamKeys. - Entfernen Sie
MediaSourceFactory#createMediaSource(Uri). Verwenden Sie stattdessenMediaSourceFactory#createMediaSource(MediaItem). - Entferne
setTagausDashMediaSource,HlsMediaSourceundSsMediaSource. Verwenden Sie stattdessenMediaItem.Builder#setTag. - Entfernen Sie
DashMediaSource#setLivePresentationDelayMs(long, boolean). Verwenden SieMediaItem.Builder#setLiveConfigurationundMediaItem.LiveConfiguration.Builder#setTargetOffsetMs, um das Manifest zu überschreiben, oderDashMediaSource#setFallbackTargetLiveOffsetMs, um einen Fallback-Wert anzugeben. - Entfernen Sie
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Die Deaktivierung der Thread-Durchsetzung ist nicht mehr möglich. - Entfernen Sie
ActionFileundActionFileUpgradeUtil. Verwenden Sie ExoPlayer 2.16.1 oder früher, um mitActionFileUpgradeUtilLegacy-Aktionsdateien inDefaultDownloadIndexzusammenzuführen. - Entfernen Sie
ProgressiveMediaSource#setExtractorsFactory. Verwenden Sie stattdessen denProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)-Konstruktor. - Entfernen Sie
ProgressiveMediaSource.Factory#setTagundProgressiveMediaSource.Factory#setCustomCacheKey. Verwenden Sie stattdessenMediaItem.Builder#setTagundMediaItem.Builder#setCustomCacheKey. - Entfernen Sie die Konstruktoren
DefaultRenderersFactory(Context, @ExtensionRendererMode int)undDefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Verwenden Sie stattdessen denDefaultRenderersFactory(Context)-Konstruktor,DefaultRenderersFactory#setExtensionRendererModeundDefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - Entfernen Sie alle öffentlichen
CronetDataSource-Konstruktoren. Verwenden Sie stattdessenCronetDataSource.Factory.
- Entfernen Sie
- Ändern Sie nur die folgenden
IntDefsin@Target(TYPE_USE). Dies kann die Kompilierung von Verwendungen in Kotlin unterbrechen. Das Problem lässt sich beheben, indem Sie die Annotation zum Annotieren des Typs (Int) verschieben.@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(im Paketcom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(im Paketcom.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
Version 1.0.0-alpha01
27. Oktober 2021
androidx.media3:media3-*:1.0.0-alpha01 ist veröffentlicht.
Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Media3 ist der neue Ort für Media-Support-Bibliotheken, einschließlich ExoPlayer. Die erste Alphaversion enthält frühe, funktionale Implementierungen von Bibliotheken für die Implementierung von Media-Anwendungsfällen, darunter:
- ExoPlayer, ein Mediaplayer auf Anwendungsebene für Android, der sich einfach anpassen und erweitern lässt.
- Media Session-Funktionen zum Bereitstellen und Steuern der Wiedergabe. Dieses neue Sitzungsmodul verwendet dieselbe
Player-Schnittstelle wie ExoPlayer. - UI-Komponenten zum Erstellen von Benutzeroberflächen für die Medienwiedergabe.
- Module, die Funktionen in anderen Bibliotheken für die Verwendung mit ExoPlayer umschließen, z. B. das Einfügen von Anzeigen über das IMA SDK.
Weitere Informationen finden Sie im Media3-GitHub-Projekt.
ExoPlayer wurde zuvor in einem separaten ExoPlayer-GitHub-Projekt gehostet. In Media3 lautet der Paketname androidx.media3.exoplayer. Wir planen, das ExoPlayer-GitHub-Projekt noch eine Weile weiter zu pflegen und zu veröffentlichen, damit Apps Zeit für die Migration zu Media3 haben. Media3 bietet Ersatz für alle ExoPlayer-Module, mit Ausnahme der alten Media2- und Mediasession-Erweiterungen, die durch das neue media3-session-Modul ersetzt werden. Dadurch ist eine direkte Integration zwischen Playern und Mediensitzungen möglich, ohne dass eine Adapter-/Connector-Klasse verwendet werden muss.