Media3
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
2. Juli 2025 | 1.7.1 | - | 1.8.0-beta01 | 1.8.0-alpha01 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Media3 hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Cool
dependencies { def media3_version = "1.6.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 integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.6.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 integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Im Media3-Issue-Tracker finden Sie Antworten auf Fragen, bekannte Probleme und Funktionsanfragen. Außerdem können Sie dort neue Probleme melden.
Version 1.8.0
Version 1.8.0-beta01
2. Juli 2025
androidx.media3:media3-*:1.8.0-beta01
wird veröffentlicht.
Version 1.8.0-beta01 enthält diese Commits.
- Gemeinsame Mediathek:
- Unterstützung für das Ersetzen des Players in
ForwardingSimpleBasePlayer
hinzugefügt.
- Unterstützung für das Ersetzen des Players in
- ExoPlayer:
- Unterstützung für die Verwendung der virtuellen Geräte-ID aus dem
Context
, die anExoPlayer.Builder
übergeben wird, hinzufügen. - Dynamische Planung im Scrubbing-Modus standardmäßig aktivieren
- Vermeide unnötiges Neuladen einer Quelle, wenn du zum Ende eines Elements springst.
- Standardmäßig
MediaCodec.BUFFER_FLAG_DECODE_ONLY
im Scrubbing-Modus verwenden - Wird
IllegalStateException
ausgelöst, wennPreloadMediaSource
von einemExoPlayer
mit einem Wiedergabethread wiedergegeben wird, der sich vom Preload-Thread unterscheidet (#2495). cloneAndMove
zuShuffleMode
mit einer Standardimplementierung hinzufügen (#2226).- Das Standardverhalten von
Renderer.getMinDurationToProgressUs
wird so geändert, dass ein größerer Wert zurückgegeben wird, wenn kein Aufruf vonrender
erforderlich ist. - Es wurde ein Fehler behoben, durch den die interne Planung den letzten Frame verzögerte, wenn während der Pause zum Ende gesucht wurde. Der Fehler wird derzeit nur behoben, wenn
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled
aktiviert ist.
- Unterstützung für die Verwendung der virtuellen Geräte-ID aus dem
- Transformer:
CodecDbLite
hinzugefügt, um chipsatzspezifische Optimierungen der Video-Codierungseinstellungen zu ermöglichen.- Fügen Sie dem
DefaultEncoderFactory
das FlagsetEnableCodecDbLite
hinzu, um die Optimierung der CodecDB Lite-Einstellungen zu aktivieren. Dieses Flag ist standardmäßig auf „false“ gesetzt.
- Extraktoren:
- Unterstützung für das Suchen in fragmentierten MP4-Dateien mit mehreren
sidx
-Atomen hinzugefügt. Dieses Verhalten kann mit dem FlagFLAG_MERGE_FRAGMENTED_SIDX
aufFragmentedMp4Extractor
aktiviert 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).
- Die Verarbeitung von H.265-SEI-Einheiten wurde korrigiert, sodass unbekannte SEI-Typen vollständig übersprungen werden. (#2456)
- Aktualisieren Sie
WavExtractor
, damit die SubFormat-Daten der Header-Erweiterung für das Audioformat verwendet werden, wenn eine Datei vom TypWAVE_FORMAT_EXTENSIBLE
geparst wird. - MP4: Unterstützung für die Felder
ipcm
undfpcm
zum Definieren von PCM-Rohaudiotracks (64-Bit-Gleitkomma-PCM wird nicht unterstützt). - MP4: Verarbeiten Sie den Rotationsanteil von
tkhd
-Transformationsmatrizen, die das Video sowohl drehen als auch spiegeln. So wird dafür gesorgt, dass mit der nach vorn gerichteten iPhone-Kamera aufgenommene gespiegelte Videos richtig ausgerichtet, aber falsch an der Y-Achse gespiegelt werden (#2012).
- Unterstützung für das Suchen in fragmentierten MP4-Dateien mit mehreren
- Audio:
- Unterstützung für alle linearen PCM-Beispielformate in
ChannelMappingAudioProcessor
undTrimmingAudioProcessor
hinzugefügt. - Unterstützung für Audio-Lücken in
CompositionPlayer
hinzugefügt. - Entferne den fälschlichen Anruf an
BaseAudioProcessor#flush()
vonBaseAudioProcessor#reset()
.
- Unterstützung für alle linearen PCM-Beispielformate in
- Video:
- Die reibungslose Videobildwiedergabe beim Start wurde verbessert, wenn Audio-Samples nicht genau an der angeforderten Position beginnen.
- Die Problemumgehung für abgelöste Oberflächen wurde auf Realme-Geräte ausgeweitet (#2059).
- Text:
- Ein Wiedergabestopp wurde behoben, der auftrat, wenn ein Untertitelsegment zuerst nicht geladen werden konnte, später aber erfolgreich geladen wurde, gefolgt von mehreren leeren Untertitelsegmenten (#2517).
- Metadaten:
- Die Unterstützung für das Abrufen der Medienlänge und von
Timeline
fürMetadataRetriever
wurde hinzugefügt und zur instanzbasiertenAutoCloseable
API migriert. Verwenden Sie die neueBuilder
, um eine Instanz für eineMediaItem
zu erstellen. Rufen Sie dannretrieveTrackGroups()
,retrieveTimeline()
undretrieveDurationUs()
auf, umListenableFuture
s für die Metadaten abzurufen. Die bisherigen statischen Methoden sind jetzt veraltet (#2462).
- Die Unterstützung für das Abrufen der Medienlänge und von
- Bild:
- Beschränken Sie die decodierten Bitmaps auf die Displaygröße in
BitmapFactoryImageDecoder
, um zu vermeiden, dass eine App mitCanvas: trying to draw too large bitmap.
ausPlayerView
abstürzt, wenn versucht wird, sehr große Bilder (z.B. 50 MP) anzuzeigen. - Ändern Sie die Signatur von
DefaultRenderersFactory.getImageDecoderFactory()
, sodass sie einenContext
-Parameter akzeptiert. - Richten Sie die maximale Bitmap-Ausgabegröße, die in
CompositionPlayer
verwendet wird, an der Größe aus, die bereits inTransformer
verwendet wird. Das bedeutet, dass beiCompositionPlayer
die Displaygröße beim Decodieren von Bitmaps nicht berücksichtigt wird, anders als beiExoPlayer
.
- Beschränken Sie die decodierten Bitmaps auf die Displaygröße in
- Muxer:
- Ein Fehler wurde behoben, durch den für Audio-Samples in fragmentierten MP4-Dateien nicht die richtigen Sample-Flags festgelegt wurden.
- Sitzung:
- Es wurde ein Fehler behoben, bei dem der Aufruf von
setSessionExtras
über den Hauptthread beim Ausführen des Players über einen anderen Anwendungs-Thread als den Hauptthread zu einemIllegalStateException
geführt hat (#2265). - Benachrichtigungen werden nicht automatisch angezeigt, wenn ein Player mit Media-Elementen eingerichtet wird, ohne sie vorzubereiten oder abzuspielen (#2423https://github.com/androidx/media/issues/2423). Dieses Verhalten kann über
MediaSessionService.setShowNotificationForIdlePlayer
konfiguriert werden. - Fügen Sie allen oder ausgewählten Controllern benutzerdefinierte
PlaybackException
hinzu. - Ein Fehler wurde behoben, durch den das Suchen in einem Livestream auf einem
MediaController
zu einemIllegalArgumentException
führen konnte. - Bei Livestreams solltest du keine Wiedergabeposition mehr veröffentlichen und die Möglichkeit zum Suchen im aktuellen Element für Media-Controller der Plattform deaktivieren, um Positionsartefakte in der Android Auto-Benutzeroberfläche (und anderen Controllern, die diese Informationen aus der Media-Sitzung der Plattform verwenden) zu vermeiden (#1758).
- Es wurde ein Fehler behoben, bei dem der Aufruf von
- Cronet-Erweiterung:
- Automatische Cookie-Verarbeitung hinzufügen (#5975).
- HLS-Erweiterung:
- Die Playlist-Analyse wurde korrigiert, sodass
\f
(Seitenvorschub) in Attributwerten mit Anführungszeichen akzeptiert wird (#2420). - Unterstützung für das Aktualisieren von Interstitials mit derselben ID (#2427).
- Ein Fehler wurde behoben, bei dem Fehler beim Laden von Playlists manchmal nicht weitergegeben wurden, wenn bei einem Livestream keine Segmente mehr zum Laden vorhanden waren (#2401https://github.com/androidx/media/issues/2401).
- Untertitel-Renditionen nach NAME-Tag gruppieren, ähnlich wie Audio-Renditionen bereits gruppiert werden (#1666).
- Die Playlist-Analyse wurde korrigiert, sodass
- DASH-Erweiterung:
- Es wurde ein Fehler behoben, bei dem das Verkürzen der Dauer eines DASH-Zeitraums eine Ausnahme auslösen konnte, wenn Samples über die neue Dauer hinaus bereits von der Rendering-Pipeline gelesen wurden (#2440).
- Ein Fehler wurde behoben, bei dem Weiterleitungen bei Verwendung von CMCD-Suchparametern nicht gefolgt wurde (#2475).
- RTSP-Erweiterung:
- Der Fehler
RtspClient
wurde behoben, sodass der Standort-URI verwendet wird, der bei der Verarbeitung einer HTTP 302-Antwort angegeben wurde (#2398).
- Der Fehler
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Fehler behoben, bei dem
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
keine Auswirkungen auf Audio-Decoder-Erweiterungen hatte (#2258).
- Fehler behoben, bei dem
- Cast-Erweiterung:
- Unterstützung für
setVolume()
undgetVolume()
hinzugefügt (#2279). - Verhindern, dass CastPlayer in den STATE_BUFFERING wechselt, wenn die Zeitachse leer ist.
- Unterstützung für
- Test-Tools:
- Fügen Sie
advance(player).untilPositionAtLeast
unduntilMediaItemIndex
zuTestPlayerRunHelper
hinzu, um den Spieler voranzubringen, bis eine bestimmte Position erreicht ist. In den meisten Fällen sind diese Methoden zuverlässiger als die vorhandenenuntilPosition
- unduntilStartOfMediaItem
-Methoden. - Verschieben Sie
FakeDownloader
in das Modultest-utils-robolectric
, damit es in anderen Tests wiederverwendet werden kann.
- Fügen Sie
Version 1.8.0-alpha01
19. Mai 2025
androidx.media3:media3-*:1.8.0-alpha01
wird veröffentlicht.
Version 1.8.0-alpha01 enthält diese Commits.
- ExoPlayer:
- Die Methode
ExoPlayer.setScrubbingModeEnabled(boolean)
wurde hinzugefügt. Dadurch wird der Player für viele häufige Suchvorgänge optimiert, z. B. wenn ein Nutzer einen Scrubbing-Balken zieht. Das Verhalten des Scrubbing-Modus kann mitsetScrubbingModeParameters(..)
aufExoPlayer
undExoPlayer.Builder
angepasst werden. - Anpassen der Toleranz für die Suche nach Bruchteilen im Scrubbing-Modus zulassen.
- Die Codec-Betriebsrate im Scrubbing-Modus wurde erhöht.
- Es wurde ein Fehler behoben, bei dem Vorbereitungsfehler im Inhalt von
AdsMediaSource
möglicherweise nie gemeldet wurden (#2337). - Speicherleck in
MergingMediaSource
behoben, das z. B. beim Sideloading von Untertiteln verwendet wird (#2338). - Ermögliche, dass
CmcdConfiguration.Factory
null
zurückgibt, um das CMCD-Logging für bestimmte Media-Elemente zu deaktivieren (#2386). - Die Standardpuffergröße für Bilder wurde von 128 KB (Kopierfehler aus Text-Tracks) auf 26 MB erhöht. Das reicht für Ultra-HDR-Bilder mit 50 MP aus (#2417).
- Füge
PreCacheHelper
hinzu, damit Apps ein einzelnes Medium mit einer bestimmten Startposition und Dauer vorab im Cache speichern können.
- Die Methode
- Transformer:
- Wenn Sie eine anfängliche Lücke (die über
addGap()
hinzugefügt wurde) mit stummem Audio füllen möchten, müssen Sie jetztexperimentalSetForceAudioTrack(true)
inEditedMediaItemSequence.Builder
explizit festlegen. Wenn sich die Lücke in der Mitte der Sequenz befindet, ist dieses Flag nicht erforderlich. - Verschieben Sie die
Muxer
-Schnittstelle vonmedia3-transformer
nachmedia3-muxer
. - Die Einstellung
MediaItem.Builder().setImageDuration(long)
ist jetzt erforderlich, um ein Media-Element als Bild zu importieren. - Füge
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)
hinzu. Diese enthält eine MP4-Schnittliste, die den Playern mitteilt, dass sie Samples zwischen dem Keyframe vor dem Schnittstartpunkt und dem Schnittstartpunkt ignorieren sollen. - Die Composition Demo-App wurde aktualisiert, um Kotlin und Jetpack Compose zu verwenden. Außerdem wurde ein benutzerdefiniertes
VideoCompositorSettings
hinzugefügt, um Sequenzen in einem 2×2- oder BiB-Layout anzuordnen.
- Wenn Sie eine anfängliche Lücke (die über
- Extraktoren:
- MP3: Verwenden Sie Dauer und Datengröße aus nicht suchbaren Xing-, VBRI- und ähnlichen Metadaten mit variabler Bitrate, wenn aufgrund von
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
(#2194) auf die Suche mit konstanter Bitrate zurückgegriffen wird.
- MP3: Verwenden Sie Dauer und Datengröße aus nicht suchbaren Xing-, VBRI- und ähnlichen Metadaten mit variabler Bitrate, wenn aufgrund von
- Audio:
- Konstantes Power-Upmixing/Downmixing in DefaultAudioMixer zulassen.
ChannelMappingAudioProcessor
,TrimmingAudioProcessor
undToFloatPcmAudioProcessor
öffentlich machen (#2339).- Verwenden Sie
AudioTrack#getUnderrunCount()
inAudioTrackPositionTracker
, um Unterläufe inDefaultAudioSink
zu erkennen, anstatt eine Schätzung nach dem Best-Effort-Prinzip zu verwenden. - Die Glättung von Audio-Zeitstempeln wurde verbessert, um unerwartete Positionsabweichungen des Audioausgabegeräts zu berücksichtigen.
- Es wurde ein Fehler behoben, bei dem die A/V-Synchronisierung in den ersten 10 Sekunden nach dem Fortsetzen der Wiedergabe nach einer Pause unterbrochen wurde, wenn das Gerät mit Bluetooth-Geräten verbunden war.
- Es wurde ein Fehler behoben, durch den für
AnalyticsListener.onAudioPositionAdvancing
nicht die Zeit angegeben wurde, zu der die Audioausgabe begonnen hat, sondern die Zeit der ersten Messung.
- Video:
- Experimentelle
ExoPlayer
-API hinzugefügt, um das FlagMediaCodec.BUFFER_FLAG_DECODE_ONLY
beim Einreihen von Eingabepuffern nur für die Decodierung zu verwenden. Dieses Flag weist den Decoder an, die reinen Decodierungspuffer zu überspringen, was zu einem schnelleren Suchen führt. Aktivieren Sie die Funktion mitDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag
. - Verbesserte Codec-Leistungsprüfungen für Software-Video-Codecs. Dies kann dazu führen, dass einige zusätzliche Tracks als
EXCEEDS_CAPABILITIES
markiert werden. - Problem behoben, bei dem es auf einigen Geräten zu VP9 Widevine-Wiedergabefehlern kam (#2408).
- Experimentelle
- Text:
- Das Problem, dass bei SSA- und SubRip-Dateien kein Cue für den Fortschritt angezeigt wurde, wenn Untertitel aktiviert wurden, wurde behoben (#2309).
- Das Problem, dass die Wiedergabe beim Wechsel von einem Stream mit Untertitel-Fehler zu einem Livestream mit einem leeren Untertitel-Track hängen bleibt, wurde behoben (#2328).
- Es wurde ein Problem behoben, bei dem CEA-608-Untertitel bei der Wiedergabe von H.262-Streams mit B-Frames verstümmelt dargestellt wurden (#2372).
- Unterstützung für SSA-Untertitel mit
CodecId = S_TEXT/SSA
in Matroska-Dateien hinzugefügt. Bisher wurde inMatroskaExtractor
nurCodecId = S_TEXT/ASS
unterstü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
layer
in SubStation Alpha-Untertiteldateien (SSA) hinzugefügt, mit dem die Z-Reihenfolge von Cues definiert wird, wenn mehrere gleichzeitig auf dem Bildschirm angezeigt werden (#2124).
- Wirkung:
- Fügen Sie
Presentation.createForShortSide(int)
hinzu, um einPresentation
zu erstellen, bei dem die kürzeste Seite immer dem angegebenen Wert entspricht, unabhängig von der Ausrichtung der Eingabe.
- Fügen Sie
- Muxer:
- Die
writeSampleData()
API verwendet jetzt die muxerspezifischeBufferInfo
-Klasse anstelle vonMediaCodec.BufferInfo
. - Fügen Sie
Muxer.Factory#supportsWritingNegativeTimestampsInEditList
hinzu, das standardmäßig auf „false“ gesetzt ist.
- Die
- IMA-Erweiterung:
- Ein Fehler wurde behoben, durch den ein Ladefehler in einer Anzeige versehentlich eine andere Anzeigengruppe ungültig machen konnte.
- Es wurde ein Fehler behoben, durch den die Wiedergabe von Anzeigengruppen nach dem Ende eines VOD-Fensters unterbrochen wurde.
Anzeigengruppen mit einer Startzeit nach dem Zeitraum werden nicht mehr in die
MediaPeriodQueue
eingereiht (#2215).
- Sitzung:
- Es wurde ein Fehler behoben, bei dem das Übergeben von „null“ in
getLibraryRoot
einerMediaBrowser
, die mit einer Legacy-MediaBrowserServiceCompat
verbunden ist, zu einerNullPointerException
führte. - Ein Fehler wurde behoben, durch den die alte Sitzungs-App beim Senden benutzerdefinierter Aktionen, eines Suchergebnisses oder einer „getItem“-Anfrage mit einem
ClassNotFoundException
abgestürzt ist. - Es wurde ein Fehler behoben, durch den
MediaItem.LocalConfiguration.uri
für dieMediaMetadata
der Plattform-Sitzungen freigegeben wurde. Wenn Sie einen URI absichtlich freigeben möchten, damit Controller die Medien noch einmal anfordern können, legen Sie stattdessenMediaItem.RequestMetadata.mediaUri
fest.
- Es wurde ein Fehler behoben, bei dem das Übergeben von „null“ in
- UI:
- Es wurde ein Fehler in Compose behoben, der zu einer Lücke zwischen dem Festlegen der anfänglichen Schaltflächenstatus und dem Beobachten der Statusänderung (z.B. Symbolformen oder Aktivierung) geführt hat. Änderungen, die außerhalb des Beobachtungszeitraums am Player vorgenommen wurden, werden jetzt berücksichtigt (#2313).
- Fügen Sie dem
media3-ui-compose
-Modul Status-Holder und Composables fürSeekBackButtonState
undSeekForwardButtonState
hinzu. - Unterstützung für den Scrubbing-Modus von ExoPlayer für
PlayerControlView
hinzugefügt. Wenn diese Option aktiviert ist, wird der Player in den Scrubbing-Modus versetzt, sobald der Nutzer beginnt, die Scrubbing-Leiste zu ziehen. Bei jeder Bewegung wird einplayer.seekTo
-Aufruf ausgegeben. Der Scrubbing-Modus wird beendet, wenn der Nutzer den Finger vom Bildschirm nimmt. Diese Integration kann entweder mittime_bar_scrubbing_enabled = true
in XML oder mit der MethodesetTimeBarScrubbingEnabled(boolean)
aus Java/Kotlin aktiviert werden. PlayerSurface
soll ein Argument vom Typ „nullable“Player
akzeptieren.
- Downloads:
- Unterstützung für partielle Downloads für progressive Streams hinzugefügt. Apps können mit
DownloadHelper
einen progressiven Stream vorbereiten und mit Angabe der Start- und Endpositionen der zeitbasierten Medien, die der Download abdecken soll, eineDownloadRequest
vom Helfer anfordern. Die zurückgegebeneDownloadRequest
enthält den aufgelösten Bytebereich, mit dem einProgressiveDownloader
erstellt und der Inhalt entsprechend heruntergeladen werden kann. - Fügen Sie
DownloadHelper.Factory
hinzu, durch die die statischenDownloadHelper.forMediaItem()
-Methoden ersetzt werden. - Fügen Sie
Factory
fürSegmentDownloader
-Implementierungen hinzu. - Unterstützung für partielle Downloads für adaptive Streams hinzugefügt. Apps können einen adaptiven Stream mit
DownloadHelper
vorbereiten und eineDownloadRequest
vom Helfer anfordern, indem sie die zeitbasierten Start- und Endpositionen der Medien angeben, die der Download abdecken soll. Der zurückgegebeneDownloadRequest
enthält den aufgelösten Zeitraum, mit dem ein konkreterSegmentDownloader
erstellt und der Inhalt entsprechend heruntergeladen werden kann.
- Unterstützung für partielle Downloads für progressive Streams hinzugefügt. Apps können mit
- HLS-Erweiterung:
- Unterstützung von X-ASSET-LIST und Livestreams mit
HlsInterstitialsAdsLoader
.
- Unterstützung von X-ASSET-LIST und Livestreams mit
- RTSP-Erweiterung:
- Unterstützung für das Parsen von SessionDescriptions mit Zeilen mit nachfolgenden Leerzeichen wurde hinzugefügt (#2357).
- Cast-Erweiterung:
- Unterstützung für
getDeviceVolume()
,setDeviceVolume()
,getDeviceMuted()
undsetDeviceMuted()
hinzugefügt (#2089).
- Unterstützung für
- Test-Tools:
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
ShadowMediaCodecConfig
gemeldeten Codec-Namen durch „media3“ ersetzt.
- Entfernen Sie die folgenden veralteten Symbole:
- Der verworfene Konstruktor
SegmentDownloader
SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)
und die entsprechenden Konstruktoren in den UnterklassenDashDownloader
,HlsDownloader
undSsDownloader
wurden entfernt. - Die eingestellten
Player.hasNext()
undPlayer.hasNextWindow()
wurden entfernt. Verwenden Sie stattdessenPlayer.hasNextMediaItem()
. - Die verworfene
Player.next()
wurde entfernt. Verwenden Sie stattdessenPlayer.seekToNextMediaItem()
. - Die verworfene
Player.seekToPreviousWindow()
wurde entfernt. Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem()
. - Die verworfene
Player.seekToNextWindow()
wurde entfernt. Verwenden Sie stattdessenPlayer.seekToNextMediaItem()
. - Die verworfene
BaseAudioProcessor
wurde im Modulexoplayer
entfernt. VerwendeBaseAudioProcessor
im Modulcommon
. - Entfernen Sie den verworfenen Konstruktor
MediaCodecVideoRenderer
MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)
.
- Der verworfene Konstruktor
Version 1.7.0
Version 1.7.1
16. Mai 2025
Diese Version hat denselben Code wie 1.6.1 und wird veröffentlicht, damit sie als „neuere“ Version als 1.7.0 angezeigt wird. 1.7.0 war eine Alphaversion, die versehentlich als stabil gekennzeichnet wurde (siehe unten).
Version 1.7.0
16. Mai 2025
Diese Version sollte 1.7.0-alpha01
sein, wurde aber auf maven.google. com versehentlich mit 1.7.0
(d.h.stabil) getaggt. Bitte verwenden Sie sie nicht. Sie können bei Version 1.6.1 bleiben oder auf Version 1.7.1 aktualisieren (die denselben Code wie Version 1.6.1 hat).
Version 1.6.0
1.6.1
14. April 2025
androidx.media3:media3-*:1.6.1
wird veröffentlicht.
Version 1.6.1 enthält diese Commits.
- Gemeinsame Mediathek:
- Die Methode
PlaybackParameters.withPitch(float)
wurde hinzugefügt, um das Kopieren einesPlaybackParameters
mit einem neuenpitch
-Wert zu vereinfachen (#2257).
- Die Methode
- ExoPlayer:
- Ein Problem wurde behoben, bei dem der Übergang von Media-Elementen aufgrund eines behebaren Renderer-Fehlers während der Initialisierung des nächsten Media-Elements fehlgeschlagen ist (#2229).
- Ein Problem wurde behoben, bei dem
ProgressiveMediaPeriod
eineIllegalStateException
auslöst, wennPreloadMediaSource
versucht,getBufferedDurationUs()
aufzurufen, bevor sie vorbereitet wurde (#2315). - Das Senden von
CmcdData
in Manifestanfragen für DASH, HLS und SmoothStreaming wurde korrigiert (#2253). - Prüfen Sie, ob
AdPlaybackState.withAdDurationsUs(long[][])
auch nach dem Entfernen von Anzeigengruppen verwendet werden kann. Der Nutzer muss weiterhin ein Array mit Zeiträumen für entfernte Anzeigengruppen übergeben, das leer oder null sein kann (#2267).
- Extraktoren:
- MP4: Parsen Sie
alternate_group
aus dem Feldtkhd
und stellen Sie es alsMp4AlternateGroupData
-Eintrag imFormat.metadata
jedes Tracks bereit (#2242).
- MP4: Parsen Sie
- Audio:
- Ein Problem beim Offload wurde behoben, bei dem die Position beim Abspielen einer Playlist mit kurzen Inhalten hängen bleiben konnte (#1920).
- Sitzung:
- Das Aggregations-Zeitlimit für
MediaSession
-Plattform-Callbacks wurde von 500 auf 100 Millisekunden gesenkt. Außerdem wurde ein experimenteller Setter hinzugefügt, mit dem Apps diesen Wert konfigurieren können. - Es wurde ein Problem behoben, bei dem Benachrichtigungen wieder angezeigt wurden, nachdem sie vom Nutzer geschlossen worden waren (#2302).
- Ein Fehler wurde behoben, bei dem in der Sitzung eine Timeline mit einem einzelnen Element zurückgegeben wurde, obwohl der umhüllte Player leer war. Das passiert, wenn der umhüllte Player
COMMAND_GET_TIMELINE
nicht unterstützt,COMMAND_GET_CURRENT_MEDIA_ITEM
aber schon, und der umhüllte Player leer ist (#2320). - Ein Fehler wurde behoben, bei dem der Aufruf von
MediaSessionService.setMediaNotificationProvider
nach anderen Interaktionen mit dem Dienst wiesetForegroundServiceTimeoutMs
stillschweigend ignoriert wurde (#2305).
- Das Aggregations-Zeitlimit für
- UI:
- Aktivieren Sie
PlayerSurface
, um mitExoPlayer.setVideoEffects
undCompositionPlayer
zu arbeiten. - Es wurde ein Fehler behoben, bei dem
PlayerSurface
nicht mit einem neuenPlayer
neu zusammengesetzt werden konnte.
- Aktivieren Sie
- HLS-Erweiterung:
- Ein Problem wurde behoben, bei dem die Chunk-Dauer in
CmcdData
für HLS-Media nicht festgelegt wurde. Dies führte zu einem Zusicherungsfehler bei der Verarbeitung verschlüsselter Media-Segmente (#2312).
- Ein Problem wurde behoben, bei dem die Chunk-Dauer in
- RTSP-Erweiterung:
- Unterstützung für URI mit RTSPT-Schema als Möglichkeit zum Konfigurieren der RTSP-Sitzung für die Verwendung von TCP hinzugefügt (#1484).
- Cast-Erweiterung:
- Unterstützung für Playlist-Metadaten hinzugefügt (#2235).
1.6.0
26. März 2025
androidx.media3:media3-*:1.6.0
wird veröffentlicht.
Version 1.6.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Fügen Sie
AudioManagerCompat
undAudioFocusRequestCompat
hinzu, um die entsprechenden Klassen inandroidx.media
zu ersetzen. - Führen Sie ein Upgrade von Kotlin von 1.9.20 auf 2.0.20 durch und verwenden Sie das Compose Compiler Gradle-Plug-in. Aktualisieren Sie die KotlinX Coroutines-Bibliothek von Version 1.8.1 auf Version 1.9.0.
- Entfernen Sie die Methode
Format.toBundle(boolean excludeMetadata)
und verwenden Sie stattdessenFormat.toBundle()
. - Fehler in
SimpleBasePlayer
behoben, bei dem durch Festlegen eines neuencurrentMediaItemIndex
inState
nachsetPlaylist
mitnull
MediaMetadata
die Metadaten nicht neu ausgewertet werden (#1940). - Der Zugriff auf
SimpleBasePlayer.State
wird von „protected“ zu „public“ geändert, um Updates in anderen Klassen zu vereinfachen (#2128).
- Fügen Sie
- ExoPlayer:
MediaExtractorCompat
wurde hinzugefügt, eine neue Klasse, die ähnliche Funktionen wie die PlattformMediaExtractor
bietet.- Experimentelle Unterstützung für das Vorbereiten von ExoPlayer für die Wiedergabe mit
MediaCodecVideoRenderer
hinzugefügt. Sie könnenDefaultRenderersFactory
überexperimentalSetEnableMediaCodecVideoRendererPrewarming
konfigurieren, um einen sekundärenMediaCodecVideoRenderer
bisExoPlayer
bereitzustellen. Wenn diese Option aktiviert ist, verarbeitetExoPlayer
das Video aufeinanderfolgender Media-Elemente während der Wiedergabe vorab, um die Latenz beim Übergang zwischen Media-Elementen zu verringern. - Reduzieren Sie die Standardwerte für
bufferForPlaybackMs
undbufferForPlaybackAfterRebufferMs
inDefaultLoadControl
auf 1.000 bzw. 2.000 ms. - Initialisiere
DeviceInfo
und die Lautstärke des Geräts asynchron (falls mitsetDeviceVolumeControlEnabled
aktiviert). Diese Werte sind nicht sofort nachExoPlayer.Builder.build()
verfügbar.Player.Listener
benachrichtigt über Änderungen überonDeviceInfoChanged
undonDeviceVolumeChanged
. - Die ursprüngliche Audio-Sitzungs-ID ist nicht mehr sofort nach dem Erstellen des Players verfügbar. Bei Bedarf können Sie sich die erste Aktualisierung mit
AnalyticsListener.onAudioSessionIdChanged
vorlesen lassen. - Berücksichtige die Sprache bei der Auswahl eines Videotracks. Standardmäßig wird ein „Haupt“-Videotrack ausgewählt, der der Sprache des ausgewählten Audiotracks entspricht, sofern verfügbar. Explizite Einstellungen für die Videosprache können mit
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
angegeben werden. - Fügen Sie der Methode
DefaultTrackSelector.selectVideoTrack()
den ParameterselectedAudioLanguage
hinzu. - Der
retryCount
-Parameter wurdeMediaSourceEventListener.onLoadStarted
und den entsprechendenMediaSourceEventListener.EventDispatcher
-Methoden hinzugefügt. - Ein Fehler wurde behoben, bei dem es bei Playlist-Elementen oder Zeiträumen in DASH-Streams mit mehreren Zeiträumen mit einer Dauer, die nicht mit dem tatsächlichen Inhalt übereinstimmt, am Ende des Elements zu Frame-Freezes kommen konnte (#1698).
- Verschieben Sie
BasePreloadManager.Listener
in einPreloadManagerListener
auf oberster Ebene. RenderersFactory.createSecondaryRenderer
kann implementiert werden, um sekundäre Renderer für das Vorwärmen bereitzustellen. Durch das Vorwärmen können Medienübergänge während der Wiedergabe schneller erfolgen.- Das Senden von
CmcdData
für Manifestanfragen in adaptiven Streamingformaten wie DASH, HLS und SmoothStreaming wurde aktiviert (#1951). - Geben Sie
MediaCodecInfo
des Codecs an, der inMediaCodecRenderer.onReadyToInitializeCodec
initialisiert wird (#1963). - Ändern Sie
AdsMediaSource
, damit dieAdPlaybackStates
durch Anhängen von Anzeigengruppen erweitert werden kann. Es wurden ungültige Änderungen erkannt, die eine Ausnahme auslösen. - Es wurde ein Problem behoben, durch das beim Übergang zu Inhaltsmedien nach einer Mid-Roll-Anzeige möglicherweise zusätzliche Frames nur zum Decodieren in schneller Folge angezeigt wurden.
DefaultRenderersFactory
fügt zweiMetadataRenderer
-Instanzen hinzu, damit Apps standardmäßig zwei verschiedene Metadatenschemas empfangen können.- Es wurde neu bewertet, ob das laufende Laden eines Chunks abgebrochen werden sollte, wenn die Wiedergabe pausiert wird (#1785).
- Die Option
ClippingMediaSource
wurde hinzugefügt, um das Erstellen von Clips in nicht suchbaren Medien zu ermöglichen. - Ein Fehler wurde behoben, durch den das Suchen mit Pre-Warming den Übergang zum nächsten Medienelement blockieren konnte.
- Es wurde ein Fehler behoben, durch den
ExoPlayer.isLoading()
true
blieb, obwohl es zuSTATE_IDLE
oderSTATE_ENDED
gewechselt war (#2133). - Fügen Sie
lastRebufferRealtimeMs
zuLoadControl.Parameter
hinzu (#2113).
- Transformer:
- Unterstützung für das Transmuxing in alternative abwärtskompatible Formate hinzugefügt.
- Unterstützung für die Transcodierung und das Transmuxing von Dolby Vision (Profil 8) wurde hinzugefügt.
- Aktualisieren Sie die Parameter von
VideoFrameProcessor.registerInputStream
undVideoFrameProcessor.Listener.onInputStreamRegistered
, umFormat
zu verwenden. - Generieren Sie statische HDR-Metadaten, wenn Sie
DefaultEncoderFactory
verwenden. - Aktivieren Sie die Unterstützung für die Diagnose der Android-Plattform mit
MediaMetricsManager
. Der Transformer leitet Bearbeitungsereignisse und Leistungsdaten an die Plattform weiter. So können auf dem Gerät Informationen zur Systemleistung und zum Debugging bereitgestellt werden. Diese Daten können auch von Google erhoben werden, wenn der Nutzer des Geräts die Weitergabe von Nutzungs- und Diagnosedaten aktiviert hat. Apps können die Teilnahme an der Plattformdiagnose für Transformer mitTransformer.Builder.setUsePlatformDiagnostics(false)
deaktivieren. - Teile
InAppMuxer
inInAppMp4Muxer
undInAppFragmentedMp4Muxer
auf. MitInAppMp4Muxer
wird eine nicht fragmentierte MP4-Datei erstellt, mitInAppFragmentedMp4Muxer
eine fragmentierte MP4-Datei. - Verschieben Sie die
Muxer
-Schnittstelle vonmedia3-muxer
nachmedia3-transformer
. - Fügen Sie
MediaProjectionAssetLoader
hinzu, das Medien aus einemMediaProjection
für die Bildschirmaufzeichnung bereitstellt, und fügen Sie der Transformer-Demo-App Unterstützung für die Bildschirmaufzeichnung hinzu. - Fügen Sie
#getInputFormat()
derCodec
-Schnittstelle hinzu. - Übertrage die Verantwortung für die Freigabe des
GlObjectsProvider
nach Möglichkeit auf den Anrufer inDefaultVideoFrameProcessor
undDefaultVideoCompositor
.
- Extraktoren:
- AVI: Die Verarbeitung von Dateien mit Audio, das mit konstanter Bitrate komprimiert wurde und bei denen im Streamheader die Anzahl der Byte anstelle der Anzahl der Chunks gespeichert ist, wurde korrigiert.
- Die Verarbeitung von NAL-Einheiten mit Längen, die in 1 oder 2 Bytes (statt 4) ausgedrückt werden, wurde korrigiert.
- Problem mit
ArrayIndexOutOfBoundsException
in MP4-Bearbeitungslisten behoben, wenn die Bearbeitungsliste mit einem nicht synchronisierten Frame ohne vorherigen synchronisierten Frame beginnt (#2062). - Problem behoben, bei dem TS-Streams auf einigen Geräten hängen bleiben konnten (#2069).
- FLAC: Unterstützung für 32‑Bit-FLAC-Dateien hinzugefügt. Bisher konnten diese Inhalte mit
IllegalStateException: Playback stuck buffering and not loading
nicht wiedergegeben werden (#2197).
- Audio:
- Der Fehler wurde behoben, sodass
onAudioPositionAdvancing
jetzt aufgerufen wird, wenn die Wiedergabe fortgesetzt wird (zuvor wurde sie aufgerufen, wenn die Wiedergabe pausiert wurde). - Umgehen Sie
SonicAudioProcessor
nicht, wennSpeedChangingAudioProcessor
mit Standardparametern konfiguriert ist. - Ein Unterlauf in
Sonic#getOutputSize()
wurde behoben, der dazu führen konnte, dassDefaultAudioSink
nicht mehr reagierte. - Korrigieren Sie
MediaCodecAudioRenderer.getDurationToProgressUs()
undDecoderAudioRenderer.getDurationToProgressUs()
, damit die Suchvorgänge die angegebenen Zeiträume richtig zurücksetzen. androidx.media3.common.audio.SonicAudioProcessor
abschließen.- Unterstützung für Float-PCM zu
ChannelMappingAudioProcessor
undTrimmingAudioProcessor
hinzufügen.
- Der Fehler wurde behoben, sodass
- Video:
- Ändere
MediaCodecVideoRenderer.shouldUsePlaceholderSurface
in „protected“, damit Anwendungen die Verwendung von Platzhalter-Oberflächen blockieren können (#1905). - Es wurde eine experimentelle
ExoPlayer
AV1-Beispielabhängigkeitsanalyse hinzugefügt, um das Suchen zu beschleunigen. Aktivieren Sie sie mit der neuenDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies
API. - Es wurde eine experimentelle
ExoPlayer
-API hinzugefügt, um späteMediaCodecVideoRenderer
-Decodereingabepuffer zu verwerfen, von denen keine Abhängigkeiten bestehen. Aktivieren Sie die Funktion mitDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs
. - Ein Problem wurde behoben, bei dem ein Player ohne Oberfläche sofort bereit war und alle ausstehenden Frames sehr langsam decodiert wurden (#1973).
- Xiaomi- und OPPO-Geräte aus dem Modus „Abgenommenes Display“ ausschließen, um Bildschirmflackern zu vermeiden (#2059).
- Ändere
- Text:
- Unterstützung für VobSub-Untertitel hinzugefügt (#8260).
- Das eifrige Laden aller Untertiteldateien, die mit
MediaItem.Builder.setSubtitleConfigurations
konfiguriert sind, wird beendet. Stattdessen wird nur eine Datei geladen, wenn sie durch die Auswahl des Tracks ausgewählt wird (#1721). - TTML: Unterstützung für das Referenzieren von
tts:origin
undtts:extent
mitstyle
wurde hinzugefügt (#2953). - Beschränken Sie WebVTT- und SubRip-Zeitstempel auf genau 3 Dezimalstellen. Bisher haben wir eine beliebige Anzahl von Dezimalstellen falsch geparst, aber immer davon ausgegangen, dass der Wert in Millisekunden angegeben ist. Das hat zu falschen Zeitstempeln geführt (#1997).
- Wiedergabe hängt, wenn eine Playlist gekürzte Elemente mit CEA-608- oder CEA-708-Untertitel enthält.
- Fehler bei
IllegalStateException
behoben, wenn eine SSA-Datei einen Cue mit der Dauer null enthält (Start- und Endzeit sind gleich) (#2052). - Unterdrücken (und protokollieren) von Fehlern beim Parsen von Untertiteln, wenn Untertitel in denselben Container wie Audio und Video gemuxt werden (#2052).
- Der Umgang mit Multibyte-UTF-8-Zeichen in WebVTT-Dateien mit CR-Zeilenenden wurde korrigiert (#2167).
- DRM:
- Der Fehler
MediaCodec$CryptoException: Operation not supported in this configuration
beim Abspielen von ClearKey-Inhalten auf Geräten mit API < 27 wurde behoben (#1732).
- Der Fehler
- Wirkung:
- Die Funktionalität von
OverlaySettings
wurde inStaticOverlaySettings
verschoben.OverlaySettings
kann abgeleitet werden, um dynamische Overlays zu ermöglichen.
- Die Funktionalität von
- Muxer:
MuxerException
wurde aus derMuxer
-Schnittstelle entfernt, um einen sehr langen vollständig qualifizierten Namen zu vermeiden.- Die Methode
setSampleCopyEnabled()
wurde sowohl inMp4Muxer.Builder
als auch inFragmentedMp4Muxer.Builder
insetSampleCopyingEnabled()
umbenannt. Mp4Muxer.addTrack()
undFragmentedMp4Muxer.addTrack()
geben jetzt eineint
-Track-ID anstelle einerTrackToken
zurück.Mp4Muxer
undFragmentedMp4Muxer
implementieren dieMuxer
-Schnittstelle nicht mehr.Mp4Muxer
-Stichproben-Batching und ‑Kopieren standardmäßig deaktivieren.- Ein Fehler in
FragmentedMp4Muxer
wurde behoben, der viele Fragmente erstellte, wenn nur der Audiotrack geschrieben wurde.
- Sitzung:
- Der Status des Vordergrunddiensts wird für weitere 10 Minuten beibehalten, wenn die Wiedergabe pausiert, beendet oder fehlgeschlagen ist. So können Nutzer die Wiedergabe innerhalb dieses Zeitlimits fortsetzen, ohne dass auf verschiedenen Geräten Einschränkungen für Dienste im Vordergrund drohen. Beachten Sie, dass der Aufruf von
player.pause()
nicht mehr verwendet werden kann, um den Dienst im Vordergrund vorstopSelf()
zu beenden. Verwenden Sie stattdessenMediaSessionService.pauseAllPlayersAndStopSelf()
, wenn SieonTaskRemoved
überschreiben. - Benachrichtigung sichtbar lassen, wenn die Wiedergabe in einen Fehler- oder Stoppstatus wechselt. Die Benachrichtigung wird nur entfernt, wenn die Playlist gelöscht oder der Player freigegeben wird.
- Die Verarbeitung der MediaSession-Aktionen ACTION_PLAY und ACTION_PAUSE der Android-Plattform wurde verbessert. Es wird nur eine der beiden Aktionen entsprechend den verfügbaren Befehlen festgelegt und es wird akzeptiert, wenn nur eine der beiden Aktionen festgelegt ist.
- Fügen Sie
Context
als Parameter zuMediaButtonReceiver.shouldStartForegroundService
hinzu (#1887). - Es wurde ein Fehler behoben, bei dem durch den Aufruf einer
Player
-Methode für einMediaController
, das mit einer alten Sitzung verbunden war, Änderungen aus einem ausstehenden Update verloren gingen. MediaSession.setSessionActivity(PendingIntent)
akzeptiert jetzt „null“ (#2109).- Es wurde ein Fehler behoben, durch den eine alte Benachrichtigung sichtbar blieb, wenn die Playlist gelöscht wurde (#2211).
- Der Status des Vordergrunddiensts wird für weitere 10 Minuten beibehalten, wenn die Wiedergabe pausiert, beendet oder fehlgeschlagen ist. So können Nutzer die Wiedergabe innerhalb dieses Zeitlimits fortsetzen, ohne dass auf verschiedenen Geräten Einschränkungen für Dienste im Vordergrund drohen. Beachten Sie, dass der Aufruf von
- UI:
- Fügen Sie dem
media3-ui-compose
-Modul Status-Holder und Composables fürPlayerSurface
,PresentationState
,PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
undPlaybackSpeedState
hinzu.
- Fügen Sie dem
- Downloads:
- Fehler in
CacheWriter
behoben, durch den Datenquellen offen und Cachebereiche gesperrt bleiben, wenn die Datenquelle einen anderenException
alsIOException
(#9760) ausgibt.
- Fehler in
- HLS-Erweiterung:
- Fügen Sie eine erste Version von
HlsInterstitialsAdsLoader
hinzu. Der Anzeigen-Loader liest die HLS-Interstitials einer HLS-Mediaplaylist und ordnet sie demAdPlaybackState
zu, das anAdsMediaSource
übergeben wird. Diese erste Version unterstützt nur HLS-VOD-Streams mitX-ASSET-URI
-Attributen. - Fügen Sie
HlsInterstitialsAdsLoader.AdsMediaSourceFactory
hinzu. Apps können damitAdsMediaSource
-Instanzen erstellen, die auf bequeme und sichere Weise einHlsInterstitialsAdsLoader
verwenden. - Das
SUPPLEMENTAL-CODECS
-Tag wird aus der HLS-Playlist geparst, um Dolby Vision-Formate zu erkennen (#1785). - Die Bedingung für die Suche nach zu synchronisierenden Positionen in einem HLS-Stream wurde gelockert (#2209).
- Fügen Sie eine erste Version von
- DASH-Erweiterung:
- AC-4 Level-4-Formatunterstützung für DASH hinzufügen (#1898).
- Problem bei der Berechnung des Updateintervalls für das Einfügen von Anzeigen in Live-Streams mit mehreren Zeiträumen behoben (#1698).
- Das Attribut
scte214:supplementalCodecs
wird aus dem DASH-Manifest geparst, um Dolby Vision-Formate zu erkennen (#1785). - Die Verarbeitung von Periodenübergängen in Livestreams wurde verbessert, wenn die Periode Mediensamples enthält, die über die angegebene Periodendauer hinausgehen (#1698).
- Ein Problem wurde behoben, bei dem mit
adaptation-set-switching
gekennzeichnete Anpassungssätze mit unterschiedlichen Sprachen oder Rollen-Flags zusammengeführt wurden (#2222).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Das MPEG-H-Decodermodul wurde hinzugefügt, das den integrierten MPEG-H-Decoder zum Decodieren von MPEG-H-Audio verwendet (#1826).
- MIDI-Erweiterung:
- Benutzerdefinierte
AudioSink
- undAudioRendererEventListener
-Instanzen inMidiRenderer
einbinden
- Benutzerdefinierte
- Cast-Erweiterung:
- Aktualisieren Sie die
play-services-cast-framework
-Abhängigkeit auf Version 21.5.0, um einenFLAG_MUTABLE
-Absturz in Apps zu beheben, die auf API 34 oder höher ausgerichtet sind und auf Geräten mit installierten, aber deaktivierten Google Play-Diensten ausgeführt werden (#2178).
- Aktualisieren Sie die
- Demo-App:
demo-compose
mit zusätzlichen Schaltflächen erweitern und diePlayerSurface
-Integration durch Unterstützung von Skalierung und Verschluss verbessern.
- Entfernen Sie die folgenden veralteten Symbole:
- Die eingestellte Methode
AudioMixer.create()
wurde entfernt. Verwenden Sie stattdessenDefaultAudioMixer.Factory().create()
. - Entfernen Sie die folgenden veralteten
Transformer.Builder
-Methoden:setTransformationRequest()
: Verwenden Sie stattdessensetAudioMimeType()
,setVideoMimeType()
undsetHdrMode()
.setAudioProcessors()
, legen Sie den Audioprozessor in einemEditedMediaItem.Builder.setEffects()
fest und übergeben Sie ihn stattdessen anTransformer.start()
.setVideoEffects()
, setze den Videoeffekt in einemEditedMediaItem.Builder.setEffects()
und übergib ihn stattdessen anTransformer.start()
.setRemoveAudio()
. Verwenden Sie stattdessenEditedMediaItem.Builder.setRemoveAudio()
, um das Audio aus dem anTransformer.start()
übergebenenEditedMediaItem
zu entfernen.setRemoveVideo()
. VerwendeEditedMediaItem.Builder.setRemoveVideo()
, um das Video aus demEditedMediaItem
zu entfernen, das anTransformer.start()
übergeben wird.setFlattenForSlowMotion()
. Verwenden Sie stattdessenEditedMediaItem.Builder.setFlattenForSlowMotion()
, um das anTransformer.start()
übergebeneEditedMediaItem
zu reduzieren.setListener()
. Verwenden Sie stattdessenaddListener()
,removeListener()
oderremoveAllListeners()
.
- Entfernen Sie die folgenden veralteten
Transformer.Listener
-Methoden:onTransformationCompleted(MediaItem)
. Verwenden Sie stattdessenonCompleted(Composition, ExportResult)
.onTransformationCompleted(MediaItem, TransformationResult)
. Verwenden Sie stattdessenonCompleted(Composition, ExportResult)
.onTransformationError(MediaItem, Exception)
. Verwenden Sie stattdessenonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationException)
. Verwenden Sie stattdessenonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationResult, TransformationException)
. Verwenden Sie stattdessenonError(Composition, ExportResult, ExportException)
.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
. Verwenden Sie stattdessenonFallbackApplied(Composition, TransformationRequest, TransformationRequest)
.
- Entfernen Sie die eingestellte Klasse
TransformationResult
. Verwenden Sie stattdessenExportResult
. - Entfernen Sie die eingestellte Klasse
TransformationException
. Verwenden Sie stattdessenExportException
. - Entfernen Sie die eingestellte
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
. Verwenden Sie stattdessenTransformer.PROGRESS_STATE_NOT_STARTED
. - Entfernen Sie die eingestellte
Transformer.setListener()
. Verwenden Sie stattdessenTransformer.addListener()
,Transformer.removeListener()
oderTransformer.removeAllListeners()
. - Entfernen Sie die eingestellte
Transformer.startTransformation()
. Verwenden Sie stattdessenTransformer.start(MediaItem, String)
. - Entfernen Sie die eingestellte
SingleFrameGlShaderProgram
. Verwenden Sie stattdessenBaseGlShaderProgram
. - Entfernen Sie
Transformer.flattenForSlowMotion
. Verwenden Sie stattdessenEditedMediaItem.flattenForSlowMotion
. ExoPlayer.VideoComponent
,ExoPlayer.AudioComponent
,ExoPlayer.TextComponent
undExoPlayer.DeviceComponent
entfernt.androidx.media3.exoplayer.audio.SonicAudioProcessor
wurde entfernt.- Die folgenden nicht mehr unterstützten
DownloadHelper
-Methoden wurden entfernt:- Konstruktor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])
, verwenden Sie stattdessenDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)
. getRendererCapabilities(RenderersFactory)
: Eine entsprechende Funktion kann erreicht werden, indem Sie einDefaultRendererCapabilitiesList
mit einemRenderersFactory
erstellen undDefaultRendererCapabilitiesList.getRendererCapabilities()
aufrufen.
- Konstruktor
- Die Methode
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
wurde entfernt. Verwenden Sie stattdessenPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)
und übergeben Sie(MediaSession.Token) compatToken.getToken()
.
- Die eingestellte Methode
1.6.0-rc02
19. März 2025
Verwenden Sie die stabile Version 1.6.0.
1.6.0-rc01
12. März 2025
Verwenden Sie die stabile Version 1.6.0.
1.6.0-beta01
26. Februar 2025
Verwenden Sie die stabile Version 1.6.0.
Version 1.6.0-alpha03
6. Februar 2025
Verwenden Sie die stabile Version 1.6.0.
Version 1.6.0-alpha02
30. Januar 2025
Verwenden Sie die stabile Version 1.6.0.
Version 1.6.0-alpha01
20. Dezember 2024
Verwenden Sie die stabile Version 1.6.0.
Version 1.5
Version 1.5.1
19. Dezember 2024
androidx.media3:media3-*:1.5.1
wird veröffentlicht.
Version 1.5.1 enthält diese Commits.
- ExoPlayer:
- Deaktivieren Sie die Verwendung der asynchronen Entschlüsselung in MediaCodec, um die gemeldeten Probleme mit dem Codec-Zeitlimit bei dieser Plattform-API zu vermeiden (#1641).
- Extraktoren:
- MP3: Die Wiedergabe darf nicht vorzeitig beendet werden, wenn das Inhaltsverzeichnis eines
VBRI
-Frames nicht alle MP3-Daten in einer Datei abdeckt (#1904).
- MP3: Die Wiedergabe darf nicht vorzeitig beendet werden, wenn das Inhaltsverzeichnis eines
- Video:
- Rollback der Verwendung von
MediaCodecAdapter
-Werten für das bereitgestellte Pixel-Seitenverhältnis bei der Verarbeitung vononOutputFormatChanged
(#1371).
- Rollback der Verwendung von
- Text:
- Es wurde ein Fehler in
ReplacingCuesResolver.discardCuesBeforeTimeUs
behoben, bei dem der Cue, der beitimeUs
aktiv war (vorher gestartet, aber noch nicht beendet), fälschlicherweise verworfen wurde (#1939).
- Es wurde ein Fehler in
- Metadaten:
- Extrahieren der Datenträger-/Tracknummerierung und des Genres aus Vorbis-Kommentaren in
MediaMetadata
(#1958).
- Extrahieren der Datenträger-/Tracknummerierung und des Genres aus Vorbis-Kommentaren in
Version 1.5.0
27. November 2024
androidx.media3:media3-*:1.5.0
wird veröffentlicht.
Version 1.5.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Füge
ForwardingSimpleBasePlayer
hinzu, das das Weiterleiten an einen anderen Player mit kleinen Anpassungen ermöglicht und gleichzeitig für vollständige Konsistenz und Listener-Verarbeitung sorgt (#1183). - Ersetzen Sie
SimpleBasePlayer.State.playlist
durch die MethodegetPlaylist()
. - Fügen Sie einen Override für
SimpleBasePlayer.State.Builder.setPlaylist()
hinzu, um direkt eineTimeline
und die aktuelleTracks
undMetadata
anzugeben, anstatt eine Playliststruktur zu erstellen. - Erhöhen Sie
minSdk
auf 21 (Android Lollipop). Dies entspricht allen anderen AndroidX-Bibliotheken. - Fügen Sie das
androidx.media3:media3-common-ktx
-Artefakt hinzu, das Kotlin-spezifische Funktionen bietet, die auf der Common-Bibliothek basieren. - Fügen Sie der
media3-common-ktx
-Bibliothek die suspend-ErweiterungsfunktionPlayer.listen
hinzu, um eine Coroutine zu starten, die aufPlayer.Events
wartet. - Entfernen Sie
@DoNotInline
-Annotationen aus manuell ausgelagerten inneren Klassen, die dazu dienen, Laufzeitfehler bei der Klassenüberprüfung zu vermeiden. In den aktuellen Versionen von R8 werden solche Inline-Aufrufe jetzt automatisch ausgelagert, um Laufzeitfehler zu vermeiden. Die manuelle Auslagerung ist also nicht mehr erforderlich. Alle Gradle-Nutzer der Bibliothek müssen bereits eine Version des Android-Gradle-Plug-ins verwenden, in der eine R8-Version enthalten ist, die dies unterstützt, aufgrund voncompileSdk = 35
. Nutzer der Bibliothek mit Build-Systemen, die nicht auf Gradle basieren, müssen dafür sorgen, dass ihr R8-äquivalenter Schritt zum Verkleinern/Verschleiern einen ähnlichen automatischen Out-of-Lining-Prozess durchführt, um Laufzeitfehler bei der Klassenüberprüfung zu vermeiden. Diese Änderung wurde bereits in anderen AndroidX-Bibliotheken vorgenommen.
- Füge
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()
kann jetzt für jedes Medienelement aufgerufen werden. Bisher wurde sie für die erste nicht aufgerufen. Verwenden SieMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
, um diese Funktion zu aktivieren.- Fügen Sie
PreloadMediaSource.PreloadControl.onPreloadError
hinzu, damitPreloadMediaSource.PreloadControl
-Implementierungen Maßnahmen ergreifen können, wenn ein Fehler auftritt. - Fügen Sie
BasePreloadManager.Listener
hinzu, um Preload-Ereignisse an Apps weiterzugeben. - Ändern des SNTP-Client-Timeouts und Wiederholen alternativer Adressen bei Timeout zulassen (#1540).
- Entfernen Sie
MediaCodecAdapter.Configuration.flags
, da das Feld immer null war. - Der Nutzer kann den integrierten Lautsprecher für die Wiedergabe auf Wear OS ab API 35 auswählen, sofern das Gerät dies unterstützt.
- Den blockierenden Aufruf an
Context.getSystemService(Context.AUDIO_SERVICE)
bis zur Aktivierung der Audiofokus-Verarbeitung verschieben. Dadurch wird sichergestellt, dass der blockierende Aufruf nicht erfolgt, wenn die Verarbeitung des Audiofokus nicht aktiviert ist (#1616). - Wiedergabe unabhängig von der gepufferten Dauer zulassen, wenn das Laden fehlschlägt (#1571).
- Fügen Sie
AnalyticsListener.onRendererReadyChanged()
hinzu, um zu signalisieren, wann die Wiedergabe auf einzelnen Renderern bereit ist. - Der Fehler
MediaCodec.CryptoException
wird manchmal als „unerwarteter Laufzeitfehler“ gemeldet, wennMediaCodec
im asynchronen Modus ausgeführt wird (Standardverhalten bei API 31 und höher). - Übergeben Sie
bufferedDurationUs
anstelle vonbufferedPositionUs
mitPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
. Außerdem wirdDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
inDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
geändert. Apps müssen dann anstelle einer Position einen Wert übergeben, der eine bestimmte Dauer ab der Standardstartposition angibt, für die die entsprechende Media-Quelle mit diesem IntDef vorab geladen werden muss. - Fügen Sie die
ForwardingRenderer
-Implementierung hinzu, die alle Methodenaufrufe an einen anderen Renderer weiterleitet (1703). - Vorabladen von Playlists für das nächste Element in der Playlist hinzufügen Apps können das Vorabladen aktivieren, indem sie
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
aufrufen. Das Vorabladen ist standardmäßig deaktiviert. Wenn Sie sich für diese Option entscheiden, wird das Vorabladen durchDefaultLoadControl
eingeschränkt. Es wird nur gestartet und fortgesetzt, wenn der Player nicht für die Wiedergabe geladen wird. Apps können dieses Verhalten ändern, indem sieLoadControl.shouldContinuePreloading()
entsprechend implementieren (z. B. durch Überschreiben dieser Methode inDefaultLoadControl
). Bei der Standardimplementierung vonLoadControl
wird das Vorabladen deaktiviert, wenn eine App eine benutzerdefinierte Implementierung vonLoadControl
verwendet. - Die Methode
MediaSourceEventListener.EventDispatcher.dispatchEvent()
wurde hinzugefügt, um das Aufrufen von Ereignissen von Unterklassen-Listenern zu ermöglichen (1736). - Fügen Sie
DefaultPreloadManager.Builder
hinzu, mit dem dieDefaultPreloadManager
- undExoPlayer
-Instanzen mit einheitlich freigegebenen Konfigurationen erstellt werden. - Entfernen Sie den Parameter
Renderer[]
ausLoadControl.onTracksSelected()
, da dieDefaultLoadControl
-Implementierung die Streamtypen ausExoTrackSelection[]
abrufen kann. - Die Methode
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
ist veraltet und wurde als „final“ markiert, um Überschreibungen zu verhindern. Verwenden Sie stattdessen die neueDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
. MediaSourceEventListener
-Ereignisse aus sekundären Quellen inMergingMediaSource
melden Dies führt dazu, dass für per Sideloading hinzugefügte Untertitel (die mitMediaItem.LocalConfiguration.subtitleConfigurations
hinzugefügt wurden) die Ereignisse „loadstart“, „error“, „cancelled“ und „completed“ gemeldet werden. Das kann so aussehen, als würden doppelte Ladeereignisse vonAnalyticsListener
ausgegeben.- Verhindern, dass Fehler bei Untertiteln und Metadaten die Wiedergabe vollständig stoppen.
Stattdessen wird der problematische Titel deaktiviert und die Wiedergabe der verbleibenden Titel wird fortgesetzt (#1722).
- Bei der neuen Untertitelverarbeitung (während der Extraktion) werden zugehörige Parse-Fehler (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über
onLoadError
-Callbacks ausgegeben. - Bei der alten Untertitelverarbeitung (während des Renderns) werden nur zugehörige Ladefehler über
onLoadError
-Callbacks ausgegeben, während Parsing-Fehler stillschweigend ignoriert werden (dies ist das bisherige Verhalten).
- Bei der neuen Untertitelverarbeitung (während der Extraktion) werden zugehörige Parse-Fehler (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über
- Ein Fehler wurde behoben, bei dem es bei Playlist-Elementen oder Zeiträumen in DASH-Streams mit mehreren Zeiträumen mit einer Dauer, die nicht mit dem tatsächlichen Inhalt übereinstimmt, am Ende des Elements zu Frame-Freezes kommen konnte (#1698).
- Setter für
SntpClient
hinzufügen, um die maximale verstrichene Zeit seit der letzten Aktualisierung festzulegen, nach der der Client neu initialisiert wird (#1794).
- Transformer:
- Füge
SurfaceAssetLoader
hinzu, das das Einreihen von Videodaten in die Warteschlange für Transformer über einenSurface
unterstützt. ImageAssetLoader
meldet nicht unterstützte Eingaben überAssetLoader.onError
, anstatt eineIllegalStateException
auszulösen.- Die Einstellung der Bilddauer über
MediaItem.Builder.setImageDurationMs
ist für den Bildexport obligatorisch. - Unterstützung für den Export von Lücken in Sequenzen von bearbeiteten Audio-MediaItems hinzugefügt.
- Füge
- Titelauswahl:
DefaultTrackSelector
: Objektbasierte Audioinhalte sollten gegenüber kanalbasierten Audioinhalten bevorzugt werden, wenn andere Faktoren gleich sind.
- Extraktoren:
- Mit
Mp4Extractor
undFragmentedMp4Extractor
können H264-Samples identifiziert werden, die nicht als Referenz für nachfolgende Samples verwendet werden. - Option zum Aktivieren der indexbasierten Suche in
AmrExtractor
hinzugefügt. - MP3-Dateien mit mehr als 128 KB zwischen gültigen Frames werden als gekürzt (statt als ungültig) behandelt. Das bedeutet, dass die Wiedergabe von Dateien mit Nicht-MP3-Daten am Ende, bei denen keine anderen Metadaten die Länge der MP3-Bytes angeben, jetzt am Ende der MP3-Daten beendet wird, anstatt mit
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563) zu fehlschlagen. - Die Verarbeitung von Preroll-Samples für Media-Startpositionen, die keine Keyframes sind, wurde bei der Verarbeitung von Bearbeitungslisten in MP4-Dateien korrigiert (#1659).
- Die Berechnung der Frame-Rate wurde verbessert, indem die Media-Dauer aus dem Feld
mdhd
inMp4Extractor
undFragmentedMp4Extractor
verwendet wird (#1531). - Falsche Skalierung von
media_time
in MP4-Bearbeitungslisten korrigieren Währendsegment_duration
bereits korrekt mit der Zeitskala des Films skaliert wurde, wirdmedia_time
jetzt 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-Dateien mit Bearbeitungsliste (#1797). - Die Analyse der Medienlänge im
mdhd
-Feld von MP4-Dateien wurde korrigiert, um-1
-Werte zu verarbeiten (#1819). - Unterstützung für die Identifizierung des
h263
-Felds in MP4-Dateien für H.263-Videos hinzugefügt (#1821). - Unterstützung für das AC-4 Level-4 ISO-Basismediendateiformat hinzugefügt (#1265).
- Mit
- DataSource:
- Aktualisierung von
HttpEngineDataSource
, damit die Verwendung ab Version S-Extension 7 anstelle von API-Level 34 möglich ist (#1262). DataSourceContractTest
: Bestätigen, dassDataSource.getUri()
den aufgelösten URI zurückgibt (wie dokumentiert). Wenn dies vom angeforderten URI abweicht, kann dies in Tests mit der neuen MethodeDataSourceContractTest.TestResource.Builder.setResolvedUri()
angegeben werden.DataSourceContractTest
: Es wird geprüft, obDataSource.getUri()
undgetResponseHeaders()
ihren „open“-Wert nach einem fehlgeschlagenen Aufruf vonopen()
(aufgrund einer nicht gefundenen Ressource) und vor einem nachfolgendenclose()
-Aufruf zurückgeben.- Durch Überschreiben von
DataSourceContractTest.getNotFoundResources()
können Testunterklassen mehrere „nicht gefunden“-Ressourcen und alle erwarteten Header bereitstellen. So kann zwischen HTTP 404 (mit Headern) und „Server nicht gefunden“ (ohne Header) unterschieden werden.
- Durch Überschreiben von
- Aktualisierung von
- Audio:
- Konfiguriert automatisch CTA-2075-Lautheitsmetadaten für den Codec, sofern sie in den Media vorhanden sind.
- Sorge für einen gleichmäßigen Lautstärkeabfall beim Suchen.
- Problem mit Knackgeräuschen behoben, die bei der Suche auftreten können.
- Die Anhäufung von Rundungsfehlern im Time-Stretching-/Pitch-Shifting-Algorithmus von Sonic wurde behoben.
- Fehler in
SpeedChangingAudioProcessor
beheben, der zu fehlenden Ausgabeframes führt.
- Video:
MediaCodecVideoRenderer
vermeidet das Decodieren von Samples, die weder gerendert noch von anderen Samples als Referenz verwendet werden.- Bei API 35 und höher kann
MediaCodecAdapter
jetzt einnull
Surface
inconfigure
empfangen und Aufrufe einer neuen MethodedetachOutputSurface
zum Entfernen eines zuvor festgelegtenSurface
, wenn der Codec dies unterstützt (MediaCodecInfo.detachedSurfaceSupported
). - Verwenden Sie die bereitgestellten Werte für das Pixel-Seitenverhältnis
MediaCodecAdapter
, falls verfügbar, wenn SieonOutputFormatChanged
verarbeiten (#1371). - Es wurde eine Behelfslösung für ein Geräteproblem auf dem Galaxy Tab S7 FE hinzugefügt, das dazu führt, dass sichere H264-Streams mit 60 fps als nicht unterstützt markiert werden (#1619).
- Es wurde eine Problemumgehung für Codecs hinzugefügt, die nach dem letzten Sample hängen bleiben, ohne ein End-of-Stream-Signal zurückzugeben.
- Text:
- Fügen Sie eine benutzerdefinierte
VoiceSpan
hinzu und füllen Sie sie für WebVTT-Voice-Spans aus (#1632). - Achte darauf, dass WebVTT in HLS mit sehr großen Untertitel-Zeitstempeln (die einen 64-Bit-
long
überlaufen, wenn sie als Mikrosekunden dargestellt und mit der90,000
-MPEG-Zeitbasis multipliziert werden) angezeigt werden (#1763). - Unterstützung von CEA-608-Untertiteln in Dolby Vision-Inhalten (#1820).
- Das Problem, dass die Wiedergabe bei DASH-Streams mit mehreren Zeiträumen hängen bleibt, wenn CEA-608-Untertitel aktiviert sind, wurde behoben (#1863).
- Fügen Sie eine benutzerdefinierte
- Metadaten:
- Weisen Sie Tracks mit icy- oder vnd.dvb.ait-Inhalten den Typ
C.TRACK_TYPE_METADATA
zu.
- Weisen Sie Tracks mit icy- oder vnd.dvb.ait-Inhalten den Typ
- Bild:
- Fügen Sie
ExternallyLoadedImageDecoder
hinzu, um die Integration in externe Bibliotheken zum Laden von Bildern wie Glide oder Coil zu vereinfachen.
- Fügen Sie
- DataSource:
FileDescriptorDataSource
wurde hinzugefügt, ein neuesDataSource
, das zum Lesen aus einemFileDescriptor
verwendet werden kann (#3757).
- Wirkung:
- Es wurde eine
DefaultVideoFrameProcessor
-Problemumgehung für die geringfügigeSurfaceTexture
-Skalierung hinzugefügt.SurfaceTexture
kann eine kleine Skalierung enthalten, die einen 1-Texel-Rahmen am Rand eines zugeschnittenen Puffers abschneidet. Das Problem wurde behoben und die Ausgabe entspricht nun eher den Erwartungen. - Beschleunigen Sie
DefaultVideoFrameProcessor.queueInputBitmap()
. Dadurch geht der Export von Bildern in Videos mitTransformer
schneller.
- Es wurde eine
- IMA-Erweiterung:
- Ein Fehler wurde behoben, bei dem das Löschen der Playlist zu einem
ArrayIndexOutOfBoundsException
inImaServerSideAdInsertionMediaSource
führen konnte. - Es wurde ein Fehler behoben, bei dem serverseitig eingefügte DAI-Streams ohne Preroll bei der Wiedergabe nach dem letzten Mid-Roll zu einem
ArrayIndexOutOfBoundsException
führen konnten (#1741).
- Ein Fehler wurde behoben, bei dem das Löschen der Playlist zu einem
- Sitzung:
- Füge
MediaButtonReceiver.shouldStartForegroundService(Intent)
hinzu, damit Apps einen eingehenden Play-Befehl zum Fortsetzen der Wiedergabe unterdrücken können, indem sie diese Methode überschreiben. Standardmäßig wird der Dienst immer gestartet und die Wiedergabe kann nicht unterdrückt werden, ohne dass das System den Dienst mit einemForegroundServiceDidNotStartInTimeException
(#1528) abstürzen lässt. - Ein Fehler wurde behoben, der dazu führte, dass benutzerdefinierte Befehle, die von einem
MediaBrowser
gesendet wurden, an dieMediaSessionCompat.Callback
anstatt an dieMediaBrowserServiceCompat
-Variante der Methode gesendet wurden, wenn eine Verbindung zu einem Legacy-Dienst bestand. Dadurch konnteMediaBrowser
den tatsächlichen Rückgabewert, der vom alten Dienst zurückgesendet wurde, nicht empfangen (#1474). - Behandlung von
IllegalArgumentException
, das von Geräten bestimmter Hersteller ausgelöst wird, wenn der Broadcast-Empfänger für Media-Button-Intents festgelegt wird (#1730). - Befehlsschaltflächen für Media-Elemente hinzufügen Dadurch wird die Media3 API für das hinzugefügt, was als
Custom browse actions
mit der alten Bibliothek mitMediaBrowserCompat
bekannt war. Hinweis: Mit Media3 sind Befehlsschaltflächen für Media-Elemente sowohl fürMediaBrowser
als auch fürMediaController
verfügbar. Weitere Informationen finden Sie unter Benutzerdefinierte Browse-Aktionen von AAOS. - Es wurde ein Fehler behoben, bei dem ein Media3-Controller manchmal nicht zulassen konnte, dass eine Sitzungs-App einen Dienst im Vordergrund startet, nachdem
play()
angefordert wurde. - Beschränken Sie
CommandButton.Builder.setIconUri
so, dass nur Content-URIs akzeptiert werden. - Übergeben Sie Verbindungshinweise eines Media3-Browsers an das ursprüngliche
MediaBrowserCompat
, wenn Sie eine Verbindung zu einem Legacy-MediaBrowserCompat
herstellen. Der Dienst kann die als Stammhinweise übergebenen Verbindungshinweise mit dem ersten Aufruf vononGetRoot()
empfangen. - Ein Fehler wurde behoben, bei dem ein
MediaBrowser
, das mit einem Legacy-Browserdienst verbunden war, keinen vom Dienst gesendeten Fehler empfangen hat, nachdem der Browser einenparentid
abonniert hatte. - Das Interoperabilitätsverhalten wurde verbessert, sodass ein Media3-Browser, der mit einem Legacy-
MediaBrowserService
verbunden ist, die untergeordneten Elemente einesparentId
nicht zweimal anfordert, wenn er einen übergeordneten Dienst abonniert.
- Füge
- UI:
- Das gestreckte/zugeschnittene Video im
PlayerView
-in-Compose-AndroidView
-Workaround aktivieren, da es Probleme mit XML-basierten gemeinsamen Übergängen gibt. Apps, diePlayerView
innerhalb vonAndroidView
verwenden, müssenPlayerView.setEnableComposeSurfaceSyncWorkaround
aufrufen, um die Funktion zu aktivieren (#1237, #1594). - Füge
setFullscreenButtonState
zuPlayerView
hinzu, um Updates des Symbols der Vollbildschaltfläche auf Anfrage zu ermöglichen, d.h. außerhalb des Bandes und nicht reaktiv auf eine Klickinteraktion (#1590, #184). - Es wurde ein Fehler behoben, bei dem die Option „Keine“ in der Textauswahl nicht funktionierte, wenn app-definierte Einstellungen für die Auswahl von Text-Tracks vorhanden waren.
- Das gestreckte/zugeschnittene Video im
- DASH-Erweiterung:
- Unterstützung für Zeiträume hinzugefügt, die in der Mitte eines Segments beginnen (#1440).
- Smooth Streaming-Erweiterung:
- Ein
Bad magic number for Bundle
-Fehler beim Abspielen von SmoothStreaming-Streams mit Text-Tracks wurde behoben (#1779).
- Ein
- RTSP-Erweiterung:
- Decoder-Erweiterungen (FFmpeg, VP9, AV1 usw.):
- Fügen Sie das IAMF-Decodermodul hinzu, das die Wiedergabe von MP4-Dateien mit IAMF-Tracks unterstützt. Dazu wird die native libiamf-Bibliothek verwendet, um Audio zu synthetisieren.
- Die Wiedergabe ist mit einem Stereolayout sowie mit 5.1 mit Räumlichkeit und optionaler Erfassung von Kopfbewegungen möglich. Die Unterstützung der binauralen Wiedergabe ist derzeit jedoch nicht verfügbar.
- Unterstützung von 16‑KB-Seiten für Decoder-Erweiterungen unter Android 15 hinzugefügt (#1685).
- Fügen Sie das IAMF-Decodermodul hinzu, das die Wiedergabe von MP4-Dateien mit IAMF-Tracks unterstützt. Dazu wird die native libiamf-Bibliothek verwendet, um Audio zu synthetisieren.
- Cast-Erweiterung:
- Die Zeitachse wird nach dem Trennen der CastSession nicht mehr bereinigt. So kann die Sender-App die Wiedergabe nach dem Trennen der Verbindung lokal fortsetzen.
- Füllen Sie
DeviceInfo
von CastPlayer aus, wenn einContext
angegeben ist. Dadurch kann dieMediaSession
mit einerRoutingSession
verknüpft werden, was für die Integration von Output Switcher erforderlich ist (#1056).
- Test-Tools:
DataSourceContractTest
enthält jetzt Tests, um Folgendes zu überprüfen:- Der Eingabestream
read position
wurde aktualisiert. - Der Ausgabepuffer
offset
wird korrekt angewendet.
- Der Eingabestream
- Demo-App
- Beheben Sie die Speicherlecks in der Demo-App für Kurzvideos (#1839).
- Entfernen Sie die folgenden veralteten Symbole:
- Die eingestellten
Player.hasPrevious
undPlayer.hasPreviousWindow()
wurden entfernt. Verwenden Sie stattdessenPlayer.hasPreviousMediaItem()
. - Die eingestellte Methode
Player.previous()
wurde entfernt. Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem()
. - Die eingestellte Methode
DrmSessionEventListener.onDrmSessionAcquired
wurde entfernt. - Entfernen Sie eingestellte
DefaultEncoderFactory
-Konstruktoren. Verwenden Sie stattdessenDefaultEncoderFactory.Builder
.
- Die eingestellten
Version 1.5.0-rc02
19. November 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-rc01
13. November 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-beta01
30. Oktober 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-alpha01
10. September 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.4.0
Version 1.4.1
27. August 2024
androidx.media3:media3-*:1.4.1
wird veröffentlicht.
Version 1.4.1 enthält diese Commits.
- ExoPlayer:
- Extraktoren:
- MP3: Der
Searched too many bytes
-Fehler wird behoben, indem nachfolgende Nicht-MP3-Daten basierend auf dem Längenfeld in einemInfo
-Frame korrekt ignoriert werden (#1480).
- MP3: Der
- Text:
- TTML: Die Verarbeitung von Prozentwerten für
tts:fontSize
wurde korrigiert, damit sie korrekt von übergeordneten Knoten mit Prozentwerten fürtts:fontSize
übernommen werden. - Das Problem
IndexOutOfBoundsException
inLegacySubtitleUtil
wurde behoben, da der Fall, in dem die angeforderte Startzeit der Ausgabe größer oder gleich der Endzeit des Ereignisses inSubtitle
ist, nicht korrekt behandelt wurde (#1516).
- TTML: Die Verarbeitung von Prozentwerten für
- DRM:
- Fehler
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
auf Geräten mit API 31 oder höher beheben, wenn L1-Widevine-Inhalte wiedergegeben werden. Dieser Fehler wird durch eine unvollständige Implementierung der Framework-MethodeMediaDrm.requiresSecureDecoder
(#1603) verursacht.
- Fehler
- Wirkung:
- Fügen Sie
GlObjectsProvider
einerelease()
-Methode hinzu.
- Fügen Sie
- Sitzung:
- Wandle ein Doppeltippen auf
KEYCODE_HEADSETHOOK
in die Aktion „Zum nächsten Titel springen“ um, wie dokumentiert (#1493). - Behandle
KEYCODE_HEADSETHOOK
als „Play“-Befehl inMediaButtonReceiver
, wenn du entscheidest, ob du ihn ignorieren möchtest, um einenForegroundServiceDidNotStartInTimeException
(#1581) zu vermeiden.
- Wandle ein Doppeltippen auf
- RTSP-Erweiterung:
- Ungültige Media-Beschreibungen beim SDP-Parsing überspringen (#1087).
Version 1.4.0
25. Juli 2024
androidx.media3:media3-*:1.4.0
wird veröffentlicht.
Version 1.4.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Leiten Sie mutmaßliche No-Op-Suchaufrufe an die geschützten Methoden
BasePlayer.seekTo()
undSimpleBasePlayer.handleSeek()
weiter, anstatt sie zu ignorieren. Wenn Sie diese Methoden in einem benutzerdefinierten Player implementieren, müssen Sie diese zusätzlichen Aufrufe möglicherweise mitmediaItemIndex == C.INDEX_UNSET
verarbeiten. - Die Kompilierungsabhängigkeit von der erweiterten Java 8-Desugarisierung wurde entfernt (#1312).
- Achten Sie darauf, dass die an
MediaItem.Builder.setImageDurationMs()
übergebene Dauer für einMediaItem
, das kein Bild ist, ignoriert wird (wie dokumentiert). - Fügen Sie
Format.customData
hinzu, um benutzerdefinierte Informationen zuFormat
-Instanzen zu speichern, die von der App bereitgestellt werden.
- Leiten Sie mutmaßliche No-Op-Suchaufrufe an die geschützten Methoden
- ExoPlayer:
- Fügen Sie
BasePreloadManager
hinzu, um das Vorladen für mehrere Quellen basierend auf den Prioritäten zu koordinieren, die durch ihrrankingData
definiert werden. Sie können diese Klasse erweitern, um sie anzupassen. Fügen SieDefaultPreloadManager
hinzu, dasPreloadMediaSource
verwendet, um Media-Samples der Quellen in den Arbeitsspeicher vorzuladen, und eine GanzzahlrankingData
, die den Index eines Elements auf der Benutzeroberfläche angibt. - Fügen Sie
PlayerId
zu den meisten Methoden vonLoadControl
hinzu, damitLoadControl
-Implementierungen mehrere Spieler unterstützen. - Entfernen Sie
Buffer.isDecodeOnly()
undC.BUFFER_FLAG_DECODE_ONLY
. Dieses Flag muss nicht festgelegt werden, da Renderer und Decoder entscheiden, ob Puffer basierend auf dem Zeitstempel übersprungen werden. Bei benutzerdefiniertenRenderer
-Implementierungen sollte geprüft werden, ob die Pufferzeit mindestensBaseRenderer.getLastResetPositionUs()
beträgt, um zu entscheiden, ob eine Probe angezeigt werden soll. BenutzerdefinierteSimpleDecoder
-Implementierungen können bei BedarfisAtLeastOutputStartTimeUs()
prüfen oder andere Puffer mitDecoderOutputBuffer.shouldBeSkipped
markieren, um sie zu überspringen. - Ermöglicht, dass von
TargetPreloadStatusControl.getTargetPreloadStatus(T)
ein Nullwert zurückgegeben wird, um anzugeben, dass keinMediaSource
mit dem angegebenenrankingData
vorab geladen werden soll. - Fügen Sie
remove(MediaSource)
zuBasePreloadManager
hinzu. - Fügen Sie
reset()
zuBasePreloadManager
hinzu, um alle Quellen freizugeben, die gehalten werden, und die Vorablademanager-Instanz beizubehalten. - Fügen Sie
ExoPlayer.setPriority()
(undBuilder.setPriority()
) hinzu, um den Prioritätswert zu definieren, der inPriorityTaskManager
und für die MediaCodec-Wichtigkeit ab API 35 verwendet wird. - Problem mit der Aktualisierung der letzten Rebuffer-Zeit behoben, das zu einem falschen
bs
-Schlüssel (Buffer Starvation) in CMCD führte (#1124). - Fügen Sie
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
hinzu, um anzugeben, dass die Quelle bis zum Ende geladen wurde. So können die Implementierungen vonDefaultPreloadManager
undPreloadMediaSource.PreloadControl
die nächste Quelle vorab laden oder andere Aktionen ausführen. - Ein Fehler wurde behoben, durch den das Überspringen von Stille am Ende von Elementen eine Wiedergabeausnahme auslösen konnte.
- Fügen Sie
clear
zuPreloadMediaSource
hinzu, um den Zeitraum für das Vorabladen zu verwerfen. - Füge den neuen Fehlercode
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
hinzu, der verwendet wird, wenn Codec-Ressourcen für Aufgaben mit höherer Priorität freigegeben werden. AdsMediaSource
kann Pre-Roll-Anzeigen laden, bevor die Vorbereitung der ersten Inhalte abgeschlossen ist (#1358).- Ein Fehler wurde behoben, durch den die Wiedergabe zu
STATE_ENDED
wechselte, 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.PreloadControl
um. Benennen Sie auch die IntDefs inDefaultPreloadManager.Stage
entsprechend um. - Experimentelle Unterstützung für dynamische Planung hinzugefügt, um die Arbeit besser an CPU-Aktivierungszyklen auszurichten und das Aktivieren zu verzögern, bis Renderer Fortschritte machen können.
Sie können diese Funktion aktivieren, indem Sie
experimentalSetDynamicSchedulingEnabled()
bei der Einrichtung Ihrer ExoPlayer-Instanz verwenden. - Fügen Sie
Renderer.getDurationToProgressUs()
hinzu. EinRenderer
kann diese Methode implementieren, um ExoPlayer die Dauer zurückzugeben, um die die Wiedergabe voranschreiten muss, damit der Renderer fortfahren kann. WennExoPlayer
mitexperimentalSetDynamicSchedulingEnabled()
festgelegt ist, ruftExoPlayer
diese Methode auf, wenn die Zeit für die Planung der Arbeitsaufgabe berechnet wird. - Fügen Sie
MediaCodecAdapter#OnBufferAvailableListener
hinzu, um eine Benachrichtigung zu erhalten, wenn Ein- und Ausgabepuffer für die Verwendung durchMediaCodecRenderer
verfügbar sind.MediaCodecRenderer
signalisiertExoPlayer
beim Empfang dieser Callbacks. WennExoPlayer
mitexperimentalSetDynamicSchedulingEnabled()
festgelegt ist, plantExoPlayer
seinen Arbeitszyklus, da Renderer Fortschritte machen können. - Verwenden Sie für
LoadControl
-Methoden eine Datenklasse anstelle einzelner Parameter. - Fügen Sie
ExoPlayer.isReleased()
hinzu, um zu prüfen, obExoplayer.release()
aufgerufen wurde. - Fügen Sie
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
hinzu, um die maximale Position zu konfigurieren, für dieseekToPrevious()
nach dem vorherigen Element sucht (#1425). - Einige Inkonsistenzen beim Audiofokus wurden behoben, z.B. dass kein vollständiger oder vorübergehender Fokusverlust gemeldet wurde, während der Player pausiert war (#1436).
- Behebe potenzielle
IndexOutOfBoundsException
, die dadurch entstehen, dass Extractor nach dem ersten Vorbereitungsschritt zusätzliche Tracks melden (#1476). Effects
inExoPlayer.setVideoEffect()
erhält die Zeitstempel ohne Renderer-Offset (#1098).- Mögliche
IllegalArgumentException
beim Behandeln von Player-Fehlern behoben, die beim Vorlesen eines anderen Playlist-Elements aufgetreten sind (#1483).
- Fügen Sie
- Transformer:
- Fügen Sie
audioConversionProcess
undvideoConversionProcess
zuExportResult
hinzu, um anzugeben, wie der jeweilige Track in der Ausgabedatei erstellt wurde. - Die H.264-Level-Prüfungen für die Optimierung von Zuschnitten werden gelockert.
- Unterstützung für den Wechsel zwischen SDR- und HDR-Eingabemedien in einer Sequenz wurde hinzugefügt.
- Unterstützung für Audioeffekte auf Kompositionsebene hinzugefügt
- Unterstützung für das Transcodieren von Ultra-HDR-Bildern in HDR-Videos hinzugefügt
- Ein Problem wurde behoben, bei dem
DefaultAudioMixer
nach dem Zurücksetzen und Wiederverwenden nicht die richtige Anzahl von Byte ausgegeben hat. - Ein Decoderfehler wurde behoben, bei dem die Anzahl der Audiokanäle bei der Verarbeitung von PCM-Eingaben auf Stereo begrenzt war.
- Wenn Sie in
ExoPlayerAssetLoader
Tracks auswählen, ignorieren Sie die Einschränkungen für die Anzahl der Audiokanäle, da sie nur für die Wiedergabe gelten. - Ersetzen Sie die
androidx.media3.transformer.Muxer
-Schnittstelle durchandroidx.media3.muxer.Muxer
und entfernen Sieandroidx.media3.transformer.Muxer
. - Das Laden von HEIC-Bildern über Content-URI-Schemas wurde korrigiert. (#1373).
- Passe die Dauer des Audiotracks in
AudioGraphInput
an, um die AV-Synchronisierung zu verbessern. - Entfernen Sie das Feld „
ExportResult.processedInputs
“. Wenn Sie dieses Feld für Codec-Details verwenden, nutzen Sie stattdessenDefaultDecoderFactory.listener
. Bei einer Codec-Ausnahme sind die Codec-Details in derExportException.codecInfo
verfügbar.
- Fügen Sie
- Extraktoren:
- MPEG-TS: Führe die Änderung aus, sodass der letzte Frame gerendert wird, indem du die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergibst (#7909). Es wurden Korrekturen vorgenommen, um die Probleme zu beheben, die bei HLS-Streams mit nur I-Frames(#1150) und H.262-HLS-Streams (#1126) aufgetreten sind.
- MP3: Bevorzugen Sie die Datengröße aus einem
Info
-Frame gegenüber der Größe, die vom zugrunde liegenden Stream gemeldet wird (z.B. Dateigröße oder HTTP-Content-Length
-Header). So werden nicht abspielbare Trailerdaten (z.B. Albumcover) aus den Berechnungen für die Suche mit konstanter Bitrate ausgeschlossen, wodurch die Suche genauer wird (#1376). - MP3: Verwenden Sie die Frame-Anzahl und andere Daten in einem
Info
-Frame (falls vorhanden), um eine durchschnittliche Bitrate für die Suche mit konstanter Bitrate zu berechnen, anstatt die Bitrate des Frames nach demInfo
-Frame zu extrapolieren, die künstlich klein sein kann, z.B.PCUT
-Frame (#1376). - Die Extraktion des PCM-Audioformats in AVI-Containern wurde korrigiert.
- Audio:
- DTS:X Profile 2-Codierungsattribute für die Passthrough-Wiedergabe korrigieren (#1299).
- Bei der ausgelagerten Wiedergabe muss das Tracking-Feld für den Abschluss des Streams in
DefaultAudioSink
zurückgesetzt werden, bevorAudioTrack.stop()
aufgerufen wird, damitAudioTrack.StreamEventCallback#onPresentationEnded
korrekt erkennt, wann alle ausstehenden Daten wiedergegeben wurden. - Ein Fehler in
SilenceSkippingAudioProcessor
wurde behoben, bei dem Übergänge zwischen verschiedenen Audioformaten (z. B. von Stereo zu Mono) dazu führen konnten, dass der Prozessor eine Ausnahme ausgibt (#1352). - Implementieren Sie
MediaCodecAudioRenderer.getDurationToProgressUs()
, damit ExoPlayer seine Hauptarbeitsloop dynamisch für den Zeitpunkt plant, zu dem der MediaCodecAudioRenderer Fortschritte machen kann.
- Video:
- Ein Problem wurde behoben, durch das
Listener.onRenderedFirstFrame()
beim Wechseln von Oberflächen während der Wiedergabe zu früh angezeigt wurde. - Die Fallback-Logik für den Dolby Vision-Decoder wurde korrigiert, sodass bei Bedarf ein kompatibler AV1-Decoder verwendet wird (#1389).
- Es wurde eine Codec-Ausnahme behoben, die durch das Aktivieren eines Video-Renderers während der Wiedergabe verursacht werden konnte.
- Ein Problem wurde behoben, durch das
- Text:
- Es wurde ein Problem behoben, durch das Untertitel, die vor einer Suchposition beginnen, übersprungen wurden. Dieses Problem wurde erst in Media3 1.4.0-alpha01 eingeführt.
- Das Standardverhalten für das Parsen von Untertiteln wird so geändert, dass es während der Extraktion und nicht während des Renderns erfolgt (siehe Architekturdiagramm von ExoPlayer für den Unterschied zwischen Extraktion und Rendern).
- Diese Änderung kann durch Aufrufen von both
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
undTextRenderer.experimentalSetLegacyDecodingEnabled(true)
überschrieben werden. In der Dokumentation zur Anpassung erfahren Sie, wie Sie diese Komponenten in eineExoPlayer
-Instanz einbinden. Diese Methoden und die Unterstützung für die alte Untertiteldecodierung werden in einer zukünftigen Version entfernt. - Apps mit benutzerdefinierten
SubtitleDecoder
-Implementierungen müssen aktualisiert werden, um stattdessenSubtitleParser
zu implementieren (undSubtitleParser.Factory
anstelle vonSubtitleDecoderFactory
).
- Diese Änderung kann durch Aufrufen von both
- PGS: Die Run-Length-Decodierung wurde korrigiert, um
0
als Farbindex anstelle eines Literal-Farbwerts (#1367) aufzulösen. - CEA-708: Ignoriere den Wert
rowLock
. In der CEA-708-E S-2023-Spezifikation wird angegeben, dass sowohlrowLock
als auchcolumnLock
als „true“ angenommen werden sollten, unabhängig von den im Stream vorhandenen Werten (columnLock
wird nicht unterstützt, daher wird effektiv immer „false“ angenommen).- Diese Änderung war ursprünglich in den Versionshinweisen für
1.3.0-alpha01
enthalten, wurde aber vor dem Release von1.3.0-rc01
versehentlich rückgängig gemacht. Das Problem wurde behoben und die Änderung ist wieder vorhanden.
- Diese Änderung war ursprünglich in den Versionshinweisen für
- CEA-708: Vermeiden Sie, dass durch die naive Verarbeitung des Befehls „Stiftposition festlegen“ durch ExoPlayer doppelte Zeilenumbrüche hinzugefügt werden (#1315).
- Behebung eines
IllegalArgumentException
ausLegacySubtitleUtil
, wenn ein WebVTT-Untertitelbeispiel keine Cues enthält, z.B. als Teil eines DASH-Streams (#1516).
- Metadaten:
- Die Zuordnung von MP4-Dateien zu ID3-Sortiertags wurde korrigiert. Bisher wurden die MP4-Tags „album sort“ (
soal
), „artist sort“ (soar
) und „album artist sort“ (soaa
) fälschlicherweise den ID3-TagsTSO2
,TSOA
undTSOP
zugeordnet (#1302). - Das Lesen von numerischen
gnre
- (Genre) undtmpo
-Tags (Tempo) in MP4-Dateien (/iTunes) wurde korrigiert, wenn der Wert mehr als ein Byte lang ist. - ID3-Frame
TCON
anMediaMetadata.genre
weitergeben (#1305).
- Die Zuordnung von MP4-Dateien zu ID3-Sortiertags wurde korrigiert. Bisher wurden die MP4-Tags „album sort“ (
- Bild:
- Unterstützung für nicht quadratische DASH-Miniaturansichtraster hinzugefügt (#1300).
- Unterstützung für AVIF für API 34+ hinzugefügt
- Lassen Sie
null
als Parameter fürExoPlayer.setImageOutput()
zu, um einen zuvor festgelegtenImageOutput
zu löschen.
- DataSource:
- Implementieren Sie die Unterstützung für
android.resource://package/id
-Rohressourcen-URIs, wobeipackage
sich vom Paket der aktuellen Anwendung unterscheidet. Bisher war nicht dokumentiert, dass dies funktioniert, aber es ist eine effizientere Möglichkeit, auf Ressourcen in einem anderen Paket zuzugreifen als über den Namen. - Prüfen Sie in den
DataSpec
-Konstruktoren, oburl
nicht null ist. Dieser Parameter wurde bereits als „nicht null“ annotiert. - Ermöglichen Sie
ByteArrayDataSource
, einen URI währendopen()
in ein Byte-Array aufzulösen, anstatt ihn bei der Erstellung fest zu codieren (#1405).
- Implementieren Sie die Unterstützung für
- DRM:
- Das Festlegen eines
LoadErrorHandlingPolicy
fürDefaultDrmSessionManagerProvider
ist jetzt möglich (#1271).
- Das Festlegen eines
- Wirkung:
- Mehrere Geschwindigkeitsänderungen innerhalb desselben
EditedMediaItem
oderComposition
inSpeedChangeEffect
werden unterstützt. - 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 DebugSurfaceView von Transformer verbessert wird.
- Aktualisieren Sie die Implementierung der Overlay-Matrix, damit sie mit der Dokumentation übereinstimmt. Dazu müssen Sie die in
setOverlayFrameAnchor()
angewendeten x- und y-Werte tauschen. Wenn SieOverlaySettings.Builder.setOverlayFrameAnchor()
verwenden, tauschen Sie die x- und y-Werte, indem Sie sie mit-1
multiplizieren. - Ein Fehler wurde behoben, bei dem
TimestampWrapper
bei Verwendung mitExoPlayer#setVideoEffects
abgestürzt ist (#821). - Ändern Sie den Standard-SDR-Farbarbeitsbereich von linearen Farben zu elektrischem BT.709-SDR-Video. Außerdem gibt es eine dritte Option, um den ursprünglichen Farbraum beizubehalten.
- Es ist jetzt möglich, eine unbestimmte Z-Reihenfolge für EditedMediaItemSequences zu definieren (#1055).
- Behalten Sie einen einheitlichen Luminanzbereich für verschiedene HDR-Inhalte bei (HLG-Bereich).
- Unterstützung für Ultra HDR-Overlays (Bitmap) bei HDR-Inhalten hinzugefügt
- Zulassen, dass
SeparableConvolution
-Effekte vor API 26 verwendet werden. - Entferne ungenutzte
OverlaySettings.useHdr
, da der dynamische Bereich von Overlay und Frame übereinstimmen muss. - HDR-Unterstützung für
TextOverlay
hinzufügen Die Luminanz des Text-Overlays kann mitOverlaySettings.Builder.setHdrLuminanceMultiplier()
angepasst werden.
- Mehrere Geschwindigkeitsänderungen innerhalb desselben
- IMA-Erweiterung:
- Die Promote API, die für die Wiedergabe von DAI-Anzeigenstreams in Apps erforderlich ist, ist jetzt stabil.
- Fügen Sie
replaceAdTagParameters(Map <String, String>)
zuImaServerSideAdInsertionMediaSource.AdLoader
hinzu, damit Anzeigen-Tag-Parameter zur Laufzeit ersetzt werden können. - Ein Fehler wurde behoben, durch den
VideoAdPlayer.VideoAdPlayerCallback.onError()
nicht aufgerufen wurde, wenn während der Anzeigenwiedergabe ein Playerfehler aufgetreten ist (#1334). - Die IMA SDK-Version wurde auf 3.33.0 aktualisiert, um einen
NullPointerException
bei Verwendung vondata://
-Anzeigen-Tag-URIs zu beheben (#700).
- Sitzung:
- Ändere den Standardwert von
CommandButton.enabled
intrue
und sorge dafür, dass der Wert für Controller auch dann „false“ bleiben kann, wenn der zugehörige Befehl verfügbar ist. - Fügen Sie Symbolkonstanten für
CommandButton
hinzu, die anstelle von benutzerdefinierten Symbolressourcen verwendet werden sollen. - Fügen Sie
MediaSessionService.isPlaybackOngoing()
hinzu, damit Apps abfragen können, ob der Dienst inonTaskRemoved()
beendet werden muss (#1219). - Füge
MediaSessionService.pauseAllPlayersAndStopSelf()
hinzu, um die Wiedergabe aller Sitzungen anzuhalten, und rufestopSelf()
auf, um den Lebenszyklus vonMediaSessionService
zu beenden. - Überschreiben Sie
MediaSessionService.onTaskRemoved(Intent)
, um eine sichere Standardimplementierung bereitzustellen, die den Dienst im Vordergrund ausführt, wenn die Wiedergabe läuft, oder den Dienst andernfalls beendet. - Die Fortschrittsanzeige in der Medienbenachrichtigung für Livestreams wird ausgeblendet, wenn die Dauer nicht in den Metadaten der Plattform-Sitzung festgelegt wird (#1256).
- Die Konvertierung von
MediaMetadata
zuMediaDescriptionCompat
muss so erfolgen, dass bei der Auswahl von Metadateneigenschaften dieselbe bevorzugte Reihenfolge und Logik wie in media1 verwendet wird. MediaSession.sendError()
hinzugefügt, damit nicht schwerwiegende Fehler an den Media3-Controller gesendet werden können. Wenn Sie den Benachrichtigungscontroller verwenden (sieheMediaSession.getMediaNotificationControllerInfo()
), wird der benutzerdefinierte Fehler verwendet, um denPlaybackState
der Plattformsitzung mit den angegebenen Fehlerinformationen in einen Fehlerstatus zu versetzen (#543).- Fügen Sie
MediaSession.Callback.onPlayerInteractionFinished()
hinzu, um Sitzungen darüber zu informieren, dass eine Reihe von Spielerinteraktionen von einem bestimmten Controller abgeschlossen ist. - Fügen Sie
SessionError
hinzu und verwenden Sie es inSessionResult
undLibraryResult
anstelle des Fehlercodes, um weitere Informationen zum Fehler und zur Behebung des Fehlers (falls möglich) bereitzustellen. - Veröffentliche den Code für die Media3 Controller Test App, mit der Interaktionen mit Apps getestet werden können, die eine Mediensitzung veröffentlichen.
- Extras, die an
MediaSession[Builder].setSessionExtras()
von Media3 übergeben werden, anPlaybackStateCompat.getExtras()
eines Media1-Controllers weitergeben. - Schwerwiegende und nicht schwerwiegende Fehler der Plattform-Sitzung zuordnen. Ein
PlaybackException
wird einem schwerwiegenden Fehlerstatus desPlaybackStateCompat
zugeordnet. EinSessionError
, das mitMediaSession.sendError(ControllerInfo, SessionError)
an den Media-Benachrichtigungscontroller gesendet wird, wird inPlaybackStateCompat
einem nicht schwerwiegenden Fehler zugeordnet. Das bedeutet, dass Fehlercode und ‑meldung festgelegt sind, der Status der Plattform-Sitzung jedoch nichtSTATE_ERROR
ist. - Ermöglicht es, die Sitzungsaktivität pro Controller festzulegen, um die globale Sitzungsaktivität zu überschreiben. Die Sitzungsaktivität kann für einen Controller bei der Verbindung definiert werden, indem ein
ConnectionResult
mitAcceptedResultBuilder.setSessionActivivty(PendingIntent)
erstellt wird. Sobald die Verbindung hergestellt ist, kann die Sitzungsaktivität mitMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
aktualisiert werden. - Die Fehlerreplikation von Aufrufen von
MediaLibrarySession.Callback
wurde verbessert. Die Fehlerreplikation kann jetzt mitMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
konfiguriert werden, um den Fehlertyp auszuwählen oder die Fehlerreplikation zu deaktivieren, die standardmäßig aktiviert ist.
- Ändere den Standardwert von
- UI:
- Unterstützung für die Bildanzeige in
PlayerView
hinzufügen, wenn eine Verbindung zu einemExoPlayer
besteht (#1144). - Es wurde die Möglichkeit hinzugefügt, verschiedene Symbole in
PlayerControlView
über XML-Attribute anzupassen, um unterschiedliche Drawables proPlayerView
-Instanz zu ermöglichen und nicht nur globale Überschreibungen (#1200). - Behebung eines Plattformfehlers, der bei Verwendung von
SurfaceView
in einem Compose-AndroidView
auf API 34 zu gestreckten/zugeschnittenen Videos führt (#1237).
- Unterstützung für die Bildanzeige in
- Downloads:
- Achten Sie darauf, dass
DownloadHelper
keine nicht veröffentlichtenRenderer
-Instanzen weitergibt, da dies letztendlich dazu führen kann, dass eine App mitIllegalStateException: Too many receivers, total of 1000, registered for pid
abstürzt (#1224).
- Achten Sie darauf, dass
- Cronet-Erweiterung:
- Behebe das Problem
SocketTimeoutException
inCronetDataSource
. 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).
- Behebe das Problem
- HLS-Erweiterung:
- Es wurde ein Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Unterbrechung warteten, in
HlsSampleStreamWrapper
mit einem falschen Offset delegiert wurden, was zu einemIndexOutOfBoundsException
oder einemIllegalArgumentException
führte (#1002). - Ein Fehler wurde behoben, durch den nicht primäre Playlists für LL-HLS-Streams immer wieder neu geladen wurden (#1240).
- Es wurde ein Fehler behoben, durch den die Aktivierung von CMCD für HLS mit Initialisierungssegmenten zu
Source Error
undIllegalArgumentException
führte. - Behebung eines Fehlers, durch den nicht primäre Playlists während der Livewiedergabe nicht aktualisiert wurden (#1240).
- Ein Fehler wurde behoben, bei dem die Aktivierung von CMCD für HLS-Livestreams zu
ArrayIndexOutOfBoundsException
führte ( (#1395).
- Es wurde ein Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Unterbrechung warteten, in
- DASH-Erweiterung:
- Cast-Erweiterung:
- Fehler behoben, durch den der Albumtitel des
MediaQueueItem
in das Media3-Media-Item in den Künstler konvertiert wurde (#1255).
- Fehler behoben, durch den der Albumtitel des
- Test-Tools:
- Implementieren Sie
onInit()
undonRelease()
inFakeRenderer
. - Ändern Sie
TestPlayerRunHelper.runUntil()/playUntil()
-Methoden, sodass sie bei nicht schwerwiegenden Fehlern (z.B. bei Fehlern, die anAnalyticsListener.onVideoCodecError()
gemeldet werden) fehlschlagen. Verwenden Sie die neueTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
-Methodenkette, um dieses Verhalten zu deaktivieren.
- Implementieren Sie
- Demo-App:
- Verwenden Sie
DefaultPreloadManager
in der Demo-App für Kurzformen. - Wiederholungsmodus kann mit
Intent
-Argumenten über die Befehlszeile festgelegt werden (#1266). - Verwenden Sie
HttpEngineDataSource
alsHttpDataSource
, wenn das Gerät dies unterstützt.
- Verwenden Sie
- Entfernen Sie die folgenden veralteten Symbole:
- Entfernen Sie
CronetDataSourceFactory
. Verwenden Sie stattdessenCronetDataSource.Factory
. - Entfernen Sie einige
DataSpec
-Konstruktoren. Verwenden Sie stattdessenDataSpec.Builder
. - Entfernen Sie die Methode
setContentTypePredicate(Predicate)
ausDefaultHttpDataSource
,OkHttpDataSource
undCronetDataSource
. Verwenden Sie stattdessen die entsprechende Methode für jedesXXXDataSource.Factory
. - Entfernen Sie
OkHttpDataSource
-Konstruktoren undOkHttpDataSourceFactory
. Verwenden Sie stattdessenOkHttpDataSource.Factory
. - Entfernen Sie
PlayerMessage.setHandler(Handler)
. Verwenden Sie stattdessensetLooper(Looper)
. - Entfernen Sie das Feld „
Timeline.Window.isLive
“. Verwenden Sie stattdessen die MethodeisLive()
. - Entfernen Sie
DefaultHttpDataSource
-Konstruktoren. Verwenden Sie stattdessenDefaultHttpDataSource.Factory
. - Entfernen Sie
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. Verwenden Sie stattdessenDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
. - Entfernen Sie
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. Verwenden Sie stattdessenMediaCodecInfo.canReuseCodec(Format, Format)
. - Entfernen Sie die Methode
DrmSessionManager.DUMMY
undgetDummyDrmSessionManager()
. Verwenden Sie stattdessenDrmSessionManager.DRM_UNSUPPORTED
. - Entferne
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
. Verwenden Sie stattdessen die Überladungen, die einDecoderReuseEvaluation
akzeptieren. - Entfernen Sie die Konstanten
RendererSupport.FormatSupport
IntDef undFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
undFORMAT_UNSUPPORTED_TYPE
. Verwenden Sie stattdessen die entsprechenden IntDef- und Konstanten inandroidx.media3.common.C
(z.B.C.FORMAT_HANDLED
). - Entfernen Sie die
Bundleable
-Schnittstelle. Dazu gehört auch das Entfernen aller konstantenBundleable.Creator<Foo> CREATOR
-Felder. Aufrufer sollten stattdessen die MethodenBundle toBundle()
undstatic Foo fromBundle(Bundle)
für jeden Typ verwenden.
- Entfernen Sie
Version 1.4.0-rc01
10. Juli 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-beta01
26. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha02
7. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha01
17. April 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.3.0
Version 1.3.1
11. April 2024
androidx.media3:media3-*:1.3.1
wird veröffentlicht.
Version 1.3.1 enthält diese Commits.
- Gemeinsame Mediathek:
- Fügen Sie
Format.labels
hinzu, um lokalisierte oder andere alternative Labels zuzulassen.
- Fügen Sie
- ExoPlayer:
- Das Problem, dass
PreloadMediaPeriod
die Streams nicht beibehalten kann, wenn sie neu geladen wird, wurde behoben. - Wende bei der erneuten Auswahl von Tracks das richtige
TrackSelectionResult
für den Wiedergabezeitraum an. - Renderer mit Early-Enablement sollten erst nach dem Fortschreiten des Wiedergabezeitraums gestartet werden, wenn zwischen Media-Elementen gewechselt wird (#1017).
- Der ProGuard-Regel für
-keepclasseswithmembers
wurde der fehlende Rückgabetyp hinzugefügt.DefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Das Problem, dass
- Transformer:
- Es wurde eine Problemumgehung für Ausnahmen hinzugefügt, die aufgrund von
MediaMuxer
ausgelöst werden, da negative Präsentationszeitstempel vor API 30 nicht unterstützt werden.
- Es wurde eine Problemumgehung für Ausnahmen hinzugefügt, die aufgrund von
- Titelauswahl:
DefaultTrackSelector
: Bevorzuge Videotracks mit einer „angemessenen“ Framerate (>=10 fps) gegenüber solchen mit einer niedrigeren oder nicht festgelegten Framerate. So wird sichergestellt, dass der Player den „echten“ Videotrack in MP4-Dateien auswählt, die aus Bewegungsfotos extrahiert wurden. Diese können zwei HEVC-Tracks enthalten, von denen einer eine höhere Auflösung, aber eine sehr geringe Anzahl von Frames hat (#1051).
- Extraktoren:
- Ein Problem wurde behoben, bei dem das Padding beim Lesen von Chunks mit ungerader Größe aus WAV-Dateien nicht übersprungen wurde (#1117).
- MP3: Füllen Sie
Format.averageBitrate
aus Metadaten-Frames wieXING
undVBRI
. - MPEG-TS: Eine Änderung wurde rückgängig gemacht, die dafür sorgen sollte, dass der letzte Frame gerendert wird. Dazu wurde die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergeben (#7909). Das liegt daran, dass die Änderung neue Probleme mit reinen I-Frame-HLS-Streams (#1150) und H.262-HLS-Streams (#1126) verursacht.
- Audio:
- Wiedergabe-Engine-Wiederherstellung ermöglichen, indem das Offloading deaktiviert wird, wenn die Initialisierung des Audiotracks im Offload-Modus fehlschlägt.
- Video:
- Es wurde eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, dem Chromecast mit Google TV und dem Lenovo M10 FHD Plus hinzugefügt, durch das H265-Streams mit 60 fps als nicht unterstützt markiert werden.
- Es wurde ein Workaround hinzugefügt, der dafür sorgt, dass der erste Frame beim Tunneling immer gerendert wird, auch wenn das Gerät dies nicht automatisch wie von der API gefordert tut (#1169). (#966).
- Es wurde ein Problem behoben, bei dem die Verarbeitung von HDR-Farbinformationen zu einem fehlerhaften Verhalten des Codecs führte und adaptive Formatwechsel für SDR-Videotracks verhindert wurden (#1158).
- Text:
- WebVTT: Verhindern, dass direkt aufeinanderfolgende Cues fälschlicherweise zusätzliche
CuesWithTiming
-Instanzen ausWebvttParser.parse
erstellen (#1177).
- WebVTT: Verhindern, dass direkt aufeinanderfolgende Cues fälschlicherweise zusätzliche
- DRM:
- Umgehe einen
NoSuchMethodError
, der vomMediaDrm
-Framework anstelle vonResourceBusyException
oderNotProvisionedException
auf einigen Android 14-Geräten ausgelöst werden kann (#1145).
- Umgehe einen
- Wirkung:
- Verbessertes Tone-Mapping von PQ zu SDR durch Konvertieren von Farbräumen.
- Sitzung:
- UI:
- Als Fallback wird der Name der Sprache des Audiotracks verwendet, wenn
Locale
keinen Anzeigenamen ermitteln kann (#988).
- Als Fallback wird der Name der Sprache des Audiotracks verwendet, wenn
- DASH-Erweiterung:
- Füllen Sie alle
Label
-Elemente aus dem Manifest inFormat.labels
ein (#1054).
- Füllen Sie alle
- RTSP-Erweiterung:
- Leere Werte für Sitzungsinformationen (i-Tags) beim SDP-Parsing überspringen (#1087).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Die MIDI-Erweiterung ist standardmäßig als lokale Abhängigkeit deaktiviert, da ein zusätzliches Maven-Repository konfiguriert werden muss. Nutzer, die dieses Modul aus einer lokalen Abhängigkeit benötigen, können es wieder aktivieren.
Version 1.3.0
6. März 2024
androidx.media3:media3-*:1.3.0
wird veröffentlicht.
Version 1.3.0 enthält diese Commits.
- Gemeinsame Mediathek:
- Implementieren Sie die Unterstützung für
android.resource://package/[type/]name
-Rohressourcen-URIs, wobei sichpackage
vom Paket der aktuellen Anwendung unterscheidet. Das hat immer funktioniert, war aber bisher nicht richtig implementiert. - MIME-Typen, die vom App-Code festgelegt oder aus Medien gelesen werden, werden normalisiert, sodass sie nur aus Kleinbuchstaben bestehen.
- Definieren Sie Anzeigen mit einem vollständigen
MediaItem
anstelle eines einzelnenUri
inAdPlaybackState
. - Erhöhen Sie
minSdk
auf 19 (Android KitKat). Dies entspricht allen anderen AndroidX-Bibliotheken und ist erforderlich, damit wir auf die neuesten Versionen unserer AndroidX-Abhängigkeiten aktualisieren können. - Füllen Sie sowohl
artworkUri
als auchartworkData
inMediaMetadata.Builder.populate(MediaMetadata)
aus, wenn mindestens eines der beiden Elemente nicht null ist (#964).
- Implementieren Sie die Unterstützung für
- ExoPlayer:
- Fügen Sie
PreloadMediaSource
undPreloadMediaPeriod
hinzu, damit Apps vor der Wiedergabe eine Content-Media-Quelle an einer bestimmten Startposition vorab laden können.PreloadMediaSource
bereitet die Inhaltsmedienquelle für den Empfang vonTimeline
vor, bereitet den Zeitraum an der angegebenen Startposition vor und speichert ihn im Cache, wählt Tracks aus und lädt die Media-Daten für den Zeitraum. Apps steuern den Preload-Fortschritt durch die Implementierung vonPreloadMediaSource.PreloadControl
und legen die vorab geladene Quelle für die Wiedergabe im Player fest. - Fügen Sie
ExoPlayer.setImageOutput
hinzu, damit AppsImageRenderer.ImageOutput
festlegen können. DefaultRenderersFactory
stellt dem Player jetzt standardmäßig einImageRenderer
mit nullImageOutput
undImageDecoder.Factory.DEFAULT
zur Verfügung.- Das
Player.Listener.onPositionDiscontinuity
-Ereignis wird ausgegeben, wenn Stille übersprungen wird (#765). - Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzugefügt. Sie können diese Option mit
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
aktivieren. - Adaptive Media-Quellen mit
PreloadMediaSource
unterstützen. - Implementieren Sie
HttpEngineDataSource
, eineHttpDataSource
mit der HttpEngine API. - Unterklassenbildung verhindern
CompositeSequenceableLoader
Diese Komponente wurde bereits erweiterbar gemacht, aber nie in der Bibliothek untergeordnet. Anpassungen können vorgenommen werden, indem eine Instanz mit dem Decorator-Muster umschlossen und eine benutzerdefinierteCompositeSequenceableLoaderFactory
implementiert wird. - Ein Problem wurde behoben, bei dem durch Wiederholen derselben Zeit die Metadaten dieses Elements gelöscht wurden (#1007).
- Benennen Sie die
experimentalSetSubtitleParserFactory
-Methoden fürBundledChunkExtractor.Factory
undDefaultHlsExtractorFactory
insetSubtitleParserFactory
um und verbieten Sie die Übergabe vonnull
. Verwenden Sie die neuenexperimentalParseSubtitlesDuringExtraction(boolean)
-Methoden, um das Parsing-Verhalten zu steuern. - Unterstützung für die Anpassung des
SubtitleParser.Factory
hinzugefügt, das während der Extraktion verwendet wird. Dies kann mitMediaSource.Factory.setSubtitleParserFactory()
erreicht werden. - Fügen Sie allen
Format.id
-Feldern, die ausMergingMediaSource
generiert werden, das Quellpräfix hinzu. So lässt sich ermitteln, welche Quelle eineFormat
generiert hat (#883). - Der reguläre Ausdruck, der zum Validieren benutzerdefinierter CMCD-Schlüsselnamen (Common Media Client Data) verwendet wird, wurde korrigiert. Er prüft jetzt nur noch auf Bindestriche (#1028).
- Doppelte Codierung von CMCD-Abfrageparametern beenden (#1075).
- Fügen Sie
- Transformer:
- Unterstützung für das Zusammenführen von H.265/HEVC-SEF-Zeitlupenvideos hinzugefügt
- Die Transmuxing-Geschwindigkeit wurde erhöht, insbesondere bei Bearbeitungen vom Typ „Video entfernen“.
- Fügen Sie eine API hinzu, damit die Ausgabedatei mit einem Videobild beginnt. Dadurch kann die Ausgabe von Zuschneidevorgängen besser mit Player-Implementierungen kompatibel sein, die den ersten Videoframes erst dann anzeigen, wenn ihr Präsentationszeitstempel (#829) erreicht ist.
- Unterstützung für die Optimierung von MP4-Zuschneidevorgängen für einzelne Assets wurde hinzugefügt.
- Unterstützung hinzugefügt, um sicherzustellen, dass ein Videobild den ersten Zeitstempel in der Ausgabedatei hat. Es wurde ein Fehler behoben, bei dem Ausgabedateien auf iOS-basierten Playern mit einem schwarzen Frame begannen (#829).
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.selectImageTrack
hinzu, um die Auswahl von Bild-Tracks zu aktivieren. - Fügen Sie
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
hinzu, um festzulegen, ob ein Bild-Track ausgewählt werden soll, wenn sowohl ein Bild- als auch ein Video-Track verfügbar sind. Der Standardwert istfalse
. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
- Fügen Sie
- Extraktoren:
- Dem MP4-Extractor wurde zusätzliches AV1C-Parsing hinzugefügt, um die Werte
ColorInfo.colorSpace
,ColorInfo.colorTransfer
undColorInfo.colorRange
abzurufen (#692). - MP3: Verwenden Sie die Suche mit konstanter Bitrate (CBR) für Dateien mit einem
Info
-Header (das CBR-Äquivalent desXing
-Headers). Bisher haben wir die Suchtabelle aus demInfo
-Header verwendet. Dies führt jedoch zu einer weniger präzisen Suche als wenn wir sie ignorieren und davon ausgehen, dass die Datei CBR ist. - MPEG2-TS: Unterstützung für DTS, DTS-LBR und DTS:X Profile2 hinzugefügt (#275).
- Audiotypen aus TS-Deskriptoren extrahieren und Rollenflags zuordnen, damit Nutzer fundiertere Entscheidungen bei der Auswahl von Audiotracks treffen können (#973).
- Dem MP4-Extractor wurde zusätzliches AV1C-Parsing hinzugefügt, um die Werte
- Audio:
- Video:
- Ändern Sie den
MediaCodecVideoRenderer
-Konstruktor, der einVideoFrameProcessor.Factory
-Argument verwendet, und ersetzen Sie ihn durch einen Konstruktor, der einVideoSinkProvider
-Argument verwendet. Apps, die ein benutzerdefiniertesVideoFrameProcessor.Factory
einfügen möchten, können einCompositingVideoSinkProvider
instanziieren, das das benutzerdefinierteVideoFrameProcessor.Factory
verwendet, und den Video-Sink-Provider anMediaCodecVideoRenderer
übergeben.
- Ändern Sie den
- Text:
- Die Serialisierung von Bitmap-Hinweisen wurde korrigiert, um den Fehler
Tried to marshall a Parcel that contained Binder objects
bei Verwendung vonDefaultExtractorsFactory.setTextTrackTranscodingEnabled
zu beheben (#836). - CEA-708: Ignoriere den Wert
rowLock
. In der CEA-708-E S-2023-Spezifikation wird angegeben, dass sowohlrowLock
als auchcolumnLock
als „true“ angenommen werden sollten, unabhängig von den im Stream vorhandenen Werten (columnLock
wird nicht unterstützt, daher wird effektiv immer „false“ angenommen).
- Die Serialisierung von Bitmap-Hinweisen wurde korrigiert, um den Fehler
- Bild:
- Unterstützung für DASH-Thumbnails hinzugefügt Rasterbilder werden zugeschnitten und einzelne Thumbnails werden
ImageOutput
kurz vor dem jeweiligen Präsentationszeitpunkt bereitgestellt.
- Unterstützung für DASH-Thumbnails hinzugefügt Rasterbilder werden zugeschnitten und einzelne Thumbnails werden
- DRM:
- Spiele unverschlüsselte „Clear Lead“-Samples in DRM-Inhalten sofort ab, auch wenn die Schlüssel für die späteren verschlüsselten Samples noch nicht verfügbar sind. Dies kann zu Unterbrechungen während der Wiedergabe führen, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Zuvor hätte die Wiedergabe jedoch überhaupt nicht begonnen. Dieses Verhalten kann mit
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oderDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
deaktiviert werden.
- Spiele unverschlüsselte „Clear Lead“-Samples in DRM-Inhalten sofort ab, auch wenn die Schlüssel für die späteren verschlüsselten Samples noch nicht verfügbar sind. Dies kann zu Unterbrechungen während der Wiedergabe führen, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Zuvor hätte die Wiedergabe jedoch überhaupt nicht begonnen. Dieses Verhalten kann mit
- IMA-Erweiterung:
- Ein Problem wurde behoben, durch das DASH- und HLS-Anzeigen ohne die entsprechende Dateiendung nicht abgespielt werden konnten.
- Sitzung:
- Doppelklickerkennung für TV-Apps deaktivieren (#962).
- Ein Problem wurde behoben, bei dem
MediaItem.RequestMetadata
mit nur nicht leeren Extras nicht zwischen Media-Controllern und Sitzungen übertragen wurde. - Fügen Sie
MediaLibrarySession.Builder
einen Konstruktor hinzu, der nur einContext
anstelle einesMediaLibraryService
akzeptiert.
- HLS-Erweiterung:
- Reduzieren Sie die Sichtbarkeit von
HlsMediaPeriod
auf „package-private“. Von außerhalb des HLS-Pakets sollte nicht direkt von diesem Typ abgeleitet werden. - Die Auflösung wird effizienter zum Beginn eines Segments gesucht (#1031).
- Reduzieren Sie die Sichtbarkeit von
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- MIDI-Decoder: SysEx-Ereignismeldungen ignorieren (#710).
- Test-Tools:
- Pausiere die Wiedergabe in
TestPlayerRunHelper.playUntilPosition
nicht. Beim Test wird die Wiedergabe fortgesetzt, aber der Fortschritt wird angehalten, bis der Test Zusicherungen und weitere Aktionen hinzufügen kann.
- Pausiere die Wiedergabe in
- Demo-App:
- Füge ein Shortform-Demomodul hinzu, um die Verwendung von
PreloadMediaSource
im Anwendungsfall für Shortform-Inhalte zu demonstrieren.
- Füge ein Shortform-Demomodul hinzu, um die Verwendung von
Version 1.3.0-rc01
22. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-beta01
7. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-alpha01
15. Januar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.2.0
Version 1.2.1
9. Januar 2024
- ExoPlayer:
- Ein Problem wurde behoben, durch das bei manuellen Suchvorgängen außerhalb des Bereichs
LiveConfiguration.min/maxOffset
der Offset immer wieder aufmin/maxOffset
zurückgesetzt wurde. - Problem behoben, bei dem die OPUS- und VORBIS-Channel-Layouts für 3, 5, 6, 7 und 8 Channels falsch waren (#8396).
- Ein Problem wurde behoben, durch das bei der Auswahl von Tracks nach dem Zurückspulen auf null in einem Livestream der Stream fälschlicherweise an der Standardposition gestartet wurde (#9347).
- Das Problem wurde behoben, dass neue Instanzen von
CmcdData.Factory
negative Werte fürbufferedDurationUs
aus Chunk-Quellen erhalten haben, was zu einemIllegalArgumentException
(#888) geführt hat.
- Ein Problem wurde behoben, durch das bei manuellen Suchvorgängen außerhalb des Bereichs
- Transformer:
- Problem umgehen, bei dem der Encoder bei der Konfiguration aufgrund einer hohen Betriebsrate einen Fehler ausgibt.
- Extraktoren:
- Markieren Sie sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Bewegungsfotos als
ROLE_FLAG_ALTERNATE
, damit sie aufgrund ihrer höheren Auflösung nicht automatisch für die Wiedergabe ausgewählt werden. - Falsche Keyframe-Erkennung für TS H264-Streams korrigieren (#864).
- Die Schätzung der Dauer von TS-Streams, die länger als 47.721 Sekunden sind, wurde korrigiert (#855).
- Markieren Sie sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Bewegungsfotos als
- Audio:
- Die Verarbeitung von EOS für
SilenceSkippingAudioProcessor
wurde korrigiert, wenn sie mehrmals aufgerufen wird (#712).
- Die Verarbeitung von EOS für
- Video:
- Es wurde eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzugefügt, das dazu führt, dass AVC-Streams mit 60 fps als nicht unterstützt markiert werden (#693).
- Metadaten:
- Ein Fehler wurde behoben, bei dem
MediaMetadata
nur aus Vorbis-Kommentaren mit Großbuchstabenschlüsseln (#876) ausgefüllt wurde. OutOfMemoryError
wird abgefangen, wenn sehr große ID3-Frames geparst werden. Die Wiedergabe kann also ohne die Tag-Informationen fortgesetzt werden, anstatt dass sie komplett fehlschlägt.
- Ein Fehler wurde behoben, bei dem
- DRM:
- Die Problemumgehung für die fälschliche ClearKey-Lizenz-URL
https://default.url
wurde auf API 33 und höher ausgeweitet. Zuvor wurde sie nur auf API 33 angewendet (#837). - Problem mit
ERROR_DRM_SESSION_NOT_OPENED
beim Wechsel von verschlüsselten zu unverschlüsselten Inhalten ohne an den Player angehängte Oberfläche behoben. Der Fehler ist aufgetreten, weil ein sicherer Decoder fälschlicherweise zum Abspielen der unverschlüsselten Inhalte verwendet wurde.
- Die Problemumgehung für die fälschliche ClearKey-Lizenz-URL
- Sitzung:
- Fügen Sie die benutzerdefinierten Schlüssel und Werte in
MediaMetadataCompat
bisMediaMetadata.extras
undMediaMetadata.extras
bisMediaMetadataCompat
ein (#756, #802). - Problem mit der Übertragung
notifyChildrenChanged
für Legacy-Controller behoben (#644). - Ein Fehler wurde behoben, bei dem das Festlegen einer negativen Zeit für einen deaktivierten
setWhen
-Timer der Benachrichtigung auf einigen Geräten zu einem Absturz führte (#903). - Behebe
IllegalStateException
, wenn der Media-Benachrichtigungscontroller die Verbindung noch nicht abgeschlossen hat, wenn das erste Benachrichtigungsupdate angefordert wird (#917).
- Fügen Sie die benutzerdefinierten Schlüssel und Werte in
- UI:
- Ein Problem wurde behoben, bei dem die Schaltflächen zum Vor- und Zurückspulen nicht sichtbar waren, wenn sie mit Material Design in einem BottomSheetDialogFragment verwendet wurden (#511).
- Das Problem, dass die Zahlen auf der Schnellvorlauftaste des
PlayerControlView
falsch ausgerichtet waren (#547), wurde behoben.
- DASH-Erweiterung:
- „f800“ als Kanalanzahl 5 für Dolby im DASH-Manifest parsen (#688).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Cast-Erweiterung:
- Die Erstellung von
Timeline
wurde bereinigt, damit die App nicht abstürzt, wenn das Laden von Media auf dem Cast-Gerät fehlschlägt (#708).
- Die Erstellung von
Version 1.2.0
15. November 2023
- Gemeinsame Mediathek:
- Fügen Sie den Methoden in der
Log.Logger
-Schnittstelle einen@Nullable Throwable
-Parameter hinzu. Der Parametermessage
für diese Methoden enthält keine Informationen mehr zuThrowable
, das an dieLog.{d,i,w,e}()
-Methoden übergeben wurde. Implementierungen müssen diese Informationen daher bei Bedarf manuell anhängen (möglicherweise mitLogger.appendThrowableString(String, Throwable)
). - Ein Kotlin-Kompatibilitätsproblem wurde behoben, bei dem generische Typ-Parameter, die Nullwerte zulassen, und Array-Elementtypen, die Nullwerte zulassen, nicht als solche erkannt wurden. Beispiele sind die Methodenparameter
TrackSelectorResult
undSimpleDecoder
(#6792). - Ändern Sie das Standardverhalten der Benutzeroberfläche und der Benachrichtigungen in
Util.shouldShowPlayButton
, um eine Schaltfläche zum Abspielen anzuzeigen, wenn die Wiedergabe vorübergehend unterdrückt wird (z.B. aufgrund eines vorübergehenden Verlusts des Audiofokus). Das bisherige Verhalten kann beibehalten werden, indem SiePlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oderMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
verwenden (#11213). - Führen Sie ein Upgrade von
androidx.annotation:annotation-experimental
auf1.3.1
durch, um das Problem unter https://issuetracker.google.com/251172715 zu beheben. - Verschieben Sie
ExoPlayer.setAudioAttributes
zurPlayer
-Schnittstelle.
- Fügen Sie den Methoden in der
- ExoPlayer:
- Problem mit der Suche in AC4-Streams behoben, das dadurch verursacht wurde, dass „decode-only“-Samples nicht richtig identifiziert wurden (#11000).
- Wiedergabe auf ungeeigneten Audioausgabegeräten (z.B. dem integrierten Lautsprecher auf Wear OS-Geräten) unterdrücken, wenn diese Funktion über
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
aktiviert ist. Der Grund für die Unterdrückung der Wiedergabe wird alsPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
aktualisiert, wenn die Wiedergabe versucht wird, aber keine geeigneten Audioausgänge verfügbar sind oder wenn alle geeigneten Ausgänge während der Wiedergabe getrennt werden. Der Grund für die Unterdrückung wird entfernt, wenn eine geeignete Ausgabe verbunden ist. - Fügen Sie
MediaSource.canUpdateMediaItem
undMediaSource.updateMediaItem
hinzu, umMediaItem
-Updates nach der Erstellung überPlayer.replaceMediaItem(s)
zu akzeptieren. MediaItem
-Updates für alleMediaSource
-Klassen, die von der Bibliothek bereitgestellt werden, überPlayer.replaceMediaItem(s)
zulassen (#33, #9978).- Benennen Sie
MimeTypes.TEXT_EXOPLAYER_CUES
inMimeTypes.APPLICATION_MEDIA3_CUES
um. - Fügen Sie
PngExtractor
hinzu, um eine ganze PNG-Datei als ein Beispiel inTrackOutput
zu senden und zu lesen. - Die Methode
SequenceableLoader.continueLoading(long)
in der SchnittstelleSequenceableLoader
wurde verbessert, umSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
enthält neben dem vorhandenenplaybackPositionUs
zusätzliche Parameter, darunterplaybackSpeed
undlastRebufferRealtimeMs
. - Erweitere die Methode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
in der SchnittstelleChunkSource
zuChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: „buffer starvation“ (
bs
), „deadline“ (dl
), „playback rate“ (pr
) und „startup“ (su
) (#8699). - Luma- und Chroma-Bit-Tiefe zu
ColorInfo
hinzufügen (#491). - Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: nächste Objektanfrage (
nor
) und nächste Bereichsanfrage (nrr
) (#8699). - Funktion zum Übertragen von CMCD-Daten (Common Media Client Data) mithilfe von Abfrageparametern hinzugefügt (#553).
- Behebe das Problem
ConcurrentModificationException
inExperimentalBandwidthMeter
(#612). - Fügen Sie
CompositeMediaSource.getMediaTimeForChildMediaTime
den ParameterMediaPeriodId
hinzu. - Unterstützung von
ClippingMediaSource
(und anderen Quellen mit Zeitversatz für Zeitraum/Zeitfenster) inConcatenatingMediaSource2
(#11226). - Ändern Sie
BaseRenderer.onStreamChanged()
so, dass auch einMediaPeriodId
-Argument empfangen wird.
- Transformer:
- EXIF-Rotationsdaten für Bildeingaben parsen.
- Entfernen Sie den Annotationstyp
TransformationRequest.HdrMode
und die zugehörigen Konstanten. Verwenden Sie stattdessenComposition.HdrMode
und die zugehörigen Konstanten. - Vereinfachen Sie die
OverlaySettings
, um Probleme mit der Drehung zu beheben. - Die Parameter
frameRate
unddurationUs
vonSampleConsumer.queueInputBitmap
wurden inTimestampIterator
geändert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
hinzu, um die nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Die Standardeinstellung bleibt beim aktuellen Verhalten vontrue
.
- Fügen Sie
- Extraktoren:
- MPEG-TS: Achten Sie darauf, dass der letzte Frame gerendert wird, indem Sie die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergeben (#7909).
- Tippfehler bei der Bestimmung von
rotationDegrees
behoben.projectionPosePitch
wurde inprojectionPoseRoll
geändert (#461). - Die Annahme, dass
Extractor
-Instanzen direkt mitinstanceof
geprüft werden können, wird entfernt. Wenn Sie zur Laufzeit auf die Implementierungsdetails einesExtractor
zugreifen möchten, müssen Sie zuerstExtractor.getUnderlyingInstance
aufrufen. - Fügen Sie
BmpExtractor
hinzu. - Fügen Sie
WebpExtractor
hinzu. - Fügen Sie
HeifExtractor
hinzu. - QuickTime Classic-Unterstützung für
Mp4Extractor
hinzufügen
- Audio:
- Unterstützung für 24-/32-Bit-Big-Endian-PCM in MP4 und Matroska hinzugefügt und PCM-Codierung für
lpcm
in MP4 geparst. - Unterstützung für das Extrahieren von Vorbis-Audio in MP4 hinzugefügt.
- Füge
AudioSink.getFormatOffloadSupport(Format)
hinzu, um den Grad der Offload-Unterstützung abzurufen, die die Senke für das Format über eineDefaultAudioOffloadSupportProvider
bieten kann. Es wird das neueAudioOffloadSupport
zurückgegeben, dasisFormatSupported
,isGaplessSupported
undisSpeedChangeSupported
enthält. - Fügen Sie
AudioSink.setOffloadMode()
hinzu, über das die Offload-Konfiguration auf der Audio-Senke konfiguriert wird. Der Standardwert istAudioSink.OFFLOAD_MODE_DISABLED
. - Die Auslagerung kann über
setAudioOffloadPreference
inTrackSelectionParameters
aktiviert werden. Wenn die festgelegte Einstellung „Aktivieren“ lautet, das Gerät das Offload für das Format unterstützt und die Titelauswahl ein einzelner Audiotrack ist, wird das Audio-Offload aktiviert. - Wenn
audioOffloadModePreference
aufAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
gesetzt ist, wird mitDefaultTrackSelector
nur ein Audiotrack ausgewählt und nur, wenn das Format dieses Tracks im Offload unterstützt wird. Wenn kein Audiotrack für den Offload unterstützt wird, wird kein Track ausgewählt. - Die Unterstützung für unterbrechungsfreies Offload wird für Geräte vor API-Level 33 deaktiviert, da es nach dem Übergang zwischen Titeln zu Problemen mit der Wiedergabeposition kommt.
- Entfernen Sie den Parameter
enableOffload
aus der MethodensignaturDefaultRenderersFactory.buildAudioSink
. - Entfernen Sie die Methode
DefaultAudioSink.Builder.setOffloadMode
. - Entfernen Sie den intdef-Wert
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Unterstützung für Opus-Metadaten für lückenlose Wiedergabe während der Offload-Wiedergabe hinzugefügt.
- Renderer-Wiederherstellung durch Deaktivieren des Offloads ermöglichen, wenn der erste Schreibvorgang fehlgeschlagen ist (#627).
- Standardmäßig die Offload-Planung für die Offload-Wiedergabe nur von Audio aktivieren.
- Löschen Sie
ExoPlayer.experimentalSetOffloadSchedulingEnabled
undAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
wurde inonSleepingForOffloadChanged
undonExperimentalOffloadedPlayback
inonOffloadedPlayback
umbenannt.- Verschieben Sie die mit dem Audio-Offload-Modus verknüpften
TrackSelectionParameters
-Schnittstellen und ‑Definitionen in eine innereAudioOffloadPreferences
-Klasse. - Fügen Sie
onAudioTrackInitialized
- undonAudioTrackReleased
-Callbacks zuAnalyticsListener
,AudioRendererEventListener
undAudioSink.Listener
hinzu. - Problem mit DTS Express-Audio-Pufferunterlauf behoben (#650).
- Fehler behoben, bei dem die Funktion „capabilities check“ für E-AC3-JOC den Fehler
IllegalArgumentException
zurückgegeben hat (#677).
- Unterstützung für 24-/32-Bit-Big-Endian-PCM in MP4 und Matroska hinzugefügt und PCM-Codierung für
- Video:
MediaCodecVideoRenderer
erlauben, eine benutzerdefinierteVideoFrameProcessor.Factory
zu verwenden.- Es wurde ein Fehler behoben, bei dem der erste Frame nicht gerendert werden konnte, wenn der Audiostream mit negativen Zeitstempeln beginnt (#291).
- Text:
- Entfernen Sie
ExoplayerCuesDecoder
. Text-Tracks mitsampleMimeType = application/x-media3-cues
werden jetzt direkt vonTextRenderer
verarbeitet, ohne dass eineSubtitleDecoder
-Instanz erforderlich ist.
- Entfernen Sie
- Metadaten:
MetadataDecoder.decode
wird für „decode-only“-Samples nicht mehr aufgerufen, da die Implementierung ohnehin „null“ zurückgeben muss.
- Wirkung:
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
-Bitmap-Eingabe nach Zeitstempel hinzufügen.- Ändern Sie
VideoFrameProcessor.registerInputStream()
in einen nicht blockierenden Aufruf. Apps müssenVideoFrameProcessor.Listener#onInputStreamRegistered()
implementieren. - Die Parameter
frameRate
unddurationUs
vonVideoFrameProcessor.queueInputBitmap
wurden inTimestampIterator
geändert.
- IMA-Erweiterung:
- Es wurde ein Fehler behoben, durch den bei einem DASH-Livestream mit mehreren Zeiträumen, der nicht das erste Element in einer Playlist ist, eine Ausnahme ausgelöst werden konnte (#571).
- StreamManager vor dem Aufrufen von
AdsLoader.destroy()
freigeben - IMA SDK-Version auf 3.31.0 aktualisiert.
- Sitzung:
- Legen Sie das Verhalten des Benachrichtigungsdienstes im Vordergrund auf
FOREGROUND_SERVICE_IMMEDIATE
inDefaultMediaNotificationProvider
fest (#167). - Verwenden Sie nur
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
über API 31, um Probleme mit der eingestellten API auf Samsung-Geräten zu vermeiden (#167). - Verwenden Sie den Media-Benachrichtigungs-Controller als Proxy, um verfügbare Befehle und das benutzerdefinierte Layout festzulegen, mit denen die Benachrichtigung und die Plattform-Sitzung gefüllt werden.
- Konvertieren Sie Ereignisse von Medientasten, die von
MediaSessionService.onStartCommand()
in Media3 empfangen werden, anstatt sie an die Plattformsitzung und zurück an Media3 weiterzuleiten. Dadurch ist der Anrufer-Controller immer der Controller für Medienbenachrichtigungen und Apps können Anrufe, die über die Benachrichtigung eingehen, auf allen unterstützten API-Ebenen auf dieselbe Weise erkennen. - Es wurde ein Fehler behoben, durch den
MediaController.getCurrentPosition()
nicht weiterging, wenn eine Verbindung zu einem altenMediaSessionCompat
bestand. - Fügen Sie
MediaLibrarySession.getSubscribedControllers(mediaId)
hinzu, um die Bedienung zu vereinfachen. - Überschreiben Sie
MediaLibrarySession.Callback.onSubscribe()
, um die Verfügbarkeit der übergeordneten ID zu bestätigen, für die der Controller abonniert ist. Wenn die Anfrage erfolgreich ist, wird das Abo akzeptiert undnotifyChildrenChanged()
wird sofort aufgerufen, um den Browser zu informieren (#561). - Sitzungsdemomodul für Automotive OS hinzugefügt und Sitzungsdemo für Android Auto aktiviert.
- Legen Sie die Warteschlange der Framework-Sitzung nicht fest, wenn
COMMAND_GET_TIMELINE
für den Controller für Medienbenachrichtigungen nicht verfügbar ist. Wenn Android Auto als Clientcontroller die Daten aus der Framework-Sitzung liest, hat dies zur Folge, dass die Schaltflächequeue
in der Benutzeroberfläche von Android Auto nicht angezeigt wird (#339). - Verwenden Sie standardmäßig
DataSourceBitmapLoader
anstelle vonSimpleBitmapLoader
(#271, #327). - Fügen Sie
MediaSession.Callback.onMediaButtonEvent(Intent)
hinzu, damit Apps die Standardbehandlung von Media-Button-Ereignissen überschreiben können.
- Legen Sie das Verhalten des Benachrichtigungsdienstes im Vordergrund auf
- UI:
- Füge eine
Player.Listener
-Implementierung für Wear OS-Geräte hinzu, die die Wiedergabeunterdrückung aufgrund vonPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
verarbeitet, indem ein Systemdialogfeld gestartet wird, in dem ein Nutzer einen geeigneten Audioausgang (z.B. Bluetooth-Kopfhörer) verbinden kann. Die Wiedergabe wird automatisch fortgesetzt, wenn innerhalb eines konfigurierbaren Zeitlimits (Standard: 5 Minuten) ein geeignetes Gerät verbunden wird.
- Füge eine
- Downloads:
- Deklarieren Sie den Typ des Dienstes im Vordergrund „dataSync“ für
DownloadService
, um die Kompatibilität mit Android 14 zu gewährleisten. Wenn Sie diesen Dienst verwenden, muss die App auchdataSync
alsforegroundServiceType
im Manifest hinzufügen und die BerechtigungFOREGROUND_SERVICE_DATA_SYNC
(#11239) hinzufügen.
- Deklarieren Sie den Typ des Dienstes im Vordergrund „dataSync“ für
- HLS-Erweiterung:
- Die HLS-Live-Playlist wird in einem Intervall aktualisiert, das aus der letzten Ladebeginnzeit und nicht aus der letzten Ladeabschlusszeit berechnet wird (#663).
- DASH-Erweiterung:
- Mehrere DASH-IDs desselben Typs in der Segmentvorlagen-URL zulassen.
- Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzugefügt. Das Zusammenführen von sich überschneidenden Untertiteln wird besser unterstützt, einschließlich der Behebung von Flackern beim Übergang zwischen Untertitelsegmenten. Sie können diese Funktion mit
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288) aktivieren.
- RTSP-Erweiterung:
- Eine Race-Bedingung wurde behoben, die beim Fallback auf TCP zu
IndexOutOfBoundsException
oder in einigen Situationen zu einer hängenden Wiedergabe führen konnte. - Prüfe den Status bei der RTSP-Einrichtung, wenn der Ladestatus von
RtspMediaPeriod
zurückgegeben wird (#577). - Benutzerdefinierte RTSP-Anfragemethoden im öffentlichen Header der Options-Antwort ignorieren (#613).
- Verwenden Sie den RTSP-Setup-Antwort-Zeitlimitwert im Zeitintervall für das Senden von RTSP-Optionsanfragen für Keep-Alive (#662).
- Eine Race-Bedingung wurde behoben, die beim Fallback auf TCP zu
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Das MIDI-Decodierermodul wird veröffentlicht. Es bietet Unterstützung für die Wiedergabe von Standard-MIDI-Dateien mithilfe der Jsyn-Bibliothek zur Audiosynthese.
- Fügen Sie
DecoderOutputBuffer.shouldBeSkipped
hinzu, um Ausgabepuffer direkt zu kennzeichnen, die nicht präsentiert werden müssen. Diese Methode wird gegenüberC.BUFFER_FLAG_DECODE_ONLY
bevorzugt, da diese eingestellt wird. - Fügen Sie
Decoder.setOutputStartTimeUs
undSimpleDecoder.isAtLeastOutputStartTimeUs
hinzu, damit Decoder reine Decodierungs-Samples vor der Startzeit verwerfen können. Diese Methode sollte gegenüberBuffer.isDecodeOnly
bevorzugt werden, da diese verworfen wird. - Fehler beim Veröffentlichen des MIDI-Decoder-Artefakts im Maven-Repository behoben. Das Artefakt wird in
media3-exoplayer-midi
umbenannt (#734).
- Leanback-Erweiterung:
- Es wurde ein Fehler behoben, bei dem das Deaktivieren einer Oberfläche zu einem
ArithmeticException
im Leanback-Code führen konnte (#617).
- Es wurde ein Fehler behoben, bei dem das Deaktivieren einer Oberfläche zu einem
- Test-Tools:
TestExoPlayerBuilder
undFakeClock
mit Espresso-UI-Tests und Compose-UI-Tests kompatibel machen Damit wird ein Fehler behoben, bei dem die Wiedergabe während Espresso- oder Compose-Ansichtsinteraktionen nicht deterministisch voranschreitet.
- Entfernen Sie die folgenden veralteten Symbole:
- Entfernen Sie
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
undTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. Verwenden SieComposition.Builder.setHdrMode(int)
und übergeben SieComposition
stattdessen anTransformer.start(Composition, String)
. - Die verworfene Methode
DownloadNotificationHelper.buildProgressNotification
wurde entfernt. Verwenden Sie stattdessen eine nicht verworfene Methode, die den ParameternotMetRequirements
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
17. August 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.1.0
Version 1.1.1
16. August 2023
- Gemeinsame Mediathek:
- Entfernen Sie die versehentlich hinzugefügte
multidex
-Abhängigkeit aus allen Modulen (#499).
- Entfernen Sie die versehentlich hinzugefügte
- ExoPlayer:
- Ein Problem in
PlaybackStatsListener
wurde behoben, bei dem nach dem Löschen der Playlist fälschlicherweisePlaybackStats
erstellt wurden. - Zusätzliche Felder für die Protokollierung von Common Media Client Data (CMCD) hinzugefügt: Streamingformat (sf), Streamtyp (st), Version (v), höchste Bitrate (tb), Objektdauer (d), gemessener Durchsatz (mtp) und Objekttyp (ot) (#8699).
- Ein Problem in
- Audio:
- Es wurde ein Fehler behoben, durch den
Player.getState()
bei der Wiedergabe sehr kurzer Dateien nie inSTATE_ENDED
überging (#538).
- Es wurde ein Fehler behoben, durch den
- Audio-Offload:
- Füge dem Bitstream gemäß RFC 7845 den Ogg-ID-Header und die Kommentar-Header-Seiten für die ausgelagerte Opus-Wiedergabe voran.
- Video:
- H.265/HEVC: Das Parsen von SPS-Informationen zu kurz- und langfristigen Referenzbildern wurde korrigiert.
- Text:
- CEA-608: Die Logik für das Kürzen von Cues wurde so geändert, dass nur sichtbarer Text berücksichtigt wird. Bisher wurden Einrückung und Tabulatorversatz berücksichtigt, wenn die Cue-Länge auf 32 Zeichen begrenzt wurde (was technisch gesehen der Spezifikation entsprach) (#11019).
- IMA-Erweiterung:
- IMA SDK-Version auf 3.30.3 aktualisiert.
- Sitzung:
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie eine Getter-Methode für den Zugriff darauf bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
MediaController.Listener.onCustomLayoutChanged
aufgerufen. Apps, die verschiedenen Media3-Controllern unterschiedliche benutzerdefinierte Layouts senden möchten, können dies inMediaSession.Callback.onConnect
tun. Verwenden Sie dazu einAcceptedResultBuilder
, um dafür zu sorgen, dass das benutzerdefinierte Layout für den Controller verfügbar ist, wenn die Verbindung hergestellt wurde. - Es wurde ein Problem behoben, bei dem
MediaLibraryServiceLegacyStub
einen Fehler an eineResult
gesendet hat, die dies nicht unterstützt hat, was zu einemUnsupportedOperationException
(#78) geführt hat. - Die Art und Weise, wie
PlayerWrapper
eineVolumeProviderCompat
erstellt, wurde korrigiert, indemvolumeControlType
sowohl über alte Befehle (COMMAND_ADJUST_DEVICE_VOLUME
undCOMMAND_SET_DEVICE_VOLUME
) als auch über neue Befehle (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
undCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) ermittelt wird (#554).
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie eine Getter-Methode für den Zugriff darauf bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
Version 1.1.0
5. Juli 2023
- Gemeinsame Mediathek:
- Grund für die Unterdrückung für ungeeignete Audio-Route und „Wiedergabe bei Verfügbarkeit“ hinzufügen Grund für die Unterdrückung „Zu lang“ ändern. (#15).
- Befehle zum Player hinzufügen:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Dem Player wurden überlastete Methoden hinzugefügt, mit denen Nutzer Lautstärke-Flags angeben können:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
Builder
fürDeviceInfo
hinzugefügt und vorhandener Konstruktor eingestellt.- Fügen Sie
DeviceInfo.routingControllerId
hinzu, um die ID des Routing-Controllers für die Remote-Wiedergabe anzugeben. Player.replaceMediaItem(s)
als Tastenkombination zum Hinzufügen und Entfernen von Elementen an derselben Position hinzugefügt (#8046).
- ExoPlayer:
- ExoPlayer darf nur dann die Methoden zur Steuerung der Gerätelautstärke verwenden, wenn dies explizit aktiviert wurde. Mit
ExoPlayer.Builder.setDeviceVolumeControlEnabled
haben Sie Zugriff auf Folgendes:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
undsetDeviceVolume(int, int)
increaseDeviceVolume(int)
undincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
unddecreaseDeviceVolume(int, int)
- Fügen Sie
FilteringMediaSource
hinzu, damit verfügbare Tracktypen aus einemMediaSource
gefiltert werden können. - Unterstützung für die Einbeziehung von Common Media Client Data (CMCD) in die ausgehenden Anfragen der adaptiven Streamingformate DASH, HLS und SmoothStreaming. Die folgenden Felder wurden integriert:
br
,bl
,cid
,rtp
undsid
(#8699). API-Struktur und API-Methoden:- Das CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
, um es zu aktivieren. - Alle Schlüssel sind standardmäßig aktiviert. Überschreiben Sie
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
, um zu filtern, welche Schlüssel protokolliert werden. - Überschreiben Sie
CmcdConfiguration.RequestConfig.getCustomData()
, um das benutzerdefinierte Schlüssel-Logging zu aktivieren.
- Das CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
- Dem Manifest der Hauptdemo wurde eine zusätzliche Aktion hinzugefügt, um das Starten der Demo-App mit einer benutzerdefinierten
*.exolist.json
-Datei zu vereinfachen (#439). - Fügen Sie
ExoPlayer.setVideoEffects()
hinzu, umEffect
während der Videowiedergabe zu verwenden. - Aktualisieren Sie
SampleQueue
, umsourceId
alslong
anstatt alsint
zu speichern. Dadurch ändern sich die Signaturen der öffentlichen MethodenSampleQueue.sourceId
undSampleQueue.peekSourceId
. - Fügen Sie den
LoadControl
-MethodenshouldStartPlayback
undonTracksSelected
Parameter hinzu, mit denen diese Methoden den relevantenMediaPeriod
zugeordnet werden können. - Ändern Sie die Signatur von
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
, indem Sie einen Zeitachsenparameter hinzufügen, der die Zeiträume mit den UIDs enthält, die als Schlüssel in der Karte verwendet werden. Dies ist erforderlich, um Probleme mit der Gleichzeitigkeit bei Livestreams mit mehreren Zeiträumen zu vermeiden. EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
undBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
einstellen. Stattdessen kann die Variante der Methoden ohnemediaTimeOffsetUs
aufgerufen werden. Auch bei den verworfenen Varianten wird der Offset nicht mehr zustartTimeUs
undendTimeUs
derMediaLoadData
-Objekte hinzugefügt, die vom Dispatcher gesendet werden.- Benennen Sie
ExoTrackSelection.blacklist
inexcludeTrack
undisBlacklisted
inisTrackExcluded
um. - Inkonsistentes Verhalten zwischen
ExoPlayer.setMediaItem(s)
undaddMediaItem(s)
bei Aufruf für eine leere Playlist wurde behoben.
- ExoPlayer darf nur dann die Methoden zur Steuerung der Gerätelautstärke verwenden, wenn dies explizit aktiviert wurde. Mit
- Transformer:
- Entfernen Sie
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. Verwenden Sie stattdessenExoPlayerAssetLoader.Factory(MediaSource.Factory)
undTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - Entfernen Sie
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - Es wurde ein Fehler behoben, durch den die Transformation hängen bleiben konnte (was zu einem Muxer-Timeout führte), wenn das Ende des Videostreams zu dem Zeitpunkt signalisiert wurde, als ein Eingabe-Frame noch auf die Verarbeitung wartete.
- Verwenden Sie für Codec-Abfragen
MediaCodecList
anstelle vonfindDecoder/EncoderForFormat
-Dienstprogrammen, um die Unterstützung zu erweitern. - Entferne die B-Frame-Konfiguration in
DefaultEncoderFactory
, da sie auf einigen Geräten nicht funktioniert.
- Entfernen Sie
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
hinzu, das standardmäßig deaktiviert ist. Wenn diese Option aktiviert ist, wird durchDefaultTrackSelector
eine neue Titelauswahl ausgelöst, wenn sich die Renderer-Funktionen geändert haben.
- Fügen Sie
- Extraktoren:
- Audio:
- Ein Fehler wurde behoben, bei dem einige Wiedergaben fehlschlugen, wenn Tunneling aktiviert und
AudioProcessors
aktiv waren, z.B. beim nahtlosen Zuschneiden (#10847). - Opus-Frames in Ogg-Pakete für die direkte Wiedergabe (Offload) einbetten.
- Die aktuelle Position während des Schlafs wird durch Offload-Planung extrapoliert.
- Fügen Sie
Renderer.release()
undAudioSink.release()
hinzu, um die Ressourcen am Ende des Lebenszyklus des Players freizugeben. - Änderungen der Audiofunktionen in
DefaultAudioSink
beobachten Fügen Sie im Konstruktor vonDefaultAudioSink
den erforderlichen Parametercontext
hinzu, mit dem sichDefaultAudioSink
als Listener fürAudioCapabilitiesReceiver
registriert und dieaudioCapabilities
-Property aktualisiert, wenn eine Änderung der Funktionen gemeldet wird. - Änderungen an den Audiofunktionen über ein neues Ereignis in der
AudioSink.Listener
-Schnittstelle und eine neue SchnittstelleRendererCapabilities.Listener
weitergeben, dieonRendererCapabilitiesChanged
-Ereignisse auslöst.onAudioCapabilitiesChanged
- Fügen Sie
ChannelMixingAudioProcessor
hinzu, um Skalierung/Mixing auf Audiochannels anzuwenden. - Füge den neuen int-Wert
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
zuDecoderDiscardReasons
hinzu, um den Audio-Decoder zu verwerfen, wenn der Bypass-Modus nach einer Änderung der Audiofunktionen möglich ist. - Unterstützung für die direkte Wiedergabe von DTS Express und DTS:X wurde hinzugefügt (#335).
- Ein Fehler wurde behoben, bei dem einige Wiedergaben fehlschlugen, wenn Tunneling aktiviert und
- Video:
- Sorgen Sie dafür, dass
MediaCodecVideoRenderer
einVideoSize
mit einer Breite und Höhe von 0 meldet, wenn der Renderer deaktiviert ist.Player.Listener.onVideoSizeChanged
wird entsprechend aufgerufen, wenn sichPlayer.getVideoSize()
ändert. Durch diese Änderung hat die Videogröße von ExoPlayer mitMediaCodecVideoRenderer
eine Breite und Höhe von 0, wennPlayer.getCurrentTracks
keine Videos unterstützt oder die Größe des unterstützten Videotracks noch nicht bestimmt wurde.
- Sorgen Sie dafür, dass
- DRM:
- Die Sichtbarkeit mehrerer interner Methoden in
DefaultDrmSession
wurde reduziert, da sie voraussichtlich nicht von außerhalb des DRM-Pakets aufgerufen werden:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Die Sichtbarkeit mehrerer interner Methoden in
- Muxer:
- Eine neue Muxer-Bibliothek wird hinzugefügt, mit der eine MP4-Containerdatei erstellt werden kann.
- IMA-Erweiterung:
- Aktivieren Sie DASH-Livestreams mit mehreren Zeiträumen für die dynamische Anzeigenbereitstellung. Die aktuelle Implementierung unterstützt noch keine Suche in Livestreams (#10912).
- Es wurde ein Fehler behoben, durch den in Livestreams eine neue Anzeigengruppe eingefügt wurde, weil die berechnete Inhaltsposition in aufeinanderfolgenden Zeitachsen leicht variierte.
- Sitzung:
- Fügen Sie die Hilfsmethode
MediaSession.getControllerForCurrentRequest
hinzu, um Informationen zum Controller abzurufen, der derzeit einePlayer
-Methode aufruft. - Füge
androidx.media3.session.MediaButtonReceiver
hinzu, damit Apps die Wiedergabe mit Media-Schaltflächen-Ereignissen fortsetzen können, die beispielsweise von einem Bluetooth-Headset gesendet werden (#167). - Fügen Sie
MediaSession.Callback.onAddMediaItems
eine Standardimplementierung hinzu, damit angeforderteMediaItems
anPlayer
übergeben werden können, wenn sieLocalConfiguration
haben (z.B. URI) (#282). - Für Android 12 und niedriger werden in der kompakten Benachrichtigungsansicht für Medien standardmäßig Schaltflächen für die Befehle „Zum vorherigen Titel springen“ und „Zum nächsten Titel springen“ hinzugefügt (#410).
- Fügen Sie
MediaSession.Callback.onAddMediaItems
eine Standardimplementierung hinzu, damit angeforderteMediaItems
anPlayer
übergeben werden können, wenn sieLocalConfiguration
haben (z.B. URI) (#282). - Für Android 12 und niedriger werden in der kompakten Benachrichtigungsansicht für Medien standardmäßig Schaltflächen für die Befehle „Zum vorherigen Titel springen“ und „Zum nächsten Titel springen“ hinzugefügt (#410).
- Fügen Sie die Hilfsmethode
- UI:
- Fügen Sie die Util-Methoden
shouldShowPlayButton
undhandlePlayPauseButtonAction
hinzu, um benutzerdefinierte UI-Elemente mit einer Schaltfläche zum Abspielen/Pausieren zu erstellen.
- Fügen Sie die Util-Methoden
- RTSP-Erweiterung:
- DASH-Erweiterung:
- Entfernen Sie den Media-Zeitversatz aus
MediaLoadData.startTimeMs
undMediaLoadData.endTimeMs
für DASH-Streams mit mehreren Zeiträumen. - Ein Fehler wurde behoben, bei dem das erneute Vorbereiten einer Live-DASH-Media-Quelle mit mehreren Zeiträumen einen
IndexOutOfBoundsException
-Fehler verursacht hat (#10838).
- Entfernen Sie den Media-Zeitversatz aus
- HLS-Erweiterung:
- Fügen Sie
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
hinzu, um ein Zeitlimit für den Ladethread festzulegen, bis die Initialisierung vonTimestampAdjuster
abgeschlossen ist. Wenn die Initialisierung nicht vor dem Zeitlimit abgeschlossen wird, wird einPlaybackException
ausgelöst, um zu verhindern, dass die Wiedergabe endlos verzögert wird. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
- Fügen Sie
- Test-Tools:
- Prüfen Sie, ob das URI-Schema in
DataSourceContractTest
unabhängig von der Groß-/Kleinschreibung ist.
- Prüfen Sie, ob das URI-Schema in
- Entfernen Sie die folgenden veralteten Symbole:
- Entfernen Sie
DefaultAudioSink
-Konstruktoren und verwenden Sie stattdessenDefaultAudioSink.Builder
. - Entfernen Sie
HlsMasterPlaylist
und verwenden Sie stattdessenHlsMultivariantPlaylist
. - Entfernen Sie
Player.stop(boolean)
. Verwenden Sie stattdessenPlayer.stop()
undPlayer.clearMediaItems()
(wennreset
gleichtrue
ist). - Zwei verworfene
SimpleCache
-Konstruktoren wurden entfernt. Verwenden Sie stattdessen einen nicht verworfenen Konstruktor, der einDatabaseProvider
-Objekt akzeptiert, um eine bessere Leistung zu erzielen. - Entfernen Sie den
DefaultBandwidthMeter
-Konstruktor und verwenden Sie stattdessenDefaultBandwidthMeter.Builder
. - Entfernen Sie
DefaultDrmSessionManager
-Konstruktoren und verwenden Sie stattdessenDefaultDrmSessionManager.Builder
. - Entfernen Sie zwei verworfene
HttpDataSource.InvalidResponseCodeException
-Konstruktoren und verwenden Sie einen nicht verworfenen Konstruktor, der zusätzliche Felder(cause
,responseBody
) akzeptiert, um die Fehlerprotokollierung zu verbessern. - Entfernen Sie
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
undDownloadHelper.forSmoothStreaming
und verwenden Sie stattdessenDownloadHelper.forMediaItem
. - Entfernen Sie den eingestellten
DownloadService
-Konstruktor und verwenden Sie einen nicht eingestellten Konstruktor, der die Option zum Bereitstellen eineschannelDescriptionResourceId
-Parameters enthält. - Entfernen Sie die eingestellten Stringkonstanten für Zeichensätze (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
undUTF16LE_NAME
) und verwenden Sie stattdessen Kotlin-Zeichensätze aus dem Paketkotlin.text
,java.nio.charset.StandardCharsets
odercom.google.common.base.Charsets
. - Entfernen Sie den eingestellten Konstruktor
WorkManagerScheduler
und verwenden Sie stattdessen einen nicht eingestellten Konstruktor, der die Option bietet, einenContext
-Parameter anzugeben. - Entfernen Sie die verworfenen Methoden
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
undcreateSampleFormat
, die zum Instanziieren derFormat
-Klasse verwendet wurden. Verwenden Sie stattdessenFormat.Builder
, um Instanzen vonFormat
zu erstellen. - Entfernen Sie die verworfenen Methoden
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
undcopyWithVideoSize
und verwenden Sie stattdessenFormat.buildUpon()
und Setter-Methoden. - Entfernen Sie das verworfene
ExoPlayer.retry()
und verwenden Sie stattdessenprepare()
. - Entfernen Sie den verworfenen
DefaultTrackSelector
-Konstruktor ohne Argumente und verwenden Sie stattdessenDefaultTrackSelector(Context)
. - Entfernen Sie den verworfenen Konstruktor
OfflineLicenseHelper
und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Entfernen Sie den eingestellten Konstruktor
DownloadManager
und verwenden Sie stattdessen den Konstruktor, der einExecutor
akzeptiert. - Entfernen Sie die verworfenen
Cue
-Konstruktoren und verwenden Sie stattdessenCue.Builder
. - Entfernen Sie den verworfenen Konstruktor
OfflineLicenseHelper
und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Vier nicht mehr weitergeführte
AnalyticsListener
-Methoden entfernen:onDecoderEnabled
. Verwenden Sie stattdessenonAudioEnabled
und/oderonVideoEnabled
.onDecoderInitialized
. Verwenden Sie stattdessenonAudioDecoderInitialized
und/oderonVideoDecoderInitialized
.onDecoderInputFormatChanged
. Verwenden Sie stattdessenonAudioInputFormatChanged
und/oderonVideoInputFormatChanged
.onDecoderDisabled
. Verwenden Sie stattdessenonAudioDisabled
und/oderonVideoDisabled
.
- Entfernen Sie die verworfenen
Player.Listener.onSeekProcessed
undAnalyticsListener.onSeekProcessed
und verwenden Sie stattdessenonPositionDiscontinuity
mitDISCONTINUITY_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.PlaybackProperties
und verwenden Sie stattdessenMediaItem.LocalConfiguration
. Das nicht mehr unterstützte FeldMediaItem.playbackProperties
hat 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
wird veröffentlicht.
Version 1.0.2 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.7.
Diese Version enthält die folgenden Änderungen seit der Version 1.0.1:
- Core-Bibliothek:
- Fügen Sie
Buffer.isLastSample()
hinzu, um anzugeben, obBuffer
das FlagC.BUFFER_FLAG_LAST_SAMPLE
enthält. - Es wurde ein Problem behoben, bei dem der letzte Frame möglicherweise nicht gerendert wurde, wenn das letzte Sample mit Frames aus der Warteschlange entfernt wurde, ohne das Sample „end of stream“ (Ende des Streams) zu lesen. (#11079).
- Fügen Sie
- Extraktoren:
- Die Verarbeitung von H.265-SPS in MPEG-TS-Dateien wurde korrigiert, indem die bereits von RTSP- und MP4-Extraktoren verwendete Parsing-Logik wiederverwendet wurde (#303).
- Text:
- SSA: Unterstützung für UTF-16-Dateien wurde hinzugefügt, wenn sie mit einer Bytereihenfolge-Marke (Byte Order Mark, BOM) beginnen (#319).
- Sitzung:
- Ein Problem wurde behoben, bei dem
MediaController
seine verfügbaren Befehle nicht aktualisiert hat, wenn es mit einem altenMediaSessionCompat
verbunden war, das seine Aktionen aktualisiert hat. - Es wurde ein Fehler behoben, der verhinderte, dass
MediaLibraryService
für einen Aufruf von der System-UI anCallback.onGetLibraryRoot
mitparams.isRecent == true
auf API 30 (#355) „null“ zurückgab. - Speicherleck von
MediaSessionService
oderMediaLibraryService
behoben (#346). - Ein Fehler wurde behoben, bei dem eine kombinierte
Timeline
- und Positionsaktualisierung in einemMediaSession
dazu führen konnte, dass einMediaController
eineIllegalStateException
auslöste.
- Ein Problem wurde behoben, bei dem
Version 1.0.1
18. April 2023
androidx.media3:media3-*:1.0.1
wird veröffentlicht.
Version 1.0.1 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.6.
- Core-Bibliothek:
- Überschreibung des Ziel-Livestreams beim Suchen zur Standardposition zurücksetzen (#11051).
- Es wurde ein Fehler behoben, durch den die Wiedergabe hängen blieb, wenn leere Beispielstreams in den Medien vorhanden waren.
- Sitzung:
- Ein Fehler wurde behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
MediaSessionCompat
veröffentlicht wurden, zu einer Ausnahme inMediaController
führten (#290). - Die Weiterleitung von
MediaSession.broadcastCustomCommand
an das alteMediaControllerCompat.Callback.onSessionEvent
wurde hinzugefügt (#293). - Ein Fehler wurde behoben, bei dem durch Aufrufen von
MediaSession.setPlayer
die verfügbaren Befehle nicht aktualisiert wurden. - Ein Problem wurde behoben, bei dem
TrackSelectionOverride
-Instanzen, die von einemMediaController
gesendet wurden, ignoriert wurden, wenn sie auf eine Gruppe mitFormat.metadata
verwiesen haben (#296). - Problem beheben, bei dem
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
verfügbar sein muss, um über die alteMediaSessionCompat
auf Metadaten zuzugreifen. - Ein Problem wurde behoben, bei dem
MediaSession
-Instanzen in einem Hintergrundthread Abstürze verursacht haben, wenn sie inMediaSessionService
verwendet wurden (#318). - Ein Problem wurde behoben, bei dem ein Media-Button-Receiver von der Bibliothek deklariert wurde, ohne dass die App dies beabsichtigt hatte (#314).
- Ein Fehler wurde behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
- DASH:
- Die Verarbeitung leerer Segmentzeitachsen wurde korrigiert (#11014).
- RTSP:
- Versuchen Sie es noch einmal mit TCP, wenn die RTSP-Einrichtung mit UDP mit dem RTSP-Fehler 461 „UnsupportedTransport“ (#11069) fehlschlägt.
Version 1.0.0
22. März 2023
androidx.media3:media3-*:1.0.0
wird veröffentlicht.
Version 1.0.0 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.5.
Seit Version 1.0.0-rc02 hat sich nichts geändert.
Version 1.0.0-rc02
2. März 2023
androidx.media3:media3-*:1.0.0-rc02
wird veröffentlicht.
Version 1.0.0-rc02 enthält diese Commits.
Dieser Release entspricht dem ExoPlayer 2.18.4-Release.
- Core-Bibliothek:
- Downloads:
- Die maximale Differenz der Startzeit von zwei Segmenten, die zusammengeführt werden sollen, kann in
SegmentDownloader
und Unterklassen konfiguriert werden (#248).
- Die maximale Differenz der Startzeit von zwei Segmenten, die zusammengeführt werden sollen, kann in
- Audio:
- Problem mit der lückenlosen MP3-Wiedergabe auf Samsung-Geräten behoben (#8594).
- Ein Fehler wurde behoben, durch den Wiedergabegeschwindigkeiten, die unmittelbar nach dem Deaktivieren von Audio festgelegt wurden, möglicherweise durch eine vorherige Geschwindigkeitsänderung überschrieben wurden (#10882).
- Video:
- HEVC-HDR10-Format wird
HEVCProfileMain10HDR10
anstelle vonHEVCProfileMain10
zugeordnet. - Es wurde eine Problemumgehung für ein Geräteproblem auf dem Chromecast mit Google TV und dem Lenovo M10 FHD Plus hinzugefügt, das dazu führt, dass AVC-Streams mit 60 fps als nicht unterstützt markiert werden (#10898).
- Probleme mit der Frame-Ausgabe bei der Wiedergabe von Medien mit einer Framerate, die viel höher als die Aktualisierungsrate des Displays ist, wurden behoben.
- HEVC-HDR10-Format wird
- Besetzung:
- Problem mit vorübergehendem
STATE_IDLE
beim Übergang zwischen Media-Elementen behoben (#245).
- Problem mit vorübergehendem
- RTSP:
- Die beim Parsen ungültiger RTSP-Describe-Antwortnachrichten ausgelöste IllegalArgumentException wird abgefangen (#10971).
- Sitzung:
- Es wurde ein Fehler behoben, bei dem die Schaltfläche „Wiedergabe/Pause“ in Benachrichtigungen nicht mit dem Playerstatus aktualisiert wurde (#192).
- IMA-Erweiterung:
- Ein Fehler wurde behoben, der verhinderte, dass DAI-Streams ohne Anzeigen gestartet wurden, da das erste (und im Fall ohne Anzeigen das einzige)
LOADED
-Ereignis nicht empfangen wurde.
- Ein Fehler wurde behoben, der verhinderte, dass DAI-Streams ohne Anzeigen gestartet wurden, da das erste (und im Fall ohne Anzeigen das einzige)
Version 1.0.0-rc01
16. Februar 2023
androidx.media3:media3-*:1.0.0-rc01
wird veröffentlicht.
Version 1.0.0-rc01 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.3.
- Core-Bibliothek:
- Die Decoder-Reihenfolgelogik des Renderers wird so angepasst, dass die Einstellungen von
MediaCodecSelector
eingehalten werden, auch wenn ein Decoder meldet, dass er die Medien möglicherweise nicht leistungsstark wiedergeben kann. Beispielsweise wird bei der Standardauswahl ein Hardware-Decoder mit nur funktionaler Unterstützung einem Software-Decoder vorgezogen, der das Format vollständig unterstützt (#10604). - Fügen Sie
ExoPlayer.Builder.setPlaybackLooper
hinzu, um einen vorhandenen Wiedergabethread für eine neue ExoPlayer-Instanz festzulegen. - Download-Manager-Helfer können gelöscht werden (#10776).
- Fügen Sie dem Parameter
BasePlayer.seekTo
den Befehl hinzu, der für die Suche verwendet wurde. - Verwenden Sie das Design beim Laden von Drawables unter API 21 und höher (#220).
ConcatenatingMediaSource2
hinzugefügt, mit der mehrere Media-Elemente in einem einzigen Fenster kombiniert werden können (#247).
- Die Decoder-Reihenfolgelogik des Renderers wird so angepasst, dass die Einstellungen von
- Extraktoren:
- Löst beim Parsen von „trak“-Atomen einen
ParserException
anstelle einesNullPointerException
aus, wenn in der Beispieltabellenbox (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt. - Behebung eines Problems, bei dem Samples beim direkten Suchen nach einem Synchronisationsframe in fMP4 nicht korrekt übersprungen wurden (#10941).
- Löst beim Parsen von „trak“-Atomen einen
- Audio:
- Verwende die Bitrate des komprimierten Audioformats, um die Mindestpuffergröße für
AudioTrack
bei direkter Wiedergabe (Passthrough) zu berechnen.
- Verwende die Bitrate des komprimierten Audioformats, um die Mindestpuffergröße für
- Text:
- Es wurde ein ungültiger (negativer) Index an
Subtitle.getEventTime
übergeben, wenn eine Untertiteldatei keine Cues enthält.TextRenderer
- SubRip: Unterstützung für UTF-16-Dateien hinzugefügt, wenn sie mit einer Byte Order Mark beginnen.
- Es wurde ein ungültiger (negativer) Index an
- Metadaten:
- Mehrere durch Null getrennte Werte aus ID3-Frames parsen, wie in ID3 v2.4 zulässig.
- Fügen Sie
MediaMetadata.mediaType
hinzu, um den Inhaltstyp oder den Typ des Ordners anzugeben, der in den Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordner wird im nächsten Release eingestellt.
- DASH:
- Vollständiges Parsen für Bildanpassungssätze wurde hinzugefügt, einschließlich der Anzahl der Kacheln (#3752).
- UI:
- Beheben Sie das Problem mit dem eingestellten
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
, damit Änderungen an der Sichtbarkeit an den registrierten Listener übergeben werden (#229). - Die Reihenfolge der Steuerelemente für den mittleren Player in
PlayerView
wurde korrigiert, wenn ein RTL-Layout (Right-to-Left, von rechts nach links) verwendet wird (#227).
- Beheben Sie das Problem mit dem eingestellten
- Sitzung:
- Fügen Sie die abstrakte Klasse
SimpleBasePlayer
hinzu, um diePlayer
-Schnittstelle für benutzerdefinierte Player zu implementieren. - Hilfsmethode zum Konvertieren des Plattform-Sitzungstokens in Media3 hinzugefügt
SessionToken
(#171). - Verwende
onMediaMetadataChanged
, um Updates der Media-Session der Plattform auszulösen (#219). - Fügen Sie die Mediensitzung als Argument von
getMediaButtons()
desDefaultMediaNotificationProvider
hinzu und verwenden Sie zur besseren Übersicht unveränderliche Listen (#216). onSetMediaItems
-Callback-Listener hinzugefügt, um die Möglichkeit zu bieten, die ListeMediaItem
, den Startindex und die Position nach Sitzung zu ändern/festzulegen, bevor sie im Player festgelegt werden (#156).- Doppeltippen für Media-Schaltflächenereignisse, die nicht über Bluetooth gesendet werden, vermeiden (#233).
QueueTimeline
wurde robuster gemacht, falls ein fragwürdiger alter Sitzungsstatus vorliegt (#241).
- Fügen Sie die abstrakte Klasse
- Metadaten:
- Mehrere durch Null getrennte Werte aus ID3-Frames parsen, wie in ID3 v2.4 zulässig.
- Fügen Sie
MediaMetadata.mediaType
hinzu, um den Inhaltstyp oder den Typ des Ordners anzugeben, der in den Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordner wird im nächsten Release eingestellt.
- Cast-Erweiterung:
- Die Cast SDK-Version wurde auf 21.2.0 aktualisiert.
- IMA-Erweiterung:
- Entfernen Sie den Player-Listener von
ImaServerSideAdInsertionMediaSource
im Anwendungs-Thread, um Threading-Probleme zu vermeiden. - Fügen Sie dem
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
das AttributfocusSkipButtonWhenAvailable
hinzu, um die Skip-Schaltfläche auf TV-Geräten zu fokussieren, und legen Sie es standardmäßig auf „true“ fest. - Fügen Sie der
ImaServerSideAdInsertionMediaSource.AdsLoader
eine MethodefocusSkipButton()
hinzu, um den Fokus programmatisch auf die Schaltfläche „Überspringen“ zu legen. - IMA SDK-Version auf 3.29.0 aktualisiert.
- Entfernen Sie den Player-Listener von
- Demo-App:
- Benachrichtigungsberechtigung für Downloadbenachrichtigungen zur Laufzeit anfordern (#10884).
Version 1.0.0-beta03
22. November 2022
androidx.media3:media3-*:1.0.0-beta03
wird veröffentlicht.
Version 1.0.0-beta03 enthält diese Commits.
Diese Version entspricht der ExoPlayer-Version 2.18.2.
- Core-Bibliothek:
- Fügen Sie
ExoPlayer.isTunnelingEnabled
hinzu, um zu prüfen, ob Tunneling für die aktuell ausgewählten Tracks aktiviert ist (#2518). WrappingMediaSource
wurde hinzugefügt, um das Umbrechen eines einzelnenMediaSource
zu vereinfachen (#7279).- Verwerfe den Backbuffer, bevor die Wiedergabe aufgrund von zu wenig verfügbarem Arbeitsspeicher hängen bleibt.
- Schließe den Tracing-Block „doSomeWork“, wenn die Auslagerung aktiviert ist.
- Problem mit der Sitzungsanalyse bei schnellen Suchvorgängen in
PlaybackStatsListener
behoben (#180). - Fehlenden
onMediaItemTransition
-Callback beim Aufrufen vonseekToNext
oderseekToPrevious
in einer Playlist mit einem einzelnen Element senden (#10667). - Fügen Sie
Player.getSurfaceSize
hinzu, um die Größe der Oberfläche zurückzugeben, auf der das Video gerendert wird. - Fehler behoben, bei dem das Entfernen von Listenern während der Player-Freigabe zu einem
IllegalStateException
führen konnte (#10758).
- Fügen Sie
- Build:
- Mindestversion von
compileSdkVersion
erzwingen, um Kompilierungsfehler zu vermeiden (#10684). - Veröffentlichen Sie den Block nicht, wenn er in einem anderen Gradle-Build enthalten ist.
- Mindestversion von
- Titelauswahl:
- Andere Tracks als Dolby Vision bevorzugen, wenn das Display diese Technologie nicht unterstützt. (#8944).
- Downloads:
- Potenzielle Endlosschleife in
ProgressiveDownloader
behoben, die durch gleichzeitiges Herunterladen und Abspielen mit demselbenPriorityTaskManager
verursacht wurde (#10570). - Downloadbenachrichtigung sofort anzeigen lassen (#183).
- Die Anzahl paralleler Downloads wird auf 1 begrenzt, um die Erstellung zu vieler Threads zu vermeiden (#10458).
- Potenzielle Endlosschleife in
- Video:
- Verwende einen alternativen Decoder für Dolby Vision, wenn das Display diese Funktion nicht unterstützt. (#9794).
- Audio:
- Verwenden Sie
SingleThreadExecutor
, umAudioTrack
-Instanzen freizugeben, damit beim gleichzeitigen Freigeben mehrerer Player keine OutOfMemory-Fehler auftreten (#10057). - Fügt
AudioOffloadListener.onExperimentalOffloadedPlayback
für den Offload-Status von AudioTrack hinzu. (#134). - Machen Sie
AudioTrackBufferSizeProvider
zu einer öffentlichen Schnittstelle. - Füge
ExoPlayer.setPreferredAudioDevice
hinzu, um das bevorzugte Audioausgabegerät festzulegen (#135). - Benennen Sie
androidx.media3.exoplayer.audio.AudioProcessor
inandroidx.media3.common.audio.AudioProcessor
um. - 8‑Kanal- und 12‑Kanal-Audio auf allen Android-Versionen den Kanalmasken 7.1 bzw. 7.1.4 zuordnen (#10701).
- Verwenden Sie
- Metadaten:
MetadataRenderer
kann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstellen Sie eine Instanz mitMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
, um anzugeben, ob der Renderer Metadaten frühzeitig oder synchron mit der Position des Players ausgeben soll.
- DRM:
- Umgehen eines Fehlers in der ClearKey-Implementierung von Android 13, der eine nicht leere, aber ungültige Lizenz-URL zurückgibt.
- Der
setMediaDrmSession failed: session not opened
-Fehler beim Wechseln zwischen DRM-Schemata in einer Playlist (z.B. von Widevine zu ClearKey) wurde behoben.
- Text:
- CEA-608: Prüfen Sie, ob Dienstumschaltbefehle in Feld 2 richtig verarbeitet werden (#10666).
- DASH:
EventStream.presentationTimeOffset
aus Manifesten parsen (#10460)
- UI:
- Verwenden Sie die aktuellen Überschreibungen des Players als Voreinstellung in
TrackSelectionDialogBuilder
(#10429).
- Verwenden Sie die aktuellen Überschreibungen des Players als Voreinstellung in
- Sitzung:
- Achten Sie darauf, dass Befehle immer in der richtigen Reihenfolge ausgeführt werden, auch wenn für einige eine asynchrone Auflösung erforderlich ist (#85).
- Fügen Sie
DefaultMediaNotificationProvider.Builder
hinzu, umDefaultMediaNotificationProvider
-Instanzen zu erstellen. Der Builder kann die Benachrichtigungs-ID, die Benachrichtigungskanal-ID und den vom Anbieter verwendeten Benachrichtigungskanalnamen konfigurieren. Fügen Sie außerdem die MethodeDefaultMediaNotificationProvider.setSmallIcon(int)
hinzu, um das kleine Symbol für Benachrichtigungen festzulegen. (#104). - Befehle, die vor
MediaController.release()
gesendet werden, dürfen nicht verloren gehen (#99). SimpleBitmapLoader
kann Bitmaps ausfile://
-URIs laden (#108).- Behebe die Assertion, die verhindert, dass
MediaController
in einem Zeitraum über eine Anzeige hinweg sucht (#122). - Wenn die Wiedergabe endet, wird die
MediaSessionService
im Vordergrund beendet und eine Benachrichtigung wird angezeigt, um die Wiedergabe des zuletzt wiedergegebenen Media-Elements neu zu starten (#112). - Starte keinen Dienst im Vordergrund mit einem ausstehenden Intent zum Pausieren (#167).
- Blenden Sie das Symbol, das mit der von
DefaultNotificationProvider
erstellten Benachrichtigung verknüpft ist, unter API 26 und API 27 manuell aus. Unter API 28 und höher wird das Symbol automatisch ausgeblendet (#131). - Fehler behoben, bei dem eine zweite Binder-Verbindung von einer alten MediaSession zu einem Media3-MediaController IllegalStateExceptions verursacht hat (#49).
- RTSP:
- IMA:
- Es wurde ein Zeitlimit für das Laden von Anzeigeninformationen hinzugefügt, um Fälle zu berücksichtigen, in denen das IMA SDK beim Laden einer Anzeige hängen bleibt (#10510).
- Das Überspringen von Mid-Roll-Anzeigen beim Vorspulen zum Ende des Inhalts wird verhindert. (#10685)
- Die Fensterdauer für Livestreams mit serverseitig eingefügten Anzeigen, z. B. IMA DAI, wird korrekt berechnet (#10764).
- FFmpeg-Erweiterung:
- Es wurden neue erforderliche Flags hinzugefügt, um FFmpeg-Bibliotheken mit NDK 23.1.7779620 und höher zu verknüpfen (#9933).
- AV1-Erweiterung:
- Die CMake-Version wurde aktualisiert, um Inkompatibilitäten mit den neuesten Android Studio-Releases zu vermeiden (#9933).
- Cast-Erweiterung:
- Implementiere
getDeviceInfo()
, umCastPlayer
identifizieren zu können, wenn die Wiedergabe mit einemMediaController
gesteuert wird (#142).
- Implementiere
- Transformer:
- Es wurde ein Muxer-Watchdog-Timer hinzugefügt, um zu erkennen, wenn das Generieren einer Ausgabeprobe zu langsam ist.
- Entfernen Sie die folgenden veralteten Symbole:
- Entfernen Sie
Transformer.Builder.setOutputMimeType(String)
. Diese Funktion wurde entfernt. Der MIME-Typ ist immer MP4, wenn der Standard-Muxer verwendet wird.
- Entfernen Sie
Version 1.0.0-beta02
21. Juli 2022
androidx.media3:media3-*:1.0.0-beta02
wird veröffentlicht.
Version 1.0.0-beta02 enthält diese Commits.
Dieser Release entspricht ExoPlayer 2.18.1.
- Core-Bibliothek:
- Achten Sie darauf, dass durch das Ersetzen von
ShuffleOrder
durchExoPlayer.setShuffleOrder
ein Aufruf vonPlayer.Listener#onTimelineChanged
mitreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
erfolgt (#9889). - Bei progressiven Media werden nur ausgewählte Tracks in der gepufferten Position berücksichtigt. (#10361)
- Benutzerdefinierte Logger für die gesamte ExoPlayer-Logausgabe zulassen (#9752).
- Die Implementierung von
setDataSourceFactory
inDefaultMediaSourceFactory
wurde korrigiert, da sie in einigen Fällen nicht funktionierte (#116).
- Achten Sie darauf, dass durch das Ersetzen von
- Extraktoren:
- DASH:
- ClearKey-Lizenz-URL aus Manifesten parsen (#10246).
- UI:
- Achte darauf, dass TalkBack die aktuell aktive Geschwindigkeitsoption im Menü für die Wiedergabesteuerung ansagt (#10298).
- RTSP:
- Verarbeitung fragmentierter VP8-Pakete hinzugefügt (#110).
- Leanback-Erweiterung:
playWhenReady
-Änderungen inLeanbackAdapter
anhören (10420)
- Besetzung:
Version 1.0.0-beta01
16. Juni 2022
androidx.media3:media3-*:1.0.0-beta01
wird veröffentlicht.
Version 1.0.0-beta01 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.18.0.
- Core-Bibliothek:
- Aktivieren Sie die Unterstützung für die Android-Plattformdiagnose über
MediaMetricsManager
. ExoPlayer leitet Wiedergabeereignisse und Leistungsdaten an die Plattform weiter, was dazu beiträgt, Informationen zur Systemleistung und zum Debugging auf dem Gerät bereitzustellen. Diese Daten können auch von Google erhoben werden, wenn der Nutzer des Geräts die Weitergabe von Nutzungs- und Diagnosedaten aktiviert hat. Apps können die Teilnahme an der Plattformdiagnose für ExoPlayer mitExoPlayer.Builder.setUsePlatformDiagnostics(false)
deaktivieren. - Es wurde ein Fehler behoben, durch den Tracks bei Verwendung von
MergingMediaSource
zu oft zurückgesetzt wurden, z. B. beim Sideloading von Untertiteln und beim Ändern der ausgewählten Untertitel während der Wiedergabe (#10248). - Die Erkennung des 5G-NSA-Netzwerktyps auf API 29 und 30 wird eingestellt. Bei diesen Wiedergaben wird von einem 4G-Netzwerk ausgegangen.
- Das Übergeben von
null
anMediaSource.Factory.setDrmSessionManagerProvider
undMediaSource.Factory.setLoadErrorHandlingPolicy
nicht zulassen. Instanzen vonDefaultDrmSessionManagerProvider
undDefaultLoadErrorHandlingPolicy
können bei Bedarf explizit übergeben werden. - Fügen Sie
MediaItem.RequestMetadata
hinzu, um Metadaten darzustellen, die zum Abspielen von Media erforderlich sind, wenn der genaueLocalConfiguration
nicht bekannt ist. Entferne auchMediaMetadata.mediaUrl
, da es jetzt inRequestMetadata
enthalten ist. - Fügen Sie
Player.Command.COMMAND_SET_MEDIA_ITEM
hinzu, damit Spieler ein einzelnes Element festlegen können.
- Aktivieren Sie die Unterstützung für die Android-Plattformdiagnose über
- Titelauswahl:
- Fasse die Klasse
TrackSelectionOverrides
inTrackSelectionParameters
zusammen und stufeTrackSelectionOverride
in eine Klasse der obersten Ebene hoch. - Benennen Sie
TracksInfo
inTracks
undTracksInfo.TrackGroupInfo
inTracks.Group
um.Player.getCurrentTracksInfo
undPlayer.Listener.onTracksInfoChanged
wurden inPlayer.getCurrentTracks
undPlayer.Listener.onTracksChanged
umbenannt. Dazu gehört auch, den MethodennamenPlayer.Listener.onTracksChanged
wieder zu verwenden, aber mit anderen Parametertypen. - Ändern Sie
DefaultTrackSelector.buildUponParameters
undDefaultTrackSelector.Parameters.buildUpon
so, dassDefaultTrackSelector.Parameters.Builder
anstelle vonDefaultTrackSelector.ParametersBuilder
zurückgegeben wird. - Fügen Sie
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
hinzu, das standardmäßig aktiviert ist. Wenn diese Option aktiviert ist, werden fürDefaultTrackSelector
bevorzugt Audiotracks verwendet, deren Kanalanzahl die Ausgabefunktionen des Geräts nicht überschreitet. Auf Mobilgeräten wird beiDefaultTrackSelector
Stereo-/Mono-Audioformaten gegenüber Mehrkanal-Audioformaten der Vorzug gegeben, es sei denn, das Mehrkanalformat kann räumlich wiedergegeben werden (Android 12L+) oder ist ein Dolby-Surround-Sound-Format. Außerdem wird auf Geräten, die die räumliche Audioausgabe unterstützen, mitDefaultTrackSelector
nach Änderungen an den Spatializer-Eigenschaften gesucht und bei Änderungen eine neue Titelauswahl ausgelöst. Geräte mit demtelevision
-UI-Modus sind von diesen Einschränkungen ausgeschlossen und das Format mit der höchsten Anzahl an Kanälen wird bevorzugt. Damit diese Funktion aktiviert werden kann, muss dieDefaultTrackSelector
-Instanz mit einemContext
erstellt werden.
- Fasse die Klasse
- Video:
- Benennen Sie
DummySurface
inPlaceholderSurface
um. - AV1-Unterstützung für
MediaCodecVideoRenderer.getCodecMaxInputSize
hinzugefügt
- Benennen Sie
- Audio:
- Der LG AC3-Audiodecoder wirbt mit einem nicht standardmäßigen MIME-Typ.
- Ändern Sie den Rückgabetyp von
AudioAttributes.getAudioAttributesV21()
vonandroid.media.AudioAttributes
in eine neue Wrapper-KlasseAudioAttributesV21
, um eine langsame ART-Überprüfung bei API < 21 zu verhindern. - Fragen Sie die Plattform ab (API 29+) oder gehen Sie von der Anzahl der Audio-Encodierungskanäle für die Audio-Passthrough-Funktion aus, wenn die Anzahl der Audio-Kanäle des Formats nicht festgelegt ist. Dies ist bei der HLS-Chunkless-Vorbereitung (10204) der Fall.
- Konfiguriere
AudioTrack
mit der KanalmaskeAudioFormat.CHANNEL_OUT_7POINT1POINT4
, wenn der Decoder 12‑Kanal-PCM-Audio ausgibt (#10322.
- DRM
- Die DRM-Sitzung wird beim Suchen unmittelbar nach einer Formatänderung immer korrekt aktualisiert (10274).
- Text:
- Ändern Sie
Player.getCurrentCues()
so, dassCueGroup
anstelle vonList<Cue>
zurückgegeben wird. - SSA: Unterstützung der Stileinstellung
OutlineColour
beiBorderStyle == 3
(d.h.OutlineColour
legt den Hintergrund des Cues fest) (#8435). - CEA-708: Daten in mehrere Serviceblöcke parsen und Blöcke ignorieren, die nicht mit der aktuell ausgewählten Servicenummer verknüpft sind.
- Entfernen Sie
RawCcExtractor
, das nur für ein Google-internes Untertitelformat verwendet wurde.
- Ändern Sie
- Extraktoren:
- UI:
- Die Zustellung von Ereignissen an
OnClickListener
, die inPlayerView
festgelegt sind, wird korrigiert, wennuseController=false
(#9605). Außerdem wurde die Übermittlung von Ereignissen anOnLongClickListener
für alle Ansichtskonfigurationen korrigiert. - Es wurde ein Problem behoben, bei dem eine Folge von Touch-Ereignissen, die die Grenzen von
PlayerView
vorACTION_UP
verlassen, fälschlicherweise als Klick behandelt wurden (#9861). - Das Problem mit der Bedienungshilfe
PlayerView
wurde behoben. Durch Tippen wird jetzt nicht mehr die Wiedergabe umgeschaltet, sondern die Steuerelemente werden ausgeblendet (#8627). - Schreibe
TrackSelectionView
undTrackSelectionDialogBuilder
so um, dass sie mit derPlayer
-Schnittstelle anstelle vonExoPlayer
funktionieren. Dadurch können die Ansichten mit anderenPlayer
-Implementierungen verwendet werden und die Abhängigkeit des UI-Moduls vom ExoPlayer-Modul wird entfernt. Dies ist eine funktionsgefährdende Änderung. - Erzwungene Text-Tracks werden nicht in der
PlayerView
-Track-Auswahl angezeigt und ein geeigneter erzwungener Text-Track bleibt ausgewählt, wenn „Keine“ ausgewählt ist (#9432).
- Die Zustellung von Ereignissen an
- DASH:
- Parsen der Kanalanzahl aus DTS-
AudioChannelConfiguration
-Elementen. Dadurch wird das Audio-Passthrough für DTS-Streams wieder aktiviert (#10159). - Das Übergeben von
null
anDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
nicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Parsen der Kanalanzahl aus DTS-
- HLS:
- Wenn das Attribut „CODECS“ der Playlist den Audio-Codec nicht enthält (#10065), wird auf die Vorbereitung in Chunks zurückgegriffen.
- Die Übergabe von
null
anHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
undHlsMediaSource.Factory.setPlaylistTrackerFactory
nicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
oder ein Verweis aufDefaultHlsPlaylistTracker.FACTORY
können bei Bedarf explizit übergeben werden.
- Smooth Streaming:
- Das Übergeben von
null
anSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
nicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Das Übergeben von
- RTSP:
- RTP-Reader für H263 hinzugefügt (#63).
- RTP-Leser für MPEG4 hinzufügen (#35).
- RTP-Leser für HEVC hinzugefügt (#36).
- RTP-Reader für AMR hinzufügen. Derzeit werden nur Mono-Channel-AMR-Streams ohne Interleaving unterstützt. Die zusammengesetzte AMR-RTP-Nutzlast wird nicht unterstützt. (#46)
- RTP-Leser für VP8 hinzufügen (#47).
- RTP-Leser für WAV hinzufügen (#56).
- RTSP-Header für die grundlegende Autorisierung korrigieren. (#9544).
- Die Prüfung von Pflichtfeldern im SDP wird eingestellt, da ExoPlayer sie nicht benötigt (#10049).
- Es wird eine geprüfte Ausnahme ausgelöst, wenn die RTSP-Zeitangabe geparst wird (#10165).
- RTP-Leser für VP9 hinzugefügt (#47).
- RTP-Reader für OPUS hinzufügen (#53).
- Datenquellen:
- Benennen Sie
DummyDataSource
inPlaceholderDataSource
um. - Problemumgehung für die Unterbrechungsbehandlung von OkHttp.
- Benennen Sie
- Sitzung:
- Ersetzen Sie
MediaSession.MediaItemFiller
durchMediaSession.Callback.onAddMediaItems
, um die asynchrone Auflösung von Anfragen zu ermöglichen. - Unterstützung von
setMediaItems(s)
-Methoden, wennMediaController
eine Verbindung zu einer alten Mediensitzung herstellt. - Entfernen Sie
MediaController.setMediaUri
undMediaSession.Callback.onSetMediaUri
. Dieselbe Funktionalität kann mitMediaController.setMediaItem
undMediaSession.Callback.onAddMediaItems
erreicht werden. - Leite alte
MediaController
-Anrufe zur Medienwiedergabe anMediaSession.Callback.onAddMediaItems
statt anonSetMediaUri
weiter. - Fügen Sie
MediaNotification.Provider
undDefaultMediaNotificationProvider
hinzu, um die Benachrichtigung anzupassen. - Fügen Sie
BitmapLoader
undSimpleBitmapLoader
zum Herunterladen von Artwork-Bildern hinzu. - Fügen Sie
MediaSession.setCustomLayout()
hinzu, um die Abwärtskompatibilität mit der alten Sitzung zu gewährleisten. - Fügen Sie
MediaSession.setSessionExtras()
hinzu, um die Funktionsparität mit der alten Sitzung zu erreichen. - Benenne
MediaSession.MediaSessionCallback
inMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
undMediaSession.Builder.setSessionCallback
insetCallback
um. - NPE in
MediaControllerImplLegacy
behoben. (#59) - Aktualisieren der Informationen zur Sitzungsposition in der Zeitachse bei Änderungen(#51).
- NPE in
MediaControllerImplBase
nach dem Loslassen des Controllers behoben (#74).
- Ersetzen Sie
- Anzeigenwiedergabe / IMA:
- Die Abrufrate für Anzeigen wird von 100 ms auf 200 ms gesenkt, um den Empfehlungen des Media Rating Council (MRC) zu entsprechen.
- FFmpeg-Erweiterung:
- Aktualisieren Sie die CMake-Version auf
3.21.0+
, um einen CMake-Fehler zu vermeiden, der dazu führt, dass die Gradle-Synchronisierung von Android Studio fehlschlägt (#9933).
- Aktualisieren Sie die CMake-Version auf
- Entfernen Sie die folgenden veralteten Symbole:
- Entfernen Sie
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. Verwenden Sie stattdessenPlayer.Listener.onTracksChanged(Tracks)
. - Entfernen Sie
Player.getCurrentTrackGroups
undPlayer.getCurrentTrackSelections
. Verwenden Sie stattdessenPlayer.getCurrentTracks
. Sie könnenExoPlayer.getCurrentTrackGroups
undExoPlayer.getCurrentTrackSelections
weiterhin verwenden, obwohl diese Methoden weiterhin als veraltet gelten. - Entfernen Sie die Konstanten
DownloadHelper
,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
undDEFAULT_TRACK_SELECTOR_PARAMETERS
. Verwenden Sie nach MöglichkeitgetDefaultTrackSelectorParameters(Context)
und andernfallsDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Entfernen Sie den Konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Verwenden Sie stattdessenDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Entfernen Sie
Transformer.Builder.setContext
. DieContext
sollte stattdessen an denTransformer.Builder
-Konstruktor übergeben werden.
- Entfernen Sie
Version 1.0.0-alpha03
14. März 2022
androidx.media3:media3-*:1.0.0-alpha03
wird veröffentlicht.
Version 1.0.0-alpha03 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.17.1.
- Audio:
- Fehler beim Prüfen der Audiofunktionen für Dolby Atmos (E-AC3-JOC) in HLS behoben.
- Extraktoren:
- FMP4: Das Problem wurde behoben, dass die Metadaten von „emsg“-Samples für Streams mit „emsg“-Atomen der Versionen 0 und 1 in der falschen Reihenfolge ausgegeben werden konnten (#9996).
- Text:
- Beheben Sie die Interaktion von
SingleSampleMediaSource.Factory.setTrackId
undMediaItem.SubtitleConfiguration.Builder.setId
, um das FeldSubtitleConfiguration
zu priorisieren und auf den WertFactory
zurückzugreifen, wenn er nicht festgelegt ist (#10016).
- Beheben Sie die Interaktion von
- Anzeigenwiedergabe:
- Audio-Underruns zwischen Anzeigenzeiträumen in HLS-Livestreams mit SSAI beheben.
Version 1.0.0-alpha02
2. März 2022
androidx.media3:media3-*:1.0.0-alpha02
wird veröffentlicht.
Version 1.0.0-alpha02 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.17.0.
- Core Library:
- Füge die geschützte Methode
DefaultRenderersFactory.getCodecAdapterFactory()
hinzu, damit Unterklassen vonDefaultRenderersFactory
, diebuildVideoRenderers()
oderbuildAudioRenderers()
überschreiben, auf die Codec-Adapter-Factory zugreifen und sie anMediaCodecRenderer
-Instanzen übergeben können, die sie erstellen. - Leite die ICY-Headerfelder
name
undgenre
anMediaMetadata.station
bzw.MediaMetadata.genre
weiter, damit sie die App überPlayer.Listener.onMediaMetadataChanged()
(#9677) erreichen. - Nullschlüssel aus
DefaultHttpDataSource#getResponseHeaders
entfernen. - Wenn das Erstellen einer
MediaCodec
-Instanz fehlschlägt, wird eine Pause eingelegt und der Vorgang wird wiederholt. Damit wird ein Problem umgangen, das auf einigen Geräten auftritt, wenn eine Oberfläche von einem sicheren Codec zu einem anderen Codec gewechselt wird (#8696). - Fügen Sie
MediaCodecAdapter.getMetrics()
hinzu, damit Nutzer Messwertdaten ausMediaCodec
abrufen können. (#9766). - Problem mit der Maven-Abhängigkeitsauflösung behoben (#8353).
- Die automatische Geschwindigkeitsanpassung wird für Livestreams deaktiviert, die weder Low-Latency-Funktionen noch eine Nutzereinstellung für die Geschwindigkeit haben (#9329).
- Benennen Sie
DecoderCounters#inputBufferCount
inqueuedInputBufferCount
um. SimpleExoPlayer.renderers
privat machen Auf Renderers kann überExoPlayer.getRenderer
zugegriffen werden.- Einige
AnalyticsListener.EventFlags
-Konstantenwerte wurden aktualisiert, damit sie mit den Werten inPlayer.EventFlags
übereinstimmen. - Teile
AnalyticsCollector
in eine Schnittstelle und eine Standardimplementierung auf, damit sie von R8 entfernt werden kann, wenn eine App sie nicht benötigt.
- Füge die geschützte Methode
- Titelauswahl:
- Unterstützung bevorzugter Video-Rollen-Flags bei der Titelauswahl (#9402).
- Die Logik für die Auswahl von Videotracks wurde aktualisiert, um bevorzugte MIME-Typen und Rollen-Flags bei der Auswahl mehrerer Videotracks für die Anpassung zu berücksichtigen (#9519).
- Die Logik für die Auswahl von Video- und Audiotracks wurde aktualisiert, sodass nur Formate für adaptive Auswahlen ausgewählt werden, die dasselbe Niveau an Decoder- und Hardwareunterstützung haben (#9565).
- Die Logik für die Auswahl von Videotracks wurde aktualisiert, um effizientere Codecs zu bevorzugen, wenn mehrere Codecs von primären, hardwarebeschleunigten Decodern unterstützt werden (#4835).
- Bevorzuge Einstellungen für Audioinhalte (z. B. den „Standard“-Audio-Track oder einen Track, der der Sprache des Systemgebietsschemas entspricht) gegenüber technischen Einschränkungen bei der Trackauswahl (z. B. bevorzugter MIME-Typ oder maximale Anzahl von Kanälen).
- Ein Problem bei der Auswahl von Tracks wurde behoben. Wenn eine Trackgruppe überschrieben wurde, wurden andere Trackgruppen desselben Typs nicht deaktiviert (#9675).
- Ein Problem bei der Auswahl von Tracks wurde behoben, bei dem eine Mischung aus nicht leeren und leeren Track-Überschreibungen nicht korrekt angewendet wurde (#9649).
- Doppelte
TrackGroup
in einemTrackGroupArray
verbieten.TrackGroup
s können immer durch Festlegen einesid
imTrackGroup
-Konstruktor unterschieden werden. Dadurch wird ein Absturz behoben, der beim Fortsetzen der Wiedergabe nach dem Minimieren der App mit einer aktiven Track-Überschreibung aufgetreten ist (#9718). - Die Logik in
AdaptiveTrackSelection
wurde so geändert, dass die Qualität auch bei ausreichender Netzwerkbandbreite erhöht werden kann, wenn die Wiedergabe sehr nah am Live-Edge liegt (#9784).
- Video:
- Die Decoder-Fallback-Logik für Dolby Vision wurde korrigiert, sodass bei Bedarf ein kompatibler H264/H265-Decoder verwendet wird.
- Audio:
- Die Fallback-Logik des Decoders für Dolby Atmos (E-AC3-JOC) wurde korrigiert, sodass bei Bedarf ein kompatibler E-AC3-Decoder verwendet wird.
- Bei
AudioCapabilities
-APIs muss jetzt explizitAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
anstelle vonnull
übergeben werden. - Die Berechnung der
AudioTrack
-Puffergröße kann angepasst werden, indem einAudioTrackBufferSizeProvider
inDefaultAudioSink
eingefügt wird. (#8891). - Wiederholen Sie die Erstellung von
AudioTrack
, wenn die angeforderte Puffergröße > 1 MB war. (#9712).
- Extraktoren:
- Text:
- Fügen Sie ein
MediaItem.SubtitleConfiguration.id
-Feld hinzu, das in dasFormat.id
-Feld des Untertitel-Tracks übernommen wird, der aus der Konfiguration erstellt wurde (#9673). - Grundlegende Unterstützung für WebVTT-Untertitel in Matroska-Containern hinzugefügt (#9886).
- Verhindern Sie, dass
Cea708Decoder
mehr als die deklarierte Größe eines Serviceblocks liest.
- Fügen Sie ein
- DRM:
- Entfernen Sie
playbackLooper
ausDrmSessionManager.(pre)acquireSession
. Wenn einDrmSessionManager
von einer App in einem benutzerdefiniertenMediaSource
verwendet wird, muss dasplaybackLooper
stattdessen anDrmSessionManager.setPlayer
übergeben werden.
- Entfernen Sie
- Anzeigenwiedergabe / IMA:
- Unterstützung für die IMA-Lösung für die dynamische Anzeigenbereitstellung hinzugefügt (#8213).
- Eine Methode für
AdPlaybackState
hinzufügen, um eine Anzeigengruppe zurückzusetzen, damit sie noch einmal abgespielt werden kann (#9615). - Wiedergabegeschwindigkeit von 1,0 während der Anzeigenwiedergabe erzwingen ( #9018).
- Ein Problem wurde behoben, bei dem eine Anzeigengruppe, die nicht geladen werden konnte, zu einem sofortigen Zurücksetzen der Wiedergabe geführt hat (#9929).
- UI:
- DASH:
- Fügen Sie dem
Representation
(#9579) geparste wichtige und zusätzliche Properties hinzu. - Unterstützung der Trackrolle
forced-subtitle
( #9727) - Die Rolle des
main
-Tracks nicht mehr alsC.SELECTION_FLAG_DEFAULT
interpretieren. - Die Ausschlusslogik für die Basis-URL für Manifeste, in denen der DVB-Namespace nicht deklariert wird, wurde korrigiert (#9856).
- Unterstützung relativer
MPD.Location
-URLs (#9939).
- Fügen Sie dem
- HLS:
Format.label
für reine Audio-HLS-Streams korrekt ausfüllen (#9608).- Verwenden Sie standardmäßig die chunklose Vorbereitung, um die Startzeit zu verkürzen. Wenn Ihre Renditionen gemischte Untertitel-Tracks enthalten, die nicht in der Master-Playlist deklariert sind, sollten Sie sie der Master-Playlist hinzufügen, damit sie für die Wiedergabe verfügbar sind, oder die chunklose Vorbereitung mit
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
deaktivieren. - Unterstützung der Keyframe-genauen Suche in HLS (#2882).
- RTSP:
- Stellen Sie eine Client-API bereit, um die
SocketFactory
zu überschreiben, die für jede Serververbindung verwendet wird (#9606). - Die DIGEST-Authentifizierungsmethode wird gegenüber BASIC bevorzugt, wenn beide vorhanden sind (#9800).
- Behandlung, wenn das Timing von RTSP-Tracks nicht verfügbar ist (#9775).
- Ungültige RTP-Info-Headerwerte ignorieren (#9619).
- Stellen Sie eine Client-API bereit, um die
- Transformer:
- Die erforderliche Mindest-API-Version wird auf 21 erhöht.
TransformationException
wird jetzt verwendet, um Fehler zu beschreiben, die während einer Transformation auftreten.- Fügen Sie
TransformationRequest
hinzu, um die Transformationsoptionen anzugeben. - Es können mehrere Zuhörer registriert werden.
- Das Problem, dass der Transformer hängen bleibt, wenn die Codec-Ausgabe teilweise gelesen wird, wurde behoben.
- Mögliche NPE in
Transformer.getProgress
behoben, wenn beim Freigeben des Muxers eine Ausnahme ausgelöst wird. - Demo-App zum Anwenden von Transformationen hinzufügen
- MediaSession-Erweiterung:
- Standardmäßig wird die Playlist jetzt beim Stoppen von
MediaSessionConnector
gelöscht. Apps, die möchten, dass die Playlist beibehalten wird, könnensetClearMediaItemsOnStop(false)
für den Connector aufrufen.
- Standardmäßig wird die Playlist jetzt beim Stoppen von
- Cast-Erweiterung:
- FFmpeg-Erweiterung:
build_ffmpeg.sh
von den Binärdienstprogrammen von LLVM anstelle von GNU abhängig machen (#9933).
- Android 12-Kompatibilität:
- Führen Sie ein Upgrade der Cast-Erweiterung durch, sodass sie von
com.google.android.gms:play-services-cast-framework:20.1.0
abhängt. Ältere Versionen vonplay-services-cast-framework
sind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind, und stürzen mit einemIllegalArgumentException
ab, wennPendingIntent
s erstellt werden (#9528).
- Führen Sie ein Upgrade der Cast-Erweiterung durch, sodass sie von
- Entfernen Sie die folgenden veralteten Symbole:
- Entfernen Sie
Player.EventListener
. Verwenden Sie stattdessenPlayer.Listener
. - Entfernen Sie
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
undMediaSourceFactory#setDrmUserAgent
. Verwenden Sie stattdessenMediaSourceFactory#setDrmSessionManagerProvider
. - Entfernen Sie
MediaSourceFactory#setStreamKeys
. Verwenden Sie stattdessenMediaItem.Builder#setStreamKeys
. - Entfernen Sie
MediaSourceFactory#createMediaSource(Uri)
. Verwenden Sie stattdessenMediaSourceFactory#createMediaSource(MediaItem)
. - Entferne
setTag
ausDashMediaSource
,HlsMediaSource
undSsMediaSource
. Verwenden Sie stattdessenMediaItem.Builder#setTag
. - Entfernen Sie
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. Verwenden SieMediaItem.Builder#setLiveConfiguration
undMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
, um das Manifest zu überschreiben, oderDashMediaSource#setFallbackTargetLiveOffsetMs
, um einen Fallback-Wert anzugeben. - Entfernen Sie
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Die Deaktivierung der Thread-Durchsetzung ist nicht mehr möglich. - Entfernen Sie
ActionFile
undActionFileUpgradeUtil
. Verwenden Sie ExoPlayer 2.16.1 oder früher, um mitActionFileUpgradeUtil
Legacy-Aktionsdateien inDefaultDownloadIndex
zusammenzuführen. - Entfernen Sie
ProgressiveMediaSource#setExtractorsFactory
. Verwenden Sie stattdessen denProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
-Konstruktor. - Entferne
ProgressiveMediaSource.Factory#setTag
undProgressiveMediaSource.Factory#setCustomCacheKey
. Verwenden Sie stattdessenMediaItem.Builder#setTag
undMediaItem.Builder#setCustomCacheKey
. - Entfernen Sie die Konstruktoren
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
undDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Verwenden Sie stattdessen denDefaultRenderersFactory(Context)
-Konstruktor,DefaultRenderersFactory#setExtensionRendererMode
undDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Entfernen Sie alle öffentlichen
CronetDataSource
-Konstruktoren. Verwenden Sie stattdessenCronetDataSource.Factory
.
- Entfernen Sie
- Ändern Sie nur die folgenden
IntDefs
in@Target(TYPE_USE)
. Dies kann die Kompilierung von Verwendungen in Kotlin unterbrechen. Das Problem lässt sich beheben, indem Sie die Annotation zum Annotieren des Typs (Int
) verschieben.@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(im Paketcom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(im Paketcom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Version 1.0.0-alpha01
27. Oktober 2021
androidx.media3:media3-*:1.0.0-alpha01
wird veröffentlicht.
Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Media3 ist der neue Ort für Media-Support-Bibliotheken, einschließlich ExoPlayer. Die erste Alphaversion enthält frühe, funktionale Implementierungen von Bibliotheken für die Implementierung von Media-Anwendungsfällen, darunter:
- ExoPlayer, ein Mediaplayer auf Anwendungsebene für Android, der sich einfach anpassen und erweitern lässt.
- Funktionen für Mediensitzungen zum Bereitstellen und Steuern der Wiedergabe. Dieses neue Sitzungsmodul verwendet dieselbe
Player
-Schnittstelle wie ExoPlayer. - UI-Komponenten zum Erstellen von Benutzeroberflächen für die Medienwiedergabe.
- Module, die Funktionen in anderen Bibliotheken für die Verwendung mit ExoPlayer umschließen, z. B. das Einfügen von Anzeigen über das IMA SDK.
Weitere Informationen finden Sie im Media3-GitHub-Projekt.
ExoPlayer wurde zuvor in einem separaten ExoPlayer-GitHub-Projekt gehostet. In Media3 lautet der Paketname androidx.media3.exoplayer
. Wir planen, das ExoPlayer-GitHub-Projekt noch eine Weile weiter zu pflegen und zu veröffentlichen, damit Apps Zeit für die Migration zu Media3 haben. Media3 bietet Ersatz für alle ExoPlayer-Module, mit Ausnahme der alten Media2- und Mediasession-Erweiterungen, die durch das neue media3-session
-Modul ersetzt werden. Dadurch ist eine direkte Integration zwischen Playern und Mediensitzungen möglich, ohne dass eine Adapter-/Connector-Klasse verwendet werden muss.