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 voncompileSdk = 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.
- Entfernen Sie
- ExoPlayer:
- Es wurde behoben, dass
MediaCodec.CryptoException
manchmal als „unerwarteter Laufzeitfehler“ gemeldet wurde, wennMediaCodec
im asynchronen Modus ausgeführt wurde (Standardverhalten ab API 31). - Übergeben Sie
bufferedDurationUs
anstelle vonbufferedPositionUs
mitPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
. Außerdem wirdDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
inDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
geändert. Apps müssen dann anstelle einer Position einen Wert 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 sieLoadControl.shouldContinuePreloading()
entsprechend implementieren (z. B. durch Überschreiben dieser Methode inDefaultLoadControl
). Bei der Standardimplementierung vonLoadControl
wird das Vorladen deaktiviert, wenn eine App eine benutzerdefinierte Implementierung vonLoadControl
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 dieDefaultPreloadManager
- undExoPlayer
-Instanzen mit konsistent freigegebenen Konfigurationen erstellt werden. - Entferne den Parameter
Renderer[]
ausLoadControl.onTracksSelected()
, da dieDefaultLoadControl
-Implementierung die Streamtypen ausExoTrackSelection[]
abrufen kann. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
wurde eingestellt und Methode als endgültig markiert, um Überschreibungen zu verhindern. Stattdessen sollte das neueDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
verwendet werden.MediaSourceEventListener
-Ereignisse aus sekundären Quellen inMergingMediaSource
melden Dies führt dazu, dass für nebengeladene Untertitel (mitMediaItem.LocalConfiguration.subtitleConfigurations
hinzugefügt) Ereignisse zum Starten, Fehlern, Abbrechen und Abschließen des Ladevorgangs gemeldet werden. Diese können als doppelte Ladeereignisse erscheinen, die vonAnalyticsListener
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).
- Bei der neuen Untertitelverwaltung (während der Extraktion) werden zugehörige Parse- (z.B. ungültige Untertiteldaten) und Ladefehler (z.B. HTTP 404) über
- Es wurde behoben, dass
- 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
- Die Bilddauer muss beim Exportieren von Bildern mit
- 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
inMp4Extractor
undFragmentedMp4Extractor
(#1531). - Falsche Skalierung von
media_time
in MP4-Bearbeitungslisten korrigiert. Obwohlsegment_duration
bereits korrekt anhand der Filmzeitskala skaliert wurde, istmedia_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 der90,000
MPEG-Zeitbasis multipliziert werden) (#1763).
- Achten Sie darauf, dass WebVTT in HLS mit sehr großen Zeitstempeln der Untertitel angezeigt wird (die über 64-Bit-Zeitstempel
- Metadaten:
- Weise den Tracks mit icy- oder vnd.dvb.ait-Inhalten den Typ
C.TRACK_TYPE_METADATA
zu.
- Weise den Tracks mit icy- oder vnd.dvb.ait-Inhalten den Typ
- Digitale Rechteverwaltung:
IllegalStateException
vonDefaultDrmSession.requiresSecureDecoder
korrigieren, nachdem das Öffnen einer DRM-Sitzung fehlgeschlagen ist Dieses Problem wurde in1.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).
- Es wurde ein Fehler behoben, bei dem serverseitig eingefügte Streams der dynamischen Anzeigenbereitstellung ohne Pre-Roll zu einem
- Sitzung:
- Behebung eines Fehlers, durch den benutzerdefinierte Befehle, die von einem
MediaBrowser
gesendet wurden, bei einer Verbindung mit einem älteren Dienst an dieMediaSessionCompat.Callback
-Variante der Methode statt an dieMediaBrowserServiceCompat
-Variante gesendet wurden. Dadurch konnteMediaBrowser
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 mitMediaBrowserCompat
hinzugefügt. Beachten Sie, dass mit Media3 Befehlsschaltflächen für Medienelemente sowohl fürMediaBrowser
als auch fürMediaController
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 älterenMediaBrowserCompat
herstellen. Der Dienst kann die Verbindungshinweise empfangen, die beim ersten Aufruf vononGetRoot()
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 Browserparentid
abonniert hat. - Verbessern Sie das Interoperabilitätsverhalten, damit ein Media3-Browser, der mit einer Legacy-
MediaBrowserService
verbunden ist, die untergeordneten Elemente vonparentId
nicht zweimal anfordert, wenn sie ein übergeordnetes Element abonnieren.
- Behebung eines Fehlers, durch den benutzerdefinierte Befehle, die von einem
- 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, diePlayerView
inAndroidView
verwenden, müssenPlayerView.setEnableComposeSurfaceSyncWorkaround
aufrufen, um die Funktion zu aktivieren (#1237, #1594). - Füge
setFullscreenButtonState
zuPlayerView
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.
- Die Funktion zum Strecken/Zuschneiden von Videos in der
- Erweiterung für reibungsloses Streaming:
- Der Fehler
Bad magic number for Bundle
bei der Wiedergabe von SmoothStreaming-Streams mit Texttracks wurde behoben (#1779).
- Der Fehler
- 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 einContext
angegeben ist. So kannst du dieMediaSession
mit einerRoutingSession
verknüpfen, was für die Einbindung des Ausgabeschalters erforderlich ist (#1056).
- Entfernen Sie veraltete Symbole:
- Entfernen Sie verworfene
DefaultEncoderFactory
-Konstruktoren. Verwenden Sie stattdessenDefaultEncoderFactory.Builder
.
- Entfernen Sie verworfene
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
durchgetPlaylist()
-Methode. - Füge eine Überschreibung für
SimpleBasePlayer.State.Builder.setPlaylist()
hinzu, um einenTimeline
und aktuelleTracks
undMetadata
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, diePlayer.Events
in der Bibliothekmedia3-common-ktx
überwacht.
- Fügen Sie
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()
kann jetzt für jedes Medienelement aufgerufen werden. Zuvor wurde er nicht für den ersten Aufruf aufgerufen. Verwenden SieMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
, um diese Funktion zu aktivieren.- Fügen Sie
PreloadMediaSource.PreloadControl.onPreloadError
hinzu, damitPreloadMediaSource.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 einenSurface
in der Warteschlange für Transformer angeordnet werden können. ImageAssetLoader
meldet nicht unterstützte Eingaben überAssetLoader.onError
, anstatt eineIllegalStateException
zu werfen.
- Füge
- Extraktoren:
- Mit
Mp4Extractor
undFragmentedMp4Extractor
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).
- Mit
- DataSource:
- Aktualisieren Sie
HttpEngineDataSource
, um die Verwendung ab Version S mit Erweiterung 7 anstelle von API-Level 34 zuzulassen (#1262).
- Aktualisieren Sie
- 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 einenull
Surface
inconfigure
empfangen und eine neue MethodedetachOutputSurface
aufrufen, um eine zuvor festgelegteSurface
zu entfernen, wenn der Codec dies unterstützt (MediaCodecInfo.detachedSurfaceSupported
). - Verwende die von
MediaCodecAdapter
bereitgestellten Pixelseitenverhältniswerte, sofern vorhanden, bei der Verarbeitung vononOutputFormatChanged
(#1371).
- Text:
- Fügen Sie ein benutzerdefiniertes
VoiceSpan
hinzu und füllen Sie es für WebVTT-Voice-Spans aus (#1632).
- Fügen Sie ein benutzerdefiniertes
- Bild:
- Fügen Sie
ExternallyLoadedImageDecoder
hinzu, um die Integration mit externen Bibliotheken zum Laden von Bildern wie Glide oder Coil zu vereinfachen.
- Fügen Sie
- DataSource:
- Fügen Sie
FileDescriptorDataSource
hinzu, eine neueDataSource
, die zum Lesen aus einerFileDescriptor
verwendet werden kann (#3757).
- Fügen Sie
- 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 mitTransformer
schneller.
- Problemumgehung für geringfügige
- IMA-Erweiterung:
- Es wurde ein Fehler behoben, bei dem das Löschen der Playlist zu einem
ArrayIndexOutOfBoundsException
inImaServerSideAdInsertionMediaSource
führen konnte.
- Es wurde ein Fehler behoben, bei dem das Löschen der Playlist zu einem
- 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 einerForegroundServiceDidNotStartInTimeException
zum Absturz bringt (#1528).
- Füge
- 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.
- 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.
- 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 einContext
angegeben ist. So kannst du dieMediaSession
mit einerRoutingSession
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.
- Der Eingabestream
- Entfernen Sie veraltete Symbole:
- Eingestellte(s)
Player.hasPrevious
(Player.hasPreviousWindow()
) entfernen. Verwenden Sie stattdessenPlayer.hasPreviousMediaItem()
. - Verworfene Methode
Player.previous()
entfernen. Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem()
. - Entfernen Sie die eingestellte Methode
DrmSessionEventListener.onDrmSessionAcquired
.
- Eingestellte(s)
Version 1.4.0
Version 1.4.1
27. August 2024
androidx.media3:media3-*:1.4.1
wird veröffentlicht.
Version 1.4.1 enthält diese Commits.
- ExoPlayer:
- Extraktoren:
- MP3: Der
Searched too many bytes
-Fehler wurde behoben, indem nachstehende nicht MP3-Daten basierend auf dem Längenfeld in einemInfo
-Frame korrekt ignoriert wurden (#1480).
- MP3: Der
- Text:
- TTML: Die Verarbeitung von Prozentwerten für
tts:fontSize
wurde korrigiert, damit sie korrekt von übergeordneten Knoten mit Prozentwerten fürtts:fontSize
übernommen werden. - Fehlerbehebung bei
IndexOutOfBoundsException
inLegacySubtitleUtil
, da der Fall, dass die angeforderte Ausgabestartzeit größer oder gleich der Endzeit des Ereignisses in derSubtitle
ist, nicht richtig behandelt wurde (#1516).
- TTML: Die Verarbeitung von Prozentwerten für
- 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-MethodeMediaDrm.requiresSecureDecoder
verursacht (#1603).
- Fehler
- Wirkung:
- Fügen Sie
GlObjectsProvider
einerelease()
-Methode hinzu.
- Fügen Sie
- Sitzung:
- Transformiere, wie dokumentiert (#1493) ein Doppeltippen auf
KEYCODE_HEADSETHOOK
in eine „Suchen zum nächsten“-Aktion. KEYCODE_HEADSETHOOK
inMediaButtonReceiver
als „Wiedergabe“-Befehl behandeln und entscheiden, ob er ignoriert werden soll, um eineForegroundServiceDidNotStartInTimeException
zu vermeiden (#1581)
- Transformiere, wie dokumentiert (#1493) ein Doppeltippen auf
- 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()
undSimpleBasePlayer.handleSeek()
weiterleiten, anstatt sie zu ignorieren. Wenn du diese Methoden in einem benutzerdefinierten Player implementierst, musst du diese zusätzlichen Aufrufe möglicherweise mitmediaItemIndex == C.INDEX_UNSET
verarbeiten. - Kompilierungsabhängigkeit von der erweiterten Java 8-Entschwefelung entfernt (#1312).
- Die an
MediaItem.Builder.setImageDurationMs()
übergebene Dauer wird für einMediaItem
, das kein Bild ist, ignoriert (wie dokumentiert). - Fügen Sie
Format.customData
hinzu, um benutzerdefinierte Informationen zuFormat
-Instanzen zu speichern, die von der App bereitgestellt werden.
- Vorgebliche No-Op-Suchanrufe an die geschützten Methoden
- ExoPlayer:
- Fügen Sie
BasePreloadManager
hinzu. Damit wird das Vorabladen für mehrere Quellen anhand der in ihrenrankingData
definierten Prioritäten koordiniert. Sie können diese Klasse erweitern, um sie anzupassen. FügeDefaultPreloadManager
hinzu, bei demPreloadMediaSource
verwendet wird, um Mediensamples der Quellen in den Arbeitsspeicher zu laden, und eine GanzzahlrankingData
, die den Index eines Elements auf der Benutzeroberfläche angibt. - Füge den meisten Methoden von
LoadControl
PlayerId
hinzu, damitLoadControl
-Implementierungen mehrere Spieler unterstützen können. - Entfernen Sie
Buffer.isDecodeOnly()
undC.BUFFER_FLAG_DECODE_ONLY
. Es ist nicht erforderlich, dieses Flag festzulegen, da Renderer und Dekodierer Buffers basierend auf dem Zeitstempel überspringen. Bei benutzerdefiniertenRenderer
-Implementierungen sollte geprüft werden, ob die Pufferzeit mindestensBaseRenderer.getLastResetPositionUs()
beträgt, um zu entscheiden, ob ein Sample angezeigt werden soll. Bei benutzerdefiniertenSimpleDecoder
-Implementierungen kann bei BedarfisAtLeastOutputStartTimeUs()
geprüft oder andere Puffer mitDecoderOutputBuffer.shouldBeSkipped
markiert werden, um sie zu überspringen. - Erlauben Sie, dass von
TargetPreloadStatusControl.getTargetPreloadStatus(T)
ein Nullwert zurückgegeben wird, um anzugeben, dass einMediaSource
nicht mit dem angegebenenrankingData
vorab geladen werden soll. - Fügen Sie
remove(MediaSource)
zuBasePreloadManager
hinzu. - Fügen Sie
reset()
zuBasePreloadManager
hinzu, um alle Quellen mit Zurückhaltung freizugeben und die Instanz des Preloader-Managers beizubehalten. - Fügen Sie
ExoPlayer.setPriority()
(undBuilder.setPriority()
) hinzu, um den inPriorityTaskManager
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 dieDefaultPreloadManager
- und die benutzerdefiniertePreloadMediaSource.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
zuPreloadMediaSource
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()
inonSourcePrepared()
undonPrepared()
inonTracksSelected()
inPreloadMediaSource.PreloadControl
um. Benennen Sie auch die IntDefs inDefaultPreloadManager.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. EinRenderer
kann diese Methode implementieren, um an ExoPlayer die Dauer zurückzugeben, um die die Wiedergabe vorrücken muss, damit der Renderer fortfahren kann. WennExoPlayer
mitexperimentalSetDynamicSchedulingEnabled()
festgelegt ist, ruftExoPlayer
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ürMediaCodecRenderer
verfügbar sind.MediaCodecRenderer
signalisiertExoPlayer
beim Empfang dieser Callbacks. WennExoPlayer
aufexperimentalSetDynamicSchedulingEnabled()
gesetzt ist, plantExoPlayer
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, obExoplayer.release()
aufgerufen wurde. - Fügen Sie
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
hinzu, um die maximale Position zu konfigurieren, bis zu derseekToPrevious()
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
inExoPlayer.setVideoEffect()
erhält die Zeitstempel ohne Renderer-Offset (#1098).- Potenzieller
IllegalArgumentException
beim Umgang mit einem Playerfehler beim Vorlesen eines anderen Playlist-Elements behoben (#1483).
- Fügen Sie
- Transformator:
- Fügen Sie
audioConversionProcess
undvideoConversionProcess
zuExportResult
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 durchandroidx.media3.muxer.Muxer
und entfernen Sieandroidx.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 stattdessenDefaultDecoderFactory.listener
. Bei einer Codec-Ausnahme findest du die Codec-Details in derExportException.codecInfo
.
- Fügen Sie
- 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 demInfo
-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 SieAudioTrack.stop()
aufrufen, damitAudioTrack.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.
- Ein Problem wurde behoben, bei dem
- 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 auchTextRenderer.experimentalSetLegacyDecodingEnabled(true)
aufgerufen werden. In der Anleitung zur Anpassung erfahren Sie, wie Sie diese Komponenten in eineExoPlayer
-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 stattdessenSubtitleParser
(undSubtitleParser.Factory
anstelle vonSubtitleDecoderFactory
) zu implementieren.
- Diese Änderung kann überschrieben werden, indem sowohl
- 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 solltenrowLock
undcolumnLock
unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden. Da die Unterstützung voncolumnLock
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 von1.3.0-rc01
versehentlich rückgängig gemacht. Das Problem wurde behoben und die Änderung ist wieder sichtbar.
- Diese Änderung war ursprünglich in den Versionshinweisen für
- 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
vonLegacySubtitleUtil
, 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-TagsTSO2
,TSOA
undTSOP
zugeordnet (#1302). - Das Lesen von numerischen MP4-Tags (/iTunes) für
gnre
(genre) undtmpo
(Tempo) wurde korrigiert, wenn der Wert mehr als ein Byte lang ist. - Übergeben Sie den ID3-Frame
TCON
anMediaMetadata.genre
(#1305).
- Fehler bei der Zuordnung von MP4-Sortiertags zu ID3-Tags behoben. Bisher wurden die MP4-Tags „Albumsortierung“ (
- 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ürExoPlayer.setImageOutput()
zulassen, um eine zuvor festgelegteImageOutput
zu löschen
- DataSource:
- Implementieren Sie die Unterstützung für
android.resource://package/id
-URIs für Rohressourcen, wobeipackage
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, oburl
nicht null ist. Für diesen Parameter wurde bereits angegeben, dass er nicht null ist. ByteArrayDataSource
darf einen URI währendopen()
in ein Byte-Array auflösen, anstatt ihn bei der Erstellung hartcodiert zu haben (#1405).
- Implementieren Sie die Unterstützung für
- Digitale Rechteverwaltung:
- Es ist jetzt möglich, eine
LoadErrorHandlingPolicy
aufDefaultDrmSessionManagerProvider
festzulegen (#1271).
- Es ist jetzt möglich, eine
- Wirkung:
- Mehrere Geschwindigkeitsänderungen innerhalb desselben
EditedMediaItem
oderComposition
inSpeedChangeEffect
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 SieOverlaySettings.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 mitExoPlayer#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 mitOverlaySettings.Builder.setHdrLuminanceMultiplier()
angepasst werden.
- Mehrere Geschwindigkeitsänderungen innerhalb desselben
- 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>)
zuImaServerSideAdInsertionMediaSource.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 vondata://
-Anzeigen-Tag-URIs zu beheben (#700).
- Sitzung:
- Ändern Sie den Standardwert von
CommandButton.enabled
intrue
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 inonTaskRemoved()
beendet werden muss (#1219). - Füge
MediaSessionService.pauseAllPlayersAndStopSelf()
hinzu, mit dem sich die Wiedergabe aller Sitzungen bequem pausieren lässt, und rufestopSelf()
auf, um den Lebenszyklus derMediaSessionService
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
mitMediaDescriptionCompat
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 (sieheMediaSession.getMediaNotificationControllerInfo()
), wird der benutzerdefinierte Fehler verwendet, um denPlaybackState
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 inSessionResult
undLibraryResult
, 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 anPlaybackStateCompat.getExtras()
eines media1-Controllers. - Ordnen Sie schwerwiegende und nicht schwerwiegende Fehler der Plattformsitzung und zurück zu. Eine
PlaybackException
ist einem schwerwiegenden Fehlerstatus derPlaybackStateCompat
zugeordnet. EinSessionError
, das mitMediaSession.sendError(ControllerInfo, SessionError)
an den Media-Benachrichtigungscontroller gesendet wird, wird inPlaybackStateCompat
einem nicht schwerwiegenden Fehler zugeordnet. Das bedeutet, dass der Fehlercode und die Fehlermeldung festgelegt sind, der Status der Plattformsitzung jedoch vonSTATE_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
mitAcceptedResultBuilder.setSessionActivivty(PendingIntent)
erstellt wird. Sobald die Verbindung besteht, kann die Sitzungsaktivität mitMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
aktualisiert werden. - Fehlerreplikation von Aufrufen an
MediaLibrarySession.Callback
wurde verbessert. Die Fehlerreplikation kann jetzt konfiguriert werden, indem mitMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
der Fehlertyp ausgewählt oder die standardmäßig aktivierte Fehlerreplikation deaktiviert wird.
- Ändern Sie den Standardwert von
- UI:
- Unterstützung für die Bildanzeige auf
PlayerView
hinzufügen, wenn eine Verbindung zu einemExoPlayer
besteht (#1144). - Verschiedene Symbole in
PlayerControlView
können über XML-Attribute angepasst werden, um unterschiedliche drawables proPlayerView
-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).
- Unterstützung für die Bildanzeige auf
- Downloads:
- Achten Sie darauf, dass
DownloadHelper
keine unveröffentlichtenRenderer
-Instanzen durchläuft, die schließlich zum Absturz einer App mitIllegalStateException: Too many receivers, total of 1000, registered for pid
führen können (#1224).
- Achten Sie darauf, dass
- Cronet-Erweiterung:
- Fehler bei
SocketTimeoutException
inCronetDataSource
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).
- Fehler bei
- HLS-Erweiterung:
- Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Unterbrechung warten, in
HlsSampleStreamWrapper
mit einem falschen Offset delegiert wurden, was zu einerIndexOutOfBoundsException
oderIllegalArgumentException
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
undIllegalArgumentException
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).
- Fehler behoben, bei dem ausstehende EMSG-Samples, die auf eine Unterbrechung warten, in
- DASH-Erweiterung:
- Cast-Erweiterung:
- Fehler behoben, durch den der Albumtitel der
MediaQueueItem
in den Künstler im Media3-Medienelement umgewandelt wurde (#1255).
- Fehler behoben, durch den der Albumtitel der
- Test-Dienstprogramme:
- Implementieren Sie
onInit()
undonRelease()
inFakeRenderer
. - Ändern Sie
TestPlayerRunHelper.runUntil()/playUntil()
-Methoden so, dass sie bei nicht schwerwiegenden Fehlern fehlschlagen (z.B. bei Fehlern, die anAnalyticsListener.onVideoCodecError()
gemeldet werden). Verwenden Sie die neueTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
-Methodenkette, um dieses Verhalten zu deaktivieren.
- Implementieren Sie
- 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
alsHttpDataSource
, sofern vom Gerät unterstützt.
- Verwende
- Entfernen Sie veraltete Symbole:
CronetDataSourceFactory
entfernen. Verwenden Sie stattdessenCronetDataSource.Factory
.- Entfernen Sie einige
DataSpec
-Konstruktoren. Verwenden Sie stattdessenDataSpec.Builder
. - Entfernen Sie die
setContentTypePredicate(Predicate)
-Methode ausDefaultHttpDataSource
,OkHttpDataSource
undCronetDataSource
. Verwenden Sie stattdessen die entsprechende Methode für jedeXXXDataSource.Factory
. - Entfernen Sie die Konstruktoren
OkHttpDataSource
undOkHttpDataSourceFactory
. Verwenden Sie stattdessenOkHttpDataSource.Factory
. PlayerMessage.setHandler(Handler)
entfernen. Verwenden Sie stattdessensetLooper(Looper)
.- Feld „
Timeline.Window.isLive
“ entfernen. Verwenden Sie stattdessen die MethodeisLive()
. - Entfernen Sie
DefaultHttpDataSource
-Konstruktoren. Verwenden Sie stattdessenDefaultHttpDataSource.Factory
. - Entfernen Sie
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. Verwenden Sie stattdessenDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
. MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
entfernen. Verwenden Sie stattdessenMediaCodecInfo.canReuseCodec(Format, Format)
.- Entfernen Sie die Methode
DrmSessionManager.DUMMY
undgetDummyDrmSessionManager()
. Verwende stattdessenDrmSessionManager.DRM_UNSUPPORTED
. - Entfernen Sie
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
undVideoRendererEventListener.onVideoInputFormatChanged(Format)
. Verwenden Sie stattdessen die Überladungen, die einDecoderReuseEvaluation
annehmen. - Entfernen Sie
RendererSupport.FormatSupport
IntDef und die KonstantenFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
undFORMAT_UNSUPPORTED_TYPE
. Verwenden Sie stattdessen die entsprechenden IntDef- und Konstanten inandroidx.media3.common.C
(z.B.C.FORMAT_HANDLED
). Bundleable
-Schnittstelle entfernen. Dazu gehören auch alle konstantenBundleable.Creator<Foo> CREATOR
-Felder. Stattdessen sollten sie die MethodenBundle toBundle()
undstatic Foo fromBundle(Bundle)
für jeden Typ verwenden.
Version 1.4.0-rc01
10. Juli 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-beta01
26. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha02
7. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha01
17. April 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.3.0
Version 1.3.1
11. April 2024
androidx.media3:media3-*:1.3.1
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.
- Fügen Sie
- 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ürDefaultVideoFrameProcessor.Factory.Builder.build()
hinzufügen (#1187).
- Das Problem, dass
- Transformator:
- Es wurde eine Problemumgehung für die Ausnahme hinzugefügt, die ausgelöst wurde, weil
MediaMuxer
negative Präsentationszeitstempel vor API 30 nicht unterstützt.
- Es wurde eine Problemumgehung für die Ausnahme hinzugefügt, die ausgelöst wurde, weil
- Titelauswahl:
DefaultTrackSelector
: 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 wieXING
undVBRI
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 ausWebvttParser.parse
erstellen (#1177).
- WebVTT: Verhindert, dass direkt aufeinanderfolgende Cues falsche zusätzliche
- Digitale Rechteverwaltung:
- Umgehung einer
NoSuchMethodError
, die auf einigen Android 14-Geräten vomMediaDrm
-Framework anstelle vonResourceBusyException
oderNotProvisionedException
geworfen werden kann (#1145).
- Umgehung einer
- Auswirkung:
- Verbesserte PQ- und SDR-Tonzuordnung durch Konvertierung von Farbräumen.
- Sitzung:
- UI:
- Wenn
Locale
keinen Anzeigenamen ermitteln kann, wird der Name der Audiotracksprache verwendet (#988).
- Wenn
- DASH-Erweiterung:
- Füllen Sie alle
Label
-Elemente aus dem Manifest inFormat.labels
aus (#1054).
- Füllen Sie alle
- 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 sichpackage
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 einzelnenUri
inAdPlaybackState
. - 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 auchartworkData
inMediaMetadata.Builder.populate(MediaMetadata)
ein, wenn mindestens einer von ihnen nicht null ist (#964).
- Implementieren Sie die Unterstützung für
- ExoPlayer:
- Fügen Sie
PreloadMediaSource
undPreloadMediaPeriod
hinzu, damit Apps eine Inhaltsmedienquelle vor der Wiedergabe an einer bestimmten Startposition vorab laden können.PreloadMediaSource
bereitet die Inhaltsmediaquelle für den Empfang derTimeline
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 siePreloadMediaSource.PreloadControl
implementieren und die vorab geladene Quelle für die Wiedergabe auf den Player festlegen. - Fügen Sie
ExoPlayer.setImageOutput
hinzu, damit AppsImageRenderer.ImageOutput
festlegen können. DefaultRenderersFactory
stellt dem Player jetzt standardmäßig einImageRenderer
mit nullwertigenImageOutput
undImageDecoder.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
, eineHttpDataSource
, 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 benutzerdefinierteCompositeSequenceableLoaderFactory
implementieren. - Ein Problem wurde behoben, bei dem Metadaten aus diesem Element bei einer Wiederholung gleichzeitig gelöscht werden (#1007).
- Benennen Sie die
experimentalSetSubtitleParserFactory
-Methoden inBundledChunkExtractor.Factory
undDefaultHlsExtractorFactory
insetSubtitleParserFactory
um und lassen Sie die Weitergabe vonnull
nicht zu. Mit den neuenexperimentalParseSubtitlesDuringExtraction(boolean)
-Methoden können Sie das Parsen steuern. - Die während der Extraktion verwendete
SubtitleParser.Factory
kann jetzt angepasst werden. Das ist mitMediaSource.Factory.setSubtitleParserFactory()
möglich. - Fügen Sie allen
Format.id
-Feldern, die ausMergingMediaSource
generiert wurden, ein Quellpräfix hinzu. So lässt sich leichter feststellen, welche Quelle eineFormat
(#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).
- Fügen Sie
- 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 istfalse
. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
- Fügen Sie
- Extraktoren:
- Dem MP4-Extractor wurde eine zusätzliche AV1C-Analyse hinzugefügt, um die Werte
ColorInfo.colorSpace
,ColorInfo.colorTransfer
undColorInfo.colorRange
abzurufen (#692). - MP3: Verwende die Suche mit konstanter Bitrate (CBR) für Dateien mit einem
Info
-Header (das CBR-Äquivalent desXing
-Headers). Bisher haben wir die Sprungtabelle aus derInfo
-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).
- Dem MP4-Extractor wurde eine zusätzliche AV1C-Analyse hinzugefügt, um die Werte
- Audio:
- Video:
- Ändern Sie den Konstruktor von
MediaCodecVideoRenderer
, der einVideoFrameProcessor.Factory
-Argument annimmt, und ersetzen Sie ihn durch einen Konstruktor, der einVideoSinkProvider
-Argument annimmt. Anwendungen, die ein benutzerdefiniertesVideoFrameProcessor.Factory
einfügen möchten, können eineCompositingVideoSinkProvider
instanziieren, die das benutzerdefinierteVideoFrameProcessor.Factory
verwendet, und den Anbieter der Videosenke anMediaCodecVideoRenderer
übergeben.
- Ändern Sie den Konstruktor von
- Text:
- Die Serialisierung von Bitmaphinweisen wurde korrigiert, um den
Tried to marshall a Parcel that contained Binder objects
-Fehler bei Verwendung vonDefaultExtractorsFactory.setTextTrackTranscodingEnabled
zu beheben (#836). - CEA-708:
rowLock
-Wert ignorieren. Gemäß der CEA-708-E S-2023-Spezifikation solltenrowLock
undcolumnLock
unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden. Da die Unterstützung voncolumnLock
nicht implementiert ist, wird davon ausgegangen, dass dieser Wert immer falsch ist.
- Die Serialisierung von Bitmaphinweisen wurde korrigiert, um den
- Bild:
- Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden
ImageOutput
kurz vor ihrer Präsentationszeit bereitgestellt.
- Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden
- Digitale Rechteverwaltung:
- Standardmäßig werden unverschlüsselte Samples mit „clear lead“ in DRM-Inhalten sofort wiedergegeben, auch wenn die Schlüssel für die später verschlüsselten Samples noch nicht bereit sind. Dies kann zu Unterbrechungen während der Wiedergabe führen, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Bisher hätte die Wiedergabe zu diesem Zeitpunkt noch gar nicht begonnen. Dieses Verhalten kann mit
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oderDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
deaktiviert werden.
- Standardmäßig werden unverschlüsselte Samples mit „clear lead“ in DRM-Inhalten sofort wiedergegeben, auch wenn die Schlüssel für die später verschlüsselten Samples noch nicht bereit sind. Dies kann zu Unterbrechungen während der Wiedergabe führen, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Bisher hätte die Wiedergabe zu diesem Zeitpunkt noch gar nicht begonnen. Dieses Verhalten kann mit
- 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 nurContext
stattMediaLibraryService
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).
- Reduzieren Sie
- 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.
- Pausiere die Wiedergabe nicht auf
- Demo-App:
- Fügen Sie ein Demomodul für Kurzformate hinzu, um die Verwendung von
PreloadMediaSource
mit dem Anwendungsfall für Kurzformate zu demonstrieren.
- Fügen Sie ein Demomodul für Kurzformate hinzu, um die Verwendung von
Version 1.3.0-rc01
22. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-beta01
7. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-alpha01
15. Januar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.2.0
Version 1.2.1
9. Januar 2024
- ExoPlayer:
- Behebung eines Problems, bei dem der Offset bei manuellen Suchanfragen außerhalb des Bereichs
LiveConfiguration.min/maxOffset
immer wieder aufmin/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ürbufferedDurationUs
von Chunk-Quellen erhielten, was zu einerIllegalArgumentException
führte (#888).
- Behebung eines Problems, bei dem der Offset bei manuellen Suchanfragen außerhalb des Bereichs
- 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).
- Kennzeichnen Sie sekundäre HEVC-Tracks in JPEG-Fotos mit Bewegtbild als
- Audio:
- Behebung des Umgangs mit EOS für
SilenceSkippingAudioProcessor
bei mehrfachem Aufruf (#712).
- Behebung des Umgangs mit EOS für
- 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.
- Fehler behoben, bei dem
- 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.
- Erweitern Sie die Problemumgehung für die falsche ClearKey-Lizenz-URL
- Sitzung:
- Fügen Sie die benutzerdefinierten Schlüssel und Werte unter
MediaMetadataCompat
bisMediaMetadata.extras
undMediaMetadata.extras
bisMediaMetadataCompat
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).
- Fügen Sie die benutzerdefinierten Schlüssel und Werte unter
- 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.):
- 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).
- Die Erstellung einer
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 Parametermessage
für diese Methoden enthält keine Informationen mehr zumThrowable
, der an dieLog.{d,i,w,e}()
-Methoden übergeben wird. Daher müssen diese Informationen bei Bedarf manuell an die Implementierungen angehängt werden (z. B. mitLogger.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
undSimpleDecoder
(#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 mitPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oderMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
beibehalten werden (#11213). - Aktualisiere
androidx.annotation:annotation-experimental
auf1.3.1
, um das Problem zu beheben: https://issuetracker.google.com/251172715. - Verschieben Sie
ExoPlayer.setAudioAttributes
auf diePlayer
-Benutzeroberfläche.
- Fügen Sie den Methoden in der
- 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 mitPlayer.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
undMediaSource.updateMediaItem
hinzu, umMediaItem
-Aktualisierungen nach der Erstellung überPlayer.replaceMediaItem(s)
zu akzeptieren. - Erlaube
MediaItem
-Aktualisierungen für alleMediaSource
-Klassen, die von der Bibliothek überPlayer.replaceMediaItem(s)
bereitgestellt werden (#33, #9978). - Benennen Sie
MimeTypes.TEXT_EXOPLAYER_CUES
inMimeTypes.APPLICATION_MEDIA3_CUES
um. - Fügen Sie
PngExtractor
hinzu, das eine ganze PNG-Datei als Sample inTrackOutput
sendet und liest. - Erhöhen Sie die
SequenceableLoader.continueLoading(long)
-Methode in derSequenceableLoader
-Schnittstelle aufSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
enthält zusätzliche Parameter, darunterplaybackSpeed
undlastRebufferRealtimeMs
, zusätzlich zum vorhandenenplaybackPositionUs
. - Optimieren Sie die
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
-Methode in derChunkSource
-Schnittstelle aufChunkSource.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
inExperimentalBandwidthMeter
beheben (#612). - Fügen Sie
CompositeMediaSource.getMediaTimeForChildMediaTime
den ParameterMediaPeriodId
hinzu. - Unterstützung von
ClippingMediaSource
(und anderen Quellen mit Zeitabweichungen für Zeiträume/Fenster) inConcatenatingMediaSource2
(#11226) - Ändern Sie
BaseRenderer.onStreamChanged()
so, dass auch einMediaPeriodId
-Argument empfangen wird.
- Transformator:
- EXIF-Rotationsdaten für Bildeingaben parsen
- Entfernen Sie den Anmerkungstyp
TransformationRequest.HdrMode
und die zugehörigen Konstanten. Verwenden Sie stattdessenComposition.HdrMode
und die zugehörigen Konstanten. - Vereinfachen Sie die
OverlaySettings
, um Probleme mit der Drehung zu beheben. - Die Parameter
frameRate
unddurationUs
vonSampleConsumer.queueInputBitmap
wurden inTimestampIterator
geändert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
hinzu, um eine nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Das Standardverhalten vontrue
bleibt unverändert.
- Fügen Sie
- 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
inprojectionPoseRoll
geändert (#461) - Entfernen Sie die Annahme, dass
Extractor
-Instanzen direkt mitinstanceof
geprüft werden können. Wenn Sie Laufzeitzugriff auf die Implementierungsdetails einesExtractor
benötigen, müssen Sie zuerstExtractor.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 einenDefaultAudioOffloadSupportProvider
bereitstellen kann. Es gibt die neueAudioOffloadSupport
zurück, dieisFormatSupported
,isGaplessSupported
undisSpeedChangeSupported
enthält. - Fügen Sie
AudioSink.setOffloadMode()
hinzu, über die die Auslagerungskonfiguration auf der Audiosenke konfiguriert wird. Der Standardwert istAudioSink.OFFLOAD_MODE_DISABLED
. - Das Auslagern kann über
setAudioOffloadPreference
inTrackSelectionParameters
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
aufAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
gesetzt ist, wird mitDefaultTrackSelector
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 vonDefaultRenderersFactory.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
undAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
wurde inonSleepingForOffloadChanged
undonExperimentalOffloadedPlayback
inonOffloadedPlayback
umbenannt.- Verschiebt im Modus „Audio-Offload“ zugehörige
TrackSelectionParameters
-Schnittstellen und -Definitionen in eine innereAudioOffloadPreferences
-Klasse. - Fügen Sie
onAudioTrackInitialized
- undonAudioTrackReleased
-Callbacks zuAnalyticsListener
,AudioRendererEventListener
undAudioSink.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).
- Unterstützung für 24/32-Bit-Big-Endian-PCM in MP4 und Matroska hinzufügen und PCM-Codierung für
- Video:
MediaCodecVideoRenderer
darf eine benutzerdefinierteVideoFrameProcessor.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 mitsampleMimeType = application/x-media3-cues
werden jetzt direkt vonTextRenderer
verarbeitet, ohne dass eineSubtitleDecoder
-Instanz erforderlich ist.
- Entfernen Sie
- 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üssenVideoFrameProcessor.Listener#onInputStreamRegistered()
implementieren. - Die
frameRate
- unddurationUs
-Parameter vonVideoFrameProcessor.queueInputBitmap
wurden inTimestampIterator
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
aufFOREGROUND_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 undnotifyChildrenChanged()
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ächequeue
in der Benutzeroberfläche von Android Auto nicht angezeigt wird (#339). - Standardmäßig wird
DataSourceBitmapLoader
anstelle vonSimpleBitmapLoader
verwendet (#271, #327). - Fügen Sie
MediaSession.Callback.onMediaButtonEvent(Intent)
hinzu, damit Apps die Standard-Ereignisbehandlung der Medienschaltfläche überschreiben können.
- Legen Sie das Verhalten des Benachrichtigungsdienstes im Vordergrund in
- UI:
- Fügen Sie eine
Player.Listener
-Implementierung für Wear OS-Geräte hinzu, die die Unterdrückung der Wiedergabe aufgrund vonPlayer.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.
- Fügen Sie eine
- 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 AppdataSync
alsforegroundServiceType
in das Manifest einfügen und die BerechtigungFOREGROUND_SERVICE_DATA_SYNC
hinzufügen (#11239).
- Deklarieren Sie für
- 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).
- Es wurde eine Race-Bedingung behoben, die zu
- 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überC.BUFFER_FLAG_DECODE_ONLY
, das eingestellt wird. - Füge
Decoder.setOutputStartTimeUs
undSimpleDecoder.isAtLeastOutputStartTimeUs
hinzu, damit Decoder nur zum Decodieren bestimmte Samples vor dem Startzeitpunkt löschen können. Dieser Wert sollteBuffer.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).
- Fehler behoben, durch den das Deaktivieren einer Oberfläche zu einem
- Testdienstprogramme:
- Machen Sie
TestExoPlayerBuilder
undFakeClock
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.
- Machen Sie
- Entfernen Sie veraltete Symbole:
- Entfernen Sie
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
undTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. Verwenden Sie stattdessenComposition.Builder.setHdrMode(int)
und übergeben SieComposition
anTransformer.start(Composition, String)
. - Entfernen Sie die verworfene
DownloadNotificationHelper.buildProgressNotification
-Methode und verwenden Sie stattdessen eine nicht verworfene Methode, die einennotMetRequirements
-Parameter annimmt.
- Entfernen Sie
Version 1.2.0-rc01
1. November 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-beta01
19. Oktober 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-alpha02
29. September 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-alpha01
17. August 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.1.0
Version 1.1.1
16. August 2023
- Gemeinsame Bibliothek:
- Die versehentlich hinzugefügte
multidex
-Abhängigkeit aus allen Modulen entfernen (#499).
- Die versehentlich hinzugefügte
- ExoPlayer:
- Problem in
PlaybackStatsListener
behoben, bei dem nach dem Löschen der PlaylistPlaybackStats
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).
- Problem in
- Audio:
- Es wurde ein Fehler behoben, bei dem
Player.getState()
beim Abspielen sehr kurzer Dateien nicht zuSTATE_ENDED
übergangen wurde (#538).
- Es wurde ein Fehler behoben, bei dem
- 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 inMediaSession.Callback.onConnect
mithilfe einesAcceptedResultBuilder
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 eineResult
gesendet hat, die dies nicht unterstützt, was zu einerUnsupportedOperationException
geführt hat (#78). - Die Erstellung von
VolumeProviderCompat
durchPlayerWrapper
wurde korrigiert.volumeControlType
wird jetzt sowohl über alte Befehle (COMMAND_ADJUST_DEVICE_VOLUME
undCOMMAND_SET_DEVICE_VOLUME
) als auch über neue Befehle (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
undCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) festgelegt (#554).
- 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
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ürDeviceInfo
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)
undsetDeviceVolume(int, int)
increaseDeviceVolume(int)
undincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
unddecreaseDeviceVolume(int, int)
- Füge
FilteringMediaSource
hinzu, um verfügbare Track-Typen aus einerMediaSource
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
undsid
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.
- Das CMCD-Logging ist standardmäßig deaktiviert. Mit
- 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, umEffect
während der Videowiedergabe zu verwenden. - Aktualisieren Sie
SampleQueue
, umsourceId
alslong
und nicht alsint
zu speichern. Dadurch ändern sich die Signaturen der öffentlichen MethodenSampleQueue.sourceId
undSampleQueue.peekSourceId
. - Fügen Sie den
LoadControl
-MethodenshouldStartPlayback
undonTracksSelected
Parameter hinzu, mit denen diese Methoden mit den entsprechendenMediaPeriod
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)
undBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
werden eingestellt. Stattdessen kann die Variante der Methoden ohnemediaTimeOffsetUs
aufgerufen werden. Beachten Sie, dass der Offset auch für die verworfenen Varianten nicht mehr zustartTimeUs
undendTimeUs
derMediaLoadData
-Objekte hinzugefügt wird, die vom Disponenten gesendet werden.- Benennen Sie
ExoTrackSelection.blacklist
inexcludeTrack
undisBlacklisted
inisTrackExcluded
um. - Korrektur des inkonsistenten Verhaltens zwischen
ExoPlayer.setMediaItem(s)
undaddMediaItem(s)
beim Aufrufen einer leeren Playlist.
- Erlaube ExoPlayer die Steuerung der Gerätelautstärkemethoden nur, wenn sie ausdrücklich aktiviert wurde. Mit
- Transformator:
- Entfernen Sie
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. Verwenden Sie stattdessenExoPlayerAssetLoader.Factory(MediaSource.Factory)
undTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
entfernen.- Es wurde ein Fehler behoben, durch den die Transformation hängen bleiben konnte (was zu 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, anstattfindDecoder/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.
- Entfernen Sie
- Titelauswahl:
- Fügen Sie die Datei
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
hinzu. Diese ist standardmäßig deaktiviert. Wenn diese Option aktiviert ist, wird durch dasDefaultTrackSelector
eine neue Titelauswahl ausgelöst, wenn sich die Renderer-Funktionen geändert haben.
- Fügen Sie die Datei
- Extraktoren:
- 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()
undAudioSink.release()
hinzu, um die Ressourcen am Ende des Lebenszyklus des Spielers freizugeben. - Änderungen an den Audiofunktionen in
DefaultAudioSink
verfolgen Fügen Sie im Konstruktor vonDefaultAudioSink
den erforderlichen Parametercontext
hinzu. Damit registriert sichDefaultAudioSink
als Listener fürAudioCapabilitiesReceiver
und aktualisiert seineaudioCapabilities
-Property, wenn eine Änderung der Funktionen gemeldet wird. - Geben Sie Änderungen an Audiofunktionen über das neue Ereignis
onAudioCapabilitiesChanged
in derAudioSink.Listener
-Schnittstelle und die neue SchnittstelleRendererCapabilities.Listener
weiter, dieonRendererCapabilitiesChanged
-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
zuDecoderDiscardReasons
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).
- Fehler behoben, bei dem einige Wiedergaben fehlgeschlagen sind, wenn das Tunneling aktiviert ist und
- Video:
- Sorgen Sie dafür, dass
MediaCodecVideoRenderer
einenVideoSize
mit einer Breite und Höhe von 0 meldet, wenn der Renderer deaktiviert ist.Player.Listener.onVideoSizeChanged
wird entsprechend aufgerufen, wenn sichPlayer.getVideoSize()
ändert. Durch diese Änderung hat die Videogröße von ExoPlayer mitMediaCodecVideoRenderer
eine Breite und Höhe von 0, wennPlayer.getCurrentTracks
kein Video unterstützt oder die Größe des unterstützten Videotracks noch nicht festgelegt wurde.
- Sorgen Sie dafür, dass
- 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)
- Reduzieren Sie die Sichtbarkeit mehrerer nur interner Methoden in
- 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 einePlayer
-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 angeforderteMediaItems
anPlayer
übergeben werden können, wenn sieLocalConfiguration
(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 angeforderteMediaItems
anPlayer
übergeben werden kann, wenn sieLocalConfiguration
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).
- Fügen Sie die Hilfsmethode
- UI:
- Fügen Sie die Util-Methoden
shouldShowPlayButton
undhandlePlayPauseButtonAction
hinzu, um benutzerdefinierte UI-Elemente mit einer Wiedergabe-/Pause-Schaltfläche zu erstellen.
- Fügen Sie die Util-Methoden
- RTSP-Erweiterung:
- DASH-Erweiterung:
- Entferne den Zeitversatz für Medien von
MediaLoadData.startTimeMs
undMediaLoadData.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).
- Entferne den Zeitversatz für Medien von
- HLS-Erweiterung:
- Fügen Sie
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
hinzu, um ein Zeitlimit für den Ladethread festzulegen, der auf die Initialisierung vonTimestampAdjuster
wartet. Wenn die Initialisierung nicht vor Ablauf des Zeitlimits abgeschlossen ist, wirdPlaybackException
geworfen, um ein endloses Stottern der Wiedergabe zu vermeiden. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
- Fügen Sie
- Testdienstprogramme:
- Prüfen Sie in
DataSourceContractTest
, ob das URI-Schema nicht zwischen Groß- und Kleinschreibung unterscheidet.
- Prüfen Sie in
- Entfernen Sie eingestellte Symbole:
- Entfernen Sie die
DefaultAudioSink
-Konstruktoren und verwenden Sie stattdessenDefaultAudioSink.Builder
. HlsMasterPlaylist
entfernen und stattdessenHlsMultivariantPlaylist
verwenden.- Entfernen Sie
Player.stop(boolean)
. Verwenden Sie stattdessenPlayer.stop()
undPlayer.clearMediaItems()
(wennreset
=true
). - Entfernen Sie zwei verworfene
SimpleCache
-Konstruktoren und verwenden Sie stattdessen einen nicht verworfenen Konstruktor, der einDatabaseProvider
annimmt, um die Leistung zu verbessern. - Entfernen Sie den Konstruktor
DefaultBandwidthMeter
und verwenden Sie stattdessenDefaultBandwidthMeter.Builder
. - Entfernen Sie
DefaultDrmSessionManager
-Konstruktoren und verwenden Sie stattdessenDefaultDrmSessionManager.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
undDownloadHelper.forSmoothStreaming
und verwenden Sie stattdessenDownloadHelper.forMediaItem
. - Entfernen Sie den veralteten
DownloadService
-Konstruktor und verwenden Sie einen nicht veralteten Konstruktor, der die Option zum Angeben eineschannelDescriptionResourceId
-Parameters enthält. - Entfernen Sie veraltete Stringkonstanten für Zeichensätze (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
undUTF16LE_NAME
) und verwenden Sie stattdessen Kotlin-Zeichensätze aus demkotlin.text
-Paket,java.nio.charset.StandardCharsets
odercom.google.common.base.Charsets
. - Entfernen Sie den eingestellten
WorkManagerScheduler
-Konstruktor und verwenden Sie stattdessen einen nicht eingestellten Konstruktor, der die Option zum Angeben einesContext
-Parameters enthält. - Entfernen Sie die verworfenen Methoden
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
undcreateSampleFormat
, mit denen dieFormat
-Klasse instanziiert wurde. Verwenden Sie stattdessenFormat.Builder
, um Instanzen vonFormat
zu erstellen. - Entfernen Sie die verworfenen Methoden
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
undcopyWithVideoSize
. Verwenden Sie stattdessenFormat.buildUpon()
und Setter-Methoden. - Entfernen Sie die verworfene
ExoPlayer.retry()
und verwenden Sie stattdessenprepare()
. - Der verworfene Konstruktor
DefaultTrackSelector
ohne Argumente wurde entfernt. Verwenden Sie stattdessenDefaultTrackSelector(Context)
. - Entfernen Sie den veralteten Konstruktor
OfflineLicenseHelper
und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Entfernen Sie den verworfenen
DownloadManager
-Konstruktor. Verwenden Sie stattdessen den Konstruktor, der stattdessen einenExecutor
verwendet. - Entfernen Sie die veralteten
Cue
-Konstruktoren und verwenden Sie stattdessenCue.Builder
. - Entfernen Sie den veralteten Konstruktor
OfflineLicenseHelper
und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Vier eingestellte
AnalyticsListener
-Methoden wurden entfernt:onDecoderEnabled
verwenden Sie stattdessenonAudioEnabled
und/oderonVideoEnabled
.onDecoderInitialized
; verwenden Sie stattdessenonAudioDecoderInitialized
und/oderonVideoDecoderInitialized
.onDecoderInputFormatChanged
verwenden, verwenden Sie stattdessenonAudioInputFormatChanged
und/oderonVideoInputFormatChanged
.onDecoderDisabled
. Verwenden Sie stattdessenonAudioDisabled
und/oderonVideoDisabled
.
- Entfernen Sie die verworfenen
Player.Listener.onSeekProcessed
undAnalyticsListener.onSeekProcessed
und verwenden Sie stattdessenonPositionDiscontinuity
mitDISCONTINUITY_REASON_SEEK
. - Entfernen Sie
ExoPlayer.setHandleWakeLock(boolean)
und verwenden Sie stattdessensetWakeMode(int)
. - Entfernen Sie die verworfene Zeichenfolge
DefaultLoadControl.Builder.createDefaultLoadControl()
und verwenden Sie stattdessenbuild()
. - Entfernen Sie das verworfene
MediaItem.PlaybackProperties
und verwenden Sie stattdessenMediaItem.LocalConfiguration
. Das eingestellte FeldMediaItem.playbackProperties
hat jetzt den TypMediaItem.LocalConfiguration
.
- Entfernen Sie die
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, obBuffer
das FlagC.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).
- Fügen Sie
- 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 dieCallback.onGetLibraryRoot
mitparams.isRecent == true
unter API 30 den Wert „null“ zurückgab (#355). - Behebung eines Speicherlecks bei
MediaSessionService
oderMediaLibraryService
(#346) - Ein Fehler wurde behoben, durch den eine kombinierte
Timeline
- und Positionsaktualisierung in einerMediaSession
dazu führen konnte, dass eineMediaController
eineIllegalStateException
auslöste.
- Es wurde ein Problem behoben, bei dem
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 inMediaController
führen (#290). - Fügen Sie der Legacy-Version
MediaControllerCompat.Callback.onSessionEvent
die fehlende Weiterleitung vonMediaSession.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 einerMediaController
gesendet werden, ignoriert werden, wenn sie auf eine Gruppe mitFormat.metadata
verweisen (#296). - Problem behoben, bei dem
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
verfügbar sein muss, um über den altenMediaSessionCompat
auf Metadaten zuzugreifen. - Problem behoben, bei dem
MediaSession
-Instanzen in einem Hintergrund-Thread zu Abstürzen führen, wenn sie inMediaSessionService
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).
- Es wurde ein Fehler behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
- 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:
- Downloads:
- Die maximale Differenz zwischen den Startzeiten zweier zusammenzuführender Segmente kann in
SegmentDownloader
und Unterklassen konfiguriert werden (#248).
- Die maximale Differenz zwischen den Startzeiten zweier zusammenzuführender Segmente kann in
- Audio:
- Video:
- Ordnen Sie das HEVC HDR10-Format
HEVCProfileMain10HDR10
stattHEVCProfileMain10
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.
- Ordnen Sie das HEVC HDR10-Format
- Streamen:
- Behebung des vorübergehenden
STATE_IDLE
beim Wechseln zwischen Medienelementen (#245)
- Behebung des vorübergehenden
- 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.
- Ein Fehler wurde behoben, durch den DAI-Streams ohne Anzeigen nicht gestartet werden konnten, weil das erste (und im Fall ohne Anzeigen das einzige)
Version 1.0.0-rc01
16. Februar 2023
androidx.media3:media3-*:1.0.0-rc01
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).
- Optimiere die Logik für die Dekoderreihenfolge des Renderers, damit die Einstellungen von
- Extraktoren:
- Wenn beim Parsen der Trak-Atome in der Beispieltabelle (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt, wird ein
ParserException
anstelle vonNullPointerException
ausgelöst. - Samples werden jetzt richtig übersprungen, wenn in fMP4 direkt zu einem Synchronframe gesprungen wird (#10941).
- Wenn beim Parsen der Trak-Atome in der Beispieltabelle (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt, wird ein
- Audio:
- Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
AudioTrack
bei direkten Wiedergaben (Passthrough) zu berechnen.
- Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
- Text:
- Korrektur des Problems, dass
TextRenderer
einen ungültigen (negativen) Index anSubtitle.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.
- Korrektur des Problems, dass
- 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ürMediaMetadata.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).
- Korrigieren Sie das verworfene
- Sitzung:
- Füge abstrakte
SimpleBasePlayer
-Elemente hinzu, um diePlayer
-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()
derDefaultMediaNotificationProvider
hinzu und verwenden Sie zur besseren Verständlichkeit unveränderliche Listen (#216). - Füge einen
onSetMediaItems
-Callback-Listener hinzu, um dieMediaItem
-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).
- Füge abstrakte
- 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ürMediaMetadata.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 PropertyfocusSkipButtonWhenAvailable
hinzu, um das Fokussieren der Schaltfläche „Überspringen“ auf Fernsehern anzufordern, und setze sie standardmäßig auf „wahr“. - Füge der
ImaServerSideAdInsertionMediaSource.AdsLoader
die MethodefocusSkipButton()
hinzu, um den Fokus programmatisch auf die Schaltfläche „Überspringen“ zu setzen. - Die IMA SDK-Version wurde auf 3.29.0 erhöht.
- Entfernen Sie den Player-Listener der
- 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 einzelnenMediaSource
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, wennseekToNext
oderseekToPrevious
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).
- Füge
- 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.
- Erzwingen Sie die Mindestanzahl von
- 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 demselbenPriorityTaskManager
verursacht wurde (#10570). - Die Downloadbenachrichtigung wird sofort angezeigt (#183).
- Parallele Downloadentfernungen auf 1 beschränken, um eine übermäßige Threaderstellung zu vermeiden (#10458).
- Behebung eines potenziellen Endlosschleifenfehlers in
- 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 vonAudioTrack
-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
inandroidx.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).
- Verwenden Sie
- Metadaten:
MetadataRenderer
kann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstelle eine Instanz mitMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
, um anzugeben, ob der Renderer Metadaten frühzeitig oder synchron mit der 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)
- Aktuelle Overrides des Players als Voreinstellung in
- 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, umDefaultMediaNotificationProvider
-Instanzen zu erstellen. Der Builder kann die Benachrichtigungs-ID, die Benachrichtigungskanal-ID und den Benachrichtigungskanalnamen konfigurieren, die vom Anbieter verwendet werden. Fügen Sie außerdem die MethodeDefaultMediaNotificationProvider.setSmallIcon(int)
hinzu, um das kleine Symbol für Benachrichtigungen festzulegen. (#104) - Befehle, die vor
MediaController.release()
gesendet wurden, dürfen nicht verworfen werden (#99). SimpleBitmapLoader
kann Bitmap ausfile://
-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:
- 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()
, umCastPlayer
bei der Wiedergabesteuerung mit einerMediaController
identifizieren zu können (#142).
- Implementiere
- 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.
- Entfernen Sie
Version 1.0.0-beta02
21. Juli 2022
androidx.media3:media3-*:1.0.0-beta02
wird veröffentlicht.
Version 1.0.0-beta02 enthält diese Commits.
Dieser Release entspricht der ExoPlayer-Version 2.18.1.
- Kernbibliothek:
- Achte darauf, dass das Ersetzen von
ShuffleOrder
durchExoPlayer.setShuffleOrder
zu einem Aufruf vonPlayer.Listener#onTimelineChanged
mitreason=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
inDefaultMediaSourceFactory
wurde korrigiert, die in einigen Fällen nicht funktionierte (#116).
- Achte darauf, dass das Ersetzen von
- Extraktoren:
- 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
inLeanbackAdapter
an (10420).
- Hören Sie sich die Änderungen an
- Besetzung:
Version 1.0.0-beta01
16. Juni 2022
androidx.media3:media3-*:1.0.0-beta01
wird veröffentlicht.
Version 1.0.0-beta01 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.18.0.
- 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 mitExoPlayer.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
anMediaSource.Factory.setDrmSessionManagerProvider
undMediaSource.Factory.setLoadErrorHandlingPolicy
ist nicht zulässig. Instanzen vonDefaultDrmSessionManagerProvider
undDefaultLoadErrorHandlingPolicy
können bei Bedarf explizit übergeben werden. - Fügen Sie
MediaItem.RequestMetadata
hinzu, um Metadaten darzustellen, die zum Abspielen von Medien erforderlich sind, wenn das genaueLocalConfiguration
nicht bekannt ist. Entfernen Sie auchMediaMetadata.mediaUrl
, da es jetzt inRequestMetadata
enthalten ist. - Füge
Player.Command.COMMAND_SET_MEDIA_ITEM
hinzu, damit Spieler das Festlegen eines einzelnen Elements zulassen können.
- Unterstützung für Android-Plattformdiagnosen über
- Titelauswahl:
- Fassen Sie die Klasse
TrackSelectionOverrides
inTrackSelectionParameters
zusammen und stufen SieTrackSelectionOverride
zu einer Klasse der obersten Ebene hoch. - Benennen Sie
TracksInfo
inTracks
undTracksInfo.TrackGroupInfo
inTracks.Group
um.Player.getCurrentTracksInfo
undPlayer.Listener.onTracksInfoChanged
wurden inPlayer.getCurrentTracks
undPlayer.Listener.onTracksChanged
umbenannt. Dazu gehört auch, dass der Name derPlayer.Listener.onTracksChanged
-Methode nicht mehr als veraltet eingestuft wird, aber mit anderen Parametertypen. - Ändern Sie
DefaultTrackSelector.buildUponParameters
undDefaultTrackSelector.Parameters.buildUpon
so, dassDefaultTrackSelector.Parameters.Builder
anstelle der verworfenenDefaultTrackSelector.ParametersBuilder
zurückgegeben wird. - Fügen Sie
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
hinzu, das standardmäßig aktiviert ist. Wenn diese Option aktiviert ist, werden vonDefaultTrackSelector
Audiotracks bevorzugt, deren Kanalanzahl die Ausgabefunktionen des Geräts nicht überschreitet. Auf Mobilgeräten bevorzugtDefaultTrackSelector
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üftDefaultTrackSelector
außerdem, ob sich die Spatializer-Eigenschaften geändert haben, und löst bei Bedarf eine neue Titelauswahl aus. Geräte mit einemtelevision
UI-Modus sind von diesen Einschränkungen ausgenommen. Das Format mit der höchsten Kanalanzahl wird bevorzugt. Damit diese Funktion aktiviert werden kann, muss dieDefaultTrackSelector
-Instanz mit einemContext
erstellt werden.
- Fassen Sie die Klasse
- Video:
- Benennen Sie
DummySurface
inPlaceholderSurface
um. - Fügen Sie der
MediaCodecVideoRenderer.getCodecMaxInputSize
die AV1-Unterstützung hinzu.
- Benennen Sie
- Audio:
- LG AC3-Audiodecoder, der einen nicht standardmäßigen MIME-Typ angibt
- Ändern Sie den Rückgabetyp von
AudioAttributes.getAudioAttributesV21()
vonandroid.media.AudioAttributes
in eine neueAudioAttributesV21
-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 KanalmaskeAudioFormat.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()
, damitCueGroup
stattList<Cue>
zurückgegeben wird. - SSA: Unterstützung der Stileinstellung
OutlineColour
, wennBorderStyle == 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.
- Ändern Sie
- Extraktoren:
- UI:
- Korrektur der Zustellung von Ereignissen an
OnClickListener
s, die aufPlayerView
festgelegt sind, wennuseController=false
(#9605). Außerdem wurde die Zustellung von Ereignissen anOnLongClickListener
für alle Ansichtskonfigurationen korrigiert. - Eine Folge von Touch-Ereignissen, die die Grenzen von
PlayerView
vorACTION_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
andTrackSelectionDialogBuilder
to work with thePlayer
interface rather thanExoPlayer
. So können die Ansichten mit anderenPlayer
-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).
- Korrektur der Zustellung von Ereignissen an
- DASH:
- Kanalanzahl aus DTS-
AudioChannelConfiguration
-Elementen parsen Dadurch wird der Audio-Passthrough für DTS-Streams wieder aktiviert (#10159). - Übergabe von
null
anDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
nicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Kanalanzahl aus DTS-
- HLS:
- Bei der Vorbereitung in Chunks zurückfallen, wenn das CODECS-Attribut der Playlist keinen Audio-Codec enthält (#10065).
- Übergabe von
null
anHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
undHlsMediaSource.Factory.setPlaylistTrackerFactory
nicht zulassen Instanzen vonDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
oder ein Verweis aufDefaultHlsPlaylistTracker.FACTORY
können bei Bedarf explizit übergeben werden.
- Smooth Streaming:
- Übergabe von
null
anSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
nicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Übergabe von
- 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
inPlaceholderDataSource
um. - Problemumgehung für die OkHttp-Unterbrechungsbehandlung
- Benennen Sie
- Sitzung:
- Ersetzen Sie
MediaSession.MediaItemFiller
durchMediaSession.Callback.onAddMediaItems
, um die asynchrone Auflösung von Anfragen zu ermöglichen. - Unterstützen Sie
setMediaItems(s)
-Methoden, wennMediaController
eine Verbindung zu einer Legacy-Mediensitzung herstellt. - Entfernen Sie
MediaController.setMediaUri
undMediaSession.Callback.onSetMediaUri
. Die gleiche Funktionalität kann mitMediaController.setMediaItem
undMediaSession.Callback.onAddMediaItems
erreicht werden. - Leiten Sie alte
MediaController
-Anrufe zum Abspielen von Medien anMediaSession.Callback.onAddMediaItems
statt anonSetMediaUri
weiter. - Füge
MediaNotification.Provider
undDefaultMediaNotificationProvider
hinzu, um die Benachrichtigung anzupassen. - Fügen Sie
BitmapLoader
undSimpleBitmapLoader
zum Herunterladen von Artwork-Bildern hinzu. - Fügen Sie
MediaSession.setCustomLayout()
hinzu, um 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
inMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
undMediaSession.Builder.setSessionCallback
insetCallback
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).
- Ersetzen Sie
- 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).
- Aktualisieren Sie die CMake-Version auf
- Entfernen Sie veraltete Symbole:
- Entfernen Sie
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. Verwenden Sie stattdessenPlayer.Listener.onTracksChanged(Tracks)
. - Entfernen Sie
Player.getCurrentTrackGroups
undPlayer.getCurrentTrackSelections
. Verwenden Sie stattdessenPlayer.getCurrentTracks
. Sie können auch weiterhinExoPlayer.getCurrentTrackGroups
undExoPlayer.getCurrentTrackSelections
verwenden, auch wenn diese Methoden eingestellt werden. - Entfernen Sie die Konstanten
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
undDEFAULT_TRACK_SELECTOR_PARAMETERS
. Verwenden Sie nach MöglichkeitgetDefaultTrackSelectorParameters(Context)
und andernfallsDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Entfernen Sie den Konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Verwende stattdessenDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. Transformer.Builder.setContext
entfernen. DieContext
sollte stattdessen an den Konstruktor vonTransformer.Builder
übergeben werden.
- Entfernen Sie
Version 1.0.0-alpha03
14. März 2022
androidx.media3:media3-*:1.0.0-alpha03
wird veröffentlicht.
Version 1.0.0-alpha03 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.17.1.
- Audio:
- Fehler 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
undMediaItem.SubtitleConfiguration.Builder.setId
wurde korrigiert, damit das FeldSubtitleConfiguration
priorisiert wird und bei fehlendem Wert aufFactory
zurückgegriffen wird (#10016).
- Die Interaktion von
- 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 vonDefaultRenderersFactory
, diebuildVideoRenderers()
oderbuildAudioRenderers()
überschreiben, auf die Codec-Adapter-Fabrik zugreifen und sie an von ihnen erstellteMediaCodecRenderer
-Instanzen übergeben können. - Geben Sie die ICY-Headerfelder
name
undgenre
anMediaMetadata.station
bzw.MediaMetadata.genre
weiter, damit sie die Anwendung überPlayer.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 vonMediaCodec
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
inqueuedInputBufferCount
um. SimpleExoPlayer.renderers
als privat kennzeichnen. Der Zugriff auf Renderer erfolgt überExoPlayer.getRenderer
.- Einige Konstantenwerte für
AnalyticsListener.EventFlags
wurden aktualisiert, damit sie mit den Werten inPlayer.EventFlags
übereinstimmen. - Teilen Sie
AnalyticsCollector
in eine Schnittstelle und eine Standardimplementierung auf, damit es von R8 entfernt werden kann, wenn eine App es nicht benötigt.
- Fügen Sie die geschützte Methode
- 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 einerTrackGroupArray
sind nicht zulässig.TrackGroup
-Elemente können immer unterscheidbar gemacht werden, indem einid
imTrackGroup
-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, dassAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
anstelle vonnull
explizit übergeben werden muss. - Erlaubt die Anpassung der Berechnung der Puffergröße
AudioTrack
durch Einfügen einesAudioTrackBufferSizeProvider
inDefaultAudioSink
. (#8891). - Erstellen Sie
AudioTrack
noch einmal, wenn die angeforderte Puffergröße größer als 1 MB war. (#9712).
- Extraktoren:
- Text:
- Füge ein
MediaItem.SubtitleConfiguration.id
-Feld hinzu, das an dasFormat.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.
- Füge ein
- Digitale Rechteverwaltung:
- Entfernen Sie
playbackLooper
ausDrmSessionManager.(pre)acquireSession
. WennDrmSessionManager
von einer Anwendung in einer benutzerdefiniertenMediaSource
verwendet wird, muss stattdessenplaybackLooper
anDrmSessionManager.setPlayer
übergeben werden.
- Entfernen Sie
- 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:
- 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 alsC.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).
- Fügen Sie geparste grundlegende und ergänzende Attribute zu
- 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).
- Geben Sie eine Client-API an, um den
- 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önnensetClearMediaItemsOnStop(false)
über den Connector aufrufen.
- Cast-Erweiterung:
- 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).
- Stellen Sie sicher, dass
- 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 vonplay-services-cast-framework
sind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind. Beim Erstellen vonPendingIntent
s kommt es zu einem Absturz mit einerIllegalArgumentException
(#9528).
- Aktualisiere die Cast-Erweiterung, um eine Abhängigkeit von
- Entfernen Sie veraltete Symbole:
- Entfernen Sie
Player.EventListener
. Verwende stattdessenPlayer.Listener
. - Entfernen Sie
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
undMediaSourceFactory#setDrmUserAgent
. Verwenden Sie stattdessenMediaSourceFactory#setDrmSessionManagerProvider
. MediaSourceFactory#setStreamKeys
entfernen. Verwenden Sie stattdessenMediaItem.Builder#setStreamKeys
.- Entfernen Sie
MediaSourceFactory#createMediaSource(Uri)
. Verwenden Sie stattdessenMediaSourceFactory#createMediaSource(MediaItem)
. - Entfernen Sie
setTag
ausDashMediaSource
,HlsMediaSource
undSsMediaSource
. Verwenden Sie stattdessenMediaItem.Builder#setTag
. DashMediaSource#setLivePresentationDelayMs(long, boolean)
entfernen. Verwenden SieMediaItem.Builder#setLiveConfiguration
undMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
, um das Manifest zu überschreiben, oderDashMediaSource#setFallbackTargetLiveOffsetMs
, um einen Fallbackwert anzugeben.- Entfernen Sie
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Die Funktion kann nicht mehr deaktiviert werden. - Entfernen Sie
ActionFile
undActionFileUpgradeUtil
. Wenn du ExoPlayer 2.16.1 oder älter verwendest, kannst du mitActionFileUpgradeUtil
alte Aktionsdateien inDefaultDownloadIndex
zusammenführen. - Entfernen Sie
ProgressiveMediaSource#setExtractorsFactory
. Verwenden Sie stattdessen denProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
-Konstruktor. - Entfernen Sie
ProgressiveMediaSource.Factory#setTag
undProgressiveMediaSource.Factory#setCustomCacheKey
. Verwenden Sie stattdessenMediaItem.Builder#setTag
undMediaItem.Builder#setCustomCacheKey
. - Entfernen Sie die Konstruktoren
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
undDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Verwenden Sie stattdessen den KonstruktorDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
undDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Entfernen Sie alle öffentlichen
CronetDataSource
-Konstruktoren. Verwenden Sie stattdessenCronetDataSource.Factory
.
- Entfernen Sie
- Ä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
(imcom.google.android.exoplayer2.ext.flac
-Paket)@FlacExtractor.Flags
(imcom.google.android.exoplayer2.extractor.flac
-Paket)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Version 1.0.0-alpha01
27. Oktober 2021
androidx.media3:media3-*:1.0.0-alpha01
wird 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.