Media3
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
12. April 2024 | 1.3.1 | − | − | 1.4.0-alpha01 |
Abhängigkeiten deklarieren
Zum Hinzufügen einer Abhängigkeit von Media3 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 Anwendung oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Groovig
dependencies { def media3_version = "1.3.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.3.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Dein Feedback hilft uns, Jetpack zu verbessern. Mit der Media3-Problemverfolgung können Sie Antworten auf Fragen, bekannte Probleme und Funktionsanfragen finden und neue Probleme melden.
Version 1.4.0
Version 1.4.0-alpha01
17. April 2024
androidx.media3:media3-*:1.4.0-alpha01
wird freigegeben.
Version 1.4.0-alpha01 enthält diese Commits.
- ExoPlayer:
- Fügen Sie
BasePreloadManager
hinzu, um das Vorabladen für mehrere Quellen anhand der durch ihrerankingData
definierten Prioritäten zu koordinieren. Eine Anpassung ist durch das Erweitern dieser Klasse möglich. Fügen SieDefaultPreloadManager
hinzu, dasPreloadMediaSource
verwendet, um Medienproben der Quellen vorab in den Arbeitsspeicher zu laden, und eine GanzzahlrankingData
, die den Index eines Elements auf der UI angibt. - Binde
PlayerId
in die meisten Methoden vonLoadControl
ein, damitLoadControl
-Implementierungen mehrere Spieler unterstützen können. - Entfernen Sie
Buffer.isDecodeOnly()
undC.BUFFER_FLAG_DECODE_ONLY
. Dieses Flag muss nicht festgelegt werden, da Renderer und Decodierer auf Grundlage des Zeitstempels beschließen, Zwischenspeicher zu überspringen. BenutzerdefinierteRenderer
-Implementierungen sollten prüfen, ob die Pufferzeit mindestensBaseRenderer.getLastResetPositionUs()
beträgt, um zu entscheiden, ob ein Beispiel angezeigt werden soll. BenutzerdefinierteSimpleDecoder
-Implementierungen können bei BedarfisAtLeastOutputStartTimeUs
prüfen oder andere Puffer mitDecoderOutputBuffer.shouldBeSkipped
markieren, um sie zu überspringen. - Lassen Sie zu, dass
TargetPreloadStatusControl.getTargetPreloadStatus(T)
einen Nullwert zurückgibt, um anzugeben, dass einMediaSource
mit der angegebenenrankingData
nicht vorab geladen werden soll. remove(MediaSource)
zuBasePreloadManager
hinzufügen.
- Fügen Sie
- Transformator:
- Fügen Sie
audioConversionProcess
undvideoConversionProcess
zuExportResult
hinzu und geben Sie an, wie der jeweilige Track in der Ausgabedatei erstellt wurde. - H.264-Level-Prüfungen der Relax-Optimierung.
- Unterstützung für den Wechsel zwischen SDR- und HDR-Eingabemedien in einer Sequenz hinzugefügt.
- Audioeffekte auf Kompositionsebene werden jetzt unterstützt.
- Unterstützung für die Transcodierung von Ultra HDR-Bildern in HDR-Videos
- Ein Problem wurde behoben, bei dem
DefaultAudioMixer
nach Zurücksetzen und Wiederverwendung nicht die richtige Anzahl von Byte ausgibt.
- Fügen Sie
- Video:
- Problem behoben, bei dem
Listener.onRenderedFirstFrame()
zu früh eintraf, wenn die Oberfläche mitten in der Wiedergabe gewechselt wurde.
- Problem behoben, bei dem
- Datenquelle:
- Implementieren Sie die Unterstützung für
android.resource://package/id
-Rohressourcen-URIs, bei denen sichpackage
vom Paket der aktuellen Anwendung unterscheidet. Dies war zuvor nicht dokumentiert, aber ein effizienterer Zugriff auf Ressourcen in einem anderen Paket als anhand des Namens. - Prüfen Sie aufmerksam, ob
url
in denDataSpec
-Konstruktoren nicht null ist. Dieser Parameter wurde bereits mit dem Wert „nicht null“ annotiert.
- Implementieren Sie die Unterstützung für
- Auswirkung:
- Mehrere Geschwindigkeitsänderungen innerhalb desselben
EditedMediaItem
oderComposition
inSpeedChangeEffect
unterstützen. - Unterstützung für die Ausgabe von HLG und PQ über die Ultra-HDR-Bitmapeingabe.
- Zusätzliche Unterstützung für EGL_GL_COLORSPACE_BT2020_HLG_EXT, wodurch die HLG-Oberflächenausgabe in ExoPlayer.setVideoEffect und der Debug SurfaceView von Transformer verbessert wird
- Aktualisieren Sie die Implementierung der Overlay-Matrix, damit sie der Dokumentation entspricht. Setzen Sie dazu die in
setOverlayFrameAnchor()
angewendeten x- und y-Werte um. Wenn SieOverlaySettings.Builder.setOverlayFrameAnchor()
verwenden, drehen Sie die entsprechenden x- und y-Werte um, indem Sie sie mit-1
multiplizieren.
- Mehrere Geschwindigkeitsänderungen innerhalb desselben
- Sitzung:
- Ändern Sie den Standardwert von
CommandButton.enabled
intrue
und achten Sie darauf, dass der Wert für Controller „false“ bleiben kann, auch 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 Anwendungen abfragen können, ob der Dienst inonTaskRemoved()
beendet werden muss (#1219). - Fügen Sie
MediaSessionService.pauseAllPlayersAndStopSelf()
hinzu, um die Wiedergabe aller Sitzungen zu pausieren undstopSelf
aufzurufen, um den Lebenszyklus vonMediaSessionService
zu beenden. - Überschreiben Sie
MediaSessionService.onTaskRemoved(Intent)
, um eine sichere Standardimplementierung bereitzustellen, mit der der Dienst bei laufender Wiedergabe im Vordergrund weiter ausgeführt wird oder bei einer anderen Methode anhält.
- Ändern Sie den Standardwert von
- Downloads:
- Achten Sie darauf, dass
DownloadHelper
keine unveröffentlichtenRenderer
-Instanzen verursacht, was letztendlich zum Absturz einer Anwendung mitIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224) führen kann.
- Achten Sie darauf, dass
- Testdienstprogramme:
- Implementieren Sie
onInit()
undonRelease()
inFakeRenderer
. - Ändern Sie
TestPlayerRunHelper.runUntil/playUntil
-Methoden so, dass bei nicht schwerwiegenden Fehlern (z.B. Fehler, die anAnalyticsListener.onVideoCodecError
gemeldet wurden) fehlschlagen. Verwenden Sie die neue MethodenketteTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
, um dieses Verhalten zu deaktivieren.
- Implementieren Sie
- Demo-App:
- Verwende
DefaultPreloadManager
in der Demo-App im Kurzformat.
- Verwende
- Entfernen Sie eingestellte Symbole:
CronetDataSourceFactory
entfernen. Verwenden Sie stattdessenCronetDataSource.Factory
.- Entfernen Sie einige
DataSpec
-Konstruktoren. Verwende stattdessenDataSpec.Builder
.
Version 1.3.0
Version 1.3.1
11. April 2024
androidx.media3:media3-*:1.3.1
wird freigegeben.
Version 1.3.1 enthält diese Commits.
- Allgemeine Bibliothek:
- Füge
Format.labels
hinzu, um lokalisierte oder andere alternative Labels zuzulassen.
- Füge
- ExoPlayer:
- Problem behoben, bei dem
PreloadMediaPeriod
die Streams nicht beibehalten kann, wenn es wieder vorab geladen wird. - Wende die richtige
TrackSelectionResult
auf die Wiedergabedauer bei der Titelauswahl an. - frühe aktivierte Renderer werden erst nach Ablauf der Wiedergabedauer beim Wechsel zwischen Mediaelementen gestartet (#1017).
- Fügen Sie den fehlenden Rückgabetyp hinzu, um die
-keepclasseswithmembers
-Regel fürDefaultVideoFrameProcessor.Factory.Builder.build()
zu erstellen (#1187).
- Problem behoben, bei dem
- Transformator:
- Es wurde eine Problemumgehung für die Ausnahme hinzugefügt, die ausgelöst wurde, weil
MediaMuxer
negative Präsentationszeitstempel vor API 30 nicht unterstützt.
- Es wurde eine Problemumgehung für die Ausnahme hinzugefügt, die ausgelöst wurde, weil
- Titelauswahl:
DefaultTrackSelector
: Videotracks mit einer angemessenen Framerate (>=10 fps) werden gegenüber Tracks mit einer niedrigeren oder nicht festgelegten Framerate bevorzugt. Dadurch wird sichergestellt, dass der Player den "echten" Videotrack in MP4s auswählt, der aus Bewegtbildern extrahiert wird und zwei HEVC-Tracks enthalten kann, von denen eine eine höhere Auflösung, aber nur eine sehr kleine Anzahl von Frames hat (#1051).
- Extraktoren:
- Ein Problem wurde behoben, bei dem das Padding beim Lesen von Blöcken mit ungewöhnlicher Größe aus WAV-Dateien nicht übersprungen wurde (#1117).
- MP3: Füllen Sie
Format.averageBitrate
aus Metadatenframes wieXING
undVBRI
. - MPEG-TS: Machen Sie eine Änderung rückgängig, die dafür sorgen sollte, dass der letzte Frame gerendert wird. Übergeben Sie dazu die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange (#7909). Der Grund dafür ist, dass die Änderung neue Probleme bei reinen iFrame-HLS-Streams (#1150) und H.262-HLS-Streams (#1126) verursacht.
- Audio:
- Ermöglicht die Wiederherstellung des Renderers, indem die Auslagerung deaktiviert wird, wenn der Audiotrack nicht im Auslagerungsmodus initialisiert werden kann.
- Video:
- Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzufügen, das dazu führt, dass H265-Streams mit 60 fps als nicht unterstützt markiert werden
- Fügen Sie eine Behelfslösung hinzu, damit der erste Frame beim Tunneling immer gerendert wird, auch wenn das Gerät dies nicht automatisch wie von der API gefordert (#1169). (Nr. 966)
- Ein Problem wurde behoben, bei dem die Verarbeitung von HDR-Farbinformationen ein Fehlverhalten des Codecs verursacht und adaptive Formatwechsel für SDR-Videotracks verhindert (#1158).
- Text:
- WebVTT: Verhindern, dass direkt aufeinanderfolgende Hinweise das Erstellen gefälschter zusätzlicher
CuesWithTiming
-Instanzen ausWebvttParser.parse
verhindern (#1177).
- WebVTT: Verhindern, dass direkt aufeinanderfolgende Hinweise das Erstellen gefälschter zusätzlicher
- Digitale Rechteverwaltung:
- Sie können ein
NoSuchMethodError
umgehen, das auf einigen Android 14-Geräten vomMediaDrm
-Framework anstelle vonResourceBusyException
oderNotProvisionedException
ausgelöst wird (Nr. 1145).
- Sie können ein
- Auswirkung:
- Die Tonzuordnung von PQ zu SDR wurde durch Konvertierung von Farbräumen verbessert.
- Sitzung:
- Benutzeroberfläche:
- Fallback, um den Namen der Audiospursprache einzubeziehen, wenn
Locale
keinen Anzeigenamen identifizieren kann (#988).
- Fallback, um den Namen der Audiospursprache einzubeziehen, wenn
- DASH-Erweiterung:
- Füllen Sie alle
Label
-Elemente aus dem Manifest inFormat.labels
(#1054) aus.
- Füllen Sie alle
- RTSP-Erweiterung:
- Überspringen Sie leere Sitzungsinformationswerte (i-Tags) beim SDP-Parsing (#1087).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Deaktivieren Sie die MIDI-Erweiterung standardmäßig als lokale Abhängigkeit, da dafür 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 freigegeben.
Version 1.3.0 enthält diese Commits.
- Allgemeine Bibliothek:
- Implementieren Sie die Unterstützung für
android.resource://package/[type/]name
-Rohressourcen-URIs, bei denen sichpackage
vom Paket der aktuellen Anwendung unterscheidet. Es wurde schon immer dokumentiert, dass dies funktioniert, aber bisher nicht richtig implementiert wurde. - Normalisieren Sie die durch Anwendungscode festgelegten MIME-Typen oder lesen Sie aus Medien nur Kleinbuchstaben.
- Definieren Sie Anzeigen mit einer vollständigen
MediaItem
anstelle einer einzelnenUri
inAdPlaybackState
. minSdk
auf 19 erhöhen (Android KitKat). Sie stimmt mit allen anderen AndroidX-Bibliotheken überein 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 einer davon nicht null ist (#964).
- Implementieren Sie die Unterstützung für
- ExoPlayer:
- Fügen Sie
PreloadMediaSource
undPreloadMediaPeriod
hinzu, damit Apps eine Inhaltsmedienquelle vor der Wiedergabe an einer bestimmten Startposition vorab laden können.PreloadMediaSource
bereitet die Inhaltsmedienquelle auf den Empfang desTimeline
vor, bereitet den Zeitraum an der angegebenen Startposition vor und speichert ihn im Cache, wählt Titel aus und lädt Mediendaten für den Zeitraum. Apps steuern den Fortschritt des Vorabladevorgangs, indem siePreloadMediaSource.PreloadControl
implementieren und die vorab geladene Quelle für die Wiedergabe auf den Player festlegen. - Fügen Sie
ExoPlayer.setImageOutput
hinzu, damit AppsImageRenderer.ImageOutput
festlegen können. DefaultRenderersFactory
stellt dem Spieler jetzt standardmäßig einImageRenderer
mit nullImageOutput
undImageDecoder.Factory.DEFAULT
zur Verfügung.- Gibt ein
Player.Listener.onPositionDiscontinuity
-Ereignis aus, wenn die Stille übersprungen wird (#765). - Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzufügen Sie können dies mit
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
aktivieren. - Unterstützen Sie adaptive Medienquellen mit
PreloadMediaSource
. - Implementieren Sie
HttpEngineDataSource
, einHttpDataSource
, mithilfe der HttpEngine API. - Verhindern Sie, dass
CompositeSequenceableLoader
abgeleitete Klassen erstellt. Diese Komponente war bisher erweiterbar, wurde aber in der Bibliothek nie als abgeleitete Klassen verwendet. Für Anpassungen können Sie eine Instanz mithilfe des Decorator-Musters zusammenfassen und eine benutzerdefinierteCompositeSequenceableLoaderFactory
implementieren. - Problem behoben, bei dem Metadaten aus diesem Element gelöscht werden, wenn dieselbe Zeit wiederholt wird (#1007).
- Benennen Sie die
experimentalSetSubtitleParserFactory
-Methoden fürBundledChunkExtractor.Factory
undDefaultHlsExtractorFactory
insetSubtitleParserFactory
um und verhindern Sie die Weitergabe vonnull
. Mit den neuen MethodenexperimentalParseSubtitlesDuringExtraction(boolean)
können Sie das Parsing-Verhalten steuern. - Unterstützung für das Anpassen der
SubtitleParser.Factory
während der Extraktion. Dazu können SieMediaSource.Factory.setSubtitleParserFactory()
verwenden. - Fügen Sie allen
Format.id
-Feldern, die vonMergingMediaSource
generiert werden, ein Quellpräfix hinzu. Damit lässt sich leichter ermitteln, welche QuelleFormat
(#883) erzeugt hat. - Korrigieren Sie den regulären Ausdruck zur Validierung benutzerdefinierter CMCD-Schlüsselnamen (Common Media Client Data), indem Sie ihn so ändern, dass nur nach Bindestrichen gesucht wird (#1028).
- Beenden Sie die Doppelcodierung von CMCD-Abfrageparametern (#1075).
- Fügen Sie
- Transformator:
- Unterstützung für die Abflachung von H.265/HEVC-SEF-Videos in Zeitlupe hinzugefügt.
- Erhöhen Sie die Übertragungsgeschwindigkeit, insbesondere bei Bearbeitungen zum Entfernen von Videos.
- Fügen Sie eine API hinzu, damit die Ausgabedatei mit einem Videoframe beginnt. Dadurch kann die Ausgabe von Zuschneidevorgängen mit Player-Implementierungen kompatibel werden, die den ersten Videoframe erst nach dem Zeitstempel der Darstellung anzeigen (#829).
- Unterstützung für die Optimierung von MP4-Trimmvorgängen für einzelne Assets hinzufügen.
- Sorgen Sie dafür, dass ein Videoframe den ersten Zeitstempel in der Ausgabedatei hat. Fehlerkorrektur für Ausgabedateien, die in iOS-basierten Playern mit einem schwarzen Rahmen beginnen (#829).
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.selectImageTrack
hinzu, um die Auswahl von Image-Tracks zu aktivieren. - Fügen Sie
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
hinzu, um zu bestimmen, ob ein Bild-Track ausgewählt werden soll, wenn sowohl ein Bild- als auch ein Videotrack verfügbar sind. Der Standardwert istfalse
. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
- Fügen Sie
- Extraktoren:
- Fügen Sie dem MP4-Extrahierer zusätzliches AV1C-Parsing hinzu, um die Werte
ColorInfo.colorSpace
,ColorInfo.colorTransfer
undColorInfo.colorRange
abzurufen (#692). - MP3: Verwenden Sie die Suche mit der Konstanten Bitrate (CBR) für Dateien mit einem
Info
-Header (dem CBR-Äquivalent desXing
-Headers). Zuvor haben wir die Suchtabelle aus dem HeaderInfo
verwendet. Dies führt jedoch zu einer weniger präzisen Suche, als wenn wir sie ignorieren und davon ausgehen, dass es sich um eine CBR-Datei handelt. - MPEG2-TS: DTS, DTS-LBR und DTS:X Profile2 werden jetzt unterstützt (#275).
- Extrahieren Sie Audiotypen aus TS-Deskriptoren und ordnen Sie sie Rollen-Flags zu, damit Nutzer eine fundiertere Auswahl von Audiotracks treffen können (#973).
- Fügen Sie dem MP4-Extrahierer zusätzliches AV1C-Parsing hinzu, um die Werte
- Audio:
- Video:
- Ändern Sie den
MediaCodecVideoRenderer
-Konstruktor, der einVideoFrameProcessor.Factory
-Argument verwendet, und ersetzen Sie es durch einen Konstruktor, der einVideoSinkProvider
-Argument annimmt. Anwendungen, die einen benutzerdefiniertenVideoFrameProcessor.Factory
einfügen möchten, können eineCompositingVideoSinkProvider
instanziieren, die den benutzerdefiniertenVideoFrameProcessor.Factory
verwendet und den Anbieter für Videosenken anMediaCodecVideoRenderer
übergeben.
- Ändern Sie den
- Text:
- Die Serialisierung von Bitmap-Cues wurde korrigiert, um den
Tried to marshall a Parcel that contained Binder objects
-Fehler bei Verwendung vonDefaultExtractorsFactory.setTextTrackTranscodingEnabled
zu beheben (#836). - CEA-708:
rowLock
-Wert ignorieren. Die CEA-708-E S-2023-Spezifikation besagt, dass unabhängig von den im Stream vorhandenen Werten sowohlrowLock
als auchcolumnLock
als wahr angenommen werden sollten (diecolumnLock
-Unterstützung ist nicht implementiert, daher wird davon ausgegangen, dass sie immer falsch ist).
- Die Serialisierung von Bitmap-Cues wurde korrigiert, um den
- Bild:
- Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden kurz vor der Präsentation an
ImageOutput
gesendet.
- Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden kurz vor der Präsentation an
- Digitale Rechteverwaltung:
- Geben Sie standardmäßig unverschlüsselte Beispiele für „klare Leads“ in DRM-Inhalten sofort wieder, auch wenn die Schlüssel für die späteren verschlüsselten Beispiele noch nicht bereit sind. Dies kann dazu führen, dass die Wiedergabe mitten in der Wiedergabe unterbrochen wird, wenn die Schlüssel noch nicht bereit sind und die Wiedergabeposition die verschlüsselten Samples erreicht (aber vorher hätte die Wiedergabe zu diesem Zeitpunkt überhaupt nicht begonnen). Dieses Verhalten kann mit
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oderDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
deaktiviert werden.
- Geben Sie standardmäßig unverschlüsselte Beispiele für „klare Leads“ in DRM-Inhalten sofort wieder, auch wenn die Schlüssel für die späteren verschlüsselten Beispiele noch nicht bereit sind. Dies kann dazu führen, dass die Wiedergabe mitten in der Wiedergabe unterbrochen wird, wenn die Schlüssel noch nicht bereit sind und die Wiedergabeposition die verschlüsselten Samples erreicht (aber vorher hätte die Wiedergabe zu diesem Zeitpunkt überhaupt nicht begonnen). Dieses Verhalten kann mit
- IMA-Erweiterung:
- Problem behoben, bei dem DASH- und HLS-Anzeigen ohne die entsprechende Dateiendung nicht wiedergegeben werden konnten.
- Sitzung:
- Deaktivieren Sie die Doppelklickerkennung für TV-Apps (#962).
- Problem behoben, bei dem
MediaItem.RequestMetadata
nur zwischen Mediencontrollern und Sitzungen übertragen wird, die keine Extras enthalten, die nicht null sind. - Fügen Sie
MediaLibrarySession.Builder
einen Konstruktor hinzu, der nur eineContext
anstelle einerMediaLibraryService
annimmt.
- HLS-Erweiterung:
- Reduzieren Sie die Sichtbarkeit von
HlsMediaPeriod
auf „Package Private“. Dieser Typ sollte nicht direkt von außerhalb des HLS-Pakets abhängig sein. - Auflösen wird effizienter bis zum Anfang eines Segments gesucht (#1031).
- Reduzieren Sie die Sichtbarkeit von
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- MIDI-Decoder: SysEx-Ereignismeldungen ignorieren (#710).
- Testdienstprogramme:
- Wiedergabe in
TestPlayerRunHelper.playUntilPosition
nicht anhalten. Der Test behält die Wiedergabe im Wiedergabestatus bei, sperrt jedoch den Fortschritt, bis der Test Assertions und weitere Aktionen hinzufügen kann.
- Wiedergabe in
- Demo-App:
- Füge ein Demomodul zu einer Kurzfassung hinzu, um die Verwendung von
PreloadMediaSource
mit dem Anwendungsfall Kurzinhalte zu demonstrieren.
- Füge ein Demomodul zu einer Kurzfassung hinzu, um die Verwendung von
Version 1.3.0-rc01
22. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-beta01
7. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-alpha01
15. Januar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.2.0
Version 1.2.1
9. Januar 2024
- ExoPlayer:
- Ein Problem wurde behoben, bei dem manuelle Suchen außerhalb des Bereichs
LiveConfiguration.min/maxOffset
den Offset immer wieder aufmin/maxOffset
angepasst haben. - Problem behoben, bei dem die Kanallayouts von OPUS und VORBIS für 3, 5, 6, 7 und 8 Kanäle falsch sind (#8396)
- Ein Problem wurde behoben, bei dem die Titelauswahl in einem Livestream auf null gesetzt wurde und der Stream fälschlicherweise an seiner Standardposition gestartet wurde (#9347).
- Beheben Sie das Problem, bei dem neue Instanzen von
CmcdData.Factory
negative Werte fürbufferedDurationUs
aus Chunk-Quellen erhielten, was zu einemIllegalArgumentException
(#888) führte.
- Ein Problem wurde behoben, bei dem manuelle Suchen außerhalb des Bereichs
- Transformator:
- Umgehen eines Problems, bei dem der Encoder aufgrund einer hohen Betriebsrate bei der Konfigurationszeit eine Ausgabe auslöst.
- Extraktoren:
- Markieren Sie sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Fotos mit Bewegtbild als
ROLE_FLAG_ALTERNATE
, um zu verhindern, dass sie aufgrund ihrer höheren Auflösung automatisch für die Wiedergabe ausgewählt werden. - Falsche Keyframe-Erkennung für TS H264-Streams korrigiert (#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-Fotos mit Bewegtbild als
- Audio:
- Die Verarbeitung von EOS für
SilenceSkippingAudioProcessor
bei mehrfachem Aufruf wurde korrigiert (#712).
- Die Verarbeitung von EOS für
- Video:
- Fügen Sie eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzu, das dazu führt, dass AVC-Streams mit 60 fps als nicht unterstützt markiert werden (#693).
- Metadaten:
- Fehlerkorrektur, bei dem
MediaMetadata
nur aus Vorbis-Kommentaren mit Großbuchstaben ausgefüllt wurde (#876). - Fang
OutOfMemoryError
beim Parsen sehr großer ID3-Frames ab. Dadurch wird die Wiedergabe ohne die Tag-Informationen fortgesetzt und verhindert, dass die Wiedergabe vollständig fehlschlägt.
- Fehlerkorrektur, bei dem
- Digitale Rechteverwaltung:
- Erweitern Sie die Problemumgehung für die gefälschte ClearKey-
https://default.url
-Lizenz-URL auf API 33+ (zuvor wurde die Problemumgehung genau nur für API 33 angewendet) (#837). - Beheben Sie
ERROR_DRM_SESSION_NOT_OPENED
, wenn Sie von verschlüsselten Inhalten zu Inhalten wechseln, die nicht mit dem Player verbunden sind. Der Fehler war darauf zurückzuführen, dass zum Abspielen des freien Inhalts fälschlicherweise ein sicherer Decoder verwendet wurde.
- Erweitern Sie die Problemumgehung für die gefälschte ClearKey-
- Sitzung:
- Fügen Sie die benutzerdefinierten Schlüssel und Werte in
MediaMetadataCompat
inMediaMetadata.extras
undMediaMetadata.extras
inMediaMetadataCompat
ein (#756, #802). - Das Broadcasting von
notifyChildrenChanged
bei Legacy-Controllern wurde korrigiert (#644). - Ein Fehler wurde behoben, bei dem eine negative Zeit für einen deaktivierten
setWhen
-Timer der Benachrichtigung zu einem Absturz auf einigen Geräten führte (#903). IllegalStateException
wird korrigiert, wenn der Media Notification Controller die Verbindung nicht abgeschlossen hat, wenn die erste Aktualisierung der Benachrichtigung angefordert wird (#917).
- Fügen Sie die benutzerdefinierten Schlüssel und Werte in
- Benutzeroberfläche:
- 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-Element verwendet wurden (#511).
- Ein Problem wurde behoben, bei dem die Zahlen auf der Schaltfläche „Vorspulen“ von
PlayerControlView
falsch ausgerichtet waren (#547).
- DASH-Erweiterung:
- Parsen Sie „f800“ als Kanalanzahl von 5 für Dolby im DASH-Manifest (#688).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Cast-Erweiterung:
- Bereinigen Sie die Erstellung eines
Timeline
, damit die App nicht abstürzt, wenn Medien auf dem Übertragungsgerät nicht geladen werden (#708).
- Bereinigen Sie die Erstellung eines
Version 1.2.0
15. November 2023
- Allgemeine Bibliothek:
- Den Methoden in der
Log.Logger
-Schnittstelle den Parameter@Nullable Throwable
hinzufügen. Dermessage
-Parameter für diese Methoden enthält keine Informationen mehr über dieThrowable
, die an dieLog.{d,i,w,e}()
-Methoden übergeben wurden. Daher müssen Implementierungen diese Informationen bei Bedarf manuell anhängen (möglicherweise mithilfe vonLogger.appendThrowableString(String, Throwable)
). - Kotlin-Kompatibilitätsproblem wurde behoben, bei dem generische Typparameter, für die Nullwerte zulässig sind, und Array-Elementtypen, die Nullwerte zulässig sind, nicht als Nullwerte erkannt wurden. Beispiele sind die Methodenparameter
TrackSelectorResult
undSimpleDecoder
(#6792). - Sie können die Standard-UI und das Benachrichtigungsverhalten in
Util.shouldShowPlayButton
so ändern, dass eine Wiedergabeschaltfläche angezeigt wird, während die Wiedergabe vorübergehend unterdrückt ist (z.B. aufgrund eines vorübergehenden Audiofokusverlusts). Das Legacy-Verhalten kann mitPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oderMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213) verwaltet werden. - Aktualisiere
androidx.annotation:annotation-experimental
auf1.3.1
, um das Problem mit https://issuetracker.google.com/251172715 zu beheben. - Verschieben Sie
ExoPlayer.setAudioAttributes
zurPlayer
-Oberfläche.
- Den Methoden in der
- ExoPlayer:
- Beheben Sie Probleme bei der Suche in AC4-Streams, die dadurch verursacht wurden, dass nur Decodierungsbeispiele nicht richtig identifiziert wurden (#11000).
- Sie können die 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 wird. Der Grund für die Wiedergabeunterdrückung wird mitPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
aktualisiert, wenn der Wiedergabeversuch unternommen wird und keine geeigneten Audioausgänge verfügbar sind oder wenn während der Wiedergabe alle geeigneten Ausgaben getrennt werden. Der Unterdrückungsgrund wird entfernt, wenn ein geeigneter Ausgang angeschlossen wird. - Fügen Sie
MediaSource.canUpdateMediaItem
undMediaSource.updateMediaItem
hinzu, umMediaItem
-Aktualisierungen nach der Erstellung überPlayer.replaceMediaItem(s)
anzunehmen. MediaItem
-Updates für alleMediaSource
-Klassen zulassen, die von der Bibliothek überPlayer.replaceMediaItem(s)
bereitgestellt werden (#33, #9978).- Benennen Sie
MimeTypes.TEXT_EXOPLAYER_CUES
inMimeTypes.APPLICATION_MEDIA3_CUES
um. - Fügen Sie
PngExtractor
hinzu, das eine vollständige PNG-Datei als Beispiel in denTrackOutput
sendet und liest. - Erweitern Sie die Methode
SequenceableLoader.continueLoading(long)
in derSequenceableLoader
-Schnittstelle zuSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
enthält zusätzliche Parameter, einschließlichplaybackSpeed
undlastRebufferRealtimeMs
zusätzlich zum vorhandenenplaybackPositionUs
. - Erweitern Sie die Methode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
in derChunkSource
-Schnittstelle zuChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Fügen Sie dem Logging für Common Media Client Data (CMCD) zusätzliche Felder hinzu: Zwischenspeichern (
bs
), Frist (dl
), Wiedergaberate (pr
) und Start (su
) (#8699). - Fügen Sie
ColorInfo
Luma und Chroma-Bittiefe hinzu (#491). - Fügen Sie dem Logging für Common Media Client Data (CMCD) zusätzliche Felder hinzu: nächste Objektanfrage (
nor
) und nächste Bereichsanfrage (nrr
) (#8699). - Neue Funktion zum Übertragen von CMCD-Daten (Common Media Client Data) mithilfe von Abfrageparametern (#553)
- Korrigieren Sie
ConcurrentModificationException
inExperimentalBandwidthMeter
(#612). - Fügen Sie
CompositeMediaSource.getMediaTimeForChildMediaTime
den ParameterMediaPeriodId
hinzu. - Unterstützt
ClippingMediaSource
(und andere Quellen mit Zeitverschiebungen für Zeitraum/Fenster) inConcatenatingMediaSource2
(#11226). - Ändern Sie
BaseRenderer.onStreamChanged()
so, dass auch einMediaPeriodId
-Argument empfangen wird.
- Transformator:
- Parst EXIF-Rotationsdaten für Bildeingaben.
- 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 Rotationsprobleme zu beheben. - Die
frameRate
- unddurationUs
-Parameter vonSampleConsumer.queueInputBitmap
wurden zuTimestampIterator
geändert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
hinzu, um die nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Die Standardeinstellung behält das aktuelle Verhalten vontrue
bei.
- Fügen Sie
- Extraktoren:
- MPEG-TS: Sorgen Sie dafür, dass der letzte Frame gerendert wird. Übergeben Sie dazu die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange (#7909).
- Tippfehler bei der Bestimmung von
rotationDegrees
beheben.projectionPosePitch
wurde zuprojectionPoseRoll
geändert (#461). - Entfernen Sie die Annahme, dass
Extractor
-Instanzen direkt mitinstanceof
überprüft werden können. Wenn Sie Laufzeitzugriff auf die Implementierungsdetails einesExtractor
wünschen, müssen Sie zuerstExtractor.getUnderlyingInstance
aufrufen. BmpExtractor
hinzufügen.WebpExtractor
hinzufügen.HeifExtractor
hinzufügen.- Zusätzliche Unterstützung für QuickTime Classic zu
Mp4Extractor
hinzugefügt.
- Audio:
- Unterstützung für 24/32-Bit Big-Endian-PCM in MP4 und Matroska und Parsen der PCM-Codierung für
lpcm
in MP4. - Zusätzliche Unterstützung für die Extraktion von Vorbis-Audio in MP4-Dateien.
- Fügen Sie
AudioSink.getFormatOffloadSupport(Format)
hinzu, um die Auslagerungsunterstützung abzurufen, die die Senke für das Format über eineDefaultAudioOffloadSupportProvider
bereitstellen kann. Sie gibt das neueAudioOffloadSupport
zurück, dasisFormatSupported
,isGaplessSupported
undisSpeedChangeSupported
enthält. - Fügen Sie
AudioSink.setOffloadMode()
hinzu, über das die Auslagerungskonfiguration in der Audiosenke konfiguriert wird. Der Standardwert istAudioSink.OFFLOAD_MODE_DISABLED
. - Die Auslagerung kann über
setAudioOffloadPreference
inTrackSelectionParameters
aktiviert werden. Wenn die Einstellung „Aktivieren“ ausgewählt ist, das Gerät die Auslagerung für das Format unterstützt und die Trackauswahl ein einzelner Audiotrack ist, wird die Audioauslagerung aktiviert. - Wenn
audioOffloadModePreference
aufAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
gesetzt ist, wähltDefaultTrackSelector
nur einen Audiotrack aus und nur wenn das Format dieses Titels bei der Auslagerung unterstützt wird. Wenn beim Auslagern kein Audiotrack unterstützt wird, wird kein Track ausgewählt. - Deaktivieren der lückenlosen Unterstützung für die Auslagerung vor API-Level 33 aufgrund eines Problems mit der Wiedergabeposition nach Trackübergang.
- Entfernen Sie den Parameter
enableOffload
aus der Signatur derDefaultRenderersFactory.buildAudioSink
-Methode. - Methode
DefaultAudioSink.Builder.setOffloadMode
entfernen. - Entfernen Sie den intdef-Wert
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Zusätzliche Unterstützung für lückenlose Opus-Metadaten während der Auslagerungswiedergabe.
- Erlauben Sie die Rendererwiederherstellung, indem Sie das Auslagern deaktivieren, wenn beim ersten Schreibvorgang ein Fehler aufgetreten ist (#627).
- Aktiviere standardmäßig die Auslagerungsplanung für die reine Audiowiedergabe.
- Löschen Sie
ExoPlayer.experimentalSetOffloadSchedulingEnabled
undAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
wurde inonSleepingForOffloadChanged
undonExperimentalOffloadedPlayback
inonOffloadedPlayback
umbenannt.- Verschieben Sie
TrackSelectionParameters
-Schnittstellen und Definitionen im Zusammenhang mit dem Audio-Offload-Modus in eine innereAudioOffloadPreferences
-Klasse. - Füge
onAudioTrackInitialized
- undonAudioTrackReleased
-Callbacks zuAnalyticsListener
,AudioRendererEventListener
undAudioSink.Listener
hinzu. - Unterflussproblem mit DTS Express-Audiozwischenspeicherung wurde behoben (#650).
- Ein Fehler wurde behoben, bei dem die Funktionsprüfung für E-AC3-JOC den Fehler
IllegalArgumentException
ausgibt (#677).
- Unterstützung für 24/32-Bit Big-Endian-PCM in MP4 und Matroska und Parsen der PCM-Codierung für
- Video:
- Zulassen, dass
MediaCodecVideoRenderer
einen benutzerdefiniertenVideoFrameProcessor.Factory
verwendet. - Ein Fehler wurde behoben, bei dem der erste Frame nicht gerendert werden konnte, wenn der Audiostream mit negativen Zeitstempeln beginnt (#291).
- Zulassen, dass
- Text:
ExoplayerCuesDecoder
entfernen. Text-Tracks mitsampleMimeType = application/x-media3-cues
werden jetzt direkt vonTextRenderer
verarbeitet, ohne dass eineSubtitleDecoder
-Instanz erforderlich ist.
- Metadaten:
MetadataDecoder.decode
wird nicht mehr für reine Decodierungsproben aufgerufen, da die Implementierung sowieso null zurückgeben muss.
- Auswirkung:
- Fügen Sie die
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
-Warteschlangen-Bitmapeingabe nach Zeitstempel hinzu. VideoFrameProcessor.registerInputStream()
zu „Nicht blockierend“ ändern. Apps müssenVideoFrameProcessor.Listener#onInputStreamRegistered()
implementieren.- Die
frameRate
- unddurationUs
-Parameter vonVideoFrameProcessor.queueInputBitmap
wurden zuTimestampIterator
geändert.
- Fügen Sie die
- IMA-Erweiterung:
- Ein Fehler wurde behoben, durch den ein DASH-Livestream mit mehreren Zeiträumen, der nicht das erste Element in einer Playlist ist, eine Ausnahme auslösen konnte (#571).
- Lass StreamManager los, bevor du
AdsLoader.destroy()
anrufst - Aktualisierung des IMA SDK auf Version 3.31.0.
- Sitzung:
- Legen Sie in
DefaultMediaNotificationProvider
das Verhalten des Diensts im Vordergrund für Benachrichtigungen aufFOREGROUND_SERVICE_IMMEDIATE
fest (#167). - Verwenden Sie nur
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
oberhalb von API 31, um Probleme mit der eingestellten API auf Samsung-Geräten zu vermeiden (#167). - Verwenden Sie den Media Notification Controller als Proxy, um verfügbare Befehle und das benutzerdefinierte Layout zum Ausfüllen der Benachrichtigung und der Plattformsitzung festzulegen.
- Medienschaltflächenereignisse konvertieren, die von
MediaSessionService.onStartCommand()
innerhalb von Media3 empfangen werden, anstatt sie an die Plattformsitzung und zurück an Media3 weiterzuleiten. Damit ist der Caller-Controller immer der Controller für Medienbenachrichtigungen und Apps können Aufrufe aus der Benachrichtigung auf allen unterstützten API-Ebenen auf die gleiche Weise erkennen. - Ein Fehler wurde behoben, bei dem
MediaController.getCurrentPosition()
bei Verbindung mit einem Legacy-MediaSessionCompat
nicht aufgesprungen wurde. - Fügen Sie der Einfachheit halber
MediaLibrarySession.getSubscribedControllers(mediaId)
hinzu. - Überschreiben Sie
MediaLibrarySession.Callback.onSubscribe()
, um die Verfügbarkeit der übergeordneten ID zu bestätigen, die vom Controller abonniert wurde. Bei Erfolg wird das Abo akzeptiert und sofortnotifyChildrenChanged()
aufgerufen, um den Browser zu informieren (#561). - Füge ein Sitzungsdemomodul für Automotive OS hinzu und aktiviere die Sitzungsdemo für Android Auto.
- Legen Sie die Warteschlange der Framework-Sitzung nicht fest, wenn
COMMAND_GET_TIMELINE
für den Media Notification-Controller nicht verfügbar ist. Wenn Android Auto der Client-Controller ist, der die 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 standardmäßige Verarbeitung von Medienschaltflächenereignissen überschreiben können.
- Legen Sie in
- Benutzeroberfläche:
- Füge eine
Player.Listener
-Implementierung für Wear OS-Geräte hinzu, die die Wiedergabe durchPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
unterdrückt. Starte dazu ein Systemdialogfeld, über das der Nutzer eine geeignete Audioausgabe anschließen kann (z. B. Bluetooth-Kopfhörer). Der Listener setzt die Wiedergabe automatisch fort, wenn ein geeignetes Gerät innerhalb eines konfigurierbaren Zeitlimits verbunden ist (standardmäßig 5 Minuten).
- Füge eine
- Downloads:
- Deklariere den Typ „Datensynchronisierung“ im Vordergrund für
DownloadService
, um die Kompatibilität mit Android 14 zu gewährleisten. Wenn Sie diesen Dienst verwenden, muss die App außerdemdataSync
alsforegroundServiceType
im Manifest hinzufügen und die BerechtigungFOREGROUND_SERVICE_DATA_SYNC
(#11239) hinzufügen.
- Deklariere den Typ „Datensynchronisierung“ im Vordergrund für
- HLS-Erweiterung:
- Aktualisieren Sie die HLS-Live-Playlist mit einem Intervall, das auf der Startzeit des letzten Ladevorgangs und nicht auf der Zeit des letzten Ladevorgangs (#663) berechnet wird.
- DASH-Erweiterung:
- Mehrere identische DASH-IDs in der URL der Segmentvorlage zulassen.
- Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzufügen Dies bietet eine bessere Unterstützung für das Zusammenführen von sich überschneidenden Untertiteln, einschließlich des Auflösens von Flimmern beim Wechsel zwischen Untertitelsegmenten. Sie können dies mit
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
aktivieren (#288).
- RTSP-Erweiterung:
- Es wurde eine Race-Bedingung behoben, die zu
IndexOutOfBoundsException
führen kann, wenn ein Fallback zu TCP ausgeführt wird oder die Wiedergabe in einigen Situationen unterbrochen wird. - Prüfen Sie den Status der RTSP-Einrichtung, wenn der Ladestatus von
RtspMediaPeriod
zurückgegeben wird (#577). - Ignorieren Sie benutzerdefinierte Rtsp-Anfragemethoden im öffentlichen Header der Optionsantwort (#613).
- Verwenden Sie den Zeitlimitwert für die RTSP-Einrichtungsantwort im Zeitintervall des Sendens von Keep-Alive-RTSP-Optionsanfragen (#662).
- Es wurde eine Race-Bedingung behoben, die zu
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Veröffentlichen Sie das MIDI-Decodermodul, das die Wiedergabe von Standard-MIDI-Dateien mithilfe der Jsyn-Bibliothek zum Synthetisieren von Audio unterstützt.
- Fügen Sie
DecoderOutputBuffer.shouldBeSkipped
hinzu, um Ausgabezwischenspeicher, die nicht dargestellt werden müssen, direkt zu markieren. Diese Option wird gegenüberC.BUFFER_FLAG_DECODE_ONLY
bevorzugt, die eingestellt werden. - Fügen Sie
Decoder.setOutputStartTimeUs
undSimpleDecoder.isAtLeastOutputStartTimeUs
hinzu, damit Decodierer nur decodierte Samples vor der Startzeit löschen können. Diese sollte den verworfenenBuffer.isDecodeOnly
vorgezogen werden. - Fehler beim Veröffentlichen des MIDI-Decoder-Artefakts im Maven-Repository wurde behoben. Das Artefakt wird in
media3-exoplayer-midi
umbenannt (#734).
- Leanback-Erweiterung:
- Ein Fehler wurde behoben, bei dem das Deaktivieren einer Oberfläche zu einem
ArithmeticException
im Leanback-Code führen kann (#617).
- Ein Fehler wurde behoben, bei dem das Deaktivieren einer Oberfläche zu einem
- Testdienstprogramme:
TestExoPlayerBuilder
undFakeClock
mit Espresso-UI-Tests und Compose UI-Tests kompatibel machen. Dadurch wird ein Fehler behoben, bei dem die Wiedergabe bei Interaktionen in der Espresso- oder der Eingabeansicht nicht deterministisch fortgesetzt wird.
- Entfernen Sie eingestellte Symbole:
- Entfernen Sie
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
undTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. Verwenden SieComposition.Builder.setHdrMode(int)
und übergeben Sie stattdessenComposition
anTransformer.start(Composition, String)
. - Entfernen Sie die verworfene Methode
DownloadNotificationHelper.buildProgressNotification
. Verwenden Sie stattdessen eine nicht eingestellte Methode, die einennotMetRequirements
-Parameter verwendet.
- 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
- Allgemeine Bibliothek:
- Entfernen Sie die versehentlich hinzugefügte
multidex
-Abhängigkeit aus allen Modulen (#499).
- Entfernen Sie die versehentlich hinzugefügte
- ExoPlayer:
- Problem in
PlaybackStatsListener
behoben, bei dem nach dem Löschen der Playlist falschePlaybackStats
erstellt wurden. - Fügen Sie dem Logging für Common Media Client Data (CMCD) zusätzliche Felder hinzu: Streamingformat (sf), Streamtyp (st), Version (v), Top-Birate (tb), Objektdauer (d), gemessener Durchsatz (mtp) und Objekttyp (ot) (#8699).
- Problem in
- Audio:
- Es wurde ein Fehler behoben, bei dem
Player.getState()
beim Abspielen sehr kurzer Dateien nie zuSTATE_ENDED
gewechselt wurde (#538).
- Es wurde ein Fehler behoben, bei dem
- Audio-Offload:
- Ogg-ID-Header und Kommentar-Header-Seiten werden dem Bitstream für ausgelagerte Opus-Wiedergabe gemäß RFC 7845 vorangestellt.
- Video:
- H.265/HEVC: Fehler beim Parsen von kurz- und langfristigen Referenzbildinformationen für SPS.
- Text:
- CEA-608: Ändern Sie die Logik für die Kürzung von Cues so, dass nur sichtbarer Text berücksichtigt wird. Bisher wurden Einzug und Tab-Offset hinzugefügt, wenn die Cue-Länge auf 32 Zeichen begrenzt wurde (was in der Spezifikation technisch korrekt war) (#11019).
- IMA-Erweiterung:
- Aktualisierung des IMA SDK auf Version 3.30.3.
- Sitzung:
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie einen Getter für den Zugriff bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
MediaController.Listener.onCustomLayoutChanged
aufgerufen. Anwendungen, die verschiedene benutzerdefinierte Layouts an verschiedene Media3-Controller senden möchten, können dies inMediaSession.Callback.onConnect
tun. Dazu wird einAcceptedResultBuilder
verwendet, um dafür zu sorgen, dass das benutzerdefinierte Layout für den Controller verfügbar ist, sobald die Verbindung hergestellt ist. - Beheben Sie Fälle, in denen
MediaLibraryServiceLegacyStub
einen Fehler an einenResult
gesendet hat, der dies nicht unterstützt hat, wodurch einUnsupportedOperationException
(#78) ausgelöst wurde. - Korrigieren Sie die Art und Weise, wie
PlayerWrapper
eineVolumeProviderCompat
erstellt. Ermitteln Sie dazuvolumeControlType
sowohl über die Legacy-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
) (#554).
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie einen Getter für den Zugriff bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
Version 1.1.0
5. Juli 2023
- Allgemeine Bibliothek:
- Fügen Sie einen Unterdrückungsgrund für eine ungeeignete Audioroute und „Wiedergabe, wenn Bereit“ hinzu. Ändern Sie den Grund für die Unterdrückung zu lang. (15.)
- Fügen Sie dem Player Befehle hinzu:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Füge dem Player überladene Methoden hinzu, mit denen Nutzer Lautstärke-Flags angeben können:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Fügen Sie
Builder
fürDeviceInfo
hinzu und verwerfen Sie den vorhandenen Konstruktor. - Füge
DeviceInfo.routingControllerId
hinzu, um die Routing-Controller-ID für Remote-Wiedergaben anzugeben. - Fügen Sie
Player.replaceMediaItem(s)
als Verknüpfung zum Hinzufügen und Entfernen von Elementen an derselben Position hinzu (#8046).
- ExoPlayer:
- Erlauben Sie ExoPlayer, die Steuerung der Gerätelautstärke nur dann zu steuern, wenn dies explizit aktiviert ist. Mit
ExoPlayer.Builder.setDeviceVolumeControlEnabled
können Sie auf Folgendes zugreifen:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
undsetDeviceVolume(int, int)
increaseDeviceVolume(int)
undincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
unddecreaseDeviceVolume(int, int)
- Fügen Sie
FilteringMediaSource
hinzu, um verfügbare Tracktypen aus einerMediaSource
zu filtern. - Unterstützung für das Einschließen von Common Media Client Data (CMCD) in die ausgehenden Anfragen der adaptiven Streamingformate DASH, HLS und SmoothStreaming. Die Felder
br
,bl
,cid
,rtp
undsid
wurden eingebunden (#8699). API-Struktur und API-Methoden:- Das CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
, um es zu aktivieren. - Alle Schlüssel sind standardmäßig aktiviert. Überschreiben Sie
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
, um herauszufiltern, welche Schlüssel protokolliert werden. - Überschreiben Sie
CmcdConfiguration.RequestConfig.getCustomData()
, um das benutzerdefinierte Schlüssel-Logging zu aktivieren.
- Das CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
- Fügen Sie dem Manifest der Hauptdemo eine zusätzliche Aktion hinzu, um das Starten der Demo-App mit einer benutzerdefinierten
*.exolist.json
-Datei zu erleichtern (#439). - Füge
ExoPlayer.setVideoEffects()
hinzu, umEffect
während der Videowiedergabe zu verwenden. - Aktualisieren Sie
SampleQueue
, umsourceId
alslong
und nicht alsint
zu speichern. Dadurch werden die Signaturen der öffentlichen MethodenSampleQueue.sourceId
undSampleQueue.peekSourceId
geändert. - Fügen Sie den
LoadControl
-MethodenshouldStartPlayback
undonTracksSelected
Parameter hinzu, damit diese Methoden den entsprechendenMediaPeriod
zugeordnet werden können. - Ändern Sie die Signatur von
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
. Fügen Sie dazu einen Zeitachsenparameter hinzu, der die Punkte mit den UIDs enthält, die in der Zuordnung als Schlüssel verwendet werden. Dies ist erforderlich, um Probleme mit der Gleichzeitigkeit von Livestreams über mehrere Zeiträume zu vermeiden. EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
undBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
werden verworfen. Stattdessen kann die Variante der Methoden ohnemediaTimeOffsetUs
aufgerufen werden. Beachten Sie, dass der Offset auch bei den verworfenen Varianten nicht mehr zustartTimeUs
undendTimeUs
derMediaLoadData
-Objekte hinzugefügt wird, die vom Disponenten gesendet werden.- Benennen Sie
ExoTrackSelection.blacklist
inexcludeTrack
undisBlacklisted
inisTrackExcluded
um. - Ein inkonsistentes Verhalten zwischen
ExoPlayer.setMediaItem(s)
undaddMediaItem(s)
wurde behoben, wenn der Aufruf bei einer leeren Playlist erfolgte.
- Erlauben Sie ExoPlayer, die Steuerung der Gerätelautstärke nur dann zu steuern, wenn dies explizit aktiviert ist. Mit
- Transformator:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
entfernen. Verwenden Sie stattdessenExoPlayerAssetLoader.Factory(MediaSource.Factory)
undTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
.Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
entfernen.- Es wurde ein Fehler behoben, bei dem die Umwandlung hängen bleiben konnte (was zu einer Muxer-Zeitüberschreitung führt), wenn das Ende des Videostreams zu dem Zeitpunkt signalisiert wurde, als der Verarbeitung eines Eingabeframes ausstand.
- Fragen Sie Codecs über
MediaCodecList
anstelle derfindDecoder/EncoderForFormat
-Dienstprogramme ab, um die Unterstützung zu erweitern. - Entfernen Sie die B-Frame-Konfiguration in
DefaultEncoderFactory
, da sie auf einigen Geräten nicht funktioniert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
hinzu. Diese Funktion ist standardmäßig deaktiviert. Ist diese Option aktiviert, löstDefaultTrackSelector
eine neue Trackauswahl aus, wenn sich die Renderer-Funktionen ändern.
- Fügen Sie
- Extraktoren:
- Audio:
- Es wurde ein Fehler behoben, bei dem einige Wiedergaben fehlschlagen, wenn das Tunneling aktiviert ist und
AudioProcessors
aktiv sind, z.B. beim lückenlosen Trimmen (#10847). - Opus-Frames in Ogg-Paketen in direkte Wiedergaben kapseln (Auslagerung).
- Extrapoliere die aktuelle Position während des Schlafs mit Auslaufplanung.
- Füge
Renderer.release()
undAudioSink.release()
hinzu, um die Ressourcen am Ende des Spielerlebenszyklus freizugeben. - Änderungen der Audiofunktionen in
DefaultAudioSink
anhören. Fügen Sie im Konstruktor vonDefaultAudioSink
den erforderlichen Parametercontext
hinzu, mit dem dasDefaultAudioSink
als Listener fürAudioCapabilitiesReceiver
registriert und das AttributaudioCapabilities
aktualisiert wird, wenn eine Funktionsänderung vorliegt. - Änderungen an den Audiofunktionen können über ein neues Ereignis
onAudioCapabilitiesChanged
in derAudioSink.Listener
-Schnittstelle und eine neue SchnittstelleRendererCapabilities.Listener
weitergegeben werden, dieonRendererCapabilitiesChanged
-Ereignisse auslöst. - Fügen Sie
ChannelMixingAudioProcessor
hinzu, um die Skalierung/das Mixing auf Audiokanäle anzuwenden. - Fügen Sie
DecoderDiscardReasons
einen neuen GanzzahlwertDISCARD_REASON_AUDIO_BYPASS_POSSIBLE
hinzu, um den Audiodecoder zu verwerfen, wenn der Umgehungsmodus nach Änderung der Audiofunktionen möglich ist. - Unterstützung der direkten Wiedergabe für DTS Express und DTS:X hinzufügen (#335).
- Es wurde ein Fehler behoben, bei dem einige Wiedergaben fehlschlagen, wenn das Tunneling aktiviert ist und
- Video:
- Legen Sie den
MediaCodecVideoRenderer
-Bericht alsVideoSize
mit einer Breite und Höhe von 0 fest, 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
kein Video unterstützt oder die Größe des unterstützten Videotracks noch nicht ermittelt wurde.
- Legen Sie den
- Digitale Rechteverwaltung:
- Reduzieren Sie die Sichtbarkeit mehrerer reiner interner Methoden für
DefaultDrmSession
, die nicht von außerhalb des DRM-Pakets aufgerufen werden sollen:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Reduzieren Sie die Sichtbarkeit mehrerer reiner interner Methoden für
- Muxer:
- Fügen Sie eine neue Muxer-Bibliothek hinzu, die zum Erstellen einer MP4-Containerdatei verwendet werden kann.
- IMA-Erweiterung:
- Aktivieren Sie DASH-Livestreams über mehrere Zeiträume für die dynamische Anzeigenbereitstellung. Die aktuelle Implementierung unterstützt die Suche in Livestreams noch nicht (#10912).
- Es wurde ein Fehler behoben, bei dem eine neue Anzeigengruppe in Livestreams eingefügt wird, weil die berechnete Position des Inhalts in aufeinanderfolgenden Zeiträumen geringfügig variiert.
- Sitzung:
- Fügen Sie die Hilfsmethode
MediaSession.getControllerForCurrentRequest
hinzu, um Informationen über den Controller abzurufen, der derzeit einePlayer
-Methode aufruft. - Füge
androidx.media3.session.MediaButtonReceiver
hinzu, damit Apps die Wiederaufnahme der Wiedergabe mit Medienschaltflächenereignissen implementieren können, die z. B. von einem Bluetooth-Headset (#167) gesendet werden. - Fügen Sie
MediaSession.Callback.onAddMediaItems
eine Standardimplementierung hinzu, damit die angefordertenMediaItems
anPlayer
übergeben werden können, wenn sieLocalConfiguration
haben (z.B. URI) (#282). - In der Benachrichtigungsansicht für kompakte Medien werden für Android 12 und niedriger standardmäßig die Schaltflächen „In Vorheriger springen“ und „Zum nächsten springen“ hinzugefügt (#410).
- Fügen Sie
MediaSession.Callback.onAddMediaItems
eine Standardimplementierung hinzu, damit die angefordertenMediaItems
anPlayer
übergeben werden können, wenn sieLocalConfiguration
haben (z.B. URI) (#282). - In der Benachrichtigungsansicht für kompakte Medien werden für Android 12 und niedriger standardmäßig die Schaltflächen „In Vorheriger springen“ und „Zum nächsten springen“ hinzugefügt (#410).
- Fügen Sie die Hilfsmethode
- Benutzeroberfläche:
- Fügen Sie die Nutzungsmethoden
shouldShowPlayButton
undhandlePlayPauseButtonAction
hinzu, um benutzerdefinierte UI-Elemente mit einer Schaltfläche für Wiedergabe/Pause zu schreiben.
- Fügen Sie die Nutzungsmethoden
- RTSP-Erweiterung:
- DASH-Erweiterung:
- Entfernen Sie bei DASH-Streams mit mehreren Zeiträumen den Versatz der Medienzeit aus
MediaLoadData.startTimeMs
undMediaLoadData.endTimeMs
. - Es wurde ein Fehler behoben, bei dem durch die Vorbereitung einer Live-Dash-Medienquelle mit mehreren Zeiträumen ein
IndexOutOfBoundsException
(#10838) entstanden ist.
- Entfernen Sie bei DASH-Streams mit mehreren Zeiträumen den Versatz der Medienzeit aus
- HLS-Erweiterung:
- Fügen Sie
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
hinzu, um ein Zeitlimit für den Ladevorgang vonTimestampAdjuster
festzulegen. 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
- Testdienstprogramme:
- Prüfen Sie in
DataSourceContractTest
, ob die Groß-/Kleinschreibung des URI-Schemas nicht berücksichtigt wird.
- Prüfen Sie in
- Entfernen Sie eingestellte Symbole:
- Entfernen Sie
DefaultAudioSink
-Konstruktoren und verwenden Sie stattdessenDefaultAudioSink.Builder
. - Entfernen Sie
HlsMasterPlaylist
und verwenden Sie stattdessenHlsMultivariantPlaylist
. Player.stop(boolean)
entfernen. Verwenden Sie stattdessenPlayer.stop()
undPlayer.clearMediaItems()
(wennreset
true
ist).- Entfernen Sie zwei verworfene
SimpleCache
-Konstruktoren und verwenden Sie einen nicht verworfenen Konstruktor, der stattdessen einDatabaseProvider
verwendet, um die Leistung zu verbessern. - 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 das Fehler-Logging zu verbessern. - Entfernen Sie
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
undDownloadHelper.forSmoothStreaming
. Verwenden Sie stattdessenDownloadHelper.forMediaItem
. - Entfernen Sie den verworfenen
DownloadService
-Konstruktor und verwenden Sie einen nicht verworfenen Konstruktor, der die Option zum Bereitstellen eineschannelDescriptionResourceId
-Parameters enthält. - Entfernen Sie verworfene Stringkonstanten für Charsets (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
undUTF16LE_NAME
) und verwenden Sie stattdessen Kotlin-Charsets aus demkotlin.text
-Paket, denjava.nio.charset.StandardCharsets
oder demcom.google.common.base.Charsets
. - Entfernen Sie den verworfenen Konstruktor
WorkManagerScheduler
. Verwenden Sie stattdessen einen nicht verworfenen Konstruktor, der die Option zum Bereitstellen einesContext
-Parameters enthält. - Entfernen Sie die verworfenen Methoden
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
undcreateSampleFormat
, mit denen die KlasseFormat
instanziiert wurde. Verwenden Sie stattdessenFormat.Builder
, um Instanzen vonFormat
zu erstellen. - Entfernen Sie die verworfenen Methoden
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
undcopyWithVideoSize
. Verwenden Sie stattdessen die MethodenFormat.buildUpon()
und Setter. - Die Einstellung „
ExoPlayer.retry()
“ wurde entfernt. Verwende stattdessen „prepare()
“. - Entfernen Sie den verworfenen Zero-arg
DefaultTrackSelector
-Konstruktor. Verwenden Sie stattdessenDefaultTrackSelector(Context)
. - Entfernen Sie den verworfenen
OfflineLicenseHelper
-Konstruktor. Verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Entfernen Sie den verworfenen
DownloadManager
-Konstruktor. Verwenden Sie stattdessen den Konstruktor, der einenExecutor
annimmt. - Entfernen Sie verworfene
Cue
-Konstruktoren. Verwenden Sie stattdessenCue.Builder
. - Entfernen Sie den verworfenen
OfflineLicenseHelper
-Konstruktor. Verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Entfernen Sie vier eingestellte
AnalyticsListener
-Methoden:onDecoderEnabled
, verwenden Sie stattdessenonAudioEnabled
und/oderonVideoEnabled
.onDecoderInitialized
, verwende stattdessenonAudioDecoderInitialized
und/oderonVideoDecoderInitialized
.onDecoderInputFormatChanged
, verwende stattdessenonAudioInputFormatChanged
und/oderonVideoInputFormatChanged
.onDecoderDisabled
, verwenden Sie stattdessenonAudioDisabled
und/oderonVideoDisabled
.
- Entfernen Sie die veralteten
Player.Listener.onSeekProcessed
undAnalyticsListener.onSeekProcessed
. Verwenden Sie stattdessenonPositionDiscontinuity
mitDISCONTINUITY_REASON_SEEK
. - Entfernen Sie
ExoPlayer.setHandleWakeLock(boolean)
und verwenden Sie stattdessensetWakeMode(int)
. - Entfernen Sie den verworfenen
DefaultLoadControl.Builder.createDefaultLoadControl()
. Verwenden Sie stattdessenbuild()
. - Entfernen Sie den verworfenen
MediaItem.PlaybackProperties
. Verwenden Sie stattdessenMediaItem.LocalConfiguration
. Das eingestellte 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 freigegeben.
Version 1.0.2 enthält diese Commits.
Diese Version entspricht der ExoPlayer 2.18.7-Version.
Dieser Release enthält die folgenden Änderungen seit der Version 1.0.1:
- Hauptbibliothek:
- Fügen Sie
Buffer.isLastSample()
hinzu. Damit wird angegeben, obBuffer
das FlagC.BUFFER_FLAG_LAST_SAMPLE
enthält. - Problem behoben, bei dem der letzte Frame möglicherweise nicht gerendert wurde, wenn das letzte Beispiel mit Frames aus der Warteschlange entfernt wurde, ohne das Beispiel am Ende des Streams zu lesen. (#11079)
- Fügen Sie
- Extraktoren:
- Beheben Sie das Parsing von H.265 SPS in MPEG-TS-Dateien. Verwenden Sie dazu die Parsing-Logik, die bereits von RTSP- und MP4-Extraktoren verwendet wurde (#303).
- Text:
- SSA: Unterstützung für UTF-16-Dateien, wenn sie mit einer Bytereihenfolgemarkierung (#319) beginnen.
- Sitzung:
- Problem behoben, bei dem die verfügbaren Befehle von
MediaController
nicht aktualisiert werden, wenn eine Verbindung mit einer Legacy-MediaSessionCompat
besteht, die ihre Aktionen aktualisiert. - Es wurde ein Fehler behoben, der verhindert hat, dass
MediaLibraryService
für einen Aufruf von der System-UI anCallback.onGetLibraryRoot
mitparams.isRecent == true
in API 30 (#355) null zurückgibt. - Speicherleck von
MediaSessionService
oderMediaLibraryService
wurde behoben (#346). - Ein Fehler wurde behoben, bei dem eine Kombination aus
Timeline
und Positionsupdate in einerMediaSession
dazu führen konnte, dass einMediaController
einIllegalStateException
auslöst.
- Problem behoben, bei dem die verfügbaren Befehle von
Version 1.0.1
18. April 2023
androidx.media3:media3-*:1.0.1
wird freigegeben.
Version 1.0.1 enthält diese Commits.
Diese Version entspricht der ExoPlayer 2.18.6-Version.
- Hauptbibliothek:
- Ziel-Livestream-Überschreibung beim Suchen zur Standardposition zurücksetzen (#11051).
- Ein Fehler wurde behoben, bei dem leere Beispielstreams in den Medien dazu führen konnten, dass die Wiedergabe hängen geblieben ist.
- Sitzung:
- Ein Fehler wurde behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
MediaSessionCompat
veröffentlicht wurden, zu einer Ausnahme inMediaController
führen (#290). - Fügen Sie dem Legacy-
MediaControllerCompat.Callback.onSessionEvent
die fehlende Weiterleitung vonMediaSession.broadcastCustomCommand
hinzu (#293). - Ein Fehler wurde behoben, bei dem durch das Aufrufen von
MediaSession.setPlayer
die verfügbaren Befehle nicht aktualisiert wurden. - Problem behoben, bei dem
TrackSelectionOverride
-Instanzen, die von einerMediaController
gesendet wurden, ignoriert werden, wenn sie auf eine Gruppe mitFormat.metadata
verweisen (#296). - Problem behoben, bei dem
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
für den Zugriff auf Metadaten über die Legacy-MediaSessionCompat
verfügbar sein muss. - Problem behoben, bei dem
MediaSession
-Instanzen in einem Hintergrundthread Abstürze verursachten, wenn sie inMediaSessionService
verwendet werden (#318). - Ein Problem wurde behoben, bei dem ein Medienschaltflächenempfänger 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:
- Umgang mit Zeitachsen für leere Segmente wurde korrigiert (#11014).
- RTSP:
- Wiederholen Sie den Vorgang mit TCP, wenn die RTSP-Einrichtung mit UDP fehlschlägt und der RTSP-Fehler 461 nicht unterstützt wird (#11069).
Version 1.0.0
22. März 2023
androidx.media3:media3-*:1.0.0
wird freigegeben.
Version 1.0.0 enthält diese Commits.
Diese Version entspricht der ExoPlayer 2.18.5-Version.
Seit 1.0.0-rc02 wurden keine Änderungen vorgenommen.
Version 1.0.0-rc02
2. März 2023
androidx.media3:media3-*:1.0.0-rc02
wird freigegeben.
Version 1.0.0-rc02 enthält diese Commits.
Diese Version entspricht der ExoPlayer 2.18.4-Version.
- Hauptbibliothek:
- Downloads:
- Die maximale Differenz der Startzeit von zwei zusammenzuführenden Segmenten darf in
SegmentDownloader
und abgeleiteten Klassen (#248) konfiguriert werden.
- Die maximale Differenz der Startzeit von zwei zusammenzuführenden Segmenten darf in
- Audio:
- Probleme bei der lückenlosen Wiedergabe von MP3-Dateien auf Samsung-Geräten beheben (#8594)
- Es wurde ein Fehler behoben, bei dem Wiedergabegeschwindigkeiten, die unmittelbar nach der Deaktivierung der Audioeinstellungen festgelegt wurden, durch eine vorherige Geschwindigkeitsänderung überschrieben werden konnten (#10882).
- Video:
- Ordnen Sie das HEVC HDR10-Format
HEVCProfileMain10HDR10
anstelle vonHEVCProfileMain10
zu. - Fügen Sie eine Umgehungslösung für ein Geräteproblem auf Chromecast mit Google TV und Lenovo M10 FHD Plus hinzu, bei dem AVC-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#10898).
- Beheben Sie Probleme mit der Frame-Release-Leistung bei der Wiedergabe von Medien mit einer Framerate, die viel höher als die Bildschirmaktualisierungsrate ist.
- Ordnen Sie das HEVC HDR10-Format
- Streamen:
- Korrigieren Sie die vorübergehende
STATE_IDLE
beim Wechsel zwischen Medienelementen (#245).
- Korrigieren Sie die vorübergehende
- RTSP:
- Mit dieser Funktion wird die Ausnahme = Ausnahme erfasst, die beim Parsen ungültiger RTSP-Antwortmeldungen ausgelöst wird (#10971).
- Sitzung:
- Ein Fehler wurde behoben, bei dem die Schaltfläche zum Wiedergeben/Pausieren von Benachrichtigungen nicht mit dem Playerstatus aktualisiert wurde (#192).
- IMA-Erweiterung:
- Ein Fehler wurde behoben, der verhindert, dass Streams für die dynamische Anzeigenbereitstellung ohne Anzeigen gestartet wurden, weil das erste
LOADED
-Ereignis (und im Fall ohne Anzeigen das einzige) Ereignis nicht empfangen wurde.
- Ein Fehler wurde behoben, der verhindert, dass Streams für die dynamische Anzeigenbereitstellung ohne Anzeigen gestartet wurden, weil das erste
Version 1.0.0-rc01
16. Februar 2023
androidx.media3:media3-*:1.0.0-rc01
wird freigegeben.
Version 1.0.0-rc01 enthält diese Commits.
Diese Version entspricht der ExoPlayer 2.18.3-Version.
- Hauptbibliothek:
- Passen Sie die Logik der Decoderreihenfolge des Renderers so an, dass die Einstellungen von
MediaCodecSelector
beibehalten werden, auch wenn ein Decoder meldet, dass die Medien möglicherweise nicht optimal wiedergegeben werden können. Bei der Standardauswahl wird beispielsweise ein Hardwaredecoder, der nur funktionale Unterstützung bietet, gegenüber einem Softwaredecoder, der das Format vollständig unterstützt (#10604), bevorzugt. - Fügen Sie
ExoPlayer.Builder.setPlaybackLooper
hinzu, mit dem ein bereits vorhandener Wiedergabe-Thread für eine neue ExoPlayer-Instanz festgelegt wird. - Löschen von Hilfsprogrammen für Download-Manager zulassen (#10776).
- Fügen Sie
BasePlayer.seekTo
einen Parameter hinzu, um auch den für die Suche verwendeten Befehl anzugeben. - Design beim Laden von Drawables in API 21 und höher verwenden (#220)
- Fügen Sie
ConcatenatingMediaSource2
hinzu, mit dem mehrere Medienelemente in einem einzelnen Fenster kombiniert werden können (#247).
- Passen Sie die Logik der Decoderreihenfolge des Renderers so an, dass die Einstellungen von
- Extraktoren:
- Lösen Sie ein
ParserException
anstelle einesNullPointerException
aus, wenn in der Beispieltabelle (stbl) beim Parsen von trak-Atomen eine erforderliche Stichprobenbeschreibung (stsd) fehlt. - Überspringen Sie keine Beispiele, wenn Sie in fMP4 direkt zu einem Synchronisierungsframe suchen (#10941).
- Lösen Sie ein
- Audio:
- Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
AudioTrack
bei direkten Wiedergaben (Passthrough) zu berechnen.
- Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
- Text:
TextRenderer
korrigiert, indem ein ungültiger (negativer) Index anSubtitle.getEventTime
übergeben wird, wenn eine Untertiteldatei keine Cues enthält.- SubRip: Unterstützung für UTF-16-Dateien, wenn sie mit einer Bytereihenfolgemarkierung beginnen.
- Metadaten:
- Parsen, wie nach ID3 v2.4 zulässig, mehrere null-getrennte Werte aus ID3-Frames
- Fügen Sie
MediaMetadata.mediaType
hinzu, um den Inhaltstyp oder den in den Metadaten beschriebenen Ordnertyp anzugeben. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordnertyp wird im nächsten Release verworfen.
- DASH:
- Vollständiges Parsen von Bildanpassungssätzen, einschließlich der Anzahl der Kacheln, hinzufügen (#3752)
- Benutzeroberfläche:
- Korrigieren Sie den verworfenen
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
, damit Änderungen an der Sichtbarkeit an den registrierten Listener übergeben werden (#229). - Korrigieren Sie die Reihenfolge der Steuerelemente des mittleren Players in
PlayerView
bei Verwendung eines Rechts-nach-links-Layouts (#227).
- Korrigieren Sie den verworfenen
- Sitzung:
- Fügen Sie das abstrakte
SimpleBasePlayer
hinzu, um diePlayer
-Schnittstelle für benutzerdefinierte Player zu implementieren. - Fügen Sie eine Hilfsmethode zum Konvertieren des Plattformsitzungstokens in Media3
SessionToken
(#171) hinzu. - Verwenden Sie
onMediaMetadataChanged
, um Updates der Plattform-Mediensitzung auszulösen (#219). - Fügen Sie die Mediensitzung als Argument von
getMediaButtons()
vonDefaultMediaNotificationProvider
hinzu und verwenden Sie zur Verdeutlichung unveränderliche Listen (#216). - Fügen Sie den Callback-Listener
onSetMediaItems
hinzu, um die Methode zum Ändern/Festlegen derMediaItem
-Liste bereitzustellen. Dabei werden Index und Position nach Sitzung gestartet, bevor der Player auf den Player gesetzt wird (#156). - Vermeiden Sie die Doppeltipperkennung bei Ereignissen, die keine Bluetooth-Medienschaltflächen sind (#233).
- Machen Sie
QueueTimeline
bei einem unsicheren Legacy-Sitzungsstatus robuster (#241).
- Fügen Sie das abstrakte
- Metadaten:
- Parsen, wie nach ID3 v2.4 zulässig, mehrere null-getrennte Werte aus ID3-Frames
- Fügen Sie
MediaMetadata.mediaType
hinzu, um den Inhaltstyp oder den in den Metadaten beschriebenen Ordnertyp anzugeben. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordnertyp wird im nächsten Release verworfen.
- Cast-Erweiterung:
- Aktualisierung des Cast SDK auf Version 21.2.0.
- IMA-Erweiterung:
- Entfernen Sie den Player-Listener von
ImaServerSideAdInsertionMediaSource
aus dem Anwendungsthread, um Threading-Probleme zu vermeiden. - Fügen Sie dem
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
das AttributfocusSkipButtonWhenAvailable
hinzu, um anzufordern, dass die Schaltfläche „Überspringen“ auf Fernsehgeräten hervorgehoben wird. Legen Sie diese Eigenschaft standardmäßig auf „true“ fest. - Fügen Sie dem
ImaServerSideAdInsertionMediaSource.AdsLoader
die MethodefocusSkipButton()
hinzu, um eine programmatische Anfrage zum Fokussieren der Schaltfläche „Überspringen“ zu senden. - Umstellung des IMA SDK auf Version 3.29.0.
- Entfernen Sie den Player-Listener von
- Demo-App:
- Fordern Sie die Berechtigung zum Herunterladen von Benachrichtigungen zur Laufzeit an (#10884).
Version 1.0.0-beta03
22. November 2022
androidx.media3:media3-*:1.0.0-beta03
wird freigegeben.
Version 1.0.0-beta03 enthält diese Commits.
Diese Version entspricht der ExoPlayer 2.18.2-Version.
- Hauptbibliothek:
- Fügen Sie
ExoPlayer.isTunnelingEnabled
hinzu, um zu prüfen, ob das Tunneling für die aktuell ausgewählten Tracks aktiviert ist (#2518). - Fügen Sie
WrappingMediaSource
hinzu, um das Umbrechen eines einzelnenMediaSource
zu vereinfachen (#7279). - Verwerfen Sie den Back-Zwischenspeicher, bevor die Wiedergabe aufgrund von nicht ausreichend verfügbarem Speicherplatz unterbrochen wird.
- Schließen Sie den Tracing-Block „doSomeWork“, wenn das Auslagern aktiviert ist.
- Beheben Sie das Problem mit dem Sitzungstracking mit schnellen Suchen in
PlaybackStatsListener
(#180). - Beim Aufrufen von
seekToNext
oderseekToPrevious
in einer Playlist mit einem einzelnen Element wird ein fehlenderonMediaItemTransition
-Callback gesendet (#10667). - Fügen Sie
Player.getSurfaceSize
hinzu. Dieser gibt die Größe der Oberfläche zurück, auf der das Video gerendert wird. - Es wurde ein Fehler behoben, bei dem das Entfernen von Listenern während der Player-Veröffentlichung zu einem
IllegalStateException
(#10758) führen kann.
- Fügen Sie
- Build:
- Erzwingen Sie mindestens
compileSdkVersion
, um Kompilierungsfehler zu vermeiden (#10684). - Vermeiden Sie den Veröffentlichungsblock, wenn er in einem anderen Gradle-Build enthalten ist.
- Erzwingen Sie mindestens
- Titelauswahl:
- Wenn das Display Dolby Vision nicht unterstützt, werden andere Titel bevorzugt. (#8944)
- Downloads:
- Behebung einer potenziellen Endlosschleife in
ProgressiveDownloader
, die durch einen gleichzeitigen Download und eine gleichzeitige Wiedergabe mit demselbenPriorityTaskManager
verursacht wurde (#10570). - Eine Downloadbenachrichtigung sofort anzeigen lassen (#183).
- Beschränken Sie parallele Downloads auf 1, um eine übermäßige Erstellung von Threads zu vermeiden (#10458).
- Behebung einer potenziellen Endlosschleife in
- Video:
- Verwende einen anderen Decoder für Dolby Vision, wenn das Display diese Funktion nicht unterstützt. (#9794)
- Audio:
- Verwenden Sie
SingleThreadExecutor
, umAudioTrack
-Instanzen freizugeben, um OutOfMemory-Fehler zu vermeiden, wenn mehrere Spieler gleichzeitig freigegeben werden (#10057). - Fügt
AudioOffloadListener.onExperimentalOffloadedPlayback
für den AudioTrack-Auslagerungsstatus hinzu. (#134) - Machen Sie
AudioTrackBufferSizeProvider
zu einer öffentlichen Schnittstelle. - Fügen Sie
ExoPlayer.setPreferredAudioDevice
hinzu, um das bevorzugte Audioausgabegerät festzulegen (#135). - Benennen Sie
androidx.media3.exoplayer.audio.AudioProcessor
inandroidx.media3.common.audio.AudioProcessor
um. - Ordnen Sie das 8-Kanal- und das 12-Kanal-Audio den Kanalmasken 7.1 und 7.1.4 unter allen Android-Versionen zu (#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üh oder synchron mit der Position des Players ausgibt.
- Digitale Rechteverwaltung:
- Um einen Fehler in der ClearKey-Implementierung von Android 13 zu umgehen, der eine nicht leere, aber ungültige Lizenz-URL zurückgibt.
- Beim Wechseln zwischen DRM-Schemas in einer Playlist (z.B. von Widevine zu ClearKey) wird der Fehler
setMediaDrmSession failed: session not opened
behoben.
- Text:
- CEA-608: Sorgen Sie dafür, dass die Dienstwechselbefehle in Feld 2 richtig verarbeitet werden (#10666).
- DASH:
- Parsen Sie
EventStream.presentationTimeOffset
aus Manifesten (#10460).
- Parsen Sie
- Benutzeroberfläche:
- Verwenden Sie die aktuellen Überschreibungen des Players gemäß den Voreinstellungen in
TrackSelectionDialogBuilder
(#10429).
- Verwenden Sie die aktuellen Überschreibungen des Players gemäß den Voreinstellungen in
- Sitzung:
- Befehle müssen immer in der richtigen Reihenfolge ausgeführt werden, auch wenn einige eine asynchrone Auflösung erfordern (#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 Benachrichtigungssymbol festzulegen. (#104) - Achten Sie darauf, dass vor dem
MediaController.release()
gesendete Befehle nicht gelöscht werden (#99). SimpleBitmapLoader
kann Bitmap ausfile://
-URIs laden (#108).- Ein Fehler wurde behoben, der verhindert, dass
MediaController
innerhalb eines Zeitraums nach einer Anzeige sucht (#122). - Wenn die Wiedergabe beendet ist, wird
MediaSessionService
im Vordergrund beendet und es wird eine Benachrichtigung angezeigt, dass die Wiedergabe des zuletzt wiedergegebenen Medienelements (#112) wieder gestartet wird. - Starten Sie keinen Dienst im Vordergrund mit einem ausstehenden Intent für das Pausieren (#167).
- Blenden Sie das Badge für die von
DefaultNotificationProvider
in API 26 und API 27 erstellte Benachrichtigung manuell aus. Bei API 28 und höher wird das Logo automatisch ausgeblendet (#131). - Ein Fehler wurde behoben, bei dem eine zweite Binder-Verbindung von einer alten MediaSession zu einem Media3-MediaController zu IllegalStateExceptions führte (#49).
- RTSP:
- IMA:
- Zeitüberschreitung beim Laden von Anzeigeninformationen, falls das IMA SDK beim Laden einer Anzeige hängen bleibt (#10510).
- Verhindern, dass Mid-Roll-Anzeigen bei der Suche zum Ende des Inhalts übersprungen werden (#10685).
- Berechnen Sie die Fensterdauer für Livestreams mit serverseitig eingefügten Anzeigen korrekt, z. B. IMA DAI (#10764).
- FFmpeg-Erweiterung:
- Fügen Sie neu erforderliche Flags hinzu, um FFmpeg-Bibliotheken mit NDK 23.1.7779620 und höher zu verknüpfen (#9933).
- AV1-Erweiterung:
- Aktualisieren Sie CMake, um Inkompatibilitäten mit den neuesten Android Studio-Releases zu vermeiden (#9933).
- Cast-Erweiterung:
- Implementieren Sie
getDeviceInfo()
, umCastPlayer
zu identifizieren, wenn Sie die Wiedergabe mit einerMediaController
steuern (#142).
- Implementieren Sie
- Transformator:
- Fügen Sie einen Muxer-Watchdog-Timer hinzu, der erkennt, wenn das Generieren eines Ausgabebeispiels zu langsam ist.
- Entfernen Sie eingestellte Symbole:
Transformer.Builder.setOutputMimeType(String)
entfernen. Diese Funktion wurde entfernt. Der MIME-Typ ist immer MP4, wenn der Standard-Muxer verwendet wird.
Version 1.0.0-beta02
21. Juli 2022
androidx.media3:media3-*:1.0.0-beta02
wird freigegeben.
Version 1.0.0-beta02 enthält diese Commits.
Diese Version entspricht der ExoPlayer 2.18.1-Version.
- Hauptbibliothek:
- Wenn Sie
ShuffleOrder
mitExoPlayer.setShuffleOrder
ändern, muss dies zu einem Aufruf vonPlayer.Listener#onTimelineChanged
mitreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
führen (#9889). - Geben Sie bei Progressive-Medien nur ausgewählte Titel an der zwischengespeicherten Position an (#10361).
- Benutzerdefinierten Logger für die gesamte ExoPlayer-Logausgabe zulassen (#9752).
- Die Implementierung von
setDataSourceFactory
inDefaultMediaSourceFactory
wurde korrigiert, das in einigen Fällen nicht funktionierte (#116).
- Wenn Sie
- Extraktoren:
- DASH:
- Parsen Sie die ClearKey-Lizenz-URL aus Manifesten (#10246).
- Benutzeroberfläche:
- Achten Sie darauf, dass TalkBack die aktuell aktive Geschwindigkeitsoption im Menü der Wiedergabesteuerung vorgibt (#10298).
- RTSP:
- Fügen Sie die Verarbeitung fragmentierter VP8-Pakete hinzu (#110).
- Leanback-Erweiterung:
- Prüfen Sie
playWhenReady
-Änderungen inLeanbackAdapter
(10420).
- Prüfen Sie
- Streamen:
Version 1.0.0-beta01
16. Juni 2022
androidx.media3:media3-*:1.0.0-beta01
wird freigegeben.
Version 1.0.0-beta01 enthält diese Commits.
Diese entspricht der Version ExoPlayer 2.18.0.
- Hauptbibliothek:
- Unterstützung für Diagnosen der Android-Plattform über
MediaMetricsManager
aktivieren. ExoPlayer leitet Wiedergabeereignisse und Leistungsdaten an die Plattform weiter, wodurch Informationen zur Systemleistung und zur Fehlerbehebung auf dem Gerät bereitgestellt werden können. Diese Daten können von Google auch erhoben werden, wenn der Nutzer des Geräts die Weitergabe von Nutzungs- und Diagnosedaten aktiviert hat. MitExoPlayer.Builder.setUsePlatformDiagnostics(false)
können Apps auf Plattformdiagnosen für ExoPlayer verzichten. - Es wurde ein Fehler behoben, bei dem Tracks bei Verwendung von
MergingMediaSource
zu oft zurückgesetzt wurden, z. B. wenn Untertitel per Sideload übertragen und während der Wiedergabe ausgewählt wurden (#10248). - Erkennung des 5G-NSA-Netzwerktyps in API 29 und 30 beenden. Bei diesen Wiedergaben wird ein 4G-Netz vorausgesetzt.
- Die Übergabe von
null
anMediaSource.Factory.setDrmSessionManagerProvider
undMediaSource.Factory.setLoadErrorHandlingPolicy
ist nicht zulässig. Instanzen vonDefaultDrmSessionManagerProvider
undDefaultLoadErrorHandlingPolicy
können bei Bedarf explizit übergeben werden. - Fügen Sie
MediaItem.RequestMetadata
hinzu, um Metadaten darzustellen, die zum Abspielen von Medien benötigt werden, wenn die genaueLocalConfiguration
nicht bekannt ist. Entfernen Sie auchMediaMetadata.mediaUrl
, da dies jetzt inRequestMetadata
enthalten ist. - Füge
Player.Command.COMMAND_SET_MEDIA_ITEM
hinzu, damit Spieler die Möglichkeit haben, einen einzelnen Gegenstand festzulegen.
- Unterstützung für Diagnosen der Android-Plattform über
- Titelauswahl:
- Vereinfachen Sie die
TrackSelectionOverrides
-Klasse inTrackSelectionParameters
und stufen SieTrackSelectionOverride
zu einer übergeordneten Klasse hoch. - Benennen Sie
TracksInfo
inTracks
undTracksInfo.TrackGroupInfo
inTracks.Group
um.Player.getCurrentTracksInfo
undPlayer.Listener.onTracksInfoChanged
wurden ebenfalls inPlayer.getCurrentTracks
undPlayer.Listener.onTracksChanged
umbenannt. Dazu gehört auch das Aufheben der Einstellung des MethodennamensPlayer.Listener.onTracksChanged
, jedoch mit anderen Parametertypen. - Ändern Sie
DefaultTrackSelector.buildUponParameters
undDefaultTrackSelector.Parameters.buildUpon
so, dassDefaultTrackSelector.Parameters.Builder
anstelle des eingestelltenDefaultTrackSelector.ParametersBuilder
zurückgegeben werden. - Fügen Sie
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
hinzu, das standardmäßig aktiviert ist. Wenn diese Option aktiviert ist, bevorzugtDefaultTrackSelector
Audiospuren, deren Kanalanzahl die Geräteausgabefunktionen nicht überschreitet. Auf Handheld-Geräten bevorzugtDefaultTrackSelector
Stereo/Mono gegenüber Mehrkanal-Audioformaten, es sei denn, das Mehrkanalformat kann Spatialisiert (Android 12L und höher) oder ein Dolby-Surround-Sound-Format sein. Auf Geräten, die die Verräumung von Audio unterstützen, überwacht derDefaultTrackSelector
außerdem Änderungen an den Spatializer-Eigenschaften und löst darauf eine neue Titelauswahl aus. Geräte mit dem UI-Modustelevision
sind von diesen Einschränkungen ausgeschlossen. Das Format mit der höchsten Kanalzahl wird bevorzugt. Zum Aktivieren dieses Features muss dieDefaultTrackSelector
-Instanz mit einerContext
erstellt werden.
- Vereinfachen Sie die
- Video:
- Benennen Sie
DummySurface
inPlaceholderSurface
um. - Füge der
MediaCodecVideoRenderer.getCodecMaxInputSize
AV1-Unterstützung hinzu.
- Benennen Sie
- Audio:
- Verwenden Sie den nicht standardmäßigen MIME-Typ des LG AC3-Audiodecoders.
- Ändern Sie den Rückgabetyp von
AudioAttributes.getAudioAttributesV21()
vonandroid.media.AudioAttributes
in eine neue Wrapper-KlasseAudioAttributesV21
, um eine langsame ART-Überprüfung für die API < 21 zu verhindern. - Fragen Sie die Plattform ab (API 29 oder höher) oder gehen Sie davon aus, dass die Anzahl der Audiocodierungskanäle für Audiopassthrough nicht mehr festgelegt ist, was bei der Chunkless-Vorbereitung für HLS erfolgt (10204).
- Konfigurieren Sie
AudioTrack
mit der KanalmaskeAudioFormat.CHANNEL_OUT_7POINT1POINT4
, wenn der Decoder 12-Kanal-PCM-Audio ausgibt (#10322.
- digitale Rechteverwaltung
- Achten Sie darauf, dass die DRM-Sitzung immer korrekt aktualisiert wird, wenn direkt nach einer Formatänderung eine Suche durchgeführt wird (10274).
- Text:
- Ändern Sie
Player.getCurrentCues()
, umCueGroup
anstelle vonList<Cue>
zurückzugeben. - SSA: Unterstützung des
OutlineColour
-Stils, wennBorderStyle == 3
(d. h.OutlineColour
den Hintergrund des Cues festlegt) (#8435) - CEA-708: Parsen Sie Daten in mehrere Dienstblöcke und ignorieren Sie Blöcke, die nicht mit der aktuell ausgewählten Dienstnummer verknüpft sind.
- Entfernt
RawCcExtractor
, das nur zur Verarbeitung eines Google-internen Untertitelformats verwendet wurde.
- Ändern Sie
- Extraktoren:
- Benutzeroberfläche:
- Korrigieren Sie die Lieferung von Ereignissen an
OnClickListener
s, die amPlayerView
festgelegt wurden, für den Fall, dassuseController=false
(#9605) gilt. Korrigieren Sie außerdem die Übermittlung von Ereignissen anOnLongClickListener
für alle Ansichtskonfigurationen. - Ein Fehler wurde behoben, bei dem eine Abfolge von Touch-Ereignissen, die den Bereich von
PlayerView
vorACTION_UP
verlassen, fälschlicherweise als Klick behandelt wurde (#9861). - Ein Problem mit der Bedienungshilfen
PlayerView
wurde behoben, bei dem durch Tippen die Wiedergabe ein- und ausgeschaltet werden konnte, anstatt die Steuerelemente auszublenden (#8627). - Schreiben Sie
TrackSelectionView
undTrackSelectionDialogBuilder
so um, dass sie mit derPlayer
-Schnittstelle statt mitExoPlayer
verwendet werden. Dadurch können die Ansichten mit anderenPlayer
-Implementierungen verwendet werden und sie sind nicht mehr vom UI-Modul abhängig vom ExoPlayer-Modul. Das ist eine funktionsgefährdende Änderung. - In der Track-Auswahl
PlayerView
werden keine erzwungenen Text-Tracks angezeigt und ein geeigneter erzwungener Text-Track ausgewählt, wenn „None“ ausgewählt ist (#9432).
- Korrigieren Sie die Lieferung von Ereignissen an
- DASH:
- Analyse der Kanalanzahl aus DTS-
AudioChannelConfiguration
-Elementen. Dadurch wird das Audio-Passthrough für DTS-Streams wieder aktiviert (#10159). - Die Übergabe von
null
anDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
ist nicht zulässig. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Analyse der Kanalanzahl aus DTS-
- HLS:
- Fallback auf die Chunk-Vorbereitung, wenn das CODECS-Attribut der Playlist den Audio-Codec nicht enthält (#10065).
- Die Übergabe von
null
anHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
undHlsMediaSource.Factory.setPlaylistTrackerFactory
ist nicht zulässig. Instanzen vonDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
oder ein Verweis aufDefaultHlsPlaylistTracker.FACTORY
können bei Bedarf explizit übergeben werden.
- Reibungsloses Streaming:
- Die Übergabe von
null
anSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
ist nicht zulässig. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Die Übergabe von
- RTSP:
- Fügen Sie den RTP-Leser für H263 hinzu (#63).
- Fügen Sie einen RTP-Leser für MPEG4 hinzu (#35).
- Fügen Sie einen RTP-Leser für HEVC hinzu (#36).
- RTP-Lesegerät für AMR hinzufügen. Derzeit werden nur nicht verschränkte Mono-Channel-AMR-Streams unterstützt. Compound AMR RTP-Nutzlast wird nicht unterstützt. (46.)
- Fügen Sie den RTP-Leser für VP8 hinzu (#47).
- Fügen Sie den RTP-Leser für WAV hinzu (Nr. 56).
- Der RTSP-Header für die Basisautorisierung wurde korrigiert. (#9544)
- Prüfen Sie die SDP-Pflichtfelder nicht mehr, da sie für ExoPlayer nicht benötigt werden (#10049).
- Die geprüfte Ausnahme wird beim Parsen des RTSP-Timings ausgelöst (#10165).
- Fügen Sie den RTP-Leser für VP9 hinzu (#47).
- Fügen Sie den RTP-Leser für OPUS hinzu (#53).
- Datenquellen:
- Benennen Sie
DummyDataSource
inPlaceholderDataSource
um. - Problemumgehung bei der Unterbrechungsverarbeitung durch OkHttp.
- Benennen Sie
- Sitzung:
- Ersetzen Sie
MediaSession.MediaItemFiller
durchMediaSession.Callback.onAddMediaItems
, um die asynchrone Auflösung von Anfragen zuzulassen. - Unterstützen Sie
setMediaItems(s)
-Methoden, wennMediaController
eine Verbindung zu einer Legacy-Mediensitzung herstellt. - Entfernen Sie
MediaController.setMediaUri
undMediaSession.Callback.onSetMediaUri
. Die gleiche Funktion kann mitMediaController.setMediaItem
undMediaSession.Callback.onAddMediaItems
erzielt werden. - Leiten Sie alte
MediaController
-Aufrufe weiter, um Medien anMediaSession.Callback.onAddMediaItems
statt anonSetMediaUri
abzuspielen. - Fügen Sie
MediaNotification.Provider
undDefaultMediaNotificationProvider
hinzu, um die Benachrichtigung anzupassen. - Füge
BitmapLoader
undSimpleBitmapLoader
hinzu, um Artwork-Bilder herunterzuladen. - Fügen Sie
MediaSession.setCustomLayout()
hinzu, um Abwärtskompatibilität mit der Legacy-Sitzung zu ermöglichen. - Fügen Sie
MediaSession.setSessionExtras()
hinzu, um Feature-Gleichheit mit der Legacy-Sitzung zu ermöglichen. - Benennen Sie
MediaSession.MediaSessionCallback
inMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
undMediaSession.Builder.setSessionCallback
insetCallback
um. - Beheben Sie NPE in
MediaControllerImplLegacy
(#59). - Informationen zur Sitzungsposition bei Zeitachsenänderungen aktualisieren(#51).
- Beheben Sie die NPE in
MediaControllerImplBase
, nachdem Sie den Controller freigegeben haben (#74).
- Ersetzen Sie
- Anzeigenwiedergabe / IMA:
- Verringern Sie die Anzeigenabfragerate von alle 100 ms auf alle 200 ms, 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 eingestellte Symbole:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
entfernen. Verwenden Sie stattdessenPlayer.Listener.onTracksChanged(Tracks)
.- Entfernen Sie
Player.getCurrentTrackGroups
undPlayer.getCurrentTrackSelections
. Verwenden Sie stattdessenPlayer.getCurrentTracks
. Sie können auch weiterhinExoPlayer.getCurrentTrackGroups
undExoPlayer.getCurrentTrackSelections
verwenden, diese Methoden wurden jedoch verworfen. - Entfernen Sie die
DownloadHelper
-KonstantenDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
undDEFAULT_TRACK_SELECTOR_PARAMETERS
. Verwenden Sie nach Möglichkeit stattdessengetDefaultTrackSelectorParameters(Context)
und andernfallsDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Entfernen Sie den Konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Verwende stattdessenDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. Transformer.Builder.setContext
entfernen. DieContext
sollte stattdessen an denTransformer.Builder
-Konstruktor übergeben werden.
Version 1.0.0-alpha03
14. März 2022
androidx.media3:media3-*:1.0.0-alpha03
wird freigegeben.
Version 1.0.0-alpha03 enthält diese Commits.
Diese entspricht der Version ExoPlayer 2.17.1.
- Audio:
- Fehler beim Prüfen der Audiofunktionen für Dolby Atmos (E-AC3-JOC) in HLS behoben
- Extraktoren:
- FMP4: Ein Problem wurde behoben, bei dem Beispielmetadaten von E-Mails in der falschen Reihenfolge für Streams ausgegeben wurden, die E-msg-Atome v0 und v1 enthalten (#9996).
- Text:
- Korrigieren 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).
- Korrigieren Sie die Interaktion von
- Anzeigenwiedergabe:
- Probleme mit Unterauslieferungen zwischen Anzeigenzeiträumen in Live-HLS-SSAI-Streams beheben
Version 1.0.0-alpha02
2. März 2022
androidx.media3:media3-*:1.0.0-alpha02
wird freigegeben.
Version 1.0.0-alpha02 enthält diese Commits.
Diese entspricht der Version ExoPlayer 2.17.0.
- Hauptbibliothek:
- Fügen Sie die geschützte Methode
DefaultRenderersFactory.getCodecAdapterFactory()
hinzu, damit abgeleitete Klassen vonDefaultRenderersFactory
, diebuildVideoRenderers()
oderbuildAudioRenderers()
überschreiben, auf die Codec-Adapter-Factory zugreifen und sie an die von ihnen erstelltenMediaCodecRenderer
-Instanzen übergeben können. - Leiten Sie die ICY-Headerfelder
name
undgenre
anMediaMetadata.station
bzw.MediaMetadata.genre
weiter, sodass sie die App überPlayer.Listener.onMediaMetadataChanged()
erreichen (#9677). - Null-Schlüssel aus
DefaultHttpDataSource#getResponseHeaders
entfernen. - Ruhemodus und neuer Versuch, wenn das Erstellen einer
MediaCodec
-Instanz fehlschlägt. Dadurch wird ein Problem umgangen, das auf einigen Geräten auftritt, wenn eine Oberfläche von einem sicheren Codec zu einem anderen Codec wechselt (#8696). - Fügen Sie
MediaCodecAdapter.getMetrics()
hinzu, damit Nutzer Messwertdaten ausMediaCodec
abrufen können. (#9766) - Beheben Sie Probleme mit der Maven-Abhängigkeit (#8353).
- Deaktivieren Sie die automatische Geschwindigkeitsanpassung für Livestreams, die weder Funktionen mit niedriger Latenz noch eine Nutzeranfrage zum Festlegen der Geschwindigkeit haben (#9329).
- Benennen Sie
DecoderCounters#inputBufferCount
inqueuedInputBufferCount
um. SimpleExoPlayer.renderers
als privat festlegen. Auf Renderer kann überExoPlayer.getRenderer
zugegriffen werden.- Einige konstante Werte für
AnalyticsListener.EventFlags
wurden aktualisiert, damit sie mit den Werten inPlayer.EventFlags
übereinstimmen. - Teilen Sie
AnalyticsCollector
in eine Schnittstelle und eine Standardimplementierung auf, damit sie von R8 entfernt werden kann, wenn eine Anwendung sie nicht benötigt.
- Fügen Sie die geschützte Methode
- Titelauswahl:
- Bei der Trackauswahl werden Flags für bevorzugte Videorollen unterstützt (#9402).
- Aktualisieren Sie die Auswahllogik für die Videotrack-Auswahl, um bevorzugte MIME-Typen und Rollen-Flags zu berücksichtigen, wenn Sie mehrere Videotracks zur Anpassung auswählen (#9519).
- Aktualisieren Sie die Auswahllogik für die Video- und Audiotrackauswahl, damit nur Formate für die adaptive Auswahl verwendet werden, die dieselbe Decodierer- und Hardwareunterstützung haben (#9565).
- Aktualisieren Sie die Logik zur Auswahl von Videospuren, um effizientere Codecs zu bevorzugen, wenn mehrere Codecs von primären, hardwarebeschleunigten Decodern unterstützt werden (#4835).
- Bevorzugen Sie Einstellungen für Audioinhalte (z. B. den „Standard“-Audiotrack oder einen Track, der der Sprache des Systems entspricht) oder welche Einschränkungen bei der Auswahl technischer Tracks verwendet werden sollen (z. B. bevorzugter MIME-Typ oder maximale Kanalanzahl).
- Ein Problem mit der Trackauswahl wurde behoben, bei dem durch das Überschreiben einer Trackgruppe keine anderen Trackgruppen desselben Typs deaktiviert wurden (#9675).
- Problem bei der Trackauswahl behoben, bei dem eine Mischung aus Überschreibungen von nicht leeren und leeren Tracks nicht korrekt angewendet wurde (#9649)
- Doppelte
TrackGroup
s inTrackGroupArray
sind nicht zulässig.TrackGroup
s können immer unterscheidbar gemacht werden, indem imTrackGroup
-Konstruktor einid
festgelegt wird. Dadurch wird ein Absturz behoben, der bei der Fortsetzung der Wiedergabe nach dem Aktivieren der App im Hintergrund mit einer aktiven Track-Überschreibung (#9718) auftritt. - Ändere die Logik in
AdaptiveTrackSelection
, um eine Qualitätserhöhung bei ausreichender Netzwerkbandbreite auch dann zu ermöglichen, wenn die Wiedergabe sehr nah am Live-Edge liegt (#9784).
- Video:
- Korrigieren Sie die Fallback-Logik für Dolby Vision, damit bei Bedarf ein kompatibler H264/H265-Decoder verwendet wird.
- Audio:
- Korrigieren Sie die Fallback-Logik für Dolby Atmos (E-AC3-JOC), damit bei Bedarf ein kompatibler E-AC3-Decoder verwendet wird.
- Ändern Sie die
AudioCapabilities
APIs, sodass stattnull
explizitAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
übergeben werden muss. - Ermöglichen Sie die Anpassung der Berechnung der Zwischenspeichergröße von
AudioTrack
, indem Sie einAudioTrackBufferSizeProvider
inDefaultAudioSink
einschleusen. (#8891) - Wiederholen Sie die Erstellung von
AudioTrack
, wenn die angeforderte Puffergröße größer als 1 MB war. (#9712)
- Extraktoren:
- Text:
- Fügen Sie das Feld
MediaItem.SubtitleConfiguration.id
hinzu, das an das FeldFormat.id
des in der Konfiguration erstellten Untertitel-Tracks weitergegeben wird (#9673). - Basisunterstützung für WebVTT-Untertitel in Matroska-Containern hinzufügen (#9886)
- Verhindern, dass
Cea708Decoder
mehr als die deklarierte Größe eines Dienstblocks liest.
- Fügen Sie das Feld
- Digitale Rechteverwaltung:
playbackLooper
ausDrmSessionManager.(pre)acquireSession
entfernen. Wenn eineDrmSessionManager
von einer Anwendung in einer benutzerdefiniertenMediaSource
verwendet wird, muss derplaybackLooper
stattdessen anDrmSessionManager.setPlayer
übergeben werden.
- Anzeigenwiedergabe / IMA:
- Unterstützung für die dynamische Anzeigenbereitstellung von IMA (IMA) (#8213) wurde hinzugefügt.
- Fügen Sie
AdPlaybackState
eine Methode hinzu, um das Zurücksetzen einer Anzeigengruppe zur erneuten Wiedergabe zu ermöglichen (#9615). - Wiedergabegeschwindigkeit von 1,0 während der Anzeigenwiedergabe erzwingen (#9018)
- Ein Problem wurde behoben, bei dem eine nicht geladene Anzeigengruppe dazu führte, dass die Wiedergabe sofort zurückgesetzt wurde (#9929).
- Benutzeroberfläche:
- DASH:
- Fügen Sie dem
Representation
geparste wichtige und ergänzende Properties hinzu (#9579). - Unterstützen Sie die Track-Rolle
forced-subtitle
(#9727). - Die Track-Rolle
main
nicht mehr alsC.SELECTION_FLAG_DEFAULT
interpretieren. - Die Basis-URL-Ausschlusslogik für Manifeste, die den DVB-Namespace nicht deklarieren, wurde korrigiert (#9856).
- Unterstützung relativer
MPD.Location
-URLs (#9939).
- Fügen Sie dem
- HLS:
- Für HLS-Streams vom Typ „Nur Audio“ muss
Format.label
korrekt ausgefüllt werden (#9608). - Standardmäßig erfolgt die Vorbereitung ohne Blöcke, um die Startzeit zu verkürzen. Falls Ihre Wiedergaben gemuxte Untertitelspuren enthalten, die nicht in der Masterplaylist deklariert sind, sollten Sie sie der Masterplaylist hinzufügen, damit sie für die Wiedergabe zur Verfügung stehen, oder die Chunkless-Vorbereitung mit
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
deaktivieren. - Unterstützung der genauen Keyframe-Suche in HLS (#2882).
- Für HLS-Streams vom Typ „Nur Audio“ muss
- RTSP:
- Geben Sie eine Client-API an, um den
SocketFactory
zu überschreiben, der für eine Serververbindung verwendet wird (#9606). - Bevorzugen Sie die Authentifizierungsmethode DIGEST gegenüber BASIC, wenn beide Methoden vorhanden sind (#9800).
- Verarbeiten, wenn kein RTSP-Track-Timing verfügbar ist (#9775)
- Ignorieren Sie ungültige RTP-Info-Header-Werte (#9619).
- Geben Sie eine Client-API an, um den
- Transformator:
- Erforderliche API-Mindestversion auf 21 erhöhen.
TransformationException
wird jetzt zum Beschreiben von Fehlern verwendet, die während einer Transformation auftreten.- Fügen Sie
TransformationRequest
hinzu, um die Transformationsoptionen anzugeben. - Registrierung mehrerer Listener zulassen.
- Problem behoben, bei dem der Transformer hängen bleibt, wenn die Codec-Ausgabe teilweise gelesen wird.
- Korrigieren Sie die potenzielle NPE in
Transformer.getProgress
, wenn Sie die Muxer-Würfe freigeben. - Fügen Sie eine Demo-App zum Anwenden von Transformationen hinzu.
- MediaSession-Erweiterung:
- Standardmäßig löscht
MediaSessionConnector
die Playlist jetzt beim Beenden. Apps, die die Playlist beibehalten möchten, könnensetClearMediaItemsOnStop(false)
über den Connector aufrufen.
- Standardmäßig löscht
- Cast-Erweiterung:
- FFmpeg-Erweiterung:
- Sorgen Sie dafür, dass
build_ffmpeg.sh
von den bin-utils von LLVM und nicht von den GNUs abhängig ist (#9933).
- Sorgen Sie dafür, dass
- Kompatibilität mit Android 12:
- Führen Sie ein Upgrade der Cast-Erweiterung durch, um von
com.google.android.gms:play-services-cast-framework:20.1.0
abhängig zu sein. Frühere Versionen vonplay-services-cast-framework
sind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind. Sie stürzen beim Erstellen vonPendingIntent
s (#9528) mit einemIllegalArgumentException
ab.
- Führen Sie ein Upgrade der Cast-Erweiterung durch, um von
- Entfernen Sie eingestellte Symbole:
Player.EventListener
entfernen. Verwende stattdessenPlayer.Listener
.- Entfernen Sie
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
undMediaSourceFactory#setDrmUserAgent
. Verwenden Sie stattdessenMediaSourceFactory#setDrmSessionManagerProvider
. MediaSourceFactory#setStreamKeys
entfernen. Verwenden Sie stattdessenMediaItem.Builder#setStreamKeys
.MediaSourceFactory#createMediaSource(Uri)
entfernen. Verwenden Sie stattdessenMediaSourceFactory#createMediaSource(MediaItem)
.- Entfernen Sie
setTag
ausDashMediaSource
,HlsMediaSource
undSsMediaSource
. Verwende stattdessenMediaItem.Builder#setTag
. DashMediaSource#setLivePresentationDelayMs(long, boolean)
entfernen. Verwenden SieMediaItem.Builder#setLiveConfiguration
undMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
, um das Manifest zu überschreiben, oderDashMediaSource#setFallbackTargetLiveOffsetMs
, um einen Fallback-Wert bereitzustellen.(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
entfernen. Das Deaktivieren der Thread-Erzwingung ist nicht mehr möglich.- Entfernen Sie
ActionFile
undActionFileUpgradeUtil
. Verwenden Sie ExoPlayer 2.16.1 oder älter, um mitActionFileUpgradeUtil
Legacy-Aktionsdateien mitDefaultDownloadIndex
zusammenzuführen. ProgressiveMediaSource#setExtractorsFactory
entfernen. Verwenden Sie stattdessen den KonstruktorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
.- Entfernen Sie
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 den KonstruktorDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
undDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Entfernen Sie alle öffentlichen
CronetDataSource
-Konstruktoren. Verwenden Sie stattdessenCronetDataSource.Factory
.
- Ändere die folgende
IntDefs
nur in@Target(TYPE_USE)
. Dies kann die Kompilierung der Verwendungen in Kotlin beeinträchtigen. Dies kann durch Verschieben der Annotation behoben werden, um den Typ (Int
) zu annotieren.@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(im Paketcom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(imcom.google.android.exoplayer2.extractor.flac
-Paket)@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 freigegeben.
Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Media3 ist das neue Heim für Medien-Supportbibliotheken, einschließlich ExoPlayer. Die erste Alpha enthält erste, funktionale Implementierungen von Bibliotheken zur Implementierung von Anwendungsfällen für Medien, darunter:
- ExoPlayer, ein Mediaplayer für Android auf Anwendungsebene, der einfach angepasst und erweitert werden kann.
- Mediensitzungsfunktion zum Präsentieren und Steuern von Wiedergaben Dieses neue Sitzungsmodul verwendet dieselbe
Player
-Schnittstelle wie ExoPlayer. - UI-Komponenten zum Erstellen von Benutzeroberflächen für die Medienwiedergabe
- Module, die Funktionen in andere Bibliotheken zur Verwendung mit ExoPlayer umschließen, z. B. die Anzeigenbereitstellung über das IMA SDK.
Weitere Informationen finden Sie im Media3-GitHub-Projekt.
ExoPlayer wurde zuvor in einem separaten ExoPlayer-GitHub-Projekt gehostet. Bei Media3 lautet der Paketname androidx.media3.exoplayer
. Wir planen, das ExoPlayer-GitHub-Projekt noch eine Weile zu warten und zu veröffentlichen, damit Anwendungen ausreichend Zeit für die Migration zu Media3 haben. Media3 bietet Ersatzmodule für alle ExoPlayer-Module mit Ausnahme der Legacy-Erweiterungen „media2“ und „mediasession“, die durch das neue Modul media3-session
ersetzt werden. Dies ermöglicht eine direkte Integration zwischen Playern und Mediensitzungen, ohne dass eine Adapter-/Connector-Klasse verwendet werden muss.