Media3
| Letzte Aktualisierung | Stabile Release | Releasekandidat | Beta-Release | Alpha-Release |
|---|---|---|---|---|
| 21. Oktober 2026 | 1.11.1 | - | - | 1.12.0-alpha01 |
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-alpha01
21. Oktober 2026
Version 1.12.0-alpha01 enthält die folgenden Commits.
- Common Library:
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 Block 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 die
AdPlaybackStatefür jeden Zeitraum aufteilen und versetzen. - Race-Bedingung in
PreCacheHelperbehoben, bei der das Abbrechen einer laufenden Vorbereitungsanfrage trotzdem Hintergrunddownloads starten konnte. - Begrenzen 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ätzlicher Zwischenspeicherung 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
AudioTrack-Wiedergabekopfs fälschlicherweise als Ganzzahlüberlauf behandelt werden konnte, was dazu führte, dass die Wiedergabe beim Zwischenspeichern ins Stocken geriet (#3407). - Experimentelle
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean)entfernen. - Vermeidung unnötiger erneuter Aktivierungen des Renderers und von Störungen bei der Rückkehr von Interstitials oder Anzeigen zu Inhalten, die am Ende abgeschnitten wurden (#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 auf einen nicht vorbereiteten Medienzeitraum umgestellt hat, wennFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONaktiviert ist. - Es wurde ein Problem behoben, bei dem Videoframes während der dynamischen Planung unerwartet übersprungen oder verworfen werden konnten, wenn
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSaktiviert war. - Ein
ArrayIndexOutOfBoundsExceptionin Analytics-Listenern wurde behoben, der auftrat, wenn die Wiedergabe während einer Anzeige in einem Livestream beendet 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 einer Suche (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 Ladeabschluss 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. - Frame-Drops in Kompositionen mit mehreren Sequenzen, die durch Zeitstempelquantisierung oder Rundungsabweichungen verursacht werden, können behoben werden, indem bei der Frame-Aggregation der Frame mit dem nächstgelegenen Zeitstempel ausgewählt wird. 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 der Konfiguration der Framerate der Videoframe-Aggregation mit
Composition.Builder.setVideoFrameAggregationParametersfür Exportworkflows. - Frame-Drops in Kompositionen mit mehreren Sequenzen, die durch Zeitstempelquantisierung oder Rundungsabweichungen verursacht werden, können behoben werden, indem bei der Frame-Aggregation der Frame mit dem nächstgelegenen Zeitstempel ausgewählt wird. 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 der Konfiguration der Framerate der Videoframe-Aggregation mit
- Titelauswahl:
- Es wurde ein Problem 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 ist (#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 der GOP-internen Beispielabhängigkeit 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öhenangaben behoben, umMp4LocationDatazu füllen. 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 einen negativenbaseMediaDecodeTimecodiert (#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:
mebx-Boxen mit zeitgesteuerten Metadatentracks inMp4ExtractorundFragmentedMp4Extractorparsen. Tracks mit einemit35-Schlüssel werden alsMimeTypes.APPLICATION_ITUT_T35angezeigt (wodurch die HAGC-Wiedergabe aktiviert 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 Dekodierungsfehlern 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-Boxed-Timed-Metadaten-Tracks inMediaExtractorCompatalsMimeTypes.APPLICATION_MEBX.
- Unterstützung für das Abrufen von XMP-Metadaten aus MP4-Dateien mit
- Prüf-Frame:
- Behebung des Problems, dass beim Extrahieren von Ultra-HDR-Frames mit
FrameExtractorFarben mit großem Farbraum (BT.2020) im SDR-Basisbild abgeschnitten werden. Farben außerhalb des Farbraums werden jetzt sanft in den sRGB-Farbraum komprimiert, anstatt abgeschnitten zu werden.
- Behebung des Problems, dass beim Extrahieren von Ultra-HDR-Frames mit
- Audio:
- Problemumgehung für Geräte hinzugefügt, die
android.media.AudioDeviceCallbackim falschen Thread aufrufen (#3386). - Potenzielle festhängende Wiedergaben nach Titelübergängen mit komprimiertem Offload wurden behoben.
- Problem auf Amazon Fire TV-Sticks umgehen, bei dem AC-3-Audio bei Übergängen zwischen Zeiträumen 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 (#2576).
- Es wurde ein Problem behoben, bei dem die Aktualisierungen der lückenlosen Verzögerung und des Padding bei dynamischem Offload während der Titelübergänge auf den eingehenden Titel und nicht auf den wiedergegebenen Titel angewendet wurden.
- Das End-Padding des Encoders wird bei einzelnen Streams und dem letzten Stream in einer Playlist gekürzt, zusätzlich zu den 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 von eigenständigen SubRip-Untertiteln 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 Box
tfdt(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 vor allen anderen Beispielen geschrieben wurde. - 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ügen Sie
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 Absturzes von
SecurityExceptionbeim Erstellen oder Freigeben einesMediaSessionauf Geräten, die strengePendingIntent-Limits erzwingen. - Ein Problem wurde 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 ein pausiertes Legacy-MediaSessionCompateinen nicht unterstütztenonPrepareFrom*-Callback anstelle vononPlayFrom*oderonPlay()ohne erneute Initialisierung der angeforderten Mediendatei auslösen konnte. - Fehlerbehebung bei
NullPointerExceptionin der Legacy-Version vonMediaBrowserbeim Empfang einer benutzerdefinierten Befehlsantwort (#3432). IllegalArgumentException-Absturz beim Empfang von Legacy-Metadaten mit doppelten Schlüsseln im zugrunde liegendenBundlebehoben.- Ausgehende
MediaControllerCompat.TransportControls-Aufrufe, die innerhalb derselbenLooper-Iteration beim Steuern eines altenMediaSessionCompaterfolgen, werden zusammengefasst. Wenn Sie beispielsweisesetMediaItem,prepareundplayzusammen aufrufen, wird jetzt ein einzelneronPlayFrom*-Callback gesendet.
- Fügen Sie
- UI:
- Fehler bei der Positionierung von Satzzeichen in RTL-Untertiteln und bei der Beibehaltung des Span-Bereichs behoben, 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üge dem
media3-ui-compose-Modul die KlasseCuesStateund die komponierbare FunktionrememberCuesStatehinzu, 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
showArtworkzuPresentationStatehinzugefügt und damit das Rendering des bereitgestellten optionalenartwork-Kompositionselements inContentFrameundPlayerzeitlich gesteuert. Fügen Sie dasArtwork-Composable hinzu, das als Standardwert für denartwork-Slot verwendet werden soll. - Fügen Sie
PlayPauseButtonStateneue Felder hinzu (showBuffering,showRetry,showReplay) und verwenden Sie sie inPlayPauseButton, um mehr Symbole und eine Pufferanzeige zu rendern. - Die Klasse
PlaybackStatewurde hinzugefügt, um die Beobachtung des benutzerdefinierten Wiedergabestatus zu ermöglichen, undBufferingIndicatorwurde als schaltflächenunabhängige Komponente eingeführt. - 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 den Player oder die Sichtbarkeit der Steuerelemente nicht mehr 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-UI in
ProgressSlider,ProgressStateWithTickCountundProgressStateWithTickIntervalhinzugefügt, indemisLiveundliveOffsetMsverfügbar gemacht werden.LiveButton-Composable zumedia3-ui-compose-material3hinzugefügt (#2213).
- Ktor-Erweiterung:
- Ein Problem wurde behoben, bei dem
KtorDataSourceVerbindungsfehler während des Streams als Ende der Eingabe behandeln konnte, anstatt eineHttpDataSourceExceptionauszugeben (#3460).
- Ein Problem wurde behoben, bei dem
- HLS-Erweiterung:
VIDEO-RANGE(PQundHLG) aufEXT-X-STREAM-INFundEXT-X-I-FRAME-STREAM-INFinFormat.colorInfoparsen (#3441).NullPointerExceptionbeim Parsen von MPEG-TS-EXT-X-MAP-Initialisierungssegmenten mit PES-Medien-Samples wurde behoben (#3456).- Regression behoben, bei der
Format.idundFormat.metadatafür exponierte HLS-Tracksnullwaren (#3402). - Anzeigen mit Asset-Listen auf
X-PLAYOUT-LIMITkürzen und diejenigen überspringen, die vollständig außerhalb des Limits liegen. Den Offset für die Fortsetzung des Inhalts auf 0 setzen, 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 Fortsetzen 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 Bereitstellung 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. - Problem behoben, bei dem schnelles Scrubbing fälschlicherweise den TCP-Protokoll-Fallback-Mechanismus auslösen konnte.
- Es wurde ein
IllegalStateException-Absturz 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. - Es wurde ein Problem behoben, bei dem das Zurückspulen während eines bereits ausstehenden Suchvorgangs zu Audioausfällen und zum Einfrieren der Videowiedergabe führen konnte.
- Ein Problem wurde 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 Padding zum Verwerfen ignoriert wurde, wenn das Pre-Skip-Padding und das Padding zum Verwerfen 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). ArrayIndexOutOfBoundsExceptioninRemoteCastPlayerwurde korrigiert, 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ängerwarteschlange 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. während 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 für die Sitzung, um die Auswahl von Untertiteln und Audiotracks beim Streamen 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
minSdkvon Gradle auf 24.
- Erhöhen Sie
Version 1.11.0
1.11.1
10. September 2026
- ExoPlayer:
- Verschiebe 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. - Ein Problem mit der Wiedergabe wurde behoben, das beim Vorwärmen eines nicht übergehenden sekundären Renderers auftrat.
- 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. - Fehler in
ArrayIndexOutOfBoundsExceptionbehoben, bei dem die Standardposition durch eine Aktualisierung der Live-Zeitachse über eine serverseitig eingefügte Anzeige, die gerade wiedergegeben wird, hinaus verschoben wird (#3348). - Es wurde ein Problem im Scrubbing-Modus behoben, bei dem beim Suchen mit aktiviertem
ScrubbingModeParameters.allowSkippingMediaCodecFlushkurzzeitig veraltete Videoframes angezeigt werden konnten.
- Verschiebe das Flag zum Aktivieren/Deaktivieren von HAGC-Metadaten für progressive Medien von
- Extraktoren:
- Matroska: Ein Problem wurde 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 wie von Android definiert als vorzeichenlos behandelt werden (#3271). - Problem mit der Auslagerung behoben, bei dem die Wiedergabe während der Pre-Roll- oder lückenlosen Übergänge 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 des Inhalts 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, den Ladevorgang 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 einer
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 der Zurücksetzungsworkflows berücksichtigt. - Füge
getFlags()undFLAG_STRICT_DURATIONzuSampleStreamhinzu, damit Streams Flags melden können, und aktualisiere die Renderer, um diese Flags dynamisch zu prüfen. - Wenn die Streamformate keinen gültigen Wert liefern, wird auf die Frameraten-Schätzung in
MediaCodecVideoRendererund 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 Zwischenspeichers zurückgreifen, wenn der verfügbare Heap-Speicher knapp ist. - Die Verarbeitung von Standbildern, wenn
MediaItem.imageDurationUsnicht festgelegt ist, wurde angepasst: JPEG- und HEIC-Standbilder werden jetzt mit einer sehr kurzen Standarddauer „abgespielt“ (genauso wie PNG- und andere Bilder zuvor). - 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 alte Methode zu ersetzen. - Fügen Sie in
DefaultBandwidthMeterUnterstützung für eine benutzerdefinierteInitialBitrateSupplierhinzu. 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 von
ExoPlayerwird dynamisch und nicht in einem statischen Intervall ausgeführt. - Ein unnötiger Reset, der beim Zusammenführen von Tracks mit Pre-Roll-Samples zur aktiven Wiedergabe auftreten kann, wurde entfernt.
- 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 vor dem Empfang von Eingabepuffern geleert wurde.
- Experimentelle
ExoPlayer.Builder.enablePerStreamMediaProgression()hinzugefügt, 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 einer
- 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 wurde.
- Ein Problem wurde behoben, bei dem
- Trackauswahl:
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORverfügbar machen undAdaptiveTrackSelection.Factory.setTrackFormatComparatorhinzufügen, um die Sortierung benutzerdefinierter Formate 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 sequenzielle 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, damit angehängte Bilder und Cover-Metadaten beim Parsen des Containers verworfen werden können, um den Arbeitsspeicherverbrauch während der Laufzeit 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 (sowohl Nero- als auch 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. Geben Sie dazuFLAG_READ_MFRA_FOR_SEEK_MAPfürFragmentedMp4Extractoran. Dies erfolgt jetzt standardmäßig inDefaultExtractorsFactory(#3088). av1C-Daten mit nicht unterstützter Version ignorieren.- 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 Lesevorgänge außerhalb des zulässigen Bereichs beim Parsen leerer
ilst-Metadaten-Tag-Elemente verhindern (#3191). - MPEG-TS: Es wird dafür gesorgt, dass der letzte Frame für Streams gerendert wird, bei denen das letzte PES-Paket eine bekannte Länge hat (#3206).
- MP3: Die Bitratenberichte für Dateien mit Xing- und VBRI-Header wurden korrigiert.
- 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 anpassen, 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. Dadurch kannDefaultAudioSinkdiese explizite Maske verwenden, 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 erweitert, 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, durch den 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 eine zeitbasierte Audioverarbeitung zu ermöglichen (#418). - Unterstützung für 32-Bit- und 64-Bit-Gleitkomma-PCM 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, aber der Wert kann über
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()angepasst werden. - Fehler in
VideoFrameReleaseHelperbehoben, bei dem Änderungen 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 neueaddTrackReferenceAPI hinzugefügt. So können Beziehungen zwischen Tracks hergestellt werden, z. B. die Verknüpfung eines Metadaten-Tracks mit dem Video-Track, den er beschreibt. - Fügen Sie
OggMuxerhinzu, um das Muxing vonOPUS- oderVORBIS-Medienstreams 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 Pausenanzeigen 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 Hintergrundthread-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 von Zeitachsen außerhalb des zulässigen Bereichs (
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 erkannt hat. - Es wurde ein Problem behoben, bei dem Cover in
MediaSessiondoppelt herunterskaliert wurden, wenn die Bildgröße nahe am Plattformlimit lag. Dadurch wurden Benachrichtigungen unscharf (#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 bei Statusaktualisierungen. - Absturz durch Abfangen von
ForegroundServiceStartNotAllowedExceptioninMediaSessionService.stopSelfSafely()behoben (#3310). - Unerwarteter
onMediaItemTransition()-Callback fürMediaControllerbeim Springen 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 die Klasse
CurrentMediaItemStateund das entsprechenderememberCurrentMediaItemState-Composable zum Modulmedia3-ui-composehinzu. Dieser State Holder wird indemo-composeverwendet, um verschiedene Metadateninformationen zum aktuell wiedergegebenenMediaItemanzuzeigen. - Fügen Sie dem Modul
media3-ui-composedie KlassePlaylistStateund die entsprechenderememberPlaylistState-Composable hinzu. Dieser State Holder wird indemo-composeverwendet, um verschiedene Metadateninformationen zumMediaItemsanzuzeigen, das im Player festgelegt ist. - API für Vorspulen/Zeitlupe zu
PlaybackSpeedStatehinzugefügt. 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 des aktuellen Medienelements an. - Fügen Sie dem Modul
media3-ui-composedie KlasseErrorStateund die entsprechenderememberErrorState-Composable hinzu. Füge dasErrorText-Composable zumedia3-ui-compose-material3hinzu und mache es zu einem Standard-Overlay auf demPlayer. - Veröffentlichen Sie das
PlayerDefaults-Objekt mit Composables fürTopControls,CenterControls,BottomControlsundErrorOverlay. - Fügen Sie
FocusRequesterzumPlayer-Composable und 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 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 werden aufgelöst, wenn sie für den Download 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 wurden, auch wenn die Playlist nicht mehr primär oder aktiv war (#3254).
- Die Berechnung des Offsets für die Fortsetzung des Inhalts beim Auflösen von Asset-Listen für Interstitials wurde korrigiert (#3322).
- Unerwartete 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 UDP-Portbindungsfehler 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-Ausgabewählers 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 Trackauswahl dauerhaft im Track-Maskierungsstatus hängen bleiben konnte, was dazu führte, dass nachfolgende Track-Updates 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
CastPlayerbeim Ändern des aktiven PlayersMediaItemsüberträgt, die nicht abspielbar sind (#3199). - Fehler behoben, bei dem nicht konfigurierte Livestreams (
liveConfiguration == UNSET) alsSTREAM_TYPE_BUFFEREDin die Warteschlange gestellt wurden (#3318).
- Neue
- Test-Dienstprogramme:
- 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. - Assertions in
DataSourceContractTestfür vonDataSource.open()zurückgegebene Längen verschärfen. 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.
- Build
- Die Anleitung für
README.mdzur lokalen Abhängigkeit von Media3 wurde aktualisiert, um Gradle Composite Builds (includeBuild) zu verwenden. Das Scriptcore_settings.gradlewurde entfernt und die PropertiesandroidxMediaModulePrefixundandroidxMediaEnableMidiModulewerden nicht mehr verwendet.
- Die Anleitung für
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:
- Fehler bei der Verarbeitung von
onAudioSessionIdChangedinSimpleBasePlayerundForwardingSimpleBasePlayerbehoben.
- Fehler 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 wird ignoriert, 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 werden, wenn dem Player mehrere Audiorenderer hinzugefügt werden.
- Video:
- Logik für die Wiederverwendung von Codecs bei Änderungen der Framerate in APIs unter 30 angepasst, 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, um fehlerhafte Videos aufgrund eines Framework-Problems vor API 31 zu verhindern.
- 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, durch den
COMMAND_SEEK_TO_MEDIA_ITEMin einerMediaControllernicht verfügbar war, wenn eine Verbindung zu einer reinen Plattformsitzung hergestellt wurde, die das Suchen nach anderen Elementen, aber keine Änderungen an der Playlist unterstützt. - Ein Problem wurde 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 niedriger nicht mit
Controller.isTrusted()gekennzeichnet wurde, wenn die 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 wird, wenn die Trackauswahl eine Teilmenge der verfügbaren Tracks ist (#3161). - Es wurde ein Problem 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üge
AdsMediaSourceClipping-Funktionen hinzu. - Unterstützung für dynamische Planung in
MediaCodecVideoRendererhinzugefügt, um die Planung von Aufgaben und CPU-Aktivierungszyklen besser darauf abzustimmen, wann Videoframes verarbeitet werden können. Sie können dies mitexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()inDefaultRenderersFactoryaktivieren. - Ermöglicht das Festlegen eines benutzerdefinierten
DataSource.FactoryinDefaultPreloadManager.Builder. ExoPlayerkann ohne Robolectric simuliert werden, 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_MSvonExoPlayerzuExoPlayer.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, bei dem 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üge
- CompositionPlayer:
- Unterstützung für
EditedMediaItem.removeVideohinzugefügt.
- 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. - Problem behoben, bei dem eingebettete Metadatentracks unabhängig davon ausgewählt wurden, ob der entsprechende primäre Track ausgewählt ist (#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-Decoder-Erweiterung) oder über den Android Spatializer.
- Die Unterstützung für
AC4Profile22und andere ältere Profile wird jetzt korrekt entfernt, wenn die Unterstützung für AC-4-Decoder in Automotive-Szenarien bewertet wird (#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 Media-Codec-Decodern abzugleichen, unterstützt durch neue Felder und Logik in AudioCapabilities und AudioCapabilitiesReceiver.
- Fehler behoben, durch den 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: Verwende die SPU-Steuerbefehle
STARTundSTOP, um die Cue-Dauer abzuleiten, anstatt immer standardmäßig 5 Sekunden zu verwenden (#2935).
- VobSub: Verwende die SPU-Steuerbefehle
- Metadaten:
- Die Standardanzahl der Metadaten-Renderer wurde auf vier erhöht, um alle potenziellen Metadaten-Tracks abzudecken, die von HLS-Varianten und ‑Wiedergaben veröffentlicht werden (#3043).
- Auswirkung:
LottieOverlayin ein neues:media3-effect-lottie-Modul verschieben (was auch die Umbenennung vonandroidx.media3.effect.LottieOverlayinandroidx.media3.effect.lottie.LottieOverlaybeinhaltete).
- 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-Ereignis LOADED angegebenen MIME-Typ übereinstimmte. Mit der Korrektur wird der MIME-Typ der Anzeige jetzt anhand der von IMA bereitgestellten Anzeigenmedieninformationen zugeordnet.
- Fügen Sie
setEnableCustomTabszuImaAdsLoaderundImaServerSideAdInsertionMediaSourcehinzu, 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. Es 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 Alphatestgruppe beitreten möchten, wenden Sie sich an Ihren Account-Partner.
- Sitzung:
- Ein Fehler wurde behoben, bei dem große Arrays in
MediaMetadata.artworkDatadie App zum Absturz bringen können. - 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. - Erkennt veraltete
Intent-Instanzen, 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 zwischen Mediendateien nicht an Controller gemeldet wurde, wenn die Wiedergabe von einem bestimmten Mediendateiindex zu einem anderen mit derselben Mediendatei wechselte, weil die Wiedergabe unterbrochen wurde („AUTO“ und „SEEK“) (#2997).
- 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).
- Skalierung des Artwork-Symbols für Benachrichtigungen unter Android Q korrigiert (#3084).
- Ein Fehler wurde behoben, bei dem große Arrays in
- UI:
- Fügen Sie
PlaybackSpeedControl-Composable zumedia3-ui-composehinzu, um die Wiedergabegeschwindigkeit anzuzeigen und zu ändern. - Fügen Sie
media3-ui-compose-material3das ComposablePlaybackSpeedToggleButtonhinzu, 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ßer Offscreen-Zwischenspeicher beim Animieren von PlayerControlView wird vermieden.
- Fügen Sie
media3-ui-compose-material3das Compose-ElementPlayerhinzu, 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 von 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 regulären Ausdrucksabgleichen (#3008).
- ID3-Metadatentrack (EMSG) in Audio-Renditions 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, durch den 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.
- Common Library:
- Unterstützung von Datums-/Uhrzeit-Strings mit nur Stunden im Zeitzonen-Offset (#2929).
- ExoPlayer:
- Lassen Sie die dynamische Planung das
doSomeWork-Intervall erst nach dem Start des Audios verlangsamen, 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 dieses Problem behoben wird, verlängert sich hoffentlich die CPU-Inaktivitätszeit und es wird Strom gespart. - 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 die dynamische Planung das
- Extraktoren:
- MP3: LAME ReplayGain-Daten parsen (#2840).
- Audio:
- Die Unterstützung für
AC4Profile22und andere ältere Profile wird jetzt korrekt entfernt, wenn die Unterstützung für AC-4-Decoder in Automotive-Szenarien bewertet wird (#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 mithilfe 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 einer
MediaController, die mit einer Plattformsitzung verbunden war, zum Absturz der App führte, wenn das Beenden während der Anzeigenwiedergabe erfolgte (#2948). - Fügen Sie zusätzliche Prüfungen für
extras-Bundle-Instanzen in verschiedenen Klassen hinzu, 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 „author“, „writer“ und „composer“ nicht als Fallback verwendet wurden, wenn von den alten
MediaMetadataCompatundMediaDescriptionCompatkonvertiert wurde (#3018).
- Fehler behoben, bei dem das Beenden einer
- 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 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
- Common Library:
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 Delegat-Player die Referenzgleichheit zum Vergleichen von Listener-Instanzen verwendet (#2675). - Füge 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.getBufferedPercentage, der durch einen Ganzzahlüberlauf verursacht wurde, wenn die gemeldete gepufferte Position unplausibel viel größer als die gemeldete Dauer war, wurde behoben (#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üge 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 deklarierte Dauer hinaus, ohne das Ende des Elements zu erreichen. - Nach 10 Minuten mit einem Grund für die Wiedergabeunterdrückung während des Wiedergabeversuchs.
- Nach 10 Minuten
- Aktiviere standardmäßig die Verarbeitung von Wake-Locks, 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 jetztDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)oderDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)überTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)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 Standardwerte vonDefaultLoadControlangepasst, damit sie mit einer Vielzahl lokaler 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 Mediendateien oder Medienquellen im Batch hinzuzufügen und anschließend automatischinvalidate()aufzurufen. - Füge
removeMediaItems((List<MediaItem>)undremoveMediaSources(List<MediaSource>)hinzu, um die Mediendateien oder Medienquellen im Batch zu entfernen. Achte darauf, dass der Preload-Manager nach dem Entfernen nicht mit dem Vorabladen beginnt oder das Vorabladen fortsetzt. - Lassen Sie zu, dass
DefaultPreloadManager.setCurrentPlayingIndex(int)sich automatisch 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 Bildgruppe im Scrubbing-Modus zu überspringen.
- Füge
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)hinzu, damit Apps einen Wert für die Zielpuffer-Bytes 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 der
AdPlaybackState.AdGroupSkipInfohinzu, 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 wird angehängt, wenn die Anzeigenwiedergabe nach einer Anpassung der Suchposition 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
IllegalStateExceptionwurde behoben, 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.- Fehler behoben, bei dem das Springen zu anderen Mediendateien im Scrubbing-Modus zu
IllegalStateExceptionführen konnte. - Potenzieller
NullPointerExceptioninDefaultPlaybackSessionManagerwurde 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 bei der Wiedergabe in einer Playlist oder im Wiederholungsmodus beim Suchen im Scrub-Modus kurz vor dem Ende zum nächsten Medienelement springen konnte.
- Füge 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 sind 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.removeVideohinzugefügt.
- Veröffentlichen Sie
- Transformer:
InAppMp4Muxerals Standard-Muxer verwenden.- Fügen Sie
EditedMediaItem.Builder#setSpeed()hinzu und stellen SieEffects#createExperimentalSpeedChangingEffects()ein. - Ersetzen Sie
forceAudioTrackundforceVideoTrackdurchtrackTypesinEditedMediaItemSequence.
- Titelauswahl:
- Fü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 vorhandenen Suchlimit für ein Synchronisierungsbyte zu entsprechen (#2713).
- MP3:
FLAG_ENABLE_INDEX_SEEKINGwurde so geändert, dass Suchinformationen bevorzugt aus Metadaten-Headern (wie Xing und VBRI) abgerufen werden, 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 Standard war und VBR explizite Header erfordert. Dies verbessert die sofortige Suchbarkeit von Dateien ohne Metadaten, kann jedoch die Genauigkeit von VBR-Dateien ohne Header beeinträchtigen. 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 Prüfen 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. Mit dieserAutoCloseable-Klasse können Sie Frames extrahieren und dabei HDR-Videos, Videoeffekte und die Auswahl eines benutzerdefinierten Decoders nutzen. 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 Medienbeispiele aus einer Mediendatei extrahiert werden können. Die vorhandeneandroidx.media3.exoplayer.MediaExtractorCompatwird jetzt zugunsten dieser neuen Klasse verworfen.
- Es wurde ein neues
- Audio:
AudioProcessor-Instanzen über das Suchen 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. - AC-4-Decoderprofil und -Level-Funktionen bei der Bewertung der Unterstützung von Trackformaten nutzen (#2580).
- Mögliche 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 Scrubben 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 sich jedoch leicht beheben lässt, 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:
- Benutzerdefinierte Proguard-Regeln wurden entfernt, 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. Dafür 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 IMA DAI-Optionen für benutzerdefinierte Benutzeroberflächen 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.
- 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“. MediaButtonReceiver.onForegroundServiceStartNotAllowedExceptionwurde der ParameterContexthinzugefügt (#2625).- Lies die Lautstärkeregelungs-ID von der Plattform
PlaybackInfo, anstatt sie über Binder abzurufen. So wird sichergestellt, dass Wiedergabetyp und Lautstärkeregelungs-ID atomar gelesen werden und zueinander passen. - 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, obwohl 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 wurde behoben, indem „KEYCODE_HEADSETHOOK“ wieKEYCODE_MEDIA_PLAY_PAUSEbehandelt wird (#2816). - Es wurde ein Fehler behoben, bei dem die Surface-Größe nicht zwischen der Sitzung und dem Controller kommuniziert wurde, was dazu führte, dass Videoeffekte in der Demositzung nicht 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 den Mediensitzungen der Plattform korrekt dargestellt, z. B. für die System-UI oder Android Auto. - Ein Problem wurde behoben, bei dem derselbe
Bitmapmehrmals komprimiert wurde, wenn einMediaControllermit einer Plattform-Mediensitzung verbunden wurde.
- Füge
- UI:
- Fügen Sie dem Modul
media3-ui-composedie 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-Komposition hinzu. Dieser State Holder wird indemo-composeverwendet, um den Fortschritt als horizontale schreibgeschützte Fortschrittsanzeige darzustellen. - Fügen Sie
ContentFrameComposable zumedia3-ui-composehinzu, das die Verwaltung vonPlayerSurfacemit der Größenänderung des Seitenverhältnisses und dem Abdecken mit einem Shutter kombiniert. - Problemumgehung für einen bekannten API 34-Plattformfehler, 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). - Erstelle ein neues
media3-ui-compose-material3-Modul und füge ihm Composables im Material3-Design hinzu (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - Füge das Compose-Element
TimeTextzumedia3-ui-compose-material3hinzu, um den Fortschritt des Spielers 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 Medienrouten in der
PlayerViewhinzugefügt. - Verwenden Sie
BidiFormatter, um die Zeichensetzung in RTL-Textuntertiteln korrekt anzuzeigen (#11214).
- Fügen Sie dem Modul
- HLS-Erweiterung:
- Attribute zum Überspringen von HLS-Interstitials 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 verworfen 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. - Fügen Sie
HlsInterstitialsAdsLoader.Listener.onAdStartedhinzu, 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
UnsupportedOperationExceptionbei der Wiedergabe von DASH-Streams mit einem nicht hierarchischendata:-URI-Manifest behoben (#2688). LiveConfigurationwird auf den Wert zurückgesetzt, der von derMediaItemderDashMediaSourcebei der Veröffentlichung und bei der Aktualisierung der Mediendatei durch den Nutzer bereitgestellt 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 (#2613) beheben.
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- AV1-Erweiterung: Der AV1-Softwaredecoder 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 sichergestellt, dass der
STREAMINFO-Block korrekt geparst und an den Decoder übergeben wird (#2887).
- AV1-Erweiterung: Der AV1-Softwaredecoder verwendet jetzt die leistungsstarke
- Cast-Erweiterung:
- Füge
CastPlayer.Builderhinzu, damitCastPlayersowohl die lokale Wiedergabe als auch die Wiedergabe über Google Cast ermöglicht. Wenn du das alteCastPlayer-Verhalten beibehalten möchtest, bei dem nur die Cast-Wiedergabe unterstützt wird, kannst duRemoteCastPlayerverwenden. Die 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 Composable-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:
- Maximale Zeitdifferenz für den automatischen Übergang von
FakeClockhinzufügen. 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.
- 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 das 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.
- Common Library:
- 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 deutlicher 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 wurden. - Achte darauf, dass der letzte Frame korrekt gerendert wird, wenn du das MediaCodec-Flag
DECODE_ONLYverwendest, das im Scrubbing-Modus standardmäßig aktiviert ist. - 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 wird standardmäßig
MediaCodec.BUFFER_FLAG_DECODE_ONLYverwendet. 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 Audio ohne Ton 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ürzens und dem Startpunkt des Kürzens zu ignorieren. - Aktualisieren Sie die Composition Demo-App, um Kotlin und Jetpack Compose zu verwenden, und fügen Sie einen benutzerdefinierten
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 Suchen 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).
- Aktualisieren Sie
WavExtractor, 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 rotieren als auch spiegeln, wird verarbeitet. So wird sichergestellt, dass gespiegelte Videos, die mit der Frontkamera des iPhones aufgenommen wurden, richtig herum angezeigt werden, aber fälschlicherweise auf der Y-Achse gespiegelt werden (#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(). - Erlaubt konstantes Upmixing/Downmixing der Leistung in DefaultAudioMixer.
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 die ersten 10 Sekunden lang nicht funktionierte, 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. - Die Wiederherstellung von Mehrkanal-Audio nach dem Fallback auf Stereo-Audio auf einigen Geräten wurde korrigiert (#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. * Verbesserung der 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 hängen blieb, 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).
- Behebung eines Fehlers, bei dem die Wiedergabe hängen blieb, wenn von einem Stream mit einem Untertitelfehler zu einem Livestream mit einer leeren Untertitelspur 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 vonMatroskaExtractornurCodecId = S_TEXT/ASSunterstützt, was die „erweiterte“ (v4+) Variante von SubStation Alpha-Untertiteln darstellen soll. Die Parsing-Logik von ExoPlayer ist jedoch für beide Varianten gleich (#2384). - Unterstützung für das Attribut
layerin SubStation Alpha-Untertiteldateien (SSA) hinzugefügt, mit dem die Z-Reihenfolge von Cues definiert wird, wenn 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:
- Begrenze 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. - Die in
CompositionPlayerverwendete maximale Bitmap-Ausgabegröße wird an die bereits inTransformerverwendete Größe angepasst. Das bedeutet, dassCompositionPlayerim Gegensatz zuExoPlayerbeim Decodieren von Bitmaps die Displaygröße nicht berücksichtigt.
- Begrenze 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, wobei der Standardwert „false“ 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.
- Prüfung auf verfügbare Befehle beim Senden benutzerdefinierter Befehle an ein Legacy-
MediaBrowserServiceCompatentfernt. 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 Spielers fälschlicherweise als persistente benutzerdefinierte Ausnahme behandelt wurde. Dadurch kann die Anwendung nicht wiederhergestellt werden.
- 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 belassen 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, zu einemIllegalStateExceptionführte (#2265). - Es wird nicht automatisch eine Benachrichtigung angezeigt, wenn ein Player mit Medieninhalten 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
getLibraryRooteinerMediaBrowser, die mit einer Legacy-MediaBrowserServiceCompatverbunden ist, eineNullPointerExceptionerzeugte. - Es wurde ein Fehler 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, die außerhalb des Beobachtungszeitraums am Player vorgenommen wurden, werden jetzt übernommen (#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, sobald der Nutzer die Scrubbing-Leiste zieht. 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)aus 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, indem sie die zeitbasierten Start- und Endpositionen der Medien angeben, 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 entsprechende Inhalt 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 Vorladehinweisen 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).
- Fehler beim Parsen von Playlists behoben, 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 das Trick-Play-Adaptationset mit dem Haupt-Adaptationset zusammengeführt wurde, um ein ungültiges
TrackGroupzu bilden (#2148). - Fehler behoben, bei dem das Verkürzen der Dauer eines DASH-Zeitraums eine Ausnahme auslösen kann, wenn Samples, die über die neue Dauer hinausgehen, bereits 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 das Trick-Play-Adaptationset mit dem Haupt-Adaptationset zusammengeführt wurde, um ein ungültiges
- 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. - Entfernen Sie den verworfenen
MediaCodecVideoRenderer-KonstruktorMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- 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 und 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.
- Common Library:
- Methode
PlaybackParameters.withPitch(float)hinzugefügt, um einePlaybackParametersmit 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 mit 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 Plattform-
MediaSession-Callbacks 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ückgegeben hat, obwohl der verpackte Player tatsächlich leer war. Dies ist der Fall, 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 Plattform-
- 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.
- Common Library:
- 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 PlattformMediaExtractorbietet.- Experimentelle Unterstützung für das Vorwärmen von „ExoPlayer“ für die Wiedergabe mit
MediaCodecVideoRendererhinzugefügt. Sie könnenDefaultRenderersFactoryüberexperimentalSetEnableMediaCodecVideoRendererPrewarmingkonfigurieren, um eine sekundäreMediaCodecVideoRendererfürExoPlayerbereitzustellen. 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.Listenermeldet Ä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 Playlistelemente 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 eine oberste EbenePreloadManagerListener. 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). MediaCodecInfodes Codecs angeben, 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, durch das nach einer Mid-Roll-Anzeige beim Übergang zu Content-Medien möglicherweise zusätzliche Nur-Decodierungs-Frames in schneller Folge angezeigt wurden.
- Lassen Sie
DefaultRenderersFactoryzweiMetadataRenderer-Instanzen hinzufügen, damit Anwendungen standardmäßig zwei verschiedene Metadatenschemas empfangen können. - Prüfen, ob das laufende Laden eines Blocks abgebrochen werden soll, wenn die Wiedergabe pausiert wird (#1785).
- Option zu
ClippingMediaSourcehinzugefügt, um das Ausschneiden von Medien ohne Suchfunktion 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 hinzugefügt.
- 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. - Statische HDR-Metadaten generieren, wenn
DefaultEncoderFactoryverwendet wird. - Unterstützung für die Android-Plattformdiagnose mit
MediaMetricsManageraktivieren. Transformer leitet Bearbeitungsereignisse und Leistungsdaten an die Plattform weiter, die 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 die Bereitstellung von Plattformdiagnosedaten 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, um Medien aus einemMediaProjectionfür die Bildschirmaufzeichnung bereitzustellen, 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 wird.
- Die Verarbeitung von NAL-Einheiten mit Längen, die in 1 oder 2 Byte (statt 4) ausgedrückt werden, wurde korrigiert.
ArrayIndexOutOfBoundsExceptionin MP4-Bearbeitungslisten wurde korrigiert, wenn die Bearbeitungsliste bei einem Nicht-Synchronisierungsframe ohne vorherigen Synchronisierungsframe 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 loadingabgespielt 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 überschreiben und 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 die Decodierung ausstehender Frames sehr langsam war (#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. Stattdessen wird nur eine geladen, 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 wurden beliebig viele Dezimalstellen falsch geparst, aber es wurde immer davon ausgegangen, dass der Wert in Millisekunden angegeben ist, was zu falschen Zeitstempeln führte (#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.
IllegalStateExceptionwurde korrigiert, 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 der SchnittstelleMuxerverschoben, 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.- Fehler in
FragmentedMp4Muxerbehoben, 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 Dienste im Vordergrund gelten. Beachten Sie, dass der Aufruf von
player.pause()nicht mehr verwendet werden kann, um den Dienst im Vordergrund vorstopSelf()zu beenden. Wenn SieonTaskRemovedüberschreiben, verwenden Sie stattdessenMediaSessionService.pauseAllPlayersAndStopSelf(). - Die Benachrichtigung bleibt sichtbar, wenn die Wiedergabe in einen Fehler- oder Beendigungsstatus 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 Dienste im Vordergrund gelten. Beachten Sie, dass der Aufruf 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, durch den Datenquellen geöffnet und Cachebereiche gesperrt bleiben, 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 eineHlsInterstitialsAdsLoaderauf 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 Adaptationssets, die mit
adaptation-set-switchinggekennzeichnet sind, aber unterschiedliche Sprachen oder Rollen-Flags haben, zusammengeführt werden (#2222).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Das MPEG-H-Decoder-Modul 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
play-services-cast-framework-Abhängigkeit wurde 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
- 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:
- Die veraltete Methode
AudioMixer.create()wurde entfernt. Verwenden Sie stattdessenDefaultAudioMixer.Factory().create(). - Entfernen Sie die folgenden verworfenen
Transformer.Builder-Methoden:setTransformationRequest(), verwenden Sie stattdessensetAudioMimeType(),setVideoMimeType()undsetHdrMode().setAudioProcessors(), legen Sie den Audioprozessor in einemEditedMediaItem.Builder.setEffects()fest und übergeben Sie ihn stattdessen anTransformer.start().setVideoEffects(), legen Sie den Videoeffekt in einemEditedMediaItem.Builder.setEffects()fest und übergeben Sie ihn stattdessen anTransformer.start().setRemoveAudio(), verwenden Sie stattdessenEditedMediaItem.Builder.setRemoveAudio(), um die Audioinhalte aus demEditedMediaItemzu entfernen, der anTransformer.start()übergeben wird.setRemoveVideo(): Verwende stattdessenEditedMediaItem.Builder.setRemoveVideo(), um das Video aus demEditedMediaItemzu entfernen, der anTransformer.start()übergeben wird.setFlattenForSlowMotion(): Verwenden Sie stattdessenEditedMediaItem.Builder.setFlattenForSlowMotion(), um die anTransformer.start()übergebeneEditedMediaItemzu vereinfachen.setListener(), verwenden Sie stattdessenaddListener(),removeListener()oderremoveAllListeners().
- 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 das verworfene
Transformer.PROGRESS_STATE_NO_TRANSFORMATION. Verwenden Sie stattdessenTransformer.PROGRESS_STATE_NOT_STARTED. - Entfernen Sie das verworfene
Transformer.setListener(). Verwenden Sie stattdessenTransformer.addListener(),Transformer.removeListener()oderTransformer.removeAllListeners(). - Entfernen Sie das verworfene
Transformer.startTransformation(). Verwenden Sie stattdessenTransformer.start(MediaItem, String). - Entfernen Sie das 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
- Die veraltete 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
MediaCodecAdapter-Werten für das Pixel-Seitenverhältnis, 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:
- Disc-/Titelnummerierung und Genre aus Vorbis-Kommentaren in
MediaMetadataextrahieren (#1958).
- Disc-/Titelnummerierung und 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.
- Common Library:
ForwardingSimpleBasePlayerhinzugefügt, mit dem die Weiterleitung an einen anderen Player mit kleinen Anpassungen möglich ist, wobei die vollständige Konsistenz und die Listener-Verarbeitung gewährleistet sind (#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 auf Basis der Common-Bibliothek bietet. - Fügen Sie der
media3-common-ktx-Bibliothek die suspend-ErweiterungsfunktionPlayer.listenhinzu, um eine Koroutine zu starten, die aufPlayer.Eventswartet. - Entfernen Sie
@DoNotInline-Annotationen aus manuell ausgelagerten inneren Klassen, die dazu dienen, Fehler bei der Klassenprüfung zur Laufzeit 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 diese Funktion zu aktivieren.- Fügen Sie
PreloadMediaSource.PreloadControl.onPreloadErrorhinzu, damitPreloadMediaSource.PreloadControl-Implementierungen Aktionen ausführen können, wenn ein Fehler auftritt. - Fügen Sie
BasePreloadManager.Listenerhinzu, um 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 anstelle einer Position vorab geladen werden muss. 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 Funktion aktiviert ist, wird das Vorabladen durchDefaultLoadControleingeschränkt, damit die Wiedergabe nicht beeinträchtigt wird. Das Vorabladen wird nur gestartet und fortgesetzt, wenn der Player nicht für die Wiedergabe lädt. Apps 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, gemeinsam genutzten Konfigurationen zu erstellen. - Der Parameter
Renderer[]wurde ausLoadControl.onTracksSelected()entfernt, da dieDefaultLoadControl-Implementierung die Streamtypen ausExoTrackSelection[]abrufen kann. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])wurde verworfen und die Methode wurde als „final“ markiert, um Überschreibungen zu verhindern. Stattdessen sollte die neueDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])verwendet werden.MediaSourceEventListener-Ereignisse aus sekundären Quellen inMergingMediaSourcemelden. Dies führt dazu, dass für per Sideloading hinzugefügte Untertitel (die mitMediaItem.LocalConfiguration.subtitleConfigurationshinzugefügt wurden) Ereignisse für den Start, Fehler, Abbruch und Abschluss 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 Playlistelemente 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 dem letzten Update festzulegen, nach der der Client neu initialisiert wird (#1794).
- Transformer:
- Füge
SurfaceAssetLoaderhinzu, um Videodaten über einenSurfacein die Warteschlange für Transformer zu stellen. 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
- Titelauswahl:
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 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). - Behandlung von Frames in falscher Reihenfolge bei der
endIndices-Berechnung für MP4 mit Bearbeitungsliste (#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: Bestätigen Sie, dassDataSource.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:
- CTA-2075-Lautstärke-Metadaten werden automatisch im Codec konfiguriert, wenn sie in den Medien vorhanden sind.
- 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 eine neue MethodedetachOutputSurfaceaufrufen, 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
VoiceSpanhinzugefügt und für WebVTT-Sprachspannen ausgefüllt (#1632). - Es wurde dafür gesorgt, dass WebVTT in HLS mit sehr großen Untertitel-Zeitstempeln (die einen 64-Bit-
longüberlaufen, wenn sie als Mikrosekunden dargestellt und mit der90,000-MPEG-Zeitbasis multipliziert werden) angezeigt werden (#1763). - Unterstützung von CEA-608-Untertiteln in Dolby Vision-Inhalten (#1820).
- Fehler behoben, 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 Puffers abschneidet. Dies wird jetzt so gehandhabt, dass die Ausgabe näher an der Erwartung 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 kann. - 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 einemForegroundServiceDidNotStartInTimeExceptionabstürzt (#1528). - Ein Fehler wurde 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ückgegeben 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). - Befehlsschaltflächen für Mediendateien hinzufügen 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 Legacy-MediaBrowserCompathergestellt 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 vom Dienst gesendeten Fehler erhielt, nachdem der Browser einparentidabonniert 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:
- Das gestreckte/zugeschnittene Video in der Problemumgehung
PlayerView-in-Compose-AndroidViewmuss aufgrund von Problemen mit XML-basierten gemeinsamen Übergängen aktiviert werden. Apps, diePlayerViewinnerhalb vonAndroidViewverwenden, müssenPlayerView.setEnableComposeSurfaceSyncWorkaroundaufrufen, um die Funktion zu aktivieren (#1237, #1594). setFullscreenButtonStatewurde zuPlayerViewhinzugefügt, um bei Bedarf Aktualisierungen des Symbols für die Vollbildschaltfläche 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 funktionierte, wenn in der App Einstellungen für die Auswahl von Texttracks definiert waren.
- Das gestreckte/zugeschnittene Video in der Problemumgehung
- DASH-Erweiterung:
- Unterstützung für Perioden 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 Stereolayout 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 des Ausgabewechslers (#1056) erforderlich ist.
- Testdienstprogramme:
DataSourceContractTestenthält jetzt Tests zur Überprüfung von:- Der Eingabestream
read positionwurde aktualisiert. - Der Ausgabepuffer
offsetwird korrekt angewendet.
- Der 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 veraltete Methode
Player.previous(). Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem(). - Die veraltete Methode
DrmSessionEventListener.onDrmSessionAcquiredwurde entfernt. - 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 Ausgabe-Startzeit 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.
- Common Library:
- 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 Java 8-Entzuckerung entfernt (#1312).
- Achten Sie darauf, dass die an
MediaItem.Builder.setImageDurationMs()übergebene Dauer für einMediaItem, das kein Bild ist, ignoriert wird (wie dokumentiert). - Fügen Sie
Format.customDatahinzu, um 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, dasPreloadMediaSourceverwendet, um Medienbeispiele der Quellen im Arbeitsspeicher vorab zu laden, und eine GanzzahlrankingDataverwendet, die den Index eines Elements auf der Benutzeroberfläche angibt. PlayerIdwurde den meisten Methoden vonLoadControlhinzugefügt, 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 der 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 (Buffer 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 Content-Medien 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 fortfahren 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 Fortschritte macht. WennExoPlayermitexperimentalSetDynamicSchedulingEnabled()festgelegt ist, ruftExoPlayerdiese Methode auf, wenn die Zeit für die Planung der Arbeitsaufgabe berechnet wird. - Fügen Sie
MediaCodecAdapter#OnBufferAvailableListenerhinzu, um eine Benachrichtigung zu erhalten, wenn Eingabe- und Ausgabepuffer fürMediaCodecRendererverfü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. - Füge
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()hinzu, um die maximale Position zu konfigurieren, für dieseekToPrevious()zum vorherigen Element springt (#1425). - Behebung einiger Inkonsistenzen beim Audiofokus, z.B. dass der vollständige oder vorübergehende Verlust des Fokus nicht gemeldet wird, während der Player pausiert ist (#1436).
- Behebung potenzieller
IndexOutOfBoundsException, die durch Extraktoren verursacht werden, die 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. - Die H.264-Level-Prüfungen für die Trim-Optimierung wurden gelockert.
- 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. - Problemumgehung für einen Decoderfehler, 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. - Fehler beim Laden von HEIC-Bildern aus Inhalts-URI-Schemas behoben. (#1373).
- Passen Sie 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 rückgängig gemacht, damit 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) aus den Berechnungen für die Suche mit konstanter Bitrate ausgeschlossen, was die Suche genauer macht (#1376). - MP3: Verwende die Frame-Anzahl und andere Daten in einem
Info-Frame (falls vorhanden), um eine durchschnittliche Bitrate für die Suche nach konstanter Bitrate zu berechnen, anstatt von der Bitrate des Frames nach demInfo-Frame zu extrapolieren, die künstlich klein sein kann, z.B.PCUT-Frame (#1376). - Die Extraktion des PCM-Audioformats in AVI-Containern wurde korrigiert.
- Audio:
- 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 ankommt, wenn die Oberfläche während der Wiedergabe gewechselt wird. - Die Decoder-Fallback-Logik 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 überschrieben werden, indem sowohl
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)als auchTextRenderer.experimentalSetLegacyDecodingEnabled(true)aufgerufen 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 Dekodierung 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 überschrieben werden, indem sowohl
- 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 für
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 für
- CEA-708: Vermeidung doppelter Zeilenumbrüche, die durch die naive Verarbeitung des Befehls „set pen location“ durch ExoPlayer hinzugefügt werden (#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. Bisher wurden die MP4-Tags „album sort“ (
soal), „artist sort“ (soar) und „album artist sort“ (soaa) fälschlicherweise den ID3-TagsTSO2,TSOAundTSOPzugeordnet (#1302). - Fehler beim Lesen der numerischen MP4-Tags (/iTunes)
gnre(Genre) undtmpo(Tempo) behoben, wenn der Wert länger als ein Byte ist. - ID3-
TCON-Frame anMediaMetadata.genreweitergeben (#1305).
- Zuordnung von MP4- zu ID3-Sortier-Tags korrigiert. Bisher wurden die MP4-Tags „album sort“ (
- 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 „nicht null“ annotiert. ByteArrayDataSourcekann jetzt währendopen()einen URI in ein Byte-Array auflösen, anstatt bei der Erstellung hartcodiert zu sein (#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 der Debug-SurfaceView von Transformer verbessert wird.
- Die Overlay-Matrix-Implementierung 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.
- Unbestimmte Z-Reihenfolge von EditedMediaItemSequences kann definiert werden (#1055).
- Behalte einen einheitlichen Luminanzbereich für verschiedene HDR-Inhalte bei (verwendet den HLG-Bereich).
- Unterstützung für Ultra HDR-Overlays (Bitmap) für HDR-Inhalte hinzugefügt.
- Zulassen, dass
SeparableConvolution-Effekte vor API 26 verwendet werden. - Entferne 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 „false“ bleiben kann, auch wenn der zugehörige Befehl verfügbar ist. - Fügen Sie Symbolkonstanten für
CommandButtonhinzu, 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
MediaMetadatainMediaDescriptionCompatso aus, dass bei der Auswahl von Metadatenattributen dieselbe bevorzugte Reihenfolge und Logik wie in media1 verwendet wird. 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-Sitzung 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ügen Sie
SessionErrorhinzu und verwenden Sie es inSessionResultundLibraryResultanstelle des Fehlercodes, um weitere Informationen zum Fehler und zur Behebung des Fehlers bereitzustellen, falls möglich. - Veröffentlichen Sie 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 standardmäßig aktivierte Fehlerreplikation zu deaktivieren.
- Ä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 verschiedene 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:
- Achten Sie darauf, dass
DownloadHelperkeine unveröffentlichtenRenderer-Instanzen preisgibt, da dies letztendlich zu einem Absturz der App mitIllegalStateException: Too many receivers, total of 1000, registered for pidführen kann (#1224).
- Achten Sie darauf, 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 ein 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 Wiedergabelisten während der Live-Wiedergabe nicht aktualisiert wurden (#1240).
- Fehler behoben, bei dem die Aktivierung von CMCD für HLS-Livestreams
ArrayIndexOutOfBoundsExceptionverursacht (#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. - Ändern Sie die
TestPlayerRunHelper.runUntil()/playUntil()-Methoden so, 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. - Wiederholungsmodus kann jetzt mit
Intent-Argumenten über die Befehlszeile festgelegt werden (#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
DefaultHttpDataSource-Konstruktoren. 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. - Entfernen Sie
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-Konstante
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). - Schnittstelle
Bundleableentfernen. 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.
- Common Library:
- 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 bei der Neuauswahl des Tracks die richtige
TrackSelectionResultauf den Wiedergabezeitraum an. - Frühzeitig aktivierte Renderer werden erst gestartet, nachdem der Wiedergabezeitraum beim Übergang zwischen Mediendateien vorgerückt ist (#1017).
- Fehlender Rückgabetyp wurde 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
- Titelauswahl:
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 Chunks 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). Dies liegt daran, dass die Änderung neue Probleme mit HLS-Streams nur mit I-Frames (#1150) und H.262-HLS-Streams (#1126) verursacht.
- Audio:
- Ermöglicht die Wiederherstellung des Renderers durch Deaktivieren der Entlastung, wenn die Initialisierung des Audiotracks im Entlastungsmodus fehlschlägt.
- 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 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 PQ-zu-SDR-Tone-Mapping wurde durch die Konvertierung von Farbräumen verbessert.
- Sitzung:
- UI:
- Fallback, um den Sprachnamen des Audiotracks einzuschließen, wenn
Localekeinen Anzeigenamen identifizieren kann (#988).
- Fallback, um den Sprachnamen des Audiotracks einzuschließen, 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 wird 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.
- Common Library:
- Implementieren Sie Unterstützung für
android.resource://package/[type/]name-Rohressourcen-URIs, wobei sichpackagevom Paket der aktuellen Anwendung unterscheidet. Dies wurde schon immer als funktionierend dokumentiert, aber erst jetzt korrekt implementiert. - Normalisieren Sie die MIME-Typen, die vom App-Code festgelegt oder aus Medien gelesen werden, 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 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 für adaptive Medienquellen mit
PreloadMediaSource. - Implementieren Sie
HttpEngineDataSource, eineHttpDataSource, mit der HttpEngine API. - Verhindern Sie die Erstellung von abgeleiteten Klassen von
CompositeSequenceableLoader. Diese Komponente wurde zuvor erweiterbar gemacht, aber nie innerhalb der Bibliothek 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 Methoden
experimentalSetSubtitleParserFactoryfürBundledChunkExtractor.FactoryundDefaultHlsExtractorFactorywurden insetSubtitleParserFactoryumbenannt und die Übergabe vonnullist nicht mehr zulässig. 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 einenFormaterzeugt hat (#883). - Der reguläre Ausdruck, der zum Validieren benutzerdefinierter CMCD-Schlüsselnamen (Common Media Client Data) verwendet wird, wurde korrigiert. Er prüft jetzt nur noch auf Bindestriche (#1028).
- Doppelte Codierung von CMCD-Abfrageparametern beenden (#1075).
- 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, um sicherzustellen, dass 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 dem 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).
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.selectImageTrackhinzu, um die Auswahl des Bildtracks zu aktivieren. - Füge
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledhinzu, um festzulegen, ob ein Bildtrack ausgewählt werden soll, wenn sowohl ein Bild- als auch ein Videotrack verfügbar sind. Der Standardwert istfalse. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
- Fügen Sie
- 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 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 Video-Sink-Anbieter 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 der 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 wiedergegeben, 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 wiedergegeben, 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 „Paketprivat“. Von außerhalb des HLS-Pakets sollte nicht direkt auf diesen Typ zugegriffen werden. - Suchvorgänge am Anfang eines Segments werden effizienter aufgelöst (#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 im 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:
- Ein Problem wurde behoben, bei dem die manuelle Suche außerhalb des Bereichs
LiveConfiguration.min/maxOffsetden Offset immer wieder aufmin/maxOffsetzurücksetzte. - Problem behoben, bei dem die OPUS- und VORBIS-Kanallayouts für 3, 5, 6, 7 und 8 Kanäle falsch waren (#8396).
- Es wurde ein 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).
- Das Problem, dass neue Instanzen von
CmcdData.Factorynegative Werte fürbufferedDurationUsvon Chunk-Quellen erhielten, was zu einemIllegalArgumentExceptionführte, wurde behoben (#888).
- Ein Problem wurde behoben, bei dem die manuelle Suche außerhalb des Bereichs
- Transformer:
- Problem umgehen, bei dem der Encoder während der Konfiguration einen Fehler ausgibt, weil eine hohe Betriebsrate festgelegt wurde.
- 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).
- Die Schätzung der Dauer von TS-Streams, die länger als 47.721 Sekunden sind, wurde korrigiert (#855).
- Markiere sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Fotos mit Bewegtbild als
- Audio:
- Fehlerbehebung bei der Verarbeitung von EOS für
SilenceSkippingAudioProcessor, wenn es mehrmals aufgerufen wird (#712).
- Fehlerbehebung bei 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-Schlüsseln 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 sie vollständig fehlschlägt.
- Fehler behoben, bei dem
- DRM:
- Der Workaround für die fehlerhafte ClearKey-
https://default.url-Lizenz-URL wurde auf API 33+ erweitert (zuvor galt der Workaround nur für API 33) (#837). - Fehler
ERROR_DRM_SESSION_NOT_OPENEDbeim Wechsel von verschlüsselten zu unverschlüsselten Inhalten ohne mit dem Player verknüpfte Oberfläche behoben. Der Fehler wurde durch die falsche Verwendung eines sicheren Decoders zum Abspielen der unverschlüsselten Inhalte verursacht.
- Der Workaround für die fehlerhafte ClearKey-
- Sitzung:
- Die benutzerdefinierten Schlüssel und Werte werden in
MediaMetadataCompatbisMediaMetadata.extrasundMediaMetadata.extrasbisMediaMetadataCompateingefügt (#756, #802). - Problem mit dem Broadcasting 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:
- 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
- Common Library:
- Fügen Sie den Methoden in der Schnittstelle
Log.Loggereinen@Nullable Throwable-Parameter hinzu. 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 Null-Werte zulassen, und Array-Elementtypen, die Null-Werte zulassen, nicht als Null-Werte zulassend 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 Legacy-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 zulassen, die von der Bibliothek überPlayer.replaceMediaItem(s)bereitgestellt werden (#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, darunterplaybackSpeedundlastRebufferRealtimeMs, zusätzlich zum vorhandenenplaybackPositionUs. - Erweitern Sie die Methode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)in der SchnittstelleChunkSourceaufChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Zusätzliche Felder zum CMCD-Logging (Common Media Client Data) hinzugefügt: Pufferüberlauf (
bs), Frist (dl), Wiedergabegeschwindigkeit (pr) und Start (su) (#8699). - Luma- und Chroma-Bittiefe zu
ColorInfohinzugefügt (#491). - Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: „next object request“ (
nor) und „next range request“ (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.
- Titelauswahl:
- 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
rotationDegreeskorrigiert.projectionPosePitchwurde inprojectionPoseRollgeändert (#461). - Entfernen Sie die Annahme, dass
Extractor-Instanzen direkt mitinstanceofgeprüft werden können. Wenn Sie zur Laufzeit Zugriff auf die Implementierungsdetails einesExtractorbenö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 überDefaultAudioOffloadSupportProviderbieten kann. Es wird die neueAudioOffloadSupportzurückgegeben, dieisFormatSupported,isGaplessSupportedundisSpeedChangeSupportedenthält. - Füge
AudioSink.setOffloadMode()hinzu, um die Offload-Konfiguration für die 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 zwar nur dann, wenn das Format dieses Tracks im Offload 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 Offload-Planung für die Offload-Wiedergabe nur von Audio aktivieren.
- Löschen Sie
ExoPlayer.experimentalSetOffloadSchedulingEnabledundAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. onExperimentalSleepingForOffloadChangedwurde inonSleepingForOffloadChangedundonExperimentalOffloadedPlaybackinonOffloadedPlaybackumbenannt.- Verschiebe die
TrackSelectionParameters-Schnittstellen und ‑Definitionen für den Audio-Offload-Modus 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. Texttracks mitsampleMimeType = application/x-media3-cueswerden jetzt direkt vonTextRendererverarbeitet, ohne dass eineSubtitleDecoder-Instanz erforderlich ist.
- Metadaten:
MetadataDecoder.decodewird für „Nur-Decodierung“-Samples nicht mehr 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()in „nicht blockierend“. 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).
- Geben Sie den StreamManager frei, bevor Sie
AdsLoader.destroy()aufrufen. - IMA SDK-Version 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()über 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, die zum Ausfüllen der Benachrichtigung und der Plattformsitzung verwendet 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 Controller für Anrufe 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 weitergeht, wenn eine Verbindung zu einem altenMediaSessionCompatbesteht. - 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)hinzugefügt, damit Apps die Standardverarbeitung von Medientastenereignissen ü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 geöffnet wird, über das Nutzer eine geeignete Audioausgabe (z.B. Bluetooth-Kopfhörer) verbinden können. 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 mit einem Intervall aktualisiert, das anhand der letzten Lade-Startzeit und nicht anhand der letzten Lade-Abschlusszeit 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()aktivieren (#288).
- RTSP-Erweiterung:
- Race-Bedingung behoben, die beim Fallback auf TCP zu
IndexOutOfBoundsExceptionführen konnte, oder die Wiedergabe in einigen Situationen hängen blieb. - Der Status in der RTSP-Einrichtung wird geprüft, 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 Option wird gegenüberC.BUFFER_FLAG_DECODE_ONLYbevorzugt, das eingestellt wird. - Fügen Sie
Decoder.setOutputStartTimeUsundSimpleDecoder.isAtLeastOutputStartTimeUshinzu, damit Decoder reine Decodierungs-Samples vor dem Beginn verwerfen können. Diese sollteBuffer.isDecodeOnlyvorgezogen werden, da diese Einstellung eingestellt 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 einem
ArithmeticExceptionführen kann (#617).
- Fehler behoben, bei dem das Deaktivieren einer Oberfläche im Leanback-Code zu einem
- 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
- Common Library:
- 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. - Zusätzliche Felder zum Logging von Common Media Client Data (CMCD) hinzugefügt: Streamingformat (sf), Streamtyp (st), Version (v), Top-Bitrate (tb), Objektdauer (d), gemessener Durchsatz (mtp) und Objekttyp (ot) (#8699).
- Ein Problem in
- Audio:
- Ein Fehler wurde behoben, bei dem
Player.getState()beim Abspielen sehr kurzer Dateien nie zuSTATE_ENDEDwechselte (#538).
- Ein Fehler wurde behoben, bei dem
- Audio-Offload:
- Stelle Ogg-ID-Header- und Kommentar-Header-Seiten dem Bitstream für die ausgelagerte Opus-Wiedergabe gemäß RFC 7845 voran.
- Video:
- H.265/HEVC: Fehler beim Parsen von SPS-Kurz- und Langzeit-Referenzbildinformationen 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 Länge des Untertitels auf 32 Zeichen begrenzt wurde (was gemäß der 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, damit das benutzerdefinierte Layout für den Controller verfügbar ist, wenn die Verbindung hergestellt ist. - Fälle behoben, in denen
MediaLibraryServiceLegacyStubeinen Fehler an eineResultgesendet hat, die dies nicht unterstützt hat, was zu einemUnsupportedOperationExceptiongeführt hat (#78). - Korrigieren Sie die Art und Weise, wie
PlayerWrappereinenVolumeProviderCompaterstellt, 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
- Common Library:
- Grund für die Unterdrückung bei ungeeigneter Audioroute hinzugefügt und Wiedergabe, wenn bereit. Grund für zu lange Unterdrückung geändert. (#15).
- Befehle zum Player hinzufügen:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Fügen Sie dem 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)
FilteringMediaSourcehinzufügen, um verfügbare Tracktypen aus einemMediaSourcezu filtern.- 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:- 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.
- 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 der 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, löst derDefaultTrackSelectoreine neue Trackauswahl aus, 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 vonDefaultAudioSinkeinen erforderlichen Parametercontexthinzu, mit dem sichDefaultAudioSinkals Listener fürAudioCapabilitiesReceiverregistriert und seineaudioCapabilities-Property aktualisiert, wenn es über eine Änderung der Funktionen informiert 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 die Skalierung/Mischung auf Audiokanäle anzuwenden. - Neuer int-Wert
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEwurde zuDecoderDiscardReasonshinzugefügt, um den Audiodecoder 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:
MediaCodecVideoRenderersoll einenVideoSizemit einer Breite und Höhe von 0 melden, 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.getCurrentTrackskeine Videos 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, bei dem eine neue Anzeigengruppe in Livestreams eingefügt wurde, weil die berechnete Inhaltsposition in aufeinanderfolgenden Zeitachsen leicht variierte.
- Sitzung:
- Fügen Sie die Hilfsmethode
MediaSession.getControllerForCurrentRequesthinzu, um Informationen über den Controller abzurufen, der gerade einePlayer-Methode aufruft. androidx.media3.session.MediaButtonReceiverwurde hinzugefügt, damit Apps die Wiedergabe mit Ereignissen von Medientasten fortsetzen können, die z. B. 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 für Medienbenachrichtigungen werden unter Android 12 und niedriger standardmäßig die Befehlsschaltflächen „Zurück“ und „Weiter“ 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 für Medienbenachrichtigungen werden standardmäßig die Befehlsschaltflächen „Zurück“ und „Weiter“ 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. - Fehler behoben, bei dem die erneute Vorbereitung einer Multi-Period-Live-DASH-Medienquelle eine
IndexOutOfBoundsExceptionerzeugte (#10838).
- Entferne den Medienzeitversatz aus
- HLS-Erweiterung:
- Fügen Sie
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)hinzu, um ein Zeitlimit für den Ladethread festzulegen, der auf die Initialisierung vonTimestampAdjusterwartet. Wenn die Initialisierung nicht vor dem Zeitlimit abgeschlossen ist, 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 die Groß-/Kleinschreibung im URI-Schema in
DataSourceContractTestignoriert wird.
- Prüfen Sie, ob die Groß-/Kleinschreibung im 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 einenDatabaseProviderakzeptiert, 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. - Entfernen Sie die verworfenen Methoden
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateundcopyWithVideoSizeund verwenden Sie stattdessenFormat.buildUpon()und Setter-Methoden. - Entfernen Sie die verworfene
ExoPlayer.retry()und verwenden Sie stattdessenprepare(). - Der verworfene
DefaultTrackSelector-Konstruktor ohne Argumente wurde entfernt. Verwenden Sie stattdessenDefaultTrackSelector(Context). - Entfernen Sie den verworfenen Konstruktor
OfflineLicenseHelperund 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. - Der verworfene Konstruktor
OfflineLicenseHelperwurde entfernt. Verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Vier veraltete
AnalyticsListener-Methoden wurden entfernt:onDecoderEnabled, verwenden Sie stattdessenonAudioEnabledund/oderonVideoEnabled.onDecoderInitialized, verwenden Sie stattdessenonAudioDecoderInitializedund/oderonVideoDecoderInitialized.onDecoderInputFormatChanged, verwenden Sie stattdessenonAudioInputFormatChangedund/oderonVideoInputFormatChanged.onDecoderDisabled, verwenden Sie stattdessenonAudioDisabledund/oderonVideoDisabled.
- Entfernen Sie die verworfenen
Player.Listener.onSeekProcessedundAnalyticsListener.onSeekProcessedund verwenden Sie stattdessenonPositionDiscontinuitymitDISCONTINUITY_REASON_SEEK. - Entfernen Sie
ExoPlayer.setHandleWakeLock(boolean)und verwenden Sie stattdessensetWakeMode(int). - Entfernen Sie das verworfene
DefaultLoadControl.Builder.createDefaultLoadControl()und verwenden Sie stattdessenbuild(). - Entfernen Sie das verworfene
MediaItem.PlaybackPropertiesund verwenden Sie stattdessenMediaItem.LocalConfiguration. Das 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.
Dieser Release entspricht dem ExoPlayer 2.18.7-Release.
Diese Version enthält die folgenden Änderungen seit der Version 1.0.1:
- Hauptbibliothek:
- 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 ohne Lesen des „End of Stream“-Samples aus der Warteschlange entfernt wurde. (#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 einem Legacy-MediaSessionCompatbesteht, das seine Aktionen aktualisiert. - Fehler behoben, der verhinderte, dass
MediaLibraryServicefür einen 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.
- Hauptbibliothek:
- Überschreibung des Ziel-Livestreams beim Springen zur Standardposition zurücksetzen (#11051).
- Es wurde ein Fehler behoben, bei dem 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 Legacy-MediaControllerCompat.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 Version 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 der ExoPlayer-Version 2.18.4.
- Hauptbibliothek:
- 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. - Problemumgehung 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 bei der Wiedergabe von Medien mit einer Framerate, die weit über der Aktualisierungsrate des Displays liegt, wurden behoben.
- Ordne das HEVC-HDR10-Format
- Streamen:
- Problem mit vorübergehendem
STATE_IDLEbeim Wechsel zwischen Mediendateien behoben (#245).
- Problem mit vorübergehendem
- RTSP:
- Die IllegalArgumentException, die beim Parsen von ungültigen RTSP-Describe-Antwortnachrichten ausgelöst wird, 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 Streams mit dynamischer Anzeigenbereitstellung 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 Streams mit dynamischer Anzeigenbereitstellung 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.
- Hauptbibliothek:
- Die Decoder-Sortierlogik des Renderers wurde angepasst, um die Einstellungen von
MediaCodecSelectorzu berücksichtigen, 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. - Download-Manager-Hilfsprogramme können jetzt gelöscht werden (#10776).
- Füge
BasePlayer.seekToeinen Parameter hinzu, um auch den Befehl anzugeben, der für die Suche verwendet wird. - Verwendung des Designs beim Laden von Drawables in API 21+ (#220).
ConcatenatingMediaSource2wurde hinzugefügt, um mehrere Mediendateien in einem einzigen Fenster zu kombinieren (#247).
- Die Decoder-Sortierlogik des Renderers wurde angepasst, um die Einstellungen von
- Extraktoren:
- Löse eine
ParserExceptionanstelle einerNullPointerExceptionaus, wenn in der Beispiel-Tabelle (stbl) eine erforderliche Beispiel-Beschreibung (stsd) fehlt, wenn trak-Atome geparst werden. - Samples werden beim direkten Springen zu einem Synchronisierungsframe in fMP4 korrekt übersprungen (#10941).
- Löse eine
- Audio:
- Verwende die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
AudioTrackbei direkten Wiedergaben (Passthrough) zu berechnen.
- Verwende die Bitrate des komprimierten Audioformats, um die minimale Puffergröß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:
- Die 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 einer Leserichtung von rechts nach links (RTL) verwendet wird (#227).
- Die verworfene
- Sitzung:
- Füge die abstrakte Klasse
SimpleBasePlayerhinzu, um die SchnittstellePlayerfür benutzerdefinierte Player zu implementieren. - 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 verwendet, um die Übersichtlichkeit zu verbessern (#216). onSetMediaItems-Callback-Listener hinzugefügt, um die Möglichkeit zu bieten, dieMediaItem-Liste, den Startindex und die Position nach Sitzung zu ändern/festzulegen, bevor sie im 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:
- Cast SDK-Version auf 21.2.0 aktualisiert.
- IMA-Erweiterung:
- Entferne den Player-Listener von
ImaServerSideAdInsertionMediaSourceim Anwendungsthread, um Threading-Probleme zu vermeiden. - Füge der
ImaServerSideAdInsertionMediaSource.AdsLoader.Builderdie PropertyfocusSkipButtonWhenAvailablehinzu, um den Fokus auf den Überspringen-Button auf TV-Geräten zu legen, und setze sie standardmäßig auf „true“. - Fügen Sie der
ImaServerSideAdInsertionMediaSource.AdsLoaderdie MethodefocusSkipButton()hinzu, um den Fokus programmatisch auf die Schaltfläche zum Überspringen zu legen. - Die IMA SDK-Version wurde 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.
- Hauptbibliothek:
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 Speicherplatz hängen bleibt.
- Schließen Sie den Tracing-Block „doSomeWork“, wenn die Auslagerung aktiviert ist.
- Problem mit dem Sitzungstracking bei schnellen Suchvorgängen 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 einer
IllegalStateExceptionführen kann (#10758).
- Build:
- Mindestens
compileSdkVersionerzwingen, um Kompilierungsfehler zu vermeiden (#10684). - Veröffentlichungsblock vermeiden, wenn er in einem anderen Gradle-Build enthalten ist.
- Mindestens
- Trackauswahl:
- Andere Tracks gegenüber Dolby Vision bevorzugen, wenn das Display Dolby Vision nicht unterstützt. (#8944).
- Downloads:
- Potenzielle Endlosschleife in
ProgressiveDownloaderbehoben, die durch gleichzeitiges Herunterladen und Abspielen mit derselbenPriorityTaskManagerverursacht wurde (#10570). - Downloadbenachrichtigung sofort anzeigen (#183).
- Die Anzahl der parallelen Downloadentfernungen wurde auf 1 begrenzt, um die Erstellung übermäßiger Threads zu vermeiden (#10458).
- Potenzielle Endlosschleife in
- Video:
- Versuche es mit einem alternativen Decoder für Dolby Vision, wenn das Display es nicht unterstützt. (#9794).
- Audio:
- Verwende
SingleThreadExecutor, umAudioTrack-Instanzen freizugeben, um OutOfMemory-Fehler zu vermeiden, wenn mehrere Player gleichzeitig freigegeben werden (#10057). - Fügt
AudioOffloadListener.onExperimentalOffloadedPlaybackfür den AudioTrack-Offload-Status hinzu. (#134). AudioTrackBufferSizeProviderals öffentliche Schnittstelle festlegen.- 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 Wiedergabeposition ausgibt.
- DRM:
- Problem in der ClearKey-Implementierung von Android 13 umgehen, 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 des zuletzt wiedergegebenen Medienelements wird angezeigt (#112). - Starten Sie keinen Dienst im Vordergrund mit einem Pending Intent für die Pause (#167).
- Manuelles Ausblenden des „Badges“, das mit der von
DefaultNotificationProvidererstellten Benachrichtigung verknüpft ist, in API 26 und API 27 (das Badge wird in API 28+ 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:
getDeviceInfo()implementieren, umCastPlayeridentifizieren zu können, wenn die Wiedergabe mit einemMediaControllergesteuert wird (#142).
- 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.
- Hauptbibliothek:
- 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).
- Benutzerdefinierten 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 2.18.0-Release.
- Hauptbibliothek:
- Unterstützung für die Android-Plattformdiagnose über
MediaMetricsManageraktivieren. ExoPlayer leitet Wiedergabeereignisse und Leistungsdaten an die Plattform weiter, um Informationen zur Systemleistung und zum Debugging 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 mitExoPlayer.Builder.setUsePlatformDiagnostics(false)festlegen, dass sie nicht zur Plattformdiagnose für ExoPlayer beitragen. - 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 in API 29 und 30 wird beendet. Bei diesen Wiedergaben wird von einem 4G-Netzwerk ausgegangen.
- Ü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:
- Klasse
TrackSelectionOverridesinTrackSelectionParametersreduzieren undTrackSelectionOverridezu einer Klasse der obersten Ebene hochstufen. TracksInfoinTracksundTracksInfo.TrackGroupInfoinTracks.Groupumbenennen.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 bevorzugt dasDefaultTrackSelectorStereo-/Monoformate 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 Audio-Spatialisierung 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. Das Format mit der höchsten Kanalanzahl wird bevorzugt. Damit diese Funktion aktiviert werden kann, muss dieDefaultTrackSelector-Instanz mit einemContexterstellt werden.
- Klasse
- Video:
- Benennen Sie
DummySurfaceinPlaceholderSurfaceum. - AV1-Unterstützung für
MediaCodecVideoRenderer.getCodecMaxInputSizehinzugefügt.
- Benennen Sie
- 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. - Plattform (API 29+) abfragen oder die Anzahl der Audiocodierungskanäle für Audio-Passthrough annehmen, wenn die Anzahl der Audioformatkanäle nicht festgelegt ist, was bei der HLS-Vorbereitung ohne Chunks der Fall ist (10204).
- Konfiguriere
AudioTrackmit der KanalmaskeAudioFormat.CHANNEL_OUT_7POINT1POINT4, wenn der Decoder 12-Kanal-PCM-Audio ausgibt (#10322).
- Digitale Rechteverwaltung
- Die DRM-Sitzung wird jetzt immer korrekt aktualisiert, wenn unmittelbar nach einer Formatänderung gespult 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 Übermittlung 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:
- Benennen Sie
DummyDataSourceinPlaceholderDataSourceum. - Problemumgehung für die OkHttp-Unterbrechungsbehandlung.
- Benennen Sie
- Sitzung:
- Ersetzen Sie
MediaSession.MediaItemFillerdurchMediaSession.Callback.onAddMediaItems, um die asynchrone Auflösung von Anfragen zu ermöglichen. - Unterstützung von
setMediaItems(s)-Methoden, wennMediaControllereine Verbindung zu einer Legacy-Mediensitzung herstellt. - Entfernen Sie
MediaController.setMediaUriundMediaSession.Callback.onSetMediaUri. Dieselbe Funktionalität kann mitMediaController.setMediaItemundMediaSession.Callback.onAddMediaItemserreicht werden. - Leite alte
MediaController-Aufrufe zur Medienwiedergabe anMediaSession.Callback.onAddMediaItemsstatt anonSetMediaUriweiter. - Fügen Sie
MediaNotification.ProviderundDefaultMediaNotificationProviderhinzu, um die Benachrichtigung anzupassen. - Fügen Sie
BitmapLoaderundSimpleBitmapLoaderzum Herunterladen von Coverbildern hinzu. - 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). - Änderung der Positionsinformationen der Sitzung auf der Zeitachse(#51).
- NPE in
MediaControllerImplBasenach dem Freigeben 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öglichkeitgetDefaultTrackSelectorParameters(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 bei der Überprüfung 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.
- Kernbibliothek:
- 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).
- Benennen Sie
DecoderCounters#inputBufferCountinqueuedInputBufferCountum. 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).
- Bevorzugen Sie Einstellungen für Audioinhalte (z. B. den Standard-Audiotrack oder einen Track, der der Systemsprache 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 durch Festlegen eineridimTrackGroup-Konstruktor unterscheidbar gemacht werden. 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 liegt (#9784).
- Video:
- Die Decoder-Fallback-Logik für Dolby Vision wurde korrigiert, sodass bei Bedarf ein kompatibler H264/H265-Decoder verwendet wird.
- Audio:
- Die Fallback-Logik des Decoders für Dolby Atmos (E-AC3-JOC) wurde korrigiert, sodass bei Bedarf ein kompatibler E-AC3-Decoder verwendet wird.
- Ä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) von IMA 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 wichtige 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 wichtige 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. Alternativ können Sie die Vorbereitung ohne Chunks mit
HlsMediaSource.Factory.setAllowChunklessPreparation(false)deaktivieren. - Unterstützung für die Suche nach genauen Keyframes in HLS (#2882).
- RTSP:
- Stellen Sie eine Client-API bereit, um die für jede 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 ignorieren (#9619).
- Stellen Sie eine Client-API bereit, um die für jede 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 der 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)für den 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 GNU abhängig machen (#9933).
- Kompatibilität mit Android 12:
- Aktualisiere 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).
- Aktualisiere 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 mitActionFileUpgradeUtilalte 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 zusammenfassen, 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.