Media3
| Letzte Aktualisierung | Stabile Release | Releasekandidat | Beta-Release | Alpha-Release |
|---|---|---|---|---|
| 11. November 2026 | 1.11.1 | - | 1.12.0-beta01 | - |
Abhängigkeiten deklarieren
Für eine Abhängigkeit von Media3 musst du deinem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Google-Repository bei Maven.
Fügen Sie die Abhängigkeiten für die benötigten Artefakte in der Datei build.gradle für Ihre App oder Ihr Modul hinzu:
Cool
dependencies { def media3_version = "1.11.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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.11.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs 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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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 findest du Antworten auf Fragen, bekannte Probleme und Feature Requests. Außerdem kannst du dort neue Probleme melden.
Version 1.12.0
Version 1.12.0-beta01
11. November 2026
Version 1.12.0-beta01 enthält die folgenden Commits.
- Gemeinsame Bibliothek:
- Reduzieren Sie
C.DEFAULT_BUFFER_SEGMENT_SIZEvon65536auf65520, damit jede Pufferzuweisung (einschließlich desbyte[]-Objekt-Headers) in ganze Betriebssystemseiten im großen Objektbereich von ART passt. Dadurch wird die Speichernutzung des Beispielpuffers auf Geräten mit 4-KiB-Seiten um etwa 6 % und auf Geräten mit 16-KiB-Seiten um etwa 20 % reduziert. - Ersetzen Sie
androidx.media3.common.util.NullableTypedurch JSpecifyorg.jspecify.annotations.Nullable. androidx.media3.common.util.UnknownNullwurde zugunsten von JSpecify-Annotationen für Nullsicherheit entfernt. Kotlin-Unterklassen vonRunnableFutureTaskmit einem Ergebnistyp, der Null zulässt (z. B.Void?), müssen ein Typargument angeben, das Null zulässt (z. B.RunnableFutureTask<Void?, Exception>).- Fügen Sie
AdViewProvider.getAdVideoView()hinzu, um den VideocontainerViewbereitzustellen, dessen Größe während der Anzeigenwiedergabe angepasst werden kann. - Der RFC 6381-Codec-String
mlpawird inMimeTypes.getMediaMimeTypezuMimeTypes.AUDIO_TRUEHDzugeordnet, wodurch fehlende gemuxte Dolby TrueHD-Audiotracks während der HLS-Chunkless-Vorbereitung behoben werden (#3485). AdPlaybackState.withAdDurationsUswurde korrigiert, um das übergebene Array zu kopieren, undAdPlaybackState.fromAdPlaybackState, um alle Arrayfelder der Anzeigengruppen zu kopieren, sodass eine Instanz nicht mehr über beibehaltene oder freigegebene Arrays geändert werden kann.- Fehler
IllegalStateException(„Player is accessed on the wrong thread.“) behoben, wennPlayer.listenoderPlayer.listenTovon einem anderen Thread als dem Anwendungsthread des Players abgebrochen wird (z. B. beim Abbau des Compose-UI-Tests) (#3005).
- Reduzieren Sie
- ExoPlayer:
- Es wurde ein Problem behoben, bei dem ein Renderer, der frühzeitig für einen bevorstehenden Medienzeitraum aktiviert wurde, mit dem Rendern beginnen konnte, bevor die Wiedergabe zu diesem Zeitraum wechselte.
- Kotlin-Unterklassen von
CompositeMediaSource, die nullable untergeordnete Quell-IDs (z. B.Void?) verwenden, müssen ein nullable Typargument angeben (z. B.CompositeMediaSource<Void?>). - Prüfen Sie in
AdsMediaSource, obAdPlaybackState.removedAdGroupCountbeiAdPlaybackStateAktualisierungen nicht abnimmt. - Es wurde ein Problem behoben, bei dem beim Übergang zwischen Medienzeiträumen, die unterschiedliche Renderer verwenden, der eingehende Renderer vorzeitig aktiviert werden konnte, bevor der ausgehende Renderer das Rendering abgeschlossen hatte (z. B. durch Auslösen von
IllegalStateException(„Mehrere Renderer-Medienuhren aktiviert“)), wennFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONaktiviert ist. - Es wurde ein Problem behoben, bei dem der Übergang zu einer Anzeige mit einer benutzerdefinierten Wiedergabegeschwindigkeit die Weiterleitung aller Renderer zum Anzeigenzeitraum verzögern konnte, wenn
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONaktiviert war. - Probleme mit dem Vorwärmen von Renderern bei Übergängen zwischen Medienzeiträumen und der erneuten Auswahl von Tracks wurden behoben.
MediaPeriod.supportsStreamPrerollFlags()(Standardwertfalse) hinzufügen, damit benutzerdefinierteMediaPeriod-Implementierungen die Berichterstellung für anfängliche Unterbrechungen mitSampleStream.getFlags()aktivieren können. Wenn dies nicht unterstützt wird undFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONaktiviert ist, wird aufMediaPeriod.readDiscontinuity()zurückgegriffen.- Es wurde ein Problem behoben, bei dem das Überspringen einer Anzeige, gefolgt von einer anderen Anzeige in derselben Anzeigengruppe, mit
DISCONTINUITY_REASON_AUTO_TRANSITIONanstelle vonDISCONTINUITY_REASON_SKIPgemeldet wurde oder gar nicht gemeldet wurde, wennAdsMediaSourcedie verzögerte Vorbereitung der Contentquelle verwendet.
- Transformer:
- CodecDB (
androidx.media3.transformer.codecdb) wurde hinzugefügt. Diese Funktion empfiehlt Video-Encoder-Konfigurationen (Codec, Encoder-Einstellungen und Bitrate) für das aktuelle Gerät anhand von gemessenen Encoder-Qualitätsdaten.
- CodecDB (
- Extraktoren:
- ADTS: Es wurde ein Problem behoben, bei dem
AdtsExtractordas Audioformat von einem falschen Synchronisierungswort in der Nutzlast eines unvollständigen ersten Frames ableitete. Dies konnte dazu führen, dass die Wiedergabe von AAC-Livestreams, die in der Mitte des Frames gestartet wurden, fehlschlug oder ins Stocken geriet (#3464). - Fehler
ArrayIndexOutOfBoundsExceptioninFragmentedMp4Extractorbehoben, wenn ein Fragment einetrun-Box ohne Samples enthält (#3471). - ADTS:
FLAG_DISABLE_ID3_METADATAzuAdtsExtractorhinzugefügt, um zu verhindern, dass ID3-Daten im Stream alsapplication/id3-Track ausgegeben werden. - MP4: Behebung eines Problems bei der lückenlosen Wiedergabe von AAC-Tracks, deren Muxer (z. B. FFmpeg) den letzten
stts-Eintrag kürzt, um das Encoder-Padding auszuschließen. Dadurch wurde das Padding aus derelst-Bearbeitungsliste als 0 abgeleitet und das Ende des letzten Frames wurde abgespielt (#3489). - Behebung von Problemen mit großen Vorabzuweisungen für den Peek-Zwischenspeicher und
OutOfMemoryErrorbeim Sniffing beschädigter oder Nicht-Mediendateien, die mitID3beginnen (#3502).
- ADTS: Es wurde ein Problem behoben, bei dem
- Prüfer:
- Ein Problem wurde behoben, bei dem durch das Abbrechen des von
MetadataRetriever.retrieveDurationUs()zurückgegebenen Future verhindert wurde, dassclose()die zugrunde liegendeMediaSourcefreigibt (#3468). - Korrigieren Sie
MediaExtractorCompat, umMediaFormat.KEY_FRAME_RATEals Ganzzahl zurückzugeben, die der PlattformMediaExtractorentspricht.
- Ein Problem wurde behoben, bei dem durch das Abbrechen des von
- Audio:
- Es wurde ein Problem behoben, bei dem gepufferte übersprungene Stille in
AudioSink.getCurrentPositionUs(boolean)enthalten war und mitAudioSink.Listener.onSilenceSkipped()gemeldet wurde, bevor die Wiedergabe den übersprungenen Bereich erreichte (#3472). - Lege die Codec-Herkunft mit
AudioTrack.Builder.setCodecProvenanceauf API 37+ fest, wenn du räumliches Mehrkanal-PCM-Audio abspielst, das aus einem komprimierten Format decodiert wurde. - Es wurde ein Problem behoben, bei dem die Initialisierungswiederholungen von
AudioTrackübersprungen wurden, wenn 1 Sekunde Audio mindestens so groß wie die anfängliche Puffergröße war. Dadurch schlug die DTS-HD-Weiterleitung auf Geräten mit begrenztem Audiospeicher fehl (#3487).
- Es wurde ein Problem behoben, bei dem gepufferte übersprungene Stille in
- Video:
- Fallback auf einen H.265/HEVC-Decoder für abwärtskompatible Dolby Vision Profile 7-Streams zulassen und kein Fallback mehr auf einen AV1-Decoder für Profile 10-Streams, deren Basisebene den vollen Bereich mit nicht spezifizierten Übertragungseigenschaften signalisiert (#3486).
- Die Decoderauswahl in
MediaCodecUtilwurde korrigiert, um zu vermeiden, dass primäre Decoder ausgewählt werden, die das Profil des Formats nicht funktional unterstützen (z. B. ein Dolby Vision-Decoder für ein anderes Profil), wenn kein Decoder das Format vollständig unterstützt (#3486).
- Text:
- Reduziere die Speichernutzung in
DvbParser, indem du Untertitelbereiche direkt in Bitmaps in der Größe des Bereichs renderst, anstatt eine Vollbild-Bitmap beizubehalten.
- Reduziere die Speichernutzung in
- Auswirkung:
- Behebung eines
NullPointerExceptioninDefaultVideoFrameProcessorbeim Leeren (z. B. beim Suchen oder Scrubben inCompositionPlayer) (#3470). - Es wurde ein Problem behoben, bei dem
DefaultGlObjectsProvider.releaseeinenGlExceptionauslöste, wenn der Anbieter nach einem Release wiederverwendet wurde (#2016).
- Behebung eines
- Muxer:
- Der Track
Formatwird validiert, wenn er zuMp4MuxeroderFragmentedMp4Muxerhinzugefügt wird, anstatt später beim Schreiben von Beispielen oder Schließen des Muxers einen Fehler zu verursachen. - Wiederholte Aufrufe von
Muxer.close()in allenMuxer-Implementierungen der Bibliothek werden zu einem No-Op gemacht und der Muxer wird als geschlossen behandelt, auch wennclose()einen Fehler auslöst. Wenn nachclose()eine andere Methode aufgerufen wird, wird jetzt einIllegalStateExceptionausgelöst.
- Der Track
- IMA-Erweiterung:
- Unterstützung der
ResizablePlayer-Schnittstelle des IMA SDK, damit interaktive Anzeigen die Größe und Position der Videoplayer-Ansicht im Anzeigencontainer ändern können, und Hinzufügen vonImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider)(ImaAdsLoader.requestAds(DataSpec, Object, ViewGroup)wird eingestellt).
- Unterstützung der
- Sitzung:
- APIs für Einstellungen für Medientasten stabilisieren.
- Die Speichernutzung wird reduziert, da komprimierte Coverdaten nicht mehr in
CacheBitmapLoadergespeichert werden. - Vermeiden Sie redundante
MediaSession.setQueue(null)-Aufrufe bei Zeitachsenaktualisierungen, wenn die Sitzungswarteschlange der Plattform bereitsnullist (z. B. wennPlayer.COMMAND_GET_TIMELINEnicht verfügbar ist). - Ein Problem wurde behoben, bei dem
MediaSessionServiceeiner Dienstimplementierung nicht die Möglichkeit gab, sich ordnungsgemäß wiederherzustellen, da nicht versucht wurde, eine neue Sitzung zu erstellen (#3490). Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATEanstelle vonPlayer.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDmelden, wenn ein Legacy-MediaSessionCompat-Metadatenupdate die Metadaten oder die Dauer des aktiven Warteschlangenelements ändert, ohne die Warteschlange zu ändern.- Fehlende Cover für ältere Sitzungen, die neben einer gültigen
METADATA_KEY_ALBUM_ARTeinenullMETADATA_KEY_DISPLAY_ICON(oder Cover-URI) festlegen, werden korrigiert: Null-Cover-Werte werden jetzt beim Konvertieren älterer Metadaten übersprungen.
- UI:
- Füge einen
subtitles-Slot für ein Composable zuContentFrameundPlayerhinzu, mit Standardunterstützung inmedia3-ui-compose-material3für das Rendern von Bitmap- und horizontalen Textuntertiteln. SubtitleView.setTextDirectionHeuristicwurde hinzugefügt, um die Anpassung der Heuristik für die Textrichtung zu ermöglichen, die für den bidirektionalen Zeilenumbruch von Untertiteln verwendet wird (#3454).- Alle Steuerelement-Slots in
Playerinmedia3-ui-compose-material3, einschließlich benutzerdefinierter Slots, werden animiert und der Parametervisiblewird ausPlayerDefaults.TopControls,CenterControlsundBottomControlsentfernt. Dies ist eine funktionsgefährdende Änderung an einer instabilen API. - Unterstützung für
AdViewProvider.getAdVideoView()inPlayerViewdurch Wrapping vonexo_content_frameinexo_content_frame_container. - Die Speichernutzung in
SubtitleViewwurde reduziert, indem im Cache gespeicherte Untertitel-Bitmaps und Textlayouts freigegeben werden, wenn Cues gelöscht werden. Außerdem wurde ein Problem behoben, bei dem veralteter Untertiteltext sichtbar bleiben konnte, wenn ein Cue nicht breit genug war, um ihn darzustellen.
- Füge einen
- HLS-Erweiterung:
- Es wurden Probleme behoben, bei denen beim Neuladen eines fehlgeschlagenen oder abgebrochenen HLS-Medienblocks teilweise gepufferte Samples beibehalten werden konnten, ohne sie zu verwerfen oder zu verbinden, oder die Ladeposition auf eine veraltete Suchposition zurückgesetzt wurde (#3362).
- Fehler
IllegalStateExceptionwurde behoben, der beim Springen zum Anfang eines gepufferten Segments nach einem adaptiven Trackwechsel auftrat. - Behebung mehrerer Wiedergabeprobleme beim Wechseln von Pfaden mit HLS Content Steering (#3465).
- DASH-Erweiterung:
- Duplizierte oder unleserliche CEA-608-Untertitel wurden korrigiert, wenn ein Stream mehrere eingebettete Untertiteltracks hat (#887).
- Cast-Erweiterung:
- Ein Problem wurde behoben, bei dem
RemoteCastPlayer-Ladeanfragen von Android TV-Empfängern verworfen wurden (#3462). - Aktualisieren Sie die Abhängigkeit
com.google.android.gms:play-services-cast-frameworkauf23.0.0. CastParams.Builder.setSystemOutputSwitcherEnabled(boolean)wurde hinzugefügt, um zu konfigurieren, ob Cast-Geräte in der Ausgabeauswahl des Systems angezeigt werden, ohne dassMediaTransferReceiverinAndroidManifest.xmldeklariert werden muss. Außerdem wurde die Ausgabeauswahl des Systems standardmäßig für Apps aktiviert, die auf API 37 oder höher ausgerichtet sind und auf Geräten mit API 37 oder höher ausgeführt werden.- Unterstützung vordefinierter Cast-
MediaMetadata-Felder inDefaultMediaItemConverterdurch Zuordnung von Feldern ohne dediziertesMediaItem.mediaMetadata-Attribut zu und vonMediaItem.mediaMetadata.extrasund Beibehaltung benutzerdefinierter Extras inMediaInfo.customData. - In
DefaultMediaItemConverterwerden keine Ausnahmen mehr ausgelöst, wenn ein Wiedergabe-URI fehlt oder die Konvertierung fehlschlägt. Die Medien-ID und die Metadaten in derCastPlayer-Zeitachse für Cast-Warteschlangenelemente ohne Wiedergabe-URI bleiben erhalten. - Füge
SessionAvailabilityListener.onCastSessionAvailable(boolean)hinzu, um anzugeben, ob eine verfügbare Übertragungssitzung mit Intent to Join gestartet wurde, und behalte den Status der Remote-Wiedergabe bei, anstatt ihn mit dem Status des lokalen Players zu überschreiben, wenn du einer Übertragungssitzung mit Intent to Join inCastPlayerbeitrittst. MediaInfound Zeitachsendauern ausMediaMetadata.durationMsfür Nicht-Live-Elemente inDefaultMediaItemConverterundRemoteCastPlayerfüllen und vom Empfänger aufgelöste Dauern und Livestream-Status über Warteschlangensuchen hinweg beibehalten.
- Ein Problem wurde behoben, bei dem
- Demo-App:
- In der Demo-App für die Sitzung das Neuanordnen von Playlistelementen durch Ziehen zulassen.
- Entfernen Sie nicht mehr unterstützte Symbole:
androidx.media3.transformer.TextureAssetLoaderentfernen. Verwenden Sie stattdessenandroidx.media3.transformer.RawAssetLoader.- Entfernen Sie öffentliche
DefaultDecoderFactory-Konstruktoren. Verwenden Sie stattdessenDefaultDecoderFactory.Builder. DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_BLACKLIST_MSentfernen. Verwenden Sie stattdessenDefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_EXCLUSION_MS.- Entfernen Sie
DefaultVideoFrameProcessor.Factory.Builder.setRequireRegisteringAllInputFrames(boolean). Verwenden Sie stattdessenVideoFrameProcessor.INPUT_TYPE_SURFACE_AUTOMATIC_FRAME_REGISTRATION. - Entfernen Sie
EditedMediaItemSequence.Builder.experimentalSetForceAudioTrack(boolean)undEditedMediaItemSequence.Builder.experimentalSetForceVideoTrack(boolean). Verwenden Sie stattdessenEditedMediaItemSequence.Builder(Set). EditedMediaItemSequence.forceAudioTrackentfernen. Verwenden Sie stattdessentrackTypes.contains(C.TRACK_TYPE_AUDIO).EditedMediaItemSequence.forceVideoTrackentfernen. Verwenden Sie stattdessentrackTypes.contains(C.TRACK_TYPE_VIDEO).- Entfernen Sie
ExportResult.durationMsundExportResult.Builder.setDurationMs. Verwenden Sie stattdessenExportResult.approximateDurationMsundExportResult.Builder.setApproximateDurationMs. SilenceSkippingAudioProcessor.DEFAULT_PADDING_SILENCE_USentfernen. Gib das Verhalten bei Stille stattdessen mitsilenceRetentionRatioan.Timeline.getPeriodPosition(Window, Period, int, long, long)entfernen. Verwenden Sie stattdessenTimeline.getPeriodPositionUs(Window, Period, int, long, long).
Version 1.12.0-alpha02
26. Oktober 2026
Version 1.12.0-alpha02 enthält die folgenden Commits.
- Auswirkungen auf die Google Play-Dienste:
- Einführung eines neuen
media3-effect-play-services-Moduls mit Google Play-Dienste-Medieneffekten, einschließlichEnhancementSessionDecoratorfür die Videooptimierung undStudioSoundAudioProcessorfür die Trennung von Audioquellen.
- Einführung eines neuen
Version 1.12.0-alpha01
21. Oktober 2026
Version 1.12.0-alpha01 enthält die folgenden Commits.
- Gemeinsame Bibliothek:
C.COLOR_SPACE_DISPLAY_P3hinzugefügt und Unterstützung für den Display-P3-Farbraum in den ISO-FarbzuordnungenMediaFormatUtilundColorInfohinzugefügt.- Es wurde eine zentrale
Flags-Registry hinzugefügt, um experimentelle Funktions-Flags und gestaffelte Roll-outs (Flags.setCanaryModeEnabled) zu verwalten. Viele vorhandene@ExperimentalApi-Methoden wurden migriert, um die neue Flags API zu verwenden. - Fügen Sie
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categoriesundMediaMetadata.Builder.setCategories(List<String>)hinzu. - Ersetzen Sie
androidx.media3.common.util.NonNullApidurch JSpecifyorg.jspecify.annotations.NullMarked.
- ExoPlayer:
- Es wurde ein Problem behoben, bei dem die DASH-Wiedergabe mit mehreren Perioden hängen blieb, wenn der erste Chunk der nächsten Periode nicht geladen werden konnte (#3396).
- Bericht
wasCanceled = trueinAnalyticsListener.onLoadErrorundMediaSourceEventListener.onLoadError, wenn die Wiederholungsversuche für das Laden erschöpft sind. - Unterstützung für die Registrierung mehrerer
VideoFrameMetadataListener-Instanzen mitExoPlayer.addVideoFrameMetadataListenerundExoPlayer.removeVideoFrameMetadataListener, wobeiExoPlayer.setVideoFrameMetadataListenerundExoPlayer.clearVideoFrameMetadataListenereingestellt werden. - Fügen Sie Unterstützung für Anzeigen in Inhalten mit mehreren Zeiträumen (z.B. DASH) hinzu, indem Sie den
AdPlaybackStatefür jeden Zeitraum aufteilen und versetzen. - Race-Bedingung in
PreCacheHelperbehoben, bei der das Abbrechen einer laufenden Vorbereitungsanfrage trotzdem Downloads im Hintergrund starten konnte. - Beschränken Sie
setLoadOnlySelectedTracks(true)fürProgressiveMediaSourceundDefaultMediaSourceFactory, um nur nicht ausgewählte Video- und Bildtracks herauszufiltern. Audio- und Texttracks werden immer geladen, um einen nahtlosen Wechsel der Tracks ohne erneutes Zwischenspeichern zu ermöglichen. setLoadOnlySelectedTracks(true)standardmäßig aufProgressiveMediaSourceundDefaultMediaSourceFactoryaktivieren. Das spart Arbeitsspeicher und ermöglicht genauere Berechnungen derDefaultLoadControl-Pufferzuweisung, wenn nicht alle Tracks ausgewählt sind. Beachten Sie, dass dies zu zusätzlichem Zwischenspeichern führen kann, wenn nicht ausgewählte Video- oder Bildtracks während der Wiedergabe neu aktiviert werden.- Es wurde ein Problem behoben, bei dem
Player.getCurrentPosition()veraltete Werte zurückgeben konnte (Aktualisierung nur wenige Male pro Sekunde), wenn die dynamische Planung aktiviert war (#3286). - Es wurde ein Problem behoben, bei dem eine unerwartete Verringerung oder ein Zurücksetzen der Position des Wiedergabekopfs
AudioTrackfälschlicherweise als Ganzzahlüberlauf behandelt werden konnte, was dazu führte, dass die Wiedergabe während der Zwischenspeicherung ins Stocken geriet (#3407). - Experimentelle
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean)entfernen. - Vermeidung unnötiger erneuter Aktivierungen des Renderers und von Fehlern bei der Rückkehr von Interstitials oder Anzeigen zu Inhalten, die am Ende abgeschnitten sind (#3371).
- Es wurde ein Problem behoben, bei dem ein Renderer-Fehler bei einem anstehenden Playlist-Element die aktuelle Wiedergabe vorzeitig unterbrechen konnte, wenn
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONaktiviert war. - Es wurde ein
NullPointerExceptionbehoben, der auftreten konnte, wennExoPlayerRenderer zu einem nicht vorbereiteten Medienzeitraum überging, wennFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONaktiviert war. - Ein Problem wurde behoben, bei dem Videoframes während der dynamischen Planung unerwartet übersprungen oder verworfen werden konnten, wenn
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSaktiviert ist. - Ein
ArrayIndexOutOfBoundsExceptionin Analytics-Listenern wurde behoben, der auftrat, wenn die Wiedergabe während einer Anzeige in einem Livestream gestoppt wurde (#3423). - Ein Problem wurde behoben, bei dem
PreloadMediaSourceunerwartet ein Vorablade-Ereignis posten konnte, wennpreload()nie aufgerufen wurde (#3408). - Es wurde ein Problem behoben, bei dem
Format.subsampleOffsetUsfür Metadatentracks ignoriert wurde, was zu falschen Wiedergabezeitstempeln in decodierten SCTE-35-Splice-Befehlen führte (#3413). - Ein Speicherleck in
PreloadMediaSourceundDefaultPreloadManagerwurde behoben, das auftrat, wennpreload()mehrmals für dieselbe Quelle aufgerufen wurde (#3445). - Behebung eines
NullPointerExceptionbeim Freigeben vonAdsMediaSource, während eine Aktualisierung der Inhaltszeitachse aussteht (#3442). - Es wurde ein Problem behoben, bei dem die Wiedergabe von progressiven Medien zur falschen Position springen konnte, wenn ein Ladevorgang nach einem Suchvorgang (oder beim Starten der Wiedergabe an einer Position ungleich null) fehlschlug und wiederholt wurde (#3440).
- Problemumgehung für den H.264-Decoder des Xiaomi TV Stick 4K (MiTV-AYFR0) hinzugefügt, der bei nahtlosen Auflösungsänderungen einfriert (#3457).
- Behebung eines
NullPointerExceptioninSteeringManifestTracker, wenn der Tracker beendet wird, bevor ein geposteter Ladevorgang oder ein Fehler-Callback ausgeführt wird (#3443). - Unterstützung der Wiedergabe von zeitgesteuerten HAGC-Metadaten (ST 2094-50) aus
mebx-Boxed-Metadatentracks in MP4-Dateien. - Ein Problem wurde behoben, bei dem Medienzeiträume in einer Playlist, die langsam vorbereitet wurden, übersprungen werden konnten.
- CompositionPlayer:
- Unterstützung für die Konfiguration der Framerate der Videoframe-Aggregation mit
Composition.Builder.setVideoFrameAggregationParametersfür Wiedergabe-Workflows. - Beheben Sie Frame-Drops in Kompositionen mit mehreren Sequenzen, die durch Zeitstempelquantisierung oder Rundungsabweichungen verursacht werden, indem Sie bei der Frame-Aggregation den Frame mit dem nächstgelegenen Zeitstempel auswählen. Dies ist nur ab API 29 möglich, da pro Videosequenz ein zusätzlicher Frame im Flug gehalten werden muss.
- Unterstützung für die Konfiguration der Framerate der Videoframe-Aggregation mit
- Transformer:
- Unterstützung für die Konfiguration der Framerate der Videoframe-Aggregation mit
Composition.Builder.setVideoFrameAggregationParametersfür Exportworkflows. - Beheben Sie Frame-Drops in Kompositionen mit mehreren Sequenzen, die durch Zeitstempelquantisierung oder Rundungsabweichungen verursacht werden, indem Sie bei der Frame-Aggregation den Frame mit dem nächstgelegenen Zeitstempel auswählen. Dies ist nur ab API 29 möglich, da pro Videosequenz ein zusätzlicher Frame im Flug gehalten werden muss.
Transformer#setAudioMimeType(AUDIO_RAW)wird berücksichtigt, wennAudioProcessorsverwendet wird. Vor dieser Korrektur führte das Anfordern vonMimeTypes.AUDIO_RAWund das Anwenden einesAudioProcessorzu einer komprimierten Ausgabe.
- Unterstützung für die Konfiguration der Framerate der Videoframe-Aggregation mit
- Trackauswahl:
- Ein Problem wurde behoben, bei dem auf einigen Geräten ein SDR-Track fälschlicherweise einem unterstützten Dolby Vision-Track vorgezogen wurde (#3135).
- Extraktoren:
- Mp4Extractor: Fehler beim Parsen der
dOps-Box für Opus in MP4 behoben, bei demPreSkip,InputSampleRateundOutputGainnicht von Big-Endian in Little-Endian konvertiert wurden, was dazu führte, dass die ersten ca. 299 ms des Audios verworfen wurden, wenn keine Bearbeitungsliste vorhanden war (#3431). - Entfernen Sie
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESundFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265, da das Parsen von GOP-internen Beispielabhängigkeiten für H.264 und H.265 standardmäßig aktiviert ist. - Mp4Extractor: Es wurde ein Fehler beim Parsen von Standortmetadaten aus
xyz-Boxen mit Höhenkoordinaten zum Ausfüllen vonMp4LocationDatabehoben. ExtractorUtil.getFramesPerEncodedSamplewurde hinzugefügt, um die Anzahl der Audioframes pro Sample für codierte Audioformate zu berechnen (#3367).- Fügen Sie
FLAG_READ_XMP_METADATAzuMp4Extractorhinzu, um XMP-Metadaten aus UUID-Boxen auf oberster Ebene zu extrahieren. - Beschädigte AC-3-, DTS- und LPCM-Audiodaten bei der Wiedergabe von DVD-ähnlichen MPEG-PS-Inhalten werden korrigiert, indem der
private_stream_1-Substream-Header aus jedem PES-Paket inPsExtractorentfernt wird, bevor die Nutzlast an den Audioleser übergeben wird (#3327). - Fehler in
FragmentedMp4Extractorbehoben, wenn einetfdt-Box der Version 1 eine negativebaseMediaDecodeTimecodiert (#3412). - MPEG-TS: Unterstützung für das Parsen von H.264- und H.265-Frame-Packing-Anordnungs-SEI-Nachrichten zum Ausfüllen von
Format.stereoMode(#3419). - Konfigurationsdaten für Dolby Vision-Profil 20 parsen und nicht unterstützte Dolby Vision-Profile ablehnen, anstatt sie als Standard-HEVC mit falschen Farben wiederzugeben (#3427).
- MP3: Die Anpassung der Metadaten für die Verzögerung und das Padding des LAME/Xing-Encoders wurde rückgängig gemacht, da sie mit vielen
MediaCodec-MP3-Decodern nicht kompatibel ist (#3425). - Matroska:
NullPointerExceptionbeim Parsen verschachtelterChapterAtom-Elemente korrigiert (#3438). - Ogg: Ein Fehler wurde behoben, bei dem ein Paket, dessen Größe ein Vielfaches von 255 Byte ist und das an einer Seitengrenze endet, mit dem folgenden Paket zusammengeführt wird.
- MP4: Parsen von
mebx-Box-Tracks mit zeitgesteuerten Metadaten inMp4ExtractorundFragmentedMp4Extractor. Tracks mit einemit35-Schlüssel werden alsMimeTypes.APPLICATION_ITUT_T35verfügbar gemacht (wodurch die HAGC-Wiedergabe ermöglicht wird). Anderemebx-Tracks werden ignoriert, es sei denn,FLAG_EMIT_RAW_MEBX_DATAist festgelegt. In diesem Fall werden allemebx-Tracks als Roh-MimeTypes.APPLICATION_MEBXausgegeben. - Ogg: Unterstützung für das Extrahieren von Opus-End-Padding für die lückenlose Wiedergabe (#2576) und Korrektur von Beispielzeitstempeln nach dem Springen zu einer Seite, die mit einem fortgesetzten Paket beginnt.
- Ogg: Behebung von Decodierungsfehlern und Zeitstempelsprüngen von ca. 1 Sekunde in verketteten Ogg Opus-Streams durch Ignorieren von Opus-ID- und Kommentar-Header-Paketen in der Mitte des Streams.
- Mp4Extractor: Fehler beim Parsen der
- Prüfer:
- Unterstützung für das Abrufen von XMP-Metadaten aus MP4-Dateien mit
MetadataRetriever. - Unterstützung für das Extrahieren von
mebx-Box-Tracks mit zeitgesteuerten Metadaten inMediaExtractorCompatalsMimeTypes.APPLICATION_MEBX.
- Unterstützung für das Abrufen von XMP-Metadaten aus MP4-Dateien mit
- Inspector-Frame:
- Behebung des Problems, dass Wide-Gamut-BT.2020-Farben im SDR-Basisbild abgeschnitten werden, wenn Ultra-HDR-Frames mit
FrameExtractorextrahiert werden. Farben außerhalb des Farbraums werden jetzt sanft in den sRGB-Farbraum komprimiert, anstatt abgeschnitten zu werden.
- Behebung des Problems, dass Wide-Gamut-BT.2020-Farben im SDR-Basisbild abgeschnitten werden, wenn Ultra-HDR-Frames mit
- Audio:
- Problemumgehung für Geräte hinzugefügt, die
android.media.AudioDeviceCallbackim falschen Thread aufrufen (#3386). - Behebung potenzieller Wiedergabeprobleme nach Titelübergängen mit komprimiertem Offload.
- Problem auf Amazon Fire TV-Sticks umgehen, bei dem AC-3-Audio während Periodenübergängen einfrieren konnte (#3448).
- Unterstützung für das Kürzen des Encoder-Paddings am Ende des Streams für die lückenlose Wiedergabe von Ogg- und WebM/Matroska-Opus-Dateien (#2576).
- Es wurde ein Problem behoben, bei dem die Aktualisierungen der Verzögerung und des Padding für die lückenlose Wiedergabe bei dynamischem Offload während der Titelübergänge auf den eingehenden Titel und nicht auf den wiedergegebenen Titel angewendet wurden.
- Kürzen des Encoder-End-Paddings bei einzelnen Streams und dem letzten Stream in einer Playlist zusätzlich zu lückenlosen Übergängen in der Mitte der Playlist (#2576).
- Vermeide unnötige Kopien des Audio-Buffers in
TrimmingAudioProcessor, nachdem das Kürzen der Encoder-Verzögerung am Anfang des Streams abgeschlossen ist und kein Padding am Ende des Streams gekürzt werden muss.
- Problemumgehung für Geräte hinzugefügt, die
- Video:
- Die Meldung von verspäteten Videoframes mit identischen Release-Zeitstempeln wurde korrigiert, sodass sie als verworfen und nicht als übersprungen gemeldet werden.
- Text:
- Füge
MediaItem.SubtitleConfiguration.timeOffsetUshinzu, um die Zeitstempel von per Sideloading geladenen Untertiteln relativ zu den Medien zu verschieben. Der Offset kann während der Wiedergabe mitPlayer.replaceMediaItem(int, MediaItem)geändert werden, ohne die Wiedergabe zu unterbrechen (#1976). - SubRip: Unterstützung für das Einfügen eines
CharsetDetectorinDefaultSubtitleParserFactoryhinzugefügt, um die Zeichencodierung eigenständiger SubRip-Untertitel ohne Byte Order Mark zu erkennen (#2247).
- Füge
- Auswirkung:
SoundSeparationAudioProcessorfür die Trennung von Audioquellen mit dem StudioSound-GMSCore-Modul implementieren.
- Muxer:
- Fehler beim Schreiben der
dOps-Box für Opus inMp4MuxerundFragmentedMp4Muxerbehoben, bei demPreSkip,InputSampleRateundOutputGainin Little-Endian statt Big-Endian geschrieben wurden (#3431). - Unterstützung für das Schreiben der GPS-Höhe in
Mp4LocationDatamitMp4Muxer. - Fügen Sie
Muxer.Factory.create(ParcelFileDescriptor)hinzu, um das direkte Multiplexing in einParcelFileDescriptorzu ermöglichen. - Standardmäßig wird die
tfdt-Box (Track Fragment Base Media Decode Time) intraf-Boxen fragmentierter MP4-Dateien geschrieben, um Zeitstempel für die Mediendecodierung bereitzustellen. - Unterstützung für das Schreiben von E-AC-3- und E-AC-3-JOC-Containerboxen (Dolby Atmos)
dec3inMp4Muxer. - Unterstützung für das WebM-Format zu
MediaMuxerCompathinzugefügt. - Schreibt die
mfra-Box (Movie Fragment Random Access) am Ende fragmentierter MP4-Dateien, um die Suche inFragmentedMp4ExtractormitFLAG_READ_MFRA_FOR_SEEK_MAPzu ermöglichen. - Absturz in
Mp4WriterundFragmentedMp4Writerbehoben, der auftrat, wenn ein EOS-Beispiel geschrieben wurde, bevor andere Beispiele geschrieben wurden. - Behebung der Container-Compliance beim Muxen von Dolby-Inhalten in MP4- oder fragmentierte MP4-Dateien durch Angabe der mit
dby1kompatiblen Marke im Container-Header (#3369). - Unterstützung für 32-Bit-Float-PCM-Audiotracks in
Mp4MuxerundFragmentedMp4Muxer(#3389). - Nicht unterstützte Dolby Vision-Profile in
Mp4MuxerundFragmentedMp4Muxerbeim Hinzufügen von Tracks ablehnen. - Unterstützung für 24-Bit- und 32-Bit-Integer-PCM-Audiotracks in
Mp4MuxerundFragmentedMp4Muxer.
- Fehler beim Schreiben der
- IMA-Erweiterung:
- Leiten Sie die Ereignisse zum Pausieren und Fortsetzen des Players an das IMA SDK in
ImaServerSideAdInsertionMediaSourceweiter.
- Leiten Sie die Ereignisse zum Pausieren und Fortsetzen des Players an das IMA SDK in
- Sitzung:
- Füge
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIundMediaConstants.EXTRAS_KEY_CATEGORIEShinzu, um Playlist- und Elementmetadaten aus alten Metadaten und Beschreibungen zu füllen, sowieMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEundMediaConstants.EXTRAS_KEY_TTL_SECONDSfür den VorschlagLibraryParams.extras. - Behebung eines
SecurityException-Absturzes beim Erstellen oder Freigeben einesMediaSessionauf Geräten, die strengePendingIntent-Limits erzwingen. - Es wurde ein Problem behoben, bei dem
MediaSession.getControllerForCurrentRequest()bei Wiedergabeanfragen unter Android 12 (API 31 und 32)nullzurückgegeben hat, wennMediaSessionServicenoch nicht im Vordergrund war. - Behebung eines Absturzes von
IllegalArgumentException, wenn einMediaControllereine Verbindung zu einer Legacy-Sitzung herstellt, die eine negative maximale Lautstärke meldet. - Es wurde ein Problem behoben, bei dem der Aufruf von
MediaController.setMediaItemodersetMediaItemsgefolgt vonplay()für eine pausierte alteMediaSessionCompat-Version einen nicht unterstütztenonPrepareFrom*-Callback anstelle vononPlayFrom*oderonPlay()ohne erneute Initialisierung der angeforderten Mediendatei auslösen konnte. - Fehlerbehebung für
NullPointerExceptionin der Legacy-Version vonMediaBrowserbeim Empfang einer benutzerdefinierten Befehlsantwort (#3432). - Absturz von
IllegalArgumentExceptionbeim Empfang von Legacy-Metadaten mit doppelten Schlüsseln im zugrunde liegendenBundlebehoben. - Ausgehende
MediaControllerCompat.TransportControls-Aufrufe, die innerhalb derselbenLooper-Iteration beim Steuern einer Legacy-MediaSessionCompaterfolgen, werden zusammengefasst (z. B. wird durch den gemeinsamen Aufruf vonsetMediaItem,prepareundplayjetzt ein einzelneronPlayFrom*-Callback gesendet).
- Füge
- UI:
- Die Positionierung von Satzzeichen in RTL-Untertiteln und die Beibehaltung des Span-Bereichs wurden korrigiert, wenn der bidirektionale Textumbruch aktiviert ist (#3454, #3455).
- Fügen Sie dem
media3-ui-compose-Modul die KlassenTrackSelectionStateundTrackSelectionParametersStateund die entsprechenden Composable-Status-Remember-Funktionen hinzu. - Führen Sie
PresentationState.videoAspectRatioein und lassen SieModifier.resizeWithContentScaleaspectRatio: Float?anstelle vonsourceSizeDp: Size?verwenden. - Fügen Sie dem
media3-ui-compose-Modul die KlasseCuesStateund das ComposablerememberCuesStatehinzu, um die aktuellen Cues des Players zu erfassen. - Unterstützung für den Scrubbing-Modus in
ProgressSliderhinzugefügt, wenn es aufExoPlayeroderCompositionPlayerbasiert. - Unterstützung für
showArtworkinPresentationStatehinzugefügt und damit das Rendering des bereitgestellten optionalenartwork-Composable inContentFrameundPlayerzeitlich gesteuert. Fügen Sie das ComposableArtworkhinzu, das als Standardwert für den Slotartworkverwendet werden soll. - Fügen Sie
PlayPauseButtonStateneue Felder hinzu (showBuffering,showRetry,showReplay) und verwenden Sie sie inPlayPauseButton, um mehr Symbole und eine Pufferanzeige zu rendern. - Füge die Klasse
PlaybackStatehinzu, um die Beobachtung des benutzerdefinierten Wiedergabestatus zu ermöglichen, und führeBufferingIndicatorals schaltflächenunabhängige Komponente ein. - Es wurde ein Problem behoben, bei dem
PlayerViewundPlayerControlViewAnzeigenmarkierungen an den Periodengrenzen für Live-Post-Roll-Platzhalter in Livestreams mit mehreren Perioden anzeigten. - Die zusammensetzbaren Slots von
Player,ContentFrame,PlayerDefaultsundMiniControllererhalten nicht mehr den Player oder die Sichtbarkeit der Steuerelemente als Parameter. Erfassen Sie sie stattdessen aus dem aufrufenden Bereich (z. B. isttopControlsjetzt@Composable BoxScope.() -> Unit). Dies ist eine funktionsgefährdende Änderung an einer instabilen API. - Fügen Sie den Parameter
alignmentzuContentFrame,PlayerundModifier.resizeWithContentScalehinzu, um den skalierten Inhalt innerhalb seines Containers zu positionieren, und schneiden Sie den Inhalt vonContentFrameauf seine Grenzen zu, damit das mitContentScale.Cropskalierte Video nicht mehr außerhalb davon gezeichnet wird. - Unterstützung für die Livestream-Benutzeroberfläche in
ProgressSlider,ProgressStateWithTickCountundProgressStateWithTickIntervalhinzugefügt, indemisLiveundliveOffsetMsverfügbar gemacht wurden.LiveButton-Composable zumedia3-ui-compose-material3hinzugefügt (#2213).
- Ktor-Erweiterung:
- Ein Problem wurde behoben, bei dem
KtorDataSourceVerbindungsfehler während des Streams als Eingabeende behandeln konnte, anstatt einenHttpDataSourceExceptionauszugeben (#3460).
- Ein Problem wurde behoben, bei dem
- HLS-Erweiterung:
VIDEO-RANGE(PQundHLG) aufEXT-X-STREAM-INFundEXT-X-I-FRAME-STREAM-INFinFormat.colorInfoparsen (#3441).- Behebung von
NullPointerExceptionbeim Parsen von MPEG-TS-EXT-X-MAP-Initialisierungssegmenten, die PES-Medien-Samples enthalten (#3456). - Regression behoben, bei der
Format.idundFormat.metadatafür exponierte HLS-Tracksnullwaren (#3402). - Anzeigen mit Asset-Listen werden auf
X-PLAYOUT-LIMITgekürzt und Anzeigen, die vollständig außerhalb des Limits liegen, werden übersprungen. Der Offset für die Fortsetzung des Inhalts wird standardmäßig auf 0 gesetzt, wenn ein InterstitialX-RESUME-OFFSETauslässt und die Dauer unbekannt ist, auch wennX-PLAYOUT-LIMITfestgelegt ist. - Es wurde ein Problem behoben, bei dem durch das Schließen eines
X-ASSET-LIST-Interstitials die Beiträge anderer Interstitials in derselben Anzeigengruppe zum Offset für die Fortsetzung des Inhalts überschrieben wurden.
- DASH-Erweiterung:
- Unterstützung für das Parsen von Ereignissen zum Einfügen (
urn:mpeg:dash:event:alternativeMPD:insert:2025) und Ersetzen (urn:mpeg:dash:event:alternativeMPD:replace:2025) alternativer MPDs inDashManifestParserund Bereitstellen alsAlternativeMpdEvent-Instanzen inPeriod.alternativeMpdEvents. Dies ist eine funktionsgefährdende Änderung für Apps, die eine Unterklasse vonDashManifestParsersind:DashManifestParser.buildPeriodakzeptiert jetzt einen zusätzlichenList<AlternativeMpdEvent>-Parameter und die vorherige Überladung wurde entfernt. Apps, dieDashManifestParser.parseEventStream(XmlPullParser)überschreiben, müssen stattdessenDashManifestParser.parseEventStream(XmlPullParser, String)überschreiben, da Ersteres eingestellt wurde und in einer zukünftigen Version privat gemacht wird. - CICP-Farbinformationen (
ColourPrimaries,TransferCharacteristics,MatrixCoefficientsundVideoFullRangeFlag) aus den DeskriptorenEssentialPropertyundSupplementalPropertyinFormat.colorInfoparsen (#3426). - Unterstützung von durch Leerzeichen getrennten Listen mit
@id-Werten in Trickmodus-Deskriptor-Attributen (http://dashif.org/guidelines/trickmode) (@value) (#3315). - Unterstützung für das Parsen von
<ProducerReferenceTime>inDashManifestParser, das Bereitstellen inAdaptationSet.producerReferenceTimesund das Verwenden zum Ausfüllen vonTimeline.Window.presentationStartTimeMsundTimeline.Window.windowStartTimeMsfür VOD-Streams. - Unterstützung für DASH Content Steering hinzugefügt (#1689).
- Es wurde ein
NullPointerExceptionbehoben, der beim Parsen eines DASH-Manifests mit einem fehlenden Attribut im<UTCTiming>-Element auftreten konnte (#3436).
- Unterstützung für das Parsen von Ereignissen zum Einfügen (
- RTSP-Erweiterung:
- Es wurde ein
IllegalStateException-Absturz behoben, der bei der Verarbeitung verzögerter Netzwerkantworten nach dem Schließen des RTSP-Clients auftrat. - Ein Problem wurde behoben, bei dem schnelles Scrubbing fälschlicherweise den Fallback-Mechanismus des TCP-Protokolls auslösen konnte.
- Ein Absturz von
IllegalStateExceptionwurde behoben, der auftreten konnte, wenn verzögerte Netzwerkantworten verarbeitet wurden, nachdem der RTSP-Client den Status während der Neuauswahl des Tracks, des Sitzungsabbruchs oder der URI-Weiterleitung zurückgesetzt hatte. - Problem behoben, bei dem ein erneutes Suchen vor dem Neustart der Wiedergabe zu einem Absturz von
IllegalStateExceptionführen konnte. - Ein Problem wurde behoben, bei dem das Zurückspulen während eines bereits ausstehenden Suchvorgangs zu Audioausfällen und zum Einfrieren der Videowiedergabe führen konnte.
- Es wurde ein Problem behoben, bei dem H.264- und H.265-Keyframe-Zugriffseinheiten, die mit einem Aggregations- oder Nicht-IDR-Paket enden, nicht als Keyframes gekennzeichnet wurden, was dazu führte, dass die Wiedergabe im Zwischenspeicher hängen blieb (#3434).
- Es wurde ein
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Opus-Erweiterung: JNI-Absturz beim Decodieren ungültiger Opus-Daten behoben.
- Opus-Erweiterung: Es wurde ein Problem behoben, bei dem das Verwerfen von Padding ignoriert wurde, wenn Pre-Skip und das Verwerfen von Padding auf dasselbe Paket fielen (#2576).
- Cast-Erweiterung:
SessionAvailabilityListener.SessionUnavailableReasonwird eingeführt, um den Grund für die Nichtverfügbarkeit der Sitzung darzustellen, und es wird eine überladene Methode fürSessionAvailabilityListener.onCastSessionUnavailablebereitgestellt, um sie offenzulegen.- Ein Problem wurde behoben, bei dem die Wiedergabe nach dem Beenden einer Cast-Sitzung unerwartet lokal fortgesetzt wurde.
- Fehler protokollieren, wenn
RemoteMediaClient-Vorgänge (z. B. Wiedergabe, Pause, Geschwindigkeitsänderung, Wiederholungsmodus, Lautstärke, Stummschaltung oder Titelauswahl) inRemoteCastPlayerfehlschlagen (#3373). - Behebung von
ArrayIndexOutOfBoundsExceptioninRemoteCastPlayer, wenn sich die Cast-Empfängerwarteschlange ändert oder verkleinert, während ein Suchvorgang aussteht (#3372). - Ein Problem mit dem Standard-Cast-Empfänger wurde behoben, bei dem auf der Zeitachse nur Mediendateien in der unmittelbaren Umgebung des aktiven Elements und nicht die gesamte Playlist angezeigt wurden (#3129).
- Die Zeitachse und die Wiedergabeposition werden sofort aktualisiert, wenn die Playlist geändert (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) oder inRemoteCastPlayergesucht wird. Außerdem werden aufeinanderfolgende Playlist-Vorgänge in die Warteschlange gestellt, damit sie zuverlässig in der richtigen Reihenfolge ausgeführt werden (#2639, #3272). - Ein Problem wurde behoben, bei dem das Aufrufen von
addMediaItemsfür eine leere Warteschlange inRemoteCastPlayerdazu führte, dass die Medieninhalte auf dem Cast-Empfänger nicht geladen wurden (#2402). - Ein Problem in
RemoteCastPlayerwurde behoben, bei dem die Zeitachse gelöscht wurde, wenn das Ende der Cast-Empfänger-Warteschlange erreicht wurde, anstatt die Playlist beizubehalten. - Es wurde ein Problem behoben, bei dem
playWhenReady,repeatModeundplaybackParametersnicht übertragen oder angewendet wurden, wenn sie vor dem Laden von Mediendateien aufRemoteCastPlayerfestgelegt wurden (z. B. bei der Übertragung der Wiedergabe von lokal auf remote inCastPlayer) (#889).
- Demo-App:
- Unterstützung für DRM-geschützte Mediendateien und einen zusätzlichen HLS-Beispielstream zum Katalog der Demo-App für die Sitzung hinzufügen.
- Konfiguriere
RemoteCastPlayermit einemCastTrackSelectorin der Demo-App, um die Auswahl von Untertiteln und Audiotracks während des Streamings zu ermöglichen.
- Entfernen Sie nicht mehr unterstützte Symbole:
- Entfernen Sie
DashUtil.buildDataSpec(Representation, RangedUri, int)undDashUtil.buildDataSpec(Representation, String, RangedUri, int). Verwenden Sie stattdessenDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
- Entfernen Sie
- Build:
- Erhöhen Sie die Gradle-
minSdkauf 24.
- Erhöhen Sie die Gradle-
Version 1.11.0
1.11.1
10. September 2026
- ExoPlayer:
- Verschieben Sie das Flag zum Aktivieren/Deaktivieren von HAGC-Metadaten für progressive Medien von
MediaSource.FactorynachExtractorsFactory. Die vorherige MethodesetExperimentalEnableHagcPlaybackwird entfernt und durchExtractorsFactory.setParseHagcMetadataersetzt. Außerdem wurde ein Problem behoben, bei dem das Deaktivieren für Matroska-/WebM-Container nicht funktionierte. - Es wurde ein Problem behoben, bei dem die Wiedergabe ins Stocken geriet, wenn ein nicht übergehender sekundärer Renderer vorab geladen wurde.
- Problem mit dem Vorwärmen behoben, bei dem der
Surfacean den primären Renderer zurückgegeben werden sollte, wenn ein Suchvorgang beide Renderer zurücksetzt und deaktiviert. ArrayIndexOutOfBoundsExceptionwurde korrigiert, wenn eine Aktualisierung der Live-Zeitachse die Standardposition über eine serverseitig eingefügte Anzeige hinaus verschiebt, die gerade wiedergegeben wird (#3348).- Es wurde ein Problem im Scrubbing-Modus behoben, bei dem beim Suchen mit aktiviertem
ScrubbingModeParameters.allowSkippingMediaCodecFlushkurzzeitig veraltete Videoframes angezeigt werden konnten.
- Verschieben Sie das Flag zum Aktivieren/Deaktivieren von HAGC-Metadaten für progressive Medien von
- Extraktoren:
- Matroska: Es wurde ein Problem behoben, bei dem Tracks, die nach Clustern platziert wurden, nicht zu einer suchbaren Zeitachse führten (#3377).
- Audio:
- Die Berechnung der Puffergröße in
SilenceSkippingAudioProcessorwurde korrigiert, sodass die minimale Dauer der Stille nicht fälschlicherweise durch die Framegröße herunterskaliert wird (#3271). - Fehlerbehebung bei der Verarbeitung von 8-Bit-PCM in
PcmAudioUtil, damit Samples gemäß der Definition von Android als vorzeichenlos behandelt werden (#3271). - Es wurde ein Problem beim Offloading behoben, bei dem die Wiedergabe während der Pre-Roll-Anzeigen oder bei lückenlosen Übergängen aufgrund begrenzter Hardwarepuffergrößen ins Stocken geraten konnte.
- Fehler in
DefaultAudioSinkbehoben, bei dem die Anzahl der Releases nicht abnimmt, wenn der Wiedergabe-Thread nicht mehr aktiv ist (#3338).
- Die Berechnung der Puffergröße in
- Sitzung:
- Fehler
NullPointerExceptionbehoben, der auftrat, wenn ein laufenderMediaControlleraus einemPlayer.Listener-Callback freigegeben wurde (#3375). - Deadlock im Hauptthread behoben, wenn ein Legacy-
MediaBrowsereine Verbindung zu einem Dienst herstellt, der ein asynchrones Ergebnis vononGetLibraryRoot()oderonConnectAsync()zurückgibt (#3393).
- Fehler
- HLS-Erweiterung:
- Die Berechnung des Offsets für die Fortsetzung der Wiedergabe wurde korrigiert, wenn das Zielsegment für das Einrasten noch nicht in der Playlist enthalten ist (#3322).
- Ein Problem wurde behoben, bei dem ein vollständig verbrauchter
HlsMediaChunkversucht, das Laden zu wiederholen, wennEOFExceptionvom Extractor empfangen wird (#3350).
- DASH-Erweiterung:
- Fehlerhafte Berechnung des Beispielzeitstempels für Bildtracks mit einem
presentationTimeOffsetwurde behoben (#3334).
- Fehlerhafte Berechnung des Beispielzeitstempels für Bildtracks mit einem
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Opus: Speicherbeschädigung behoben, die auftrat, wenn mehrere
OpusDecoder-Instanzen gleichzeitig initialisiert wurden. - MPEG-H: Speicherleck, Abschneiden von Nicht-ASCII-Zeichen und potenzieller nativer Absturz bei geringem Arbeitsspeicher beim Senden von Befehlen an den
MpeghUiManagerbehoben (#3365).
- Opus: Speicherbeschädigung behoben, die auftrat, wenn mehrere
Version 1.11.0
5. August 2026
- Gemeinsame Bibliothek:
- Fügen Sie
Format.channelMaskhinzu, um die Audiokanalmaske explizit darzustellen, und eine neueUtil.getAudioTrackChannelConfig(Format)-Überladung, um sie sicher aufzulösen. - Upgrade von Kotlin von 2.0.20 auf 2.2.0.
- Fügen Sie
- ExoPlayer:
- Ein zeitabhängiger Nebenläufigkeitsfehler wurde behoben, der in ExoPlayer zu einem
IllegalStateExceptionoderIndexOutOfBoundsExceptionführen konnte. - Die Prüfungen der Anzahl der Anzeigengruppen in
AdsMediaSourcewerden gelockert, damit die Anzahl der Anzeigengruppen sinken kann, wenn eine Anzeigengruppe vollständig verarbeitet wurde (hasUnplayedAds()istfalse). Dadurch wird die dynamische Größenanpassung von Anzeigengruppen während des Zurücksetzens berücksichtigt. - Fügen Sie
SampleStreamgetFlags()undFLAG_STRICT_DURATIONhinzu, damit Streams Flags melden können, und aktualisieren Sie die Renderer, um diese Flags dynamisch zu prüfen. - Wenn die Streamformate keinen gültigen Wert liefern, wird auf die Schätzung der Framerate in
MediaCodecVideoRendererund auf das Codec-Ausgabeformat inMediaCodecAudioRendererzurückgegriffen, um die Codec-Betriebsrate zu berechnen. So werden unnötige Codec-Zurücksetzungen vermieden. - Entfernen Sie das Clipping von Inhalten für clientseitig eingefügte Anzeigen im Core Player. Stattdessen übernimmt
AdsMediaSourcedie Clipping-Logik. Benutzerdefinierte clientseitig eingefügte Anzeigenquellen müssen aktualisiert werden, um das Content-Clipping intern zu implementieren. - Tracks mit einem wohlgeformten, aber nicht erkannten Codec-Profil oder ‑Level werden als
supported=NO_EXCEEDS_CAPABILITIESund nicht alssupported=YESmarkiert. Letzteres wird für Tracks mit fehlenden oder fehlerhaften Profil- oder Levelinformationen verwendet. So wird sichergestellt, dass diese Tracks (die wahrscheinlich nicht vom Gerät unterstützt werden) nicht ausgewählt werden, wenn es besser unterstützte Alternativen gibt. - Fügen Sie
DefaultPreloadManager.SimpleRankingDataComparatorhinzu, einenRankingDataComparator, der die Ränge der Mediendateien anhand ihrer Abstände zum Index der aktuell wiedergegebenen Mediendatei vergleicht. Apps können die Methodecompare(Integer, Integer)überschreiben, wenn eine genauere Vergleichslogik erforderlich ist. Der benutzerdefinierteSimpleRankingDataComparatorkann über einen neuen Konstruktor vonDefaultPreloadManager.Buildereingefügt werden. - Reduzieren Sie das OOM-Risiko von
DefaultLoadControl.prioritizeTimeOverSizeThresholds, indem Sie auf die Byte-Größenlimits des Puffers zurückgreifen, wenn der verfügbare Heap-Speicher knapp ist. - Die Verarbeitung von Standbildern wurde angeglichen, wenn
MediaItem.imageDurationUsnicht festgelegt ist: JPEG- und HEIC-Standbilder werden jetzt mit einer sehr kurzen Standarddauer „abgespielt“ (wie zuvor PNG- und andere Bilder). - Füge
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)hinzu, umBandwidthMetermitMediaSourcezu verbinden. Die verworfene Methode mit benutzerdefinierter Implementierung wird jedoch standardmäßig weiterhin aufgerufen. Es wird empfohlen, die neue Methode zu implementieren undBandwidthMeter.getTransferListener()zu verwenden, um die Parität zur alten Methode zu erreichen. - Fügen Sie in
DefaultBandwidthMeterUnterstützung für einen benutzerdefiniertenInitialBitrateSupplierhinzu. Dadurch können Apps ihre eigene Logik zur Bestimmung der anfänglichen Bitratenschätzung bereitstellen, die bei der Erstellung vonDefaultBandwidthMeterund bei Änderungen des Netzwerktyps verwendet wird. Der Anbieter kann überDefaultBandwidthMeter.Builder.setInitialBitrateSupplier()festgelegt werden. - Dynamische Planung standardmäßig aktivieren. Die Wiedergabeschleife
ExoPlayerwird dynamisch und nicht in einem statischen Intervall ausgeführt. - Ein unnötiger Reset wurde entfernt, der auftreten konnte, wenn Tracks mit Pre-Roll-Samples zur aktiven Wiedergabe hinzugefügt wurden.
- In
DefaultBandwidthMeteroptimieren SiegetInitialBitrateCountryGroupAssignment, um die Ländergruppenzuweisungen in einer 32-Bit-Ganzzahl statt in einem Array zurückzugeben. Dadurch wird die Codegröße reduziert und Zuweisungen werden vermieden. - Behebung von
AudioTrack-Initialisierungsfehlern auf einigen Geräten, indem sichergestellt wird, dass die Wiederholungslogik immer eine Puffergröße von mindestens 1 Sekunde versucht, wenn andere Wiederholungen (durch Halbierung der Puffergröße) fehlschlagen (#3207). - Codec-Problem auf einigen Geräten behoben, bei dem der Codec alle Samples verschluckt hat, wenn er zuvor vor dem Empfang von Eingabepuffern geleert wurde.
- Experimentelles
ExoPlayer.Builder.enablePerStreamMediaProgression()hinzufügen, um die Medienverarbeitung pro Stream zu ermöglichen. Dadurch wird die Startlatenz zwischen Playlistelementen reduziert und verhindert, dass die Wiedergabe bei sehr kurzen Inhalten hängen bleibt (#3122). - Race-Bedingung im Zusammenhang mit der Verwendung der Audiositzungs-ID behoben, bei der die von
ExoPlayerautomatisch generierte anfängliche Audiositzungs-ID anstelle des vonsetAudioSessionIdfestgelegten Werts verwendet wurde (#3241). - Experimentelle Unterstützung für die Wiedergabe von zeitgesteuerten HAGC-Metadaten (ST 2094-50) für progressive Medien (z.B. MP4, Matroska) hinzugefügt. Der Player führt HAGC-Metadatentracks automatisch mit dem zugehörigen Videotrack zusammen und liefert die Metadaten out-of-band an den Decoder auf Geräten mit API 37 oder höher. Dieses Verhalten kann über
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)deaktiviert werden. Format.selectionPriorityhinzugefügt, das die relative Präferenz vonFormatbei der Titelauswahl darstellt (#3236).- Ein potenzielles Problem im Scrubbing-Modus wurde behoben, bei dem das Scrubbing beim Suchen nach dem „Ende des Streams“ hängen bleiben konnte.
- Ein zeitabhängiger Nebenläufigkeitsfehler wurde behoben, der in ExoPlayer zu einem
- CompositionPlayer:
- Ein Problem wurde behoben, bei dem
TrackSelector-Instanzen nicht freigegeben wurden.
- Ein Problem wurde behoben, bei dem
- Transformer:
- Ein Problem wurde behoben, bei dem
ExportResult.fileSizeBytesmöglicherweise zu oft gemeldet wird.
- Ein Problem wurde behoben, bei dem
- Trackauswahl:
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORverfügbar machen undAdaptiveTrackSelection.Factory.setTrackFormatComparatorhinzufügen, um die Sortierung nach benutzerdefinierten Formaten und die Priorität der ABR-Auswahl über die Sortierung nach Bitrate hinaus zu ermöglichen.- Ein zeitabhängiges Problem mit der Nebenläufigkeit wurde behoben, bei dem schnelle aufeinanderfolgende Aktualisierungen der Parameter für die Titelauswahl dazu führen konnten, dass einige Aktualisierungen verloren gingen oder überschrieben wurden.
- Extraktoren:
- MP4, MP3 und FLAC:
FLAG_DISABLE_ARTWORK_METADATAwurde hinzugefügt, um das Verwerfen von angehängten Bildern und Coverdesign-Metadaten während des Container-Parsings zu ermöglichen und so den Laufzeitspeicherverbrauch zu reduzieren (#2077). Dies kann auch zentral überDefaultExtractorsFactory.setDisableArtworkMetadataaktiviert werden. - MP4: Unterstützung für das Extrahieren von ITU-T T.35-Tracks (
it35) mit zeitgesteuerten Metadaten hinzugefügt. - MP4: Unterstützung für das Extrahieren von Kapitelmetadaten (Nero- und QuickTime-Formate) hinzugefügt. QuickTime-Kapitel werden bevorzugt, wenn beide vorhanden sind. Die extrahierten Kapitelinformationen werden als
Chapter-Einträge imMetadatades Tracks bereitgestellt, was eine native Kapitelnavigation in MP4-, M4A- und M4B-Dateien (z. B. Hörbücher und Podcasts) ermöglicht (#2803). - WAV, Matroska und MP4: Unterstützung für 64-Bit-Gleitkomma-PCM-Audio hinzugefügt (#3090).
- Matroska: Verwende Codec-Bitstream-Metadaten, um genaue
ColorInfo-Werte zu erhalten. - MP4: Unterstützung für die Suche in fragmentierten MP4-Dateien mit der
mfra-Box hinzugefügt, wenn keinesidx-Box vorhanden ist. Dazu müssen SieFLAG_READ_MFRA_FOR_SEEK_MAPfürFragmentedMp4Extractorangeben. Dies wird jetzt standardmäßig inDefaultExtractorsFactory(#3088) durchgeführt. av1C-Daten mit nicht unterstützter Version werden ignoriert.- MP4: Unterstützung für Big-Endian-Gleitkomma-PCM in
fpcm-Boxen hinzugefügt. - Matroska: Kapitelinformationen in
Chapter-Einträge imMetadataeines Tracks parsen. - MPEG-TS: Die Extraktion von DTS-HD- und DTS Express-Streams wurde verbessert, indem der Core- und der Extension-Substream zu einem einzigen Sample kombiniert wurden. Dadurch wurden Wiedergabeprobleme behoben, bei denen die beiden zuvor als separate Samples ausgegeben wurden (#3147).
- MP4: Endlosschleifen und Out-of-Bounds-Lesevorgänge beim Parsen leerer
ilst-Metadaten-Tag-Elemente verhindern (#3191). - MPEG-TS: Bei Streams, bei denen das letzte PES-Paket eine bekannte Länge hat, wird der letzte Frame gerendert (#3206).
- MP3: Die Bitrate für Dateien mit Xing- und VBRI-Header wird jetzt korrekt gemeldet.
- Matroska: Tracks verarbeiten, die im letzten Cluster definiert sind (#3250).
- Matroska: Unterstützung für ALAC hinzugefügt (#3268).
- MP4:
sgpd-Boxen mit variabler Länge in fragmentierten MP4-Dateien zulassen (#3243). - AVI: Ein Problem wurde behoben, bei dem die Wiedergabe von Dateien ohne Keyframe-Flags auf Audiotracks zu Audioverlust und
OutOfMemoryErrorführte. - MP3: Verwendung von lückenlosen Dauern aus Xing/Info-Headern (#3183).
- MP3: LAME/Xing-Encoder-Verzögerung und Padding-Metadaten wurden angepasst, um sie an das decodierte PCM-Trimming anzupassen (#3200).
- MP4, MP3 und FLAC:
- Audio:
- In den Audiorenderern von ExoPlayer wurde ein Kulanzzeitraum von 100 ms für den Übergang vom Status „Bereit“ zum Status „Nicht bereit“ hinzugefügt, um vorübergehende Unterläufe zu entprellen und unerwartete Zwischenspeicherzustände während der aktiven Wiedergabe zu vermeiden (#3210).
- Die Standardlogik für die PCM-Puffergröße in
DefaultAudioTrackBufferSizeProviderwurde geändert, um einen festen 500-ms-Puffer zu verwenden und die Geräteabhängigkeit zu verringern. MediaCodecAudioRendererwurde aktualisiert, um die räumliche channelMask aus dem Plattform-Decoder zu extrahieren, sodassDefaultAudioSinkdiese explizite Maske verwenden kann, anstatt eine aus der Kanalanzahl abzuleiten.- Parameter von
AudioSink.configurein Datenklasse konvertieren. Benutzerdefinierte Überschreibungen vonForwardingAudioSink.configuremüssen zur neuen Methodensignatur migriert werden. - Unterstützung für das Beibehalten der Tonhöhe beim Zeitstrecken eines Audiostreams mit
EditedMediaItem.Builder#setSpeed(SpeedParameters)hinzugefügt. ToFloatPcmAudioProcessorwurde verbessert, um die Konvertierung von 8-Bit-PCM, 16-Bit-Big-Endian-PCM und 64-Bit-Gleitkomma-PCM in 32-Bit-Gleitkomma-PCM zu unterstützen (#3090).- Ändern Sie den Rückgabewert von
DecoderAudioRenderer.getChannelMappinginImmutableIntArray. - Fehler behoben, bei dem die Wiedergabe hängen blieb, wenn eine Playlist mit lückenlosem Audio im komprimierten Offload-Modus abgespielt wurde.
Timelineund Zeitraum-UID werden anAudioSink.configureundAudioProcessor.StreamMetadataweitergeleitet, um den Audioprozessoren Playlist-Kontext bereitzustellen (#418).- Legen Sie die richtige
AudioProcessor.StreamMetadata.positionOffsetUsfest, um die zeitbasierte Audioverarbeitung zu ermöglichen (#418). - Unterstützung für 32-Bit- und 64-Bit-PCM-Gleitkommazahlen im Big-Endian-Format hinzugefügt.
- Der Fallback-Pfad von EAC3-JOC zu EAC3 für die Wiedergabe auf Google Pixel-Geräten wurde entfernt, da die Standard-EAC3-Decoder dieser Geräte keine EAC3-JOC-Streams decodieren können (#3257).
- Video:
- Die Logik für den Beitritt zu Videos wurde korrigiert, sodass verworfene Puffer während des Beitritts als übersprungen und nicht als verworfen gezählt werden.
- Es wurde ein Problem behoben, bei dem die Rendering-Entscheidung beim Festlegen einer neuen Oberfläche sofort getroffen wurde, um Frame-Drops auf Geräten zu vermeiden, die keine Platzhalteroberflächen unterstützen.
- Die Schätzung der Framerate in
MediaCodecVideoRendererwurde korrigiert, um sie genauer zu machen, indem verworfene oder übersprungene Frames berücksichtigt werden. - Konfiguration des Schwellenwerts für die vorzeitige Planung von Frames zulassen. Der Standardwert ist 50 ms, kann aber über
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()angepasst werden. - Fehler in
VideoFrameReleaseHelperbehoben, bei dem Änderungen an der Anzeige redundanteChoreographer-Callbacks und übermäßige CPU-Aktivierungen im Hauptthread auslösen konnten.
- Text:
- Metadaten:
- Feld
MediaMetadata.discSubtitlehinzufügen und aus ID3v2.4-TSST- und Vorbis-DISCSUBTITLE-Daten parsen. - Disc-Nummer und -Anzahl aus ID3-
TPOS-Frame parsen.
- Feld
- Auswirkung:
- Der Status „Neu zeichnen“ in
FinalShaderProgramWrapperwird beim Leeren gelöscht, um zu verhindern, dass der Player beim Suchen einfriert.
- Der Status „Neu zeichnen“ in
- Muxer:
- Unterstützung für Track-Referenzen (die
tref-Box) inMp4Muxerüber eine neueaddTrackReference-API hinzugefügt. So können Beziehungen zwischen Tracks hergestellt werden, z. B. durch Verknüpfen eines Metadaten-Tracks mit dem Video-Track, den er beschreibt. - Fügen Sie
OggMuxerhinzu, um das Multiplexen vonOPUS- oderVORBIS-Mediastreams in das Dateiformatoggzu ermöglichen. WavMuxerfür die WAV-Dateigenerierung hinzugefügt (unterstützt Ganzzahl- und Gleitkomma-PCM).- Fügen Sie
setAttemptStreamableOutputEnabledzuInAppMp4Muxer.Factoryhinzu, um das Schreiben kleinerer, nicht streamfähiger Dateien ohne reservierten Speicherplatz zu ermöglichen. - Unterstützung für IAMF-Audio in
Mp4MuxerundFragmentedMp4Muxerhinzugefügt.
- Unterstützung für Track-Referenzen (die
- IMA-Erweiterung:
- Fügen Sie
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlothinzu, um eine Anzeigenfläche für Pause Ads bereitzustellen. - Fehler behoben, bei dem bei aufeinanderfolgenden überspringbaren VAST-Anzeigen die Schaltfläche „Überspringen“ sofort bei der zweiten Anzeige eingeblendet wurde (#3165).
- Fügen Sie
- Sitzung:
- Behebung potenzieller Deadlocks und
IllegalStateException-Abstürze inMediaNotificationManagerbei Verwendung einer Sitzung mit einem Hintergrund-Thread-Player-Looper. - Strengere Threading-Anforderungen für
MediaSession-Methoden erzwingen. Void-Methoden werden jetzt automatisch nach der Ausführung an den Looper-Thread der Anwendung gesendet und Zustandszugriffsfunktionen (Getter) lösen explizit eineIllegalStateExceptionaus, wenn sie von einem anderen Thread als dem Looper der Anwendung aufgerufen werden. - Behebung eines Absturzes beim Zusammenführen der Zeitachse außerhalb der Grenzen (
IllegalStateExceptioninMediaUtils.mergePlayerInfo) durch Verfolgen der Statuskonsistenz pro Controller auf der Sitzungsseite. - Füge
androidx.media3.session.MediaSessionManagerhinzu, um die Abfrage aktiver Mediensitzungen und die Rückgabe von Media3-SessionToken-Instanzen zu unterstützen. - Ändern Sie das Standardverhalten von
MediaSession.Callback.onConnect, wenn die Methode nicht überschrieben wird, um nur Lesezugriff auf nicht vertrauenswürdige Controller zu gewähren. - Unterstützung für das Überschreiben des Paketnamens beim Erstellen von
MediaSessionüber eine neue APIMediaSession.Builder#setPackageNameOverridehinzugefügt. Der Aufrufer muss die Berechtigungandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERhaben, um den Paketnamen der Sitzung zu überschreiben. - Fügen Sie
MediaSession.Callback.onConnectAsync()hinzu. Mit der neuen Methode kann der Verbindungsversuch eines Controllers asynchron verarbeitet werden. Apps können sofortFuturemitFutures.immediateFuture(ConnectionResult)zurückgeben, um das vorherige Verhalten zu erreichen. Es wird empfohlen, zur neuen Methode zu migrieren, daCallback.onConnectmöglicherweise eingestellt wird. - Ein Problem wurde behoben, bei dem das Bluetooth-AVRCP-Browsing
MediaLibraryServicein API 36 und 37 nicht erkannte. - Problem mit der doppelten Herunterskalierung von Grafiken in
MediaSessionbehoben, wenn die Bildgröße nahe am Plattformlimit liegt. Dadurch wird die Unschärfe in Benachrichtigungen behoben (#3134). - Fehler
ForegroundServiceStartNotAllowedExceptioninMediaNotificationManagerbehoben, der dazu führte, dass die App abstürzte, wenn ein asynchroner Callback zum Laden einer Bitmap-Grafik versuchte, den Dienst im Vordergrund zu starten, während die App im Hintergrund ausgeführt wurde (#3270). - Ein Problem wurde behoben, bei dem
PositionInfo-Objekte, die von einemMediaControllerempfangen wurden, ihre ursprünglichenTimeline-UIDs nicht hatten. Die Sitzung übersetzt und propagiert diese UIDs jetzt zuverlässig während Statusaktualisierungen. - Absturz durch Abfangen von
ForegroundServiceStartNotAllowedExceptioninMediaSessionService.stopSelfSafely()behoben (#3310). - Unerwarteter
onMediaItemTransition()-Callback fürMediaControllerbeim Suchen innerhalb derselben Mediendatei wurde behoben (#3248).
- Behebung potenzieller Deadlocks und
- UI:
- Es wurde ein Problem behoben, bei dem der erste Frame in der falschen Größe gerendert wurde, wenn
ContentFramewährend der Wiedergabe neu zusammengesetzt wurde (#3238). - Fügen Sie dem Modul
media3-ui-composedie KlasseCurrentMediaItemStateund die entsprechenderememberCurrentMediaItemState-Komposition hinzu. Dieser State Holder wird indemo-composeverwendet, um verschiedene Metadaten zum aktuell wiedergegebenenMediaItemanzuzeigen. - Fügen Sie dem Modul
media3-ui-composedie KlassePlaylistStateund die entsprechenderememberPlaylistState-Komposition hinzu. Dieser State Holder wird indemo-composeverwendet, um verschiedene Metadateninformationen zumMediaItemsanzuzeigen, das im Player festgelegt ist. - API für schnellen Vorlauf/Zeitlupe zu
PlaybackSpeedStatehinzufügen. Verwende diese Funktion indemo-compose, um das Vorspulen durch langes Drücken zu demonstrieren. - Fügen Sie dem Modul
media3-ui-compose-material3die zusammensetzbare FunktionMiniControllerhinzu. Sie bietet eine kompakte Möglichkeit, diePlayerzu steuern, und zeigt gleichzeitig Titel, Künstler, Cover und Fortschritt der aktuellen Mediendatei an. - Fügen Sie dem Modul
media3-ui-composedie KlasseErrorStateund die entsprechenderememberErrorState-Komposition hinzu. Füge dasErrorText-Composable zumedia3-ui-compose-material3hinzu und mache es zu einem Standard-Overlay auf derPlayer. PlayerDefaults-Objekt mit Composables fürTopControls,CenterControls,BottomControlsundErrorOverlayveröffentlichen.- Fügen Sie
FocusRequesterzum ComposablePlayerund seinen Inhalts-Slots hinzu. - Veröffentlichen Sie
PlayerPool(common-ktx) undrememberPooledPlayer(ui-compose), um das Vorabladen vonMediaItemsin UI-Umgebungen mit Schiebefenstern zu unterstützen. Präsentiere diese Funktion indemo-composemit einem neuenShortFormPlayerScreen. - Fehler bei der Unterdrückung von Shutter-Ereignissen in
PlayerViewund ComposePresentationStatebehoben, der zu Abstürzen auf Zeitachsen führte, die keine Suche nach Perioden-UIDs unterstützen (#3264).
- Es wurde ein Problem behoben, bei dem der erste Frame in der falschen Größe gerendert wurde, wenn
- Downloads:
- HLS-Variablen in der Medien-Playlist auflösen, wenn sie zum Herunterladen abgerufen werden (#3258).
- Ktor-Erweiterung:
- HLS-Erweiterung:
- Unterstützung für HLS Content Steering und Pathway Cloning hinzugefügt (#1689).
- Fügen Sie
setWithAssetListResetzuHlsInterstitialsAdsLoaderhinzu, damit Apps vollständig verarbeitete Asset-Listen-Interstitials wieder in einen nicht verfügbaren Zustand zurücksetzen können, um sie bei Bedarf neu aufzulösen. - Das Attribut
SCOREvonEXT-X-STREAM-INFundEXT-X-I-FRAME-STREAM-INFparsen und inFormat.selectionPriorityeinfügen (#3236). - Fehler behoben, bei dem geplante Aktualisierungen von HLS-Playlists fortgesetzt werden, auch wenn die Playlist nicht mehr primär oder aktiv ist (#3254).
- Die Berechnung des Offsets für die Fortsetzung des Inhalts beim Auflösen von Interstitial-Asset-Listen wurde korrigiert (#3322).
- Problem mit unerwarteter Zeitstempel-Diskontinuität bei der Audiowiedergabe behoben, wenn die Live-Wiedergabe mit niedriger Latenz nach einem Fehler bei der Playlist-Anfrage fortgesetzt wird (#3311).
- Fehler in
HlsMediaPeriod.getStreamKeys()behoben, bei dem der ID3-Track in Audiowiedergaben als Untertitel betrachtet wird (#3333).
- DASH-Erweiterung:
- CEA-Untertitel werden je nach Sprache in verschiedene
TrackGroups aufgeteilt (#3113). - Unterstützung für das Parsen mehrerer
Location-Elemente aus dem Manifest (MPD) und für das Ausführen eines Fallbacks für den Standort inDashMediaSource, wenn das Laden des Manifests fehlschlägt, hinzugefügt. - Absturz (
IndexOutOfBoundsException) beim Öffnen von Manifesten mit einem leeren<SegmentTimeline/>-Element behoben (#3326).
- CEA-Untertitel werden je nach Sprache in verschiedene
- RTSP-Erweiterung:
- Behebung vorübergehender Wiedergabestopps oder -fehler während der Vorbereitung der RTSP-Wiedergabe, die durch Fehler bei der UDP-Portbindung verursacht wurden.
- Cast-Erweiterung:
- Neue
CastParams-Klasse hinzugefügt, um die Konfiguration von Cast durch Aufrufen vonCast.initialize(CastParams)zu ermöglichen. - Neue Option
CastParams.getShowSystemOutputSwitcherOnCastIconClick()hinzugefügt, die die Verwendung des SystemUI-Ausgabe-Switchers anstelle der In-App-Auswahl für Cast-Geräte auslöst, sofern verfügbar. MediaRouteButtonStateundrememberMediaRouteButtonStatewurden hinzugefügt, um die Sichtbarkeit der Medienroutenauswahl zu beobachten, und der Parameterstatewurde zuMediaRouteButtonhinzugefügt (#3172).- Ein Fehler wurde behoben, durch den
RemoteCastPlayernach einer Titelauswahl dauerhaft im Titelmaskierungsstatus hängen bleiben konnte, was dazu führte, dass nachfolgende Titelaktualisierungen vom Cast-Empfänger ignoriert wurden (#3237). - Fehler behoben, bei dem
DefaultMediaItemConvertereineNullPointerExceptionauslöst, wenn versucht wird, einer Übertragungssitzung beizutreten, die von einem Nicht-Media3-Sender gestartet wurde. - Verhindern, dass
CastPlayerMediaItemsüberträgt, die beim Ändern des aktiven Players nicht abspielbar sind (#3199). - Fehler behoben, bei dem nicht konfigurierte Livestreams (
liveConfiguration == UNSET) alsSTREAM_TYPE_BUFFEREDin die Warteschlange gestellt wurden (#3318).
- Neue
- Testdienstprogramme:
- Erweitern Sie
DataSourceContractTest, um Unterstützung fürPOST-Anfragen mit Headern und Texten hinzuzufügen. Fügen SieHttpDataSourceTestEnveinigePOST-Ressourcen hinzu und fügen Sie inWebServerDispatcherAssertions für die erwartete HTTP-Methode, Header und den Text hinzu. - Verschärfen Sie die Assertions in
DataSourceContractTestfür die vonDataSource.open()zurückgegebenen Längen. Ressourcen, die zuC.LENGTH_UNSETführen können, sollten dies mitTestResource.Builder.setMayResolveToUnknownLength(boolean)angeben. - Fügen Sie
setPlaybackLooperzuTestExoPlayerBuilderhinzu.
- Erweitern Sie
- Entfernen Sie nicht mehr unterstützte Symbole:
androidx.media3.exoplayer.MetadataRetrieverentfernen. Verwenden Sie stattdessenandroidx.media3.inspector.MetadataRetriever.androidx.media3.exoplayer.MediaExtractorCompatentfernen. Verwenden Sie stattdessenandroidx.media3.inspector.MediaExtractorCompat.Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATAentfernen. Verwenden Sie stattdessenHeifExtractor, um Metadaten von Fotos mit Bewegtbild aus HEIC-Dateien zu extrahieren.androidx.media3.extractor.metadata.mp4.MotionPhotoMetadataentfernen. Verwenden Sie stattdessenandroidx.media3.extractor.metadata.MotionPhotoMetadata.androidx.media3.extractor.DummyTrackOutputentfernen. Verwenden Sie stattdessenandroidx.media3.extractor.DiscardingTrackOutput.androidx.media3.extractor.DummyExtractorOutputentfernen. Verwenden Sie stattdessenandroidx.media3.extractor.NoOpExtractorOutput.androidx.media3.common.C.generateAudioSessionIdV21entfernen. Verwenden Sie stattdessenandroidx.media3.common.util.Util.generateAudioSessionId.
- Erstellen
- Die
README.md-Anleitung für die lokale Abhängigkeit von Media3 wurde aktualisiert, um Gradle Composite Builds (includeBuild) zu verwenden. Dascore_settings.gradle-Script wurde entfernt und die PropertiesandroidxMediaModulePrefixundandroidxMediaEnableMidiModulewerden nicht mehr verwendet.
- Die
1.11.0-rc01
Verwenden Sie die stabile Version 1.11.0.
1.11.0-beta01
7. Juli 2026
Verwenden Sie die stabile Version 1.11.0.
1.11.0-alpha01
24. Juni 2026
Verwenden Sie die stabile Version 1.11.0.
Version 1.10.0
1.10.1
12. Mai 2026
- Gemeinsame Bibliothek:
- Fehlerbehebung bei der Verarbeitung von
onAudioSessionIdChangedinSimpleBasePlayerundForwardingSimpleBasePlayer.
- Fehlerbehebung bei der Verarbeitung von
- ExoPlayer:
- Race-Bedingung im Zusammenhang mit der Generierung der Audiositzungs-ID behoben, die im Tunnelmodus zu einem
IllegalStateExceptionführen konnte. (#3099). - Mögliche App-Abstürze bei der Wiederherstellung nach Decoderfehlern mit Renderer-Vorwärmung wurden behoben.
- Es wurde ein Problem behoben, bei dem Videoartefakte durch die Bereitstellung von Initialisierungsdaten bei Verwendung eines AV1-basierten Dolby Vision-Codecs verursacht wurden (#3153).
- Race-Bedingung im Zusammenhang mit der Generierung der Audiositzungs-ID behoben, die im Tunnelmodus zu einem
- Trackauswahl:
- Die Logik für die Titelauswahl in
VideoTrackInfowurde angepasst, um Fallback-MIME-Typen aufzulösen und die Einstellungen für HDR- und Codec-Bewertungen in die Qualitätseinstellungen zu verschieben (#3135).
- Die Logik für die Titelauswahl in
- Extraktoren:
- MP3: Xing-Datenlänge ignorieren, wenn sie länger als die bekannte Streamlänge ist (#3117).
- Fehler
ArrayIndexOutOfBoundsExceptioninMp4Extractorbehoben, wennFLAG_OMIT_TRACK_SAMPLE_TABLEfestgelegt ist und der Track keine Sync-Sample-Box (stss) hat.
- Audio:
- Fehler behoben, bei dem Audioereignisse möglicherweise falsch weitergeleitet wurden, wenn dem Player mehrere Audiorenderer hinzugefügt wurden.
- Video:
- Anpassung der Logik für die Wiederverwendung von Codecs bei Änderungen der Framerate in APIs unter 30, um Codec-Zurücksetzungen zu vermeiden, wenn sie nicht vorteilhaft sind (#3120).
- Deaktivierung des Workarounds für die erzwungene Synchronisierung in
queueSecureInputBufferfür API 31+. Der Workaround war ein künstlicher Engpass, der die Entschlüsselung seriell erzwang. Dadurch wurde verhindert, dass Videos aufgrund eines Framework-Problems vor API 31 fehlerhaft wiedergegeben wurden.
- Bild:
- Problem im Scrubbing-Modus behoben, bei dem Bildaktualisierungen nur wirksam wurden, wenn der Nutzer das Scrubbing beendete (#2815).
- Sitzung:
- Fehler behoben, bei dem
ForegroundServiceStartNotAllowedExceptionnicht über Threadgrenzen hinweg weitergegeben wurde, wenn der Anwendungsthread nicht der Hauptthread ist (#2499). - Es wurde ein Fehler behoben, bei dem
COMMAND_SEEK_TO_MEDIA_ITEMin einerMediaControllernicht verfügbar ist, wenn eine Verbindung zu einer reinen Plattformsitzung hergestellt wird, die das Springen zu anderen Elementen, aber keine Änderungen an der Playlist unterstützt. - Es wurde ein Problem behoben, bei dem
MediaControllerkeine Mediendateien in Plattform-Mediensitzungen festlegen konnte, die keinePREPARE_FROM-Aktionen zulassen. - Fehler behoben, bei dem der eigene Prozess bei API 27 oder früher nicht mit
Controller.isTrusted()gekennzeichnet wurde, wenn eine Verbindung über Plattform-Controller hergestellt wurde.
- Fehler behoben, bei dem
- HLS-Erweiterung:
- Es wurde ein Fehler behoben, durch den während des Stream-Fallbacks ein
ArrayIndexOutOfBoundsExceptionausgelöst wurde, wenn die Trackauswahl eine Teilmenge der verfügbaren Tracks war (#3161). - Ein Problem wurde behoben, bei dem das Initialisierungssegment nicht über Medien-Playlist-Updates hinweg übertragen wurde, wenn das
#EXT-X-MAP-Tag in nachfolgenden Updates nicht wiederholt wurde (#3105).
- Es wurde ein Fehler behoben, durch den während des Stream-Fallbacks ein
- DASH-Erweiterung:
- Absturz in
SampleQueuebeim Suchen in einem Chunk, der gerade abgebrochen wird, behoben.
- Absturz in
1.10.0
26. März 2026
- Gemeinsame Bibliothek:
- Stufen Sie
Player.mute()undPlayer.unmute()vonUnstableApiauf „Stabil“ hoch. - Stufen Sie
Format.pcmEncodingundC.PcmEncodingvonUnstableApiauf „Stabil“ hoch. Format.primaryTrackGroupIdwurde hinzugefügt, um die primäre Gruppe eingebetteterFormat-Instanzen zu identifizieren (#294).
- Stufen Sie
- ExoPlayer:
- Fügen Sie
AdsMediaSourceClipping-Funktionen hinzu. - Unterstützung für dynamische Planung in
MediaCodecVideoRendererhinzugefügt, um die Planung und die CPU-Aktivierungszyklen besser auf die Verarbeitung von Videoframes abzustimmen. Sie können dies mitexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()inDefaultRenderersFactoryaktivieren. - Ermöglicht das Festlegen eines benutzerdefinierten
DataSource.FactoryinDefaultPreloadManager.Builder. - Zulassen, dass
ExoPlayerohne Robolectric simuliert wird, indem einige Standardkonstanten nachExoPlayer.Builderverschoben werden. Das Mocking dieser komplexen Schnittstelle wird im Allgemeinen nicht empfohlen – nur wenn die Nutzung minimal/einfach/zufällig ist (#2985).- Dazu musste
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSvonExoPlayernachExoPlayer.Builderverschoben werden (ohne Einstellung).
- Dazu musste
- Ein Fehler wurde behoben, bei dem
ProgressiveMediaSourceveraltete Zeitachseninformationen an den Player weitergibt und die in die Warteschlange gestellten Zeiträume unerwartet entfernt werden (#3016). - Ein Problem wurde behoben, durch das ExoPlayer keinen verzögerten Audiofokus anforderte, wenn die Wiedergabe während eines Telefonanrufs angefordert wurde.
- Fehler behoben, bei dem Übergänge von On-Demand- zu Live-Inhalten am Ende der On-Demand-Inhalte zu einer erneuten Zwischenspeicherung führen konnten (#3052).
- Unterstützung für Dolby Vision Profile 10 hinzugefügt (#2830).
- Fehler behoben, bei dem eine nicht initialisierte Pre-Roll-Anzeige einen
ArrayIndexOutOfBoundsExceptionerzeugte (#3125).
- Fügen Sie
- CompositionPlayer:
- Unterstützung für
EditedMediaItem.removeVideohinzufügen.
- Unterstützung für
- Transformer:
EditedMediaItem.Builder.setFrameRate()kann jetzt eine maximale Ausgabebildrate für Videos festlegen. Das ist besonders hilfreich, wenn die Mediengeschwindigkeit mitsetSpeed()erhöht wird.
- Trackauswahl:
- Ändern Sie die Signatur von
DefaultTrackSelector.selectAllTracksso, dass das Ausgabearray als Parameter enthalten ist, der mit Track-Überschreibungen vorab ausgefüllt ist. - Es wurde ein Problem behoben, bei dem eingebettete Metadatentracks unabhängig davon ausgewählt wurden, ob der entsprechende primäre Track ausgewählt war (#294).
- Stabilisieren Sie die
TrackSelectionParameters-Optionen fürpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsundselectTextByDefault.
- Ändern Sie die Signatur von
- Extraktoren:
- MP4: Unterstützung von Dateien mit großen
uuid-Boxen vor anderen Boxen wiemoov(#3046). - MP4: Unterstützung für VVC-Tracks (Versatile Video Coding) in MP4-Containern hinzugefügt.
- MP4: Unterstützung von Dateien mit großen
- Prüfer:
- Funktionsgefährdende Änderung:
FrameExtractorentfernen. Nutzer sollten jetzt das neue:media3-inspector-frame-Modul verwenden und Importe inandroidx.media3.inspector.frame.FrameExtractoraktualisieren. - Ein neues Modul zum Extrahieren und Verarbeiten decodierter Videoframes einführen.
- Funktionsgefährdende Änderung:
- Audio:
- Die zugrunde liegende Decodierungsbibliothek für die IAMF-Decodererweiterung wurde von
libiamfiniamf_toolsgeändert. - Die IAMF-Decodierung unterstützt die binaurale Ausgabe entweder über den Decoder (bei Verwendung der IAMF-Decodererweiterung) oder über den Android Spatializer.
- Die Unterstützung für
AC4Profile22und andere Legacy-Profile wird bei der Bewertung der AC-4-Decoder-Unterstützung in Automotive-Szenarien korrekt entfernt (#2609). - Die Wiederholungslogik der
AudioOutput-Initialisierung inDefaultAudioSinkwurde verbessert (#2905). - Versuch, das Ausgabelayout der Lautsprecher (oder des Spatializers, falls zutreffend) beim Decodieren von IAMF sowohl mit der IAMF-Erweiterung als auch mit den Media-Codec-Decodern abzugleichen, unterstützt durch neue Felder und Logik in AudioCapabilities und AudioCapabilitiesReceiver.
- Fehler behoben, bei dem die Wiedergabe hängen blieb, wenn eine Playlist mit lückenlosem Audio im komprimierten Offload-Modus abgespielt wurde.
- Die zugrunde liegende Decodierungsbibliothek für die IAMF-Decodererweiterung wurde von
- Text:
- VobSub: Die SPU-Steuerbefehle
STARTundSTOPwerden verwendet, um die Cue-Dauer abzuleiten, anstatt immer standardmäßig 5 Sekunden zu verwenden (#2935).
- VobSub: Die SPU-Steuerbefehle
- Metadaten:
- Die Standardanzahl der Metadaten-Renderer wurde auf vier erhöht, um alle potenziellen Metadatentracks abzudecken, die von HLS-Varianten und ‑Wiedergaben veröffentlicht werden (#3043).
- Auswirkung:
LottieOverlaywurde in ein neues:media3-effect-lottie-Modul verschoben (und vonandroidx.media3.effect.LottieOverlayinandroidx.media3.effect.lottie.LottieOverlayumbenannt).
- Lottie-Effekt:
- Einführung eines neuen
:media3-effect-lottie-Moduls, das Funktionen zum Anwenden von Lottie-Effekten auf Videoframes bietet.
- Einführung eines neuen
- IMA-Erweiterung:
- Aktualisieren Sie die IMA SDK-Version auf 3.39.0, um Zugriff auf die neueste Ad Media Info API zu erhalten.
- Ein Fehler wurde behoben, bei dem der MIME-Typ der Anzeige nicht mit dem im IMA LOADED-Ereignis angegebenen MIME-Typ übereinstimmte. Mit der Korrektur wird der MIME-Typ der Anzeige jetzt anhand der von IMA bereitgestellten Anzeigenmedieninformationen zugeordnet.
setEnableCustomTabswurde zuImaAdsLoaderundImaServerSideAdInsertionMediaSourcehinzugefügt, damit Nutzer festlegen können, ob Klick-URLs für Anzeigen über benutzerdefinierte Tabs gestartet werden.- Fügen Sie
ImaAdTagUriBuilderhinzu, eine Klasse, die eine alternative Möglichkeit zum Erstellen einesadTagUribietet. Sie enthält diesetPreferredLinearOrientationAPI. Dies ist eine API im Alphatest, mit der Sie die bevorzugte Ausrichtung für lineare Anzeigen festlegen können. Wenn Sie der Alpha-Testgruppe beitreten möchten, wenden Sie sich an Ihren Kontopartner.
- Sitzung:
- Es wurde ein Fehler behoben, durch den große Arrays in
MediaMetadata.artworkDatadie App zum Absturz bringen konnten. - Verwenden Sie den Typ „int“ für das Argument
@Player.Commandin der SchnittstelleActionFactory(#2933). MediaSessionServiceundMediaLibraryServicezu einemLifecycleServicemachen, damit lebenszyklusabhängige Vorgänge an den Lebenszyklus des Dienstes angehängt werden können (#187).- Befehle zum Ändern der Gerätelautstärke von
MediaControllerundMediaBrowserfür die lokale Wiedergabe werden nicht mehr unterstützt. Apps sollten die Lautstärke des lokalen Geräts nicht ändern. Falls erforderlich, können sie dafürAudioManager-APIs verwenden. - Veraltete
Intent-Instanzen erkennen, die den Dienst als Dienst im Vordergrund gestartet haben. Dadurch wird verhindert, dass das System einenForegroundServiceDidNotStartInTimeExceptionauslöst. Dies ist eine funktionsgefährdende Änderung an einer instabilen API für Apps, die eine benutzerdefinierteMediaNotification.Providerimplementieren, da eine neue erforderliche Methode vorhanden ist. - Builder für
PendingIntent-Instanzen zur Verwendung mit Startbildschirm-Widgets hinzugefügt (#2933). - Statische Methoden zum Erstellen von
Intent-Instanzen für Compose-basierte Startbildschirm-Widgets hinzugefügt (#2933). - Es wurde ein Fehler behoben, bei dem der Übergang von Mediendateien nicht an Controller gemeldet wurde, wenn die Wiedergabe von einem bestimmten Mediendateiindex zu einem anderen mit derselben Mediendatei aus dem Grund „AUTO“ und „SEEK“ (#2997) wechselte.
- Es wurde ein Problem behoben, bei dem sich die Problemumgehung für die Platzierung von System-UI-Buttons negativ auf andere UI-Oberflächen wie Android Auto oder Hersteller auswirkte, die die Problemumgehung nicht benötigten (#3041).
- Problem behoben, bei dem der Zugriff auf Abos nicht synchronisiert wurde (#3056).
- Problemumgehung für einen System‑UI-Fehler in API 29, bei dem Medien-Session-Artwork in einer bestimmten Größe die System‑UI zum Absturz bringen und einen Neustart des Geräts erzwingen kann (#3118).
- Problem mit der Skalierung des Cover-Symbols für Benachrichtigungen unter Android Q behoben (#3084).
- Es wurde ein Fehler behoben, durch den große Arrays in
- UI:
- Fügen Sie
PlaybackSpeedControlComposable zumedia3-ui-composehinzu, um die Wiedergabegeschwindigkeit anzuzeigen und zu ändern. - Fügen Sie
PlaybackSpeedToggleButton-Composable zumedia3-ui-compose-material3hinzu, um die Wiedergabegeschwindigkeit zu steuern. ProgressSliderComposable zumedia3-ui-compose-material3hinzugefügt, um den Spielerfortschritt anzuzeigen und Suchvorgänge durch Ziehen und Tippen auszuführen (#2288).- Großen Offscreen-Zwischenspeicher beim Animieren von PlayerControlView vermeiden.
- Fügen Sie
PlayerComposable zumedia3-ui-compose-material3hinzu, das einContentFramemit anpassbaren Steuerelementen kombiniert, die oben, in der Mitte und unten ausgerichtet sind. - Wiedergabeposition vor dem Bedienungshilfendienst verbergen, um eine kontinuierliche Aktualisierung der Ansage zu verhindern, wenn
PlayerControlViewsichtbar ist.
- Fügen Sie
- HLS-Erweiterung:
- Unterstützung für X-PLAYOUT-LIMIT mit HLS-Interstitials (#2484).
- Unterstützung des Attributs
QUERYPARAMmit#EXT-X-DEFINE(#1854). - Optimierung des Parsings von HLS-Playlists durch Caching von Abgleichern für reguläre Ausdrücke (#3008).
- ID3-Metadatentrack (EMSG) in Audiowiedergaben verfügbar machen (#3043).
- Standort-Fallback bei Ladefehlern zulassen, wenn redundante Streams von verschiedenen Standorten verfügbar sind (#1988).
- X-SNAP-Verhalten für HLS-Interstitials korrigiert, um die Start- und Fortsetzungsposition korrekt zu berechnen (#3013).
- DASH-Erweiterung:
- RTSP-Erweiterung:
- Es wurde eine Regression beim H.264- und H.265-Streaming behoben, bei der Samples derselben Zugriffseinheit, die sich über mehrere RTP-Pakete erstreckten, fälschlicherweise geparst wurden. Dies führte zu visuellen Artefakten und Fehlern im Video (#3121).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Unterstützung für den MPEG-H-UI-Manager zur MPEG-H-Decoder-Erweiterung hinzugefügt (#3066).
- Cast-Erweiterung:
- Füge die Methode
RemoteCastPlayer.Builder#setTrackSelectorhinzu, mit der die Titelauswahl für die Cast-Wiedergabe implementiert werden kann.
- Füge die Methode
- Entfernen Sie nicht mehr unterstützte Symbole:
ExperimentalFrameExtractorentfernen. Verwenden Sie stattdessenandroidx.media3.inspector.frame.FrameExtractor.ChannelMixingMatrix.create()entfernen. Verwenden Sie stattdessenChannelMixingMatrix.createForConstantGain().androidx.media3.extractor.metadata.flac.VorbisCommententfernen. Verwenden Sie stattdessenandroidx.media3.extractor.metadata.vorbis.VorbisComment.MediaSource.prepareSource(MediaSourceCaller, TransferListener)entfernen. Verwenden Sie stattdessenMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId).
1.10.0-rc03
25. März 2026
Verwenden Sie die stabile Version 1.10.0.
1.10.0-rc02
16. März 2026
Verwenden Sie die stabile Version 1.10.0.
1.10.0-rc01
10. März 2026
Verwenden Sie die stabile Version 1.10.0.
1.10.0-beta01
25. Februar 2026
Verwenden Sie die stabile Version 1.10.0.
1.10.0-alpha01
6. Februar 2026
Verwenden Sie die stabile Version 1.10.0.
Version 1.9.0
1.9.4
16. Mai 2026
Version 1.9.4 enthält die folgenden Commits.
- Auswirkung:
- Legen Sie
GL_DRAW_BUFFERundGL_READ_BUFFERexplizit fest, wenn Sie von einem oberflächenlosen Kontext wechseln.
- Legen Sie
1.9.3
16. März 2026
Version 1.9.3 enthält die folgenden Commits.
- Audio:
- Fehler behoben, bei dem die Wiedergabe hängen blieb, wenn eine Playlist mit lückenlosem Audio im komprimierten Offload-Modus abgespielt wurde.
1.9.2
6. Februar 2026
Version 1.9.2 enthält die folgenden Commits.
- ExoPlayer:
- Fehler behoben, bei dem
ProgressiveMediaSourceveraltete Zeitachseninformationen an den Player weitergibt und die in der Warteschlange befindlichen Zeiträume unerwartet entfernt werden (#3016).
- Fehler behoben, bei dem
- Sitzung:
- Es wurde ein Problem behoben, bei dem sich die Problemumgehung für die Platzierung von System-UI-Buttons negativ auf andere UI-Oberflächen wie Android Auto oder Hersteller auswirkte, die die Problemumgehung nicht benötigten (#3041).
- Cast-Erweiterung:
- Fehler behoben, durch den die Übertragung von Cast zur lokalen Wiedergabe nicht funktionierte.
1.9.1
26. Januar 2026
Version 1.9.1 enthält diese Commits.
- Gemeinsame Bibliothek:
- Unterstützung von Datums-/Uhrzeit-Strings mit nur Stunden im Zeitzonen-Offset (#2929).
- ExoPlayer:
- Lassen Sie zu, dass die dynamische Planung das
doSomeWork-Intervall erst nach dem Start der Audiowiedergabe verlangsamt, um eine reibungslosere A/V-Synchronisierung zu Beginn der Wiedergabe zu ermöglichen. - Fehler in
DefaultLoadErrorHandlingPolicybehoben, bei demFileNotFoundExceptionund ähnliche Ausnahmetypen mehrmals wiederholt wurden. - Fehler bei der dynamischen Planung behoben, bei dem die berechnete Zeit für die nächste
doSomeWorkfälschlicherweise um die verstrichene Zeit der aktuellen Iteration vondoSomeWorkreduziert wurde. Wenn Sie dieses Problem beheben, wird die CPU-Inaktivitätszeit hoffentlich verlängert und Strom gespart. - Es wurde ein Problem behoben, bei dem die Wiedergabe von Dolby Vision-Dateien fehlschlägt, wenn versucht wird, einen Fallback-AVC- oder HEVC-Codec zu verwenden.
- Fehler behoben, bei dem das Laden nach dem Ende der Wiedergabe fortgesetzt wurde, wenn das aktuell wiedergegebene Element aus einer Playlist entfernt wurde (#2873).
- Vermeiden Sie das Leaken von
MediaItem-Instanzen, wenn SieExoPlayer.replaceMediaItemwiederholt für dasselbe Element verwenden (#2993). - Potenzielle ANR-Fehler, die durch die Freigabe von Notfall-Wakelocks verursacht werden, werden verhindert (#2979).
- Lassen Sie zu, dass die dynamische Planung das
- Extraktoren:
- MP3: LAME ReplayGain-Daten parsen (#2840).
- Audio:
- Die Unterstützung für
AC4Profile22und andere Legacy-Profile wird bei der Bewertung der AC-4-Decoder-Unterstützung in Automotive-Szenarien korrekt entfernt (#2609).
- Die Unterstützung für
- Video:
- Videocodecs auf Geräten mit einer API-Version unter 30 werden verworfen, wenn sich die Framerate des Inhalts ändert, um eine ruckelnde Wiedergabe zu vermeiden (#2941).
- Text:
- VobSub: Einige fehlende Untertitel wurden korrigiert, indem SPUs, die entweder nur eine einzelne Steuersequenz enthalten oder wichtige Informationen auf mehrere Steuersequenzen aufteilen, korrekt verarbeitet werden (#2935).
- IMA-Erweiterung:
- Fehlerkorrektur: Es wurde ein Problem behoben, bei dem der MIME-Typ der Anzeige nicht mit dem im IMA-LOADED-Ereignis angegebenen MIME-Typ übereinstimmte. Mit der Korrektur wird der MIME-Typ der Anzeige jetzt anhand des Anzeigen-Pod-Index und der Anzeigenposition zugeordnet.
- Fügen Sie eine Null-Prüfung hinzu, bevor Sie auf das Ergebnis von
getAdsManager()undAdEvent.getAd()zugreifen.
- Sitzung:
- Fehler behoben, bei dem das Beenden eines
MediaController, der mit einer Plattformsitzung verbunden war, zum Absturz der App führte, wenn das Beenden während der Anzeigenwiedergabe erfolgte (#2948). - Zusätzliche Prüfungen für
extras-Bundle-Instanzen in verschiedenen Klassen hinzufügen, um sich vor fehlerhaftenBundle-Instanzen zu schützen, die von anderen Prozessen gesendet werden. - Problem behoben, bei dem fehlende Befehle für
COMMAND_SEEK_NEXToderCOMMAND_SEEK_BACKzu Lücken in der Systemmedienbenachrichtigung führen konnten (#2976). - Bitmap-Skalierung für Benachrichtigungssymbol aus dem Hauptthread verschoben (#2829).
- Fehler behoben, bei dem Autor, Verfasser und Komponist nicht als Fallback verwendet wurden, wenn von den Legacy-Typen
MediaMetadataCompatundMediaDescriptionCompatkonvertiert wurde (#3018).
- Fehler behoben, bei dem das Beenden eines
- Downloads:
- Behebung potenzieller Endlosschleifen, wenn ein
PriorityTooLowExceptionvonSegmentDownloaderverarbeitet wird (für DASH, HLS und SmoothStreaming). Benutzerdefinierte Überschreibungen vonSegmentDownloadermit der geschützten Methodeexecutemüssen ihre Aufgabe in einemSupplierbereitstellen, damit sie neu erstellt werden kann (#2931).
- Behebung potenzieller Endlosschleifen, wenn ein
- HLS-Erweiterung:
- Übergeben Sie das JSON-Dokument mit der Roh-Asset-Liste an den
Listener.onAssetListLoadCompleted-Callback. Dies ist eine funktionsgefährdende Änderung in einer instabilen API, die erfordert, dass Apps, die diesen Callback implementieren, ein zusätzliches Argument vom TypJSONObjecthinzufügen (#2950).
- Übergeben Sie das JSON-Dokument mit der Roh-Asset-Liste an den
- RTSP-Erweiterung:
- RTP-Pakete mit Zeitstempeln, die sich wiederholen, werden jetzt korrekt verarbeitet (#2930).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Behebung potenzieller
NullPointerException, die auftreten können, wenn vor der Verarbeitung des ersten Videoframes gesucht wird (#2965).
- Behebung potenzieller
- Cast-Erweiterung:
- Fehler behoben, der verhinderte, dass die
RemoteCastPlayer-Zeitachse beim Ersetzen der Playlist korrekt aktualisiert wurde.
- Fehler behoben, der verhinderte, dass die
1.9.0
17. Dezember 2025
- Gemeinsame Bibliothek:
minSdkwurde auf23aktualisiert, um es an andere AndroidX-Bibliotheken anzupassen.- Fügen Sie
PlayerTransferStatehinzu, um den Wiedergabestatus zwischenPlayer-Instanzen zu übertragen. - Füge dem Player die Methoden
void mute()undvoid unmute()hinzu, die die Lautstärke des Players vor und nach dem Festlegen auf null beibehalten und anschließend wiederherstellen. - Veröffentlichung der Dienstprogrammklassen
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerundStuckPlayerDetector, die zuvor intern vonExoPlayerverwendet wurden, um die Wiederverwendung für andere Player zu ermöglichen (#1893). - Fehler bei der Verarbeitung von
ForwardingPlayer-Listenern behoben, wenn der zugrunde liegende Delegatplayer die Referenzgleichheit zum Vergleichen von Listener-Instanzen verwendet (#2675). - Fügen Sie in der
media3-common-ktx-Bibliothek einePlayer.listenTo-Erweiterungsfunktion zum Aussetzen hinzu, die die jeweiligePlayer.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). - Die automatische Erkennung des
TrackGroup-Tracktyps wurde korrigiert, indem der benutzerdefinierte Beispiel-MIME-Typ nicht ignoriert und nicht auf den potenziell falschen Tracktyp aus dem Container-MIME-Typ zurückgegriffen wird (#2860).
- ExoPlayer:
- Fügen Sie eine Erkennung für hängende Player hinzu, die einen
StuckPlayerException-Player-Fehler auslöst, wenn der Player hängen bleibt. Dies geschieht in den folgenden Fällen, wobei jedes Standardzeitlimit bei Bedarf inExoPlayer.Builderkonfiguriert werden kann:- Nach 10 Minuten
STATE_BUFFERINGbeim Versuch, die Wiedergabe zu starten, und keinem Fortschritt beim Zwischenspeichern. - Nach 10 Sekunden
STATE_READYbeim Versuch, die Wiedergabe zu starten, und kein Wiedergabefortschritt. - Nach 1 Minute
STATE_READYüber die angegebene Dauer hinaus, ohne das Ende des Elements zu erreichen. - Nach 10 Minuten mit einem Grund für die Wiedergabeunterdrückung beim Versuch, die Wiedergabe zu starten.
- Nach 10 Minuten
- Die Wakelock-Verarbeitung wird standardmäßig aktiviert, um Probleme mit der Zwischenspeicherung während der Hintergrundwiedergabe zu beheben. Dies entspricht dem Festlegen von
ExoPlayer.Builder.setWakeModeaufC.WAKE_MODE_LOCAL. - Fügen Sie eine Logik hinzu, um die ID des virtuellen Geräts automatisch zu aktualisieren, wenn eine Änderung an der
Contextgemeldet wird, die ursprünglich anExoPlayer.Builderübergeben wurde. - Fügen Sie
ExoPlayer.setVirtualDeviceIdhinzu, um die ID des virtuellen Geräts, die Sie vonContexterhalten haben, manuell zu aktualisieren. Diese ID wird anExoPlayer.Builderübergeben. - 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 Pre-Caching-Funktion hinzu. Apps können jetzt überTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)oderDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)zurückgeben, um anzugeben, dass ein Medienelement vorab im Cache gespeichert werden muss. - Pre-Caching-Funktion von
DefaultPreloadManagerin der Demo-App für Kurzvideos verwenden. DefaultLoadControl.Builder-Setter für die lokale Wiedergabe hinzugefügt und die Standardwerte vonDefaultLoadControlangepasst, damit sie mit einer Vielzahl von lokalen Dateien funktionieren.- Fehler behoben, bei dem der Player in
STATE_READYoderSTATE_BUFFERINGverbleiben konnte, wenn eine leere Playlist festgelegt wurde. - Verbesserung der Preload Manager APIs:
- Fügen Sie
addMediaItems(List<MediaItem>, List<T>)undaddMediaSources(List<MediaSource>, List<T>)hinzu, um die Medien oder Medienquellen im Batch hinzuzufügen und anschließend automatischinvalidate()aufzurufen. - Fügen Sie
removeMediaItems((List<MediaItem>)undremoveMediaSources(List<MediaSource>)hinzu, um die Mediendateien oder Medienquellen im Batch zu entfernen. Achten Sie darauf, dass der Preload-Manager nach dem Entfernen nicht mit dem Vorabladen beginnt oder fortfährt. - Lassen Sie zu, dass
DefaultPreloadManager.setCurrentPlayingIndex(int)sich automatisch selbst entwertet. Apps müsseninvalidate()nicht mehr explizit aufrufen, nachdem der aktuelle Wiedergabeindex aktualisiert wurde.
- Fügen Sie
- Es wurde die Möglichkeit hinzugefügt, das Zurücksetzen von Keyframes für das Vorwärtsspringen innerhalb derselben Gruppe von Bildern im Scrubbing-Modus zu überspringen.
- Füge
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)hinzu, damit Apps einen Wert für die Zielpuffer-Byte für einen Player mit der angegebenenplayerNamefestlegen können. DerDefaultLoadControlkann jetzt Entscheidungen für jeden Player separat treffen, basierend auf den zugewiesenen Byte und den Zielpuffer-Byte. - Fügen Sie
SkipInfozumAdPlaybackState.AdGrouphinzu, um Informationen zum Überspringen für jede Anzeige in der Anzeigengruppe zu übertragen. - Fehler behoben, bei dem der Aufruf von
removeMediaItems(List)während der Wiedergabe einer Post-Roll-Anzeige zu einem Absturz führte (#2746). - Einige Ruckler bei der Wiedergabe von Playlists wurden behoben, bei denen Frames fälschlicherweise immer als letztes Sample festgelegt und gerendert wurden.
- Wiederholungspfad aktivieren, wenn der Player keine Audiositzungs-ID generieren kann (#2382, #2678).
- Unterstützung für die Steuerung der gesamten Pufferbytes für die Quellen in
DefaultPreloadManagerhinzugefügt, um zu verhindern, dass die gesamten Pufferbytes für das Vorabladen beliebig anwachsen. Wenn die Standardsteuerungslogik verwendet werden soll, können Apps die Zielpufferbytes für das Vorabladen überDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)für einenplayerNamevonPlayerId.Preload.name(„preload“) festlegen und die erstellteDefaultLoadControlüberDefaultPreloadManager.Builder.setLoadControl(LoadControl)einfügen. cloneAndSet(int, int)wurde mit einer Standardimplementierung zuShuffleOrderhinzugefügt (#2834).- Inhaltsfortsetzungs-Offset anhängen, wenn die Anzeigenwiedergabe nach einer Suchanpassung oder einem automatischen Übergang übersprungen wird (#2484).
- API zum Festlegen und Beobachten von Codec-Parametern für Audio- und Videotracks hinzugefügt.
Diese Funktion ist für
MediaCodec-basierte Renderer implementiert und erfordert API 29 oder höher.- Verwenden Sie
ExoPlayer.setAudioCodecParameters()undExoPlayer.setVideoCodecParameters(), um Parameter anzuwenden. - Verwenden Sie
ExoPlayer.addAudioCodecParametersChangeListener()undExoPlayer.addVideoCodecParametersChangeListener(), um auf Änderungen zu reagieren. Für die Beobachtung herstellerspezifischer Schlüssel ist API 31 oder höher erforderlich.
- Verwenden Sie
- Fehler
IllegalStateExceptionbehoben, der durch das Festlegen einer leeren Medienquelle nach dem Springen zu einer Position ungleich null und dem anschließenden Vorbereiten des Players mit einer nicht leeren Medienquelle verursacht wurde. - Ein Fehler wurde behoben, bei dem das Springen zu anderen Mediendateien im Scrubbing-Modus zu
IllegalStateExceptionführen konnte. - Potenzielle
NullPointerExceptioninDefaultPlaybackSessionManagerwurden behoben (#2885). - Verbesserungen bei der Suchleistung für geeignete Videos aktivieren.
- Die Verwendung der asynchronen Entschlüsselung in MediaCodec wurde für API 36 und höher wieder aktiviert, da die Zeitüberschreitungsprobleme mit dieser Plattform-API behoben wurden (#1641).
- Ändern Sie den Standardwert von
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsin 15 ms und aktivieren Sie das effizientere Verwerfen von Videoframes vor dem Decodieren für infrage kommende Videos. - Fügen Sie der automatischen Speicherberechnung in
DefaultLoadControlein maximales Speicherlimit hinzu. Dies sollte nur wirksam werden, wenn eine übermäßige Anzahl von Tracks ausgewählt wird (#2860). - Fehler behoben, bei dem die Wiedergabe im Playlist- oder Wiederholungsmodus beim Vor- oder Zurückspulen im Scrub-Modus kurz vor dem Ende zum nächsten Medienelement springen konnte.
- Fügen Sie eine Erkennung für hängende Player hinzu, die einen
- CompositionPlayer:
- Veröffentlichen Sie
CompositionPlayerunter einer neuen@ExperimentalApi-Annotation, um anzugeben, dass es zum Testen 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 davon nicht dokumentiert). - Unterstützung für
COMMAND_SET_AUDIO_ATTRIBUTESund Audiofokus-Verarbeitung inCompositionPlayerhinzugefügt. - Unterstützung für Geschwindigkeitsänderungen in sekundären Sequenzen in
CompositionPlayerhinzugefügt. - Unterstützung für
EditedMediaItem.removeVideohinzufügen.
- Veröffentlichen Sie
- Transformer:
InAppMp4Muxerals Standard-Muxer verwenden.- Fügen Sie
EditedMediaItem.Builder#setSpeed()hinzu und verwerfen SieEffects#createExperimentalSpeedChangingEffects(). - Ersetzen Sie
forceAudioTrackundforceVideoTrackdurchtrackTypesinEditedMediaItemSequence.
- Trackauswahl:
- Füge
TrackSelectionParameters.selectTextByDefaulthinzu, um die Auswahl eines beliebigen Texttracks zu bevorzugen, ohne andere spezifischere Einstellungen anzugeben. preferredVideoLabels,preferredAudioLabelsundpreferredTextLabelswurden inTrackSelectionParametershinzugefügt, um eine Präferenz für Tracks mit einem bestimmten Label anzugeben, z. B. solche, die aus HLS-NAME-Tags gelesen werden (#1666).
- Füge
- Extraktoren:
- FLAC: Die Header-Erkennung wurde verschärft, um die Wahrscheinlichkeit zu verringern, dass in den codierten FLAC-Daten fehlerhafte 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).
- MP3: Das Sniffing-Limit wurde auf 128 kB erhöht, um dem bestehenden Suchlimit für ein Synchronisierungsbyte zu entsprechen (#2713).
- MP3:
FLAG_ENABLE_INDEX_SEEKINGwurde geändert, um Suchinformationen bevorzugt aus Metadaten-Headern (wie Xing und VBRI) abzurufen, sofern verfügbar. Wenn keine anderen Suchinformationen vorhanden sind, wird auf die indexbasierte Suche zurückgegriffen. Dies verbessert die Leistung für Dateien mit Suchmetadaten (#2839). - MP3:
Mp3Extractorwird so geändert, dass standardmäßig eine konstante Bitrate (CBR) angenommen wird, wenn keine Suchmetadaten (z.B. Xing, VBRI) gefunden werden, auch wennFLAG_ENABLE_INDEX_SEEKINGfestgelegt ist. Dies basiert auf der Historie der MP3-Spezifikation, in der CBR der Standard war und VBR explizite Header erfordert. Dies verbessert die sofortige Suchbarkeit für Dateien ohne Metadaten, geht jedoch auf Kosten der potenziellen Genauigkeit für VBR-Dateien ohne Header. Die Indexsuche wird jetzt als Fallback verwendet, wenn die CBR-Annahme nicht suchbar ist (z.B. bei Streams unbekannter Länge) (#2848). - MP4: Unterscheidung zwischen den MIME-Typen
audio/mpeg(MP3),audio/mpeg-L1undaudio/mpeg-L2durch Abrufen des Layer-Werts des ersten Samples, bevor ein Track-Format vom Extractor ausgegeben wird (#2683). - MP4: Die Effizienz des Sniffings sehr großer Dateien wurde verbessert, indem davon ausgegangen wird, dass eine
stbl-Box, die größer als 1 MB ist, bedeutet, dass die Datei nicht fragmentiert sein darf (#2650). - MP4: Unterstützung für die Metadaten
©mvn(Bewegungsname) und©mvi(Bewegungsindex) hinzugefügt. Diese werden jetzt alsTextInformationFrame-Objekte inFormat.metadatamit den IDsMVNMbzw.MVINausgegeben (#2754). - MP4: Tracks mit fehlender
stsd-Box werden ignoriert, anstatt dass das Parsen der gesamten Datei fehlschlägt. - 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 werden jetzt korrekt den jeweiligen Tracks zugeordnet, was eine detailliertere Suche ermöglicht. - MPEG-TS:
IllegalArgumentExceptionvonReorderingBufferQueue, verursacht durch PES-Pakete ohne Zeitstempel, wurde behoben (#2764). - Unterstützung für das Extrahieren von HEIC-Fotos mit Bewegtbild hinzugefügt. Der
HeifExtractorkann jetzt HEIC-Dateien mit eingebetteten Video- und Audiotracks parsen.
- Prüfer:
- Es wurde ein neues
:media3-inspector-Modul eingeführt, das als dedizierter Ort für Dienstprogramme zur Medienprüfung dient. Dieses Modul enthält jetzt ein neuesandroidx.media3.inspector.MetadataRetriever, das eine einheitliche API für die Metadaten- und Frame-Extraktion bietet. Die vorhandeneandroidx.media3.exoplayer.MetadataRetrieverwird zugunsten dieser neuen Version eingestellt. androidx.media3.inspector.FrameExtractorwurde eingeführt, eine neue öffentliche API für die Frame-Extraktion. DieseAutoCloseable-Klasse bietet eine Möglichkeit, Frames mit Unterstützung für HDR-Videos, Videoeffekte und benutzerdefinierte Decoderauswahl zu extrahieren. Sie sollte über dieBuilderfür eine bestimmteMediaItemerstellt werden.- FrameExtractor: Fügen Sie
getThumbnail()hinzu, um einen repräsentativen Thumbnail-Frame aus einer Mediendatei zu extrahieren, ohne dass ein bestimmter Zeitstempel erforderlich ist. androidx.media3.inspector.MediaExtractorCompatwurde hinzugefügt, ein direkter Ersatz fürandroid.media.MediaExtractorder Plattform, mit dem rohe, codierte Medien-Samples aus einer Mediendatei extrahiert werden können. Die vorhandeneandroidx.media3.exoplayer.MediaExtractorCompatwird jetzt zugunsten dieser neuen Klasse eingestellt.
- Es wurde ein neues
- Audio:
AudioProcessor-Instanzen über das Springen informieren.- Ermöglicht das Einfügen der neuen
AudioOutputProvider-Schnittstelle inDefaultAudioSink.Builder, um benutzerdefinierte Audioausgabepfade zu unterstützen. Die Standardeinstellung istAudioTrackAudioOutputProvider. - Suchvorgänge in
GainProcessorverarbeiten. - Nutze die Profil- und Level-Funktionen des AC-4-Decoders bei der Bewertung der Unterstützung von Track-Formaten (#2580).
- Potenzielle Verzögerungen durch die Verarbeitung von Callbacks für Routingänderungen zu Beginn der Wiedergabe werden vermieden (#2646).
- Codec-Wiederverwendung 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 Codecwiederverwendung für Dolby Vision-Inhalte mit unterschiedlichen Profilen.
- Problemumgehung für falsch gemeldete Leistungspunkte für sichere Codecs wieder aktiviert (#2856).
- Text:
- Fehler beim Parsen von CEA-6/708-Untertiteln in Dolby Vision-Inhalten behoben (#2775).
- Bild:
- Ein Problem mit dem ScrubbingMode wurde behoben, bei dem der Player beim Scrubbing eines DASH-Thumbnail-Tracks hängen blieb (#2815).
- DRM:
- Ändern Sie den Rückgabetyp der
MediaDrmCallback-Methoden vonbyte[]in einen neuenMediaDrmCallback.Response-Typ, damit zusätzliche optionale Informationen zurückgegeben werden können. Dies ist eine funktionsgefährdende Änderung, die jedoch leicht behoben werden kann, indem der vorherigebyte[]-Rückgabewert vor der Rückgabe mitnew Responseumschlossen wird. - Fügen Sie
AnalyticsListener.onDrmKeysLoadedwichtige Anfrageinformationen wie URL und Latenz hinzu (#1001). - Verschieben Sie die Daten der Bereitstellungsanfrage von einem URL-Parameter in den POST-Text.
- Ändern Sie den Rückgabetyp der
- Auswirkung:
Presentation.copyWithUnsetSideRoundedTowurde hinzugefügt, um die nicht festgelegte Ausgabeseite zu runden, wennPresentationmit einer einzelnen Seitenlänge erstellt wird.
- Muxer:
- Fügen Sie
MediaMuxerCompathinzu, einen direkten Ersatz für das FrameworkMediaMuxer. - Füge
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()hinzu, um die Erstellung von Fotos mit Bewegtbild zu ermöglichen. - Fügen Sie
WebmMuxerhinzu, um das Muxing vonOPUS-,VORBIS-,VP8- undVP9-Medienstreams in einwebm-Dateiformat zu ermöglichen.
- Fügen Sie
- IMA-Erweiterung:
- Entfernung benutzerdefinierter ProGuard-Regeln, damit Apps stattdessen die im IMA-Android-Archiv veröffentlichten Regeln verwenden können.
ImaServerSideAdInsertionUriBuilder.setNetworkCodewurde hinzugefügt, eine neue API zum Festlegen des Google Ad Manager-Netzwerkcodes für das IMA SDK, um Anzeigenkennungen gemäß den Google Ad Manager-Einstellungen zu verarbeiten. Netzwerkcodes sind optional, werden aber für Full-Service-Streamanfragen empfohlen. Informationen zum Ermitteln des Netzwerkcodes finden Sie in diesem Artikel.- Die IMA-Abhängigkeit wurde auf 3.37.0 erhöht. Dazu muss die Entzuckerung der Kernbibliothek aktiviert werden. 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-Builder. Zu den benutzerdefinierten UI-Optionen für die serverseitige Anzeigenbereitstellung gehören die Unterstützung für das Rendern von „Überspringbar“ und „Infos zur Anzeige“. Die Funktion ist derzeit für ausgewählte Publisher auf einer Zulassungsliste verfügbar. 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.
- Es wurde ein Problem behoben, bei dem ein Fehler bei der Vorbereitung von Inhalten nach einer Anzeige fälschlicherweise als Fehler bei der Anzeigenwiedergabe gemeldet wurde (#2656).
- Sitzung:
- Füge
MediaSession.Callback.onPlaybackResumptioneinen neuen Parameter hinzu, um anzugeben, ob der Aufruf nur zum Erfassen von Informationen oder zum Starten der Wiedergabe erfolgt (#1764). MediaSession.ControllerInfo.isTrustedwurde aktualisiert, sodass auch Controller aus der eigenen App als vertrauenswürdig deklariert werden (#2542).MediaSessionService.triggerNotificationUpdatewurde hinzugefügt, um eine Benachrichtigungsaktualisierung manuell auszulösen (#1833).- Fügen Sie
ProgressListenerzu benutzerdefinierten Befehlsmethoden hinzu. - Ändern Sie den Standardwert für
MediaLibrarySession.Builder.setLibraryErrorReplicationModein „non fatal“. - Der
MediaButtonReceiver.onForegroundServiceStartNotAllowedExceptionwurde einContext-Parameter hinzugefügt (#2625). - Lies die Lautstärkeregelungs-ID von der Plattform
PlaybackInfo, anstatt sie über Binder abzurufen. So wird sichergestellt, dass der Wiedergabetyp und die ID für die Lautstärkeregelung atomar gelesen werden und übereinstimmen. - Fehler behoben, bei dem
ACTION_UP-Schlüsselereignisse herausgefiltert wurden, bevor sie zur benutzerdefinierten Verarbeitung an den Callback übergeben wurden. Dies sorgt für Parität mit dem, was media1 und die Plattform tun (#2637). - Fehler behoben, bei dem
getCurrentTimeline()vonPlayerWrapperaufgerufen wurde, auch wenn der Befehl nicht verfügbar war (#2665). - Fehler behoben, bei dem eine Nachricht in der Nachrichtenwarteschlange des Haupt-Loopers verblieb, was nach Beendigung des Dienstes zu einem Speicherleck führte (#2692).
- Wenn eine Verbindung zu einer Legacy-Sitzungs-App mit einem
MediaBrowserbesteht, werden benutzerdefinierte Befehle nur dann an die Sitzung gesendet, wenn die benutzerdefinierte Aktion als benutzerdefinierte Aktion inPlaybackStateCompatder Legacy-Sitzung beworben wird. Alle anderen benutzerdefinierten Aktionen werden an den Dienst gesendet. onAudioSessionIdChangedwurde implementiert, um Media Controller zu benachrichtigen, wenn eine Audiositzungs-ID von der Sitzung festgelegt wird (#244).- Fehler behoben, bei dem
KEYCODE_HEADSETHOOKden Player nicht gestartet hat, wenn das MedientastenereignisIntentinonStartCommand()eingegangen ist. Dies wird behoben, indem „KEYCODE_HEADSETHOOK“ wieKEYCODE_MEDIA_PLAY_PAUSEbehandelt wird (#2816). - Es wurde ein Fehler behoben, bei dem die Oberflächengröße nicht zwischen der Sitzung und dem Controller kommuniziert wurde, was dazu führte, dass in der Demositzung keine Videoeffekte angewendet werden konnten. Wenn Sie einen Controller verwenden, kann dies eine funktionsgefährdende Änderung sein, wenn Ihr Player einen
setVideoSurfaceHolder-Aufruf nicht verarbeiten kann. - Die Weitergabe von
CharSequence-Metadatenwerten, die nicht vom TypStringsind, wie z. B. Strings im Span-Stil, wurde korrigiert (#2853). - Füge
CommandButton.executeActionhinzu, damit Controller die gewünschte Aktion leichter auslösen können. Außerdem können Sie Parameter für einige Player- und Sitzungsbefehle angeben, um festzulegen, welche Aktion ausgelöst werden soll. - Fügen Sie Abwärtskompatibilität für
CommandButton-Instanzen hinzu, diePlayer.Commandoder nicht benutzerdefinierteSessionCommandverwenden, um ihre Aktion zu definieren. Diese werden jetzt in Plattform-Mediensitzungen korrekt dargestellt, z. B. für die System-UI oder Android Auto. - Es wurde ein Problem behoben, bei dem dieselbe
Bitmapmehrmals komprimiert wurde, wenn eineMediaControllermit einer Plattform-Mediensitzung verbunden wurde.
- Füge
- UI:
- Fügen Sie dem
media3-ui-compose-Modul die KlasseProgressStateWithTickIntervalund die entsprechenderememberProgressStateWithTickInterval-Komposition hinzu. Dieser State Holder wird indemo-composeverwendet, um die aktuelle Position und Dauer in Textform anzuzeigen. - Fügen Sie
MuteButtonStatezuui-composehinzu, um die Stummschaltung derPlayer-Lautstärke zu verwalten. Dieser State Holder wird indemo-composeverwendet, um den Ein/Aus-Button für die Stummschaltung anzuzeigen. - Fügen Sie dem Modul
media3-ui-composedieProgressStateWithTickCount-Klassen und die entsprechenderememberProgressStateWithTickCount-Komponierbare Funktion hinzu. Dieser State Holder wird indemo-composeverwendet, um den Fortschritt als horizontale schreibgeschützte Fortschrittsanzeige darzustellen. - Fügen Sie
media3-ui-composedasContentFrame-Composable hinzu, das diePlayerSurface-Verwaltung mit der Größenänderung des Seitenverhältnisses und dem Abdecken mit einem Shutter kombiniert. - Problemumgehung für einen bekannten Plattformfehler in API 34, der dazu führt, dass Videos gestreckt oder zugeschnitten werden, wenn
SurfaceViewin einem Compose-AndroidViewverwendet wird, und der sich daher aufContentFrame- undPlayerSurface-Composables mitSURFACE_TYPE_SURFACE_VIEWauswirkt (#1237, #2811). - Erstellen Sie ein neues
media3-ui-compose-material3-Modul und fügen Sie ihm Composables mit Material3-Design hinzu (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - Fügen Sie
TimeText-Komposition zumedia3-ui-compose-material3hinzu, um den Spielerfortschritt in Textform anzuzeigen. Sie kann so konfiguriert werden, dass die aktuelle Position, die Dauer oder die verbleibende Zeit angezeigt wird. - Unterstützung für das Platzieren einer Schaltfläche für das Medienrouting in der
PlayerViewhinzugefügt. - Verwenden Sie
BidiFormatter, um Satzzeichen in RTL-Textuntertiteln korrekt anzuzeigen (#11214).
- Fügen Sie dem
- HLS-Erweiterung:
- HLS-Interstitial-Skip-Attribute parsen.
- Ordnen Sie die Attribute für die Überspringungssteuerung aus der HLS-Playlist und dem Asset-Listendokument dem
AdPlaybackStatefür den öffentlichen Zugriff zu. - Fehler behoben, bei dem die Startzeit der Playlist gelöscht wurde, 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).
- Fügen Sie
HlsInterstitialsAdsLoader.skipCurrentAd()undskipCurrentAdGroup()sowie die entsprechenden Methoden hinzu, um Anzeigen und Anzeigengruppen nach Index zu überspringen. HlsInterstitialsAdsLoader.Listener.onAdStartedwurde hinzugefügt, um den Beginn eines Anzeigenzeitraums zu melden (#2859).- Leerzeichen als Trennzeichen für Datum und Uhrzeit in ISO 8601-Datums-/Uhrzeitstrings akzeptieren.
- Das Abrufen des nächsten Blocks für einen
HlsMediaPlaylistohne Segmente wird jetzt korrekt verarbeitet (#2821). - Verwenden Sie die Standardstartposition für Pre-Rolls bei Livestreams.
- DASH-Erweiterung:
- Fehler
UnsupportedOperationExceptionbeim Abspielen von DASH-Streams mit einem nicht hierarchischendata:-URI-Manifest behoben (#2688). LiveConfigurationwird auf den Wert zurückgesetzt, der von derMediaItemderDashMediaSourcebereitgestellt wird, wenn sie veröffentlicht wird und wenn die Mediendatei vom Nutzer aktualisiert wird (#2606).- Abstürze aufgrund ungültiger Manifestaktualisierungen, die nicht als Player-Fehler gemeldet wurden, werden vermieden (#2805).
- Fehler
- RTSP-Erweiterung:
- Fehler bei fehlenden RTP-Paketen bei der Verarbeitung fragmentierter NAL-Einheiten für H264 und H265 beheben (#2613).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- AV1-Erweiterung: Der AV1-Software-Decoder verwendet jetzt die leistungsstarke
dav1d-Bibliothek und ersetzt die vorherigelibgav1-Implementierung für eine verbesserte Decodierungsgeschwindigkeit. - FFmpeg-Erweiterung: Ein Problem wurde behoben, das die Wiedergabe einiger FLAC-Dateien verhinderte. Dazu wurde dafür gesorgt, dass der
STREAMINFO-Block korrekt geparst und an den Decoder übergeben wird (#2887).
- AV1-Erweiterung: Der AV1-Software-Decoder verwendet jetzt die leistungsstarke
- Cast-Erweiterung:
- Füge
CastPlayer.Builderhinzu, damitCastPlayersowohl die lokale Wiedergabe als auch die Wiedergabe über Google Cast ermöglicht. Wenn Sie das alteCastPlayer-Verhalten beibehalten möchten, bei dem nur die Cast-Wiedergabe unterstützt wird, können SieRemoteCastPlayerverwenden. Die bereits vorhandenenCastPlayer-Konstruktoren behalten ihr altes Verhalten bei, werden aber zugunsten derCastPlayer- oderRemoteCastPlayer-Builder eingestellt. - Erzwingung eines MIME-Typs, der nicht null ist, in
DefaultMediaItemConverterbeenden. - Verwende
MediaItem.mediaMetadata.mediaType, um den Cast-MEDIA_TYPE abzuleiten, der inDefaultCastOptionsProvider#toMediaQueueItemverwendet werden soll, falls verfügbar. - Eingehende Übertragungen von Remote- zu lokalen Geräten in
DefaultCastOptionsProvideraktivieren. - Unterstützung für Cast in der Session-Demo hinzugefügt.
- Unterstützung für die Anzeige einer Schaltfläche für die Medienroute auf einer zusammensetzbaren Benutzeroberfläche hinzugefügt.
- Unterstützung für die Anzeige einer Schaltfläche für das Medienrouting in einem Aktionsleistenmenü hinzufügen.
- Unterstützung für die Anzeige einer Schaltfläche für Medien-Streaming als Ansichts-UI hinzugefügt.
- Füge
- Testdienstprogramme:
- Fügen Sie die maximale Zeitdifferenz für den automatischen Übergang von
FakeClockhinzu. Der Standardwert ist 1 Sekunde, kann aber überFakeClock.Builderkonfiguriert werden. - Maximale Zeitdifferenz zwischen Nachrichten für
RobolectricUtil.runMainLooperUntil(undrunLooperUntil) hinzugefügt. Der Standardwert ist 1 Sekunde, kann aber über neue Überladungen dieser Methoden konfiguriert werden. CapturingRenderersFactoryvontest-utilsnachtest-utils-robolectricverschieben.
- Fügen Sie die maximale Zeitdifferenz für den automatischen Übergang von
- Entfernen Sie nicht mehr unterstützte Symbole:
- Der verworfene
DefaultPreloadManager-Konstruktor wurde entfernt. Verwenden Sie stattdessenDefaultPreloadManager.Builder. - Veraltete
EditedMediaItemSequence-Konstruktoren wurden entfernt. Verwenden Sie stattdessenEditedMediaItemSequence.Builder. BitmapFactoryImageDecoder.BitmapDecoderentfernen. Verwenden Sie stattdessenExternallyLoadedImageDecoder.- Entfernen Sie die verworfene
ShadowMediaCodecConfig.forAllSupportedMimeTypes(). Verwenden Sie stattdessenShadowMediaCodecConfig.withAllDefaultSupportedCodecs(). - Entfernen Sie das verworfene
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes(). Verwenden Sie stattdessenShadowMediaCodecConfig.withNoDefaultSupportedCodecs().
- Der verworfene
1.9.0-rc01
1. Dezember 2025
Verwenden Sie die stabile Version 1.9.0.
1.9.0-beta01
20. November 2025
Verwenden Sie die stabile Version 1.9.0.
1.9.0-alpha01
22. Oktober 2025
Verwenden Sie die stabile Version 1.9.0.
Version 1.8.0
1.8.1
21. Mai 2026
Version 1.8.1 enthält die folgenden Commits.
- Auswirkung:
- Legen Sie
GL_DRAW_BUFFERundGL_READ_BUFFERexplizit fest, wenn Sie von einem oberflächenlosen Kontext wechseln.
- Legen Sie
Version 1.8.0
30. Juli 2025
Version 1.8.0 enthält diese Commits.
- Gemeinsame Bibliothek:
- 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 hinzugefügt (#2522). - Es wird eine Ausnahme ausgelöst, wenn von mehreren Threads auf
DefaultAudioSinkzugegriffen 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). - Fehler behoben, bei dem Audioformate, die nicht Stereo sind, auf Fernsehern von
DefaultTrackSelectorals nicht unterstützt markiert werden konnten. - Achte darauf, dass der letzte Frame korrekt gerendert wird, wenn das MediaCodec-Flag
DECODE_ONLYverwendet wird. Dieses Flag ist im Scrubbing-Modus standardmäßig aktiviert. - Unterstützung für die Verwendung der virtuellen Geräte-ID aus dem
Context, der anExoPlayer.Builderübergeben wird, hinzugefügt. - Dynamische Planung im Scrubbing-Modus standardmäßig aktivieren.
- Vermeide unnötiges Neuladen einer Quelle, wenn du zum Ende eines Elements springst.
- Im Scrubbing-Modus standardmäßig
MediaCodec.BUFFER_FLAG_DECODE_ONLYverwenden. IllegalStateExceptionwird ausgelöst, wennPreloadMediaSourcevon einemExoPlayermit einem Wiedergabe-Thread abgespielt wird, der sich vom Vorabladen-Thread unterscheidet (#2495).cloneAndMovewurde mit einer Standardimplementierung zuShuffleModehinzugefügt (#2226).- Ändern Sie das Standardverhalten von
Renderer.getMinDurationToProgressUs, um einen größeren Wert zurückzugeben, wenn kein Aufruf vonrendererforderlich ist. - Fehler behoben, bei dem die interne Planung den letzten Frame verzögerte, wenn beim Pausieren zum Ende gesprungen wurde. Derzeit wird die Fehlerkorrektur nur wirksam, wenn
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledaktiviert ist. - Fügen Sie die Methode
ExoPlayer.setScrubbingModeEnabled(boolean)hinzu. Dadurch wird der Player für häufige Suchvorgänge optimiert, z. B. wenn ein Nutzer eine Bildlaufleiste verschiebt. Das Verhalten des Scrubbing-Modus kann mitsetScrubbingModeParameters(..)fürExoPlayerundExoPlayer.Builderangepasst werden. - Anpassung der Toleranz für die Suche nach Bruchteilen im Scrubbing-Modus zulassen.
- Erhöht die Codec-Betriebsrate im Scrubbing-Modus.
- Fehler behoben, bei dem Vorbereitungsfehler im Inhalt von
AdsMediaSourcemöglicherweise nie gemeldet wurden (#2337). - Speicherleck in
MergingMediaSourcebehoben, das beispielsweise beim Sideloading von Untertiteln verwendet wird (#2338). CmcdConfiguration.Factorykann jetztnullzurückgeben, um das CMCD-Logging für bestimmte Mediendateien zu deaktivieren (#2386).- Die Standardpuffergröße für Bilder wurde von 128 KB (Fehler beim Kopieren und Einfügen aus Texttracks) auf 26 MB erhöht. Das ist groß genug für Ultra-HDR-Bilder mit 50 MP (#2417).
PreCacheHelperhinzugefügt, damit Apps ein einzelnes Medium mit einer bestimmten Startposition und Dauer im Cache speichern können.- Unterstützung für das Vorabladen von einer bestimmten Position in
DefaultPreloadManagerhinzugefügt.
- Getter für den Zufallsmodus zur
- Transformer:
- Füge
CodecDbLitehinzu, um chipsatzspezifische Optimierungen der Video-Codierungseinstellungen zu ermöglichen. - Fügen Sie das Flag
setEnableCodecDbLitezuDefaultEncoderFactoryhinzu, um die Optimierung der CodecDB Lite-Einstellungen zu aktivieren. Dieses Flag ist standardmäßig auf „false“ eingestellt. - Wenn Sie eine anfängliche Lücke (über
addGap()hinzugefügt) mit lautlosem 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. - Schnittstelle
Muxervonmedia3-transformernachmedia3-muxerverschieben. - Die Einstellung
MediaItem.Builder().setImageDuration(long)muss festgelegt werden, um eine Mediendatei als Bild zu importieren. - Füge
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)hinzu, das beim Kürzen eine MP4-Bearbeitungsliste enthält, um Player anzuweisen, Samples zwischen dem Keyframe vor dem Startpunkt des Kürzungsvorgangs und dem Startpunkt des Kürzungsvorgangs zu ignorieren. - Aktualisieren Sie die Composition Demo-App, um Kotlin und Jetpack Compose zu verwenden, und fügen Sie ein benutzerdefiniertes
VideoCompositorSettingshinzu, um Sequenzen in einem 2x2- oder PiP-Layout anzuordnen.
- Füge
- Extraktoren:
- Metadaten aus fragmentierten MP4-Dateien parsen (#2084)
- JPEG: Unterstützung von Fotos mit Bewegtbild, die am Anfang kein EXIF-Segment haben (#2552).
- Unterstützung für das Springen in fragmentierten MP4-Dateien mit mehreren
sidx-Atomen hinzugefügt. Dieses Verhalten kann mit dem FlagFLAG_MERGE_FRAGMENTED_SIDXfürFragmentedMp4Extractoraktiviert 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, sodass nicht erkannte SEI-Typen vollständig übersprungen werden (#2456).
WavExtractorwird aktualisiert, um die SubFormat-Daten der Headererweiterung für das Audioformat beim Parsen einer Datei vom TypWAVE_FORMAT_EXTENSIBLEzu verwenden.- MP4: Unterstützung für
ipcm- undfpcm-Boxen hinzugefügt, die rohe PCM-Audiotracks definieren (64-Bit-Gleitkomma-PCM wird nicht unterstützt). - MP4: Der Rotationsanteil von
tkhd-Transformationsmatrizen, die das Video sowohl drehen als auch spiegeln, wird verarbeitet. Dadurch werden gespiegelte Videos, die mit der Frontkamera des iPhone aufgenommen wurden, richtig herum angezeigt, aber fälschlicherweise auf der Y-Achse gespiegelt (#2012). - MP3: Dauer und Datengröße aus nicht suchbaren Xing-, VBRI- und ähnlichen Metadaten mit variabler Bitrate verwenden, wenn aufgrund von
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)auf die Suche mit konstanter Bitrate zurückgegriffen wird (#2194).
- Audio:
- Fehler behoben, bei dem
AnalyticsListener.onAudioPositionAdvancingnicht aufgerufen wird, wenn die Audiowiedergabe sehr kurz vor dem Ende des Mediums gestartet wird. - Unterstützung für alle linearen PCM-Abtastformate in
ChannelMappingAudioProcessorundTrimmingAudioProcessorhinzugefügt. - Unterstützung für Audiolücken in
CompositionPlayerhinzugefügt. - Entfernen Sie den fehlerhaften Aufruf von
BaseAudioProcessor#flush()ausBaseAudioProcessor#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 Best-Effort-Schätzung zu verwenden. - Verbesserung der Glättung von Audiozeitstempeln bei unerwarteter Positionsabweichung vom Audioausgabegerät.
- Fehler behoben, bei dem die A/V-Synchronisierung nach dem Fortsetzen der Wiedergabe aus der Pause für die ersten 10 Sekunden unterbrochen wurde, wenn eine Verbindung zu Bluetooth-Geräten bestand.
- Fehler behoben, bei dem
AnalyticsListener.onAudioPositionAdvancingnicht die Zeit meldete, zu der die Audiowiedergabe gestartet wurde, sondern die Zeit der ersten Messung. - Behebung des Problems, dass auf einigen Geräten nach dem Fallback auf Stereo-Audio nicht wieder zu Mehrkanal-Audio gewechselt wurde (#2258).
- Fehler behoben, bei dem
- Video:
- Der Workaround für getrennte Oberflächen wurde auf „lenovo“- und „motorola“-Geräte ausgeweitet (#2059).
- Verbesserung der reibungslosen Freigabe von Videoframes beim Start, wenn Audio-Samples nicht genau an der angeforderten Position beginnen.
- Der Workaround für getrennte Oberflächen wurde auf „realme“-Geräte ausgeweitet (#2059).
- Experimentelle
ExoPlayerAPI hinzugefügt, um das FlagMediaCodec.BUFFER_FLAG_DECODE_ONLYbeim Einreihen von Eingabepuffern, die nur decodiert werden, in die Warteschlange einzuschließen. Dieses Flag signalisiert dem Decoder, die Nur-Decodierungs-Puffer zu überspringen, was zu einer schnelleren Suche führt. Aktivieren Sie sie mitDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * Verbesserte Codec-Leistungsprüfungen für Software-Videocodecs. Dies kann dazu führen, dass einige zusätzliche Tracks alsEXCEEDS_CAPABILITIESmarkiert werden. - Fehler bei der VP9-Widevine-Wiedergabe auf einigen Geräten behoben (#2408).
- Text:
- Unterstützung für VobSub-Tracks in MP4-Dateien hinzugefügt (#2510).
- Es wurde ein Problem behoben, bei dem die Wiedergabe ins Stocken geriet, wenn ein Untertitelsegment anfangs nicht geladen werden konnte, später aber erfolgreich geladen wurde, gefolgt von mehreren leeren Untertitelsegmenten (#2517).
- SSA und SubRip wurden korrigiert, sodass beim Aktivieren von Untertiteln ein Cue für den laufenden Vorgang angezeigt wird (#2309).
- Es wurde ein Problem behoben, bei dem die Wiedergabe hängen blieb, wenn von einem Stream mit einem Untertitelfehler zu einem Livestream mit einem leeren Untertiteltrack gewechselt wurde (#2328).
- Fehlerhafte CEA-608-Untertitel bei der Wiedergabe von H.262-Streams mit B-Frames wurden korrigiert (#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 (SSA)-Untertiteldateien hinzugefügt, mit dem die Z-Reihenfolge von Cues definiert wird, wenn mehr als ein Cue gleichzeitig auf dem Bildschirm angezeigt wird (#2124).
- Metadaten:
- Unterstützung für das Abrufen der Mediendauer und
TimelinezuMetadataRetrieverhinzugefügt und zu einer instanzbasiertenAutoCloseable-API 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 vorherigen statischen Methoden sind jetzt verworfen (#2462).
- Unterstützung für das Abrufen der Mediendauer und
- Bild:
- Begrenzen Sie decodierte Bitmaps auf die Anzeigegröße in
BitmapFactoryImageDecoder, um zu vermeiden, dass eine App mitCanvas: trying to draw too large bitmap.vonPlayerViewabstü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. - Richte die maximale Bitmap-Ausgabegröße, die in
CompositionPlayerverwendet wird, an der Größe aus, die bereits inTransformerverwendet wird. Das bedeutet, dassCompositionPlayerim Gegensatz zuExoPlayerdie Displaygröße beim Decodieren von Bitmaps nicht berücksichtigt.
- Begrenzen Sie decodierte Bitmaps auf die Anzeigegröße in
- DRM:
- Neue Überladung von
OfflineLicenseHelper.newWidevineInstancehinzugefügt, die einMediaItem.DrmConfigurationakzeptiert, damit HTTP-Anfrageheader korrekt angewendet werden können (#2169).
- Neue Überladung von
- Auswirkung:
- Fügen Sie
Presentation.createForShortSide(int)hinzu, um einenPresentationzu erstellen, der dafür sorgt, dass 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 Muxer-spezifische KlasseBufferInfoanstelle 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.
- Ein Fehler wurde behoben, bei dem Anzeigengruppen nach dem Ende eines VOD-Fensters die Wiedergabe blockierten.
Anzeigengruppen mit einer Startzeit nach dem Fenster werden nicht mehr in die
MediaPeriodQueueeingereiht (#2215).
- Sitzung:
- Fehler behoben, bei dem Verbindungen von nicht privilegierten Media3-Controllern von Drittanbietern ignoriert wurden.
- Die Prüfung auf verfügbare Befehle beim Senden benutzerdefinierter Befehle an ein Legacy-
MediaBrowserServiceCompatwurde entfernt. Dies entspricht dem Verhalten älterer Controller/Browser, wenn sie mit einer älteren App verbunden sind. - Ein Fehler wurde behoben, durch den der erste Wiedergabefehler eines Players fälschlicherweise als persistente benutzerdefinierte Ausnahme behandelt wurde. Dadurch wird verhindert, dass die Anwendung wiederhergestellt wird.
- Fehler behoben, bei dem einige Controller-Änderungen, die nicht von der Sitzung verarbeitet werden, zu
IllegalStateExceptionsführen können. - Fehler behoben, bei dem Controller-Aktionen, die nicht von der Sitzung verarbeitet werden, den Controller in einem ungültigen Zustand hinterlassen können.
- Warnung zu StrictMode-Verstoß bei unsicherem Start behoben (#2330).
- Fehler behoben, bei dem der Aufruf von
setSessionExtrasaus dem Hauptthread, wenn der Player von einem anderen Anwendungsthread als dem Hauptthread ausgeführt wurde, einenIllegalStateExceptionverursachte (#2265). - Es wird nicht automatisch eine Benachrichtigung angezeigt, wenn ein Player mit Mediendateien eingerichtet ist, ohne dass diese vorbereitet oder abgespielt werden (#2423https://github.com/androidx/media/issues/2423). Dieses Verhalten kann über
MediaSessionService.setShowNotificationForIdlePlayerkonfiguriert werden. - Fügen Sie benutzerdefinierte
PlaybackExceptionfür alle oder ausgewählte Controller hinzu. - Fehler behoben, bei dem das Suchen in einem Livestream auf einem
MediaControllereinenIllegalArgumentExceptionverursachen kann. - Bei Livestreams wird die Veröffentlichung einer Wiedergabeposition und die Möglichkeit, im aktuellen Element nach Plattform-Mediencontrollern zu suchen, beendet, um Positionsartefakte in der Android Auto-Benutzeroberfläche (und anderen Controllern, die diese Informationen aus der Plattform-Mediensitzung verwenden) zu vermeiden (#1758).
- Es wurde ein Fehler behoben, bei dem die Übergabe von „null“ an
getLibraryRooteinesMediaBrowser, der mit einem Legacy-MediaBrowserServiceCompatverbunden war, zu einemNullPointerExceptionführte. - Ein Fehler wurde behoben, bei dem das Senden von benutzerdefinierten Aktionen, eines Suchergebnisses oder einer getItem-Anfrage die alte Sitzungs-App mit einem
ClassNotFoundExceptionzum Absturz brachte. - Es wurde ein Fehler behoben, durch den
MediaItem.LocalConfiguration.urifür dieMediaMetadatader Plattformsitzung freigegeben wurde. Wenn Sie einen URI absichtlich freigeben möchten, damit Controller die Medien noch einmal anfordern können, legen Sie stattdessenMediaItem.RequestMetadata.mediaUrifest.
- UI:
- Fehler behoben, bei dem
PlayerSurfacein wiederverwendbaren Komponenten wieLazyColumnnicht richtig funktionierte (#2493). - Ein Compose-Fehler wurde behoben, der zu einer Lücke zwischen dem Festlegen der anfänglichen Schaltflächenzustände und dem Beobachten der Zustandsänderung (z.B. Symbolformen oder Aktivierung) führte. Alle Änderungen am Player außerhalb des Beobachtungszeitraums werden jetzt erfasst (#2313).
- Füge dem Modul
media3-ui-composeState Holder und Composables fürSeekBackButtonStateundSeekForwardButtonStatehinzu. - Unterstützung für den Scrubbing-Modus von ExoPlayer zu
PlayerControlViewhinzugefügt. Wenn diese Option aktiviert ist, wird der Player in den Scrubbing-Modus versetzt, wenn der Nutzer beginnt, die Scrubbing-Leiste zu ziehen. Bei jeder Bewegung wird einplayer.seekTo-Aufruf ausgegeben. Der Scrubbing-Modus wird beendet, wenn der Nutzer den Bildschirm nicht mehr berührt. Diese Integration kann entweder mittime_bar_scrubbing_enabled = truein XML oder mit der MethodesetTimeBarScrubbingEnabled(boolean)in Java/Kotlin aktiviert werden. - Sorgen Sie dafür, dass
PlayerSurfaceein Argument vom TypPlayerakzeptiert, das null sein kann.
- Fehler behoben, bei dem
- Downloads:
- Unterstützung für den teilweisen Download von progressiven Streams hinzugefügt. Apps können einen progressiven Stream mit
DownloadHelpervorbereiten und einenDownloadRequestvom Hilfsprogramm anfordern. Dabei müssen die zeitbasierten Start- und Endpositionen der Medien angegeben werden, die der Download abdecken soll. Der 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 den teilweisen Download von adaptiven Streams hinzugefügt. Apps können einen adaptiven Stream mit
DownloadHelpervorbereiten und einenDownloadRequestvom Hilfsprogramm anfordern, indem sie die zeitbasierten Start- und Endpositionen der Medien angeben, die der Download abdecken soll. Der zurückgegebeneDownloadRequestenthält den aufgelösten Zeitraum, mit dem ein konkreterSegmentDownloadererstellt und der Inhalt entsprechend heruntergeladen werden kann.
- Unterstützung für den teilweisen Download von progressiven Streams hinzugefügt. Apps können einen progressiven Stream mit
- Cronet-Erweiterung:
- Automatische Cookie-Verarbeitung hinzugefügt (#5975).
- HLS-Erweiterung:
- Fehler behoben, bei dem
HlsSampleStreamWrapperversucht, im Zwischenspeicher zu suchen, wenn keine Chunks im Zwischenspeicher verfügbar sind #2598. - Fehler behoben, bei dem Änderungen an der Titelauswahl nach dem Laden von Teilen mit niedriger Latenz und Preload-Hinweisen dazu führen konnten, dass die Wiedergabe hängen blieb oder einfror (#2299).
- Verhindern Sie übermäßige Aktualisierungen, indem Sie die Hälfte der Zieldauer warten, wenn
CAN-BLOCK-RELOAD=YESvom Server nicht berücksichtigt wird (#2317). - Fehler behoben, bei dem die Wiedergabe beim Starten eines Interstitial-Streams vor einer Mid-Roll-Anzeige ins Stocken geriet und die Auflösung der Asset-Liste für die falsche Anzeige versucht wurde (#2558).
- Das Parsen von Playlists wurde korrigiert, sodass
\f(Form Feed) in Attributwerten in Anführungszeichen akzeptiert wird (#2420). - Unterstützung für das Aktualisieren von Interstitials mit derselben ID (#2427).
- Fehler behoben, bei dem Fehler beim Laden von Playlists manchmal nicht weitergegeben werden, wenn ein Livestream keine Segmente mehr zum Laden hat (#2401https://github.com/androidx/media/issues/2401).
- Untertitel-Renditions werden nach NAME-Tag gruppiert, ähnlich wie Audio-Renditions bereits gruppiert werden (#1666).
- Unterstützung für X-ASSET-LIST und Livestreams mit
HlsInterstitialsAdsLoader.
- Fehler behoben, bei dem
- DASH-Erweiterung:
- Problem behoben, bei dem der Anpassungssatz für die Trickwiedergabe mit dem Hauptanpassungssatz zusammengeführt wurde, um eine ungültige
TrackGroupzu bilden (#2148). - Fehler behoben, bei dem das Verkürzen der Dauer eines DASH-Zeitraums eine Ausnahme auslösen kann, wenn bereits Samples über die neue Dauer hinaus von der Rendering-Pipeline gelesen wurden (#2440).
- Fehler behoben, bei dem die Weiterleitung bei Verwendung von CMCD-Suchparametern nicht befolgt wurde (#2475).
- Problem behoben, bei dem der Anpassungssatz für die Trickwiedergabe mit dem Hauptanpassungssatz zusammengeführt wurde, um eine ungültige
- RTSP-Erweiterung:
- Unterstützung für RTP-Aggregationspaket für H265 gemäß RFC 7798#4.4.2 (#2413) hinzugefügt.
RtspClientwurde korrigiert, sodass die Standort-URI wie angegeben verwendet wird, wenn eine HTTP 302-Antwort verarbeitet wird (#2398).- Unterstützung für das Parsen von SessionDescriptions mit Zeilen, die nachgestellte Leerzeichen enthalten, wurde hinzugefügt (#2357).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Fehler behoben, bei dem
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangekeine Auswirkungen auf Audiodecoder-Erweiterungen hatte (#2258).
- Fehler behoben, bei dem
- Cast-Erweiterung:
- Testdienstprogramme:
- Fügen Sie
advance(player).untilPositionAtLeastunduntilMediaItemIndexzuTestPlayerRunHelperhinzu, um den Player bis zu einer bestimmten Position vorzuspulen. 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 Codecnamen durch „media3“ ersetzt.
- Fügen Sie
- Entfernen Sie nicht mehr unterstützte Symbole:
- Der verworfene
SegmentDownloader-KonstruktorSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)und die entsprechenden Konstruktoren in den zugehörigen UnterklassenDashDownloader,HlsDownloaderundSsDownloaderwurden entfernt. - Die veralteten Elemente
Player.hasNext()undPlayer.hasNextWindow()wurden entfernt. Verwenden Sie stattdessenPlayer.hasNextMediaItem(). - Verworfenes
Player.next()entfernt. Verwenden Sie stattdessenPlayer.seekToNextMediaItem(). - Verworfenes
Player.seekToPreviousWindow()entfernt. Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem(). - Verworfenes
Player.seekToNextWindow()entfernt. Verwenden Sie stattdessenPlayer.seekToNextMediaItem(). - Veraltete
BaseAudioProcessorim Modulexoplayerentfernt. Verwenden SieBaseAudioProcessorim Modulcommon. - Der verworfene
MediaCodecVideoRenderer-KonstruktorMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)wurde entfernt.
- Der verworfene
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, die eine Alpha-Version war, die versehentlich als stabil gekennzeichnet wurde (siehe unten).
Version 1.7.0
16. Mai 2025
Diese Version hätte 1.7.0-alpha01 sein sollen, wurde aber versehentlich auf maven.google. com als 1.7.0 (d.h.stabil) gekennzeichnet. Bitte verwenden Sie sie nicht. Bleiben Sie bei 1.6.1 oder führen Sie ein Upgrade auf 1.7.1 durch (mit demselben Code wie 1.6.1).
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 Bibliothek:
- Methode
PlaybackParameters.withPitch(float)hinzugefügt, um einPlaybackParametersmit einem neuenpitch-Wert einfach zu kopieren (#2257).
- Methode
- ExoPlayer:
- Problem behoben, bei dem der Übergang zwischen Mediendateien aufgrund eines behebbaren Renderer-Fehlers während der Initialisierung der nächsten Mediendatei fehlschlägt (#2229).
- Problem behoben, bei dem
ProgressiveMediaPeriodeineIllegalStateExceptionauslöst, daPreloadMediaSourceversucht, diegetBufferedDurationUs()aufzurufen, bevor sie vorbereitet ist (#2315). - Fehler beim Senden von
CmcdDatain Manifestanfragen für DASH, HLS und SmoothStreaming behoben (#2253). - Achten Sie darauf, dass
AdPlaybackState.withAdDurationsUs(long[][])nach dem Entfernen von Anzeigengruppen verwendet werden kann. Der Nutzer muss weiterhin ein Array von Dauern für entfernte Anzeigengruppen übergeben, das leer oder null sein kann (#2267).
- Extraktoren:
- MP4:
alternate_groupaus dertkhd-Box parsen und alsMp4AlternateGroupData-Eintrag in derFormat.metadatajedes Tracks verfügbar machen (#2242).
- MP4:
- Audio:
- Problem mit der Auslagerung behoben, bei dem die Position beim Abspielen einer Playlist mit kurzen Inhalten hängen bleiben konnte (#1920).
- Sitzung:
- Das Zeitlimit für die Aggregation von
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. - Problem behoben, bei dem Benachrichtigungen wieder angezeigt wurden, nachdem sie vom Nutzer geschlossen wurden (#2302).
- Ein Fehler wurde behoben, bei dem die Sitzung eine Zeitachse mit einem einzelnen Element zurückgab, obwohl der umschlossene Player tatsächlich leer war. Dies ist aufgetreten, wenn der umschlossene Player
COMMAND_GET_TIMELINEnicht verfügbar hat, währendCOMMAND_GET_CURRENT_MEDIA_ITEMverfügbar ist und der umschlossene 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 Zeitlimit für die Aggregation von
- UI:
- Aktivieren Sie
PlayerSurface, um mitExoPlayer.setVideoEffectsundCompositionPlayerzu arbeiten. - Fehler behoben, bei dem
PlayerSurfacenicht mit einem neuenPlayerneu zusammengesetzt werden kann.
- Aktivieren Sie
- HLS-Erweiterung:
- Problem behoben, bei dem die Blockdauer in
CmcdDatafür HLS-Medien nicht festgelegt wurde, was zu einem Assertionsfehler bei der Verarbeitung verschlüsselter Mediensegmente führte (#2312).
- Problem behoben, bei dem die Blockdauer in
- RTSP-Erweiterung:
- Unterstützung für URI mit RTSPT-Schema hinzugefügt, um die RTSP-Sitzung für die Verwendung von TCP zu konfigurieren (#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 Bibliothek:
- Fügen Sie
AudioManagerCompatundAudioFocusRequestCompathinzu, um die entsprechenden Klassen inandroidx.mediazu ersetzen. - Kotlin von 1.9.20 auf 2.0.20 aktualisieren und das Compose Compiler Gradle-Plug-in verwenden. Upgrade der KotlinX Coroutines-Bibliothek von 1.8.1 auf 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 auswertet (#1940). - Der Zugriff auf
SimpleBasePlayer.Statewurde von „protected“ in „public“ geändert, um die Verarbeitung von Updates in anderen Klassen zu vereinfachen (#2128).
- Fügen Sie
- ExoPlayer:
MediaExtractorCompatwurde hinzugefügt, eine neue Klasse, die ähnliche Funktionen wie die Plattform-MediaExtractorbietet.- Experimentelle Unterstützung für das Vorwärmen von „ExoPlayer“ für die Wiedergabe mit
MediaCodecVideoRendererhinzugefügt. Sie könnenDefaultRenderersFactoryüberexperimentalSetEnableMediaCodecVideoRendererPrewarmingkonfigurieren, umExoPlayereine sekundäreMediaCodecVideoRendererbereitzustellen. Wenn diese Option aktiviert ist, verarbeitetExoPlayerdas Video aufeinanderfolgender Mediendateien während der Wiedergabe vor, um die Latenz beim Übergang zwischen Mediendateien zu reduzieren. - Reduzieren Sie die Standardwerte für
bufferForPlaybackMsundbufferForPlaybackAfterRebufferMsinDefaultLoadControlauf 1.000 bzw. 2.000 ms. DeviceInfound die Gerätelautstärke werden asynchron initialisiert (wenn sie mitsetDeviceVolumeControlEnabledaktiviert wurden). Diese Werte sind nicht sofort nachExoPlayer.Builder.build()verfügbar.Player.Listenerbenachrichtigt über Änderungen überonDeviceInfoChangedundonDeviceVolumeChanged.- Die ursprüngliche Audiositzungs-ID ist nach dem Erstellen des Players nicht mehr sofort verfügbar. Mit
AnalyticsListener.onAudioSessionIdChangedkönnen Sie sich bei Bedarf das erste Update anhören. - Berücksichtigen Sie bei der Auswahl eines Videotracks die Sprache. Wähle standardmäßig einen „Haupt“-Videotrack aus, der der Sprache des ausgewählten Audiotracks entspricht, falls verfügbar. Explizite Spracheinstellungen für Videos 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. - Fehler behoben, bei dem Playlist-Elemente oder Zeiträume in DASH-Streams mit mehreren Zeiträumen, deren Dauer nicht mit dem tatsächlichen Inhalt übereinstimmt, am Ende des Elements zu eingefrorenen Frames führen konnten (#1698).
- Verschieben Sie
BasePreloadManager.Listenerauf einePreloadManagerListenerder obersten Ebene. RenderersFactory.createSecondaryRendererkann implementiert werden, um sekundäre Renderer für das Vorwärmen bereitzustellen. Das Vorwärmen ermöglicht schnellere Übergänge zwischen Mediendateien während der Wiedergabe.- Senden von
CmcdDatafür Manifestanfragen in den adaptiven Streamingformaten DASH, HLS und SmoothStreaming aktivieren (#1951). - Geben Sie
MediaCodecInfodes Codecs an, der inMediaCodecRenderer.onReadyToInitializeCodecinitialisiert wird (#1963). - Ändern Sie
AdsMediaSource, damit dieAdPlaybackStatesdurch Anhängen von Anzeigengruppen vergrößert werden kann. Ungültige Änderungen werden erkannt und lösen eine Ausnahme aus. - Ein Problem wurde behoben, bei dem nach einer Mid-Roll-Anzeige beim Übergang zu Content-Medien zusätzliche Nur-Decodierungs-Frames in schneller Folge angezeigt werden konnten.
- Lassen Sie
DefaultRenderersFactoryzweiMetadataRenderer-Instanzen hinzufügen, damit Anwendungen standardmäßig zwei verschiedene Metadatenschemas empfangen können. - Es wird neu bewertet, ob das laufende Laden eines Blocks abgebrochen werden soll, wenn die Wiedergabe pausiert wird (#1785).
- Option zu
ClippingMediaSourcehinzugefügt, um das Ausschneiden in nicht suchbaren Medien zu ermöglichen. - Fehler behoben, bei dem das Suchen mit Vorwärmen den Übergang zum folgenden Medienelement blockieren konnte.
- Fehler behoben, bei dem
ExoPlayer.isLoading()weiterhintrueist, obwohl es zuSTATE_IDLEoderSTATE_ENDEDübergegangen ist (#2133). lastRebufferRealtimeMszuLoadControl.Parameterhinzugefügt (#2113).
- Transformer:
- Unterstützung für das Transmuxing in alternative abwärtskompatible Formate hinzufügen.
- Unterstützung für das Transcodieren und Transmuxen des Dolby Vision-Formats (Profil 8) hinzugefügt.
- Aktualisieren Sie die Parameter von
VideoFrameProcessor.registerInputStreamundVideoFrameProcessor.Listener.onInputStreamRegistered, umFormatzu verwenden. - Generieren Sie statische HDR-Metadaten, wenn Sie
DefaultEncoderFactoryverwenden. - Unterstützung für die Android-Plattformdiagnose mit
MediaMetricsManageraktivieren. Transformer leitet Bearbeitungsereignisse und Leistungsdaten an die Plattform weiter, um Systemleistungs- und Debugging-Informationen auf dem Gerät bereitzustellen. Diese Daten können auch von Google erhoben werden, wenn die Weitergabe von Nutzungs- und Diagnosedaten vom Nutzer des Geräts aktiviert wurde. Apps können die Bereitstellung von Daten für die Plattformdiagnose für Transformer mitTransformer.Builder.setUsePlatformDiagnostics(false)deaktivieren. InAppMuxerinInAppMp4MuxerundInAppFragmentedMp4Muxeraufteilen. MitInAppMp4Muxerwird eine nicht fragmentierte MP4-Datei erstellt, während mitInAppFragmentedMp4Muxereine fragmentierte MP4-Datei erstellt wird.- Schnittstelle
Muxervonmedia3-muxernachmedia3-transformerverschieben. - 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()zur SchnittstelleCodechinzu. - Übertragen Sie die Verantwortung für die Freigabe von
GlObjectsProvidernach Möglichkeit auf den Aufrufer inDefaultVideoFrameProcessorundDefaultVideoCompositor.
- Extraktoren:
- AVI: Die Verarbeitung von Dateien mit komprimiertem Audio mit konstanter Bitrate wurde korrigiert, bei denen im Stream-Header die Anzahl der Byte anstelle der Anzahl der Chunks gespeichert ist.
- Die Verarbeitung von NAL-Einheiten mit Längen, die in 1 oder 2 Byte (statt 4) ausgedrückt werden, wurde korrigiert.
- Fehler
ArrayIndexOutOfBoundsExceptionin MP4-Bearbeitungslisten behoben, wenn die Bearbeitungsliste bei 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 nicht mit
IllegalStateException: Playback stuck buffering and not loadingwiedergegeben werden (#2197).
- Audio:
onAudioPositionAdvancingwird jetzt aufgerufen, wenn die Wiedergabe fortgesetzt wird (zuvor wurde es aufgerufen, wenn die Wiedergabe pausiert wurde).- Umgehen Sie
SonicAudioProcessornicht, wennSpeedChangingAudioProcessormit Standardparametern konfiguriert ist. - Unterlauf in
Sonic#getOutputSize()behoben, der dazu führen konnte, dassDefaultAudioSinkhängen blieb. - Korrigiere
MediaCodecAudioRenderer.getDurationToProgressUs()undDecoderAudioRenderer.getDurationToProgressUs(), damit die angegebenen Dauern beim Suchen korrekt zurückgesetzt werden. androidx.media3.common.audio.SonicAudioProcessorals endgültig festlegen.- Unterstützung für Float-PCM zu
ChannelMappingAudioProcessorundTrimmingAudioProcessorhinzugefügt.
- Video:
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacewurde in „protected“ geändert, damit Anwendungen die Verwendung von Platzhalteroberflächen blockieren können (#1905).- Experimentelles Parsen von
ExoPlayer-AV1-Beispielabhängigkeiten hinzugefügt, um die Suche zu beschleunigen. Aktivieren Sie sie mit der neuenDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI. - Experimentelle
ExoPlayerAPI hinzugefügt, um verspäteteMediaCodecVideoRenderer-Decoder-Eingabepuffer zu verwerfen, von denen keine Abhängigkeiten bestehen. Aktivieren Sie sie mitDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * Problem behoben, bei dem ein Player ohne Oberfläche sofort bereit war und ausstehende Frames sehr langsam decodiert wurden (#1973). - Xiaomi- und OPPO-Geräte vom Modus für getrennte Oberflächen ausschließen, um Bildschirmflackern zu vermeiden (#2059).
- Text:
- Unterstützung für VobSub-Untertitel hinzugefügt (#8260).
- Es werden nicht mehr alle mit
MediaItem.Builder.setSubtitleConfigurationskonfigurierten Untertiteldateien vorab geladen, sondern nur noch eine, wenn sie über die Trackauswahl ausgewählt wird (#1721). - TTML: Unterstützung für das Verweisen auf
tts:originundtts:extentmitstylehinzugefügt (#2953). - Beschränken Sie WebVTT- und SubRip-Zeitstempel auf genau drei Dezimalstellen. Zuvor haben wir eine beliebige Anzahl von Dezimalstellen fälschlicherweise geparst, aber immer angenommen, dass der Wert in Millisekunden angegeben ist, was zu falschen Zeitstempeln geführt hat (#1997).
- Es wurde ein Problem behoben, bei dem die Wiedergabe hängen blieb, wenn eine Playlist gekürzte Elemente mit CEA-608- oder CEA-708-Untertiteln enthielt.
- Fehler
IllegalStateExceptionbehoben, wenn eine SSA-Datei einen Cue mit einer Dauer von null enthält (Start- und Endzeit gleich) (#2052). - Unterdrücken (und protokollieren) von Fehlern beim Parsen von Untertiteln, wenn Untertitel in denselben Container wie Audio und Video gemuxt werden (#2052).
- Die Verarbeitung von Multibyte-UTF-8-Zeichen in WebVTT-Dateien mit CR-Zeilenenden wurde korrigiert (#2167).
- DRM:
- Fehler
MediaCodec$CryptoException: Operation not supported in this configurationbei der Wiedergabe von ClearKey-Inhalten auf Geräten mit API < 27 behoben (#1732).
- Fehler
- Auswirkung:
- Die Funktionalität von
OverlaySettingswurde inStaticOverlaySettingsverschoben.OverlaySettingskann abgeleitet werden, um dynamische Overlay-Einstellungen zu ermöglichen.
- Die Funktionalität von
- Muxer:
MuxerExceptionwurde aus derMuxer-Schnittstelle verschoben, 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 erzeugt, wenn nur ein Audiotrack geschrieben wird.
- Sitzung:
- Der Status des Dienstes im Vordergrund wird für weitere 10 Minuten beibehalten, wenn die Wiedergabe pausiert, beendet oder abgebrochen wird. So können Nutzer die Wiedergabe innerhalb dieses Zeitlimits fortsetzen, ohne dass auf verschiedenen Geräten Einschränkungen für Vordergrunddienste drohen. Beachten Sie, dass der Dienst im Vordergrund nicht mehr nur durch Aufrufen von
player.pause()vorstopSelf()beendet werden kann. Wenn SieonTaskRemovedüberschreiben, verwenden Sie stattdessenMediaSessionService.pauseAllPlayersAndStopSelf(). - Die Benachrichtigung bleibt sichtbar, wenn die Wiedergabe in einen Fehler- oder Beendigungszustand 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, sodass nur eine davon gemäß den verfügbaren Befehlen festgelegt wird und auch akzeptiert wird, wenn nur eine davon festgelegt ist.
Contextals Parameter zuMediaButtonReceiver.shouldStartForegroundServicehinzugefügt (#1887).- Fehler behoben, bei dem durch den Aufruf einer
Player-Methode für eineMediaController, die mit einer Legacy-Sitzung verbunden ist, Änderungen aus einem ausstehenden Update verworfen wurden. MediaSession.setSessionActivity(PendingIntent)akzeptiert jetzt Nullwerte (#2109).- Fehler behoben, bei dem eine veraltete Benachrichtigung sichtbar blieb, wenn die Playlist gelöscht wurde (#2211).
- Der Status des Dienstes im Vordergrund wird für weitere 10 Minuten beibehalten, wenn die Wiedergabe pausiert, beendet oder abgebrochen wird. So können Nutzer die Wiedergabe innerhalb dieses Zeitlimits fortsetzen, ohne dass auf verschiedenen Geräten Einschränkungen für Vordergrunddienste drohen. Beachten Sie, dass der Dienst im Vordergrund nicht mehr nur durch Aufrufen von
- UI:
- Fügen Sie dem Modul
media3-ui-composeState Holder und Composables fürPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateundPlaybackSpeedStatehinzu.
- Fügen Sie dem Modul
- Downloads:
- Fehler in
CacheWriterbehoben, der dazu führt, dass Datenquellen geöffnet bleiben und Cachebereiche gesperrt werden, wenn die Datenquelle eine andereExceptionalsIOExceptionausgibt (#9760).
- Fehler in
- HLS-Erweiterung:
- Fügen Sie eine erste Version von
HlsInterstitialsAdsLoaderhinzu. Der Anzeigen-Loader liest die HLS-Interstitials einer HLS-Medien-Playlist und ordnet sie demAdPlaybackStatezu, der an denAdsMediaSourceü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 einenHlsInterstitialsAdsLoaderauf bequeme und sichere Weise verwenden. SUPPLEMENTAL-CODECS-Tag aus der HLS-Playlist parsen, 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 Level-4-Format für DASH hinzugefügt (#1898).
- Problem bei der Berechnung des Aktualisierungsintervalls für das Einfügen von Anzeigen in Livestreams mit mehreren Zeiträumen behoben (#1698).
- Das Attribut
scte214:supplementalCodecsaus dem DASH-Manifest parsen, um Dolby Vision-Formate zu erkennen (#1785). - Verbesserte Verarbeitung von Periodenübergängen in Livestreams, bei denen die Periode Medien-Samples enthält, die über die deklarierte Periodendauer hinausgehen (#1698).
- Ein Problem wurde behoben, bei dem Adaptionssets, die mit
adaptation-set-switching, aber unterschiedlichen Sprachen oder Rollen-Flags gekennzeichnet sind, zusammengeführt werden (#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:
- Die Abhängigkeit
play-services-cast-frameworkwurde auf 21.5.0 erhöht, um einenFLAG_MUTABLE-Absturz in Apps zu beheben, die auf API 34 oder höher auf Geräten mit installierten, aber deaktivierten Google Play-Diensten ausgerichtet sind (#2178).
- Die Abhängigkeit
- Demo-App:
demo-composewird um zusätzliche Tasten erweitert und die Integration vonPlayerSurfacewird durch Skalierung und Unterstützung für Rollläden verbessert.
- Entfernen Sie nicht mehr unterstützte Symbole:
- Entfernen Sie die eingestellte Methode
AudioMixer.create(). Verwenden Sie stattdessenDefaultAudioMixer.Factory().create(). - Entfernen Sie die folgenden verworfenen
Transformer.Builder-Methoden:- Verwenden Sie stattdessen
setTransformationRequest(),setAudioMimeType(),setVideoMimeType()undsetHdrMode(). setAudioProcessors(): Legen Sie den Audioprozessor in einemEditedMediaItem.Builder.setEffects()fest und übergeben Sie ihn stattdessen anTransformer.start().- Legen Sie stattdessen den Videoeffekt in einem
EditedMediaItem.Builder.setEffects()mitsetVideoEffects()fest und übergeben Sie ihn anTransformer.start(). setRemoveAudio(), verwenden Sie stattdessenEditedMediaItem.Builder.setRemoveAudio(), um die Audioinhalte aus dem anTransformer.start()übergebenenEditedMediaItemzu entfernen.setRemoveVideo(), verwende stattdessenEditedMediaItem.Builder.setRemoveVideo(), um das Video aus demEditedMediaItemzu entfernen, das anTransformer.start()übergeben wurde.setFlattenForSlowMotion(): Verwenden Sie stattdessenEditedMediaItem.Builder.setFlattenForSlowMotion(), um die anTransformer.start()übergebeneEditedMediaItemzu vereinfachen.setListener(), verwenden Sie stattdessenaddListener(),removeListener()oderremoveAllListeners().
- Verwenden Sie stattdessen
- Entfernen Sie die folgenden verworfenen
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), verwende stattdessenonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), verwende stattdessenonFallbackApplied(Composition, TransformationRequest, TransformationRequest).
- Entfernen Sie die verworfene Klasse
TransformationResult. Verwenden Sie stattdessenExportResult. - Entfernen Sie die verworfene Klasse
TransformationException. Verwenden Sie stattdessenExportException. - Entfernen Sie die verworfene
Transformer.PROGRESS_STATE_NO_TRANSFORMATION. Verwenden Sie stattdessenTransformer.PROGRESS_STATE_NOT_STARTED. - Entfernen Sie die verworfene
Transformer.setListener(). Verwenden Sie stattdessenTransformer.addListener(),Transformer.removeListener()oderTransformer.removeAllListeners(). - Entfernen Sie die verworfene
Transformer.startTransformation(). Verwenden Sie stattdessenTransformer.start(MediaItem, String). - Entfernen Sie die verworfene
SingleFrameGlShaderProgram. Verwenden Sie stattdessenBaseGlShaderProgram. Transformer.flattenForSlowMotionentfernen. Verwenden Sie stattdessenEditedMediaItem.flattenForSlowMotion.ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentundExoPlayer.DeviceComponentwurden entfernt.androidx.media3.exoplayer.audio.SonicAudioProcessorwurde entfernt.- Die folgenden verworfenen
DownloadHelper-Methoden wurden entfernt:- Konstruktor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), verwenden Sie stattdessenDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). getRendererCapabilities(RenderersFactory): Eine entsprechende Funktionalität kann durch Erstellen einesDefaultRendererCapabilitiesListmit einemRenderersFactoryund Aufrufen vonDefaultRendererCapabilitiesList.getRendererCapabilities()erreicht werden.- Methode
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)entfernt. Verwenden Sie stattdessenPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)und übergeben Sie(MediaSession.Token) compatToken.getToken().
- Konstruktor
- Entfernen Sie die eingestellte Methode
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:
- Die Verwendung der asynchronen Entschlüsselung in MediaCodec wurde deaktiviert, um gemeldete Probleme mit Codec-Zeitüberschreitungen bei dieser Plattform-API zu vermeiden (#1641).
- Extraktoren:
- MP3: Die Wiedergabe wird nicht vorzeitig beendet, wenn das Inhaltsverzeichnis eines
VBRI-Frames nicht alle MP3-Daten in einer Datei abdeckt (#1904).
- MP3: Die Wiedergabe wird nicht vorzeitig beendet, wenn das Inhaltsverzeichnis eines
- Video:
- Rollback der Verwendung von
MediaCodecAdapterbereitgestellten Pixel-Seitenverhältniswerten, wenn diese bei der Verarbeitung vononOutputFormatChangedangegeben werden (#1371).
- Rollback der Verwendung von
- Text:
- Fehler in
ReplacingCuesResolver.discardCuesBeforeTimeUsbehoben, bei dem der beitimeUsaktive Cue (vorher gestartet, aber noch nicht beendet) fälschlicherweise verworfen wurde (#1939).
- Fehler in
- Metadaten:
- Extrahiert die Disc-/Titelnummerierung und das Genre aus Vorbis-Kommentaren in
MediaMetadata(#1958).
- Extrahiert die Disc-/Titelnummerierung und das Genre 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 Bibliothek:
ForwardingSimpleBasePlayerhinzugefügt, um die Weiterleitung an einen anderen Player mit kleinen Anpassungen zu ermöglichen und gleichzeitig für vollständige Konsistenz und Listener-Verarbeitung zu sorgen (#1183).- Ersetzen Sie
SimpleBasePlayer.State.playlistdurch die MethodegetPlaylist(). - Fügen Sie eine Überschreibung für
SimpleBasePlayer.State.Builder.setPlaylist()hinzu, um direkt einenTimelineund die aktuellenTracksundMetadataanzugeben, anstatt eine Playlist-Struktur zu erstellen. - Erhöhen Sie
minSdkauf 21 (Android Lollipop). Dies entspricht allen anderen AndroidX-Bibliotheken. - Fügen Sie das Artefakt
androidx.media3:media3-common-ktxhinzu, das Kotlin-spezifische Funktionen bietet, die auf der Common-Bibliothek basieren. - Fügen Sie die aussetzende Erweiterungsfunktion
Player.listenhinzu, um eine Koroutine zu starten, die aufPlayer.Eventsin dermedia3-common-ktx-Bibliothek wartet. - Entfernen Sie
@DoNotInline-Annotationen aus manuell ausgelagerten inneren Klassen, die dazu dienen, Fehler bei der Laufzeitklassenprüfung zu vermeiden. In aktuellen Versionen von R8 werden solche Aufrufe jetzt automatisch ausgelagert, um Laufzeitfehler zu vermeiden. Eine manuelle Auslagerung ist also nicht mehr erforderlich. Alle Gradle-Nutzer der Bibliothek müssen bereits eine Version des Android-Gradle-Plug-ins verwenden, die eine Version von R8 verwendet, die dies tut, aufgrund voncompileSdk = 35. Nutzer der Bibliothek mit Build-Systemen, die nicht auf Gradle basieren, müssen dafür sorgen, dass der R8-äquivalente Schritt zur Verkleinerung/Verschleierung einen ähnlichen automatischen Out-of-Lining-Prozess durchführt, um Fehler bei der Klassenüberprüfung zur Laufzeit zu vermeiden. Diese Änderung wurde bereits in anderen AndroidX-Bibliotheken vorgenommen.
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()kann jetzt für jede Mediendatei aufgerufen werden. Bisher wurde sie für die erste nicht aufgerufen. Verwenden SieMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart(), um dies 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 Vorablade-Ereignisse an Apps weiterzugeben. - Änderung des SNTP-Client-Timeouts und Wiederholung alternativer Adressen bei Timeout zulassen (#1540).
- Entfernen Sie
MediaCodecAdapter.Configuration.flags, da das Feld immer null war. - Nutzer können den integrierten Lautsprecher für die Wiedergabe auf Wear OS API 35+ auswählen (sofern das Gerät dies unterstützt).
- Verschieben Sie den blockierenden Aufruf von
Context.getSystemService(Context.AUDIO_SERVICE), bis die Verarbeitung des Audiofokus aktiviert ist. Dadurch wird sichergestellt, dass der blockierende Aufruf nicht ausgeführt wird, wenn die Verarbeitung des Audiofokus nicht aktiviert ist (#1616). - Wiedergabe unabhängig von der zwischengespeicherten Dauer zulassen, wenn das Laden fehlschlägt (#1571).
- Füge
AnalyticsListener.onRendererReadyChanged()hinzu, um zu signalisieren, wann einzelne Renderer die Wiedergabe erlauben. - Es wurde ein Problem behoben, bei dem
MediaCodec.CryptoExceptionmanchmal als „unerwarteter Laufzeitfehler“ gemeldet wurde, wennMediaCodecim asynchronen Modus ausgeführt wurde (Standardverhalten bei API 31+). - Ü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 einen Wert übergeben, der eine bestimmte Dauer ab der Standardstartposition darstellt, für die die entsprechende Medienquelle mit diesem IntDef vorab geladen werden muss, anstatt einer Position. ForwardingRenderer-Implementierung hinzugefügt, die alle Methodenaufrufe an einen anderen Renderer weiterleitet (1703).- Vorabladen der Playlist für das nächste Element in der Playlist hinzufügen. Apps können das Vorabladen aktivieren, indem sie
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)entsprechend aufrufen. Standardmäßig ist das Vorabladen deaktiviert. Wenn die Option aktiviert ist, wird das Vorabladen auf den Start beschränkt und nur fortgesetzt, wenn der Player nicht für die Wiedergabe lädt, um die Wiedergabe nicht zu beeinträchtigen.DefaultLoadControlApps können dieses Verhalten ändern, indem sieLoadControl.shouldContinuePreloading()entsprechend implementieren (z. B. wenn diese Methode inDefaultLoadControlüberschrieben wird). Die Standardimplementierung vonLoadControldeaktiviert das Vorabladen, wenn eine App eine benutzerdefinierte Implementierung vonLoadControlverwendet. - Methode
MediaSourceEventListener.EventDispatcher.dispatchEvent()hinzugefügt, um das Aufrufen von Ereignissen von Unterklassen-Listenern zu ermöglichen (1736). - Fügen Sie
DefaultPreloadManager.Builderhinzu, um die InstanzenDefaultPreloadManagerundExoPlayermit einheitlichen freigegebenen Konfigurationen zu erstellen. - Entferne den Parameter
Renderer[]ausLoadControl.onTracksSelected(), da die Implementierung vonDefaultLoadControldie Streamtypen ausExoTrackSelection[]abrufen kann. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])wurde verworfen und die Methode wurde als „final“ markiert, um Überschreibungen zu verhindern. Stattdessen sollte das neueDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])verwendet werden.MediaSourceEventListener-Ereignisse aus sekundären Quellen inMergingMediaSourcemelden. Dies führt dazu, dass für per Sideloading geladene Untertitel (die mitMediaItem.LocalConfiguration.subtitleConfigurationshinzugefügt wurden) Ereignisse für das Starten, Fehler, Abbrechen und Abschließen des Ladevorgangs gemeldet werden. Diese können als doppelte Ladeereignisse vonAnalyticsListenerangezeigt werden.- Verhindern, dass Untertitel- und Metadatenfehler die Wiedergabe vollständig stoppen.
Stattdessen wird der problematische Track deaktiviert und die Wiedergabe der verbleibenden Tracks wird fortgesetzt (#1722).
- Bei der neuen Untertitelverarbeitung (während der Extraktion) werden zugehörige Parsing-Fehler (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über
onLoadError-Callbacks ausgegeben. - Bei der alten Untertitelverarbeitung (während des Renderings) 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 Parsing-Fehler (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über
- Fehler behoben, bei dem Playlist-Elemente oder Zeiträume in DASH-Streams mit mehreren Zeiträumen, deren Dauer nicht mit dem tatsächlichen Inhalt übereinstimmt, am Ende des Elements zu eingefrorenen Frames führen konnten (#1698).
SntpClientwurde ein Setter hinzugefügt, 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 Warteschlange für Transformer über einSurfaceunterstützt. ImageAssetLoadermeldet nicht unterstützte Eingaben überAssetLoader.onError, anstatt eineIllegalStateExceptionauszugeben.- Die Festlegung der Bilddauer mit
MediaItem.Builder.setImageDurationMsfür den Bildexport obligatorisch machen. - Unterstützung für den Export von Lücken in Sequenzen von Audio-EditedMediaItems hinzugefügt
- Füge
- Trackauswahl:
DefaultTrackSelector: Objektbasiertes Audio wird gegenüber kanalbasierter Audio bevorzugt, wenn andere Faktoren gleich sind.
- Extraktoren:
- Ermöglicht
Mp4ExtractorundFragmentedMp4Extractor, H264-Samples zu identifizieren, die von nachfolgenden Samples nicht als Referenz verwendet werden. - Option zum Aktivieren der indexbasierten Suche in
AmrExtractorhinzugefügt. - MP3-Dateien mit mehr als 128 KB zwischen gültigen Frames werden als abgeschnitten (statt als ungültig) behandelt. Das bedeutet, dass die Wiedergabe von Dateien mit Nicht-MP3-Daten am Ende, die keine anderen Metadaten zur Angabe der Länge der MP3-Bytes enthalten, jetzt am Ende der MP3-Daten beendet wird, anstatt mit
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}fehlzuschlagen (#1563). - Fehlerbehebung bei der Verarbeitung von Preroll-Beispielen für Medienstartpositionen, die keine Keyframes sind, wenn Bearbeitungslisten in MP4-Dateien verarbeitet werden (#1659).
- Verbesserte Berechnung der Framerate durch Verwendung der Mediendauer aus der
mdhd-Box inMp4ExtractorundFragmentedMp4Extractor(#1531). - Falsche Skalierung von
media_timein MP4-Bearbeitungslisten wurde korrigiert. Währendsegment_durationbereits korrekt mit der Zeitskala des Films skaliert wurde, wirdmedia_timejetzt ordnungsgemäß mit der Zeitskala des Tracks skaliert, wie im MP4-Formatstandard angegeben (#1792). - Nicht sequenzielle Frames bei der
endIndices-Berechnung für MP4 mit Bearbeitungsliste verarbeiten (#1797). - Fehler beim Parsen der Mediendauer im
mdhd-Feld von MP4-Dateien behoben, um-1-Werte zu verarbeiten (#1819). - Unterstützung für die Identifizierung der
h263-Box in MP4-Dateien für H.263-Videos hinzugefügt (#1821). - Unterstützung für das ISO-Basismediendateiformat AC-4 Level-4 hinzugefügt (#1265).
- Ermöglicht
- DataSource:
HttpEngineDataSourcewurde aktualisiert, um die Verwendung ab Version S, Erweiterung 7, anstelle von API-Level 34 zu ermöglichen (#1262).DataSourceContractTest: Bestätigen Sie, dassDataSource.getUri()den aufgelösten URI zurückgibt (wie dokumentiert). Wenn sich dieser vom angeforderten URI unterscheidet, können Tests dies mit der neuen MethodeDataSourceContractTest.TestResource.Builder.setResolvedUri()angeben.DataSourceContractTest: Prüfen, obDataSource.getUri()undgetResponseHeaders()nach einem fehlgeschlagenen Aufruf vonopen()(aufgrund einer nicht gefundenen Ressource) und vor einem nachfolgenden Aufruf vonclose()den Wert „open“ zurückgeben.- Durch das Ü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 das Überschreiben von
- Audio:
- Automatische Konfiguration von CTA-2075-Lautstärkemetadaten im Codec, falls in den Medien vorhanden.
- Achte darauf, dass die Lautstärke beim Suchen gleichmäßig abnimmt.
- Behebung von Knackgeräuschen, die beim Suchen auftreten können.
- Fehler bei der Akkumulation von Kürzungen für den Algorithmus zur Zeitdehnung/Tonhöhenverschiebung von Sonic behoben.
- Fehler in
SpeedChangingAudioProcessorbehoben, der dazu führte, dass Ausgabeframes verloren gingen.
- Video:
MediaCodecVideoRenderervermeidet das Decodieren von Samples, die weder gerendert noch von anderen Samples als Referenz verwendet werden.- Ab API 35 kann
MediaCodecAdapterjetzt einnullSurfaceinconfigureempfangen und Aufrufe einer neuen MethodedetachOutputSurface, um ein zuvor festgelegtesSurfacezu entfernen, wenn der Codec dies unterstützt (MediaCodecInfo.detachedSurfaceSupported). - Verwenden Sie die von
MediaCodecAdapterbereitgestellten Werte für das Pixel-Seitenverhältnis, wenn diese bei der Verarbeitung vononOutputFormatChangedangegeben werden (#1371). - 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).
- Problemumgehung für Codecs hinzugefügt, die nach dem letzten Sample hängen bleiben, ohne ein Signal für das Ende des Streams zurückzugeben.
- Text:
- Benutzerdefiniertes
VoiceSpanhinzufügen und für WebVTT-Sprachspannen ausfüllen (#1632). - 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) werden angezeigt (#1763). - Unterstützung von CEA-608-Untertiteln in Dolby Vision-Inhalten (#1820).
- Behebung eines Problems, bei dem die Wiedergabe bei DASH-Multi-Period-Streams hängen blieb, wenn CEA-608-Untertitel aktiviert waren (#1863).
- Benutzerdefiniertes
- Metadaten:
- Weise den Typ
C.TRACK_TYPE_METADATATracks zu, die icy- oder vnd.dvb.ait-Inhalte enthalten.
- Weise den Typ
- Bild:
- Fügen Sie
ExternallyLoadedImageDecoderhinzu, um die Einbindung in externe Bibliotheken zum Laden von Bildern wie Glide oder Coil zu vereinfachen.
- Fügen Sie
- DataSource:
FileDescriptorDataSourcehinzugefügt, ein neuesDataSource, das zum Lesen aus einemFileDescriptorverwendet werden kann (#3757).
- Auswirkung:
DefaultVideoFrameProcessor-Problemumgehung für geringfügigeSurfaceTexture-Skalierung hinzugefügt.SurfaceTexturekann eine kleine Skalierung enthalten, die einen 1-Texel-Rand um den Rand eines zugeschnittenen Buffers abschneidet. Dies wird jetzt so gehandhabt, dass die Ausgabe näher am Erwarteten liegt.DefaultVideoFrameProcessor.queueInputBitmap()beschleunigen. Daher ist der Export von Bildern in Videos mitTransformerschneller.
- IMA-Erweiterung:
- Fehler behoben, bei dem das Löschen der Playlist zu einem
ArrayIndexOutOfBoundsExceptioninImaServerSideAdInsertionMediaSourceführen konnte. - Fehler behoben, bei dem serverseitig eingefügte DAI-Streams ohne Preroll-Anzeige zu einem
ArrayIndexOutOfBoundsExceptionführen können, wenn die Wiedergabe über die letzte Midroll-Anzeige hinausgeht (#1741).
- Fehler behoben, bei dem das Löschen der Playlist zu einem
- Sitzung:
- Füge
MediaButtonReceiver.shouldStartForegroundService(Intent)hinzu, damit Apps einen eingehenden Wiedergabebefehl zur Fortsetzung 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 das System den Dienst mit einemForegroundServiceDidNotStartInTimeExceptionbeendet (#1528). - Es wurde ein Fehler behoben, durch den benutzerdefinierte Befehle, die von einem
MediaBrowsergesendet wurden, an die VarianteMediaSessionCompat.Callbackstatt an die VarianteMediaBrowserServiceCompatder Methode gesendet wurden, wenn eine Verbindung zu einem Legacy-Dienst bestand. Dadurch konnte derMediaBrowsernicht den tatsächlichen Rückgabewert empfangen, der vom Legacy-Dienst zurückgesendet wurde (#1474). - Behandlung von
IllegalArgumentException, die von Geräten bestimmter Hersteller ausgelöst wird, wenn der Übertragungsempfänger für Intents von Medienschaltflächen festgelegt wird (#1730). - Fügen Sie Befehlsschaltflächen für Mediendateien hinzu. Dadurch wird die Media3 API für das hinzugefügt, was in der Legacy-Bibliothek als
Custom browse actionsmitMediaBrowserCompatbezeichnet wurde. Beachte, dass mit Media3 Befehlsschaltflächen für Medienelemente sowohl fürMediaBrowserals auch fürMediaControllerverfügbar sind. Weitere Informationen finden Sie unter Benutzerdefinierte Suchaktionen implementieren. * Fehler behoben, bei dem ein Media3-Controller manchmal nicht zulassen konnte, dass eine Sitzungs-App nach dem Anfordern vonplay()einen Dienst im Vordergrund startet. CommandButton.Builder.setIconUriso einschränken, dass nur Inhalts-URIs akzeptiert werden.- Verbindungshinweise eines Media3-Browsers an den ursprünglichen
MediaBrowserCompatübergeben, wenn eine Verbindung zu einem älterenMediaBrowserCompathergestellt wird. Der Dienst kann die Verbindungshinweise, die als Root-Hinweise übergeben werden, mit dem ersten Aufruf vononGetRoot()empfangen. - Fehler behoben, bei dem ein
MediaBrowser, der mit einem Legacy-Browserdienst verbunden war, keinen Fehler vom Dienst erhielt, nachdem der Browser einenparentidabonniert hatte. - Verbesserung des Interoperabilitätsverhaltens, sodass ein Media3-Browser, der mit einem Legacy-
MediaBrowserServiceverbunden ist, die untergeordneten Elemente einesparentIdnicht zweimal anfordert, wenn er ein übergeordnetes Element abonniert.
- Füge
- UI:
- Der Workaround für gestreckte/zugeschnittene Videos in
PlayerView-in-Compose-AndroidViewmuss aufgrund von Problemen mit XML-basierten gemeinsamen Übergängen aktiviert werden. Apps, diePlayerViewinAndroidViewverwenden, müssenPlayerView.setEnableComposeSurfaceSyncWorkaroundaufrufen, um die Funktion zu aktivieren (#1237, #1594). setFullscreenButtonStatewurde zuPlayerViewhinzugefügt, um Aktualisierungen des Symbols der Vollbildschaltfläche bei Bedarf zu ermöglichen, d.h. Out-of-Band und nicht reaktiv auf eine Klickinteraktion (#1590, #184).- Es wurde ein Fehler behoben, bei dem die Option „Keine“ in der Textauswahl nicht funktioniert, wenn es von der App definierte Einstellungen für die Auswahl von Texttracks gibt.
- Der Workaround für gestreckte/zugeschnittene Videos in
- DASH-Erweiterung:
- Unterstützung für Zeiträume hinzugefügt, die in der Mitte eines Segments beginnen (#1440).
- Smooth Streaming-Erweiterung:
- Behebung eines
Bad magic number for Bundle-Fehlers bei der Wiedergabe von SmoothStreaming-Streams mit Texttracks (#1779).
- Behebung eines
- RTSP-Erweiterung:
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Das IAMF-Decodermodul wurde hinzugefügt. Es unterstützt die Wiedergabe von MP4-Dateien mit IAMF-Tracks mithilfe der nativen libiamf-Bibliothek, um Audio zu synthetisieren.
- Die Wiedergabe ist mit einem Stereo-Layout sowie 5.1 mit Spatial Audio und optionaler Erfassung von Kopfbewegungen möglich. Die binaurale Wiedergabe wird derzeit jedoch nicht unterstützt.
- Unterstützung für 16-KB-Seiten für Decoder-Erweiterungen unter Android 15 hinzugefügt (#1685).
- Das IAMF-Decodermodul wurde hinzugefügt. Es unterstützt die Wiedergabe von MP4-Dateien mit IAMF-Tracks mithilfe der nativen libiamf-Bibliothek, um Audio zu synthetisieren.
- Cast-Erweiterung:
- Die Zeitachse wird nicht mehr bereinigt, nachdem die CastSession getrennt wurde. Dadurch kann die Sender-App die Wiedergabe nach einer Trennung lokal fortsetzen.
DeviceInfovon CastPlayer wird ausgefüllt, wenn einContextangegeben ist. Dadurch kann derMediaSessionmit einemRoutingSessionverknüpft werden, was für die Einbindung der Ausgabewechsel-Funktion erforderlich ist (#1056).
- Testdienstprogramme:
DataSourceContractTestenthält jetzt Tests zur Überprüfung von:- Eingabestream
read positionwurde aktualisiert. - Der Ausgabepuffer
offsetwird korrekt angewendet.
- Eingabestream
- Demo-App
- Speicherlecks in der Demo-App für Kurzvideos behoben (#1839).
- Entfernen Sie nicht mehr unterstützte Symbole:
- Entfernen Sie die veralteten
Player.hasPrevious,Player.hasPreviousWindow(). Verwenden Sie stattdessenPlayer.hasPreviousMediaItem(). - Entfernen Sie die eingestellte Methode
Player.previous(). Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem(). - Entfernen Sie die eingestellte Methode
DrmSessionEventListener.onDrmSessionAcquired. - Nicht mehr unterstützte
DefaultEncoderFactory-Konstruktoren wurden entfernt. Verwenden Sie stattdessenDefaultEncoderFactory.Builder.
- Entfernen Sie die veralteten
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 Fehler
Searched too many byteswurde behoben, indem nachfolgende Nicht-MP3-Daten basierend auf dem Längenfeld in einemInfo-Frame korrekt ignoriert werden (#1480).
- MP3: Der Fehler
- Text:
- TTML: Die Verarbeitung von prozentualen
tts:fontSize-Werten wurde korrigiert, damit sie korrekt von übergeordneten Knoten mit prozentualentts:fontSize-Werten übernommen werden. - Fehler
IndexOutOfBoundsExceptioninLegacySubtitleUtilbehoben, der durch die fehlerhafte Verarbeitung des Falls verursacht wurde, dass die angeforderte Startzeit der Ausgabe größer oder gleich der letzten Ereigniszeit in derSubtitleist (#1516).
- TTML: Die Verarbeitung von prozentualen
- DRM:
- Fehler
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEauf Geräten mit API 31 oder höher, die L1-Widevine-Inhalte wiedergeben, wurde behoben. Dieser Fehler wird durch eine unvollständige Implementierung der Framework-MethodeMediaDrm.requiresSecureDecoderverursacht (#1603).
- Fehler
- Auswirkung:
- Fügen Sie
GlObjectsProvidereinerelease()-Methode hinzu.
- Fügen Sie
- Sitzung:
- Doppeltippen auf
KEYCODE_HEADSETHOOKwird in die Aktion „Zum nächsten Element springen“ umgewandelt, wie dokumentiert (#1493). KEYCODE_HEADSETHOOKwird inMediaButtonReceiverals „play“-Befehl behandelt, wenn entschieden wird, ob er ignoriert werden soll, um einenForegroundServiceDidNotStartInTimeExceptionzu vermeiden (#1581).
- Doppeltippen auf
- RTSP-Erweiterung:
- Ungültige Medienbeschreibungen 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 Bibliothek:
- Leite 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. - Kompilierungsabhängigkeit von der erweiterten Entzuckerung von Java 8 entfernt (#1312).
- Achten Sie darauf, dass die an
MediaItem.Builder.setImageDurationMs()übergebene Dauer für ein Nicht-Bild-MediaItemignoriert wird (wie dokumentiert). - Fügen Sie
Format.customDatahinzu, um von der Anwendung bereitgestellte benutzerdefinierte Informationen zuFormat-Instanzen zu speichern.
- Leite mutmaßliche No-Op-Suchaufrufe an die geschützten Methoden
- ExoPlayer:
- Fügen Sie
BasePreloadManagerhinzu, um das Vorabladen für mehrere Quellen basierend auf den durch ihrerankingDatadefinierten Prioritäten zu koordinieren. Anpassungen sind durch Erweitern dieser Klasse möglich. FügeDefaultPreloadManagerhinzu, um mitPreloadMediaSourceMedienbeispiele der Quellen im Arbeitsspeicher vorab zu laden. Verwende eine GanzzahlrankingData, die den Index eines Elements auf der Benutzeroberfläche angibt. - Füge
PlayerIdzu den meisten Methoden vonLoadControlhinzu, damitLoadControl-Implementierungen mehrere Spieler unterstützen können. - Entfernen Sie
Buffer.isDecodeOnly()undC.BUFFER_FLAG_DECODE_ONLY. Dieses Flag muss nicht festgelegt werden, da Renderer und Decoder anhand des Zeitstempels entscheiden, ob Puffer übersprungen werden sollen. BenutzerdefinierteRenderer-Implementierungen sollten prüfen, ob die Pufferzeit mindestensBaseRenderer.getLastResetPositionUs()beträgt, um zu entscheiden, ob ein Sample angezeigt werden soll. BenutzerdefinierteSimpleDecoder-Implementierungen können bei BedarfisAtLeastOutputStartTimeUs()prüfen oder andere Puffer mitDecoderOutputBuffer.shouldBeSkippedmarkieren, um sie zu überspringen. - Lassen Sie zu, dass von
TargetPreloadStatusControl.getTargetPreloadStatus(T)ein Nullwert zurückgegeben wird, um anzugeben, dass einMediaSourcemit dem angegebenenrankingDatanicht vorab geladen werden soll. - Fügen Sie
remove(MediaSource)zuBasePreloadManagerhinzu. - Fügen Sie
reset()zuBasePreloadManagerhinzu, um alle Quellen im Haltezustand freizugeben, während die PreloadManager-Instanz beibehalten wird. - 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 beim Aktualisieren der letzten Rebuffer-Zeit behoben, das zu einem falschen
bs-Schlüssel (Puffer-Starvation) in CMCD führte (#1124). - Fügen Sie
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)hinzu, um anzugeben, dass die Quelle bis zum Ende geladen wurde. So können dieDefaultPreloadManager- und die benutzerdefiniertenPreloadMediaSource.PreloadControl-Implementierungen die nächste Quelle vorab laden oder andere Aktionen ausführen. - Fehler behoben, bei dem das Überspringen von Stille am Ende von Elementen eine Wiedergabeausnahme auslösen konnte.
- Fügen Sie
clearzuPreloadMediaSourcehinzu, um den Vorabladezeitraum zu verwerfen. - Neuer Fehlercode
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDhinzugefügt, der verwendet wird, wenn Codec-Ressourcen für Aufgaben mit höherer Priorität zurückgefordert werden. AdsMediaSourcekann Pre-Roll-Anzeigen laden, bevor die Vorbereitung der ersten Contentmedien abgeschlossen ist (#1358).- Ein Fehler wurde behoben, durch den die Wiedergabe auf
STATE_ENDEDverschoben wurde, 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 die CPU-Aktivierungszyklen anzupassen und die Aktivierung zu verzögern, bis die Renderer Fortschritte machen können.
Sie können dies beim Einrichten Ihrer ExoPlayer-Instanz mit
experimentalSetDynamicSchedulingEnabled()aktivieren. - Fügen Sie
Renderer.getDurationToProgressUs()hinzu. EinRendererkann diese Methode implementieren, um ExoPlayer die Dauer zurückzugeben, 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 zu benachrichtigen, wenn Eingabe- und Ausgabepuffer für die Verwendung durchMediaCodecRendererverfügbar sind.MediaCodecRenderersignalisiertExoPlayer, wenn diese Callbacks empfangen werden. WennExoPlayermitexperimentalSetDynamicSchedulingEnabled()festgelegt ist, plantExoPlayerdie Arbeitsschleife, 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. ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()wurde hinzugefügt, um die maximale Position zu konfigurieren, für dieseekToPrevious()zum vorherigen Element springt (#1425).- Einige Inkonsistenzen beim Audiofokus wurden behoben, z.B. dass der vollständige oder vorübergehende Verlust des Fokus nicht gemeldet wurde, während der Player pausiert war (#1436).
- Behebung potenzieller
IndexOutOfBoundsException, die dadurch verursacht werden, dass Extraktoren nach dem ersten Vorbereitungsschritt zusätzliche Tracks melden (#1476). EffectsinExoPlayer.setVideoEffect()erhält die Zeitstempel ohne den Renderer-Offset (#1098).- Potenzielle
IllegalArgumentExceptionbeim Umgang mit Spielerfehlern behoben, die beim Vorauslesen in ein anderes Playlist-Element aufgetreten sind (#1483).
- Fügen Sie
- Transformer:
- Fügen Sie
audioConversionProcessundvideoConversionProcesszuExportResulthinzu, um anzugeben, wie der jeweilige Track in der Ausgabedatei erstellt wurde. - Prüfungen der H.264-Stufe für die Trim-Optimierung lockern.
- Unterstützung für den Wechsel zwischen SDR- und HDR-Eingabemedien in einer Sequenz hinzugefügt.
- Unterstützung für Audioeffekte auf Kompositionsebene hinzugefügt
- Unterstützung für die Transcodierung 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 ausgibt. - Es wurde ein Decoder-Fehler behoben, bei dem die Anzahl der Audiokanäle bei der Verarbeitung von PCM-Eingaben auf Stereo beschränkt war.
- Ignorieren Sie bei der Auswahl von Tracks in
ExoPlayerAssetLoaderdie Einschränkungen für die Anzahl der Audiokanäle, da diese nur für die Wiedergabe gelten. - Ersetzen Sie die Schnittstelle
androidx.media3.transformer.Muxerdurchandroidx.media3.muxer.Muxerund entfernen Sieandroidx.media3.transformer.Muxer. - Problem beim Laden von HEIC-Bildern aus Inhalts-URI-Schemas behoben. (#1373).
- Passe die Dauer des Audiotracks in
AudioGraphInputan, um die AV-Synchronisierung zu verbessern. - Entfernen Sie das Feld
ExportResult.processedInputs. Wenn Sie dieses Feld für Codecdetails verwenden, verwenden Sie stattdessenDefaultDecoderFactory.listener. Im Falle einer Codec-Ausnahme sind die Codec-Details inExportException.codecInfoverfügbar.
- Fügen Sie
- Extraktoren:
- MPEG-TS: Die Änderung wird vorwärtsgerollt, um sicherzustellen, dass der letzte Frame gerendert wird. Dazu wird die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange übergeben (#7909). Es wurden Korrekturen vorgenommen, um die Probleme zu beheben, die nur bei I-Frame-HLS-Streams (#1150) und H.262-HLS-Streams (#1126) aufgetreten sind.
- MP3: Die Datengröße aus einem
Info-Frame wird der Größe vorgezogen, die vom zugrunde liegenden Stream gemeldet wird (z.B. Dateigröße oder HTTP-Content-Length-Header). Dadurch werden nicht abspielbare Trailerdaten (z.B. Albumcover) von Berechnungen für die Suche mit konstanter Bitrate ausgeschlossen, was die Suche genauer macht (#1376). - MP3: Die Frame-Anzahl und andere Daten in einem
Info-Frame (falls vorhanden) werden verwendet, um eine durchschnittliche Bitrate für die Suche nach konstanter Bitrate zu berechnen, anstatt die Bitrate des Frames nach demInfo-Frame zu extrapolieren, die künstlich klein sein kann, z.B. einPCUT-Frame (#1376). - Die Extraktion des PCM-Audioformats in AVI-Containern wurde korrigiert.
- Audio:
- Die Codierungsattribute für DTS:X Profile 2 für die Passthrough-Wiedergabe wurden korrigiert (#1299).
- Setzen Sie für die ausgelagerte Wiedergabe das Tracking-Feld für den Abschluss des Streams in
DefaultAudioSinkzurück, bevor SieAudioTrack.stop()aufrufen, damitAudioTrack.StreamEventCallback#onPresentationEndedkorrekt erkennt, wann alle ausstehenden Daten wiedergegeben wurden. - Fehler in
SilenceSkippingAudioProcessorbehoben, bei dem Übergänge zwischen verschiedenen Audioformaten (z. B. Stereo zu Mono) dazu führen können, dass der Prozessor eine Ausnahme auslöst (#1352). - Implementiere
MediaCodecAudioRenderer.getDurationToProgressUs(), damit ExoPlayer die Hauptarbeitsschleife dynamisch so plant, dass der MediaCodecAudioRenderer Fortschritte machen kann.
- Video:
- Problem behoben, bei dem
Listener.onRenderedFirstFrame()zu früh eintrifft, wenn die Oberfläche während der Wiedergabe gewechselt wird. - Die Fallback-Logik des Decoders für Dolby Vision wurde korrigiert, sodass bei Bedarf ein kompatibler AV1-Decoder verwendet wird (#1389).
- Codec-Ausnahme behoben, die durch das Aktivieren eines Video-Renderers während der Wiedergabe verursacht werden kann.
- Problem behoben, bei dem
- Text:
- Problem behoben, bei dem Untertitel, die vor einer Suchposition beginnen, übersprungen werden. Dieses Problem wurde erst in Media3 1.4.0-alpha01 eingeführt.
- Das Standardverhalten beim Parsen von Untertiteln wurde geändert, sodass es während der Extraktion statt während des Renderings erfolgt. Den Unterschied zwischen Extraktion und Rendering finden Sie im Architekturdiagramm von ExoPlayer.
- Diese Änderung kann durch Aufrufen von beiden,
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)undTextRenderer.experimentalSetLegacyDecodingEnabled(true), überschrieben werden. Informationen zum Einbinden dieser Komponenten in eineExoPlayer-Instanz finden Sie in der Dokumentation zur Anpassung. Diese Methoden (und die gesamte Unterstützung für die Decodierung von alten Untertiteln) werden in einer zukünftigen Version entfernt. - Apps mit benutzerdefinierten
SubtitleDecoder-Implementierungen müssen aktualisiert werden, um stattdessenSubtitleParser(undSubtitleParser.Factoryanstelle vonSubtitleDecoderFactory) zu implementieren.
- Diese Änderung kann durch Aufrufen von beiden,
- PGS: Die Lauflängendecodierung wurde korrigiert, sodass
0als Farbindex und nicht als literaler Farbwert aufgelöst wird (#1367). - CEA-708: Ignoriere den Wert
rowLock. In der Spezifikation CEA-708-E S-2023 wird angegeben, dass sowohlrowLockals auchcolumnLockals „true“ angenommen werden sollten, unabhängig von den im Stream vorhandenen Werten. Die Unterstützung fürcolumnLockist nicht implementiert, daher wird effektiv davon ausgegangen, dass der Wert immer „false“ ist.- Dies war ursprünglich in den Versionshinweisen zu
1.3.0-alpha01enthalten, die Änderung wurde jedoch vor dem Release von1.3.0-rc01versehentlich rückgängig gemacht. Dieses Problem wurde behoben und die Änderung ist wieder vorhanden.
- Dies war ursprünglich in den Versionshinweisen zu
- CEA-708: Es werden keine doppelten Zeilenumbrüche mehr hinzugefügt, die durch die naive Verarbeitung des Befehls „set pen location“ durch ExoPlayer verursacht wurden (#1315).
- Behebung eines
IllegalArgumentException-Fehlers vonLegacySubtitleUtil, wenn ein WebVTT-Untertitel-Sample keine Cues enthält, z.B. als Teil eines DASH-Streams (#1516).
- Metadaten:
- Zuordnung von MP4- zu ID3-Sortier-Tags korrigiert. Zuvor wurden die MP4-Tags „Albumsortierung“ (
soal), „Künstlersortierung“ (soar) und „Albumkünstlersortierung“ (soaa) fälschlicherweise den ID3-TagsTSO2,TSOAundTSOPzugeordnet (#1302). - Das Lesen der numerischen MP4-Tags (/iTunes)
gnre(Genre) undtmpo(Tempo) wurde korrigiert, wenn der Wert länger als ein Byte ist. - ID3-
TCON-Frame anMediaMetadata.genreweitergeben (#1305).
- Zuordnung von MP4- zu ID3-Sortier-Tags korrigiert. Zuvor wurden die MP4-Tags „Albumsortierung“ (
- Bild:
- Unterstützung für nicht quadratische DASH-Thumbnail-Raster hinzugefügt (#1300).
- Unterstützung für AVIF für API 34 und höher hinzugefügt.
nullals Parameter fürExoPlayer.setImageOutput()zulassen, um einen zuvor festgelegtenImageOutputzu löschen.
- DataSource:
- Implementieren Sie die Unterstützung für
android.resource://package/id-Rohressourcen-URIs, wobei sichpackagevom Paket der aktuellen Anwendung unterscheidet. Diese Methode war bisher nicht dokumentiert, ist aber eine effizientere Möglichkeit, 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 ungleich null annotiert. ByteArrayDataSourcekann einen URI währendopen()in ein Byte-Array auflösen, anstatt bei der Erstellung hartcodiert zu werden (#1405).
- Implementieren Sie die Unterstützung für
- DRM:
- Einstellung eines
LoadErrorHandlingPolicyfürDefaultDrmSessionManagerProviderzulassen (#1271).
- Einstellung eines
- Auswirkung:
- 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 Debug SurfaceView von Transformer verbessert wird.
- Die Implementierung der Overlay-Matrix wurde aktualisiert, um sie mit der Dokumentation in Einklang zu bringen. Dazu wurden die in
setOverlayFrameAnchor()angewendeten x- und y-Werte umgekehrt. Wenn SieOverlaySettings.Builder.setOverlayFrameAnchor()verwenden, kehren Sie die x- und y-Werte um, indem Sie sie mit-1multiplizieren. - Fehler behoben, bei dem
TimestampWrapperbei Verwendung mitExoPlayer#setVideoEffectsabstürzt (#821). - Der Standard-SDR-Farbraum wird von linearen Farben in elektrisches BT 709-SDR-Video geändert. Außerdem sollte eine dritte Option zum Beibehalten des ursprünglichen Farbraums angeboten werden.
- Es ist jetzt möglich, eine unbestimmte Z-Reihenfolge von EditedMediaItemSequences zu definieren (#1055).
- Beibehaltung eines einheitlichen Luminanzbereichs für verschiedene HDR-Inhalte (verwendet den 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 Apps zum Abspielen von DAI-Anzeigenstreams erforderlich ist, wird auf „Stabil“ gesetzt.
- Fügen Sie
replaceAdTagParameters(Map <String, String>)zuImaServerSideAdInsertionMediaSource.AdLoaderhinzu, damit Anzeigen-Tag-Parameter zur Laufzeit ersetzt werden können. - Fehler behoben, bei dem
VideoAdPlayer.VideoAdPlayerCallback.onError()nicht aufgerufen wurde, wenn während der Anzeigenwiedergabe ein Player-Fehler auftrat (#1334). - IMA SDK-Version auf 3.33.0 aktualisiert, um einen
NullPointerExceptionbei Verwendung vondata://-Anzeigen-Tag-URIs zu beheben (#700).
- Sitzung:
- Ändern Sie den Standardwert von
CommandButton.enabledintrueund sorgen Sie dafür, dass der Wert für Controller auch dann „false“ bleiben kann, wenn der zugehörige Befehl verfügbar ist. - Symbolkonstanten für
CommandButtonhinzufügen, die anstelle von benutzerdefinierten Symbolressourcen verwendet werden sollen. MediaSessionService.isPlaybackOngoing()wurde hinzugefügt, damit Apps abfragen können, ob der Dienst inonTaskRemoved()beendet werden muss (#1219).- Füge
MediaSessionService.pauseAllPlayersAndStopSelf()hinzu, um die Wiedergabe aller Sitzungen bequem zu pausieren, und rufestopSelf()auf, um den Lebenszyklus vonMediaSessionServicezu beenden. - Überschreibe
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 Suchleiste in der Medienbenachrichtigung für Livestreams wird ausgeblendet, indem die Dauer nicht in den Sitzungsmetadaten der Plattform festgelegt wird (#1256).
- Richten Sie die Konvertierung von
MediaMetadatainMediaDescriptionCompataus, um bei der Auswahl von Metadatenattributen dieselbe bevorzugte Reihenfolge und Logik wie in media1 zu verwenden. MediaSession.sendError()hinzugefügt, mit dem nicht schwerwiegende Fehler an den Media3-Controller gesendet werden können. Wenn der Notification Controller verwendet wird (sieheMediaSession.getMediaNotificationControllerInfo()), wird der benutzerdefinierte Fehler verwendet, um denPlaybackStateder Plattform-Session mit den angegebenen Fehlerinformationen in einen Fehlerstatus zu aktualisieren (#543).- Füge
MediaSession.Callback.onPlayerInteractionFinished()hinzu, um Sitzungen zu informieren, wenn eine Reihe von Spielerinteraktionen von einem bestimmten Controller abgeschlossen wurde. - Füge
SessionErrorhinzu und verwende es inSessionResultundLibraryResultanstelle des Fehlercodes, um weitere Informationen zum Fehler und zur Behebung des Fehlers bereitzustellen, falls möglich. - 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.
- An
MediaSession[Builder].setSessionExtras()von media3 übergebene Extras werden anPlaybackStateCompat.getExtras()eines media1-Controllers weitergegeben. - Schwerwiegende und nicht schwerwiegende Fehler der Plattform-Session zuordnen und umgekehrt. Ein
PlaybackExceptionwird einem schwerwiegenden Fehlerstatus desPlaybackStateCompatzugeordnet. EinSessionError, der mitMediaSession.sendError(ControllerInfo, SessionError)an den Media Notification Controller gesendet wird, wird einem nicht schwerwiegenden Fehler inPlaybackStateCompatzugeordnet. Das bedeutet, dass der Fehlercode und die Fehlermeldung festgelegt werden, der Status der Plattform-Session jedoch nichtSTATE_ERRORist. - Ermöglicht, dass die Sitzungsaktivität pro Controller festgelegt wird, um die globale Sitzungsaktivität zu überschreiben. Die Sitzungsaktivität kann für einen Controller zum Zeitpunkt der Verbindung definiert werden, indem ein
ConnectionResultmitAcceptedResultBuilder.setSessionActivivty(PendingIntent)erstellt wird. Nach dem Herstellen der Verbindung kann die Sitzungsaktivität mitMediaSession.setSessionActivity(ControllerInfo, PendingIntent)aktualisiert werden. - Verbesserte Fehlerreplikation von Aufrufen an
MediaLibrarySession.Callback. Die Fehlerreplikation kann jetzt mitMediaLibrarySession.Builder.setLibraryErrorReplicationMode()konfiguriert werden, um den Fehlertyp auszuwählen oder die Fehlerreplikation zu deaktivieren, die standardmäßig aktiviert ist.
- Ändern Sie den Standardwert von
- UI:
- Unterstützung für die Bildanzeige in
PlayerViewhinzugefügt, wenn eine Verbindung zu einemExoPlayerbesteht (#1144). - Anpassung verschiedener Symbole in
PlayerControlViewüber XML-Attribute hinzugefügt, um unterschiedliche Drawables proPlayerView-Instanz anstelle von globalen Überschreibungen zu ermöglichen (#1200). - Problemumgehung für einen Plattformfehler, der bei Verwendung von
SurfaceViewin einem Compose-AndroidViewauf API 34 zu gestreckten/zugeschnittenen Videos führt (#1237).
- Unterstützung für die Bildanzeige in
- Downloads:
- Es wurde dafür gesorgt, dass
DownloadHelperkeine unveröffentlichtenRenderer-Instanzen preisgibt, was letztendlich zu einem Absturz der App mitIllegalStateException: Too many receivers, total of 1000, registered for pidführen kann (#1224).
- Es wurde dafür gesorgt, dass
- Cronet-Erweiterung:
- Korrigieren Sie
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 Anfrage das Zeitlimit überschreitet (https://issuetracker.google.com/328442628).
- Korrigieren Sie
- HLS-Erweiterung:
- Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Diskontinuität warteten, in
HlsSampleStreamWrappermit einem falschen Offset delegiert wurden, was zu einemIndexOutOfBoundsExceptionoder einemIllegalArgumentExceptionführte (#1002). - Fehler behoben, bei dem nicht primäre Playlists für LL-HLS-Streams immer wieder neu geladen wurden (#1240).
- Fehler behoben, bei dem die Aktivierung von CMCD für HLS mit Initialisierungssegmenten zu
Source ErrorundIllegalArgumentExceptionführte. - Fehler behoben, bei dem nicht primäre Playlists während der Livewiedergabe nicht aktualisiert wurden (#1240).
- Fehler behoben, bei dem das Aktivieren von CMCD für HLS-Livestreams zu
ArrayIndexOutOfBoundsExceptionführt (#1395).
- Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Diskontinuität warteten, in
- DASH-Erweiterung:
- Cast-Erweiterung:
- Fehler behoben, durch den der Albumtitel des
MediaQueueItemin das Media3-Medienelement des Künstlers konvertiert wurde (#1255).
- Fehler behoben, durch den der Albumtitel des
- Testdienstprogramme:
- Implementieren Sie
onInit()undonRelease()inFakeRenderer. - Die
TestPlayerRunHelper.runUntil()/playUntil()-Methoden wurden so geändert, dass sie bei nicht schwerwiegenden Fehlern (z.B. solchen, 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 Kurzvideos. - Ermöglicht das Festlegen des Wiederholungsmodus mit
Intent-Argumenten über die Befehlszeile (#1266). - Verwenden Sie
HttpEngineDataSourcealsHttpDataSource, wenn dies vom Gerät unterstützt wird.
- Verwenden Sie
- Entfernen Sie nicht mehr unterstützte Symbole:
CronetDataSourceFactoryentfernen. Verwenden Sie stattdessenCronetDataSource.Factory.- Entfernen Sie einige
DataSpec-Konstruktoren. Verwenden Sie stattdessenDataSpec.Builder. - Entfernen Sie die Methode
setContentTypePredicate(Predicate)ausDefaultHttpDataSource,OkHttpDataSourceundCronetDataSource. Verwenden Sie stattdessen die entsprechende Methode für jedenXXXDataSource.Factory. - Entfernen Sie die
OkHttpDataSource-Konstruktoren undOkHttpDataSourceFactory. Verwenden Sie stattdessenOkHttpDataSource.Factory. PlayerMessage.setHandler(Handler)entfernen. Verwenden Sie stattdessensetLooper(Looper).- Entfernen Sie das Feld
Timeline.Window.isLive. Verwenden Sie stattdessen die MethodeisLive(). - Entfernen Sie
DefaultHttpDataSourceKonstruktoren. Verwenden Sie stattdessenDefaultHttpDataSource.Factory. DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MSentfernen. Verwenden Sie stattdessenDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)entfernen. Verwenden Sie stattdessenMediaCodecInfo.canReuseCodec(Format, Format).- Entfernen Sie die Methoden
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 einDecoderReuseEvaluation-Objekt akzeptieren. - Entfernen Sie die IntDef-Anmerkung
RendererSupport.FormatSupportund die KonstantenFORMAT_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 Schnittstelle
Bundleable. 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.
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 Bibliothek:
- Fügen Sie
Format.labelshinzu, um lokalisierte oder andere alternative Labels zuzulassen.
- Fügen Sie
- ExoPlayer:
- Problem behoben, bei dem
PreloadMediaPerioddie Streams nicht beibehalten kann, wenn es noch einmal vorab geladen wird. - Wende die richtige entsprechende
TrackSelectionResultauf den Wiedergabezeitraum bei der Neuauswahl des Tracks an. - Frühzeitig aktivierte Renderer werden erst gestartet, nachdem der Wiedergabezeitraum beim Übergang zwischen Mediendateien vorgerückt ist (#1017).
- Fehlender Rückgabetyp zur Proguard-Regel
-keepclasseswithmembersfürDefaultVideoFrameProcessor.Factory.Builder.build()hinzugefügt (#1187).
- Problem behoben, bei dem
- Transformer:
- Problemumgehung für Ausnahme hinzugefügt, die ausgelöst wird, weil
MediaMuxervor API 30 keine negativen Präsentationszeitstempel unterstützt.
- Problemumgehung für Ausnahme hinzugefügt, die ausgelöst wird, weil
- Trackauswahl:
DefaultTrackSelector: Bevorzugt Videotracks mit einer „angemessenen“ Framerate (>=10 fps) gegenüber solchen mit einer niedrigeren oder nicht festgelegten Framerate. Dadurch wird sichergestellt, dass der Player den „echten“ Videotrack in MP4s auswählt, die aus Fotos mit Bewegtbild 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 Blöcken mit ungerader Größe aus WAV-Dateien nicht übersprungen wurde (#1117).
- MP3:
Format.averageBitratewird aus Metadaten-Frames wieXINGundVBRIausgefüllt. - MPEG-TS: Eine Änderung wurde rückgängig gemacht, die darauf abzielte, dass der letzte Frame gerendert wird, indem die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange übergeben wird (#7909). Das liegt daran, dass die Änderung neue Probleme mit I-Frame-only-HLS-Streams (#1150) und H.262-HLS-Streams (#1126) verursacht.
- Audio:
- Renderer-Wiederherstellung durch Deaktivieren der Entlastung zulassen, wenn die Initialisierung des Audiotracks im Entlastungsmodus fehlschlägt.
- Video:
- Workaround 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 H265-Streams mit 60 fps als nicht unterstützt markiert werden
- 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).
- Problem behoben, bei dem die Verarbeitung von HDR-Farbinformationen zu Fehlverhalten des Codecs führte und adaptive Formatwechsel für SDR-Videotracks verhinderte (#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:
- Problemumgehung für eine
NoSuchMethodError, die vomMediaDrm-Framework anstelle vonResourceBusyExceptionoderNotProvisionedExceptionauf einigen Android 14-Geräten ausgelöst werden kann (#1145).
- Problemumgehung für eine
- Auswirkung:
- Das Tone Mapping von PQ zu SDR wurde durch die Konvertierung von Farbräumen verbessert.
- Sitzung:
- UI:
- Fallback-Modus, um den Sprachnamen des Audiotracks einzubeziehen, wenn
Localekeinen Anzeigenamen identifizieren kann (#988).
- Fallback-Modus, um den Sprachnamen des Audiotracks einzubeziehen, wenn
- DASH-Erweiterung:
- Alle
Label-Elemente aus dem Manifest inFormat.labelseinfügen (#1054).
- 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 Bibliothek:
- Implementieren Sie die Unterstützung für
android.resource://package/[type/]name-Rohressourcen-URIs, wobei sichpackagevom Paket der aktuellen Anwendung unterscheidet. Diese Funktion wurde schon immer als funktionierend dokumentiert, aber erst jetzt korrekt implementiert. - MIME-Typen, die vom App-Code festgelegt oder aus Medien gelesen werden, werden normalisiert, sodass sie vollständig in Kleinbuchstaben geschrieben sind.
- 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 aktuellen Versionen unserer AndroidX-Abhängigkeiten upgraden können. - Sowohl
artworkUrials auchartworkDatainMediaMetadata.Builder.populate(MediaMetadata)werden ausgefüllt, wenn mindestens einer der beiden Werte nicht null ist (#964).
- Implementieren Sie die Unterstützung für
- ExoPlayer:
PreloadMediaSourceundPreloadMediaPeriodwurden hinzugefügt, damit Apps eine Medienquelle mit Inhalten vor der Wiedergabe an einer bestimmten Startposition vorab laden können.PreloadMediaSourcebereitet die Inhaltsmedienquelle für den Empfang desTimelinevor, bereitet den Zeitraum an der angegebenen Startposition vor und speichert ihn im Cache, wählt Tracks aus und lädt Mediendaten für den Zeitraum. Apps steuern den Vorabladefortschritt durch Implementieren vonPreloadMediaSource.PreloadControlund Festlegen der vorab geladenen Quelle für die Wiedergabe im Player.- Fügen Sie
ExoPlayer.setImageOutputhinzu, damit AppsImageRenderer.ImageOutputfestlegen können. DefaultRenderersFactorystellt dem Player jetzt standardmäßig einImageRenderermit Null-ImageOutputund Null-ImageDecoder.Factory.DEFAULTzur Verfügung.- Das Ereignis
Player.Listener.onPositionDiscontinuitywird ausgegeben, wenn Stille übersprungen wird (#765). - Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzugefügt. Sie können dies mit
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()aktivieren. - Unterstützung adaptiver Medienquellen mit
PreloadMediaSource. - Implementiere
HttpEngineDataSource, einHttpDataSource, mit der HttpEngine API. - Verhindern Sie die Erstellung von Unterklassen von
CompositeSequenceableLoader. Diese Komponente wurde zuvor erweiterbar gemacht, aber innerhalb der Bibliothek nie als Unterklasse definiert. Anpassungen können vorgenommen werden, indem eine Instanz mit dem Decorator-Muster umschlossen und ein benutzerdefiniertesCompositeSequenceableLoaderFactoryimplementiert wird. - Problem behoben, bei dem durch das Wiederholen derselben Zeit die Metadaten dieses Elements gelöscht wurden (#1007).
- Die
experimentalSetSubtitleParserFactory-Methoden fürBundledChunkExtractor.FactoryundDefaultHlsExtractorFactorywurden insetSubtitleParserFactoryumbenannt und die Übergabe vonnullwurde deaktiviert. Verwenden Sie die neuenexperimentalParseSubtitlesDuringExtraction(boolean)-Methoden, um das Parsing-Verhalten zu steuern. - Unterstützung für die Anpassung des während der Extraktion verwendeten
SubtitleParser.Factoryhinzugefügt. Dies kann mitMediaSource.Factory.setSubtitleParserFactory()erreicht werden. - Fügen Sie allen
Format.id-Feldern, die ausMergingMediaSourcegeneriert wurden, ein Quellpräfix hinzu. So lässt sich leichter feststellen, welche Quelle eineFormaterzeugt 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-Suchparametern beenden (#1075).
- Transformer:
- Unterstützung für das Abflachen von H.265/HEVC-SEF-Zeitlupenvideos hinzugefügt.
- Die Transmuxing-Geschwindigkeit wurde erhöht, insbesondere bei Bearbeitungen, bei denen Videos entfernt werden.
- Fügen Sie eine API hinzu, damit die Ausgabedatei mit einem Videoframe beginnt. Dadurch kann die Ausgabe von Trimmvorgängen besser mit Player-Implementierungen kompatibel sein, die den ersten Videoframe erst nach seinem Präsentationszeitstempel anzeigen (#829).
- Unterstützung für die Optimierung von MP4-Zuschneidevorgängen für einzelne Assets hinzugefügt.
- Unterstützung hinzufügen, damit ein Videoframe den ersten Zeitstempel in der Ausgabedatei hat. Behebt das Problem, dass Ausgabedateien auf iOS-basierten Playern mit einem schwarzen Frame beginnen (#829).
- Trackauswahl:
- Füge
DefaultTrackSelector.selectImageTrackhinzu, um die Auswahl von Bildtracks zu aktivieren. - Fügen Sie
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledhinzu, um festzulegen, ob ein Bildtrack ausgewählt werden soll, wenn sowohl ein Bildtrack als auch ein Videotrack verfügbar sind. Der Standardwert istfalse. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
- Füge
- Extraktoren:
- Zusätzliches AV1C-Parsing zum MP4-Extraktor 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. Das führt jedoch zu einer weniger detaillierten 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 sie Rollen-Flags zuordnen, damit Nutzer Audiotracks besser auswählen können (#973).
- Zusätzliches AV1C-Parsing zum MP4-Extraktor 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 eine benutzerdefinierteVideoFrameProcessor.Factoryeinfügen möchten, können eineCompositingVideoSinkProviderinstanziieren, die die benutzerdefinierteVideoFrameProcessor.Factoryverwendet, und den Anbieter der Videosenke anMediaCodecVideoRendererübergeben.
- Ändern Sie den
- Text:
- Die Serialisierung von Bitmap-Cues 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 Spezifikation CEA-708-E S-2023 wird angegeben, dass sowohlrowLockals auchcolumnLockals „true“ angenommen werden sollten, unabhängig von den im Stream vorhandenen Werten. Die Unterstützung fürcolumnLockist nicht implementiert, daher wird effektiv davon ausgegangen, dass der Wert immer „false“ ist.
- Die Serialisierung von Bitmap-Cues wurde korrigiert, um den Fehler
- Bild:
- Unterstützung für DASH-Thumbnails hinzugefügt Rasterbilder werden zugeschnitten und einzelne Thumbnails werden
ImageOutputkurz vor ihrer Präsentationszeit zur Verfügung gestellt.
- Unterstützung für DASH-Thumbnails hinzugefügt Rasterbilder werden zugeschnitten und einzelne Thumbnails werden
- DRM:
- Unverschlüsselte „Clear Lead“-Samples in DRM-Inhalten werden standardmäßig sofort abgespielt, auch wenn die Schlüssel für die später verschlüsselten Samples noch nicht bereit 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 wäre die Wiedergabe an dieser Stelle jedoch überhaupt nicht gestartet. Dieses Verhalten kann mit
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyoderDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysdeaktiviert werden.- IMA-Erweiterung:
- Ein Problem wurde behoben, durch das DASH- und HLS-Anzeigen ohne die entsprechende Dateiendung nicht wiedergegeben werden konnten.
- Unverschlüsselte „Clear Lead“-Samples in DRM-Inhalten werden standardmäßig sofort abgespielt, auch wenn die Schlüssel für die später verschlüsselten Samples noch nicht bereit 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 wäre die Wiedergabe an dieser Stelle jedoch überhaupt nicht gestartet. Dieses Verhalten kann mit
- Sitzung:
- Doppelklickerkennung für TV-Apps deaktivieren (#962).
- Problem behoben, bei dem
MediaItem.RequestMetadatamit nur Nicht-Null-Extras nicht zwischen Mediencontrollern und Sitzungen übertragen wird. - Fügen Sie
MediaLibrarySession.Buildereinen Konstruktor hinzu, der nur einContextanstelle einesMediaLibraryServiceakzeptiert.
- HLS-Erweiterung:
- Reduzieren Sie die Sichtbarkeit von
HlsMediaPeriodauf „package-private“. Dieser Typ sollte nicht direkt von außerhalb des HLS-Pakets abhängig sein. - Das Springen zum Anfang eines Segments wurde effizienter gestaltet (#1031).
- Reduzieren Sie die Sichtbarkeit von
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- MIDI-Decoder: SysEx-Ereignisnachrichten ignorieren (#710).
- Testdienstprogramme:
- Pausiere die Wiedergabe in
TestPlayerRunHelper.playUntilPositionnicht. Der Test hält die Wiedergabe in einem Wiedergabestatus, setzt den Fortschritt jedoch aus, bis der Test Assertions und weitere Aktionen hinzufügen kann.
- Pausiere die Wiedergabe in
- Demo-App:
- Fügen Sie ein Demomodul für Kurzvideos hinzu, um die Verwendung von
PreloadMediaSourcemit dem Anwendungsfall für Kurzvideos zu demonstrieren.
- Fügen Sie ein Demomodul für Kurzvideos 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:
- Problem behoben, bei dem durch manuelles Suchen außerhalb des Bereichs
LiveConfiguration.min/maxOffsetder Offset immer wieder aufmin/maxOffsetzurückgesetzt wurde. - Problem behoben, bei dem die OPUS- und VORBIS-Kanallayouts für 3, 5, 6, 7 und 8 Kanäle falsch waren (#8396).
- Problem behoben, bei dem die Titelauswahl nach dem Zurückspulen auf null in einem Livestream fälschlicherweise dazu führte, dass der Stream an seiner Standardposition gestartet wurde (#9347).
- Es wurde ein Problem behoben, bei dem neue Instanzen von
CmcdData.Factorynegative Werte fürbufferedDurationUsvon Chunk-Quellen erhielten, was zu einemIllegalArgumentExceptionführte (#888).
- Problem behoben, bei dem durch manuelles Suchen außerhalb des Bereichs
- Transformer:
- Problem umgehen, bei dem der Encoder während der Konfiguration aufgrund einer hohen Betriebsrate einen Fehler ausgibt.
- Extraktoren:
- Markiere sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Fotos mit Bewegtbild als
ROLE_FLAG_ALTERNATE, um zu verhindern, dass sie aufgrund ihrer höheren Auflösung automatisch für die Wiedergabe ausgewählt werden. - Fehlerhafte Keyframe-Erkennung für TS-H264-Streams behoben (#864).
- Fehler bei der Schätzung der Dauer von TS-Streams, die länger als 47.721 Sekunden sind, wurde behoben (#855).
- Markiere sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Fotos mit Bewegtbild als
- Audio:
- Behebung der Verarbeitung von EOS für
SilenceSkippingAudioProcessor, wenn es mehrmals aufgerufen wird (#712).
- Behebung der Verarbeitung von EOS für
- Video:
- 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 markiert werden (#693).
- Metadaten:
- Fehler behoben, bei dem
MediaMetadatanur aus Vorbis-Kommentaren mit Großbuchstaben ausgefüllt wurde (#876). OutOfMemoryErrorwird beim Parsen sehr großer ID3-Frames abgefangen, sodass die Wiedergabe ohne die Tag-Informationen fortgesetzt werden kann, anstatt dass die Wiedergabe vollständig fehlschlägt.
- Fehler behoben, bei dem
- DRM:
- Erweiterung des Workarounds für die fehlerhafte ClearKey-Lizenz-URL
https://default.urlauf API 33+ (zuvor galt der Workaround nur für API 33) (#837). ERROR_DRM_SESSION_NOT_OPENEDwurde behoben, wenn von verschlüsselten zu unverschlüsselten Inhalten gewechselt wurde, ohne dass eine Oberfläche mit dem Player verbunden war. Der Fehler ist auf die falsche Verwendung eines sicheren Decoders zur Wiedergabe der unverschlüsselten Inhalte zurückzuführen.
- Erweiterung des Workarounds für die fehlerhafte ClearKey-Lizenz-URL
- Sitzung:
- Die benutzerdefinierten Schlüssel und Werte werden in
MediaMetadataCompatbisMediaMetadata.extrasundMediaMetadata.extrasbisMediaMetadataCompateingefügt (#756, #802). - Fehler beim Übertragen von
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). IllegalStateExceptionwurde behoben, wenn der Controller für Medienbenachrichtigungen die Verbindung noch nicht hergestellt hat, wenn die erste Benachrichtigungsaktualisierung angefordert wird (#917).
- Die benutzerdefinierten Schlüssel und Werte werden in
- UI:
- Problem 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).
- Problem behoben, bei dem die Zahlen in der Schaltfläche zum Vorspulen des
PlayerControlViewfalsch ausgerichtet waren (#547).
- DASH-Erweiterung:
- „f800“ wird im DASH-Manifest als Kanalanzahl von 5 für Dolby geparst (#688).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Cast-Erweiterung:
- Bereinigung der Erstellung eines
Timeline, damit die App nicht abstürzt, wenn das Laden von Medien auf dem Übertragungsgerät fehlschlägt (#708).
- Bereinigung der Erstellung eines
Version 1.2.0
15. November 2023
- Gemeinsame Bibliothek:
- Fügen Sie den Methoden in der Schnittstelle
Log.Loggereinen Parameter@Nullable Throwablehinzu. Der Parametermessagefür diese Methoden enthält keine Informationen mehr über dieThrowable, die an dieLog.{d,i,w,e}()-Methoden übergeben werden. 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 Typ-Parameter, die Nullwerte zulassen, und Array-Elementtypen, die Nullwerte zulassen, nicht als solche erkannt wurden. Beispiele sind die Methodenparameter
TrackSelectorResultundSimpleDecoder(#6792). - Ändere das Standardverhalten der Benutzeroberfläche und der Benachrichtigungen in
Util.shouldShowPlayButton, um eine Wiedergabeschaltfläche anzuzeigen, wenn die Wiedergabe vorübergehend unterdrückt wird (z.B. aufgrund eines vorübergehenden Verlusts des Audiofokus). Das alte Verhalten kann mitPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)oderMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)beibehalten werden (#11213). - Aktualisieren Sie
androidx.annotation:annotation-experimentalauf1.3.1, um https://issuetracker.google.com/251172715 zu beheben. - Verschieben Sie
ExoPlayer.setAudioAttributesin die SchnittstellePlayer.
- Fügen Sie den Methoden in der Schnittstelle
- ExoPlayer:
- Probleme beim Suchen in AC4-Streams behoben, die durch eine fehlerhafte Identifizierung von Nur-Decodierungs-Samples verursacht wurden (#11000).
- Unterdrückung der Wiedergabe auf ungeeigneten Audioausgabegeräten (z.B. dem integrierten Lautsprecher auf Wear OS-Geräten) hinzugefügt, wenn diese Funktion über
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutputaktiviert ist. Der Grund für die Unterdrückung der Wiedergabe wird alsPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTaktualisiert, wenn die Wiedergabe versucht wird, obwohl 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 wird. - Fügen Sie
MediaSource.canUpdateMediaItemundMediaSource.updateMediaItemhinzu, umMediaItem-Updates nach der Erstellung überPlayer.replaceMediaItem(s)zu akzeptieren. MediaItem-Updates für alleMediaSource-Klassen, die von der Bibliothek überPlayer.replaceMediaItem(s)bereitgestellt werden, 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. - Erweitern Sie die Methode
SequenceableLoader.continueLoading(long)in der SchnittstelleSequenceableLoaderaufSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfoenthält zusätzliche Parameter, darunterplaybackSpeedundlastRebufferRealtimeMszusätzlich zum vorhandenenplaybackPositionUs. - Erweitern Sie die Methode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)in der SchnittstelleChunkSourceaufChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: Pufferunterlauf (
bs), Frist (dl), Wiedergabegeschwindigkeit (pr) und Start (su) (#8699). - Luma- und Chroma-Bittiefe zu
ColorInfohinzugefügt (#491). - Zusätzliche Felder zum CMCD-Logging (Common Media Client Data) hinzugefügt: nächste Objektanfrage (
nor) und nächste Bereichsanfrage (nrr) (#8699). - Funktion zum Übertragen von CMCD-Daten (Common Media Client Data) mithilfe von Suchparametern hinzugefügt (#553).
- Fehler bei
ConcurrentModificationExceptioninExperimentalBandwidthMeterbehoben (#612). - Fügen Sie den Parameter
MediaPeriodIdzuCompositeMediaSource.getMediaTimeForChildMediaTimehinzu. - Unterstützung von
ClippingMediaSource(und anderen Quellen mit Zeitversatz für Zeitraum/Fenster) 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 Rotationsprobleme zu beheben. - Die Parameter
frameRateunddurationUsvonSampleConsumer.queueInputBitmapwurden inTimestampIteratorgeändert.
- Trackauswahl:
- Füge
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenesshinzu, um die nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Die Standardeinstellung bleibt beitrue.
- Füge
- Extraktoren:
- MPEG-TS: Es wird dafür gesorgt, dass der letzte Frame gerendert wird, indem die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange übergeben wird (#7909).
- Tippfehler beim Bestimmen von
rotationDegreeskorrigieren.projectionPosePitchwurde inprojectionPoseRollgeändert (#461). - Die Annahme, dass
Extractor-Instanzen direkt mitinstanceofgeprüft werden können, wurde entfernt. Wenn Sie zur Laufzeit Zugriff auf die Implementierungsdetails einesExtractor-Objekts benötigen, müssen Sie zuerstExtractor.getUnderlyingInstanceaufrufen. - Fügen Sie
BmpExtractorhinzu. - Fügen Sie
WebpExtractorhinzu. - Fügen Sie
HeifExtractorhinzu. - Unterstützung für QuickTime Classic zu
Mp4Extractorhinzugefügt.
- 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 die Offload-Unterstützung abzurufen, die die Senke für das Format über einDefaultAudioOffloadSupportProviderbieten kann. Es wird der neueAudioOffloadSupportzurückgegeben, derisFormatSupported,isGaplessSupportedundisSpeedChangeSupportedenthält. - Füge
AudioSink.setOffloadMode()hinzu, um die Offload-Konfiguration auf der Audiosenke zu konfigurieren. Der Standardwert istAudioSink.OFFLOAD_MODE_DISABLED. - Die Auslagerung kann über
setAudioOffloadPreferenceinTrackSelectionParametersaktiviert werden. Wenn die Einstellung „Aktivieren“ lautet, das Gerät die Auslagerung für das Format unterstützt und die Titelauswahl ein einzelner Audiotrack ist, wird die Audioauslagerung aktiviert. - Wenn
audioOffloadModePreferenceaufAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIREDgesetzt ist, wählt derDefaultTrackSelectornur einen Audiotrack aus, und auch nur dann, wenn das Format dieses Tracks beim Offloading unterstützt wird. Wenn kein Audiotrack im Offload unterstützt wird, wird kein Track ausgewählt. - Deaktivierung der Unterstützung für lückenlose Wiedergabe bei Offload vor API-Level 33 aufgrund eines Problems mit der Wiedergabeposition nach dem Titelwechsel.
- Entfernen Sie den Parameter
enableOffloadaus der MethodensignaturDefaultRenderersFactory.buildAudioSink. - Methode „
DefaultAudioSink.Builder.setOffloadMode“ entfernen. - Entfernen Sie den intdef-Wert
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Unterstützung für lückenlose Opus-Metadaten während der Offload-Wiedergabe hinzugefügt
- Renderer-Wiederherstellung durch Deaktivieren der Auslagerung zulassen, wenn beim ersten Schreibvorgang ein Fehler aufgetreten ist (#627).
- Standardmäßig die Planung der Auslagerung für die Wiedergabe von ausgelagerten Audioinhalten aktivieren.
- Löschen Sie
ExoPlayer.experimentalSetOffloadSchedulingEnabledundAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. onExperimentalSleepingForOffloadChangedwurde inonSleepingForOffloadChangedundonExperimentalOffloadedPlaybackinonOffloadedPlaybackumbenannt.- Verschiebe die mit dem Audio-Offload-Modus zusammenhängenden
TrackSelectionParameters-Schnittstellen und ‑Definitionen in eine innereAudioOffloadPreferences-Klasse. - Fügen Sie
AnalyticsListener,AudioRendererEventListenerundAudioSink.Listenerdie CallbacksonAudioTrackInitializedundonAudioTrackReleasedhinzu. - Problem mit DTS Express-Audiopufferunterlauf behoben (#650).
- Fehler behoben, bei dem die Funktionsprüfung für E-AC3-JOC eine
IllegalArgumentExceptionauslöst (#677).
- Unterstützung für 24/32-Bit-Big-Endian-PCM in MP4 und Matroska hinzugefügt und PCM-Codierung für
- Video:
MediaCodecVideoRenderererlauben, eine benutzerdefinierteVideoFrameProcessor.Factoryzu verwenden.- Fehler behoben, durch den der erste Frame nicht gerendert werden konnte, wenn der Audiostream mit negativen Zeitstempeln beginnt (#291).
- Text:
ExoplayerCuesDecoderentfernen. Text-Tracks mitsampleMimeType = application/x-media3-cueswerden jetzt direkt vonTextRendererverarbeitet, ohne dass eineSubtitleDecoder-Instanz erforderlich ist.
- Metadaten:
MetadataDecoder.decodewird nicht mehr für „Nur-Decodierung“-Samples aufgerufen, da die Implementierung ohnehin null zurückgeben muss.
- Auswirkung:
- Fügen Sie
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)hinzu, um die Bitmap-Eingabe nach Zeitstempel in die Warteschlange zu stellen. - Ändern Sie
VideoFrameProcessor.registerInputStream()so, dass es nicht blockierend ist. Apps müssenVideoFrameProcessor.Listener#onInputStreamRegistered()implementieren. - Die Parameter
frameRateunddurationUsvonVideoFrameProcessor.queueInputBitmapwurden inTimestampIteratorgeändert.
- Fügen Sie
- IMA-Erweiterung:
- Fehler behoben, bei dem ein DASH-Livestream mit mehreren Zeiträumen, der nicht das erste Element in einer Playlist ist, eine Ausnahme auslösen kann (#571).
- Gib den StreamManager frei, bevor du
AdsLoader.destroy()aufrufst. - Die IMA SDK-Version wurde auf 3.31.0 aktualisiert.
- Sitzung:
- Das Verhalten des Dienstes im Vordergrund für Benachrichtigungen wurde in
DefaultMediaNotificationProvideraufFOREGROUND_SERVICE_IMMEDIATEfestgelegt (#167). - Verwenden Sie nur
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()ab API 31, um Probleme mit veralteten APIs auf Samsung-Geräten zu vermeiden (#167). - Verwenden Sie den Controller für Medienbenachrichtigungen als Proxy, um verfügbare Befehle und das benutzerdefinierte Layout festzulegen, mit dem die Benachrichtigung und die Plattformsitzung ausgefüllt werden.
- Konvertieren Sie Medientastenereignisse, die von
MediaSessionService.onStartCommand()empfangen werden, innerhalb von Media3, anstatt sie an die Plattformsitzung und zurück an Media3 weiterzuleiten. Dadurch ist der Anruf-Controller immer der Controller für Medienbenachrichtigungen und Apps können Anrufe, die über die Benachrichtigung eingehen, auf allen unterstützten API-Levels auf dieselbe Weise erkennen. - Fehler behoben, bei dem
MediaController.getCurrentPosition()nicht weiterging, wenn eine Verbindung zu einem altenMediaSessionCompatbestand. - Fügen Sie
MediaLibrarySession.getSubscribedControllers(mediaId)hinzu, um die Nutzung zu vereinfachen. - Überschreiben Sie
MediaLibrarySession.Callback.onSubscribe(), um die Verfügbarkeit der übergeordneten ID zu bestätigen, die der Controller abonniert. 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 Controller für Medienbenachrichtigungen nicht verfügbar ist. Da Android Auto als Client-Controller aus der Framework-Sitzung liest, wird die Schaltflächequeuein der Benutzeroberfläche von Android Auto nicht angezeigt (#339). - Standardmäßig wird
DataSourceBitmapLoaderanstelle vonSimpleBitmapLoaderverwendet (#271, #327). MediaSession.Callback.onMediaButtonEvent(Intent)hinzufügen, damit Apps die Standardbehandlung von Medien-Button-Ereignissen überschreiben können.
- Das Verhalten des Dienstes im Vordergrund für Benachrichtigungen wurde in
- 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, über das ein Nutzer eine geeignete Audioausgabe (z.B. Bluetooth-Kopfhörer) verbinden kann. Die Wiedergabe wird automatisch fortgesetzt, wenn innerhalb eines konfigurierbaren Zeitlimits (standardmäßig 5 Minuten) ein geeignetes Gerät verbunden wird.
- Füge eine
- Downloads:
- Deklarieren Sie den Typ des Dienstes im Vordergrund „Datensynchronisierung“ für
DownloadService, um die Kompatibilität mit Android 14 zu gewährleisten. Wenn dieser Dienst verwendet wird, muss die App auchdataSyncalsforegroundServiceTypeim Manifest hinzufügen und die BerechtigungFOREGROUND_SERVICE_DATA_SYNChinzufügen (#11239).
- Deklarieren Sie den Typ des Dienstes im Vordergrund „Datensynchronisierung“ für
- HLS-Erweiterung:
- Die HLS-Live-Playlist wird in einem Intervall aktualisiert, das anhand der letzten Ladebeginnzeit und nicht anhand der letzten Ladeabschlusszeit berechnet wird (#663).
- DASH-Erweiterung:
- Mehrere identische DASH-Kennungen in der Segmentvorlagen-URL zulassen.
- Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzugefügt. Dieser bietet eine bessere Unterstützung für das Zusammenführen überlappender Untertitel, einschließlich der Behebung von Flackern beim Übergang zwischen Untertitelsegmenten. Sie können dies mit
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288) aktivieren.
- RTSP-Erweiterung:
- Race-Bedingung behoben, die beim Fallback auf TCP zu
IndexOutOfBoundsExceptionführen konnte, oder die Wiedergabe in einigen Situationen hängen blieb. - Prüfung des Status in der RTSP-Einrichtung, wenn der Ladestatus von
RtspMediaPeriodzurückgegeben wird (#577). - Benutzerdefinierte RTSP-Anfragemethoden im öffentlichen Header der Optionsantwort ignorieren (#613).
- Verwenden Sie den Zeitlimitwert für die RTSP-Einrichtungsantwort im Zeitintervall für das Senden von Keep-Alive-RTSP-Optionsanfragen (#662).
- Race-Bedingung behoben, die beim Fallback auf TCP zu
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Veröffentlichung des MIDI-Decodermoduls, das die Wiedergabe von Standard-MIDI-Dateien mithilfe der Jsyn-Bibliothek zur Audiosynthese unterstützt.
- Füge
DecoderOutputBuffer.shouldBeSkippedhinzu, um Ausgabepuffer, die nicht dargestellt werden müssen, direkt zu markieren. Diese Methode wird gegenüberC.BUFFER_FLAG_DECODE_ONLYbevorzugt, die eingestellt wird. - Füge
Decoder.setOutputStartTimeUsundSimpleDecoder.isAtLeastOutputStartTimeUshinzu, damit Decoder reine Decodierungs-Samples vor dem Beginn verwerfen können. Diese Option sollte gegenüber bevorzugt 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 im Leanback-Code zu einer
ArithmeticExceptionführen kann (#617).
- Fehler behoben, bei dem das Deaktivieren einer Oberfläche im Leanback-Code zu einer
- Testdienstprogramme:
TestExoPlayerBuilderundFakeClockmit Espresso-UI-Tests und Compose-UI-Tests kompatibel machen. Dadurch wird ein Fehler behoben, bei dem die Wiedergabe während Espresso- oder Compose-Ansichtsinteraktionen nicht deterministisch voranschreitet.
- Entfernen Sie nicht mehr unterstützte Symbole:
- Entfernen Sie
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)undTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Verwenden Sie stattdessenComposition.Builder.setHdrMode(int)und übergeben SieCompositionanTransformer.start(Composition, String). - Die verworfene Methode
DownloadNotificationHelper.buildProgressNotificationwurde entfernt. Verwenden Sie stattdessen eine nicht verworfene Methode, die einennotMetRequirements-Parameter akzeptiert.
- 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
7. August 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.1.0
Version 1.1.1
16. August 2023
- Gemeinsame Bibliothek:
- Versehentlich hinzugefügte
multidex-Abhängigkeit aus allen Modulen entfernt (#499).
- Versehentlich hinzugefügte
- ExoPlayer:
- Ein Problem in
PlaybackStatsListenerwurde behoben, bei dem nach dem Löschen der Playlist fälschlicherweisePlaybackStatserstellt wurden. - Dem Logging von Common Media Client Data (CMCD) wurden zusätzliche Felder 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:
- Fehler behoben, bei dem
Player.getState()beim Abspielen sehr kurzer Dateien nie zuSTATE_ENDEDwechselte (#538).
- Fehler behoben, bei dem
- Audio-Offload:
- Ogg-ID-Header- und Kommentar-Header-Seiten werden dem Bitstream für die ausgelagerte Opus-Wiedergabe gemäß RFC 7845 vorangestellt.
- Video:
- H.265/HEVC: Fehler beim Parsen von SPS-Informationen zu kurz- und langfristigen Referenzbildern behoben.
- Text:
- CEA-608: Die Logik für das Kürzen von Cues wurde so geändert, dass nur sichtbarer Text berücksichtigt wird. Bisher wurden Einzug und Tabulatorversatz berücksichtigt, wenn die Cue-Länge auf 32 Zeichen begrenzt wurde (was laut Spezifikation technisch korrekt war) (#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 einen Getter für den Zugriff darauf bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
MediaController.Listener.onCustomLayoutChangedaufgerufen. Apps, die unterschiedliche benutzerdefinierte Layouts an verschiedene Media3-Controller senden möchten, können dies inMediaSession.Callback.onConnectmit einemAcceptedResultBuildertun, um sicherzustellen, dass das benutzerdefinierte Layout für den Controller verfügbar ist, wenn die Verbindung hergestellt ist. - Fälle behoben, in denen
MediaLibraryServiceLegacyStubeinen Fehler an einenResultgesendet hat, der dies nicht unterstützt hat, was zu einemUnsupportedOperationExceptiongeführt hat (#78). - Korrigieren Sie die Art und Weise, wie
PlayerWrappereineVolumeProviderCompaterstellt, indem SievolumeControlTypesowohl ü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) bestimmen (#554).
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie einen Getter für den Zugriff darauf bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
Version 1.1.0
5. Juli 2023
- Gemeinsame Bibliothek:
- Grund für die Unterdrückung bei ungeeigneter Audioroute hinzufügen und wiedergeben, wenn bereit. Grund für zu lange Unterdrückung ändern. (#15).
- Fügen Sie dem Player Befehle hinzu:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Fügen Sie „Player“ überladene Methoden hinzu, mit denen Nutzer Lautstärke-Flags angeben können:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
BuilderfürDeviceInfohinzufügen und vorhandenen Konstruktor einstellen.- Füge
DeviceInfo.routingControllerIdhinzu, um die Routing-Controller-ID für die Remote-Wiedergabe anzugeben. Player.replaceMediaItem(s)wurde als Verknüpfung zum Hinzufügen und Entfernen von Elementen an derselben Position hinzugefügt (#8046).
- ExoPlayer:
- ExoPlayer darf die Methoden zur Lautstärkeregelung des Geräts nur steuern, wenn dies ausdrücklich aktiviert wurde. Mit
ExoPlayer.Builder.setDeviceVolumeControlEnabledhaben Sie Zugriff auf:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)undsetDeviceVolume(int, int)increaseDeviceVolume(int)undincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)unddecreaseDeviceVolume(int, int)
FilteringMediaSourcehinzugefügt, mit dem 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 hinzugefügt. Die folgenden Felder wurden aufgenommen:
br,bl,cid,rtpundsid(#8699). API-Struktur und API-Methoden:- Das 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 herauszufiltern, welche Schlüssel protokolliert werden. - Überschreiben Sie
CmcdConfiguration.RequestConfig.getCustomData(), um das benutzerdefinierte Schlüssel-Logging zu aktivieren.
- Das 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()hinzu, umEffectwährend der Videowiedergabe zu verwenden. - Aktualisieren Sie
SampleQueue, umsourceIdalslongund nicht alsintzu speichern. Dadurch werden die Signaturen der öffentlichen MethodenSampleQueue.sourceIdundSampleQueue.peekSourceIdgeändert. - Fügen Sie den
LoadControl-MethodenshouldStartPlaybackundonTracksSelectedParameter hinzu, mit denen diese Methoden mit dem relevantenMediaPeriodverknüpft 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 Nebenläufigkeitsprobleme bei Livestreams mit mehreren Zeiträumen zu vermeiden. - Stellen Sie
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)undBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)ein. Stattdessen kann die Variante der Methoden ohnemediaTimeOffsetUsaufgerufen werden. Beachten Sie, dass der Offset auch bei den verworfenen Varianten nicht mehr zustartTimeUsundendTimeUsderMediaLoadData-Objekte hinzugefügt wird, die vom Dispatcher gesendet werden. - Benennen Sie
ExoTrackSelection.blacklistinexcludeTrackundisBlacklistedinisTrackExcludedum. - Inkonsistentes Verhalten zwischen
ExoPlayer.setMediaItem(s)undaddMediaItem(s)beim Aufruf einer leeren Playlist wurde behoben.
- ExoPlayer darf die Methoden zur Lautstärkeregelung des Geräts nur steuern, wenn dies ausdrücklich aktiviert wurde. Mit
- Transformer:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)entfernen. Verwenden Sie stattdessenExoPlayerAssetLoader.Factory(MediaSource.Factory)undTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).Transformer.startTransformation(MediaItem, ParcelFileDescriptor)entfernen.- Es wurde ein Fehler behoben, durch den die Transformation hängen bleiben konnte (was zu einer Zeitüberschreitung des Muxers führte), wenn das Ende des Videostreams signalisiert wurde, während ein Eingabeframe auf die Verarbeitung wartete.
- Codecs über
MediaCodecListstatt überfindDecoder/EncoderForFormat-Dienstprogramme abfragen, um die Unterstützung zu erweitern. - Entfernen Sie die B-Frame-Konfiguration in
DefaultEncoderFactory, da sie auf einigen Geräten nicht funktioniert.
- Trackauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangehinzu, das standardmäßig deaktiviert ist. Wenn diese Option aktiviert ist, wird durchDefaultTrackSelectoreine neue Trackauswahl ausgelöst, wenn sich die Renderer-Funktionen geändert haben.
- Fügen Sie
- Extraktoren:
- Audio:
- Fehler behoben, bei dem einige Wiedergaben fehlschlagen, wenn Tunneling aktiviert ist und
AudioProcessorsaktiv sind, z.B. für lückenloses Kürzen (#10847). - Opus-Frames in Ogg-Paketen bei direkter Wiedergabe (Offload) kapseln.
- Aktuelle Position während des Ruhezustands mit Offload-Planung extrapolieren.
- Füge
Renderer.release()undAudioSink.release()hinzu, um die Ressourcen am Ende des Lebenszyklus des Players freizugeben. - Änderungen der Audiofunktionen in
DefaultAudioSinküberwachen. Fügen Sie im Konstruktor vonDefaultAudioSinkden erforderlichen Parametercontexthinzu, mit dem sichDefaultAudioSinkals Listener fürAudioCapabilitiesReceiverregistriert und die PropertyaudioCapabilitiesaktualisiert, wenn eine Änderung der Funktionen gemeldet wird. - Änderungen der Audiofunktionen werden über ein neues Ereignis
onAudioCapabilitiesChangedin der SchnittstelleAudioSink.Listenerund eine neue SchnittstelleRendererCapabilities.Listenerweitergegeben, dieonRendererCapabilitiesChanged-Ereignisse auslöst. - Fügen Sie
ChannelMixingAudioProcessorhinzu, um Skalierung/Mischung auf Audiokanäle 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).
- Fehler behoben, bei dem einige Wiedergaben fehlschlagen, wenn Tunneling aktiviert ist und
- Video:
MediaCodecVideoRenderermeldet einVideoSizemit einer Breite und Höhe von 0, wenn der Renderer deaktiviert ist.Player.Listener.onVideoSizeChangedwird entsprechend aufgerufen, wenn sichPlayer.getVideoSize()ändert. Mit dieser Änderung hat die Videogröße von ExoPlayer mitMediaCodecVideoRenderereine Breite und Höhe von 0, wennPlayer.getCurrentTrackskein Video unterstützt oder die Größe des unterstützten Videotracks noch nicht bestimmt ist.
- DRM:
- Reduzieren Sie die Sichtbarkeit mehrerer interner Methoden in
DefaultDrmSession, die nicht von außerhalb des DRM-Pakets aufgerufen werden sollen:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Reduzieren Sie die Sichtbarkeit mehrerer interner Methoden in
- Muxer:
- Eine neue Muxer-Bibliothek hinzufügen, mit der eine MP4-Containerdatei erstellt werden kann.
- IMA-Erweiterung:
- Aktivieren Sie DASH-Livestreams mit mehreren Zeiträumen für die dynamische Anzeigenbereitstellung. Beachte, dass die aktuelle Implementierung noch keine Suche in Livestreams unterstützt (#10912).
- Es wurde ein Fehler behoben, durch den in Livestreams eine neue Werbeunterbrechung eingefügt wurde, weil die berechnete Inhaltsposition in aufeinanderfolgenden Zeitachsen leicht variierte.
- Sitzung:
- Fügen Sie die Hilfsmethode
MediaSession.getControllerForCurrentRequesthinzu, um Informationen zum Controller abzurufen, der gerade einePlayer-Methode aufruft. androidx.media3.session.MediaButtonReceiverwurde hinzugefügt, damit Apps die Fortsetzung der Wiedergabe mit Ereignissen von Medientasten implementieren 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). - In der kompakten Ansicht der Medienbenachrichtigung werden standardmäßig die Befehlsschaltflächen „Zurückspulen“ und „Vorspulen“ für Android 12 und niedriger hinzugefügt (#410).
- Fügen Sie
MediaSession.Callback.onAddMediaItemseine Standardimplementierung hinzu, damit angeforderteMediaItemsanPlayerübergeben werden können, wenn sieLocalConfigurationhaben (z.B. URI) (#282). - In der kompakten Ansicht der Medienbenachrichtigung werden standardmäßig die Befehlsschaltflächen „Zurückspulen“ und „Vorspulen“ für Android 12 und niedriger hinzugefügt (#410).
- Fügen Sie die Hilfsmethode
- UI:
- Füge die Util-Methoden
shouldShowPlayButtonundhandlePlayPauseButtonActionhinzu, um benutzerdefinierte UI-Elemente mit einer Wiedergabe-/Pausetaste zu schreiben.
- Füge die Util-Methoden
- RTSP-Erweiterung:
- DASH-Erweiterung:
- Entferne den Medienzeitversatz aus
MediaLoadData.startTimeMsundMediaLoadData.endTimeMsfür DASH-Streams mit mehreren Zeiträumen. - Ein Fehler wurde behoben, bei dem die erneute Vorbereitung einer Live-DASH-Medienquelle mit mehreren Zeiträumen zu einem
IndexOutOfBoundsExceptionführte (#10838).
- Entferne den Medienzeitversatz aus
- HLS-Erweiterung:
- Fügen Sie
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)hinzu, um ein Zeitlimit für den Ladethread festzulegen, damit auf die Initialisierung vonTimestampAdjustergewartet wird. Wenn die Initialisierung nicht vor dem Zeitlimit abgeschlossen wird, wird einPlaybackExceptionausgelöst, um ein endloses Stocken der Wiedergabe zu vermeiden. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
- Fügen Sie
- Testdienstprogramme:
- Prüfen Sie, ob das URI-Schema in
DataSourceContractTestGroß- und Kleinschreibung berücksichtigt.
- Prüfen Sie, ob das URI-Schema in
- Entfernen Sie nicht mehr unterstützte Symbole:
- Entfernen Sie
DefaultAudioSink-Konstruktoren und verwenden Sie stattdessenDefaultAudioSink.Builder. - Entfernen Sie
HlsMasterPlaylistund verwenden Sie stattdessenHlsMultivariantPlaylist. Player.stop(boolean)entfernen. Verwenden Sie stattdessenPlayer.stop()undPlayer.clearMediaItems()(wennresetden Werttruehat).- Zwei verworfene
SimpleCache-Konstruktoren wurden entfernt. Verwenden Sie stattdessen einen nicht verworfenen Konstruktor, der einenDatabaseProviderverwendet, um die Leistung zu verbessern. - Entfernen Sie den Konstruktor
DefaultBandwidthMeterund verwenden Sie stattdessenDefaultBandwidthMeter.Builder. - Entfernen Sie
DefaultDrmSessionManager-Konstruktoren und verwenden Sie stattdessenDefaultDrmSessionManager.Builder. - Zwei verworfene
HttpDataSource.InvalidResponseCodeException-Konstruktoren wurden entfernt. Verwenden Sie einen nicht verworfenen Konstruktor, der zusätzliche Felder (cause,responseBody) akzeptiert, um das Fehler-Logging zu verbessern. - Entfernen Sie
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDashundDownloadHelper.forSmoothStreamingund verwenden Sie stattdessenDownloadHelper.forMediaItem. - Entfernen Sie den verworfenen
DownloadService-Konstruktor und verwenden Sie einen nicht verworfenen Konstruktor, der die Option zum Bereitstellen eineschannelDescriptionResourceId-Parameters enthält. - Entfernen Sie die verworfenen 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 verworfenen
WorkManagerScheduler-Konstruktor und verwenden Sie stattdessen einen nicht verworfenen Konstruktor, der die Option zum Bereitstellen einesContext-Parameters enthält. - Die verworfenen Methoden
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatundcreateSampleFormat, die zum Instanziieren der KlasseFormatverwendet wurden, wurden entfernt. Verwenden Sie stattdessenFormat.Builder, um Instanzen vonFormatzu erstellen. - Die verworfenen Methoden
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateundcopyWithVideoSizewurden entfernt. Verwenden Sie stattdessenFormat.buildUpon()und Setter-Methoden. - Entfernen Sie das verworfene
ExoPlayer.retry()und verwenden Sie stattdessenprepare(). - Der verworfene
DefaultTrackSelector-Konstruktor ohne Argumente wurde entfernt. Verwenden Sie stattdessenDefaultTrackSelector(Context). - Entfernen Sie den verworfenen
OfflineLicenseHelper-Konstruktor und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Der verworfene
DownloadManager-Konstruktor wurde entfernt. Verwenden Sie stattdessen den Konstruktor, der einExecutorakzeptiert. - Die verworfenen
Cue-Konstruktoren wurden entfernt. Verwenden Sie stattdessenCue.Builder. - Entfernen Sie den verworfenen
OfflineLicenseHelper-Konstruktor und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Vier verworfene
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 verworfene 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.
Diese Version entspricht der ExoPlayer-Version 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. - 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 „Ende des Streams“ zu lesen. (#11079).
- Fügen Sie
- Extraktoren:
- Das Parsen von H.265-SPS in MPEG-TS-Dateien wurde korrigiert, indem die Parsing-Logik wiederverwendet wurde, die bereits von RTSP- und MP4-Extraktoren verwendet wird (#303).
- Text:
- SSA: Unterstützung für UTF-16-Dateien hinzugefügt, wenn sie mit einer Bytereihenfolge-Marke beginnen (#319).
- Sitzung:
- Problem behoben, bei dem
MediaControllerdie verfügbaren Befehle nicht aktualisiert, wenn eine Verbindung zu einer Legacy-MediaSessionCompatbesteht, die ihre Aktionen aktualisiert. - Fehler behoben, der verhinderte, dass
MediaLibraryServicebei einem Aufruf von der System-UI anCallback.onGetLibraryRootmitparams.isRecent == trueauf API 30 null zurückgibt (#355). - Speicherleck von
MediaSessionServiceoderMediaLibraryServicebehoben (#346). - Ein Fehler wurde behoben, bei dem eine kombinierte Aktualisierung von
Timelineund Position in einemMediaSessiondazu führen konnte, dass einMediaControllereinenIllegalStateExceptionauslöste.
- Problem behoben, bei dem
Version 1.0.1
18. April 2021.
androidx.media3:media3-*:1.0.1 ist veröffentlicht. Version 1.0.1 enthält diese Commits.
Diese Version entspricht dem ExoPlayer 2.18.6-Release.
- Core-Bibliothek:
- Überschreibung des Ziel-Livestreams beim Springen zur Standardposition zurücksetzen (#11051).
- Es wurde ein Fehler behoben, durch den leere Beispielstreams in den Medien dazu führen konnten, dass die Wiedergabe hängen blieb.
- Sitzung:
- Fehler behoben, bei dem mehrere identische Warteschlangenelemente, die von einer Legacy-
MediaSessionCompatveröffentlicht wurden, zu einer Ausnahme inMediaControllerführten (#290). - Fehlende Weiterleitung von
MediaSession.broadcastCustomCommandan die alteMediaControllerCompat.Callback.onSessionEventhinzugefügt (#293). - Fehler behoben, bei dem durch den Aufruf von
MediaSession.setPlayerdie verfügbaren Befehle nicht aktualisiert wurden. - Problem behoben, bei dem
TrackSelectionOverride-Instanzen, die von einemMediaControllergesendet wurden, ignoriert wurden, wenn sie auf eine Gruppe mitFormat.metadataverwiesen (#296). - Problem behoben, bei dem
Player.COMMAND_GET_CURRENT_MEDIA_ITEMverfügbar sein muss, um über die Legacy-MediaSessionCompatauf Metadaten zuzugreifen. - Problem behoben, bei dem
MediaSession-Instanzen in einem Hintergrundthread bei Verwendung inMediaSessionServicezu Abstürzen führten (#318). - Ein Problem wurde behoben, bei dem ein MediaButtonReceiver von der Bibliothek deklariert wurde, ohne dass dies von der App beabsichtigt war (#314).
- Fehler behoben, bei dem mehrere identische Warteschlangenelemente, die von einer Legacy-
- DASH:
- Verarbeitung leerer Segmentzeitachsen wurde korrigiert (#11014).
- RTSP:
- Wiederholung mit TCP, wenn die RTSP-Einrichtung mit UDP mit dem RTSP-Fehler 461 „UnsupportedTransport“ fehlschlägt (#11069).
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.
Diese Version entspricht dem ExoPlayer 2.18.5-Release.
Seit 1.0.0-rc02 gibt es keine Änderungen.
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.
Diese Version entspricht dem ExoPlayer 2.18.4-Release.
- 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:
- Video:
- Ordne das HEVC-HDR10-Format
HEVCProfileMain10HDR10stattHEVCProfileMain10zu. - Workaround für ein Geräteproblem bei 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 markiert werden (#10898).
- Leistungsprobleme bei der Frame-Freigabe wurden behoben, die bei der Wiedergabe von Medien mit einer Framerate auftraten, die weit über der Aktualisierungsrate des Displays lag.
- Ordne das HEVC-HDR10-Format
- Streamen:
- Problem mit vorübergehendem
STATE_IDLEbeim Wechsel zwischen Mediendateien behoben (#245).
- Problem mit vorübergehendem
- RTSP:
- Die beim Parsen von ungültigen RTSP-Beschreibungsantwortnachrichten ausgelöste IllegalArgumentException wird abgefangen (#10971).
- Sitzung:
- Es wurde ein Fehler behoben, durch den die Wiedergabe-/Pausetaste für Benachrichtigungen nicht mit dem Player-Status aktualisiert wurde (#192).
- IMA-Erweiterung:
- Es wurde ein Fehler behoben, der verhinderte, dass DAI-Streams ohne Anzeigen gestartet wurden, weil das erste (und im Fall ohne Anzeigen das einzige)
LOADED-Ereignis nicht empfangen wurde.
- Es wurde ein Fehler behoben, der verhinderte, dass DAI-Streams ohne Anzeigen gestartet wurden, weil 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 dem ExoPlayer 2.18.3-Release.
- Core-Bibliothek:
- Die Logik für die Decoderreihenfolge des Renderers wird angepasst, um die Einstellungen von
MediaCodecSelectorbeizubehalten, 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üge
ExoPlayer.Builder.setPlaybackLooperhinzu, um einen vorhandenen Wiedergabe-Thread für eine neue ExoPlayer-Instanz festzulegen. - Löschen von Download-Manager-Hilfsprogrammen zulassen (#10776).
- Fügen Sie
BasePlayer.seekToeinen Parameter hinzu, um auch den Befehl anzugeben, der für die Suche verwendet wird. - Design beim Laden von Drawables auf API 21 und höher verwenden (#220).
ConcatenatingMediaSource2wurde hinzugefügt, um mehrere Mediendateien in einem einzigen Fenster zu kombinieren (#247).
- Die Logik für die Decoderreihenfolge des Renderers wird angepasst, um die Einstellungen von
- Extraktoren:
- Löst eine
ParserExceptionanstelle einerNullPointerExceptionaus, wenn beim Parsen von trak-Atomen eine erforderliche Beispielbeschreibung (stsd) in der Beispieltabelle (stbl) fehlt. - Samples werden beim direkten Springen zu einem Synchronisierungsframe in fMP4 korrekt übersprungen (#10941).
- Löst eine
- Audio:
- Verwende die Bitrate des komprimierten Audioformats, um die Mindestpuffergröße für
AudioTrackbei direkten Wiedergaben (Passthrough) zu berechnen.
- Verwende die Bitrate des komprimierten Audioformats, um die Mindestpuffergröße für
- Text:
- Fehler behoben, bei dem
TextRenderereinen ungültigen (negativen) Index anSubtitle.getEventTimeübergibt, wenn eine Untertiteldatei keine Cues enthält. - SubRip: Unterstützung für UTF-16-Dateien hinzugefügt, wenn sie mit einer Byte-Reihenfolge-Markierung beginnen.
- Fehler behoben, bei dem
- Metadaten:
- Mehrere durch Null getrennte Werte aus ID3-Frames parsen, wie es ID3 v2.4 zulässt.
- Fügen Sie
MediaMetadata.mediaTypehinzu, um den Typ des Inhalts oder des Ordners anzugeben, der durch die Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsableals Ersatz fürMediaMetadata.folderTypehinzu. Der Ordnertyp wird in der nächsten Version eingestellt.
- DASH:
- Vollständiges Parsen für Bildanpassungssätze hinzugefügt, einschließlich Kachelanzahl (#3752).
- UI:
- Das verworfene
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)wurde korrigiert, damit Änderungen an der Sichtbarkeit an den registrierten Listener übergeben werden (#229). - Die Reihenfolge der Steuerelemente des Videoplayers in der Mitte in
PlayerViewwurde korrigiert, wenn ein Layout mit Schreibrichtung von rechts nach links (RTL) verwendet wird (#227).
- Das verworfene
- Sitzung:
- Füge die abstrakte Klasse
SimpleBasePlayerhinzu, um die Implementierung der SchnittstellePlayerfür benutzerdefinierte Player zu erleichtern. - Hilfsmethode zum Konvertieren des Plattform-Sitzungstokens in Media3
SessionTokenhinzugefügt (#171). - Verwenden Sie
onMediaMetadataChanged, um Aktualisierungen der Plattform-Mediensitzung auszulösen (#219). - Die Mediensitzung wurde als Argument von
getMediaButtons()derDefaultMediaNotificationProviderhinzugefügt und es werden unveränderliche Listen zur Klarstellung verwendet (#216). onSetMediaItems-Callback-Listener hinzugefügt, um dieMediaItem-Liste, den Startindex und die Position nach Sitzung zu ändern/festzulegen, bevor sie auf dem Player festgelegt werden (#156).- Die Erkennung von Doppeltippen für Ereignisse von Nicht-Bluetooth-Medientasten wird vermieden (#233).
QueueTimelinewurde robuster gemacht, falls ein fragwürdiger Legacy-Sitzungsstatus vorliegt (#241).
- Füge die abstrakte Klasse
- Metadaten:
- Mehrere durch Null getrennte Werte aus ID3-Frames parsen, wie es ID3 v2.4 zulässt.
- Fügen Sie
MediaMetadata.mediaTypehinzu, um den Typ des Inhalts oder des Ordners anzugeben, der durch die Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsableals Ersatz fürMediaMetadata.folderTypehinzu. Der Ordnertyp wird in der nächsten Version eingestellt.
- Cast-Erweiterung:
- Die Cast SDK-Version wurde auf 21.2.0 aktualisiert.
- IMA-Erweiterung:
- Entferne den Player-Listener von
ImaServerSideAdInsertionMediaSourceim Anwendungsthread, um Threading-Probleme zu vermeiden. - Füge der
ImaServerSideAdInsertionMediaSource.AdsLoader.Builderdas AttributfocusSkipButtonWhenAvailablehinzu, um den Fokus auf den Button „Überspringen“ auf TV-Geräten zu legen, und setze es standardmäßig auf „true“. - Füge der
ImaServerSideAdInsertionMediaSource.AdsLoaderdie MethodefocusSkipButton()hinzu, um programmatisch den Fokus auf die Schaltfläche zum Überspringen zu legen. - IMA SDK-Version auf 3.29.0 aktualisiert.
- Entferne den Player-Listener von
- Demo-App:
- Berechtigung zum Senden von Benachrichtigungen 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 der ExoPlayer-Version 2.18.2.
- Core-Bibliothek:
ExoPlayer.isTunnelingEnabledwurde hinzugefügt, um zu prüfen, ob Tunneling für die aktuell ausgewählten Tracks aktiviert ist (#2518).WrappingMediaSourcehinzugefügt, um das Wrapping eines einzelnenMediaSourcezu vereinfachen (#7279).- Der Back-Buffer wird verworfen, bevor die Wiedergabe aufgrund von unzureichendem verfügbarem Arbeitsspeicher hängen bleibt.
- Schließen Sie den Tracing-Block „doSomeWork“, wenn die Auslagerung aktiviert ist.
- Problem mit dem Sitzungstracking bei schnellem Suchen in
PlaybackStatsListenerbehoben (#180). - Fehlenden
onMediaItemTransition-Callback beim Aufrufen vonseekToNextoderseekToPreviousin einer Playlist mit einem einzelnen Element senden (#10667). - Füge
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-Veröffentlichung zu einem
IllegalStateExceptionführen kann (#10758).
- Build:
- Mindestversion von
compileSdkVersionerzwingen, um Kompilierungsfehler zu vermeiden (#10684). - Vermeiden Sie die Veröffentlichung des Blocks, wenn er in einem anderen Gradle-Build enthalten ist.
- Mindestversion von
- Trackauswahl:
- Andere Tracks als Dolby Vision bevorzugen, wenn das Display Dolby Vision nicht unterstützt. (#8944).
- Downloads:
- Eine potenzielle Endlosschleife in
ProgressiveDownloader, die durch gleichzeitiges Herunterladen und Wiedergeben mit derselbenPriorityTaskManagerverursacht wurde, wurde behoben (#10570). - Downloadbenachrichtigung wird sofort angezeigt (#183).
- Die Anzahl der parallelen Downloadentfernungen wurde auf 1 begrenzt, um die Erstellung übermäßiger Threads zu vermeiden (#10458).
- Eine potenzielle Endlosschleife in
- Video:
- Versuche es mit einem alternativen Decoder für Dolby Vision, wenn das Display Dolby Vision nicht unterstützt. (#9794).
- Audio:
- Verwende
SingleThreadExecutor, umAudioTrack-Instanzen freizugeben und OutOfMemory-Fehler zu vermeiden, wenn mehrere Player gleichzeitig freigegeben werden (#10057). - Fügt
AudioOffloadListener.onExperimentalOffloadedPlaybackfür den AudioTrack-Offload-Status 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 werden auf allen Android-Versionen den Kanalmasken 7.1 bzw. 7.1.4 zugeordnet (#10701).
- Verwende
- Metadaten:
MetadataRendererkann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstelle eine Instanz mitMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean), um anzugeben, ob der Renderer Metadaten frühzeitig oder synchron mit der Player-Position ausgibt.
- DRM:
- Problemumgehung für einen Fehler in der ClearKey-Implementierung von Android 13, bei dem eine nicht leere, aber ungültige Lizenz-URL zurückgegeben wird.
- Fehler
setMediaDrmSession failed: session not openedbeim Wechsel zwischen DRM-Schemas in einer Playlist (z.B. Widevine zu ClearKey) wurde behoben.
- Text:
- CEA-608: Befehle zum Wechseln des Dienstes in Feld 2 werden jetzt korrekt verarbeitet (#10666).
- DASH:
EventStream.presentationTimeOffsetaus Manifesten parsen (#10460).
- UI:
- Aktuelle Überschreibungen des Players verwenden, wie in
TrackSelectionDialogBuildervoreingestellt (#10429).
- Aktuelle Überschreibungen des Players verwenden, wie in
- Sitzung:
- Befehle werden immer in der richtigen Reihenfolge ausgeführt, auch wenn einige eine asynchrone Auflösung erfordern (#85).
- Fügen Sie
DefaultMediaNotificationProvider.Builderhinzu, umDefaultMediaNotificationProvider-Instanzen zu erstellen. Der Builder kann die Benachrichtigungs-ID, die Benachrichtigungskanal-ID und den Benachrichtigungskanalnamen konfigurieren, die vom Anbieter verwendet werden. Fügen Sie außerdem die MethodeDefaultMediaNotificationProvider.setSmallIcon(int)hinzu, um das kleine Symbol für Benachrichtigungen festzulegen. (#104). - Sicherstellen, dass vor
MediaController.release()gesendete Befehle nicht verworfen werden (#99). SimpleBitmapLoaderkann Bitmaps ausfile://-URIs laden (#108).- Behebung einer Assertion, die verhindert, dass
MediaControllerin einem Zeitraum über eine Anzeige springt (#122). - Wenn die Wiedergabe endet, wird die
MediaSessionServiceim Vordergrund beendet und eine Benachrichtigung zum Neustart der Wiedergabe der zuletzt wiedergegebenen Mediendatei wird angezeigt (#112). - Starten Sie keinen Dienst im Vordergrund mit einem ausstehenden Intent zum Pausieren (#167).
- Manuelles Ausblenden des „Badge“, das mit der von
DefaultNotificationProvidererstellten Benachrichtigung verknüpft ist, in API 26 und API 27 (das Badge wird in API 28 und höher automatisch ausgeblendet) (#131). - Fehler behoben, bei dem eine zweite Binder-Verbindung von einer Legacy-MediaSession zu einem Media3-MediaController IllegalStateExceptions verursacht (#49).
- RTSP:
- IMA:
- Zeitlimit für das Laden von Anzeigeninformationen hinzugefügt, um Fälle zu verarbeiten, in denen das IMA SDK beim Laden einer Anzeige hängen bleibt (#10510).
- Verhindern, dass Mid-Roll-Anzeigen übersprungen werden, wenn zum Ende des Inhalts gesprungen wird (#10685).
- Die Fensterdauer für Livestreams mit serverseitig eingefügten Anzeigen, z. B. IMA DAI, wird korrekt berechnet (#10764).
- FFmpeg-Erweiterung:
- Neu erforderliche Flags zum Verknüpfen von FFmpeg-Bibliotheken mit NDK 23.1.7779620 und höher hinzugefügt (#9933).
- AV1-Erweiterung:
- CMake-Version aktualisiert, um Inkompatibilitäten mit den neuesten Android Studio-Releases zu vermeiden (#9933).
- Cast-Erweiterung:
- Implementiere
getDeviceInfo(), umCastPlayeridentifizieren zu können, wenn die Wiedergabe mit einemMediaControllergesteuert wird (#142).
- Implementiere
- Transformer:
- Muxer-Watchdog-Timer hinzugefügt, um zu erkennen, wenn die Generierung eines Ausgabe-Samples zu langsam ist.
- Entfernen Sie nicht mehr unterstützte Symbole:
Transformer.Builder.setOutputMimeType(String)entfernen. Diese Funktion wurde entfernt. Der MIME-Typ ist immer MP4, wenn der Standard-Muxer verwendet wird.
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.
Diese Version entspricht dem ExoPlayer 2.18.1-Release.
- Core-Bibliothek:
- Achten Sie darauf, dass das Ändern von
ShuffleOrdermitExoPlayer.setShuffleOrderzu einem Aufruf vonPlayer.Listener#onTimelineChangedmitreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDführt (#9889). - Bei progressiven Medien werden nur ausgewählte Tracks in die gepufferte Position aufgenommen (#10361).
- Benutzerdefinierter Logger für alle ExoPlayer-Logausgaben zulassen (#9752).
- Die Implementierung von
setDataSourceFactoryinDefaultMediaSourceFactorywurde korrigiert, da sie in einigen Fällen nicht funktionierte (#116).
- Achten Sie darauf, dass das Ändern von
- Extraktoren:
- DASH:
- ClearKey-Lizenz-URL aus Manifesten parsen (#10246)
- UI:
- TalkBack muss die aktuell aktive Geschwindigkeitsoption im Menü „Wiedergabesteuerung“ ansagen (#10298).
- RTSP:
- Verarbeitung fragmentierter VP8-Pakete hinzugefügt (#110).
- Leanback-Erweiterung:
- Auf
playWhenReady-Änderungen inLeanbackAdapterwarten (10420).
- Auf
- Streamen:
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 dem ExoPlayer-Release 2.18.0.
- Core-Bibliothek:
- Unterstützung für die Android-Plattformdiagnose über
MediaMetricsManageraktivieren. ExoPlayer leitet Wiedergabeereignisse und Leistungsdaten an die Plattform weiter, die dann Systemleistungs- und Debugging-Informationen auf dem Gerät bereitstellt. Diese Daten können auch von Google erhoben werden, wenn die Weitergabe von Nutzungs- und Diagnosedaten vom Nutzer des Geräts aktiviert wurde. Apps können mitExoPlayer.Builder.setUsePlatformDiagnostics(false)die Weitergabe von Daten an die Plattformdiagnose für ExoPlayer deaktivieren. - Fehler behoben, bei dem Tracks bei Verwendung von
MergingMediaSourcezu oft zurückgesetzt werden, z. B. beim Sideloading von Untertiteln und beim Ändern des ausgewählten Untertitels während der Wiedergabe (#10248). - Die Erkennung des 5G-NSA-Netzwerktyps auf API 29 und 30 wird beendet. Bei diesen Wiedergaben wird von einem 4G-Netzwerk ausgegangen.
- Die Übergabe von
nullanMediaSource.Factory.setDrmSessionManagerProviderundMediaSource.Factory.setLoadErrorHandlingPolicynicht zulassen. Instanzen vonDefaultDrmSessionManagerProviderundDefaultLoadErrorHandlingPolicykönnen bei Bedarf explizit übergeben werden. - Füge
MediaItem.RequestMetadatahinzu, um Metadaten darzustellen, die zum Abspielen von Medien erforderlich sind, wenn die genaueLocalConfigurationnicht bekannt ist. Entfernen Sie auchMediaMetadata.mediaUrl, da dies jetzt inRequestMetadataenthalten ist. - Fügen Sie
Player.Command.COMMAND_SET_MEDIA_ITEMhinzu, damit Spieler ein einzelnes Element festlegen können.
- Unterstützung für die Android-Plattformdiagnose über
- Trackauswahl:
- Reduzieren Sie die Klasse
TrackSelectionOverridesaufTrackSelectionParametersund stufen SieTrackSelectionOverridezu einer Klasse der obersten Ebene hoch. - Benennen Sie
TracksInfoinTracksundTracksInfo.TrackGroupInfoinTracks.Groupum.Player.getCurrentTracksInfoundPlayer.Listener.onTracksInfoChangedwurden ebenfalls inPlayer.getCurrentTracksundPlayer.Listener.onTracksChangedumbenannt. Dazu gehört auch, dass der MethodennamePlayer.Listener.onTracksChangednicht mehr verworfen wird, aber mit anderen Parametertypen. - Ändern Sie
DefaultTrackSelector.buildUponParametersundDefaultTrackSelector.Parameters.buildUponso, dassDefaultTrackSelector.Parameters.Builderanstelle des verworfenenDefaultTrackSelector.ParametersBuilderzurückgegeben wird. - Fügen Sie
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitieshinzu, das standardmäßig aktiviert ist. Wenn diese Option aktiviert ist, bevorzugt derDefaultTrackSelectorAudiotracks, deren Kanalanzahl die Ausgabefunktionen des Geräts nicht überschreitet. Auf Mobilgeräten bevorzugtDefaultTrackSelectorStereo-/Mono-Formate gegenüber Mehrkanal-Audioformaten, 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 Audioräumlichkeit unterstützen, derDefaultTrackSelectorauf Änderungen der Spatializer-Eigenschaften überwacht und eine neue Trackauswahl ausgelöst. Geräte mit einemtelevision-UI-Modus sind von diesen Einschränkungen ausgenommen und das Format mit der höchsten Kanalanzahl wird bevorzugt. Damit diese Funktion aktiviert werden kann, muss dieDefaultTrackSelector-Instanz mit einemContexterstellt werden.
- Reduzieren Sie die Klasse
- Video:
DummySurfaceinPlaceholderSurfaceumbenennen.- AV1-Unterstützung für
MediaCodecVideoRenderer.getCodecMaxInputSizehinzugefügt.
- Audio:
- Verwenden Sie den LG AC3-Audiodecoder, der einen nicht standardmäßigen MIME-Typ bewirbt.
- Der Rückgabetyp von
AudioAttributes.getAudioAttributesV21()wurde vonandroid.media.AudioAttributesin eine neueAudioAttributesV21-Wrapper-Klasse geändert, um eine langsame ART-Überprüfung bei API < 21 zu verhindern. - Die Plattform (API 29+) wird abgefragt oder die Anzahl der Audiocodierungskanäle für Audio-Passthrough wird angenommen, wenn die Anzahl der Audioformate nicht festgelegt ist. Dies ist bei der HLS-Vorbereitung ohne Chunks der Fall (10204).
- Konfiguriere
AudioTrackmit der KanalmaskeAudioFormat.CHANNEL_OUT_7POINT1POINT4, wenn der Decoder 12-Kanal-PCM-Audio ausgibt (#10322).
- DRM
- Die DRM-Sitzung wird jetzt immer korrekt aktualisiert, wenn unmittelbar nach einer Formatänderung gesucht wird (10274).
- Text:
- Ändern Sie
Player.getCurrentCues()so, dassCueGroupanstelle vonList<Cue>zurückgegeben wird. - SSA: Unterstützung der Stileinstellung
OutlineColour, wennBorderStyle == 3(d.h.OutlineColourlegt den Hintergrund des Cues fest) (#8435). - CEA-708: Daten in mehrere Dienstblöcke parsen und Blöcke ignorieren, die nicht mit der aktuell ausgewählten Dienstnummer verknüpft sind.
RawCcExtractorwurde entfernt, da es nur zur Verarbeitung eines Google-internen Untertitelformats verwendet wurde.
- Ändern Sie
- Extraktoren:
- UI:
- Fehler bei der Übermittlung von Ereignissen an
OnClickListeners, die aufPlayerViewfestgelegt sind, wennuseController=false(#9605). Außerdem wurde die Bereitstellung von Ereignissen anOnLongClickListenerfür alle Ansichtskonfigurationen korrigiert. - Fehler behoben, bei dem eine Sequenz von Touch-Events, die die Grenzen von
PlayerViewvorACTION_UPverlassen, fälschlicherweise als Klick behandelt wurde (#9861). - Problem mit der Bedienungshilfe
PlayerViewbehoben, bei dem durch Tippen die Wiedergabe umgeschaltet wurde, anstatt die Steuerelemente auszublenden (#8627). - Schreiben Sie
TrackSelectionViewundTrackSelectionDialogBuilderso um, dass sie mit derPlayer-Schnittstelle statt mitExoPlayerfunktionieren. 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 Trackauswahl von
PlayerViewangezeigt und ein geeigneter erzwungener Text-Track bleibt ausgewählt, wenn „Keine“ ausgewählt ist (#9432).
- Fehler bei der Übermittlung von Ereignissen an
- DASH:
- Anzahl der Kanäle aus DTS-
AudioChannelConfiguration-Elementen parsen. Dadurch wird die Audio-Passthrough-Funktion für DTS-Streams wieder aktiviert (#10159). - Die Übergabe von
nullanDashMediaSource.Factory.setCompositeSequenceableLoaderFactorywird nicht zugelassen. Instanzen vonDefaultCompositeSequenceableLoaderFactorykönnen bei Bedarf explizit übergeben werden.
- Anzahl der Kanäle aus DTS-
- HLS:
- Fallback auf die Vorbereitung mit Chunks, wenn das Attribut CODECS der Playlist den Audio-Codec nicht enthält (#10065).
- Die Übergabe von
nullanHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryundHlsMediaSource.Factory.setPlaylistTrackerFactorywird nicht zugelassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryoder ein Verweis aufDefaultHlsPlaylistTracker.FACTORYkönnen bei Bedarf explizit übergeben werden.
- Smooth Streaming:
- Die Übergabe von
nullanSsMediaSource.Factory.setCompositeSequenceableLoaderFactorywird nicht zugelassen. Instanzen vonDefaultCompositeSequenceableLoaderFactorykönnen bei Bedarf explizit übergeben werden.
- Die Übergabe von
- RTSP:
- RTP-Reader für H263 hinzugefügt (#63).
- RTP-Reader für MPEG4 hinzugefügt (#35).
- RTP-Reader für HEVC hinzugefügt (#36).
- RTP-Reader für AMR hinzufügen. Derzeit werden nur einkanalige, nicht verschachtelte AMR-Streams unterstützt. Zusammengesetzte AMR-RTP-Nutzlast wird nicht unterstützt. (#46)
- RTP-Reader für VP8 hinzugefügt (#47).
- RTP-Reader für WAV hinzugefügt (#56).
- RTSP-Header für die Standardautorisierung korrigieren. (#9544).
- Die Prüfung obligatorischer SDP-Felder wurde eingestellt, da ExoPlayer sie nicht benötigt (#10049).
- Auslösen einer geprüften Ausnahme beim Parsen des RTSP-Timings (#10165).
- RTP-Reader für VP9 hinzugefügt (#47).
- RTP-Reader für OPUS hinzugefügt (#53).
- Datenquellen:
DummyDataSourceinPlaceholderDataSourceumbenennen.- Problemumgehung für die OkHttp-Unterbrechungsbehandlung.
- 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
BitmapLoaderundSimpleBitmapLoaderhinzu, um Bilder von Kunstwerken herunterzuladen. - Fügen Sie
MediaSession.setCustomLayout()hinzu, um die Abwärtskompatibilität mit der Legacy-Sitzung zu gewährleisten. - Fügen Sie
MediaSession.setSessionExtras()hinzu, um die Funktionsparität mit der Legacy-Sitzung zu gewährleisten. - Benennen Sie
MediaSession.MediaSessionCallbackinMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackinMediaLibrarySession.CallbackundMediaSession.Builder.setSessionCallbackinsetCallbackum. - NPE in
MediaControllerImplLegacybehoben (#59). - Aktualisierung der Positionsinformationen der Sitzung in der Zeitachse (#51).
- NPE in
MediaControllerImplBasenach Freigabe des Controllers behoben (#74).
- Ersetzen Sie
- Anzeigenwiedergabe/IMA:
- Die Abrufhäufigkeit für Anzeigen wurde von alle 100 ms auf alle 200 ms verringert, um den Empfehlungen des Media Rating Council (MRC) zu entsprechen.
- FFmpeg-Erweiterung:
- CMake-Version auf
3.21.0+aktualisiert, um einen CMake-Fehler zu vermeiden, der dazu führt, dass die Gradle-Synchronisierung von Android Studio fehlschlägt (#9933).
- CMake-Version auf
- Entfernen Sie nicht mehr unterstützte Symbole:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)entfernen. Verwenden Sie stattdessenPlayer.Listener.onTracksChanged(Tracks).- Entfernen Sie
Player.getCurrentTrackGroupsundPlayer.getCurrentTrackSelections. Verwenden Sie stattdessenPlayer.getCurrentTracks. Sie können auch weiterhinExoPlayer.getCurrentTrackGroupsundExoPlayer.getCurrentTrackSelectionsverwenden, obwohl diese Methoden weiterhin verworfen werden. - Entfernen Sie die Konstanten
DownloadHelper,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTundDEFAULT_TRACK_SELECTOR_PARAMETERS. Verwenden Sie nach Möglichkeit stattdessengetDefaultTrackSelectorParameters(Context)und andernfallsDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT. - Entfernen Sie den Konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory). Verwenden Sie stattdessenDefaultTrackSelector(Context, ExoTrackSelection.Factory). Transformer.Builder.setContextentfernen. DerContextsollte stattdessen an denTransformer.Builder-Konstruktor übergeben werden.
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 dem ExoPlayer 2.17.1-Release.
- Audio:
- Fehler beim Prüfen der Audiofunktionen für Dolby Atmos (E-AC3-JOC) in HLS behoben.
- Extraktoren:
- FMP4: Es wurde ein Problem behoben, bei dem emsg-Beispielmetadaten in der falschen Reihenfolge für Streams ausgegeben werden konnten, die sowohl v0- als auch v1-emsg-Atome enthalten (#9996).
- Text:
- Die Interaktion von
SingleSampleMediaSource.Factory.setTrackIdundMediaItem.SubtitleConfiguration.Builder.setIdwurde korrigiert, um das FeldSubtitleConfigurationzu priorisieren und auf den WertFactoryzurückzugreifen, wenn es nicht festgelegt ist (#10016).
- Die Interaktion von
- Anzeigenwiedergabe:
- Behebung von Audiounterbrechungen zwischen Anzeigenzeiträumen in Live-HLS-SSAI-Streams.
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 dem ExoPlayer-Release 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 an von ihnen erstellteMediaCodecRenderer-Instanzen übergeben können. - Die ICY-Headerfelder
nameundgenrewerden anMediaMetadata.stationbzw.MediaMetadata.genreweitergegeben, damit sie die App überPlayer.Listener.onMediaMetadataChanged()erreichen (#9677). - Entfernen Sie Nullschlüssel aus
DefaultHttpDataSource#getResponseHeaders. - Warten und wiederholen, wenn das Erstellen einer
MediaCodec-Instanz fehlschlägt. 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 vonMediaCodecabrufen können. (#9766). - Fehler bei der Maven-Abhängigkeitsauflösung behoben (#8353).
- Deaktivieren der automatischen Geschwindigkeitsanpassung für Livestreams, die weder Funktionen mit niedriger Latenz noch eine Nutzereinstellung für die Geschwindigkeit haben (#9329).
DecoderCounters#inputBufferCountinqueuedInputBufferCountumbenennen.SimpleExoPlayer.renderersals privat kennzeichnen. Auf Renderer kann überExoPlayer.getRendererzugegriffen werden.- Einige konstante
AnalyticsListener.EventFlags-Werte wurden aktualisiert, um mit den Werten inPlayer.EventFlagsübereinzustimmen. AnalyticsCollectorin eine Schnittstelle und eine Standardimplementierung aufteilen, damit es von R8 entfernt werden kann, wenn eine App es nicht benötigt.
- Füge die geschützte Methode
- Trackauswahl:
- Unterstützung für bevorzugte Videorollen-Flags bei der Trackauswahl (#9402).
- Die Logik für die Auswahl von Videotracks wurde aktualisiert, sodass bevorzugte MIME-Typen und Rollen-Flags berücksichtigt werden, wenn mehrere Videotracks für die Anpassung ausgewählt werden (#9519).
- Die Logik für die Auswahl von Video- und Audiotracks wurde aktualisiert, sodass für adaptive Auswahlen nur Formate mit demselben Decoder- und Hardwaresupport ausgewählt werden (#9565).
- Die Logik für die Auswahl von Videotracks wurde aktualisiert, sodass effizientere Codecs bevorzugt werden, wenn mehrere Codecs von primären, hardwarebeschleunigten Decodern unterstützt werden (#4835).
- Bevorzuge Einstellungen für Audioinhalte (z. B. den Standard-Audiotrack oder einen Track, der der Sprache des Systems entspricht) gegenüber technischen Einschränkungen bei der Trackauswahl (z. B. bevorzugter MIME-Typ oder maximale Kanalanzahl).
- Problem bei der Trackauswahl behoben, bei dem das Überschreiben einer Trackgruppe andere Trackgruppen desselben Typs nicht deaktiviert hat (#9675).
- Problem bei der Trackauswahl behoben, bei dem eine Mischung aus nicht leeren und leeren Tracküberschreibungen nicht korrekt angewendet wurde (#9649).
- Doppelte
TrackGroups in einemTrackGroupArrayverbieten.TrackGroups können immer unterscheidbar gemacht werden, indem imTrackGroup-Konstruktor eineidfestgelegt wird. Dadurch wird ein Absturz behoben, der auftrat, wenn die Wiedergabe fortgesetzt wurde, nachdem die App mit einer aktiven Track-Überschreibung in den Hintergrund verschoben wurde (#9718). - Die Logik in
AdaptiveTrackSelectionwurde geändert, um eine Qualitätssteigerung bei ausreichender Netzwerkbandbreite zu ermöglichen, auch wenn die Wiedergabe sehr nahe am Live-Edge ist (#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.
- Ändern Sie
AudioCapabilities-APIs so, dass explizitAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESanstelle vonnullübergeben werden muss. - Anpassung der Berechnung der
AudioTrack-Puffergröße durch Einfügen einesAudioTrackBufferSizeProviderinDefaultAudioSinkzulassen. (#8891). - Wiederholen Sie die Erstellung von
AudioTrack, wenn die angeforderte Puffergröße > 1 MB war. (#9712).
- Extraktoren:
- Text:
- Feld
MediaItem.SubtitleConfiguration.idhinzugefügt, das an das FeldFormat.iddes Untertiteltracks weitergegeben wird, der aus der Konfiguration erstellt wurde (#9673). - Grundlegende Unterstützung für WebVTT-Untertitel in Matroska-Containern hinzugefügt (#9886).
- Verhindern, dass
Cea708Decodermehr als die deklarierte Größe eines Dienstblocks liest.
- Feld
- DRM:
- Entfernen Sie
playbackLooperausDrmSessionManager.(pre)acquireSession. Wenn einDrmSessionManagervon einer App in einem benutzerdefiniertenMediaSourceverwendet wird, muss stattdessen derplaybackLooperanDrmSessionManager.setPlayerübergeben werden.
- Entfernen Sie
- Anzeigenwiedergabe/IMA:
- Unterstützung für die dynamische Anzeigenbereitstellung (DAI) im IMA SDK hinzugefügt (#8213).
AdPlaybackStatewurde eine Methode hinzugefügt, mit der eine Anzeigengruppe zurückgesetzt werden kann, damit sie noch einmal abgespielt werden kann (#9615).- Erzwingen der Wiedergabegeschwindigkeit von 1,0 während der Anzeigenwiedergabe (#9018).
- Ein Problem wurde behoben, bei dem eine Anzeigengruppe, die nicht geladen werden konnte, zu einem sofortigen Zurücksetzen der Wiedergabe führte (#9929).
- UI:
- DASH:
- Geparste erforderliche und zusätzliche Properties wurden zu
Representationhinzugefügt (#9579). - Unterstützung der Track-Rolle
forced-subtitle(#9727). - Die Trackrolle
mainwird nicht mehr alsC.SELECTION_FLAG_DEFAULTinterpretiert. - Die Logik für den URL-Ausschluss von Basis-URLs für Manifeste, die den DVB-Namespace nicht deklarieren, wurde korrigiert (#9856).
- Unterstützung relativer
MPD.Location-URLs (#9939).
- Geparste erforderliche und zusätzliche Properties wurden zu
- HLS:
Format.labelfür reine Audio-HLS-Streams korrekt füllen (#9608).- Verwenden Sie standardmäßig die Vorbereitung ohne Chunks, um die Startzeit zu verbessern. Wenn Ihre Wiedergabeversionen gemuxte Untertiteltracks enthalten, die nicht in der Masterplaylist deklariert sind, sollten Sie sie der Masterplaylist hinzufügen, damit sie für die Wiedergabe verfügbar sind, oder die Vorbereitung ohne Chunks mit
HlsMediaSource.Factory.setAllowChunklessPreparation(false)deaktivieren. - Unterstützung der Keyframe-genauen Suche in HLS (#2882).
- RTSP:
- Es wurde eine Client-API bereitgestellt, um die für eine Serververbindung verwendete
SocketFactoryzu überschreiben (#9606). - Die Authentifizierungsmethode DIGEST wird gegenüber BASIC bevorzugt, wenn beide vorhanden sind (#9800).
- Behandlung, wenn das RTSP-Track-Timing nicht verfügbar ist (#9775).
- Ungültige RTP-Info-Headerwerte werden ignoriert (#9619).
- Es wurde eine Client-API bereitgestellt, um die für eine Serververbindung verwendete
- Transformer:
- Die erforderliche Mindest-API-Version wurde 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. - Ermöglicht die Registrierung mehrerer Listener.
- Es wurde ein Problem behoben, bei dem Transformer hängen blieb, wenn die Codecausgabe teilweise gelesen wurde.
- Potenzielle NPE in
Transformer.getProgressbehoben, wenn beim Freigeben des Muxers ein Fehler auftritt. - Fügen Sie eine Demo-App zum Anwenden von Transformationen hinzu.
- MediaSession-Erweiterung:
- Standardmäßig wird die Playlist jetzt beim Beenden von
MediaSessionConnectorgelöscht. Apps, die die Playlist beibehalten möchten, könnensetClearMediaItemsOnStop(false)auf dem Connector aufrufen.
- Standardmäßig wird die Playlist jetzt beim Beenden von
- Cast-Erweiterung:
- FFmpeg-Erweiterung:
build_ffmpeg.shvon den Binärdienstprogrammen von LLVM anstelle von denen von GNU abhängig machen (#9933).
- Kompatibilität mit Android 12:
- Aktualisieren Sie die Cast-Erweiterung, damit sie von
com.google.android.gms:play-services-cast-framework:20.1.0abhängt. Frühere Versionen vonplay-services-cast-frameworksind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind, und stürzen beim Erstellen vonPendingIntents mit einemIllegalArgumentExceptionab (#9528).
- Aktualisieren Sie die Cast-Erweiterung, damit sie von
- Entfernen Sie nicht mehr unterstützte Symbole:
Player.EventListenerentfernen. Verwenden Sie stattdessenPlayer.Listener.- Entfernen Sie
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryundMediaSourceFactory#setDrmUserAgent. Verwenden Sie stattdessenMediaSourceFactory#setDrmSessionManagerProvider. MediaSourceFactory#setStreamKeysentfernen. Verwenden Sie stattdessenMediaItem.Builder#setStreamKeys.MediaSourceFactory#createMediaSource(Uri)entfernen. Verwenden Sie stattdessenMediaSourceFactory#createMediaSource(MediaItem).- Entfernen Sie
setTagausDashMediaSource,HlsMediaSourceundSsMediaSource. Verwenden Sie stattdessenMediaItem.Builder#setTag. DashMediaSource#setLivePresentationDelayMs(long, boolean)entfernen. Verwenden SieMediaItem.Builder#setLiveConfigurationundMediaItem.LiveConfiguration.Builder#setTargetOffsetMs, um das Manifest zu überschreiben, oderDashMediaSource#setFallbackTargetLiveOffsetMs, um einen Fallback-Wert anzugeben.(Simple)ExoPlayer.setThrowsWhenUsingWrongThreadentfernen. Die Thread-Erzwingung kann nicht mehr deaktiviert werden.- Entfernen Sie
ActionFileundActionFileUpgradeUtil. Verwenden Sie ExoPlayer 2.16.1 oder eine frühere Version, um mitActionFileUpgradeUtilLegacy-Aktionsdateien inDefaultDownloadIndexzusammenzuführen. ProgressiveMediaSource#setExtractorsFactoryentfernen. Verwenden Sie stattdessen den KonstruktorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).- 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 den KonstruktorDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModeundDefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - Entfernen Sie alle öffentlichen
CronetDataSource-Konstruktoren. Verwenden Sie stattdessenCronetDataSource.Factory.
- Ändern Sie die folgenden
IntDefsnur in@Target(TYPE_USE). Dies kann die Kompilierung von Verwendungen in Kotlin beeinträchtigen. Das Problem lässt sich beheben, indem die Annotation verschoben wird, um den Typ (Int) zu annotieren.@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 die neue Heimat für Medienunterstützungsbibliotheken, einschließlich ExoPlayer. Die erste Alphaversion enthält frühe, funktionale Implementierungen von Bibliotheken für die Implementierung von Medienanwendungsfällen, darunter:
- ExoPlayer, ein Mediaplayer auf Anwendungsebene für Android, der sich leicht anpassen und erweitern lässt.
- Mediensitzungsfunktionen zum Anzeigen und Steuern von Wiedergaben. 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 zur Verwendung mit ExoPlayer verpacken, z. B. das Einfügen von Anzeigen über das IMA SDK.
Weitere Informationen findest du 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 zu pflegen und zu veröffentlichen, damit Entwickler Zeit haben, ihre Apps zu Media3 zu migrieren.
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 wird eine direkte Integration zwischen Playern und Mediensitzungen ermöglicht, ohne dass eine Adapter-/Connector-Klasse verwendet werden muss.