Media3
Bibliotheken für Medienanwendungsfälle unterstützen
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alphaversion
30. Oktober 2024 1.4.1 - 1.5.0-beta01 1.5.0-alpha01

Abhängigkeiten deklarieren

Wenn du eine Abhängigkeit von Media3 hinzufügen möchtest, musst du deinem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Fügen Sie der Datei build.gradle für Ihre App oder Ihr Modul die Abhängigkeiten für die erforderlichen Artefakte hinzu:

Cool

dependencies {
    def media3_version = "1.4.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"
    // Common Kotlin-specific functionality
    implementation "androidx.media3:media3-common-ktx:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.4.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")
    // Common Kotlin-specific functionality
    implementation("androidx.media3:media3-common-ktx:$media3_version")
}

Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.

Feedback

Ihr Feedback hilft uns, Jetpack zu verbessern. Im Media3-Issue-Tracker finden Sie Antworten auf Fragen, Informationen zu bekannten Problemen und Funktionsanfragen sowie die Möglichkeit, neue Probleme zu melden.

Version 1.5

Version 1.5.0-beta01

30. Oktober 2024

androidx.media3:media3-*:1.5.0-beta01 wird veröffentlicht. Version 1.5.0-beta01 enthält diese Commits.

  • Gemeinsame Bibliothek:
    • Entfernen Sie @DoNotInline-Anmerkungen aus manuell nicht ausgerichteten inneren Klassen, um Fehler bei der Laufzeitüberprüfung von Klassen zu vermeiden. Neuere Versionen von R8 führen jetzt automatisch Out-of-Line-Aufrufe wie diese aus, um Laufzeitfehler zu vermeiden (damit kein manuelles Out-Lineing mehr erforderlich ist). Alle Gradle-Nutzer der Bibliothek müssen bereits eine Version des Android Gradle-Plug-ins verwenden, die eine Version von R8 verwendet, die dies tut, aufgrund von compileSdk = 35. Nutzer der Bibliothek, die keine Gradle-Build-Systeme verwenden, müssen dafür sorgen, dass ihr R8-entsprechender Schritt zum Schrumpfen/Unkenntlichmachen einen ähnlichen automatischen Prozess zum Entfernen von Inline-Code durchführt, um Fehler bei der Laufzeitüberprüfung von Klassen zu vermeiden. Diese Änderung wurde bereits in anderen AndroidX-Bibliotheken vorgenommen.
  • ExoPlayer:
    • Es wurde behoben, dass MediaCodec.CryptoException manchmal als „unerwarteter Laufzeitfehler“ gemeldet wurde, wenn MediaCodec im asynchronen Modus ausgeführt wurde (Standardverhalten ab API 31).
    • Übergeben Sie bufferedDurationUs anstelle von bufferedPositionUs mit PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Außerdem wird DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS in DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS geändert. Apps müssen dann anstelle einer Position einen Wert für eine bestimmte Dauer ab der Standardstartposition übergeben, für die die entsprechende Medienquelle mit dieser IntDef vorab geladen werden muss.
    • Fügen Sie eine ForwardingRenderer-Implementierung hinzu, die alle Methodenaufrufe an einen anderen Renderer weiterleitet (1703).
    • Füge das Playlist-Preload für das nächste Element in der Playlist hinzu. Apps können das Vorabladen aktivieren, indem sie ExoPlayer.setPreloadConfiguration(PreloadConfiguration) entsprechend aufrufen. Das Vorabladen ist standardmäßig deaktiviert. Wenn die Funktion aktiviert ist und die Wiedergabe nicht gestört werden soll, DefaultLoadControl wird das Vorabladen so eingeschränkt, dass es gestartet und fortgesetzt wird, wenn der Player nicht für die Wiedergabe geladen wird. Apps können dieses Verhalten ändern, indem sie LoadControl.shouldContinuePreloading() entsprechend implementieren (z. B. durch Überschreiben dieser Methode in DefaultLoadControl). Bei der Standardimplementierung von LoadControl wird das Vorladen deaktiviert, wenn eine App eine benutzerdefinierte Implementierung von LoadControl verwendet.
    • Fügen Sie die Methode MediaSourceEventListener.EventDispatcher.dispatchEvent() hinzu, um das Aufrufen von Ereignissen von abgeleiteten Listenern (1736) zuzulassen.
    • Fügen Sie DefaultPreloadManager.Builder hinzu, mit dem die DefaultPreloadManager- und ExoPlayer-Instanzen mit konsistent freigegebenen Konfigurationen erstellt werden.
    • Entferne den Parameter Renderer[] aus LoadControl.onTracksSelected(), da die DefaultLoadControl-Implementierung die Streamtypen aus ExoTrackSelection[] abrufen kann.
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) wurde eingestellt und Methode als endgültig markiert, um Überschreibungen zu verhindern. Stattdessen sollte das neue DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]) verwendet werden.
    • MediaSourceEventListener-Ereignisse aus sekundären Quellen in MergingMediaSource melden Dies führt dazu, dass für nebengeladene Untertitel (mit MediaItem.LocalConfiguration.subtitleConfigurations hinzugefügt) Ereignisse zum Starten, Fehlern, Abbrechen und Abschließen des Ladevorgangs gemeldet werden. Diese können als doppelte Ladeereignisse erscheinen, die von AnalyticsListener gesendet werden.
    • Verhindern, dass Untertitel- und Metadatenfehler die Wiedergabe vollständig stoppen. Stattdessen wird der problematische Titel deaktiviert und die Wiedergabe der verbleibenden Titel wird fortgesetzt (#1722).
      • Bei der neuen Untertitelverwaltung (während der Extraktion) werden zugehörige Parse- (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über onLoadError-Callbacks ausgegeben.
      • Bei der bisherigen Untertitelverarbeitung (während des Renderings) werden nur zugehörige Ladefehler über onLoadError-Callbacks gesendet, während Parsefehler stillschweigend ignoriert werden (das ist das bisherige Verhalten).
  • Transformator:
    • Die Bilddauer muss beim Exportieren von Bildern mit MediaItem.Builder.setImageDurationMs festgelegt werden.
    • Exportunterstützung für Lücken in Sequenzen von EditedMediaItems hinzufügen
  • Titelauswahl:
    • DefaultTrackSelector: Objektbasierte Audioinhalte sollten kanalbasierten Audioinhalten vorgezogen werden, wenn alle anderen Faktoren gleich sind.
  • Extraktoren:
    • Die Verarbeitung von Pre-Roll-Samples für Medienstartpositionen, die keine keyframes sind, wurde bei der Verarbeitung von Bearbeitungslisten in MP4-Dateien korrigiert (#1659).
    • Verbesserte Berechnung der Framerate durch Verwendung der Mediendauer aus dem Feld mdhd in Mp4Extractor und FragmentedMp4Extractor (#1531).
    • Falsche Skalierung von media_time in MP4-Bearbeitungslisten korrigiert. Obwohl segment_duration bereits korrekt anhand der Filmzeitskala skaliert wurde, ist media_time jetzt korrekt anhand der Spurzeitskala skaliert, wie durch den MP4-Formatstandard (#1792) festgelegt.
    • Bei der Berechnung von endIndices für MP4-Dateien mit einer Bearbeitungsliste werden jetzt nicht in der richtigen Reihenfolge angeordnete Frames berücksichtigt (#1797).
  • Audio:
    • Pop-Sounds, die bei Suchvorgängen auftreten können, wurden korrigiert.
    • Behebung von Fehlern beim Kürzen von Audioinhalten durch den Algorithmus für Zeitdehnung und Tonhöhenänderung von Sonic.
    • Fehler in SpeedChangingAudioProcessor behoben, der zu fehlenden Ausgabeframes führte
  • Video:
    • Behelfslösung für ein Geräteproblem auf dem Galaxy Tab S7 FE hinzugefügt, durch das sichere H264-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#1619).
    • Problemumgehung für Codecs hinzugefügt, die nach dem letzten Sample hängen bleiben, ohne ein Signal zum Ende des Streams zurückzugeben.
  • Text:
    • Achten Sie darauf, dass WebVTT in HLS mit sehr großen Zeitstempeln der Untertitel angezeigt wird (die über 64-Bit-Zeitstempel long hinausgehen, wenn sie als Mikrosekunden dargestellt und mit der 90,000 MPEG-Zeitbasis multipliziert werden) (#1763).
  • Metadaten:
    • Weise den Tracks mit icy- oder vnd.dvb.ait-Inhalten den Typ C.TRACK_TYPE_METADATA zu.
  • Digitale Rechteverwaltung:
    • IllegalStateException von DefaultDrmSession.requiresSecureDecoder korrigieren, nachdem das Öffnen einer DRM-Sitzung fehlgeschlagen ist Dieses Problem wurde in 1.5.0-alpha01 eingeführt.
  • Muxer:
  • IMA-Erweiterung:
    • Es wurde ein Fehler behoben, bei dem serverseitig eingefügte Streams der dynamischen Anzeigenbereitstellung ohne Pre-Roll zu einem ArrayIndexOutOfBoundsException führen können, wenn nach der letzten Mid-Roll-Anzeige wiedergegeben wurde (#1741).
  • Sitzung:
    • Behebung eines Fehlers, durch den benutzerdefinierte Befehle, die von einem MediaBrowser gesendet wurden, bei einer Verbindung mit einem älteren Dienst an die MediaSessionCompat.Callback-Variante der Methode statt an die MediaBrowserServiceCompat-Variante gesendet wurden. Dadurch konnte MediaBrowser nicht den tatsächlichen Rückgabewert erhalten, der vom Legacy-Dienst zurückgegeben wurde (#1474).
    • Verarbeiten Sie die IllegalArgumentException, die von Geräten bestimmter Hersteller ausgegeben wird, wenn der Übertragungsempfänger für Medienschaltflächen-Intents festgelegt wird (#1730).
    • Befehlsschaltflächen für Medienelemente hinzufügen Dadurch wird die Media3 API für das, was früher Custom browse actions war, der alten Bibliothek mit MediaBrowserCompat hinzugefügt. Beachten Sie, dass mit Media3 Befehlsschaltflächen für Medienelemente sowohl für MediaBrowser als auch für MediaController verfügbar sind. Weitere Informationen finden Sie unter Benutzerdefinierte Suchaktionen von AAOS.
    • Fehler behoben, durch den ein Media3-Controller manchmal nicht zuließ, dass eine Sitzungs-App einen Dienst im Vordergrund startet, nachdem play() angefordert wurde.
    • Beschränken Sie CommandButton.Builder.setIconUri darauf, nur Inhalts-URIs zu akzeptieren.
    • Übergeben Sie Verbindungshinweise eines Media3-Browsers an die erste MediaBrowserCompat, wenn Sie eine Verbindung zu einer älteren MediaBrowserCompat herstellen. Der Dienst kann die Verbindungshinweise empfangen, die beim ersten Aufruf von onGetRoot() als Stammhinweise übergeben werden.
    • Es wurde ein Fehler behoben, bei dem ein MediaBrowser, der mit einem Legacy-Browserdienst verbunden war, keinen Fehler erhielt, der vom Dienst gesendet wurde, nachdem der Browser parentid abonniert hat.
    • Verbessern Sie das Interoperabilitätsverhalten, damit ein Media3-Browser, der mit einer Legacy-MediaBrowserService verbunden ist, die untergeordneten Elemente von parentId nicht zweimal anfordert, wenn sie ein übergeordnetes Element abonnieren.
  • UI:
    • Die Funktion zum Strecken/Zuschneiden von Videos in der PlayerView-in-Compose-AndroidView-Umgehung ist jetzt optional, da es Probleme mit XML-basierten gemeinsamen Übergängen gibt. Apps, die PlayerView in AndroidView verwenden, müssen PlayerView.setEnableComposeSurfaceSyncWorkaround aufrufen, um die Funktion zu aktivieren (#1237, #1594).
    • Füge setFullscreenButtonState zu PlayerView hinzu, um das Symbol der Vollbildschaltfläche auf Anfrage zu aktualisieren, also nicht nur bei einer Klickinteraktion (#1590, #184).
    • Es wurde ein Fehler behoben, durch den die Option „Kein“ in der Textauswahl nicht funktionierte, wenn es appdefinierte Einstellungen für die Auswahl von Untertiteln gibt.
  • Erweiterung für reibungsloses Streaming:
    • Der Fehler Bad magic number for Bundle bei der Wiedergabe von SmoothStreaming-Streams mit Texttracks wurde behoben (#1779).
  • RTSP-Erweiterung:
    • Behebung eines Problems beim Entfernen von Nutzerinformationen für URLs, die codierte @-Zeichen enthalten (#1138).
  • Decodererweiterungen (z. B. FFmpeg, VP9, AV1):
    • Unterstützung von 16-KB-Seiten für Decodererweiterungen unter Android 15 hinzugefügt (#1685).
  • Cast-Erweiterung:
    • Beenden Sie die Bereinigung der Zeitachse, nachdem die Verbindung zur CastSession getrennt wurde. Dadurch kann die Sender-App die Wiedergabe lokal fortsetzen, nachdem die Verbindung getrennt wurde.
    • Fülle das DeviceInfo von CastPlayer aus, wenn ein Context angegeben ist. So kannst du die MediaSession mit einer RoutingSession verknüpfen, was für die Einbindung des Ausgabeschalters erforderlich ist (#1056).
  • Entfernen Sie veraltete Symbole:
    • Entfernen Sie verworfene DefaultEncoderFactory-Konstruktoren. Verwenden Sie stattdessen DefaultEncoderFactory.Builder.

Version 1.5.0-alpha01

10. September 2024

Diese Version enthält die folgenden Änderungen seit der Version 1.4.1:

  • Gemeinsame Bibliothek:
    • Fügen Sie ForwardingSimpleBasePlayer hinzu, um die Weiterleitung an einen anderen Player mit kleinen Anpassungen zu ermöglichen und gleichzeitig für vollständige Konsistenz und Listener-Verarbeitung zu sorgen (#1183).
    • Ersetzen Sie SimpleBasePlayer.State.playlist durch getPlaylist()-Methode.
    • Füge eine Überschreibung für SimpleBasePlayer.State.Builder.setPlaylist() hinzu, um einen Timeline und aktuelle Tracks und Metadata direkt anzugeben, anstatt eine Playlist-Struktur zu erstellen.
    • minSdk auf 21 (Android Lollipop) erhöhen. Dies entspricht allen anderen AndroidX-Bibliotheken.
    • androidx.media3:media3-common-ktx-Artefakt hinzufügen, das Kotlin-spezifische Funktionen auf der Common Library bietet
    • Fügen Sie die Erweiterungsfunktion Player.listen hinzu, um eine Koroutine zu starten, die Player.Events in der Bibliothek media3-common-ktx überwacht.
  • ExoPlayer:
    • MediaCodecRenderer.onProcessedStreamChange() kann jetzt für jedes Medienelement aufgerufen werden. Zuvor wurde er nicht für den ersten Aufruf aufgerufen. Verwenden Sie MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart(), um diese Funktion zu aktivieren.
    • Fügen Sie PreloadMediaSource.PreloadControl.onPreloadError hinzu, damit PreloadMediaSource.PreloadControl-Implementierungen bei einem Fehler Maßnahmen ergreifen können.
    • Fügen Sie BasePreloadManager.Listener hinzu, um Preloading-Ereignisse an Apps weiterzuleiten.
    • Es ist jetzt möglich, die SNTP-Client-Zeitüberschreitung zu ändern und bei einer Zeitüberschreitung noch einmal mit alternativen Adressen zu versuchen (#1540).
    • Entfernen Sie MediaCodecAdapter.Configuration.flags, da das Feld immer null war.
    • Der Nutzer kann den integrierten Lautsprecher für die Wiedergabe unter Wear OS API 35 und höher auswählen (wenn das Gerät dies unterstützt).
    • Verschieben Sie den Blockierungsaufruf an Context.getSystemService(Context.AUDIO_SERVICE), bis die Audiofokusverwaltung aktiviert ist. Dadurch wird sichergestellt, dass der blockierende Aufruf nicht ausgeführt wird, wenn die Verarbeitung des Audiofokus nicht aktiviert ist (#1616).
    • Wiedergabe unabhängig von der Zwischenspeicherdauer zulassen, wenn das Laden fehlschlägt (#1571).
    • Fügen Sie AnalyticsListener.onRendererReadyChanged() hinzu, um zu signalisieren, dass die Wiedergabe einzelner Renderer bereit ist.
  • Transformator:
    • Füge SurfaceAssetLoader hinzu, mit dem Videodaten über einen Surface in der Warteschlange für Transformer angeordnet werden können.
    • ImageAssetLoader meldet nicht unterstützte Eingaben über AssetLoader.onError, anstatt eine IllegalStateException zu werfen.
  • Extraktoren:
    • Mit Mp4Extractor und FragmentedMp4Extractor können H264-Samples identifiziert werden, die von nachfolgenden Samples nicht als Referenz verwendet werden.
    • Option zum Aktivieren der indexbasierten Suche in AmrExtractor hinzufügen
    • MP3-Dateien mit mehr als 128 KB zwischen gültigen Frames werden als gekürzt (anstatt ungültig) behandelt. Das bedeutet, dass die Wiedergabe von Dateien mit nicht MP3-Daten am Ende, die keine anderen Metadaten zur Angabe der Länge der MP3-Byte enthalten, jetzt am Ende der MP3-Daten beendet wird, anstatt mit ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} fehlzuschlagen (#1563).
  • DataSource:
    • Aktualisieren Sie HttpEngineDataSource, um die Verwendung ab Version S mit Erweiterung 7 anstelle von API-Level 34 zuzulassen (#1262).
  • Audio:
    • Konfiguriert automatisch CTA-2075-Lautstärkemetadaten für den Codec, sofern sie in den Medien vorhanden sind.
    • Die Lautstärke muss beim Vor- und Zurückspringen stufenlos leiser werden.
  • Video:
    • MediaCodecVideoRenderer verhindert die Dekodierung von Samples, die weder gerendert noch von anderen Samples als Referenz verwendet werden.
    • Bei API 35 und höher kann MediaCodecAdapter jetzt eine null Surface in configure empfangen und eine neue Methode detachOutputSurface aufrufen, um eine zuvor festgelegte Surface zu entfernen, wenn der Codec dies unterstützt (MediaCodecInfo.detachedSurfaceSupported).
    • Verwende die von MediaCodecAdapter bereitgestellten Pixelseitenverhältniswerte, sofern vorhanden, bei der Verarbeitung von onOutputFormatChanged (#1371).
  • Text:
  • Bild:
    • Fügen Sie ExternallyLoadedImageDecoder hinzu, um die Integration mit externen Bibliotheken zum Laden von Bildern wie Glide oder Coil zu vereinfachen.
  • DataSource:
    • Fügen Sie FileDescriptorDataSource hinzu, eine neue DataSource, die zum Lesen aus einer FileDescriptor verwendet werden kann (#3757).
  • Auswirkung:
    • Problemumgehung für geringfügige SurfaceTexture-Skalierung hinzufügen.DefaultVideoFrameProcessor SurfaceTexture kann eine kleine Skalierung enthalten, die einen 1-Texel-Rand um den Rand eines zugeschnittenen Buffers abschneidet. Dies wird jetzt so verarbeitet, dass die Ausgabe näher am erwarteten Ergebnis liegt.
    • DefaultVideoFrameProcessor.queueInputBitmap() beschleunigen Dadurch ist der Export von Bildern in Videos mit Transformer schneller.
  • IMA-Erweiterung:
    • Es wurde ein Fehler behoben, bei dem das Löschen der Playlist zu einem ArrayIndexOutOfBoundsException in ImaServerSideAdInsertionMediaSource führen konnte.
  • Sitzung:
    • Füge MediaButtonReceiver.shouldStartForegroundService(Intent) hinzu, damit Apps einen Wiedergabebefehl zur Wiederaufnahme der Wiedergabe unterdrücken können, indem sie diese Methode überschreiben. Standardmäßig wird der Dienst immer gestartet und die Wiedergabe kann nicht unterdrückt werden, ohne dass das System den Dienst mit einer ForegroundServiceDidNotStartInTimeException zum Absturz bringt (#1528).
  • DASH-Erweiterung:
    • Unterstützung für Zeiträume hinzugefügt, die in der Mitte eines Segments beginnen (#1440).
  • Decodererweiterungen (FFmpeg, VP9, AV1 usw.):
    • Füge das IAMF-Dekodierungsmodul hinzu, das die Wiedergabe von MP4-Dateien mit IAMF-Tracks unterstützt. Dabei wird die native libiamf-Bibliothek verwendet, um Audio zu synthetisieren.
      • Die Wiedergabe ist mit einem Stereolayout sowie 5.1 mit Spatialisierung und optionaler Kopferfassung aktiviert. Die binaurale Wiedergabe wird derzeit nicht unterstützt.
  • Cast-Erweiterung:
    • Die Zeitachse wird nicht mehr gelöscht, nachdem die CastSession getrennt wurde. Dadurch kann die Sender-App die Wiedergabe nach einer Trennung lokal fortsetzen.
    • Fülle das DeviceInfo von CastPlayer aus, wenn ein Context angegeben ist. So kannst du die MediaSession mit einer RoutingSession verknüpfen, was für die Einbindung des Ausgabeschalters erforderlich ist (#1056).
  • Test-Dienstprogramme:
    • DataSourceContractTest enthält jetzt Tests für Folgendes:
      • Der Eingabestream read position wird aktualisiert.
      • Der Ausgabepuffer offset wird richtig angewendet.
  • Entfernen Sie veraltete Symbole:
    • Eingestellte(s) Player.hasPrevious (Player.hasPreviousWindow()) entfernen. Verwenden Sie stattdessen Player.hasPreviousMediaItem().
    • Verworfene Methode Player.previous() entfernen. Verwenden Sie stattdessen Player.seekToPreviousMediaItem().
    • Entfernen Sie die eingestellte Methode DrmSessionEventListener.onDrmSessionAcquired.

Version 1.4.0

Version 1.4.1

27. August 2024

androidx.media3:media3-*:1.4.1 wird veröffentlicht. Version 1.4.1 enthält diese Commits.

  • ExoPlayer:
    • Verarbeiten Sie Vorablade-Callbacks in PreloadMediaSource asynchron (#1568).
    • Wiedergabe unabhängig von der Zwischenspeicherdauer zulassen, wenn der Ladevorgang fehlschlägt (#1571).
  • Extraktoren:
    • MP3: Der Searched too many bytes-Fehler wurde behoben, indem nachstehende nicht MP3-Daten basierend auf dem Längenfeld in einem Info-Frame korrekt ignoriert wurden (#1480).
  • Text:
    • TTML: Die Verarbeitung von Prozentwerten für tts:fontSize wurde korrigiert, damit sie korrekt von übergeordneten Knoten mit Prozentwerten für tts:fontSize übernommen werden.
    • Fehlerbehebung bei IndexOutOfBoundsException in LegacySubtitleUtil, da der Fall, dass die angeforderte Ausgabestartzeit größer oder gleich der Endzeit des Ereignisses in der Subtitle ist, nicht richtig behandelt wurde (#1516).
  • Digitale Rechteverwaltung:
    • Fehler android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE auf Geräten mit API 31 und höher behoben, auf denen L1 Widevine-Inhalte wiedergegeben werden. Dieser Fehler wird durch eine unvollständige Implementierung der Framework-Methode MediaDrm.requiresSecureDecoder verursacht (#1603).
  • Wirkung:
    • Fügen Sie GlObjectsProvider eine release()-Methode hinzu.
  • Sitzung:
    • Transformiere, wie dokumentiert (#1493) ein Doppeltippen auf KEYCODE_HEADSETHOOK in eine „Suchen zum nächsten“-Aktion.
    • KEYCODE_HEADSETHOOK in MediaButtonReceiver als „Wiedergabe“-Befehl behandeln und entscheiden, ob er ignoriert werden soll, um eine ForegroundServiceDidNotStartInTimeException zu vermeiden (#1581)
  • RTSP-Erweiterung:
    • Ungültige Media Descriptions beim SDP-Parsen überspringen (#1087).

Version 1.4.0

25. Juli 2024

androidx.media3:media3-*:1.4.0 wurde veröffentlicht. Version 1.4.0 enthält diese Commits.

  • Gemeinsame Bibliothek:
    • Vorgebliche No-Op-Suchanrufe an die geschützten Methoden BasePlayer.seekTo() und SimpleBasePlayer.handleSeek() weiterleiten, anstatt sie zu ignorieren. Wenn du diese Methoden in einem benutzerdefinierten Player implementierst, musst du diese zusätzlichen Aufrufe möglicherweise mit mediaItemIndex == C.INDEX_UNSET verarbeiten.
    • Kompilierungsabhängigkeit von der erweiterten Java 8-Entschwefelung entfernt (#1312).
    • Die an MediaItem.Builder.setImageDurationMs() übergebene Dauer wird für ein MediaItem, das kein Bild ist, ignoriert (wie dokumentiert).
    • Fügen Sie Format.customData hinzu, um benutzerdefinierte Informationen zu Format-Instanzen zu speichern, die von der App bereitgestellt werden.
  • ExoPlayer:
    • Fügen Sie BasePreloadManager hinzu. Damit wird das Vorabladen für mehrere Quellen anhand der in ihren rankingData definierten Prioritäten koordiniert. Sie können diese Klasse erweitern, um sie anzupassen. Füge DefaultPreloadManager hinzu, bei dem PreloadMediaSource verwendet wird, um Mediensamples der Quellen in den Arbeitsspeicher zu laden, und eine Ganzzahl rankingData, die den Index eines Elements auf der Benutzeroberfläche angibt.
    • Füge den meisten Methoden von LoadControl PlayerId hinzu, damit LoadControl-Implementierungen mehrere Spieler unterstützen können.
    • Entfernen Sie Buffer.isDecodeOnly() und C.BUFFER_FLAG_DECODE_ONLY. Es ist nicht erforderlich, dieses Flag festzulegen, da Renderer und Dekodierer Buffers basierend auf dem Zeitstempel überspringen. Bei benutzerdefinierten Renderer-Implementierungen sollte geprüft werden, ob die Pufferzeit mindestens BaseRenderer.getLastResetPositionUs() beträgt, um zu entscheiden, ob ein Sample angezeigt werden soll. Bei benutzerdefinierten SimpleDecoder-Implementierungen kann bei Bedarf isAtLeastOutputStartTimeUs() geprüft oder andere Puffer mit DecoderOutputBuffer.shouldBeSkipped markiert werden, um sie zu überspringen.
    • Erlauben Sie, dass von TargetPreloadStatusControl.getTargetPreloadStatus(T) ein Nullwert zurückgegeben wird, um anzugeben, dass ein MediaSource nicht mit dem angegebenen rankingData vorab geladen werden soll.
    • Fügen Sie remove(MediaSource) zu BasePreloadManager hinzu.
    • Fügen Sie reset() zu BasePreloadManager hinzu, um alle Quellen mit Zurückhaltung freizugeben und die Instanz des Preloader-Managers beizubehalten.
    • Fügen Sie ExoPlayer.setPriority() (und Builder.setPriority()) hinzu, um den in PriorityTaskManager verwendeten Prioritätswert und für die Bedeutung von MediaCodec aus API 35 zu definieren.
    • Problem beim Aktualisieren der letzten Zeit für die erneute Pufferung behoben, was zu einem falschen bs-Schlüssel (Puffermangel) in CMCD führte (#1124).
    • Füge PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) hinzu, um anzugeben, dass die Quelle vollständig geladen wurde. So können die DefaultPreloadManager- und die benutzerdefinierte PreloadMediaSource.PreloadControl-Implementierung die nächste Quelle vorab laden oder andere Aktionen ausführen.
    • Ein Fehler wurde behoben, durch den das Überspringen von Stille am Ende von Elementen eine Wiedergabeausnahme auslösen konnte.
    • Fügen Sie clear zu PreloadMediaSource hinzu, um den Vorladezeitraum zu verwerfen.
    • Neuer Fehlercode PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED hinzugefügt, der verwendet wird, wenn Codec-Ressourcen für Aufgaben mit höherer Priorität zurückgefordert werden.
    • Pre-Roll-Anzeigen werden von AdsMediaSource geladen, bevor die anfängliche Medienvorbereitung des Inhalts abgeschlossen ist (#1358).
    • Fehler behoben, durch den die Wiedergabe bei der erneuten Vorbereitung eines DASH-Livestreams mit mehreren Zeiträumen auf STATE_ENDED umgestellt wurde, nachdem der ursprüngliche Zeitraum bereits aus dem Manifest entfernt wurde.
    • Benennen Sie onTimelineRefreshed() in onSourcePrepared() und onPrepared() in onTracksSelected() in PreloadMediaSource.PreloadControl um. Benennen Sie auch die IntDefs in DefaultPreloadManager.Stage entsprechend um.
    • Es wurde experimentelle Unterstützung für die dynamische Planung hinzugefügt, um die Arbeit besser an die CPU-Aktivierungszyklen anzupassen und das Aufwachen so zu verzögern, dass Renderer fortfahren können. Du kannst diese Funktion beim Einrichten deiner ExoPlayer-Instanz mit experimentalSetDynamicSchedulingEnabled() aktivieren.
    • Fügen Sie Renderer.getDurationToProgressUs() hinzu. Ein Renderer kann diese Methode implementieren, um an ExoPlayer die Dauer zurückzugeben, um die die Wiedergabe vorrücken muss, damit der Renderer fortfahren kann. Wenn ExoPlayer mit experimentalSetDynamicSchedulingEnabled() festgelegt ist, ruft ExoPlayer diese Methode auf, um die Zeit für die Planung der Arbeitsaufgabe zu berechnen.
    • Fügen Sie MediaCodecAdapter#OnBufferAvailableListener hinzu, um benachrichtigt zu werden, wenn Eingabe- und Ausgabe-Buffer für MediaCodecRenderer verfügbar sind. MediaCodecRenderer signalisiert ExoPlayer beim Empfang dieser Callbacks. Wenn ExoPlayer auf experimentalSetDynamicSchedulingEnabled() gesetzt ist, plant ExoPlayer die Work Loop, während Renderer vorankommen können.
    • Verwenden Sie für LoadControl-Methoden eine Datenklasse anstelle einzelner Parameter.
    • Fügen Sie ExoPlayer.isReleased() hinzu, um zu prüfen, ob Exoplayer.release() aufgerufen wurde.
    • Fügen Sie ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() hinzu, um die maximale Position zu konfigurieren, bis zu der seekToPrevious() zum vorherigen Element sucht (#1425).
    • Beheben Sie einige Audiofokus-Inkonsistenzen, z.B. wenn kein vollständiger oder vorübergehender Fokusverlust gemeldet wurde, während der Player pausiert ist (#1436).
    • Beheben Sie potenzielle IndexOutOfBoundsException, die dadurch verursacht werden, dass Extraktoren nach dem ersten Vorbereitungsschritt zusätzliche Tracks melden (#1476).
    • Effects in ExoPlayer.setVideoEffect() erhält die Zeitstempel ohne Renderer-Offset (#1098).
    • Potenzieller IllegalArgumentException beim Umgang mit einem Playerfehler beim Vorlesen eines anderen Playlist-Elements behoben (#1483).
  • Transformator:
    • Fügen Sie audioConversionProcess und videoConversionProcess zu ExportResult hinzu und geben Sie an, wie der jeweilige Track in der Ausgabedatei erstellt wurde.
    • Die Überprüfungen auf H.264-Ebene für die Optimierung der Kürzung wurden gelockert.
    • Unterstützung für den Wechsel zwischen SDR- und HDR-Eingabemedien in einer Sequenz hinzufügen
    • Unterstützung für Audioeffekte auf Kompositionsebene hinzugefügt.
    • Unterstützung für die Transcodierung von Ultra-HDR-Bildern in HDR-Videos hinzugefügt
    • Das Problem, dass die DefaultAudioMixer nach dem Zurücksetzen und Wiederverwenden nicht die richtige Anzahl von Byte ausgibt, wurde behoben.
    • Behebung eines Decoderfehlers, bei dem die Anzahl der Audiokanäle bei der Verarbeitung von PCM-Eingängen auf „Stereo“ begrenzt wurde.
    • Ignoriere bei der Auswahl von Tracks in ExoPlayerAssetLoader die Einschränkungen bei der Anzahl der Audiokanäle, da sie nur für die Wiedergabe gelten.
    • Ersetzen Sie die androidx.media3.transformer.Muxer-Benutzeroberfläche durch androidx.media3.muxer.Muxer und entfernen Sie androidx.media3.transformer.Muxer.
    • Fehler beim Laden von HEIC-Bildern aus Inhalts-URI-Schemas behoben (#1373).
    • Passe die Dauer des Audiotracks in AudioGraphInput an, um die AV-Synchronisierung zu verbessern.
    • Entfernen Sie das Feld ExportResult.processedInputs. Wenn du dieses Feld für Codec-Details verwendest, verwende stattdessen DefaultDecoderFactory.listener. Bei einer Codec-Ausnahme findest du die Codec-Details in der ExportException.codecInfo.
  • Extraktoren:
    • MPEG-TS: Die Änderung wird vorwärts ausgeführt, damit der letzte Frame gerendert wird. Dazu wird die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergeben (#7909). Es wurden Fehlerkorrekturen für Probleme in HLS-Streams mit nur I-Frames(#1150) und H.262-HLS-Streams (#1126) implementiert.
    • MP3: Die Datengröße aus einem Info-Frame hat Vorrang vor der vom zugrunde liegenden Stream gemeldeten Größe (z.B. Dateigröße oder HTTP-Content-Length-Header). So lassen sich nicht abspielbare Trailerdaten (z.B. Albumcover) aus Berechnungen für die Suche nach konstanter Bitrate ausschließen, wodurch die Suche genauer wird (#1376).
    • MP3: Verwende die Frame-Anzahl und andere Daten in einem Info-Frame (falls vorhanden), um eine durchschnittliche Bitrate für die Suche nach einer konstanten Bitrate zu berechnen, anstatt von der Bitrate des Frames nach dem Info-Frame zu extrapolieren, die möglicherweise künstlich niedrig ist, z.B. PCUT-Frame (#1376).
    • Probleme mit der Extraktion des PCM-Audioformats in AVI-Containern wurden behoben.
  • Audio:
    • Korrektur der DTS:X-Profil 2-Codierungsattribute für die Passthrough-Wiedergabe (#1299)
    • Setzen Sie für eine ausgelagerte Wiedergabe das Tracking-Feld für den Abschluss des Streams in DefaultAudioSink zurück, bevor Sie AudioTrack.stop() aufrufen, damit AudioTrack.StreamEventCallback#onPresentationEnded korrekt erkennt, wenn alle ausstehenden Daten wiedergegeben wurden.
    • Fehler in SilenceSkippingAudioProcessor behoben, bei dem Übergänge zwischen verschiedenen Audioformaten (z. B. von Stereo zu Mono) dazu führen können, dass der Prozessor eine Ausnahme auslöst (#1352).
    • Implementiere MediaCodecAudioRenderer.getDurationToProgressUs() so, dass der ExoPlayer seinen Haupt-Arbeits-Loop dynamisch so plant, dass der MediaCodecAudioRenderer Fortschritte erzielen kann.
  • Video:
    • Ein Problem wurde behoben, bei dem Listener.onRenderedFirstFrame() zu früh erscheint, wenn während der Wiedergabe die Oberfläche gewechselt wird.
    • Korrigieren Sie die Decoder-Fallback-Logik für Dolby Vision, damit bei Bedarf ein kompatibler AV1-Decoder verwendet wird (#1389).
    • Eine Codec-Ausnahme wurde behoben, die durch das Aktivieren eines Video-Renderers während der Wiedergabe verursacht werden kann.
  • Text:
    • Es wurde ein Problem behoben, durch das Untertitel, die vor einer Suchposition beginnen, übersprungen wurden. Dieses Problem wurde erst in Media3 1.4.0-alpha01 eingeführt.
    • Ändere das Standardverhalten beim Untertitel-Parsing so, dass es während der Extraktion statt während des Renderings erfolgt. Den Unterschied zwischen Extraktion und Rendering findest du im Architekturdiagramm von ExoPlayer.
      • Diese Änderung kann überschrieben werden, indem sowohl MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) als auch TextRenderer.experimentalSetLegacyDecodingEnabled(true) aufgerufen werden. In der Anleitung zur Anpassung erfahren Sie, wie Sie diese Komponenten in eine ExoPlayer-Instanz einbinden. Diese Methoden und die gesamte Unterstützung für die alte Untertiteldecodierung werden in einer zukünftigen Version entfernt.
      • Apps mit benutzerdefinierten SubtitleDecoder-Implementierungen müssen aktualisiert werden, um stattdessen SubtitleParser (und SubtitleParser.Factory anstelle von SubtitleDecoderFactory) zu implementieren.
    • PGS: Die Decodierung der Lauflänge wurde korrigiert, um 0 als Farbindex anstelle eines literalen Farbwerts aufzulösen (#1367).
    • CEA-708: rowLock-Wert ignorieren. Gemäß der CEA-708-E S-2023-Spezifikation sollten rowLock und columnLock unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden. Da die Unterstützung von columnLock nicht implementiert ist, wird davon ausgegangen, dass dieser Wert immer falsch ist.
      • Diese Änderung war ursprünglich in den Versionshinweisen für 1.3.0-alpha01 enthalten, wurde aber vor der Veröffentlichung von 1.3.0-rc01 versehentlich rückgängig gemacht. Das Problem wurde behoben und die Änderung ist wieder sichtbar.
    • CEA-708: Vermeiden von doppelten Zeilenumbrüchen, die durch die naive Verarbeitung des Befehls „set pen location“ (Stiftposition festlegen) von ExoPlayer hinzugefügt werden (#1315).
    • Korrigiere eine IllegalArgumentException von LegacySubtitleUtil, wenn ein WebVTT-Untertitelbeispiel keine Cues enthält, z.B. als Teil eines DASH-Streams (#1516).
  • Metadaten:
    • Fehler bei der Zuordnung von MP4-Sortiertags zu ID3-Tags behoben. Bisher wurden die MP4-Tags „Albumsortierung“ (soal), „Künstlersortierung“ (soar) und „Albumkünstlersortierung“ (soaa) fälschlicherweise den ID3-Tags TSO2, TSOA und TSOP zugeordnet (#1302).
    • Das Lesen von numerischen MP4-Tags (/iTunes) für gnre (genre) und tmpo (Tempo) wurde korrigiert, wenn der Wert mehr als ein Byte lang ist.
    • Übergeben Sie den ID3-Frame TCON an MediaMetadata.genre (#1305).
  • Bild:
    • Unterstützung für nicht quadratische DASH-Miniaturansichten-Raster hinzugefügt (#1300).
    • Unterstützung für AVIF für API 34 und höher
    • null als Parameter für ExoPlayer.setImageOutput() zulassen, um eine zuvor festgelegte ImageOutput zu löschen
  • DataSource:
    • Implementieren Sie die Unterstützung für android.resource://package/id-URIs für Rohressourcen, wobei package sich vom Paket der aktuellen Anwendung unterscheidet. Bisher war dies nicht dokumentiert, aber es ist eine effizientere Methode, auf Ressourcen in einem anderen Paket zuzugreifen, als nach Namen zu suchen.
    • Prüfen Sie in den DataSpec-Konstruktoren, ob url nicht null ist. Für diesen Parameter wurde bereits angegeben, dass er nicht null ist.
    • ByteArrayDataSource darf einen URI während open() in ein Byte-Array auflösen, anstatt ihn bei der Erstellung hartcodiert zu haben (#1405).
  • Digitale Rechteverwaltung:
    • Es ist jetzt möglich, eine LoadErrorHandlingPolicy auf DefaultDrmSessionManagerProvider festzulegen (#1271).
  • Wirkung:
    • Mehrere Geschwindigkeitsänderungen innerhalb desselben EditedMediaItem oder Composition in SpeedChangeEffect werden unterstützt.
    • Unterstützung für HLG- und PQ-Ausgabe von Ultra-HDR-Bitmap-Eingabe
    • Unterstützung für EGL_GL_COLORSPACE_BT2020_HLG_EXT hinzugefügt, wodurch die HLG-Surface-Ausgabe in ExoPlayer.setVideoEffect und der Debug-SurfaceView von Transformer verbessert wird.
    • Aktualisieren Sie die Overlay-Matriximplementierung, damit sie der Dokumentation entspricht. Kehren Sie dazu die X- und Y-Werte in setOverlayFrameAnchor() um. Wenn Sie OverlaySettings.Builder.setOverlayFrameAnchor() verwenden, können Sie die x- und y-Werte umdrehen, indem Sie sie mit -1 multiplizieren.
    • Fehler behoben, bei dem TimestampWrapper bei Verwendung mit ExoPlayer#setVideoEffects abstürzte (#821).
    • Ändern Sie den Standard-SDR-Farbarbeitsraum von linearen Farben zu elektrischen BT 709-SDR-Videos. Bieten Sie auch eine dritte Option an, um den ursprünglichen Farbraum beizubehalten.
    • Es ist jetzt möglich, eine unbestimmte Z-Reihenfolge für EditedMediaItemSequences zu definieren (#1055).
    • Für verschiedene HDR-Inhalte einen einheitlichen Leuchtdichtebereich beibehalten (HLG-Bereich wird verwendet).
    • Unterstützung für Ultra-HDR- (Bitmap-)Overlays auf HDR-Inhalten hinzufügen
    • SeparableConvolution-Effekte vor API 26 zulassen
    • Entfernen Sie nicht verwendete OverlaySettings.useHdr, da der dynamische Bereich von Overlay und Frame übereinstimmen muss.
    • HDR-Unterstützung für TextOverlay hinzufügen Die Leuchtkraft des Text-Overlays kann mit OverlaySettings.Builder.setHdrLuminanceMultiplier() angepasst werden.
  • IMA-Erweiterung:
    • Promote die API, die erforderlich ist, damit Apps stabil Anzeigenstreams für die dynamische Anzeigenbereitstellung wiedergeben können.
    • Fügen Sie replaceAdTagParameters(Map <String, String>) zu ImaServerSideAdInsertionMediaSource.AdLoader hinzu, damit Anzeigen-Tag-Parameter während der Laufzeit ersetzt werden können.
    • Es wurde ein Fehler behoben, bei dem VideoAdPlayer.VideoAdPlayerCallback.onError() nicht aufgerufen wurde, wenn während der Anzeigenwiedergabe ein Playerfehler auftrat (#1334).
    • Die IMA SDK-Version wurde auf 3.33.0 erhöht, um einen NullPointerException bei der Verwendung von data://-Anzeigen-Tag-URIs zu beheben (#700).
  • Sitzung:
    • Ändern Sie den Standardwert von CommandButton.enabled in true und achten Sie darauf, dass der Wert für Controller auch dann „falsch“ bleiben kann, wenn der zugehörige Befehl verfügbar ist.
    • Fügen Sie Symbolkonstanten für CommandButton hinzu, die anstelle benutzerdefinierter Symbolressourcen verwendet werden sollen.
    • Fügen Sie MediaSessionService.isPlaybackOngoing() hinzu, damit Apps abfragen können, ob der Dienst in onTaskRemoved() beendet werden muss (#1219).
    • Füge MediaSessionService.pauseAllPlayersAndStopSelf() hinzu, mit dem sich die Wiedergabe aller Sitzungen bequem pausieren lässt, und rufe stopSelf() auf, um den Lebenszyklus der MediaSessionService zu beenden.
    • Überschreiben Sie MediaSessionService.onTaskRemoved(Intent), um eine sichere Standardimplementierung bereitzustellen, bei der der Dienst im Vordergrund ausgeführt wird, wenn die Wiedergabe noch läuft, oder den Dienst andernfalls unterbricht.
    • Blenden Sie die Steuerleiste in der Medienbenachrichtigung für Livestreams aus, indem Sie die Dauer nicht in den Metadaten der Plattformsitzung festlegen (#1256).
    • Gleichen Sie die Umwandlung von MediaMetadata mit MediaDescriptionCompat an, damit bei der Auswahl von Metadateneigenschaften dieselbe bevorzugte Reihenfolge und Logik wie in media1 verwendet wird.
    • MediaSession.sendError() hinzufügen, mit dem nicht schwerwiegende Fehler an den Media3-Controller gesendet werden können Wenn du den Benachrichtigungscontroller verwendest (siehe MediaSession.getMediaNotificationControllerInfo()), wird der benutzerdefinierte Fehler verwendet, um den PlaybackState der Plattformsitzung in einen Fehlerstatus mit den angegebenen Fehlerinformationen zu aktualisieren (#543).
    • Fügen Sie MediaSession.Callback.onPlayerInteractionFinished() hinzu, um Sitzungen darüber zu informieren, wenn eine Reihe von Spielerinteraktionen von einem bestimmten Controller abgeschlossen wurde.
    • Fügen Sie SessionError hinzu und verwenden Sie es anstelle des Fehlercodes in SessionResult und LibraryResult, um weitere Informationen zum Fehler und zur Behebung des Fehlers anzugeben, sofern möglich.
    • Veröffentliche den Code für die media3-Controller-Test-App, mit der Interaktionen mit Apps getestet werden können, die eine Mediensitzung veröffentlichen.
    • Übertragen Sie die an MediaSession[Builder].setSessionExtras() von media3 übergebenen Extras an PlaybackStateCompat.getExtras() eines media1-Controllers.
    • Ordnen Sie schwerwiegende und nicht schwerwiegende Fehler der Plattformsitzung und zurück zu. Eine PlaybackException ist einem schwerwiegenden Fehlerstatus der PlaybackStateCompat zugeordnet. Ein SessionError, das mit MediaSession.sendError(ControllerInfo, SessionError) an den Media-Benachrichtigungscontroller gesendet wird, wird in PlaybackStateCompat einem nicht schwerwiegenden Fehler zugeordnet. Das bedeutet, dass der Fehlercode und die Fehlermeldung festgelegt sind, der Status der Plattformsitzung jedoch von STATE_ERROR abweicht.
    • Sie können zulassen, dass die Sitzungsaktivität pro Controller festgelegt wird, um die globale Sitzungsaktivität zu überschreiben. Die Sitzungsaktivität kann für einen Controller bei der Verbindungsherstellung definiert werden, indem ein ConnectionResult mit AcceptedResultBuilder.setSessionActivivty(PendingIntent) erstellt wird. Sobald die Verbindung besteht, kann die Sitzungsaktivität mit MediaSession.setSessionActivity(ControllerInfo, PendingIntent) aktualisiert werden.
    • Fehlerreplikation von Aufrufen an MediaLibrarySession.Callback wurde verbessert. Die Fehlerreplikation kann jetzt konfiguriert werden, indem mit MediaLibrarySession.Builder.setLibraryErrorReplicationMode() der Fehlertyp ausgewählt oder die standardmäßig aktivierte Fehlerreplikation deaktiviert wird.
  • UI:
    • Unterstützung für die Bildanzeige auf PlayerView hinzufügen, wenn eine Verbindung zu einem ExoPlayer besteht (#1144).
    • Verschiedene Symbole in PlayerControlView können über XML-Attribute angepasst werden, um unterschiedliche drawables pro PlayerView-Instanz zuzulassen, anstatt globale Überschreibungen (#1200).
    • Sie können einen Plattformfehler umgehen, der zu einem verzerrten/beschnittenen Video führt, wenn SurfaceView innerhalb einer Compose-AndroidView in API 34 verwendet wird (#1237).
  • Downloads:
    • Achten Sie darauf, dass DownloadHelper keine unveröffentlichten Renderer-Instanzen durchläuft, die schließlich zum Absturz einer App mit IllegalStateException: Too many receivers, total of 1000, registered for pid führen können (#1224).
  • Cronet-Erweiterung:
    • Fehler bei SocketTimeoutException in CronetDataSource beheben In einigen Versionen von Cronet ist die vom Rückruf bereitgestellte Anfrage nicht immer gleich. Dies führt dazu, dass der Rückruf nicht abgeschlossen wird und eine Zeitüberschreitung bei der Anfrage auftritt (https://issuetracker.google.com/328442628).
  • HLS-Erweiterung:
    • Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Unterbrechung warten, in HlsSampleStreamWrapper mit einem falschen Offset delegiert wurden, was zu einer IndexOutOfBoundsException oder IllegalArgumentException führte (#1002).
    • Behebung eines Fehlers, durch den nicht primäre Playlists bei LL-HLS-Streams immer wieder neu geladen wurden (#1240).
    • Fehler behoben, durch den die Aktivierung von CMCD für HLS mit Initialisierungssegmenten zu Source Error und IllegalArgumentException führte.
    • Es wurde ein Fehler behoben, bei dem nicht primäre Playlists während der Live-Wiedergabe nicht aktualisiert werden (#1240).
    • Es wurde ein Fehler behoben, bei dem das Aktivieren von CMCD für HLS-Livestreams zu ArrayIndexOutOfBoundsException führt (#1395).
  • DASH-Erweiterung:
    • Es wurde ein Fehler behoben, durch den beim erneuten Vorbereiten eines Livestreams mit mehreren Zeiträumen eine IndexOutOfBoundsException ausgegeben werden konnte (#1329).
    • Unterstützung für dashif:Laurl-Lizenz-URLs hinzugefügt (#1345).
  • Cast-Erweiterung:
    • Fehler behoben, durch den der Albumtitel der MediaQueueItem in den Künstler im Media3-Medienelement umgewandelt wurde (#1255).
  • Test-Dienstprogramme:
    • Implementieren Sie onInit() und onRelease() in FakeRenderer.
    • Ändern Sie TestPlayerRunHelper.runUntil()/playUntil()-Methoden so, dass sie bei nicht schwerwiegenden Fehlern fehlschlagen (z.B. bei Fehlern, die an AnalyticsListener.onVideoCodecError() gemeldet werden). Verwenden Sie die neue TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()-Methodenkette, um dieses Verhalten zu deaktivieren.
  • Demo-App:
    • Verwende DefaultPreloadManager in der kurzen Demo-App.
    • Es ist jetzt möglich, den Wiederholungsmodus mit Intent-Argumenten über die Befehlszeile festzulegen (#1266).
    • Verwenden Sie HttpEngineDataSource als HttpDataSource, sofern vom Gerät unterstützt.
  • Entfernen Sie veraltete Symbole:
    • CronetDataSourceFactory entfernen. Verwenden Sie stattdessen CronetDataSource.Factory.
    • Entfernen Sie einige DataSpec-Konstruktoren. Verwenden Sie stattdessen DataSpec.Builder.
    • Entfernen Sie die setContentTypePredicate(Predicate)-Methode aus DefaultHttpDataSource, OkHttpDataSource und CronetDataSource. Verwenden Sie stattdessen die entsprechende Methode für jede XXXDataSource.Factory.
    • Entfernen Sie die Konstruktoren OkHttpDataSource und OkHttpDataSourceFactory. Verwenden Sie stattdessen OkHttpDataSource.Factory.
    • PlayerMessage.setHandler(Handler) entfernen. Verwenden Sie stattdessen setLooper(Looper).
    • Feld „Timeline.Window.isLive“ entfernen. Verwenden Sie stattdessen die Methode isLive().
    • Entfernen Sie DefaultHttpDataSource-Konstruktoren. Verwenden Sie stattdessen DefaultHttpDataSource.Factory.
    • Entfernen Sie DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Verwenden Sie stattdessen DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.
    • MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean) entfernen. Verwenden Sie stattdessen MediaCodecInfo.canReuseCodec(Format, Format).
    • Entfernen Sie die Methode DrmSessionManager.DUMMY und getDummyDrmSessionManager(). Verwende stattdessen DrmSessionManager.DRM_UNSUPPORTED.
    • Entfernen Sie AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format) und VideoRendererEventListener.onVideoInputFormatChanged(Format). Verwenden Sie stattdessen die Überladungen, die ein DecoderReuseEvaluation annehmen.
    • Entfernen Sie RendererSupport.FormatSupport IntDef und die Konstanten FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE und FORMAT_UNSUPPORTED_TYPE. Verwenden Sie stattdessen die entsprechenden IntDef- und Konstanten in androidx.media3.common.C (z.B. C.FORMAT_HANDLED).
    • Bundleable-Schnittstelle entfernen. Dazu gehören auch alle konstanten Bundleable.Creator<Foo> CREATOR-Felder. Stattdessen sollten sie die Methoden Bundle toBundle() und static Foo fromBundle(Bundle) für jeden Typ verwenden.

Version 1.4.0-rc01

10. Juli 2024

Verwenden Sie die stabile Version 1.4.0.

Version 1.4.0-beta01

26. Juni 2024

Verwenden Sie die stabile Version 1.4.0.

Version 1.4.0-alpha02

7. Juni 2024

Verwenden Sie die stabile Version 1.4.0.

Version 1.4.0-alpha01

17. April 2024

Verwenden Sie die stabile Version 1.4.0.

Version 1.3.0

Version 1.3.1

11. April 2024

androidx.media3:media3-*:1.3.1 wird veröffentlicht. Version 1.3.1 enthält diese Commits.

  • Gemeinsame Bibliothek:
    • Fügen Sie Format.labels hinzu, um lokalisierte oder andere alternative Labels zuzulassen.
  • ExoPlayer:
    • Das Problem, dass PreloadMediaPeriod die Streams nicht beibehalten konnte, wenn sie noch einmal vorab geladen wurde, wurde behoben.
    • Wende die richtige entsprechende TrackSelectionResult auf den Wiedergabezeitraum bei der Trackwiederauswahl an.
    • Renderer, die vorzeitig aktiviert werden, sollten beim Wechseln zwischen Medienelementen erst gestartet werden, nachdem die Wiedergabezeit fortgeschritten ist (#1017).
    • Fehlenden Rückgabetyp zur Proguard-Regel -keepclasseswithmembers für DefaultVideoFrameProcessor.Factory.Builder.build() hinzufügen (#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: Wähle Videotracks mit einer angemessenen Framerate (mindestens 10 fps) anstelle von Tracks mit einer niedrigeren oder nicht festgelegten Framerate. So wird sichergestellt, dass der Player den „echten“ Videotrack in MP4-Dateien aus Fotos mit Bewegung auswählt, die zwei HEVC-Tracks enthalten können, von denen einer eine höhere Auflösung, aber eine sehr geringe Anzahl von Frames hat (#1051).
  • Extraktoren:
    • Ein Problem wurde behoben, bei dem das Auffüllen beim Lesen von Blöcken mit ungerader Größe aus WAV-Dateien nicht übersprungen wurde (#1117).
    • MP3: Format.averageBitrate wird aus Metadaten-Frames wie XING und VBRI ausgefüllt.
    • MPEG-TS: Sie können eine Änderung rückgängig machen, durch die sichergestellt werden soll, dass der letzte Frame gerendert wird. Dazu wird die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange übergeben (#7909). Dies liegt daran, dass die Änderung neue Probleme mit HLS-Streams, die nur I-Frames enthalten (#1150) und H.262-HLS-Streams (#1126), verursacht haben.
  • Audio:
    • Ermöglicht die Wiederherstellung des Renderers, indem das Offload deaktiviert wird, wenn der Audiotrack im Offload-Modus nicht 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 hinzugefügt, bei dem H265-Streams mit 60 fps als nicht unterstützt gekennzeichnet wurden
    • Es wurde eine Problemumgehung hinzugefügt, die dafür sorgt, dass der erste Frame beim Tunneling immer gerendert wird, auch wenn das Gerät dies nicht automatisch wie von der API gefordert tut (#1169). (#966)
    • Behebung eines Problems, bei dem die Verarbeitung von HDR-Farbinformationen zu Fehlverhalten des Codecs führt und die adaptive Formatumstellung für SDR-Videotracks verhindert (#1158).
  • Text:
    • WebVTT: Verhindert, dass direkt aufeinanderfolgende Cues falsche zusätzliche CuesWithTiming-Instanzen aus WebvttParser.parse erstellen (#1177).
  • Digitale Rechteverwaltung:
    • Umgehung einer NoSuchMethodError, die auf einigen Android 14-Geräten vom MediaDrm-Framework anstelle von ResourceBusyException oder NotProvisionedException geworfen werden kann (#1145).
  • Auswirkung:
    • Verbesserte PQ- und SDR-Tonzuordnung durch Konvertierung von Farbräumen.
  • Sitzung:
    • Das Problem wurde behoben, dass die aktuelle Position zurückspringt, wenn der Controller das aktuelle Element ersetzt (#951).
    • Es wurde ein Problem behoben, bei dem MediaMetadata nur mit extras-Werten ungleich null nicht zwischen Media-Controllern und Sitzungen übertragen wurde (#1176).
  • UI:
    • Wenn Locale keinen Anzeigenamen ermitteln kann, wird der Name der Audiotracksprache verwendet (#988).
  • DASH-Erweiterung:
    • Füllen Sie alle Label-Elemente aus dem Manifest in Format.labels aus (#1054).
  • RTSP-Erweiterung:
    • Leere Werte für Sitzungsinformationen (i-Tags) beim SDP-Parsen überspringen (#1087).
  • Decodererweiterungen (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 veröffentlicht. Version 1.3.0 enthält diese Commits.

  • Gemeinsame Bibliothek:
    • Implementieren Sie die Unterstützung für android.resource://package/[type/]name-Rohressourcen-URIs, bei denen sich package vom Paket der aktuellen Anwendung unterscheidet. Es wurde immer dokumentiert, dass dies funktioniert, aber bis jetzt wurde es nicht richtig implementiert.
    • Normalisieren Sie MIME-Typen, die durch App-Code festgelegt oder aus Medien gelesen werden, sodass sie vollständig in Kleinbuchstaben geschrieben sind.
    • Definieren Sie Anzeigen mit einem vollständigen MediaItem statt mit einem einzelnen Uri in AdPlaybackState.
    • Erhöhen Sie minSdk auf 19 (Android KitKat). Dies ist mit allen anderen AndroidX-Bibliotheken abgestimmt und erforderlich, damit wir auf die neuesten Versionen unserer AndroidX-Abhängigkeiten umstellen können.
    • Geben Sie sowohl artworkUri als auch artworkData in MediaMetadata.Builder.populate(MediaMetadata) ein, wenn mindestens einer von ihnen 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 Inhaltsmediaquelle für den Empfang der 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 Vorabladens, 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 Player jetzt standardmäßig ein ImageRenderer mit nullwertigen ImageOutput und ImageDecoder.Factory.DEFAULT zur Verfügung.
    • Das Ereignis Player.Listener.onPositionDiscontinuity wird gesendet, wenn Stille übersprungen wird (#765).
    • Zusätzliche experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion. Sie können diese Funktion mit MediaSource.Factory.experimentalParseSubtitlesDuringExtraction() aktivieren.
    • Unterstütze adaptive Medienquellen mit PreloadMediaSource.
    • Implementiere HttpEngineDataSource, eine HttpDataSource, mit der HttpEngine API.
    • Verhindert das Erstellen von abgeleiteten Klassen von CompositeSequenceableLoader. Diese Komponente wurde bereits erweiterbar gemacht, aber nie in der Bibliothek untergeordnet. Sie können Anpassungen vornehmen, indem Sie eine Instanz mithilfe des Decorator-Musters umschließen und eine benutzerdefinierte CompositeSequenceableLoaderFactory implementieren.
    • Ein Problem wurde behoben, bei dem Metadaten aus diesem Element bei einer Wiederholung gleichzeitig gelöscht werden (#1007).
    • Benennen Sie die experimentalSetSubtitleParserFactory-Methoden in BundledChunkExtractor.Factory und DefaultHlsExtractorFactory in setSubtitleParserFactory um und lassen Sie die Weitergabe von null nicht zu. Mit den neuen experimentalParseSubtitlesDuringExtraction(boolean)-Methoden können Sie das Parsen steuern.
    • Die während der Extraktion verwendete SubtitleParser.Factory kann jetzt angepasst werden. Das ist mit MediaSource.Factory.setSubtitleParserFactory() möglich.
    • Fügen Sie allen Format.id-Feldern, die aus MergingMediaSource generiert wurden, ein Quellpräfix hinzu. So lässt sich leichter feststellen, welche Quelle eine Format (#883) generiert hat.
    • Der Regex, der für die Validierung von benutzerdefinierten Schlüsselnamen für Common Media Client Data (CMCD) verwendet wird, wurde korrigiert. Er prüft jetzt nur noch auf Bindestrich (#1028).
    • CMCD-Abfrageparameter nicht mehr doppelt codieren (#1075).
  • Transformator:
    • Unterstützung für das Glätten von H.265/HEVC SEF-Zeitlupenvideos hinzugefügt.
    • Die Transmuxing-Geschwindigkeit wurde erhöht, insbesondere bei der Bearbeitungsoption „Video entfernen“.
    • Fügen Sie die API hinzu, damit die Ausgabedatei mit einem Videoframe beginnt. Dadurch wird die Ausgabe von Zuschneidevorgängen besser mit Playerimplementierungen kompatibel, bei denen der erste Videoframe erst nach seinem Darstellungszeitstempel angezeigt wird (#829).
    • Unterstützung für die Optimierung von MP4-Trennvorgängen für einzelne Assets hinzufügen.
    • Fügen Sie Unterstützung hinzu, damit ein Videoframe in der Ausgabedatei den ersten Zeitstempel enthält. Behebung des Problems, dass Ausgabedateien auf iOS-basierten Playern mit einem schwarzen Frame beginnen (#829).
  • Titelauswahl:
    • Fügen Sie DefaultTrackSelector.selectImageTrack hinzu, um die Auswahl von Bildtracks zu aktivieren.
    • Füge TrackSelectionParameters.isPrioritizeImageOverVideoEnabled hinzu, um festzulegen, ob ein Bildtrack 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:
    • Dem MP4-Extractor wurde eine zusätzliche AV1C-Analyse hinzugefügt, um die Werte ColorInfo.colorSpace, ColorInfo.colorTransfer und ColorInfo.colorRange abzurufen (#692).
    • MP3: Verwende die Suche mit konstanter Bitrate (CBR) für Dateien mit einem Info-Header (das CBR-Äquivalent des Xing-Headers). Bisher haben wir die Sprungtabelle aus der Info-Header verwendet. Dies führt jedoch zu weniger präzisen Suchvorgängen als wenn wir sie ignorieren und davon ausgehen, dass die Datei CBR ist.
    • MPEG2-TS: Unterstützung für DTS, DTS-LBR und DTS:X Profile2 hinzufügen (#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:
    • Der Algorithmus zum Überspringen von Stille wurde verbessert, indem die Lautstärke stufenlos ansteigt. Die minimale Stille und die Dauer der Stille wurden beibehalten (#7423).
    • Die übersprungene Stille wird jetzt genauer gemeldet (#1035).
  • Video:
    • Ändern Sie den Konstruktor von MediaCodecVideoRenderer, der ein VideoFrameProcessor.Factory-Argument annimmt, und ersetzen Sie ihn durch einen Konstruktor, der ein VideoSinkProvider-Argument annimmt. Anwendungen, die ein benutzerdefiniertes VideoFrameProcessor.Factory einfügen möchten, können eine CompositingVideoSinkProvider instanziieren, die das benutzerdefinierte VideoFrameProcessor.Factory verwendet, und den Anbieter der Videosenke an MediaCodecVideoRenderer übergeben.
  • Text:
    • Die Serialisierung von Bitmaphinweisen 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. Gemäß der CEA-708-E S-2023-Spezifikation sollten rowLock und columnLock unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden. Da die Unterstützung von columnLock nicht implementiert ist, wird davon ausgegangen, dass dieser Wert immer falsch ist.
  • Bild:
    • Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden ImageOutput kurz vor ihrer Präsentationszeit bereitgestellt.
  • Digitale Rechteverwaltung:
  • IMA-Erweiterung:
    • Problem behoben, durch das DASH- und HLS-Anzeigen ohne die richtige Dateiendung nicht wiedergegeben werden konnten
  • Sitzung:
    • Deaktivierung der Doppelklickerkennung für TV-Apps (#962)
    • Problem behoben, durch das MediaItem.RequestMetadata mit nur nicht nullwertigen Extras nicht zwischen Mediencontrollern und Sitzungen übertragen wurde.
    • Fügen Sie MediaLibrarySession.Builder einen Konstruktor hinzu, der nur Context statt MediaLibraryService akzeptiert.
  • HLS-Erweiterung:
    • Reduzieren Sie HlsMediaPeriod auf paketinterne Sichtbarkeit. Von diesem Typ sollte außerhalb des HLS-Pakets nicht direkt abhängig sein.
    • Bei der Aufklärung wird effizienter zum Anfang eines Segments gesucht (#1031).
  • Decodererweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
    • MIDI-Decoder: SysEx-Ereignisnachrichten ignorieren (#710).
  • Test-Dienstprogramme:
    • Pausiere die Wiedergabe nicht auf TestPlayerRunHelper.playUntilPosition. Die Wiedergabe bleibt im Wiedergabestatus, der Fortschritt wird jedoch angehalten, bis dem Test Behauptungen und weitere Aktionen hinzugefügt werden können.
  • Demo-App:
    • Fügen Sie ein Demomodul für Kurzformate hinzu, um die Verwendung von PreloadMediaSource mit dem Anwendungsfall für Kurzformate 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:
    • Behebung eines Problems, bei dem der Offset bei manuellen Suchanfragen außerhalb des Bereichs LiveConfiguration.min/maxOffset immer wieder auf min/maxOffset zurückgesetzt wurde.
    • Behebung des Problems, dass die OPUS- und VORBIS-Kanallayouts für die Kanäle 3, 5, 6, 7 und 8 falsch waren (#8396).
    • Es wurde ein Problem behoben, bei dem die Titelauswahl nach einer Suche auf null in einem Livestream den Stream fälschlicherweise an der Standardposition startete (#9347).
    • Behebung des Problems, bei dem neue Instanzen von CmcdData.Factory negative Werte für bufferedDurationUs von Chunk-Quellen erhielten, was zu einer IllegalArgumentException führte (#888).
  • Transformator:
    • Problembehebung, bei dem der Encoder bei der Konfiguration aufgrund einer hohen Betriebsrate eine Fehlermeldung ausgegeben hat
  • Extraktoren:
    • Kennzeichnen Sie sekundäre 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.
    • Fehler bei der Keyframe-Erkennung für TS-H264-Streams behoben (#864).
    • Dauerschätzung für TS-Streams korrigiert, die länger als 47.721 Sekunden sind (#855).
  • Audio:
    • Behebung des Umgangs mit EOS für SilenceSkippingAudioProcessor bei mehrfachem Aufruf (#712).
  • Video:
    • Wir fügen eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzu, durch die AVC-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#693).
  • Metadaten:
    • Fehler behoben, bei dem MediaMetadata nur aus Vorbis-Kommentaren mit Großbuchstaben ausgefüllt wurde (#876).
    • OutOfMemoryError wird beim Parsen sehr großer ID3-Frames erfasst. Das bedeutet, dass die Wiedergabe ohne die Tag-Informationen fortgesetzt werden kann, anstatt dass die Wiedergabe vollständig fehlschlägt.
  • Digitale Rechteverwaltung:
    • Erweitern Sie die Problemumgehung für die falsche ClearKey-Lizenz-URL https://default.url auf API 33 und höher (bisher wurde diese Problemumgehung nur auf API 33 angewendet) (#837).
    • ERROR_DRM_SESSION_NOT_OPENED wurde korrigiert, wenn von verschlüsselten Inhalten zum Löschen von Inhalten ohne Oberfläche gewechselt wurde. Der Fehler ist auf die falsche Verwendung eines sicheren Decoders zur Wiedergabe der unverschlüsselten Inhalte zurückzuführen.
  • Sitzung:
    • Fügen Sie die benutzerdefinierten Schlüssel und Werte unter MediaMetadataCompat bis MediaMetadata.extras und MediaMetadata.extras bis MediaMetadataCompat ein (#756, #802).
    • Problem mit der Übertragung von notifyChildrenChanged für ältere Controller behoben (#644).
    • Ein Fehler wurde behoben, durch den auf einigen Geräten ein Absturz verursacht wurde, wenn für einen deaktivierten setWhen-Timer der Benachrichtigung eine negative Zeit festgelegt wurde (#903).
    • Fehler IllegalStateException behoben, wenn der Media-Benachrichtigungscontroller die Verbindung nicht hergestellt hat, als das erste Benachrichtigungsupdate angefordert wurde (#917).
  • UI:
    • Problem behoben, durch das die Schaltflächen „Vor“ und „Zurück“ nicht sichtbar waren, wenn sie in einem BottomSheetDialogFragment mit Material Design verwendet wurden (#511).
    • Das Problem, dass die Zahlen auf der Schaltfläche „Vorspulen“ der PlayerControlView nicht richtig ausgerichtet waren, wurde behoben (#547).
  • DASH-Erweiterung:
    • Parsen Sie "f800" im DASH-Manifest als Kanalanzahl von 5 für Dolby (#688).
  • Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
    • MIDI: Problem behoben, bei dem beim Vorspulen die Programmänderungsereignisse übersprungen wurden (#704).
    • Migrieren Sie zu FFmpeg 6.0 und aktualisieren Sie das unterstützte NDK auf r26b (#707, #867).
  • Cast-Erweiterung:
    • Die Erstellung einer Timeline wird jetzt so optimiert, dass die App nicht abstürzt, wenn das Laden von Medien auf dem Streaminggerät fehlschlägt (#708).

Version 1.2.0

15. November 2023

  • Gemeinsame Bibliothek:
    • Fügen Sie den Methoden in der Log.Logger-Schnittstelle einen @Nullable Throwable-Parameter hinzu. Der Parameter message für diese Methoden enthält keine Informationen mehr zum Throwable, der an die Log.{d,i,w,e}()-Methoden übergeben wird. Daher müssen diese Informationen bei Bedarf manuell an die Implementierungen angehängt werden (z. B. mit Logger.appendThrowableString(String, Throwable)).
    • Ein Kotlin-Kompatibilitätsproblem wurde behoben, bei dem generische Typparameter mit Nullwerten und Array-Elementtypen mit Nullwerten nicht als Nullwerte erkannt wurden. Beispiele sind die Methodenparameter TrackSelectorResult und SimpleDecoder (#6792).
    • Ändern Sie das Standardverhalten der Benutzeroberfläche und Benachrichtigungen in Util.shouldShowPlayButton, damit die Schaltfläche „Wiedergabe“ angezeigt wird, wenn die Wiedergabe vorübergehend unterdrückt wird (z.B. aufgrund eines vorübergehenden Verlusts des Audiofokus). Das Legacy-Verhalten kann mit PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) oder MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) beibehalten werden (#11213).
    • Aktualisiere androidx.annotation:annotation-experimental auf 1.3.1, um das Problem zu beheben: https://issuetracker.google.com/251172715.
    • Verschieben Sie ExoPlayer.setAudioAttributes auf die Player-Benutzeroberfläche.
  • ExoPlayer:
    • Probleme beim Suchen in AC4-Streams behoben, die durch die falsche Identifizierung von nur zum Decodieren bestimmten Samples verursacht wurden (#11000).
    • Die Wiedergabe kann auf ungeeigneten Audioausgabegeräten (z.B. dem integrierten Lautsprecher auf Wear OS-Geräten) unterdrückt werden, wenn diese Funktion über ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput aktiviert ist. Der Grund für die Unterdrückung der Wiedergabe wird mit Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT aktualisiert, wenn die Wiedergabe versucht wird, während keine geeigneten Audioausgaben verfügbar sind, oder wenn alle geeigneten Ausgaben während der Wiedergabe getrennt werden. Der Grund für die Unterdrückung wird entfernt, sobald eine geeignete Ausgabe verbunden ist.
    • Fügen Sie MediaSource.canUpdateMediaItem und MediaSource.updateMediaItem hinzu, um MediaItem-Aktualisierungen nach der Erstellung über Player.replaceMediaItem(s) zu akzeptieren.
    • Erlaube MediaItem-Aktualisierungen für alle MediaSource-Klassen, 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 ganze PNG-Datei als Sample in TrackOutput sendet und liest.
    • Erhöhen Sie die SequenceableLoader.continueLoading(long)-Methode in der SequenceableLoader-Schnittstelle auf SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo enthält zusätzliche Parameter, darunter playbackSpeed und lastRebufferRealtimeMs, zusätzlich zum vorhandenen playbackPositionUs.
    • Optimieren Sie die ChunkSource.getNextChunk(long, long, List, ChunkHolder)-Methode in der ChunkSource-Schnittstelle auf ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Den CMCD-Protokollen (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: Puffermangel (bs), Frist (dl), Wiedergaberate (pr) und Start (su) (#8699).
    • Fügen Sie ColorInfo die Luma- und die Chroma-Bittiefe hinzu (#491).
    • Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: „next object request“ (nor) und „next range request“ (nrr) (#8699).
    • Wir haben eine Funktion zum Übertragen von CMCD-Daten (Common Media Client Data) mithilfe von Abfrageparametern hinzugefügt (#553).
    • Fehler bei ConcurrentModificationException in ExperimentalBandwidthMeter beheben (#612).
    • Fügen Sie CompositeMediaSource.getMediaTimeForChildMediaTime den Parameter MediaPeriodId hinzu.
    • Unterstützung von ClippingMediaSource (und anderen Quellen mit Zeitabweichungen für Zeiträume/Fenster) in ConcatenatingMediaSource2 (#11226)
    • Ändern Sie BaseRenderer.onStreamChanged() so, dass auch ein MediaPeriodId-Argument empfangen wird.
  • Transformator:
    • EXIF-Rotationsdaten für Bildeingaben parsen
    • Entfernen Sie den Anmerkungstyp TransformationRequest.HdrMode und die zugehörigen Konstanten. Verwenden Sie stattdessen Composition.HdrMode und die zugehörigen Konstanten.
    • Vereinfachen Sie die OverlaySettings, um Probleme mit der Drehung zu beheben.
    • Die Parameter frameRate und durationUs von SampleConsumer.queueInputBitmap wurden in TimestampIterator geändert.
  • Titelauswahl:
    • Fügen Sie DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness hinzu, um eine nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Das Standardverhalten von true bleibt unverändert.
  • Extraktoren:
    • MPEG-TS: Der letzte Frame wird gerendert, indem die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange übergeben wird (#7909).
    • Tippfehler bei der Bestimmung von rotationDegrees korrigiert. projectionPosePitch in projectionPoseRoll geändert (#461)
    • Entfernen Sie die Annahme, dass Extractor-Instanzen direkt mit instanceof geprüft werden können. Wenn Sie Laufzeitzugriff auf die Implementierungsdetails eines Extractor benötigen, müssen Sie zuerst Extractor.getUnderlyingInstance aufrufen.
    • Fügen Sie BmpExtractor hinzu.
    • Fügen Sie WebpExtractor hinzu.
    • HeifExtractor hinzufügen.
    • Mp4Extractor unterstützt jetzt QuickTime Classic.
  • Audio:
    • Unterstützung für 24/32-Bit-Big-Endian-PCM in MP4 und Matroska hinzufügen und PCM-Codierung für lpcm in MP4 parsen
    • Unterstützung für das Extrahieren von Vorbis-Audioinhalten in MP4
    • Fügen Sie AudioSink.getFormatOffloadSupport(Format) hinzu, um den Grad der Auslagerungsunterstützung abzurufen, die die Senke für das Format über einen DefaultAudioOffloadSupportProvider bereitstellen kann. Es gibt die neue AudioOffloadSupport zurück, die isFormatSupported, isGaplessSupported und isSpeedChangeSupported enthält.
    • Fügen Sie AudioSink.setOffloadMode() hinzu, über die die Auslagerungskonfiguration auf der Audiosenke konfiguriert wird. Der Standardwert ist AudioSink.OFFLOAD_MODE_DISABLED.
    • Das Auslagern kann über setAudioOffloadPreference in TrackSelectionParameters aktiviert werden. Wenn die Einstellung aktiviert ist, das Gerät das Auslagern für das Format unterstützt und die Titelauswahl ein einzelner Audiotrack ist, wird das Audio-Auslagern aktiviert.
    • Wenn audioOffloadModePreference auf AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED gesetzt ist, wird mit DefaultTrackSelector nur dann ein Audiotrack ausgewählt, wenn das Format dieses Tracks beim Offload unterstützt wird. Wenn beim Offload kein Audiotrack unterstützt wird, wird kein Track ausgewählt.
    • Die Unterstützung für unterbrechungsfreies Streaming beim Offload wird bei Geräten mit einer älteren API als API-Level 33 aufgrund eines Problems mit der Wiedergabeposition nach dem Titelübergang deaktiviert.
    • Entfernen Sie den Parameter enableOffload aus der Methodensignatur von DefaultRenderersFactory.buildAudioSink.
    • Entfernen Sie die Methode DefaultAudioSink.Builder.setOffloadMode.
    • Entfernen Sie den intdef-Wert DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Unterstützung für Opus-Metadaten ohne Unterbrechungen bei der Offload-Wiedergabe hinzugefügt.
    • Ermöglicht die Wiederherstellung des Renderers, indem das Offload deaktiviert wird, wenn der erste Schreibvorgang fehlgeschlagen ist (#627).
    • Die Auslagerungsplanung standardmäßig für die auslagerte Wiedergabe von Audioinhalten aktivieren
    • Löschen Sie ExoPlayer.experimentalSetOffloadSchedulingEnabled und AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged wurde in onSleepingForOffloadChanged und onExperimentalOffloadedPlayback in onOffloadedPlayback umbenannt.
    • Verschiebt im Modus „Audio-Offload“ zugehörige TrackSelectionParameters-Schnittstellen und -Definitionen in eine innere AudioOffloadPreferences-Klasse.
    • Fügen Sie onAudioTrackInitialized- und onAudioTrackReleased-Callbacks zu AnalyticsListener, AudioRendererEventListener und AudioSink.Listener hinzu.
    • Das Problem mit dem Unterlauf des DTS Express-Audiopuffers wurde behoben (#650).
    • Es wurde ein Fehler behoben, bei dem die Funktionsprüfung für E-AC3-JOC IllegalArgumentException ausgibt (#677).
  • Video:
    • MediaCodecVideoRenderer darf eine benutzerdefinierte VideoFrameProcessor.Factory verwenden.
    • Fehler behoben, durch den der erste Frame nicht gerendert werden konnte, wenn der Audiostream mit negativen Zeitstempeln beginnt (#291).
  • Text:
    • Entfernen Sie ExoplayerCuesDecoder. Texttracks 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 „nur-decodierende“ Samples aufgerufen, da die Implementierung ohnehin null zurückgeben muss.
  • Wirkung:
    • VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) Bitmap-Eingabe nach Zeitstempel in die Warteschlange stellen.
    • Ändere die VideoFrameProcessor.registerInputStream() so, dass sie nicht blockiert wird. Apps müssen VideoFrameProcessor.Listener#onInputStreamRegistered() implementieren.
    • Die frameRate- und durationUs-Parameter von VideoFrameProcessor.queueInputBitmap wurden in TimestampIterator geändert.
  • IMA-Erweiterung:
    • Fehler behoben, durch den bei einem DASH-Livestream mit mehreren Zeiträumen, der nicht der erste Eintrag in einer Playlist ist, eine Ausnahme ausgelöst werden kann (#571).
    • StreamManager vor dem Aufrufen von AdsLoader.destroy() freigeben
    • Die IMA SDK-Version wurde auf 3.31.0 erhöht.
  • Sitzung:
    • Legen Sie das Verhalten des Benachrichtigungsdienstes im Vordergrund in DefaultMediaNotificationProvider auf FOREGROUND_SERVICE_IMMEDIATE fest (#167).
    • Verwenden Sie nur android.media.session.MediaSession.setMediaButtonBroadcastReceiver() ab API 31, um Probleme mit verworfenen APIs auf Samsung-Geräten zu vermeiden (#167).
    • Verwenden Sie den Medienbenachrichtigungs-Controller als Proxy, um verfügbare Befehle und ein benutzerdefiniertes Layout für die Benachrichtigung und die Plattformsitzung festzulegen.
    • Wandeln Sie Medienschaltflächenereignisse, die von MediaSessionService.onStartCommand() in Media3 empfangen werden, um, anstatt sie an die Plattformsitzung und zurück in Media3 weiterzuleiten. Der Controller des Anrufers ist immer der Controller der Medienbenachrichtigung. Apps können Anrufe, die von der Benachrichtigung stammen, auf allen unterstützten API-Ebenen auf dieselbe Weise erkennen.
    • Es wurde ein Fehler behoben, bei dem MediaController.getCurrentPosition() nicht voranschreitet, wenn eine Verbindung zu einer Legacy-MediaSessionCompat besteht.
    • Fügen Sie zur besseren Übersicht MediaLibrarySession.getSubscribedControllers(mediaId) hinzu.
    • Überschreiben Sie MediaLibrarySession.Callback.onSubscribe(), um die Verfügbarkeit der übergeordneten ID zu bestätigen, für die der Controller abonniert ist. Ist der Vorgang erfolgreich, wird das Abo akzeptiert und notifyChildrenChanged() wird sofort aufgerufen, um den Browser zu informieren (#561).
    • Fügen Sie ein Sitzungsdemo-Modul für Automotive OS hinzu und aktivieren Sie die Sitzungsdemo für Android Auto.
    • Legen Sie die Warteschlange der Framework-Sitzung nicht fest, wenn COMMAND_GET_TIMELINE für den Medienbenachrichtigungscontroller nicht verfügbar ist. Da Android Auto der Client-Controller ist, der aus der Framework-Sitzung liest, hat dies zur Folge, dass die Schaltfläche queue in der Benutzeroberfläche von Android Auto nicht angezeigt wird (#339).
    • Standardmäßig wird DataSourceBitmapLoader anstelle von SimpleBitmapLoader verwendet (#271, #327).
    • Fügen Sie MediaSession.Callback.onMediaButtonEvent(Intent) hinzu, damit Apps die Standard-Ereignisbehandlung der Medienschaltfläche überschreiben können.
  • UI:
    • Fügen Sie eine Player.Listener-Implementierung für Wear OS-Geräte hinzu, die die Unterdrückung der Wiedergabe aufgrund von Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT verarbeitet, indem ein Systemdialogfeld geöffnet wird, über das Nutzer einen geeigneten Audioausgang (z.B. Bluetooth-Kopfhörer) verbinden können. Der Listener setzt die Wiedergabe automatisch fort, wenn innerhalb eines konfigurierbaren Zeitlimits (Standardwert: 5 Minuten) ein geeignetes Gerät verbunden ist.
  • Downloads:
    • Deklarieren Sie für DownloadService den Typ „Datensynchronisierung“ im Vordergrund, um die Kompatibilität mit Android 14 zu gewährleisten. Wenn dieser Dienst verwendet wird, muss die App dataSync als foregroundServiceType in das Manifest einfügen und die Berechtigung FOREGROUND_SERVICE_DATA_SYNC hinzufügen (#11239).
  • HLS-Erweiterung:
    • Die HLS-Liveplaylist wird mit einem Intervall aktualisiert, das nicht vom Zeitpunkt des letzten Ladevorgangs, sondern vom Zeitpunkt des letzten Ladevorgangs berechnet wird (#663).
  • DASH-Erweiterung:
    • Mehrere DASH-IDs in der URL der Segmentvorlage zulassen
    • Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzufügen. Außerdem werden überlappende Untertitel besser unterstützt und es wird verhindert, dass sie beim Wechsel zwischen Untertitelsegmenten flackern. Sie können diese Funktion mit DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() aktivieren (#288).
  • RTSP-Erweiterung:
    • Es wurde eine Race-Bedingung behoben, die zu IndexOutOfBoundsException führen könnte, wenn auf TCP zurückgegriffen wird, oder die Wiedergabe in einigen Situationen aufhängt.
    • Status in der RTSP-Einrichtung prüfen, wenn der Ladestatus von RtspMediaPeriod zurückgegeben wird (#577).
    • Benutzerdefinierte Rtsp-Anfragemethoden im öffentlichen Header der Options-Antwort ignorieren (#613).
    • Verwende den Zeitlimitwert für die RTSP-Einrichtungsantwort im Zeitintervall für das Senden von Keep-Alive-RTSP-Optionsanfragen (#662).
  • Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
    • Geben Sie das MIDI-Decodermodul frei, das die Wiedergabe von Standard-MIDI-Dateien mithilfe der Jsyn-Bibliothek zur Audiosynthese unterstützt.
    • Fügen Sie DecoderOutputBuffer.shouldBeSkipped hinzu, um Ausgabe-Buffer direkt zu kennzeichnen, die nicht angezeigt werden müssen. Dies ist vorzuziehen gegenüber C.BUFFER_FLAG_DECODE_ONLY, das eingestellt wird.
    • Füge Decoder.setOutputStartTimeUs und SimpleDecoder.isAtLeastOutputStartTimeUs hinzu, damit Decoder nur zum Decodieren bestimmte Samples vor dem Startzeitpunkt löschen können. Dieser Wert sollte Buffer.isDecodeOnly vorgezogen werden, der eingestellt wird.
    • Fehler beim Veröffentlichen des MIDI-Decoder-Artefakts im Maven-Repository behoben Das Artefakt wird in media3-exoplayer-midi umbenannt (#734).
  • Leanback-Erweiterung:
    • Fehler behoben, durch den das Deaktivieren einer Oberfläche zu einem ArithmeticException im Leanback-Code führen kann (#617).
  • Testdienstprogramme:
    • Machen Sie TestExoPlayerBuilder und FakeClock mit Espresso-UI-Tests und Compose-UI-Tests kompatibel. Dadurch wird ein Fehler behoben, bei dem die Wiedergabe bei Interaktionen mit der Ansicht „Espresso“ oder „Compose“ nicht deterministisch voranschreitet.
  • Entfernen Sie veraltete Symbole:
    • Entfernen Sie TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) und TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Verwenden Sie stattdessen Composition.Builder.setHdrMode(int) und übergeben Sie Composition an Transformer.start(Composition, String).
    • Entfernen Sie die verworfene DownloadNotificationHelper.buildProgressNotification-Methode und verwenden Sie stattdessen eine nicht verworfene Methode, die einen notMetRequirements-Parameter annimmt.

Version 1.2.0-rc01

1. November 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.2.0-beta01

19. Oktober 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.2.0-alpha02

29. September 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.2.0-alpha01

17. August 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.1.0

Version 1.1.1

16. August 2023

  • Gemeinsame Bibliothek:
    • Die versehentlich hinzugefügte multidex-Abhängigkeit aus allen Modulen entfernen (#499).
  • ExoPlayer:
    • Problem in PlaybackStatsListener behoben, bei dem nach dem Löschen der Playlist PlaybackStats erstellt wurden
    • Fügen Sie dem CMCD-Logging (Common Media Client Data) weitere 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 nicht zu STATE_ENDED übergangen wurde (#538).
  • Audio-Offload:
    • Füge dem Bitstream für die ausgelagerte Opus-Wiedergabe gemäß RFC 7845 Ogg-ID-Header- und Kommentar-Header-Seiten vor.
  • Video:
    • H.265/HEVC: Fehler beim Parsen von SPS-Informationen zu kurzfristigen und langfristigen Referenzbildern behoben
  • Text:
    • CEA-608: Die Logik für die Kürzung von Cues wurde geändert, sodass nur sichtbarer Text berücksichtigt wird. Bisher wurden Einzug und Tabulatorabstand berücksichtigt, wenn die Cue-Länge auf 32 Zeichen begrenzt wurde. Dies war technisch gemäß der Spezifikation korrekt (#11019).
  • IMA-Erweiterung:
    • Aktualisierung der IMA SDK-Version auf Version 3.30.3.
  • Sitzung:
    • Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie einen Getter bereit, um darauf zuzugreifen. Wenn sich das benutzerdefinierte Layout ändert, wird MediaController.Listener.onCustomLayoutChanged aufgerufen. Apps, die verschiedene benutzerdefinierte Layouts an verschiedene Media3-Controller senden möchten, können dies in MediaSession.Callback.onConnect mithilfe eines AcceptedResultBuilder tun, um sicherzustellen, dass das benutzerdefinierte Layout für den Controller verfügbar ist, wenn die Verbindung hergestellt ist.
    • Behebung von Fällen, in denen MediaLibraryServiceLegacyStub einen Fehler an eine Result gesendet hat, die dies nicht unterstützt, was zu einer UnsupportedOperationException geführt hat (#78).
    • Die Erstellung von VolumeProviderCompat durch PlayerWrapper wurde korrigiert. volumeControlType wird jetzt sowohl über alte 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) festgelegt (#554).

Version 1.1.0

5. Juli 2023

  • Gemeinsame Bibliothek:
    • Grund für die Unterdrückung von unangemessenen Audiorouten hinzufügen und „Bei Verfügbarkeit wiedergeben“ ändern Grund für zu lange Unterdrückung ändern (#15).
    • Befehle zum Player hinzufügen:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Füge dem Player überladene Methoden hinzu, mit denen Nutzer Flags für die Lautstärke 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 stufen Sie den vorhandenen Konstruktor als veraltet ein.
    • Füge DeviceInfo.routingControllerId hinzu, um die ID des Routing-Controllers für die Remote-Wiedergabe anzugeben.
    • Player.replaceMediaItem(s) kann als Tastenkürzel zum Hinzufügen und Entfernen von Elementen an derselben Position verwendet werden (#8046).
  • ExoPlayer:
    • Erlaube ExoPlayer die Steuerung der Gerätelautstärkemethoden nur, wenn sie ausdrücklich aktiviert wurde. Mit ExoPlayer.Builder.setDeviceVolumeControlEnabled hast du Zugriff auf Folgendes:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) und setDeviceVolume(int, int)
      • increaseDeviceVolume(int) und increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) und decreaseDeviceVolume(int, int)
    • Füge FilteringMediaSource hinzu, um verfügbare Track-Typen aus einer MediaSource zu filtern.
    • Unterstützung für das Einfügen von Common Media Client Data (CMCD) in ausgehende Anfragen der adaptiven Streamingformate DASH, HLS und SmoothStreaming hinzufügen Die folgenden Felder br, bl, cid, rtp und sid wurden eingebunden (#8699). API-Struktur und API-Methoden:
      • Das CMCD-Logging ist standardmäßig deaktiviert. Mit MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) kannst du es aktivieren.
      • Alle Schlüssel sind standardmäßig aktiviert. Überschreiben Sie CmcdConfiguration.RequestConfig.isKeyAllowed(String key), um die protokollierten Schlüssel herauszufiltern.
      • Überschreiben Sie CmcdConfiguration.RequestConfig.getCustomData(), um das benutzerdefinierte Schlüsselprotokoll zu aktivieren.
    • Füge dem Manifest der Hauptdemo eine zusätzliche Aktion hinzu, um das Starten der Demo-App mit einer benutzerdefinierten *.exolist.json-Datei zu vereinfachen (#439).
    • Fügen Sie 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 ändern sich die Signaturen der öffentlichen Methoden SampleQueue.sourceId und SampleQueue.peekSourceId.
    • Fügen Sie den LoadControl-Methoden shouldStartPlayback und onTracksSelected Parameter hinzu, mit denen diese Methoden mit den entsprechenden MediaPeriod verknüpft werden können.
    • Sie können die Signatur von ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) ändern, indem Sie einen Zeitachsenparameter hinzufügen, der die Punkte mit den UIDs enthält, die als Schlüssel in der Zuordnung verwendet werden. Dies ist erforderlich, um Probleme mit der Parallelität bei Livestreams mit mehreren Zeiträumen zu vermeiden.
    • EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) und BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) werden eingestellt. Stattdessen kann die Variante der Methoden ohne mediaTimeOffsetUs aufgerufen werden. Beachten Sie, dass der Offset auch für die 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.
    • Korrektur des inkonsistenten Verhaltens zwischen ExoPlayer.setMediaItem(s) und addMediaItem(s) beim Aufrufen einer leeren Playlist.
  • Transformator:
    • Entfernen Sie Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Verwenden Sie stattdessen ExoPlayerAssetLoader.Factory(MediaSource.Factory) und Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • Transformer.startTransformation(MediaItem, ParcelFileDescriptor) entfernen.
    • Es wurde ein Fehler behoben, durch den die Transformation hängen bleiben konnte (was zu einem Zeitüberschreitungsfehler des Muxers führte), wenn das Ende des Videostreams signalisiert wurde, während ein Eingabeframe noch verarbeitet wurde.
    • Führe Codec-Abfragen über MediaCodecList aus, anstatt findDecoder/EncoderForFormat-Dienstprogramme zu verwenden, um die Unterstützung zu erweitern.
    • Entferne die B-Frame-Konfiguration in DefaultEncoderFactory, da sie auf einigen Geräten nicht funktioniert.
  • Titelauswahl:
    • Fügen Sie die Datei DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange hinzu. Diese ist standardmäßig deaktiviert. Wenn diese Option aktiviert ist, wird durch das DefaultTrackSelector eine neue Titelauswahl ausgelöst, wenn sich die Renderer-Funktionen geändert haben.
  • Extraktoren:
    • Ogg: Fehler bei der Suche in Dateien mit langer Dauer wurde behoben (#391).
    • FMP4: Problem behoben, bei dem TimestampAdjuster einen falschen Zeitstempel-Offset mit der Metadaten-Beispielzeit aus dem emsg-Atom initialisiert (#356).
  • Audio:
    • Fehler behoben, bei dem einige Wiedergaben fehlgeschlagen sind, wenn das Tunneling aktiviert ist und AudioProcessors aktiv sind, z.B. für das lückenfreies Zuschneiden (#10847).
    • Kapseln Sie Opus-Frames in Ogg-Paketen für direkte Wiedergaben (Auslagerung).
    • Extrapolieren der aktuellen Position während des Ruhemodus mit Auslagerungsplanung
    • Fügen Sie Renderer.release() und AudioSink.release() hinzu, um die Ressourcen am Ende des Lebenszyklus des Spielers freizugeben.
    • Änderungen an den Audiofunktionen in DefaultAudioSink verfolgen Fügen Sie im Konstruktor von DefaultAudioSink den erforderlichen Parameter context hinzu. Damit registriert sich DefaultAudioSink als Listener für AudioCapabilitiesReceiver und aktualisiert seine audioCapabilities-Property, wenn eine Änderung der Funktionen gemeldet wird.
    • Geben Sie Änderungen an Audiofunktionen über das neue Ereignis onAudioCapabilitiesChanged in der AudioSink.Listener-Schnittstelle und die neue Schnittstelle RendererCapabilities.Listener weiter, die onRendererCapabilitiesChanged-Ereignisse auslöst.
    • Füge ChannelMixingAudioProcessor hinzu, um Audiokanäle zu skalieren oder zu mischen.
    • Fügen Sie den neuen Ganzzahlwert DISCARD_REASON_AUDIO_BYPASS_POSSIBLE zu DecoderDiscardReasons hinzu, um den Audiodecoder zu verwerfen, wenn der Umgehungsmodus nach einer Änderung der Audiofunktionen möglich ist.
    • Unterstützung der direkten Wiedergabe für DTS Express und DTS:X hinzufügen (#335).
  • Video:
    • Sorgen Sie dafür, dass MediaCodecVideoRenderer einen VideoSize mit einer Breite und Höhe von 0 meldet, 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 festgelegt wurde.
  • Digitale Rechteverwaltung:
    • Reduzieren Sie die Sichtbarkeit mehrerer nur interner Methoden in DefaultDrmSession, die nicht von außerhalb des DRM-Pakets aufgerufen werden:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Füge eine neue Mixer-Bibliothek hinzu, mit der eine MP4-Containerdatei erstellt werden kann.
  • IMA-Erweiterung:
    • Mehrere Zeiträume für DASH-Livestreams für die dynamische Anzeigenbereitstellung aktivieren Die aktuelle Implementierung unterstützt die Suche in Livestreams noch nicht (#10912).
    • Ein Fehler wurde behoben, bei dem in Livestreams eine neue Anzeigengruppe eingefügt wurde, weil die berechnete Inhaltsposition in aufeinanderfolgenden Zeitachsen leicht variiert.
  • Sitzung:
    • Fügen Sie die Hilfsmethode MediaSession.getControllerForCurrentRequest hinzu, um Informationen über den Controller abzurufen, der gerade eine Player-Methode aufruft.
    • Fügen Sie androidx.media3.session.MediaButtonReceiver hinzu, damit Apps die Wiedergabe mit Medientastenereignissen fortsetzen können, die beispielsweise von einem Bluetooth-Headset gesendet werden (#167).
    • Fügen Sie MediaSession.Callback.onAddMediaItems eine Standardimplementierung hinzu, damit angeforderte MediaItems an Player übergeben werden können, wenn sie LocalConfiguration (z.B. URI) haben (#282).
    • Füge in der kompakten Ansicht von Medienbenachrichtigungen für Android 12 und niedriger standardmäßig die Befehlsschaltflächen „Zuvor“ und „Nächster Titel“ hinzu (#410).
    • Fügen Sie MediaSession.Callback.onAddMediaItems eine Standardimplementierung hinzu, damit die angeforderte MediaItems an Player übergeben werden kann, wenn sie LocalConfiguration enthalten (z.B. URI) (#282).
    • Füge in der kompakten Ansicht von Medienbenachrichtigungen für Android 12 und niedriger standardmäßig die Befehlsschaltflächen „Zuvor“ und „Nächster Titel“ hinzu (#410).
  • UI:
    • Fügen Sie die Util-Methoden shouldShowPlayButton und handlePlayPauseButtonAction hinzu, um benutzerdefinierte UI-Elemente mit einer Wiedergabe-/Pause-Schaltfläche zu erstellen.
  • RTSP-Erweiterung:
    • Verwende für MPEG4-LATM den Standardwert für „profile-level-id“, falls dieser in der SDP-Nachricht „Describe Response“ (#302) nicht vorhanden ist.
    • Verwende den Basis-URI für die Auflösung des relativen Pfads aus der RTSP-Sitzung, sofern er im DESCRIBE-Antwortheader vorhanden ist (#11160).
  • DASH-Erweiterung:
    • Entferne den Zeitversatz für Medien von MediaLoadData.startTimeMs und MediaLoadData.endTimeMs für DASH-Streams mit mehreren Zeiträumen.
    • Ein Fehler wurde behoben, bei dem beim erneuten Vorbereiten einer mehrperiodigen Live-Dash-Medienquelle eine IndexOutOfBoundsException ausgegeben wurde (#10838).
  • HLS-Erweiterung:
    • Fügen Sie HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) hinzu, um ein Zeitlimit für den Ladethread festzulegen, der auf die Initialisierung von TimestampAdjuster wartet. Wenn die Initialisierung nicht vor Ablauf des Zeitlimits abgeschlossen ist, wird PlaybackException geworfen, um ein endloses Stottern der Wiedergabe zu vermeiden. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
  • Testdienstprogramme:
    • Prüfen Sie in DataSourceContractTest, ob das URI-Schema nicht zwischen Groß- und Kleinschreibung unterscheidet.
  • Entfernen Sie eingestellte Symbole:
    • Entfernen Sie die DefaultAudioSink-Konstruktoren und verwenden Sie stattdessen DefaultAudioSink.Builder.
    • HlsMasterPlaylist entfernen und stattdessen HlsMultivariantPlaylist verwenden.
    • Entfernen Sie Player.stop(boolean). Verwenden Sie stattdessen Player.stop() und Player.clearMediaItems() (wenn reset = true).
    • Entfernen Sie zwei verworfene SimpleCache-Konstruktoren und verwenden Sie stattdessen einen nicht verworfenen Konstruktor, der ein DatabaseProvider annimmt, um die Leistung zu verbessern.
    • Entfernen Sie den Konstruktor DefaultBandwidthMeter und verwenden Sie stattdessen DefaultBandwidthMeter.Builder.
    • Entfernen Sie DefaultDrmSessionManager-Konstruktoren und verwenden Sie stattdessen DefaultDrmSessionManager.Builder.
    • Entfernen Sie zwei veraltete HttpDataSource.InvalidResponseCodeException-Konstruktoren und verwenden Sie einen nicht veralteten Konstruktor, der zusätzliche Felder(cause, responseBody) akzeptiert, um die Fehlerprotokollierung zu verbessern.
    • Entfernen Sie DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash und DownloadHelper.forSmoothStreaming und verwenden Sie stattdessen DownloadHelper.forMediaItem.
    • Entfernen Sie den veralteten DownloadService-Konstruktor und verwenden Sie einen nicht veralteten Konstruktor, der die Option zum Angeben eines channelDescriptionResourceId-Parameters enthält.
    • Entfernen Sie veraltete Stringkonstanten für Zeichensätze (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME und UTF16LE_NAME) und verwenden Sie stattdessen Kotlin-Zeichensätze aus dem kotlin.text-Paket, java.nio.charset.StandardCharsets oder com.google.common.base.Charsets.
    • Entfernen Sie den eingestellten WorkManagerScheduler-Konstruktor und verwenden Sie stattdessen einen nicht eingestellten Konstruktor, der die Option zum Angeben eines Context-Parameters enthält.
    • Entfernen Sie die verworfenen Methoden createVideoSampleFormat, createAudioSampleFormat, createContainerFormat und createSampleFormat, mit denen die Format-Klasse 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 Format.buildUpon() und Setter-Methoden.
    • Entfernen Sie die verworfene ExoPlayer.retry() und verwenden Sie stattdessen prepare().
    • Der verworfene Konstruktor DefaultTrackSelector ohne Argumente wurde entfernt. Verwenden Sie stattdessen DefaultTrackSelector(Context).
    • Entfernen Sie den veralteten Konstruktor OfflineLicenseHelper und verwenden Sie stattdessen OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Entfernen Sie den verworfenen DownloadManager-Konstruktor. Verwenden Sie stattdessen den Konstruktor, der stattdessen einen Executor verwendet.
    • Entfernen Sie die veralteten Cue-Konstruktoren und verwenden Sie stattdessen Cue.Builder.
    • Entfernen Sie den veralteten Konstruktor OfflineLicenseHelper und verwenden Sie stattdessen OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Vier eingestellte AnalyticsListener-Methoden wurden entfernt:
      • onDecoderEnabled verwenden Sie stattdessen onAudioEnabled und/oder onVideoEnabled.
      • onDecoderInitialized; verwenden Sie stattdessen onAudioDecoderInitialized und/oder onVideoDecoderInitialized.
      • onDecoderInputFormatChanged verwenden, verwenden Sie stattdessen onAudioInputFormatChanged und/oder onVideoInputFormatChanged.
      • onDecoderDisabled. Verwenden Sie stattdessen onAudioDisabled und/oder onVideoDisabled.
    • Entfernen Sie die verworfenen Player.Listener.onSeekProcessed und AnalyticsListener.onSeekProcessed und verwenden Sie stattdessen onPositionDiscontinuity mit DISCONTINUITY_REASON_SEEK.
    • Entfernen Sie ExoPlayer.setHandleWakeLock(boolean) und verwenden Sie stattdessen setWakeMode(int).
    • Entfernen Sie die verworfene Zeichenfolge DefaultLoadControl.Builder.createDefaultLoadControl() und verwenden Sie stattdessen build().
    • Entfernen Sie das verworfene MediaItem.PlaybackProperties und 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 veröffentlicht. Version 1.0.2 enthält diese Commits.

Dieser Release entspricht dem Release ExoPlayer 2.18.7.

Diese Version enthält die folgenden Änderungen seit der Version 1.0.1:

  • Kernbibliothek:
    • Fügen Sie Buffer.isLastSample() hinzu, der angibt, ob Buffer das Flag C.BUFFER_FLAG_LAST_SAMPLE enthält.
    • Ein Problem wurde 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 „Ende des Streams“ zu lesen. (#11079).
  • Extraktoren:
    • Das Parsen von H.265-SPS in MPEG-TS-Dateien wurde korrigiert, indem die bereits von RTSP- und MP4-Extractorn verwendete Parselogik wiederverwendet wurde (#303).
  • Text:
    • SSA: Unterstützung für UTF-16-Dateien hinzugefügt, wenn sie mit einer Bytereihenfolge-Marke beginnen (#319).
  • Sitzung:
    • Es wurde ein Problem behoben, bei dem MediaController die verfügbaren Befehle nicht aktualisiert, wenn es mit einem Legacy-MediaSessionCompat verbunden ist, der seine Aktionen aktualisiert.
    • Fehler behoben, durch den die MediaLibraryService bei einem Aufruf von der System-UI an die Callback.onGetLibraryRoot mit params.isRecent == true unter API 30 den Wert „null“ zurückgab (#355).
    • Behebung eines Speicherlecks bei MediaSessionService oder MediaLibraryService (#346)
    • Ein Fehler wurde behoben, durch den eine kombinierte Timeline- und Positionsaktualisierung in einer MediaSession dazu führen konnte, dass eine MediaController eine IllegalStateException auslöste.

Version 1.0.1

18. April 2023

androidx.media3:media3-*:1.0.1 wurde veröffentlicht. Version 1.0.1 enthält diese Commits.

Dieser Release entspricht der ExoPlayer-Version 2.18.6.

  • Kernbibliothek:
    • Überschreibung des Ziel-Livestreams beim Springen zur Standardposition zurücksetzen (#11051).
    • Fehler behoben, durch den leere Sample-Streams in den Medien die Wiedergabe blockieren konnten
  • Sitzung:
    • Es wurde ein Fehler 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 der Legacy-Version MediaControllerCompat.Callback.onSessionEvent die fehlende Weiterleitung von MediaSession.broadcastCustomCommand hinzu (#293).
    • Fehler behoben, durch den die verfügbaren Befehle nicht aktualisiert wurden, wenn MediaSession.setPlayer aufgerufen wurde.
    • Behebung eines Problems, bei dem TrackSelectionOverride-Instanzen, die von einer MediaController gesendet werden, ignoriert werden, wenn sie auf eine Gruppe mit Format.metadata verweisen (#296).
    • Problem behoben, bei dem Player.COMMAND_GET_CURRENT_MEDIA_ITEM verfügbar sein muss, um über den alten MediaSessionCompat auf Metadaten zuzugreifen.
    • Problem behoben, bei dem MediaSession-Instanzen in einem Hintergrund-Thread zu Abstürzen führen, wenn sie in MediaSessionService verwendet werden (#318).
    • Problem behoben, bei dem ein Empfänger für Medienschaltflächen von der Bibliothek deklariert wurde, ohne dass dies von der App beabsichtigt war (#314).
  • DASH:
    • Fehler bei der Verarbeitung leerer Zeitachsen für Segmente behoben (#11014).
  • RTSP:
    • Versuchen Sie es noch einmal mit TCP, wenn die RTSP-Einrichtung mit UDP mit dem RTSP-Fehler 461 Nicht unterstützter Transport (#11069) fehlschlägt.

Version 1.0.0

22. März 2023

androidx.media3:media3-*:1.0.0 wurde veröffentlicht. Version 1.0.0 enthält diese Commits.

Dieser Release entspricht der ExoPlayer-Version 2.18.5.

Es gibt keine Änderungen seit 1.0.0-rc02.

Version 1.0.0-rc02

2. März 2023

androidx.media3:media3-*:1.0.0-rc02 wird veröffentlicht. Version 1.0.0-rc02 enthält diese Commits.

Dieser Release entspricht der ExoPlayer-Version 2.18.4.

  • Kernbibliothek:
    • Fehlerbehebung bei der Netzwerktyperkennung in API 33 (#10970)
    • Fehler bei NullPointerException beim Anrufen von ExoPlayer.isTunnelingEnabled behoben (#10977)
  • Downloads:
    • Die maximale Differenz zwischen den Startzeiten zweier zusammenzuführender Segmente kann in SegmentDownloader und Unterklassen konfiguriert werden (#248).
  • Audio:
    • Problem mit der MP3-Wiedergabe ohne Pausen auf Samsung-Geräten behoben (#8594).
    • Fehler behoben, durch den die Wiedergabegeschwindigkeit, die direkt nach dem Deaktivieren von Audio festgelegt wurde, von einer vorherigen Geschwindigkeitsänderung überschrieben werden konnte (#10882).
  • Video:
    • Ordnen Sie das HEVC HDR10-Format HEVCProfileMain10HDR10 statt HEVCProfileMain10 zu.
    • Behelfslösung für ein Geräteproblem auf Chromecast mit Google TV und Lenovo M10 FHD Plus hinzugefügt, durch das AVC-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#10898).
    • Behebung von Leistungsproblemen beim Freigeben von Frames beim Abspielen von Medien mit einer Framerate, die weit über der Bildschirmaktualisierungsrate liegt.
  • Streamen:
    • Behebung des vorübergehenden STATE_IDLE beim Wechseln zwischen Medienelementen (#245)
  • RTSP:
    • Die IllegalArgumentException beim Parsen ungültiger RTSP-Antworten abfangen und beschreiben (#10971).
  • Sitzung:
    • Es wurde ein Fehler behoben, durch den die Wiedergabe-/Pause-Schaltfläche in der Benachrichtigung nicht mit dem Playerstatus aktualisiert wurde (#192).
  • IMA-Erweiterung:
    • Ein Fehler wurde behoben, durch den DAI-Streams ohne Anzeigen nicht gestartet werden konnten, weil das erste (und im Fall ohne Anzeigen das einzige) LOADED-Ereignis nicht empfangen wurde.

Version 1.0.0-rc01

16. Februar 2023

androidx.media3:media3-*:1.0.0-rc01 wird veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

Dieser Release entspricht der ExoPlayer-Version 2.18.3.

  • Kernbibliothek:
    • Optimiere die Logik für die Dekoderreihenfolge des Renderers, damit die Einstellungen von MediaCodecSelector eingehalten werden, auch wenn ein Dekoder meldet, dass er die Medien möglicherweise nicht leistungsfähig wiedergeben kann. Bei der Standardauswahl wird beispielsweise ein Hardware-Decoder mit nur funktionaler Unterstützung einem Software-Decoder vorgezogen, der das Format vollständig unterstützt (#10604).
    • Fügen Sie ExoPlayer.Builder.setPlaybackLooper hinzu, die einen bereits vorhandenen Wiedergabethread für eine neue ExoPlayer-Instanz festlegt.
    • Es ist jetzt möglich, Downloadmanager-Hilfsprogramme zu löschen (#10776).
    • Fügen Sie BasePlayer.seekTo einen Parameter hinzu, um auch den Befehl anzugeben, der für die Suche verwendet wird.
    • Verwenden Sie das Design beim Laden von drawables bei API 21 und höher (#220).
    • ConcatenatingMediaSource2 hinzugefügt, mit dem mehrere Medienelemente in einem einzigen Fenster kombiniert werden können (#247).
  • Extraktoren:
    • Wenn beim Parsen der Trak-Atome in der Beispieltabelle (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt, wird ein ParserException anstelle von NullPointerException ausgelöst.
    • Samples werden jetzt richtig übersprungen, wenn in fMP4 direkt zu einem Synchronframe gesprungen wird (#10941).
  • Audio:
    • Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für AudioTrack bei direkten Wiedergaben (Passthrough) zu berechnen.
  • Text:
    • Korrektur des Problems, dass TextRenderer einen ungültigen (negativen) Index an Subtitle.getEventTime weitergibt, wenn eine Untertiteldatei keine Cues enthält.
    • SubRip: Unterstützung für UTF-16-Dateien hinzugefügt, wenn sie mit einem Byte-Reihenfolge-Zeichen beginnen.
  • Metadaten:
    • Mehrere durch Nullen getrennte Werte aus ID3-Frames parsen, wie von ID3 v2.4 zulässig
    • Fügen Sie MediaMetadata.mediaType hinzu, um den in den Metadaten beschriebenen Inhaltstyp oder Ordnertyp anzugeben.
    • Fügen Sie MediaMetadata.isBrowsable als Ersatz für MediaMetadata.folderType hinzu. Der Ordnertyp wird in der nächsten Version eingestellt.
  • DASH:
    • Fügen Sie ein vollständiges Parsen für Bildanpassungssätze hinzu, einschließlich der Kachelanzahl (#3752).
  • UI:
    • Korrigieren Sie das verworfene PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener), damit Sichtbarkeitsänderungen an den registrierten Listener übergeben werden (#229).
    • Korrigiere die Reihenfolge der Steuerelemente des mittleren Players in PlayerView, wenn du ein Rechts-nach-links-Layout (RTL-Layout) verwendest (#227).
  • Sitzung:
    • Füge abstrakte SimpleBasePlayer-Elemente hinzu, um die Player-Schnittstelle für benutzerdefinierte Player zu implementieren.
    • Fügen Sie eine Hilfsmethode hinzu, um das Plattformsitzungstoken in Media3 SessionToken zu konvertieren (#171).
    • Mit onMediaMetadataChanged können Updates der Plattformmediensitzung ausgelöst werden (#219).
    • Fügen Sie die Mediensitzung als Argument von getMediaButtons() der DefaultMediaNotificationProvider hinzu und verwenden Sie zur besseren Verständlichkeit unveränderliche Listen (#216).
    • Füge einen onSetMediaItems-Callback-Listener hinzu, um die MediaItem-Liste, den Startindex und die Position nach Sitzung zu ändern/festzulegen, bevor sie auf den Player angewendet werden (#156).
    • Doppeltippen nicht für Ereignisse von Medientasten außerhalb von Bluetooth erkennen lassen (#233).
    • QueueTimeline ist jetzt robuster bei einem fragwürdigen alten Sitzungsstatus (#241).
  • Metadaten:
    • Mehrere durch Nullen getrennte Werte aus ID3-Frames parsen, wie von ID3 v2.4 zulässig
    • Fügen Sie MediaMetadata.mediaType hinzu, um den in den Metadaten beschriebenen Inhaltstyp oder Ordnertyp anzugeben.
    • Fügen Sie MediaMetadata.isBrowsable als Ersatz für MediaMetadata.folderType hinzu. Der Ordnertyp wird im nächsten Release eingestellt.
  • Cast-Erweiterung:
    • Cast SDK-Version auf 21.2.0 angehoben.
  • IMA-Erweiterung:
    • Entfernen Sie den Player-Listener der ImaServerSideAdInsertionMediaSource im Anwendungs-Thread, um Probleme mit Threads zu vermeiden.
    • Füge der ImaServerSideAdInsertionMediaSource.AdsLoader.Builder die Property focusSkipButtonWhenAvailable hinzu, um das Fokussieren der Schaltfläche „Überspringen“ auf Fernsehern anzufordern, und setze sie standardmäßig auf „wahr“.
    • Füge der ImaServerSideAdInsertionMediaSource.AdsLoader die Methode focusSkipButton() hinzu, um den Fokus programmatisch auf die Schaltfläche „Überspringen“ zu setzen.
    • Die IMA SDK-Version wurde auf 3.29.0 erhöht.
  • Demo-App:
    • Benachrichtigungsberechtigung für Downloadbenachrichtigungen zur Laufzeit anfordern (#10884).

Version 1.0.0-beta03

22. November 2022

androidx.media3:media3-*:1.0.0-beta03 wird veröffentlicht. Version 1.0.0-beta03 enthält diese Commits.

Dieser Release entspricht der ExoPlayer-Version 2.18.2.

  • Kernbibliothek:
    • Füge ExoPlayer.isTunnelingEnabled hinzu, um zu prüfen, ob das Tunneling für die aktuell ausgewählten Titel aktiviert ist (#2518).
    • Fügen Sie WrappingMediaSource hinzu, um das Umbrechen einer einzelnen MediaSource zu vereinfachen (#7279).
    • Der Back-Buffer wird verworfen, bevor die Wiedergabe aufgrund von zu wenig verfügbarem Arbeitsspeicher hängt.
    • Schließen Sie den Trace-Block „doSomeWork“, wenn die Auslagerung aktiviert ist.
    • Ein Sitzungstracking-Problem mit schnellen Suchvorgängen in PlaybackStatsListener wurde behoben (#180).
    • Fehlenden onMediaItemTransition-Callback senden, wenn seekToNext oder seekToPrevious in einer Playlist mit einem einzelnen Element aufgerufen wird (#10667).
    • Fügen Sie Player.getSurfaceSize hinzu, um die Größe der Oberfläche zurückzugeben, auf der das Video gerendert wird.
    • Fehler behoben, durch den das Entfernen von Zuhörern während der Player-Veröffentlichung zu einer IllegalStateException führen konnte (#10758).
  • Build:
    • Erzwingen Sie die Mindestanzahl von compileSdkVersion, um Kompilierungsfehler zu vermeiden (#10684).
    • Blockieren Sie die Veröffentlichung, wenn die Datei in einem anderen Gradle-Build enthalten ist.
  • Titelauswahl:
    • Andere Tracks als Dolby Vision bevorzugen, wenn das Display diese nicht unterstützt. (#8944).
  • Downloads:
    • Behebung eines potenziellen Endlosschleifenfehlers in ProgressiveDownloader, der durch gleichzeitigen Download und Wiedergabe mit demselben PriorityTaskManager verursacht wurde (#10570).
    • Die Downloadbenachrichtigung wird sofort angezeigt (#183).
    • Parallele Downloadentfernungen auf 1 beschränken, um eine übermäßige Threaderstellung zu vermeiden (#10458).
  • Video:
    • Wenn das Display Dolby Vision nicht unterstützt, versuchen Sie es mit einem alternativen Decoder. (#9794).
  • Audio:
    • Verwenden Sie SingleThreadExecutor für die Veröffentlichung von AudioTrack-Instanzen, um Fehler aufgrund von unzureichendem Arbeitsspeicher 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.
    • 8-Kanal- und 12-Kanal-Audio wird in allen Android-Versionen den Kanalmasken 7.1 und 7.1.4 zugeordnet (#10701).
  • Metadaten:
    • MetadataRenderer kann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstelle eine Instanz mit MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean), um anzugeben, ob der Renderer Metadaten frühzeitig oder synchron mit der Position des Players ausgibt.
  • Digitale Rechteverwaltung:
    • Sie können einen Fehler in der ClearKey-Implementierung für Android 13 umgehen, der eine nicht leere, aber ungültige Lizenz-URL zurückgibt.
    • Der Fehler setMediaDrmSession failed: session not opened beim Wechseln zwischen DRM-Schemas in einer Playlist (z.B. von Widevine zu ClearKey) wurde behoben.
  • Text:
    • CEA-608: Befehle zum Dienstwechsel in Feld 2 müssen richtig verarbeitet werden (#10666).
  • DASH:
    • EventStream.presentationTimeOffset aus Manifesten parsen (#10460)
  • UI:
    • Aktuelle Overrides des Players als Voreinstellung in TrackSelectionDialogBuilder verwenden (#10429)
  • Sitzung:
    • Befehle müssen immer in der richtigen Reihenfolge ausgeführt werden, auch wenn für einige eine asynchrone Auflösung erforderlich ist (#85).
    • Fügen Sie DefaultMediaNotificationProvider.Builder hinzu, um DefaultMediaNotificationProvider-Instanzen zu erstellen. Der Builder kann die Benachrichtigungs-ID, die Benachrichtigungskanal-ID und den Benachrichtigungskanalnamen konfigurieren, die vom Anbieter verwendet werden. Fügen Sie außerdem die Methode DefaultMediaNotificationProvider.setSmallIcon(int) hinzu, um das kleine Symbol für Benachrichtigungen festzulegen. (#104)
    • Befehle, die vor MediaController.release() gesendet wurden, dürfen nicht verworfen werden (#99).
    • SimpleBitmapLoader kann Bitmap aus file://-URIs laden (#108).
    • Eine Assertion wurde korrigiert, die verhindert, dass MediaController in einem bestimmten Zeitraum nach einer Anzeige sucht (#122).
    • Wenn die Wiedergabe endet, wird die MediaSessionService im Vordergrund beendet und eine Benachrichtigung wird angezeigt, um die Wiedergabe des zuletzt abgespielten Medienelements neu zu starten (#112).
    • Starten Sie keinen Dienst im Vordergrund mit einem ausstehenden Intent für eine Pause (#167).
    • Das mit der von DefaultNotificationProvider erstellten Benachrichtigung verknüpfte Symbol kann in API 26 und API 27 manuell ausgeblendet werden. In API 28 und höher wird es automatisch ausgeblendet. #131
    • Fehler behoben, bei dem eine zweite Binder-Verbindung von einer älteren MediaSession zu einer Media3-MediaController zu IllegalStateExceptions führte (#49).
  • RTSP:
    • H263-Fragmentierungspakete verarbeiten (#119)
    • Unterstützung für MP4A-LATM hinzugefügt (#162)
  • IMA:
    • Es wurde eine Zeitüberschreitung für das Laden von Anzeigeninformationen hinzugefügt, um Fälle zu behandeln, in denen das IMA SDK beim Laden einer Anzeige hängen bleibt (#10510).
    • Mid-Roll-Anzeigen können nicht mehr übersprungen werden, wenn zum Ende des Inhalts gesprungen wird (#10685).
    • Die Fensterdauer für Livestreams mit serverseitig eingefügten Anzeigen wird jetzt korrekt berechnet, z. B. bei der dynamischen Anzeigenbereitstellung mit IMA (#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:
    • Die CMake-Version wurde aktualisiert, um Inkompatibilitäten mit den neuesten Android Studio-Releases zu vermeiden (#9933).
  • Cast-Erweiterung:
    • Implementiere getDeviceInfo(), um CastPlayer bei der Wiedergabesteuerung mit einer MediaController identifizieren zu können (#142).
  • Transformator:
    • Es wurde ein Watchdog-Timer für den Muxer hinzugefügt, um zu erkennen, wenn die Generierung eines Ausgabe-Samples zu langsam ist.
  • Entfernen Sie veraltete Symbole:
    • Entfernen Sie Transformer.Builder.setOutputMimeType(String). 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 veröffentlicht. Version 1.0.0-beta02 enthält diese Commits.

Dieser Release entspricht der ExoPlayer-Version 2.18.1.

  • Kernbibliothek:
    • Achte darauf, dass das Ersetzen von ShuffleOrder durch ExoPlayer.setShuffleOrder zu einem Aufruf von Player.Listener#onTimelineChanged mit reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED führt (#9889).
    • Bei progressiven Medien sollten nur ausgewählte Titel in der gepufferten Position enthalten sein (#10361).
    • Benutzerdefinierte Protokollierung für die gesamte ExoPlayer-Logausgabe zulassen (#9752).
    • Die Implementierung von setDataSourceFactory in DefaultMediaSourceFactory wurde korrigiert, die in einigen Fällen nicht funktionierte (#116).
  • Extraktoren:
    • Fehler beim Parsen von H265-Kurzzeit-Referenzbildsätzen behoben (#10316).
    • Fehler beim Parsen von Bitraten aus esds-Boxen behoben (#10381).
  • DASH:
    • ClearKey-Lizenz-URL aus Manifesten parsen (#10246)
  • UI:
    • TalkBack muss die aktuell aktive Geschwindigkeitsoption im Menü für die Wiedergabesteuerung ansagen (#10298).
  • RTSP:
    • VP8-Fragmentierung von Paketen hinzugefügt (#110).
  • Leanback-Erweiterung:
    • Hören Sie sich die Änderungen an playWhenReady in LeanbackAdapter an (10420).
  • Besetzung:
    • Verwende den MediaItem, der an die Playlist-Methoden übergeben wurde, als Window.mediaItem in CastTimeline (#25, #8212).
    • Unterstützung von Player.getMetadata() und Listener.onMediaMetadataChanged() mit CastPlayer (#25)

Version 1.0.0-beta01

16. Juni 2022

androidx.media3:media3-*:1.0.0-beta01 wird veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.

Dies entspricht der ExoPlayer-Version 2.18.0.

  • Kernbibliothek:
    • Unterstützung für Android-Plattformdiagnosen über MediaMetricsManager aktivieren. ExoPlayer leitet Wiedergabeereignisse und Leistungsdaten an die Plattform weiter, um Informationen zur Systemleistung und zum Debuggen auf dem Gerät bereitzustellen. Diese Daten können auch von Google erhoben werden, wenn der Nutzer des Geräts die Freigabe von Nutzungs- und Diagnosedaten aktiviert hat. Apps können mit ExoPlayer.Builder.setUsePlatformDiagnostics(false) verhindern, dass sie zur Plattformdiagnose für ExoPlayer beitragen.
    • Fehler behoben, bei dem bei der Verwendung von MergingMediaSource zu oft Titel zurückgesetzt wurden, z. B. beim seitlichen Laden von Untertiteln und Ändern des ausgewählten Untertitels während der Wiedergabe (#10248).
    • Der 5G-NSA-Netzwerktyp wird in API 29 und 30 nicht mehr erkannt. Bei diesen Wiedergaben wird davon ausgegangen, dass ein 4G-Netzwerk verfügbar ist.
    • 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 erforderlich sind, wenn das genaue LocalConfiguration nicht bekannt ist. Entfernen Sie auch MediaMetadata.mediaUrl, da es jetzt in RequestMetadata enthalten ist.
    • Füge Player.Command.COMMAND_SET_MEDIA_ITEM hinzu, damit Spieler das Festlegen eines einzelnen Elements zulassen können.
  • Titelauswahl:
    • Fassen Sie die Klasse TrackSelectionOverrides in TrackSelectionParameters zusammen und stufen Sie TrackSelectionOverride zu einer Klasse der obersten Ebene hoch.
    • Benennen Sie TracksInfo in Tracks und TracksInfo.TrackGroupInfo in Tracks.Group um. Player.getCurrentTracksInfo und Player.Listener.onTracksInfoChanged wurden in Player.getCurrentTracks und Player.Listener.onTracksChanged umbenannt. Dazu gehört auch, dass der Name der Player.Listener.onTracksChanged-Methode nicht mehr als veraltet eingestuft wird, aber mit anderen Parametertypen.
    • Ändern Sie DefaultTrackSelector.buildUponParameters und DefaultTrackSelector.Parameters.buildUpon so, dass DefaultTrackSelector.Parameters.Builder anstelle der verworfenen DefaultTrackSelector.ParametersBuilder zurückgegeben wird.
    • Fügen Sie DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities hinzu, das standardmäßig aktiviert ist. Wenn diese Option aktiviert ist, werden von DefaultTrackSelector Audiotracks bevorzugt, deren Kanalanzahl die Ausgabefunktionen des Geräts nicht überschreitet. Auf Mobilgeräten bevorzugt DefaultTrackSelector Stereo-/Mono-Audioformate gegenüber Mehrkanal-Audioformaten, es sei denn, das Mehrkanalformat kann räumlich dargestellt werden (Android 12L und höher) oder es handelt sich um ein Dolby-Surround-Sound-Format. Auf Geräten, die die Audio-Raumklangtechnologie unterstützen, prüft DefaultTrackSelector außerdem, ob sich die Spatializer-Eigenschaften geändert haben, und löst bei Bedarf eine neue Titelauswahl aus. Geräte mit einem television UI-Modus sind von diesen Einschränkungen ausgenommen. Das Format mit der höchsten Kanalanzahl wird bevorzugt. Damit diese Funktion aktiviert werden kann, muss die DefaultTrackSelector-Instanz mit einem Context erstellt werden.
  • Video:
    • Benennen Sie DummySurface in PlaceholderSurface um.
    • Fügen Sie der MediaCodecVideoRenderer.getCodecMaxInputSize die AV1-Unterstützung hinzu.
  • Audio:
    • LG AC3-Audiodecoder, der einen nicht standardmäßigen MIME-Typ angibt
    • Ändern Sie den Rückgabetyp von AudioAttributes.getAudioAttributesV21() von android.media.AudioAttributes in eine neue AudioAttributesV21-Wrapper-Klasse, um eine langsame ART-Überprüfung für API < 21 zu verhindern.
    • Fragen Sie die Plattform ab (API 29 oder höher) oder nehmen Sie an, dass die Anzahl der Audiocodierungskanäle für Audiopassthrough nicht festgelegt ist, wenn das Format für die Anzahl der Audiokanäle nicht festgelegt ist. Dies ist bei der HLS-Vorbereitung ohne Blöcke (10204) der Fall.
    • Konfigurieren Sie AudioTrack mit der Kanalmaske AudioFormat.CHANNEL_OUT_7POINT1POINT4, wenn der Decoder 12-Kanal-PCM-Audio ausgibt (#10322).
  • DRM
    • Die DRM-Sitzung muss immer korrekt aktualisiert werden, wenn direkt nach einer Formatänderung vor- oder zurückgesprungen wird (10274).
  • Text:
    • Ändern Sie Player.getCurrentCues(), damit CueGroup statt List<Cue> zurückgegeben wird.
    • SSA: Unterstützung der Stileinstellung OutlineColour, wenn BorderStyle == 3 (d.h. OutlineColour legt den Hintergrund des Cues fest) (#8435).
    • CEA-708: Daten in mehrere Dienstblöcke parsen und Blöcke ignorieren, die nicht mit der aktuell ausgewählten Dienstnummer verknüpft sind.
    • Entferne RawCcExtractor. Das Format wurde nur zur Verarbeitung eines Google-internen Untertitelformats verwendet.
  • Extraktoren:
    • Unterstützung für AVI hinzugefügt (#2092)
    • Matroska: Analysiere DiscardPadding für Opus-Titel.
    • MP4: Bitraten aus esds-Boxen werden geparst.
    • Ogg: Doppelte Opus-ID und Kommentarheader zulassen (#10038).
  • UI:
    • Korrektur der Zustellung von Ereignissen an OnClickListeners, die auf PlayerView festgelegt sind, wenn useController=false (#9605). Außerdem wurde die Zustellung von Ereignissen an OnLongClickListener für alle Ansichtskonfigurationen korrigiert.
    • Eine Folge von Touch-Ereignissen, die die Grenzen von PlayerView vor ACTION_UP überschreiten, wurde fälschlicherweise als Klick behandelt (#9861). Das Problem wurde behoben.
    • Behebung eines PlayerView Bedienungshilfenproblems, bei dem durch Tippen die Wiedergabe statt der Steuerelemente ausgeblendet wurde (#8627).
    • Rewrite TrackSelectionView and TrackSelectionDialogBuilder to work with the Player interface rather than ExoPlayer. So können die Ansichten mit anderen Player-Implementierungen verwendet werden und die Abhängigkeit des UI-Moduls vom ExoPlayer-Modul wird aufgehoben. Das ist eine sensationelle Veränderung.
    • Zeigen Sie keine erzwungenen Texttracks in der PlayerView-Trackauswahl an und lassen Sie einen geeigneten Tracks mit erzwungenem Text ausgewählt, wenn „Keine“ ausgewählt ist (#9432).
  • DASH:
    • Kanalanzahl aus DTS-AudioChannelConfiguration-Elementen parsen Dadurch wird der Audio-Passthrough für DTS-Streams wieder aktiviert (#10159).
    • Übergabe von null an DashMediaSource.Factory.setCompositeSequenceableLoaderFactory nicht zulassen. Instanzen von DefaultCompositeSequenceableLoaderFactory können bei Bedarf explizit übergeben werden.
  • HLS:
    • Bei der Vorbereitung in Chunks zurückfallen, wenn das CODECS-Attribut der Playlist keinen Audio-Codec enthält (#10065).
    • Übergabe von null an HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory und HlsMediaSource.Factory.setPlaylistTrackerFactory nicht zulassen Instanzen von DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory oder ein Verweis auf DefaultHlsPlaylistTracker.FACTORY können bei Bedarf explizit übergeben werden.
  • Smooth Streaming:
    • Übergabe von null an SsMediaSource.Factory.setCompositeSequenceableLoaderFactory nicht zulassen. Instanzen von DefaultCompositeSequenceableLoaderFactory können bei Bedarf explizit übergeben werden.
  • RTSP:
    • RTP-Leser für H263 hinzugefügt (#63).
    • RTP-Leser für MPEG4 hinzufügen (#35)
    • RTP-Leser für HEVC hinzufügen (#36)
    • RTP-Lesegerät für AMR hinzufügen. Derzeit werden nur monokanalige, nicht interleavede AMR-Streams unterstützt. Zusammengesetzte AMR-RTP-Nutzlast wird nicht unterstützt. (#46)
    • RTP-Leser für VP8 hinzufügen (#47)
    • Fügen Sie einen RTP-Reader für WAV hinzu (#56).
    • Korrektur des Header für die grundlegende RTSP-Autorisierung. (#9544)
    • Die Überprüfung der Pflichtfelder für SDP-Dateien wurde eingestellt, da sie für ExoPlayer nicht erforderlich sind (#10049).
    • Beim Parsen des RTSP-Timings wurde eine geprüfte Ausnahme ausgelöst (#10165).
    • Fügen Sie einen RTP-Leser für VP9 hinzu (#47).
    • Fügen Sie einen RTP-Leser für OPUS hinzu (#53).
  • Datenquellen:
    • Benennen Sie DummyDataSource in PlaceholderDataSource um.
    • Problemumgehung für die OkHttp-Unterbrechungsbehandlung
  • Sitzung:
    • Ersetzen Sie MediaSession.MediaItemFiller durch MediaSession.Callback.onAddMediaItems, um die asynchrone Auflösung von Anfragen zu ermöglichen.
    • 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 Funktionalität kann mit MediaController.setMediaItem und MediaSession.Callback.onAddMediaItems erreicht werden.
    • Leiten Sie alte MediaController-Anrufe zum Abspielen von Medien an MediaSession.Callback.onAddMediaItems statt an onSetMediaUri weiter.
    • Füge MediaNotification.Provider und DefaultMediaNotificationProvider hinzu, um die Benachrichtigung anzupassen.
    • Fügen Sie BitmapLoader und SimpleBitmapLoader zum Herunterladen von Artwork-Bildern hinzu.
    • Fügen Sie MediaSession.setCustomLayout() hinzu, um Abwärtskompatibilität mit der alten Sitzung zu ermöglichen.
    • Fügen Sie MediaSession.setSessionExtras() hinzu, um die Funktionsparität mit der bisherigen Sitzung zu ermöglichen.
    • Benennen Sie MediaSession.MediaSessionCallback in MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback in MediaLibrarySession.Callback und MediaSession.Builder.setSessionCallback in setCallback um.
    • Korrigieren Sie NPE in MediaControllerImplLegacy (#59).
    • Informationen zur Sitzungsposition bei Zeitachsenänderungen aktualisieren(#51).
    • Behebung des NPE in MediaControllerImplBase nach dem Freigeben des Controllers (#74).
  • Anzeigenwiedergabe / IMA:
    • Verringern Sie die Polling-Rate von Anzeigen 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 in Android Studio fehlschlägt (#9933).
  • Entfernen Sie veraltete Symbole:
    • Entfernen Sie Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). 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, auch wenn diese Methoden eingestellt werden.
    • Entfernen Sie die Konstanten DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT und DEFAULT_TRACK_SELECTOR_PARAMETERS. Verwenden Sie nach Möglichkeit 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 Konstruktor von Transformer.Builder übergeben werden.

Version 1.0.0-alpha03

14. März 2022

androidx.media3:media3-*:1.0.0-alpha03 wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.

Dies entspricht der ExoPlayer-Version 2.17.1.

  • Audio:
    • Fehler bei der Fehlerprüfung der Audiofunktionen für Dolby Atmos (E-AC3-JOC) in HLS behoben
  • Extraktoren:
    • FMP4: Problem behoben, bei dem EMSG-Stichprobenmetadaten bei Streams, die sowohl EMSG-Atome der Version 0 als auch der Version 1 enthalten, in der falschen Reihenfolge ausgegeben werden konnten (#9996).
  • Text:
    • Die Interaktion von SingleSampleMediaSource.Factory.setTrackId und MediaItem.SubtitleConfiguration.Builder.setId wurde korrigiert, damit das Feld SubtitleConfiguration priorisiert wird und bei fehlendem Wert auf Factory zurückgegriffen wird (#10016).
  • Anzeigenwiedergabe:
    • Behebung von Tonaussetzern zwischen Werbeunterbrechungen in Live-HLS-SSAI-Streams.

Version 1.0.0-alpha02

2. März 2022

androidx.media3:media3-*:1.0.0-alpha02 wurde veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.

Dies entspricht der ExoPlayer-Version 2.17.0.

  • Kernbibliothek:
    • Fügen Sie die geschützte Methode DefaultRenderersFactory.getCodecAdapterFactory() hinzu, damit Unterklassen von DefaultRenderersFactory, die buildVideoRenderers() oder buildAudioRenderers() überschreiben, auf die Codec-Adapter-Fabrik zugreifen und sie an von ihnen erstellte MediaCodecRenderer-Instanzen übergeben können.
    • Geben Sie die ICY-Headerfelder name und genre an MediaMetadata.station bzw. MediaMetadata.genre weiter, damit sie die Anwendung über Player.Listener.onMediaMetadataChanged() erreichen (#9677).
    • Entfernen Sie Nullschlüssel aus DefaultHttpDataSource#getResponseHeaders.
    • Warten Sie und versuchen Sie es noch einmal, wenn das Erstellen einer MediaCodec-Instanz fehlschlägt. Dadurch wird ein Problem auf einigen Geräten umgangen, das beim Wechseln einer Oberfläche von einem sicheren Codec zu einem anderen auftritt (#8696).
    • Fügen Sie MediaCodecAdapter.getMetrics() hinzu, damit Nutzer Messdaten von MediaCodec abrufen können. (#9766).
    • Behebung eines Problems bei der Maven-Abhängigkeitsauflösung (#8353).
    • Die automatische Geschwindigkeitsanpassung für Livestreams, die weder Funktionen mit niedriger Latenz noch eine Nutzeranfrage zur Festlegung der Geschwindigkeit haben, wurde deaktiviert (#9329).
    • Benennen Sie DecoderCounters#inputBufferCount in queuedInputBufferCount um.
    • SimpleExoPlayer.renderers als privat kennzeichnen. Der Zugriff auf Renderer erfolgt über ExoPlayer.getRenderer.
    • Einige Konstantenwerte 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 es von R8 entfernt werden kann, wenn eine App es nicht benötigt.
  • Titelauswahl:
    • Unterstützung von Flags für die bevorzugte Videorolle bei der Titelauswahl (#9402)
    • Die Logik für die Auswahl von Videotracks wurde aktualisiert, damit bei der Auswahl mehrerer Videotracks für die Anpassung bevorzugte MIME-Typen und Rollen-Flags berücksichtigt werden (#9519).
    • Aktualisieren Sie die Auswahllogik für Video- und Audiotracks so, dass nur Formate für die adaptive Auswahl ausgewählt werden, die dieselbe Decoder- und Hardwareunterstützung haben (#9565).
    • Die Logik für die Videotrackauswahl wurde aktualisiert, um effizientere Codecs zu bevorzugen, wenn mehrere Codecs von primären, hardwarebeschleunigten Decodern unterstützt werden (#4835).
    • Sie sollten Einstellungen für Audioinhalte (z. B. den Standardaudiospur oder einen Titel, der mit der Sprache des Systems übereinstimmt) gegenüber technischen Einschränkungen für die Titelauswahl (z. B. bevorzugter MIME-Typ oder maximale Kanalanzahl) bevorzugen.
    • Es wurde ein Problem mit der Titelauswahl behoben, bei dem andere Trackgruppen desselben Typs beim Überschreiben einer Trackgruppe nicht deaktiviert wurden (#9675).
    • Ein Problem bei der Titelauswahl wurde behoben, bei dem eine Mischung aus nicht leeren und leeren Titelüberschreibungen nicht richtig angewendet wurde (#9649).
    • Doppelte TrackGroup in einer TrackGroupArray sind nicht zulässig. TrackGroup-Elemente können immer unterscheidbar gemacht werden, indem ein id im TrackGroup-Konstruktor festgelegt wird. Dadurch wird ein Absturz behoben, der beim Fortsetzen der Wiedergabe auftritt, nachdem die App mit einer aktiven Track-Überschreibung im Hintergrund ausgeführt wurde (#9718).
    • Ändern Sie die Logik in AdaptiveTrackSelection so, dass bei ausreichender Netzwerkbandbreite eine Qualitätssteigerung möglich ist, auch wenn die Wiedergabe sehr nahe am Live-Edge erfolgt (#9784).
  • Video:
    • Fehlerbehebung bei der Fallback-Logik des Decoders für Dolby Vision, damit bei Bedarf ein kompatibler H264/H265-Decoder verwendet wird.
  • Audio:
    • Die Fallback-Logik für den Decoder für Dolby Atmos (E-AC3-JOC) wurde korrigiert, damit bei Bedarf ein kompatibler E-AC3-Decoder verwendet wird.
    • Ändern Sie die AudioCapabilities APIs so, dass AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES anstelle von null explizit übergeben werden muss.
    • Erlaubt die Anpassung der Berechnung der Puffergröße AudioTrack durch Einfügen eines AudioTrackBufferSizeProvider in DefaultAudioSink. (#8891).
    • Erstellen Sie AudioTrack noch einmal, wenn die angeforderte Puffergröße größer als 1 MB war. (#9712).
  • Extraktoren:
    • WAV: Unterstützung für RF64-Streams hinzugefügt (#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üge ein MediaItem.SubtitleConfiguration.id-Feld hinzu, das an das Format.id-Feld des Untertitel-Tracks weitergegeben wird, der aus der Konfiguration erstellt wurde (#9673).
    • Grundlegende Unterstützung für WebVTT-Untertitel in Matroska-Containern hinzugefügt (#9886).
    • Verhindern Sie, dass Cea708Decoder mehr als die deklarierte Größe eines Dienstblocks liest.
  • Digitale Rechteverwaltung:
    • Entfernen Sie playbackLooper aus DrmSessionManager.(pre)acquireSession. Wenn DrmSessionManager von einer Anwendung in einer benutzerdefinierten MediaSource verwendet wird, muss stattdessen playbackLooper an DrmSessionManager.setPlayer übergeben werden.
  • Anzeigenwiedergabe / IMA:
    • Unterstützung für die dynamische Anzeigenbereitstellung (Dynamic Ad Insertion, DAI) mit IMA hinzugefügt (#8213).
    • AdPlaybackState soll eine Methode hinzugefügt werden, mit der eine Anzeigengruppe zurückgesetzt werden kann, damit sie noch einmal wiedergegeben werden kann (#9615).
    • Wiedergabegeschwindigkeit von 1,0 während der Anzeigenwiedergabe erzwingen (#9018)
    • Ein Problem wurde behoben, durch das eine nicht geladene Anzeigengruppe zu einem sofortigen Zurücksetzen der Wiedergabe führte (#9929).
  • UI:
    • Die Farbe der Zahlen auf den Schaltflächen „StyledPlayerView“ (Zurückspulen) und „“ (Vorspulen) wurde bei bestimmten Themen korrigiert (#9765).
    • Strings für die Wiedergabegeschwindigkeit korrekt übersetzen (#9811).
  • DASH:
    • Fügen Sie geparste grundlegende und ergänzende Attribute zu Representation hinzu (#9579).
    • Unterstützung der Rolle „forced-subtitle“ für den Titel (#9727)
    • Die Track-Rolle main nicht mehr als C.SELECTION_FLAG_DEFAULT interpretieren.
    • Logik für den Ausschluss der Basis-URL für Manifeste korrigiert, in denen der DVB-Namespace nicht deklariert ist (#9856).
    • Relative MPD.Location-URLs müssen unterstützt werden (#9939).
  • HLS:
    • Format.label muss für HLS-Streams mit reinem Audioinhalt korrekt ausgefüllt sein (#9608).
    • Verwenden Sie standardmäßig die chunklose Vorbereitung, um die Startzeit zu verkürzen. Wenn deine Titel muxierte Untertiteltracks enthalten, die nicht in der Masterplaylist deklariert sind, solltest du sie der Masterplaylist hinzufügen, damit sie zur Wiedergabe verfügbar sind. Du kannst auch die chunklose Vorbereitung mit HlsMediaSource.Factory.setAllowChunklessPreparation(false) deaktivieren.
    • Unterstützung der genauen Suche nach Keyframes in HLS (#2882).
  • RTSP:
    • Geben Sie eine Client-API an, um den SocketFactory zu überschreiben, der für eine Serververbindung verwendet wird (#9606).
    • Wenn beide vorhanden sind, bevorzuge die DIGEST-Authentifizierungsmethode gegenüber der BASIC-Authentifizierungsmethode (#9800).
    • Verarbeiten, wenn kein RTSP-Track-Timing verfügbar ist (#9775).
    • Ignorieren Sie ungültige RTP-Info-Headerwerte (#9619).
  • Transformator:
    • Erhöhen Sie die erforderliche Mindest-API-Version auf 21.
    • TransformationException wird jetzt verwendet, um Fehler zu beschreiben, die während einer Transformation auftreten.
    • Fügen Sie TransformationRequest hinzu, um die Transformationsoptionen anzugeben.
    • Registrierung mehrerer Listener zulassen.
    • Behebung eines Problems, bei dem der Transformer hängen blieb, wenn die Codec-Ausgabe nur teilweise gelesen wurde.
    • Das potenzielle NPE in Transformer.getProgress wurde behoben, wenn die Muxer-Wellen freigegeben werden.
    • Fügen Sie eine Demo-App zum Anwenden von Transformationen hinzu.
  • MediaSession-Erweiterung:
    • MediaSessionConnector löscht die Playlist jetzt standardmäßig beim Anhalten. Apps, die die Playlist beibehalten möchten, können setClearMediaItemsOnStop(false) über den Connector aufrufen.
  • Cast-Erweiterung:
    • Es wurde ein Fehler behoben, bei dem CastPlayer onIsPlayingChanged nicht korrekt aufrufen konnte (#9792).
    • Unterstützung von Audiometadaten, einschließlich Artwork, mit DefaultMediaItemConverter (#9663)
  • FFmpeg-Erweiterung:
    • Stellen Sie sicher, dass build_ffmpeg.sh von den bin-Dienstprogrammen von LLVM und nicht von dem von GNU abhängig ist (#9933).
  • Kompatibilität mit Android 12:
    • Aktualisiere die Cast-Erweiterung, um eine Abhängigkeit von com.google.android.gms:play-services-cast-framework:20.1.0 zu erhalten. Frühere Versionen von play-services-cast-framework sind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind. Beim Erstellen von PendingIntents kommt es zu einem Absturz mit einer IllegalArgumentException (#9528).
  • Entfernen Sie veraltete Symbole:
    • Entfernen Sie Player.EventListener. 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.
    • Entfernen Sie MediaSourceFactory#createMediaSource(Uri). Verwenden Sie stattdessen MediaSourceFactory#createMediaSource(MediaItem).
    • Entfernen Sie setTag aus DashMediaSource, HlsMediaSource und SsMediaSource. Verwenden Sie 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 Fallbackwert anzugeben.
    • Entfernen Sie (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Die Funktion kann nicht mehr deaktiviert werden.
    • Entfernen Sie ActionFile und ActionFileUpgradeUtil. Wenn du ExoPlayer 2.16.1 oder älter verwendest, kannst du mit ActionFileUpgradeUtil alte Aktionsdateien in DefaultDownloadIndex zusammenführen.
    • Entfernen Sie ProgressiveMediaSource#setExtractorsFactory. Verwenden Sie stattdessen den ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)-Konstruktor.
    • 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.
  • Ändern Sie nur die folgende IntDefs in @Target(TYPE_USE). Dies kann die Kompilierung von Verwendungen in Kotlin beeinträchtigen. Das Problem lässt sich beheben, indem die Anmerkung auf den Typ (Int) verschoben wird.
    • @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 com.google.android.exoplayer2.ext.flac-Paket)
    • @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 veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.

Neue Funktionen

Media3 ist die neue Plattform für unterstützende Bibliotheken wie ExoPlayer. Die erste Alphaversion umfasst frühe, funktionale Implementierungen von Bibliotheken zur Implementierung von Medienanwendungsfällen, darunter:

  • ExoPlayer, ein Mediaplayer auf Anwendungsebene für Android, der sich einfach anpassen und erweitern lässt.
  • Mediensitzungsfunktion zur Anzeige und Steuerung der Wiedergaben Dieses neue Sitzungsmodul verwendet dieselbe Player-Schnittstelle wie ExoPlayer.
  • UI-Komponenten zum Erstellen von Benutzeroberflächen für die Medienwiedergabe.
  • Module, die Funktionen in anderen Bibliotheken für die Verwendung mit ExoPlayer einschließen, z. B. Anzeigenbereitstellung über das IMA SDK.

Weitere Informationen finden Sie im GitHub-Projekt zu Media3.

Zuvor wurde ExoPlayer in einem separaten ExoPlayer-GitHub-Projekt gehostet. In Media3 lautet der Paketname androidx.media3.exoplayer. Wir planen, das GitHub-Projekt „ExoPlayer“ noch einige Zeit lang zu pflegen und neue Versionen zu veröffentlichen, damit Entwickler Zeit haben, zu Media3 zu migrieren. Media3 bietet Ersatz für alle ExoPlayer-Module, mit Ausnahme der älteren media2- und mediasession-Erweiterungen, die durch das neue media3-session-Modul ersetzt werden. Dadurch wird eine direkte Integration zwischen Playern und Mediensitzungen ermöglicht, ohne dass eine Adapter-/Connector-Klasse verwendet werden muss.