Media3

Bibliotheken für Medienanwendungsfälle unterstützen
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 ihre rankingData definierten Prioritäten zu koordinieren. Eine Anpassung ist durch das Erweitern dieser Klasse möglich. Fügen Sie DefaultPreloadManager hinzu, das PreloadMediaSource verwendet, um Medienproben der Quellen vorab in den Arbeitsspeicher zu laden, und eine Ganzzahl rankingData, die den Index eines Elements auf der UI angibt.
    • Binde PlayerId in die meisten Methoden von LoadControl ein, damit LoadControl-Implementierungen mehrere Spieler unterstützen können.
    • Entfernen Sie Buffer.isDecodeOnly() und C.BUFFER_FLAG_DECODE_ONLY. Dieses Flag muss nicht festgelegt werden, da Renderer und Decodierer auf Grundlage des Zeitstempels beschließen, Zwischenspeicher zu überspringen. Benutzerdefinierte Renderer-Implementierungen sollten prüfen, ob die Pufferzeit mindestens BaseRenderer.getLastResetPositionUs() beträgt, um zu entscheiden, ob ein Beispiel angezeigt werden soll. Benutzerdefinierte SimpleDecoder-Implementierungen können bei Bedarf isAtLeastOutputStartTimeUs prüfen oder andere Puffer mit DecoderOutputBuffer.shouldBeSkipped markieren, um sie zu überspringen.
    • Lassen Sie zu, dass TargetPreloadStatusControl.getTargetPreloadStatus(T) einen Nullwert zurückgibt, um anzugeben, dass ein MediaSource mit der angegebenen rankingData nicht vorab geladen werden soll.
    • remove(MediaSource) zu BasePreloadManager hinzufügen.
  • Transformator:
    • Fügen Sie audioConversionProcess und videoConversionProcess zu ExportResult 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.
  • Video:
    • Problem behoben, bei dem Listener.onRenderedFirstFrame() zu früh eintraf, wenn die Oberfläche mitten in der Wiedergabe gewechselt wurde.
  • Datenquelle:
    • Implementieren Sie die Unterstützung für android.resource://package/id-Rohressourcen-URIs, bei denen sich package 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 den DataSpec-Konstruktoren nicht null ist. Dieser Parameter wurde bereits mit dem Wert „nicht null“ annotiert.
  • Auswirkung:
    • Mehrere Geschwindigkeitsänderungen innerhalb desselben EditedMediaItem oder Composition in SpeedChangeEffect 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 Sie OverlaySettings.Builder.setOverlayFrameAnchor() verwenden, drehen Sie die entsprechenden x- und y-Werte um, indem Sie sie mit -1 multiplizieren.
  • Sitzung:
    • Ändern Sie den Standardwert von CommandButton.enabled in true 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 in onTaskRemoved() beendet werden muss (#1219).
    • Fügen Sie MediaSessionService.pauseAllPlayersAndStopSelf() hinzu, um die Wiedergabe aller Sitzungen zu pausieren und stopSelf aufzurufen, um den Lebenszyklus von MediaSessionService 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.
  • Downloads:
    • Achten Sie darauf, dass DownloadHelper keine unveröffentlichten Renderer-Instanzen verursacht, was letztendlich zum Absturz einer Anwendung mit IllegalStateException: Too many receivers, total of 1000, registered for pid (#1224) führen kann.
  • Testdienstprogramme:
    • Implementieren Sie onInit() und onRelease() in FakeRenderer.
    • Ändern Sie TestPlayerRunHelper.runUntil/playUntil-Methoden so, dass bei nicht schwerwiegenden Fehlern (z.B. Fehler, die an AnalyticsListener.onVideoCodecError gemeldet wurden) fehlschlagen. Verwenden Sie die neue Methodenkette TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX(), um dieses Verhalten zu deaktivieren.
  • Demo-App:
    • Verwende DefaultPreloadManager in der Demo-App im Kurzformat.
  • Entfernen Sie eingestellte Symbole:
    • CronetDataSourceFactory entfernen. Verwenden Sie stattdessen CronetDataSource.Factory.
    • Entfernen Sie einige DataSpec-Konstruktoren. Verwende stattdessen DataSpec.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.
  • 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ür DefaultVideoFrameProcessor.Factory.Builder.build() zu erstellen (#1187).
  • 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.
  • 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 wie XING und VBRI.
    • 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 aus WebvttParser.parse verhindern (#1177).
  • Digitale Rechteverwaltung:
    • Sie können ein NoSuchMethodError umgehen, das auf einigen Android 14-Geräten vom MediaDrm-Framework anstelle von ResourceBusyException oder NotProvisionedException ausgelöst wird (Nr. 1145).
  • Auswirkung:
    • Die Tonzuordnung von PQ zu SDR wurde durch Konvertierung von Farbräumen verbessert.
  • Sitzung:
    • Ein Problem wurde behoben, bei dem die aktuelle Position zurückspringt, wenn der Controller das aktuelle Element ersetzt (#951).
    • Problem behoben, bei dem MediaMetadata, die nur einen extras ungleich null enthält, nicht zwischen Mediencontrollern und Sitzungen übertragen wird (#1176).
  • Benutzeroberfläche:
    • Fallback, um den Namen der Audiospursprache einzubeziehen, wenn Locale keinen Anzeigenamen identifizieren kann (#988).
  • DASH-Erweiterung:
    • Füllen Sie alle Label-Elemente aus dem Manifest in Format.labels (#1054) aus.
  • 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 sich package 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 einzelnen Uri in AdPlaybackState.
    • 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 auch artworkData in MediaMetadata.Builder.populate(MediaMetadata) aus, wenn mindestens einer davon nicht null ist (#964).
  • ExoPlayer:
    • Fügen Sie PreloadMediaSource und PreloadMediaPeriod hinzu, damit Apps eine Inhaltsmedienquelle vor der Wiedergabe an einer bestimmten Startposition vorab laden können. PreloadMediaSource bereitet die Inhaltsmedienquelle auf den Empfang des Timeline 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 sie PreloadMediaSource.PreloadControl implementieren und die vorab geladene Quelle für die Wiedergabe auf den Player festlegen.
    • Fügen Sie ExoPlayer.setImageOutput hinzu, damit Apps ImageRenderer.ImageOutput festlegen können.
    • DefaultRenderersFactory stellt dem Spieler jetzt standardmäßig ein ImageRenderer mit null ImageOutput und ImageDecoder.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, ein HttpDataSource, 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 benutzerdefinierte CompositeSequenceableLoaderFactory implementieren.
    • Problem behoben, bei dem Metadaten aus diesem Element gelöscht werden, wenn dieselbe Zeit wiederholt wird (#1007).
    • Benennen Sie die experimentalSetSubtitleParserFactory-Methoden für BundledChunkExtractor.Factory und DefaultHlsExtractorFactory in setSubtitleParserFactory um und verhindern Sie die Weitergabe von null. Mit den neuen Methoden experimentalParseSubtitlesDuringExtraction(boolean) können Sie das Parsing-Verhalten steuern.
    • Unterstützung für das Anpassen der SubtitleParser.Factory während der Extraktion. Dazu können Sie MediaSource.Factory.setSubtitleParserFactory() verwenden.
    • Fügen Sie allen Format.id-Feldern, die von MergingMediaSource generiert werden, ein Quellpräfix hinzu. Damit lässt sich leichter ermitteln, welche Quelle Format (#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).
  • 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 ist false. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
  • Extraktoren:
    • Fügen Sie dem MP4-Extrahierer zusätzliches AV1C-Parsing hinzu, um die Werte ColorInfo.colorSpace, ColorInfo.colorTransfer und ColorInfo.colorRange abzurufen (#692).
    • MP3: Verwenden Sie die Suche mit der Konstanten Bitrate (CBR) für Dateien mit einem Info-Header (dem CBR-Äquivalent des Xing-Headers). Zuvor haben wir die Suchtabelle aus dem Header Info 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).
  • Audio:
    • Verbessern Sie den Algorithmus zum Überspringen von Stummschaltungen mit gleichmäßiger Lautstärkeanstiege; minimale Stilleszeit und eine natürlichere Dauer ohne Ton (#7423).
    • Die übersprungene Stille wird deterministischer gemeldet (#1035).
  • Video:
    • Ändern Sie den MediaCodecVideoRenderer-Konstruktor, der ein VideoFrameProcessor.Factory-Argument verwendet, und ersetzen Sie es durch einen Konstruktor, der ein VideoSinkProvider-Argument annimmt. Anwendungen, die einen benutzerdefinierten VideoFrameProcessor.Factory einfügen möchten, können eine CompositingVideoSinkProvider instanziieren, die den benutzerdefinierten VideoFrameProcessor.Factory verwendet und den Anbieter für Videosenken an MediaCodecVideoRenderer übergeben.
  • Text:
    • Die Serialisierung von Bitmap-Cues wurde korrigiert, um den Tried to marshall a Parcel that contained Binder objects-Fehler bei Verwendung von DefaultExtractorsFactory.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 sowohl rowLock als auch columnLock als wahr angenommen werden sollten (die columnLock-Unterstützung ist nicht implementiert, daher wird davon ausgegangen, dass sie immer falsch ist).
  • Bild:
    • Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden kurz vor der Präsentation an ImageOutput gesendet.
  • 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 oder DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys deaktiviert werden.
  • 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 eine Context anstelle einer MediaLibraryService 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).
  • 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.
  • Demo-App:
    • Füge ein Demomodul zu einer Kurzfassung hinzu, um die Verwendung von PreloadMediaSource mit dem Anwendungsfall Kurzinhalte zu demonstrieren.

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 auf min/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ür bufferedDurationUs aus Chunk-Quellen erhielten, was zu einem IllegalArgumentException (#888) führte.
  • 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).
  • Audio:
    • Die Verarbeitung von EOS für SilenceSkippingAudioProcessor bei mehrfachem Aufruf wurde korrigiert (#712).
  • 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.
  • 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.
  • Sitzung:
    • Fügen Sie die benutzerdefinierten Schlüssel und Werte in MediaMetadataCompat in MediaMetadata.extras und MediaMetadata.extras in MediaMetadataCompat 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).
  • 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.):
    • MIDI: Problem behoben, bei dem bei der Suche nach vorn die Programmänderungsereignisse übersprungen wurden (#704).
    • Migrieren Sie zu FFmpeg 6.0 und aktualisieren Sie den unterstützten NDK auf r26b (#707, #867).
  • Cast-Erweiterung:
    • Bereinigen Sie die Erstellung eines Timeline, damit die App nicht abstürzt, wenn Medien auf dem Übertragungsgerät nicht geladen werden (#708).

Version 1.2.0

15. November 2023

  • Allgemeine Bibliothek:
    • Den Methoden in der Log.Logger-Schnittstelle den Parameter @Nullable Throwable hinzufügen. Der message-Parameter für diese Methoden enthält keine Informationen mehr über die Throwable, die an die Log.{d,i,w,e}()-Methoden übergeben wurden. Daher müssen Implementierungen diese Informationen bei Bedarf manuell anhängen (möglicherweise mithilfe von Logger.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 und SimpleDecoder (#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 mit PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) oder MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213) verwaltet werden.
    • Aktualisiere androidx.annotation:annotation-experimental auf 1.3.1, um das Problem mit https://issuetracker.google.com/251172715 zu beheben.
    • Verschieben Sie ExoPlayer.setAudioAttributes zur Player-Oberfläche.
  • 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 mit Player.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 und MediaSource.updateMediaItem hinzu, um MediaItem-Aktualisierungen nach der Erstellung über Player.replaceMediaItem(s) anzunehmen.
    • MediaItem-Updates für alle MediaSource-Klassen zulassen, die von der Bibliothek über Player.replaceMediaItem(s) bereitgestellt werden (#33, #9978).
    • Benennen Sie MimeTypes.TEXT_EXOPLAYER_CUES in MimeTypes.APPLICATION_MEDIA3_CUES um.
    • Fügen Sie PngExtractor hinzu, das eine vollständige PNG-Datei als Beispiel in den TrackOutput sendet und liest.
    • Erweitern Sie die Methode SequenceableLoader.continueLoading(long) in der SequenceableLoader-Schnittstelle zu SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo enthält zusätzliche Parameter, einschließlich playbackSpeed und lastRebufferRealtimeMs zusätzlich zum vorhandenen playbackPositionUs.
    • Erweitern Sie die Methode ChunkSource.getNextChunk(long, long, List, ChunkHolder) in der ChunkSource-Schnittstelle zu ChunkSource.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 in ExperimentalBandwidthMeter (#612).
    • Fügen Sie CompositeMediaSource.getMediaTimeForChildMediaTime den Parameter MediaPeriodId hinzu.
    • Unterstützt ClippingMediaSource (und andere Quellen mit Zeitverschiebungen für Zeitraum/Fenster) in ConcatenatingMediaSource2 (#11226).
    • Ändern Sie BaseRenderer.onStreamChanged() so, dass auch ein MediaPeriodId-Argument empfangen wird.
  • Transformator:
    • Parst EXIF-Rotationsdaten für Bildeingaben.
    • Entfernen Sie den Annotationstyp TransformationRequest.HdrMode und die zugehörigen Konstanten. Verwenden Sie stattdessen Composition.HdrMode und die zugehörigen Konstanten.
    • Vereinfachen Sie die OverlaySettings, um Rotationsprobleme zu beheben.
    • Die frameRate- und durationUs-Parameter von SampleConsumer.queueInputBitmap wurden zu TimestampIterator 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 von true bei.
  • 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 zu projectionPoseRoll geändert (#461).
    • Entfernen Sie die Annahme, dass Extractor-Instanzen direkt mit instanceof überprüft werden können. Wenn Sie Laufzeitzugriff auf die Implementierungsdetails eines Extractor wünschen, müssen Sie zuerst Extractor.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 eine DefaultAudioOffloadSupportProvider bereitstellen kann. Sie gibt das neue AudioOffloadSupport zurück, das isFormatSupported, isGaplessSupported und isSpeedChangeSupported enthält.
    • Fügen Sie AudioSink.setOffloadMode() hinzu, über das die Auslagerungskonfiguration in der Audiosenke konfiguriert wird. Der Standardwert ist AudioSink.OFFLOAD_MODE_DISABLED.
    • Die Auslagerung kann über setAudioOffloadPreference in TrackSelectionParameters 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 auf AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED gesetzt ist, wählt DefaultTrackSelector 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 der DefaultRenderersFactory.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 und AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged wurde in onSleepingForOffloadChanged und onExperimentalOffloadedPlayback in onOffloadedPlayback umbenannt.
    • Verschieben Sie TrackSelectionParameters-Schnittstellen und Definitionen im Zusammenhang mit dem Audio-Offload-Modus in eine innere AudioOffloadPreferences-Klasse.
    • Füge onAudioTrackInitialized- und onAudioTrackReleased-Callbacks zu AnalyticsListener, AudioRendererEventListener und AudioSink.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).
  • Video:
    • Zulassen, dass MediaCodecVideoRenderer einen benutzerdefinierten VideoFrameProcessor.Factory verwendet.
    • Ein Fehler wurde behoben, bei dem der erste Frame nicht gerendert werden konnte, wenn der Audiostream mit negativen Zeitstempeln beginnt (#291).
  • Text:
    • ExoplayerCuesDecoder entfernen. Text-Tracks mit sampleMimeType = application/x-media3-cues werden jetzt direkt von TextRenderer verarbeitet, ohne dass eine SubtitleDecoder-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üssen VideoFrameProcessor.Listener#onInputStreamRegistered() implementieren.
    • Die frameRate- und durationUs-Parameter von VideoFrameProcessor.queueInputBitmap wurden zu TimestampIterator geändert.
  • 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 auf FOREGROUND_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 sofort notifyChildrenChanged() 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äche queue in der Benutzeroberfläche von Android Auto nicht angezeigt wird (#339).
    • Verwenden Sie standardmäßig DataSourceBitmapLoader anstelle von SimpleBitmapLoader (#271, #327).
    • Fügen Sie MediaSession.Callback.onMediaButtonEvent(Intent) hinzu, damit Apps die standardmäßige Verarbeitung von Medienschaltflächenereignissen überschreiben können.
  • Benutzeroberfläche:
    • Füge eine Player.Listener-Implementierung für Wear OS-Geräte hinzu, die die Wiedergabe durch Player.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).
  • 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ßerdem dataSync als foregroundServiceType im Manifest hinzufügen und die Berechtigung FOREGROUND_SERVICE_DATA_SYNC (#11239) hinzufügen.
  • 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).
  • 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über C.BUFFER_FLAG_DECODE_ONLY bevorzugt, die eingestellt werden.
    • Fügen Sie Decoder.setOutputStartTimeUs und SimpleDecoder.isAtLeastOutputStartTimeUs hinzu, damit Decodierer nur decodierte Samples vor der Startzeit löschen können. Diese sollte den verworfenen Buffer.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).
  • Testdienstprogramme:
    • TestExoPlayerBuilder und FakeClock 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) und TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Verwenden Sie Composition.Builder.setHdrMode(int) und übergeben Sie stattdessen Composition an Transformer.start(Composition, String).
    • Entfernen Sie die verworfene Methode DownloadNotificationHelper.buildProgressNotification. Verwenden Sie stattdessen eine nicht eingestellte Methode, die einen notMetRequirements-Parameter verwendet.

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).
  • ExoPlayer:
    • Problem in PlaybackStatsListener behoben, bei dem nach dem Löschen der Playlist falsche PlaybackStats 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).
  • Audio:
    • Es wurde ein Fehler behoben, bei dem Player.getState() beim Abspielen sehr kurzer Dateien nie zu STATE_ENDED gewechselt wurde (#538).
  • 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 in MediaSession.Callback.onConnect tun. Dazu wird ein AcceptedResultBuilder 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 einen Result gesendet hat, der dies nicht unterstützt hat, wodurch ein UnsupportedOperationException (#78) ausgelöst wurde.
    • Korrigieren Sie die Art und Weise, wie PlayerWrapper eine VolumeProviderCompat erstellt. Ermitteln Sie dazu volumeControlType sowohl über die Legacy-Befehle (COMMAND_ADJUST_DEVICE_VOLUME und COMMAND_SET_DEVICE_VOLUME) als auch über neue Befehle (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS und COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

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ür DeviceInfo 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) und setDeviceVolume(int, int)
      • increaseDeviceVolume(int) und increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) und decreaseDeviceVolume(int, int)
    • Fügen Sie FilteringMediaSource hinzu, um verfügbare Tracktypen aus einer MediaSource 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 und sid 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.
    • 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, um Effect während der Videowiedergabe zu verwenden.
    • Aktualisieren Sie SampleQueue, um sourceId als long und nicht als int zu speichern. Dadurch werden die Signaturen der öffentlichen Methoden SampleQueue.sourceId und SampleQueue.peekSourceId geändert.
    • Fügen Sie den LoadControl-Methoden shouldStartPlayback und onTracksSelected Parameter hinzu, damit diese Methoden den entsprechenden MediaPeriod 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) und BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) werden verworfen. Stattdessen kann die Variante der Methoden ohne mediaTimeOffsetUs aufgerufen werden. Beachten Sie, dass der Offset auch bei den verworfenen Varianten nicht mehr zu startTimeUs und endTimeUs der MediaLoadData-Objekte hinzugefügt wird, die vom Disponenten gesendet werden.
    • Benennen Sie ExoTrackSelection.blacklist in excludeTrack und isBlacklisted in isTrackExcluded um.
    • Ein inkonsistentes Verhalten zwischen ExoPlayer.setMediaItem(s) und addMediaItem(s) wurde behoben, wenn der Aufruf bei einer leeren Playlist erfolgte.
  • Transformator:
    • Transformer.Builder.setMediaSourceFactory(MediaSource.Factory) entfernen. Verwenden Sie stattdessen ExoPlayerAssetLoader.Factory(MediaSource.Factory) und Transformer.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 der findDecoder/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öst DefaultTrackSelector eine neue Trackauswahl aus, wenn sich die Renderer-Funktionen ändern.
  • Extraktoren:
    • Ogg: Ein Fehler bei der Suche in Dateien mit langer Dauer wurde behoben (#391).
    • FMP4: Problem behoben, bei dem TimestampAdjuster ein falsches Zeitstempel-Offset mit der Metadaten-Abtastzeit aus dem Emsg-Atom initialisiert hat (#356).
  • 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() und AudioSink.release() hinzu, um die Ressourcen am Ende des Spielerlebenszyklus freizugeben.
    • Änderungen der Audiofunktionen in DefaultAudioSink anhören. Fügen Sie im Konstruktor von DefaultAudioSink den erforderlichen Parameter context hinzu, mit dem das DefaultAudioSink als Listener für AudioCapabilitiesReceiver registriert und das Attribut audioCapabilities aktualisiert wird, wenn eine Funktionsänderung vorliegt.
    • Änderungen an den Audiofunktionen können über ein neues Ereignis onAudioCapabilitiesChanged in der AudioSink.Listener-Schnittstelle und eine neue Schnittstelle RendererCapabilities.Listener weitergegeben werden, die onRendererCapabilitiesChanged-Ereignisse auslöst.
    • Fügen Sie ChannelMixingAudioProcessor hinzu, um die Skalierung/das Mixing auf Audiokanäle anzuwenden.
    • Fügen Sie DecoderDiscardReasons einen neuen Ganzzahlwert DISCARD_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).
  • Video:
    • Legen Sie den MediaCodecVideoRenderer-Bericht als VideoSize mit einer Breite und Höhe von 0 fest, wenn der Renderer deaktiviert ist. Player.Listener.onVideoSizeChanged wird entsprechend aufgerufen, wenn sich Player.getVideoSize() ändert. Durch diese Änderung hat die Videogröße von ExoPlayer mit MediaCodecVideoRenderer eine Breite und Höhe von 0, wenn Player.getCurrentTracks kein Video unterstützt oder die Größe des unterstützten Videotracks noch nicht ermittelt wurde.
  • 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)
  • 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 eine Player-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 angeforderten MediaItems an Player übergeben werden können, wenn sie LocalConfiguration 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 angeforderten MediaItems an Player übergeben werden können, wenn sie LocalConfiguration 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).
  • Benutzeroberfläche:
    • Fügen Sie die Nutzungsmethoden shouldShowPlayButton und handlePlayPauseButtonAction hinzu, um benutzerdefinierte UI-Elemente mit einer Schaltfläche für Wiedergabe/Pause zu schreiben.
  • RTSP-Erweiterung:
    • Verwenden Sie für MPEG4-LATM den Standard-ID-Wert auf Profilebene, falls dieser in der SDP-Nachricht beschreiben (#302) fehlt.
    • Verwenden Sie einen Basis-URI für die relative Pfadauflösung aus der RTSP-Sitzung, sofern im Antwortheader DESCRIBE vorhanden (#11160).
  • DASH-Erweiterung:
    • Entfernen Sie bei DASH-Streams mit mehreren Zeiträumen den Versatz der Medienzeit aus MediaLoadData.startTimeMs und MediaLoadData.endTimeMs.
    • Es wurde ein Fehler behoben, bei dem durch die Vorbereitung einer Live-Dash-Medienquelle mit mehreren Zeiträumen ein IndexOutOfBoundsException (#10838) entstanden ist.
  • HLS-Erweiterung:
    • Fügen Sie HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) hinzu, um ein Zeitlimit für den Ladevorgang von TimestampAdjuster festzulegen. Wenn die Initialisierung nicht vor dem Zeitlimit abgeschlossen wird, wird ein PlaybackException ausgelöst, um zu verhindern, dass die Wiedergabe endlos verzögert wird. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
  • Testdienstprogramme:
    • Prüfen Sie in DataSourceContractTest, ob die Groß-/Kleinschreibung des URI-Schemas nicht berücksichtigt wird.
  • Entfernen Sie eingestellte Symbole:
    • Entfernen Sie DefaultAudioSink-Konstruktoren und verwenden Sie stattdessen DefaultAudioSink.Builder.
    • Entfernen Sie HlsMasterPlaylist und verwenden Sie stattdessen HlsMultivariantPlaylist.
    • Player.stop(boolean) entfernen. Verwenden Sie stattdessen Player.stop() und Player.clearMediaItems() (wenn reset true ist).
    • Entfernen Sie zwei verworfene SimpleCache-Konstruktoren und verwenden Sie einen nicht verworfenen Konstruktor, der stattdessen ein DatabaseProvider verwendet, um die Leistung zu verbessern.
    • Entfernen Sie den DefaultBandwidthMeter-Konstruktor und verwenden Sie stattdessen DefaultBandwidthMeter.Builder.
    • Entfernen Sie DefaultDrmSessionManager-Konstruktoren und verwenden Sie stattdessen DefaultDrmSessionManager.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 und DownloadHelper.forSmoothStreaming. Verwenden Sie stattdessen DownloadHelper.forMediaItem.
    • Entfernen Sie den verworfenen DownloadService-Konstruktor und verwenden Sie einen nicht verworfenen Konstruktor, der die Option zum Bereitstellen eines channelDescriptionResourceId-Parameters enthält.
    • Entfernen Sie verworfene Stringkonstanten für Charsets (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME und UTF16LE_NAME) und verwenden Sie stattdessen Kotlin-Charsets aus dem kotlin.text-Paket, den java.nio.charset.StandardCharsets oder dem com.google.common.base.Charsets.
    • Entfernen Sie den verworfenen Konstruktor WorkManagerScheduler. Verwenden Sie stattdessen einen nicht verworfenen Konstruktor, der die Option zum Bereitstellen eines Context-Parameters enthält.
    • Entfernen Sie die verworfenen Methoden createVideoSampleFormat, createAudioSampleFormat, createContainerFormat und createSampleFormat, mit denen die Klasse Format instanziiert wurde. Verwenden Sie stattdessen Format.Builder, um Instanzen von Format zu erstellen.
    • Entfernen Sie die verworfenen Methoden copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate und copyWithVideoSize. Verwenden Sie stattdessen die Methoden Format.buildUpon() und Setter.
    • Die Einstellung „ExoPlayer.retry()“ wurde entfernt. Verwende stattdessen „prepare()“.
    • Entfernen Sie den verworfenen Zero-arg DefaultTrackSelector-Konstruktor. Verwenden Sie stattdessen DefaultTrackSelector(Context).
    • Entfernen Sie den verworfenen OfflineLicenseHelper-Konstruktor. Verwenden Sie stattdessen OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Entfernen Sie den verworfenen DownloadManager-Konstruktor. Verwenden Sie stattdessen den Konstruktor, der einen Executor annimmt.
    • Entfernen Sie verworfene Cue-Konstruktoren. Verwenden Sie stattdessen Cue.Builder.
    • Entfernen Sie den verworfenen OfflineLicenseHelper-Konstruktor. Verwenden Sie stattdessen OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Entfernen Sie vier eingestellte AnalyticsListener-Methoden:
      • onDecoderEnabled, verwenden Sie stattdessen onAudioEnabled und/oder onVideoEnabled.
      • onDecoderInitialized, verwende stattdessen onAudioDecoderInitialized und/oder onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, verwende stattdessen onAudioInputFormatChanged und/oder onVideoInputFormatChanged.
      • onDecoderDisabled, verwenden Sie stattdessen onAudioDisabled und/oder onVideoDisabled.
    • Entfernen Sie die veralteten Player.Listener.onSeekProcessed und AnalyticsListener.onSeekProcessed. Verwenden Sie stattdessen onPositionDiscontinuity mit DISCONTINUITY_REASON_SEEK.
    • Entfernen Sie ExoPlayer.setHandleWakeLock(boolean) und verwenden Sie stattdessen setWakeMode(int).
    • Entfernen Sie den verworfenen DefaultLoadControl.Builder.createDefaultLoadControl(). Verwenden Sie stattdessen build().
    • Entfernen Sie den verworfenen MediaItem.PlaybackProperties. Verwenden Sie stattdessen MediaItem.LocalConfiguration. Das eingestellte Feld MediaItem.playbackProperties hat jetzt den Typ MediaItem.LocalConfiguration.

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, ob Buffer das Flag C.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)
  • 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 an Callback.onGetLibraryRoot mit params.isRecent == true in API 30 (#355) null zurückgibt.
    • Speicherleck von MediaSessionService oder MediaLibraryService wurde behoben (#346).
    • Ein Fehler wurde behoben, bei dem eine Kombination aus Timeline und Positionsupdate in einer MediaSession dazu führen konnte, dass ein MediaController ein IllegalStateException auslöst.

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 in MediaController führen (#290).
    • Fügen Sie dem Legacy-MediaControllerCompat.Callback.onSessionEvent die fehlende Weiterleitung von MediaSession.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 einer MediaController gesendet wurden, ignoriert werden, wenn sie auf eine Gruppe mit Format.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 in MediaSessionService 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).
  • 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:
    • Fehler bei der Erkennung des Netzwerktyps in API 33 beheben (#10970)
    • Beheben Sie NullPointerException beim Aufrufen von ExoPlayer.isTunnelingEnabled (#10977).
  • Downloads:
    • Die maximale Differenz der Startzeit von zwei zusammenzuführenden Segmenten darf in SegmentDownloader und abgeleiteten Klassen (#248) konfiguriert werden.
  • 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 von HEVCProfileMain10 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.
  • Streamen:
    • Korrigieren Sie die vorübergehende STATE_IDLE beim Wechsel zwischen Medienelementen (#245).
  • 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.

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).
  • Extraktoren:
    • Lösen Sie ein ParserException anstelle eines NullPointerException 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).
  • Audio:
    • Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für AudioTrack bei direkten Wiedergaben (Passthrough) zu berechnen.
  • Text:
    • TextRenderer korrigiert, indem ein ungültiger (negativer) Index an Subtitle.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ür MediaMetadata.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).
  • Sitzung:
    • Fügen Sie das abstrakte SimpleBasePlayer hinzu, um die Player-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() von DefaultMediaNotificationProvider hinzu und verwenden Sie zur Verdeutlichung unveränderliche Listen (#216).
    • Fügen Sie den Callback-Listener onSetMediaItems hinzu, um die Methode zum Ändern/Festlegen der MediaItem-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).
  • 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ür MediaMetadata.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 Attribut focusSkipButtonWhenAvailable 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 Methode focusSkipButton() hinzu, um eine programmatische Anfrage zum Fokussieren der Schaltfläche „Überspringen“ zu senden.
    • Umstellung des IMA SDK auf Version 3.29.0.
  • 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 einzelnen MediaSource 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 oder seekToPrevious in einer Playlist mit einem einzelnen Element wird ein fehlender onMediaItemTransition-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.
  • Build:
    • Erzwingen Sie mindestens compileSdkVersion, um Kompilierungsfehler zu vermeiden (#10684).
    • Vermeiden Sie den Veröffentlichungsblock, wenn er in einem anderen Gradle-Build enthalten ist.
  • 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 demselben PriorityTaskManager 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).
  • Video:
    • Verwende einen anderen Decoder für Dolby Vision, wenn das Display diese Funktion nicht unterstützt. (#9794)
  • Audio:
    • Verwenden Sie SingleThreadExecutor, um AudioTrack-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 in androidx.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).
  • Metadaten:
    • MetadataRenderer kann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstellen Sie eine Instanz mit MetadataRenderer(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).
  • Benutzeroberfläche:
    • Verwenden Sie die aktuellen Überschreibungen des Players gemäß den Voreinstellungen in TrackSelectionDialogBuilder (#10429).
  • 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, um DefaultMediaNotificationProvider-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 Methode DefaultMediaNotificationProvider.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 aus file://-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:
    • Fügen Sie die Verarbeitung fragmentierter H263-Pakete hinzu (#119).
    • Unterstützung für MP4A-LATM (#162) hinzufügen
  • 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(), um CastPlayer zu identifizieren, wenn Sie die Wiedergabe mit einer MediaController steuern (#142).
  • 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 mit ExoPlayer.setShuffleOrder ändern, muss dies zu einem Aufruf von Player.Listener#onTimelineChanged mit reason=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 in DefaultMediaSourceFactory wurde korrigiert, das in einigen Fällen nicht funktionierte (#116).
  • Extraktoren:
    • Das Parsen von H265-Kurzzeit-Referenzbildsätzen wurde korrigiert (#10316).
    • Das Parsen von Bitraten aus esds-Feldern wurde korrigiert (#10381).
  • 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 in LeanbackAdapter (10420).
  • Streamen:
    • Verwende den MediaItem, der an die Playlist-Methoden als Window.mediaItem in CastTimeline übergeben wurde (#25, #8212).
    • Unterstützen Sie Player.getMetadata() und Listener.onMediaMetadataChanged() mit CastPlayer (#25).

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. Mit ExoPlayer.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 an MediaSource.Factory.setDrmSessionManagerProvider und MediaSource.Factory.setLoadErrorHandlingPolicy ist nicht zulässig. Instanzen von DefaultDrmSessionManagerProvider und DefaultLoadErrorHandlingPolicy 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 genaue LocalConfiguration nicht bekannt ist. Entfernen Sie auch MediaMetadata.mediaUrl, da dies jetzt in RequestMetadata enthalten ist.
    • Füge Player.Command.COMMAND_SET_MEDIA_ITEM hinzu, damit Spieler die Möglichkeit haben, einen einzelnen Gegenstand festzulegen.
  • Titelauswahl:
    • Vereinfachen Sie die TrackSelectionOverrides-Klasse in TrackSelectionParameters und stufen Sie TrackSelectionOverride zu einer übergeordneten Klasse hoch.
    • Benennen Sie TracksInfo in Tracks und TracksInfo.TrackGroupInfo in Tracks.Group um. Player.getCurrentTracksInfo und Player.Listener.onTracksInfoChanged wurden ebenfalls in Player.getCurrentTracks und Player.Listener.onTracksChanged umbenannt. Dazu gehört auch das Aufheben der Einstellung des Methodennamens Player.Listener.onTracksChanged, jedoch mit anderen Parametertypen.
    • Ändern Sie DefaultTrackSelector.buildUponParameters und DefaultTrackSelector.Parameters.buildUpon so, dass DefaultTrackSelector.Parameters.Builder anstelle des eingestellten DefaultTrackSelector.ParametersBuilder zurückgegeben werden.
    • Fügen Sie DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities hinzu, das standardmäßig aktiviert ist. Wenn diese Option aktiviert ist, bevorzugt DefaultTrackSelector Audiospuren, deren Kanalanzahl die Geräteausgabefunktionen nicht überschreitet. Auf Handheld-Geräten bevorzugt DefaultTrackSelector 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 der DefaultTrackSelector außerdem Änderungen an den Spatializer-Eigenschaften und löst darauf eine neue Titelauswahl aus. Geräte mit dem UI-Modus television sind von diesen Einschränkungen ausgeschlossen. Das Format mit der höchsten Kanalzahl wird bevorzugt. Zum Aktivieren dieses Features muss die DefaultTrackSelector-Instanz mit einer Context erstellt werden.
  • Video:
    • Benennen Sie DummySurface in PlaceholderSurface um.
    • Füge der MediaCodecVideoRenderer.getCodecMaxInputSize AV1-Unterstützung hinzu.
  • Audio:
    • Verwenden Sie den nicht standardmäßigen MIME-Typ des LG AC3-Audiodecoders.
    • Ändern Sie den Rückgabetyp von AudioAttributes.getAudioAttributesV21() von android.media.AudioAttributes in eine neue Wrapper-Klasse AudioAttributesV21, 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 Kanalmaske AudioFormat.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(), um CueGroup anstelle von List<Cue> zurückzugeben.
    • SSA: Unterstützung des OutlineColour-Stils, wenn BorderStyle == 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.
  • Extraktoren:
    • AVI-Unterstützung hinzugefügt (#2092).
    • Matroska: Parst DiscardPadding nach Opus-Tracks.
    • MP4: Bitraten aus esds-Boxen parsen.
    • Ogg: Doppelte Opus-ID- und Kommentarheader zulassen (#10038).
  • Benutzeroberfläche:
    • Korrigieren Sie die Lieferung von Ereignissen an OnClickListeners, die am PlayerView festgelegt wurden, für den Fall, dass useController=false (#9605) gilt. Korrigieren Sie außerdem die Übermittlung von Ereignissen an OnLongClickListener für alle Ansichtskonfigurationen.
    • Ein Fehler wurde behoben, bei dem eine Abfolge von Touch-Ereignissen, die den Bereich von PlayerView vor ACTION_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 und TrackSelectionDialogBuilder so um, dass sie mit der Player-Schnittstelle statt mit ExoPlayer verwendet werden. Dadurch können die Ansichten mit anderen Player-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).
  • DASH:
    • Analyse der Kanalanzahl aus DTS-AudioChannelConfiguration-Elementen. Dadurch wird das Audio-Passthrough für DTS-Streams wieder aktiviert (#10159).
    • Die Übergabe von null an DashMediaSource.Factory.setCompositeSequenceableLoaderFactory ist nicht zulässig. Instanzen von DefaultCompositeSequenceableLoaderFactory können bei Bedarf explizit übergeben werden.
  • HLS:
    • Fallback auf die Chunk-Vorbereitung, wenn das CODECS-Attribut der Playlist den Audio-Codec nicht enthält (#10065).
    • Die Übergabe von null an HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory und HlsMediaSource.Factory.setPlaylistTrackerFactory ist nicht zulässig. Instanzen von DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory oder ein Verweis auf DefaultHlsPlaylistTracker.FACTORY können bei Bedarf explizit übergeben werden.
  • Reibungsloses Streaming:
    • Die Übergabe von null an SsMediaSource.Factory.setCompositeSequenceableLoaderFactory ist nicht zulässig. Instanzen von DefaultCompositeSequenceableLoaderFactory können bei Bedarf explizit übergeben werden.
  • 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 in PlaceholderDataSource um.
    • Problemumgehung bei der Unterbrechungsverarbeitung durch OkHttp.
  • Sitzung:
    • Ersetzen Sie MediaSession.MediaItemFiller durch MediaSession.Callback.onAddMediaItems, um die asynchrone Auflösung von Anfragen zuzulassen.
    • Unterstützen Sie setMediaItems(s)-Methoden, wenn MediaController eine Verbindung zu einer Legacy-Mediensitzung herstellt.
    • Entfernen Sie MediaController.setMediaUri und MediaSession.Callback.onSetMediaUri. Die gleiche Funktion kann mit MediaController.setMediaItem und MediaSession.Callback.onAddMediaItems erzielt werden.
    • Leiten Sie alte MediaController-Aufrufe weiter, um Medien an MediaSession.Callback.onAddMediaItems statt an onSetMediaUri abzuspielen.
    • Fügen Sie MediaNotification.Provider und DefaultMediaNotificationProvider hinzu, um die Benachrichtigung anzupassen.
    • Füge BitmapLoader und SimpleBitmapLoader 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 in MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback in MediaLibrarySession.Callback und MediaSession.Builder.setSessionCallback in setCallback 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).
  • 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).
  • Entfernen Sie eingestellte Symbole:
    • Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray) entfernen. Verwenden Sie stattdessen Player.Listener.onTracksChanged(Tracks).
    • Entfernen Sie Player.getCurrentTrackGroups und Player.getCurrentTrackSelections. Verwenden Sie stattdessen Player.getCurrentTracks. Sie können auch weiterhin ExoPlayer.getCurrentTrackGroups und ExoPlayer.getCurrentTrackSelections verwenden, diese Methoden wurden jedoch verworfen.
    • Entfernen Sie die DownloadHelper-Konstanten DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT und DEFAULT_TRACK_SELECTOR_PARAMETERS. Verwenden Sie nach Möglichkeit stattdessen getDefaultTrackSelectorParameters(Context) und andernfalls DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • Entfernen Sie den Konstruktor DefaultTrackSelector(ExoTrackSelection.Factory). Verwende stattdessen DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Transformer.Builder.setContext entfernen. Die Context sollte stattdessen an den Transformer.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 und MediaItem.SubtitleConfiguration.Builder.setId, um das Feld SubtitleConfiguration zu priorisieren und auf den Wert Factory zurückzugreifen, wenn er nicht festgelegt ist (#10016).
  • 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 von DefaultRenderersFactory, die buildVideoRenderers() oder buildAudioRenderers() überschreiben, auf die Codec-Adapter-Factory zugreifen und sie an die von ihnen erstellten MediaCodecRenderer-Instanzen übergeben können.
    • Leiten Sie die ICY-Headerfelder name und genre an MediaMetadata.station bzw. MediaMetadata.genre weiter, sodass sie die App über Player.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 aus MediaCodec 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 in queuedInputBufferCount um.
    • SimpleExoPlayer.renderers als privat festlegen. Auf Renderer kann über ExoPlayer.getRenderer zugegriffen werden.
    • Einige konstante Werte für AnalyticsListener.EventFlags wurden aktualisiert, damit sie mit den Werten in Player.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.
  • 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 TrackGroups in TrackGroupArray sind nicht zulässig. TrackGroups können immer unterscheidbar gemacht werden, indem im TrackGroup-Konstruktor ein id 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 statt null explizit AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES übergeben werden muss.
    • Ermöglichen Sie die Anpassung der Berechnung der Zwischenspeichergröße von AudioTrack, indem Sie ein AudioTrackBufferSizeProvider in DefaultAudioSink einschleusen. (#8891)
    • Wiederholen Sie die Erstellung von AudioTrack, wenn die angeforderte Puffergröße größer als 1 MB war. (#9712)
  • Extraktoren:
    • WAV: Unterstützung für RF64-Streams hinzufügen (#9543)
    • Fehler beim Parsen von H.265 SPS NAL-Einheiten behoben (#9719).
    • Vorbis-Kommentare (einschließlich METADATA_BLOCK_PICTURE) in Ogg Opus- und Ogg Vorbis-Dateien parsen
  • Text:
    • Fügen Sie das Feld MediaItem.SubtitleConfiguration.id hinzu, das an das Feld Format.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.
  • Digitale Rechteverwaltung:
    • playbackLooper aus DrmSessionManager.(pre)acquireSession entfernen. Wenn eine DrmSessionManager von einer Anwendung in einer benutzerdefinierten MediaSource verwendet wird, muss der playbackLooper stattdessen an DrmSessionManager.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:
    • Korrigiere die Farbe der Zahlen in den StyledPlayerView-Schaltflächen zum Zurückspulen und Vorspulen, wenn du bestimmte Designs verwendest (#9765).
    • Korrekte Übersetzung der Strings für die Wiedergabegeschwindigkeit (#9811)
  • 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 als C.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).
  • 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).
  • 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).
  • 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önnen setClearMediaItemsOnStop(false) über den Connector aufrufen.
  • Cast-Erweiterung:
    • Fehlerkorrektur: CastPlayer konnte onIsPlayingChanged nicht korrekt aufrufen (#9792).
    • Unterstützen Sie Audio-Metadaten, einschließlich Artwork, mit DefaultMediaItemConverter (#9663).
  • 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).
  • 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 von play-services-cast-framework sind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind. Sie stürzen beim Erstellen von PendingIntents (#9528) mit einem IllegalArgumentException ab.
  • Entfernen Sie eingestellte Symbole:
    • Player.EventListener entfernen. Verwende stattdessen Player.Listener.
    • Entfernen Sie MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory und MediaSourceFactory#setDrmUserAgent. Verwenden Sie stattdessen MediaSourceFactory#setDrmSessionManagerProvider.
    • MediaSourceFactory#setStreamKeys entfernen. Verwenden Sie stattdessen MediaItem.Builder#setStreamKeys.
    • MediaSourceFactory#createMediaSource(Uri) entfernen. Verwenden Sie stattdessen MediaSourceFactory#createMediaSource(MediaItem).
    • Entfernen Sie setTag aus DashMediaSource, HlsMediaSource und SsMediaSource. Verwende stattdessen MediaItem.Builder#setTag.
    • DashMediaSource#setLivePresentationDelayMs(long, boolean) entfernen. Verwenden Sie MediaItem.Builder#setLiveConfiguration und MediaItem.LiveConfiguration.Builder#setTargetOffsetMs, um das Manifest zu überschreiben, oder DashMediaSource#setFallbackTargetLiveOffsetMs, um einen Fallback-Wert bereitzustellen.
    • (Simple)ExoPlayer.setThrowsWhenUsingWrongThread entfernen. Das Deaktivieren der Thread-Erzwingung ist nicht mehr möglich.
    • Entfernen Sie ActionFile und ActionFileUpgradeUtil. Verwenden Sie ExoPlayer 2.16.1 oder älter, um mit ActionFileUpgradeUtil Legacy-Aktionsdateien mit DefaultDownloadIndex zusammenzuführen.
    • ProgressiveMediaSource#setExtractorsFactory entfernen. Verwenden Sie stattdessen den Konstruktor ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • Entfernen Sie ProgressiveMediaSource.Factory#setTag und ProgressiveMediaSource.Factory#setCustomCacheKey. Verwenden Sie stattdessen MediaItem.Builder#setTag und MediaItem.Builder#setCustomCacheKey.
    • Entfernen Sie die Konstruktoren DefaultRenderersFactory(Context, @ExtensionRendererMode int) und DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Verwenden Sie stattdessen den Konstruktor DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode und DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Entfernen Sie alle öffentlichen CronetDataSource-Konstruktoren. Verwenden Sie stattdessen CronetDataSource.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 Paket com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (im com.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.