Media3
Letzte Aktualisierung | Stabile Version | Release-Kandidat | Beta-Ausgabe | Alphaversion |
---|---|---|---|---|
20. Dezember 2024 | 1.5.1 | - | - | 1.6.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:
Groovy
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.6.0
Version 1.6.0-alpha01
20. Dezember 2024
androidx.media3:media3-*:1.6.0-alpha01
wird veröffentlicht.
Version 1.6.0-alpha01 enthält diese Commits.
- Gemeinsame Bibliothek:
- Entfernen Sie die Methode
Format.toBundle(boolean excludeMetadata)
und verwenden Sie stattdessenFormat.toBundle()
. - Fügen Sie
AudioManagerCompat
undAudioFocusRequestCompat
hinzu, um die entsprechenden Klassen inandroidx.media
zu ersetzen.
- Entfernen Sie die Methode
- ExoPlayer:
- Achte bei der Auswahl eines Videotracks auf die Sprache. Wähle standardmäßig einen „Haupt“-Videotrack aus, der der Sprache des ausgewählten Audiotracks entspricht, sofern verfügbar. Mit
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
können Sie explizite Einstellungen für die Videosprache festlegen. - Fügen Sie der Methode
DefaultTrackSelector.selectVideoTrack()
den ParameterselectedAudioLanguage
hinzu. - Fügen Sie den Parameter
retryCount
zuMediaSourceEventListener.onLoadStarted
und den entsprechendenMediaSourceEventListener.EventDispatcher
-Methoden hinzu. - Fehler behoben, bei dem Playlist-Elemente oder Zeiträume in DASH-Streams mit mehreren Zeiträumen, deren Dauer nicht mit den tatsächlichen Inhalten übereinstimmt, am Ende des Elements zu Frame-Einfrieren führen können (#1698).
- Reduzieren Sie die Standardwerte für
bufferForPlaybackMs
undbufferForPlaybackAfterRebufferMs
inDefaultLoadControl
auf 1.000 bzw. 2.000 ms. - Fügen Sie
MediaExtractorCompat
hinzu, eine neue Klasse mit Funktionen, die denen der PlattformMediaExtractor
entsprechen. - Verschieben Sie
BasePreloadManager.Listener
auf eine oberste Ebene.PreloadManagerListener
RenderersFactory.createSecondaryRenderer
kann implementiert werden, um sekundäre Renderer für das Vorwärmen bereitzustellen. Durch die Vorwärmung können Medienelemente während der Wiedergabe schneller gewechselt werden.- Aktiviere das Senden von
CmcdData
für Manifestanfragen in den adaptiven Streamingformaten DASH, HLS und SmoothStreaming (#1951). - Geben Sie den
MediaCodecInfo
des Codecs an, der inMediaCodecRenderer.onReadyToInitializeCodec
initialisiert werden soll (#1963). - Ändern Sie
AdsMediaSource
, damit dieAdPlaybackStates
durch Anhängen von Anzeigengruppen wachsen kann. Ungültige Änderungen werden erkannt und eine Ausnahme wird ausgelöst.
- Achte bei der Auswahl eines Videotracks auf die Sprache. Wähle standardmäßig einen „Haupt“-Videotrack aus, der der Sprache des ausgewählten Audiotracks entspricht, sofern verfügbar. Mit
- Transformator:
- Aktualisieren Sie die Parameter
VideoFrameProcessor.registerInputStream
undVideoFrameProcessor.Listener.onInputStreamRegistered
, umFormat
zu verwenden. - Unterstützung für das Transmuxing in alternative abwärtskompatible Formate hinzufügen
- Generiere bei Verwendung von
DefaultEncoderFactory
statische HDR-Metadaten.
- Aktualisieren Sie die Parameter
- Extraktoren:
- AVI: Fehler bei der Verarbeitung von Dateien mit komprimiertem Audio mit konstanter Bitrate behoben, bei denen im Stream-Header die Anzahl der Byte anstelle der Anzahl der Chunks gespeichert wird.
- Audio:
onAudioPositionAdvancing
wird jetzt aufgerufen, wenn die Wiedergabe fortgesetzt wird. Bisher wurde es aufgerufen, wenn die Wiedergabe pausiert wurde.
- Video:
- Korrigiere
MediaCodecVideoRenderer
so, dass der Renderer ohneSurface
nur dann Frames überspringt, die zu früh sind, wennVideoFrameReleaseControl.getFrameReleaseAction
nichtFRAME_RELEASE_TRY_AGAIN_LATER
ist.
- Korrigiere
- Text:
- Es werden nicht mehr alle mit
MediaItem.Builder.setSubtitleConfigurations
konfigurierten Untertiteldateien geladen, sondern nur eine, wenn sie über die Spurauswahl ausgewählt wird (#1721).
- Es werden nicht mehr alle mit
- Wirkung:
- Die Funktionen von
OverlaySettings
wurden inStaticOverlaySettings
verschoben.OverlaySettings
kann untergeordnet werden, um dynamische Overlay-Einstellungen zuzulassen.
- Die Funktionen von
- Muxer:
MuxerException
wurde aus derMuxer
-Benutzeroberfläche entfernt, um einen sehr langen voll qualifizierten Namen zu vermeiden.
- Sitzung:
- Fügen Sie „Context“ als Parameter zu „MediaButtonReceiver.shouldStartForegroundService“ hinzu (#1887).
- UI:
- Fügen Sie dem
media3-ui-compose
-ModulPlayerSurface
Composable hinzu. - Fügen Sie dem
media3-ui-compose
-Modul die KlassenPlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
undShuffleButtonState
sowie die entsprechendenrememberPlayPauseButtonState
-,rememberNextButtonState
-,rememberPreviousButtonState
-,rememberRepeatButtonState
- undrememberShuffleButtonState
-Kompositionen hinzu.
- Fügen Sie dem
- HLS-Erweiterung:
- Fügen Sie eine erste Version von
HlsInterstitialsAdsLoader
hinzu. Der Anzeigen-Lademechanismus liest die HLS-Interstitials einer HLS-Media-Playlist und ordnet sie derAdPlaybackState
zu, die an dieAdsMediaSource
übergeben wird. Diese erste Version unterstützt nur HLS-VOD-Streams mitX-ASSET-URI
-Attributen. - Fügen Sie
HlsInterstitialsAdsLoader.AdsMediaSourceFactory
hinzu. Apps können damitAdsMediaSource
-Instanzen erstellen, die auf einfache und sichere Weise einenHlsInterstitialsAdsLoader
verwenden.
- Fügen Sie eine erste Version von
- DASH-Erweiterung:
- Unterstützung für das AC-4-Level-4-Format für DASH hinzugefügt (#1898).
- Decodererweiterungen (FFmpeg, VP9, AV1 usw.):
- Füge das MPEG-H-Dekodierungsmodul hinzu, das das native MPEG-H-Dekodierungsmodul zum Dekodieren von MPEG-H-Audio verwendet (#1826).
- Demo-App:
- Fügen Sie
demo-compose
mithilfe vonPlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
undShuffleButtonState
zusammensetzbare UI-Elemente vom TypMinimalControls
(PlayPauseButton
,NextButton
,PreviousButton
) undExtraControls
(RepeatButton
,ShuffleButton
) hinzu.
- Fügen Sie
- Entfernen Sie veraltete Symbole:
- Die eingestellte Methode
AudioMixer.create()
entfernen Verwenden Sie stattdessenDefaultAudioMixer.Factory().create()
. - Entfernen Sie die folgenden veralteten
Transformer.Builder
-Methoden:setTransformationRequest()
, verwende stattdessensetAudioMimeType()
,setVideoMimeType()
undsetHdrMode()
.setAudioProcessors()
, legen Sie den Audioprozessor in einemEditedMediaItem.Builder.setEffects()
fest und übergeben Sie ihn stattdessen anTransformer.start()
.setVideoEffects()
, Videoeffekt in einemEditedMediaItem.Builder.setEffects()
festlegen und anTransformer.start()
übergeben.setRemoveAudio()
, verwenden Sie stattdessenEditedMediaItem.Builder.setRemoveAudio()
, um den Ton aus derEditedMediaItem
zu entfernen, die anTransformer.start()
übergeben wird.setRemoveVideo()
, verwende stattdessenEditedMediaItem.Builder.setRemoveVideo()
, um das Video aus derEditedMediaItem
zu entfernen, die anTransformer.start()
übergeben wird.setFlattenForSlowMotion()
, verwenden Sie stattdessenEditedMediaItem.Builder.setFlattenForSlowMotion()
, um den anTransformer.start()
übergebenenEditedMediaItem
zu flach zu bilden.setListener()
, verwende stattdessenaddListener()
,removeListener()
oderremoveAllListeners()
.
- Entfernen Sie die folgenden veralteten
Transformer.Listener
-Methoden:onTransformationCompleted(MediaItem)
; verwenden Sie stattdessenonCompleted(Composition, ExportResult)
.onTransformationCompleted(MediaItem, TransformationResult)
. Verwenden Sie stattdessenonCompleted(Composition, ExportResult)
.onTransformationError(MediaItem, Exception)
; verwenden Sie stattdessenonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationException)
; verwenden Sie stattdessenonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationResult, TransformationException)
; verwenden Sie stattdessenonError(Composition, ExportResult, ExportException)
.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
; verwenden Sie stattdessenonFallbackApplied(Composition, TransformationRequest, TransformationRequest)
.
- Entfernen Sie die eingestellte Klasse
TransformationResult
. Verwenden Sie stattdessenExportResult
. - Entfernen Sie die eingestellte Klasse
TransformationException
. Verwenden Sie stattdessenExportException
. - Entfernen Sie die eingestellte
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
. Verwenden Sie stattdessenTransformer.PROGRESS_STATE_NOT_STARTED
. - Entfernen Sie die eingestellte
Transformer.setListener()
. Verwenden Sie stattdessenTransformer.addListener()
,Transformer.removeListener()
oderTransformer.removeAllListeners()
. - Entfernen Sie die eingestellte
Transformer.startTransformation()
. Verwenden Sie stattdessenTransformer.start(MediaItem, String)
. - Entfernen Sie die eingestellte
SingleFrameGlShaderProgram
. Verwenden Sie stattdessenBaseGlShaderProgram
. - Entfernen Sie
Transformer.flattenForSlowMotion
. Verwenden Sie stattdessenEditedMediaItem.flattenForSlowMotion
.
- Die eingestellte Methode
Version 1.5
Version 1.5.1
19. Dezember 2024
androidx.media3:media3-*:1.5.1
wird veröffentlicht.
Version 1.5.1 enthält diese Commits.
- ExoPlayer:
- Die asynchrone Entschlüsselung in MediaCodec wurde deaktiviert, um gemeldete Probleme mit Zeitüberschreitungen bei Codecs mit dieser Plattform-API zu vermeiden (#1641).
- Extraktoren:
- MP3: Die Wiedergabe wird nicht vorzeitig beendet, wenn der Inhaltsverzeichnis eines
VBRI
-Frames nicht alle MP3-Daten in einer Datei abdeckt (#1904).
- MP3: Die Wiedergabe wird nicht vorzeitig beendet, wenn der Inhaltsverzeichnis eines
- Video:
- Rollback bei der Verwendung der von
MediaCodecAdapter
bereitgestellten Pixelseitenverhältniswerte, die bei der Verarbeitung vononOutputFormatChanged
angegeben wurden (#1371).
- Rollback bei der Verwendung der von
- Text:
- Fehlerkorrektur in
ReplacingCuesResolver.discardCuesBeforeTimeUs
: Der Cue, der beitimeUs
aktiv war (vorher gestartet, aber noch nicht beendet), wurde fälschlicherweise verworfen (#1939).
- Fehlerkorrektur in
- Metadaten:
- Extrahiere die Disc-/Tracknummer und das Genre aus Vorbis-Kommentaren in
MediaMetadata
(#1958).
- Extrahiere die Disc-/Tracknummer und das Genre aus Vorbis-Kommentaren in
Version 1.5.0
27. November 2024
androidx.media3:media3-*:1.5.0
wird veröffentlicht.
Version 1.5.0 enthält diese Commits.
- Gemeinsame Bibliothek:
- Füge
ForwardingSimpleBasePlayer
hinzu, mit dem du mit kleinen Anpassungen zu einem anderen Player weiterleiten kannst und gleichzeitig für vollständige Konsistenz und korrekte Verarbeitung von Listenern sorgst (#1183). - Ersetzen Sie
SimpleBasePlayer.State.playlist
durch die MethodegetPlaylist()
. - Füge eine Überschreibung für
SimpleBasePlayer.State.Builder.setPlaylist()
hinzu, um einenTimeline
und aktuelleTracks
undMetadata
direkt anzugeben, anstatt eine Playlist-Struktur zu erstellen. - Erhöhen Sie
minSdk
auf 21 (Android Lollipop). 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
Player.listen
-Sperrungserweiterungsfunktion hinzu, um eine Coroutine zu starten, diePlayer.Events
in dermedia3-common-ktx
-Bibliothek überwacht. - Entfernen Sie
@DoNotInline
-Anmerkungen aus manuell nicht ausgerichteten inneren Klassen, um Fehler bei der Laufzeitüberprüfung von Klassen zu vermeiden. In den neuesten Versionen von R8 werden solche Aufrufe jetzt automatisch außerhalb der Aufrufabfolge ausgeführt, um Laufzeitfehler zu vermeiden. Eine manuelle Aufrufabfolge ist also nicht mehr erforderlich. 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 mit anderen Build-Systemen als Gradle 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.
- Füge
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()
kann jetzt für jedes Medienelement aufgerufen werden. Bisher wurde sie 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. So wird verhindert, dass der Anruf blockiert wird, wenn die Audiofokus-Verarbeitung nicht aktiviert ist (#1616). - Wiedergabe unabhängig von der zwischengespeicherten Dauer zulassen, wenn das Laden fehlschlägt (#1571).
- Füge
AnalyticsListener.onRendererReadyChanged()
hinzu, um anzuzeigen, dass die Wiedergabe bei einzelnen Renderern möglich ist. - Fehlerbehebung:
MediaCodec.CryptoException
wird manchmal als „unerwarteter Laufzeitfehler“ gemeldet, wennMediaCodec
im asynchronen Modus ausgeführt wird (Standardverhalten bei API 31 und höher). - Übergeben Sie
bufferedDurationUs
anstelle vonbufferedPositionUs
mitPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
. Außerdem wirdDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
inDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
geändert. Apps müssen dann anstelle einer Position einen Wert 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, wird das Vorladen so eingeschränkt, dass es nur gestartet und fortgesetzt wird, wenn der Player nicht für die Wiedergabe geladen wird.DefaultLoadControl
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. - Methode
MediaSourceEventListener.EventDispatcher.dispatchEvent()
hinzufügen, um das Aufrufen von Ereignissen von Unterklassen-Listenern zu ermöglichen (1736). - 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 die Methode als endgültig markiert, um Überschreibungen zu verhindern. Stattdessen sollte die 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, Fehler, Abbrechen und Abschließen des Ladens 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 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 ausgegeben, während Parsefehler stillschweigend ignoriert werden (dies 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
- Fehler behoben, bei dem Playlist-Elemente oder Zeiträume in DASH-Streams mit mehreren Zeiträumen, deren Dauer nicht mit den tatsächlichen Inhalten übereinstimmt, am Ende des Elements zu Frame-Einfrieren führen können (#1698).
- Fügen Sie
SntpClient
einen Setter hinzu, um die maximale verstrichene Zeit seit der letzten Aktualisierung festzulegen, nach der der Client neu initialisiert wird (#1794).
- 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.- Die Bilddauer muss beim Bildexport mit
MediaItem.Builder.setImageDurationMs
festgelegt werden. - Exportunterstützung für Lücken in Sequenzen von EditedMediaItems hinzufügen
- Füge
- Titelauswahl:
DefaultTrackSelector
: Bei ansonsten gleichen Faktoren sollte objektbasiertes Audio gegenüber kanalbasiertem Audio bevorzugt werden.
- 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 abgeschnitten (nicht als 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). - Die Verarbeitung von Pre-Roll-Samples für Medienstartpositionen, die keine keyframes sind, wurde bei der Verarbeitung von Bearbeitungslisten in MP4-Dateien korrigiert (#1659).
- Die Berechnung der Framerate wurde verbessert, indem die Mediendauer aus dem Feld
mdhd
inMp4Extractor
undFragmentedMp4Extractor
verwendet wird (#1531). - Falsche Skalierung von
media_time
in MP4-Bearbeitungslisten korrigiert. Währendsegment_duration
bereits korrekt anhand der Filmzeitleiste skaliert wurde, wirdmedia_time
jetzt gemäß dem MP4-Formatstandard (#1792) anhand der Zeitleiste des Tracks skaliert. - Bei der Berechnung von
endIndices
für MP4-Dateien mit einer Bearbeitungsliste werden jetzt nicht in der richtigen Reihenfolge angeordnete Frames berücksichtigt (#1797). - Korrektur des Media-Dauer-Parsings im Feld
mdhd
von MP4-Dateien, um-1
-Werte zu verarbeiten (#1819). - Unterstützung für die Identifizierung des
h263
-Box in MP4-Dateien für H.263-Videos hinzugefügt (#1821). - Unterstützung für das ISO-Basismediendateiformat AC-4 Level 4 hinzugefügt (#1265).
- Mit
- DataSource:
HttpEngineDataSource
wurde aktualisiert, sodass die Verwendung ab Version S-Erweiterung 7 statt ab API-Level 34 möglich ist (#1262).DataSourceContractTest
: Prüfen, obDataSource.getUri()
den aufgelösten URI zurückgibt (wie dokumentiert). Wenn sich diese von der angeforderten URI unterscheidet, kann dies in Tests mit der neuen MethodeDataSourceContractTest.TestResource.Builder.setResolvedUri()
angegeben werden.DataSourceContractTest
: Prüfen, obDataSource.getUri()
undgetResponseHeaders()
den Wert „offen“ zurückgeben, nachdem ein Aufruf vonopen()
fehlgeschlagen ist (aufgrund einer nicht gefundenen Ressource) und vor einem nachfolgenden Aufruf vonclose()
.- Wenn Sie
DataSourceContractTest.getNotFoundResources()
überschreiben, können Testunterklassen mehrere „nicht gefunden“-Ressourcen und auch alle erwarteten Überschriften bereitstellen. So lässt sich zwischen HTTP 404 (mit Headern) und „Server nicht gefunden“ (ohne Header) unterscheiden.
- Wenn Sie
- Audio:
- Konfiguriert automatisch CTA-2075-Lautstärkemetadaten für den Codec, sofern sie in den Medien vorhanden sind.
- Die Lautstärke sollte beim Vor- und Zurückspringen stufenlos leiser werden.
- Pop-Geräusche, die beim Suchen auftreten können, wurden behoben.
- Behebung von Fehlern beim Kürzen von Audioinhalten beim Algorithmus für Zeitdehnung/Tonhöhenänderung von Sonic.
- Fehler in
SpeedChangingAudioProcessor
behoben, der zu fehlenden Ausgabeframes führte
- 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 Pixel-Seitenverhältniswerte, sofern vorhanden, bei der Verarbeitung vononOutputFormatChanged
(#1371). - 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:
- Füge eine benutzerdefinierte
VoiceSpan
hinzu und fülle sie für WebVTT-Sprachspanne aus (#1632). - WebVTT-Untertitel in HLS mit sehr großen Zeitstempeln, die bei der Darstellung als Mikrosekunden und Multiplikation mit der
90,000
-MPEG-Zeitbasis einen 64-Bit-long
überschreiten, werden angezeigt (#1763). - Unterstützung von CEA-608-Untertiteln in Dolby Vision-Inhalten (#1820)
- Behebung eines Fehlers, bei dem die Wiedergabe bei DASH-Streams mit mehreren Zeiträumen hängen blieb, wenn CEA-608-Untertitel aktiviert waren (#1863).
- Füge eine benutzerdefinierte
- 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
- Bild:
- Fügen Sie
ExternallyLoadedImageDecoder
hinzu, um die Integration in externe Bibliotheken zum Laden von Bildern wie Glide oder Coil zu vereinfachen.
- Fügen Sie
- DataSource:
- Fügen Sie
FileDescriptorDataSource
hinzu, eine neueDataSource
, die zum Lesen aus einerFileDescriptor
verwendet werden kann (#3757).
- Fügen Sie
- Wirkung:
- 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:
- Fehler behoben, durch den das Löschen der Playlist zu einer
ArrayIndexOutOfBoundsException
inImaServerSideAdInsertionMediaSource
führen konnte - Fehler behoben, bei dem serverseitig eingefügte DAI-Streams ohne Preroll zu einer
ArrayIndexOutOfBoundsException
führen können, wenn die Wiedergabe über die letzte Mid-Roll hinausgeht (#1741).
- Fehler behoben, durch den das Löschen der Playlist zu einer
- 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). - 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
den tatsächlichen Rückgabewert nicht erhalten, der vom alten Dienst zurückgesendet wurde (#1474). - Bei der Einrichtung des Broadcastempfängers für Intents von Medienschaltflächen wird von Geräten bestimmter Hersteller
IllegalArgumentException
geworfen (#1730). - Befehlsschaltflächen für Medienelemente hinzufügen Dadurch wird die Media3 API für das, was früher
Custom browse actions
war, in die alte Bibliothek mitMediaBrowserCompat
eingefü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 ursprüngliche
MediaBrowserCompat
, wenn Sie eine Verbindung zu einer älterenMediaBrowserCompat
herstellen. Der Dienst kann die Verbindungshinweise, die als Stammhinweise übergeben werden, beim ersten Aufruf vononGetRoot()
erhalten. - Fehler behoben, bei dem eine
MediaBrowser
, die mit einem alten Browserdienst verbunden ist, keinen vom Dienst gesendeten Fehler empfing, nachdem der Browser eineparentid
abonniert hatte. - Verbesserung des Interoperabilitätsverhaltens, damit ein Media3-Browser, der mit einer älteren
MediaBrowserService
verbunden ist, die untergeordneten Elemente einerparentId
nicht zweimal anfordert, wenn er ein übergeordnetes Element abonniert.
- Füge
- 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 reaktiv auf eine 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
- DASH-Erweiterung:
- Unterstützung für Zeiträume hinzugefügt, die in der Mitte eines Segments beginnen (#1440).
- Smooth Streaming-Erweiterung:
- Behebung eines
Bad magic number for Bundle
-Fehlers beim Abspielen von SmoothStreaming-Streams mit Untertiteln (#1779)
- Behebung eines
- RTSP-Erweiterung:
- Decodererweiterungen (z. B. FFmpeg, VP9, AV1):
- 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.
- Unterstützung für 16-KB-Seiten für Decodererweiterungen unter Android 15 hinzugefügt (#1685).
- 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 bereinigt, 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 kann dieMediaSession
mit einerRoutingSession
verknüpft werden, 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
- Demo-App
- Speicherlecks in der Demo-App für Kurzvideos beheben (#1839)
- Entfernen Sie veraltete Symbole:
- Eingestellte
Player.hasPrevious
,Player.hasPreviousWindow()
entfernt. Verwenden Sie stattdessenPlayer.hasPreviousMediaItem()
. - Entfernen Sie die eingestellte Methode
Player.previous()
. Verwenden Sie stattdessenPlayer.seekToPreviousMediaItem()
. - Die eingestellte Methode
DrmSessionEventListener.onDrmSessionAcquired
entfernen - Entfernen Sie die eingestellten
DefaultEncoderFactory
-Konstruktoren. Verwenden Sie stattdessenDefaultEncoderFactory.Builder
.
- Eingestellte
Version 1.5.0-rc02
19. November 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-rc01
13. November 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-beta01
30. Oktober 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.5.0-alpha01
10. September 2024
Verwenden Sie die stabile Version 1.5.0.
Version 1.4.0
Version 1.4.1
27. August 2024
androidx.media3:media3-*:1.4.1
wird veröffentlicht.
Version 1.4.1 enthält diese Commits.
- ExoPlayer:
- Extraktoren:
- MP3: Der
Searched too many bytes
-Fehler 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:
- Korrektur des Fehlers
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
auf Geräten mit API 31 und höher, auf denen L1 Widevine-Inhalte wiedergegeben werden. Dieser Fehler wird durch eine unvollständige Implementierung der Framework-MethodeMediaDrm.requiresSecureDecoder
verursacht (#1603).
- Korrektur des Fehlers
- Wirkung:
- Fügen Sie
GlObjectsProvider
einerelease()
-Methode hinzu.
- Fügen Sie
- Sitzung:
- Ein Doppeltippen auf
KEYCODE_HEADSETHOOK
in eine Aktion zum „Nächste Titelschleife abspielen“ umwandeln, wie dokumentiert (#1493). - Bei der Entscheidung, ob
KEYCODE_HEADSETHOOK
inMediaButtonReceiver
ignoriert werden soll, um eineForegroundServiceDidNotStartInTimeException
zu vermeiden, wirdKEYCODE_HEADSETHOOK
als „Wiedergabe“-Befehl behandelt (#1581).
- 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
wird 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 von der App bereitgestellte benutzerdefinierte Informationen zuFormat
-Instanzen zu speichern.
- Vorgebliche No-Op-Suchanrufe an die geschützten Methoden
- ExoPlayer:
- Fügen Sie
BasePreloadManager
hinzu, das das Vorladen für mehrere Quellen basierend auf den Prioritäten koordiniert, die durch ihrerankingData
definiert sind. 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
die OptionPlayerId
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 Preload-Managers beizubehalten. - Fügen Sie
ExoPlayer.setPriority()
(undBuilder.setPriority()
) hinzu, um den Prioritätswert zu definieren, der inPriorityTaskManager
und für die Wichtigkeit von MediaCodec ab API 35 verwendet wird. - 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. - Es wurde ein Fehler behoben, durch den das Überspringen von Stille am Ende von Elementen eine Wiedergabeausnahme auslösen konnte.
- Fügen Sie
clear
zuPreloadMediaSource
hinzu, um den Zeitraum für das Vorabladen zu verwerfen. - 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. AdsMediaSource
darf Pre-Roll-Anzeigen laden, bevor die anfängliche Medienvorbereitung für den Inhalt 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 bei der Einrichtung 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
, wenn diese Callbacks empfangen werden. WennExoPlayer
mitexperimentalSetDynamicSchedulingEnabled()
festgelegt ist, plantExoPlayer
seinen Arbeits-Loop, da die Renderer Fortschritte machen können. - Verwenden Sie für
LoadControl
-Methoden eine Datenklasse anstelle einzelner Parameter. - Fügen Sie
ExoPlayer.isReleased()
hinzu, um zu prüfen, obExoplayer.release()
aufgerufen wurde. - Fügen Sie
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
hinzu, um die maximale Position zu konfigurieren, bis zu derseekToPrevious()
zum vorherigen Element springt (#1425). - Einige Inkonsistenzen beim Audiofokus wurden behoben, z.B. dass der vollständige oder vorübergehende Verlust des Fokus nicht gemeldet wurde, während der Player pausiert war (#1436).
- Behebung eines potenziellen
IndexOutOfBoundsException
, der durch Extractors verursacht wurde, die nach dem ersten Vorbereitungsschritt zusätzliche Titel 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üge
audioConversionProcess
undvideoConversionProcess
zuExportResult
hinzu, um anzugeben, wie der jeweilige Titel in der Ausgabedatei erstellt wurde. - Die Überprüfungen auf H.264-Ebene für die Trimm-Optimierung wurden gelockert.
- Unterstützung für den Wechsel zwischen SDR- und HDR-Eingabemedien in einer Sequenz hinzugefügt.
- 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
. - Behebung von Problemen beim Laden von HEIC-Bildern über Content-URI-Schemas (#1373).
- Passen Sie die Dauer des Audiotracks unter
AudioGraphInput
an, um die Synchronisierung von Audio und Video 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üge
- 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). - Fehler bei der Extraktion von PCM-Audioformaten in AVI-Containern behoben.
- Audio:
- Korrektur der DTS:X-Profil 2-Codierungsattribute für die Passthrough-Wiedergabe (#1299)
- Bei der ausgelagerten Wiedergabe musst du das Tracking-Feld für den Streamabschluss in
DefaultAudioSink
zurücksetzen, bevor duAudioTrack.stop()
aufrufst, damitAudioTrack.StreamEventCallback#onPresentationEnded
richtig erkennt, wann 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 ExoPlayer seinen Haupt-Arbeits-Loop dynamisch so plant, dass der MediaCodecAudioRenderer Fortschritte erzielen kann.
- Video:
- Das Problem wurde behoben, dass
Listener.onRenderedFirstFrame()
zu früh angezeigt wurde, wenn während der Wiedergabe die Oberfläche gewechselt wurde. - Die Fallback-Logik für den Decoder für Dolby Vision wurde korrigiert, damit bei Bedarf ein kompatibler AV1-Decoder verwendet wird (#1389).
- Behebung eines Codec-Ausnahmefehlers, der durch die Aktivierung eines Video-Renderers während der Wiedergabe auftreten kann
- Das Problem wurde behoben, dass
- 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: Korrektur der Laufzeitdekodierung, damit
0
als Farbindex und nicht als Literalfarbwert aufgelöst wird (#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). - Behebung eines Problems beim Lesen von MP4- (/iTunes-)Zahlen-Tags
gnre
(Genre) undtmpo
(Tempo), wenn der Wert mehr als ein Byte lang ist. - ID3-
TCON
-Frame anMediaMetadata.genre
weitergeben (#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 unbedingt, oburl
nicht null ist. Dieser Parameter wurde bereits als „nicht null“ gekennzeichnet. 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, kehren Sie die X- und Y-Werte um, 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- Entferne 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:
- Die API, die für Apps zum Abspielen von DAI-Anzeigenstreams erforderlich ist, wird als stabil eingestuft.
- Fügen Sie
replaceAdTagParameters(Map <String, String>)
zuImaServerSideAdInsertionMediaSource.AdLoader
hinzu, damit Anzeigen-Tag-Parameter während der Laufzeit ersetzt werden können. - Fehler behoben, durch den
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 auf „False“ 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 aktiv ist, oder der Dienst andernfalls angehalten wird. - Die Sprungleiste in der Medienbenachrichtigung für Livestreams wird ausgeblendet, wenn die Dauer nicht in den Metadaten der Plattformsitzung festgelegt wird (#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 zu und von ihr 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. - Die Sitzungsaktivität kann pro Controller festgelegt werden, 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. Nach der Verbindung kann die Sitzungsaktivität mitMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
aktualisiert werden. - Fehlerreplikation von Aufrufen an
MediaLibrarySession.Callback
wurde verbessert. Die Fehlerreplikation kann jetzt mitMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
konfiguriert werden, um den Fehlertyp auszuwählen oder die standardmäßig aktivierte Fehlerreplikation zu deaktivieren.
- Ä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). - Behebung eines Plattformfehlers, der zu einem gedehnten/zugeschnittenen Video führte, wenn
SurfaceView
in einem ComposeAndroidView
in API 34 verwendet wurde (#1237).
- Unterstützung für die Bildanzeige auf
- Downloads:
- Achten Sie darauf, dass
DownloadHelper
keine noch nicht veröffentlichtenRenderer
-Instanzen preisgibt, da dies zu einem Absturz der App mitIllegalStateException: Too many receivers, total of 1000, registered for pid
führen kann (#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 die Anfrage abläuft (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. - Fehler behoben, durch den nicht primäre Wiedergabeplaylists während der Livestreamwiedergabe nicht aktualisiert wurden (#1240).
- Fehler behoben, durch den beim Aktivieren von CMCD für HLS-Livestreams
ArrayIndexOutOfBoundsException
ausgegeben wurde (#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:
- Verwenden Sie
DefaultPreloadManager
in der Demo-App für Kurzformulare. - 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.
- Verwenden Sie
- Entfernen Sie veraltete Symbole:
- Entfernen Sie
CronetDataSourceFactory
. 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
. - Entfernen Sie
PlayerMessage.setHandler(Handler)
. Verwenden Sie stattdessensetLooper(Looper)
. - Entfernen Sie das Feld
Timeline.Window.isLive
. Verwenden Sie stattdessen die MethodeisLive()
. - Entfernen Sie
DefaultHttpDataSource
-Konstruktoren. Verwenden Sie stattdessenDefaultHttpDataSource.Factory
. - Entfernen Sie
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. Verwenden Sie stattdessenDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
. - Entfernen Sie
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. Verwenden Sie stattdessenMediaCodecInfo.canReuseCodec(Format, Format)
. - Entfernen Sie die Methode
DrmSessionManager.DUMMY
undgetDummyDrmSessionManager()
. Verwenden Sie stattdessenDrmSessionManager.DRM_UNSUPPORTED
. - 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
). - Entfernen Sie die
Bundleable
-Benutzeroberfläche. 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.
- Entfernen Sie
Version 1.4.0-rc01
10. Juli 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-beta01
26. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha02
7. Juni 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.4.0-alpha01
17. April 2024
Verwenden Sie die stabile Version 1.4.0.
Version 1.3.0
Version 1.3.1
11. April 2024
androidx.media3:media3-*:1.3.1
wird veröffentlicht.
Version 1.3.1 enthält diese Commits.
- Gemeinsame 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).
- Proguard-
-keepclasseswithmembers
-Regel fürDefaultVideoFrameProcessor.Factory.Builder.build()
einen fehlenden Rückgabetyp hinzufügen (#1187).
- Das Problem, dass
- Transformator:
- Problemumgehung für eine Ausnahme hinzugefügt, die auftritt, weil
MediaMuxer
vor API 30 keine negativen Zeitstempel für die Präsentation unterstützte.
- Problemumgehung für eine Ausnahme hinzugefügt, die auftritt, weil
- Titelauswahl:
DefaultTrackSelector
: Videotracks mit einer angemessenen Framerate (≥ 10 fps) sollten bevorzugt verwendet werden. 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:
- Behebung eines Problems, bei dem das Padding beim Lesen von Elementen mit ungerader Größe aus WAV-Dateien nicht übersprungen wurde (#1117).
- MP3:
Format.averageBitrate
wird aus Metadaten-Frames wieXING
undVBRI
ausgefüllt. - MPEG-TS: Eine Änderung rückgängig gemacht, mit der sichergestellt werden sollte, dass der letzte Frame gerendert wird, indem die letzte Zugriffseinheit eines Streams an die Sample-Warteschlange übergeben wird (#7909). Das liegt daran, dass die Änderung neue Probleme mit HLS-Streams mit nur I-Frames (#1150) und H.262-HLS-Streams (#1126) verursacht.
- 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: Verhindern, dass durch direkt aufeinanderfolgende Cues
CuesWithTiming
-Instanzen ausWebvttParser.parse
erstellt werden (#1177).
- WebVTT: Verhindern, dass durch direkt aufeinanderfolgende Cues
- Digitale Rechteverwaltung:
- Umgehung einer
NoSuchMethodError
, die auf einigen Android 14-Geräten vomMediaDrm
-Framework anstelle vonResourceBusyException
oderNotProvisionedException
geworfen werden kann (#1145).
- Umgehung einer
- Wirkung:
- Verbesserte Tonmapping-Funktion von PQ nach SDR durch Konvertierung von Farbräumen.
- Sitzung:
- UI:
- Wenn
Locale
keinen Anzeigenamen ermitteln kann, wird der Name der Sprache des Audiotracks verwendet (#988).
- Wenn
- DASH-Erweiterung:
- Fülle alle
Label
-Elemente aus dem Manifest inFormat.labels
ein (#1054).
- Fülle 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 aufgrund 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:
- Implementiere die Unterstützung für
android.resource://package/[type/]name
-URIs für Rohressourcen, bei denen sichpackage
vom Paket der aktuellen Anwendung unterscheidet. Diese Funktion sollte zwar immer funktionieren, wurde aber bisher nicht richtig implementiert. - MIME-Typen, die durch App-Code festgelegt oder aus Medien gelesen werden, werden normalisiert und in Kleinbuchstaben geschrieben.
- Definieren Sie Anzeigen in
AdPlaybackState
mit einem vollständigenMediaItem
anstelle eines einzelnenUri
. - 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).
- Implementiere die Unterstützung für
- ExoPlayer:
- Fügen Sie
PreloadMediaSource
undPreloadMediaPeriod
hinzu, damit Apps eine Inhaltsmedienquelle vor der Wiedergabe an einer bestimmten Startposition vorab laden können.PreloadMediaSource
bereitet die Inhaltsmedienquelle 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). - Experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion hinzufügen. Sie können dies mit
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
aktivieren. - Unterstütze adaptive Medienquellen mit
PreloadMediaSource
. - Implementiere
HttpEngineDataSource
, eineHttpDataSource
, mit der HttpEngine API. - Unterklassifizierung von
CompositeSequenceableLoader
verhindern Diese Komponente wurde bereits erweiterbar gemacht, aber nie in der Bibliothek untergeordnet. Anpassungen können vorgenommen werden, indem eine Instanz mit dem Dekorator-Muster umhüllt und eine benutzerdefinierteCompositeSequenceableLoaderFactory
implementiert wird. - Problem behoben, bei dem durch das Wiederholen derselben Uhrzeit die Metadaten dieses Elements gelöscht wurden (#1007).
- Benennen Sie
experimentalSetSubtitleParserFactory
-Methoden aufBundledChunkExtractor.Factory
undDefaultHlsExtractorFactory
insetSubtitleParserFactory
um und lassen Sie keine Übergabe vonnull
zu. Mit den neuenexperimentalParseSubtitlesDuringExtraction(boolean)
-Methoden können Sie das Parsen steuern. - Unterstützung für die Anpassung des
SubtitleParser.Factory
während der Extraktion hinzugefügt. 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 kann die Ausgabe von Trimmvorgängen mit Playerimplementierungen kompatibler sein, bei denen der erste Videoframe erst nach dem Präsentationszeitstempel angezeigt wird (#829).
- Unterstützung für die Optimierung von MP4-Zuschnittsvorgängen für einzelne Assets hinzugefügt
- Unterstützung hinzugefügt, damit ein Videoframe den ersten Zeitstempel in der Ausgabedatei hat Behebung eines Problems, bei dem 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 hinzugefügt (#275).
- Audiotypen aus TS-Beschreibungen extrahieren und ihnen Rollenflaggen zuordnen, damit Nutzer fundiertere Entscheidungen bei der 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. Apps, die eine benutzerdefinierteVideoFrameProcessor.Factory
einschleusen möchten, können eineCompositingVideoSinkProvider
instanziieren, die die benutzerdefinierteVideoFrameProcessor.Factory
verwendet, und den Video-Sink-Anbieter anMediaCodecVideoRenderer
übergeben.
- Ändern Sie den Konstruktor von
- Text:
- Die Serialisierung von Bitmap-Cues wurde korrigiert, um den
Tried to marshall a Parcel that contained Binder objects
-Fehler bei Verwendung vonDefaultExtractorsFactory.setTextTrackTranscodingEnabled
zu beheben (#836). - CEA-708:
rowLock
-Wert ignorieren. 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 Bitmap-Cues wurde korrigiert, um den
- Bild:
- Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und es werden individuelle Thumbnails bereitgestellt, die
ImageOutput
ungefähr zur Präsentationszeit angezeigt werden.
- Unterstützung für DASH-Thumbnails hinzufügen Rasterbilder werden zugeschnitten und es werden individuelle Thumbnails bereitgestellt, die
- 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. Dieser Typ sollte nicht direkt von außerhalb des HLS-Pakets abhängig sein. - Resolve sucht jetzt effizienter den Anfang eines Segments (#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).
- Behoben wurde ein Problem, durch das der Stream nach dem Springen zu Beginn eines Livestreams fälschlicherweise an seiner Standardposition gestartet wurde (#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:
- Markieren Sie sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Motion-Fotos als
ROLE_FLAG_ALTERNATE
, damit sie aufgrund ihrer höheren Auflösung nicht 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).
- Markieren Sie sekundäre (nicht abspielbare) HEVC-Tracks in JPEG-Motion-Fotos als
- Audio:
- Fehler bei der Verarbeitung von EOS für
SilenceSkippingAudioProcessor
behoben, wenn die Funktion mehrmals aufgerufen wird (#712).
- Fehler bei der Verarbeitung von EOS für
- Video:
- Behelfslösung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzugefügt, durch das 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:
- Die Umgehung für eine falsche ClearKey-
https://default.url
-Lizenz-URL wurde auf API 33 und höher ausgeweitet (früher nur auf API 33) (#837). - Behebung eines Problems mit
ERROR_DRM_SESSION_NOT_OPENED
beim Wechsel von verschlüsselten zu unverschlüsselten Inhalten, wenn dem Player keine Oberfläche zugeordnet ist. Der Fehler ist auf die falsche Verwendung eines sicheren Decoders zum Abspielen der unverschlüsselten Inhalte zurückzuführen.
- Die Umgehung für eine falsche ClearKey-
- 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:
- „f800“ im DASH-Manifest als Kanalanzahl „5“ für Dolby parsen (#688).
- Decodererweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Cast-Erweiterung:
- Die Erstellung einer
Timeline
wird bereinigt, damit 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)
). - Behebung eines Kotlin-Kompatibilitätsproblems, bei dem nullable Parameter von generischen Typen und nullable Typen von Arrayelementen nicht als nullable erkannt wurden. Beispiele hierfür sind die Methodenparameter
TrackSelectorResult
undSimpleDecoder
(#6792). - Sie können die Standard-UI und das Standardverhalten von Benachrichtigungen in
Util.shouldShowPlayButton
so ändern, dass eine Wiedergabeschaltfläche angezeigt wird, wenn die Wiedergabe vorübergehend unterdrückt wird (z.B. aufgrund eines vorübergehenden Verlusts des Audiofokus). Das bisherige Verhalten kann beibehalten werden, indemPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oderMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
verwendet wird (#11213). - Führe ein Upgrade von
androidx.annotation:annotation-experimental
auf1.3.1
durch, 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 zuPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
aktualisiert, wenn die Wiedergabe versucht wird, wenn keine geeigneten Audioausgänge verfügbar sind, oder wenn alle geeigneten Ausgänge während der Wiedergabe getrennt werden. Der Grund für die Unterdrückung wird entfernt, 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
(#491) die Bittiefe für Luminanz und Chroma hinzu. - Dem CMCD-Logging (Common Media Client Data) wurden zusätzliche Felder hinzugefügt: „next object request“ (
nor
) und „next range request“ (nrr
) (#8699). - Es wurde eine Funktion hinzugefügt, mit der CMCD-Daten (Common Media Client Data) mithilfe von Abfrageparametern übertragen werden können (#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-Drehdaten für Bildeingaben analysieren
- 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
frameRate
- unddurationUs
-Parameter vonSampleConsumer.queueInputBitmap
wurden inTimestampIterator
geändert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
hinzu, um die nicht nahtlose Anpassung explizit zuzulassen oder zu deaktivieren. 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. - Fügen Sie
HeifExtractor
hinzu. 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-Audio in MP4 hinzugefügt.
- Fügen Sie
AudioSink.getFormatOffloadSupport(Format)
hinzu, mit dem die Unterstützung für die Auslagerung abgerufen wird, die der Abfluss für das Format über eineDefaultAudioOffloadSupportProvider
bereitstellen kann. Es gibt die neueAudioOffloadSupport
zurück, dieisFormatSupported
,isGaplessSupported
undisSpeedChangeSupported
enthält. - Fügen Sie
AudioSink.setOffloadMode()
hinzu, über das die Offload-Konfiguration am Audio-Sink 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 ausgelagerte Wiedergabe von Audioinhalten aktivieren
- Löschen Sie
ExoPlayer.experimentalSetOffloadSchedulingEnabled
undAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
wurde inonSleepingForOffloadChanged
undonExperimentalOffloadedPlayback
inonOffloadedPlayback
umbenannt.- Verschieben Sie die
TrackSelectionParameters
-Schnittstellen und ‑Definitionen, die sich auf den Audio-Offload-Modus beziehen, in eine innereAudioOffloadPreferences
-Klasse. - Fügen Sie
onAudioTrackInitialized
- undonAudioTrackReleased
-Callbacks zuAnalyticsListener
,AudioRendererEventListener
undAudioSink.Listener
hinzu. - Problem mit Unterlauf des DTS Express-Audiopuffers behoben (#650).
- Fehler behoben, bei dem die Funktionsprüfung für E-AC3-JOC eine
IllegalArgumentException
zurückgab (#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
. Textspuren 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-Dekodierungs-Samples“ aufgerufen, da die Implementierung ohnehin null zurückgeben muss.
- Wirkung:
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
Bitmap-Eingabe nach Zeitstempel in die Warteschlange stellen.- Ändern Sie
VideoFrameProcessor.registerInputStream()
in „Nicht blockierend“. Apps müssenVideoFrameProcessor.Listener#onInputStreamRegistered()
implementieren. - Die
frameRate
- unddurationUs
-Parameter vonVideoFrameProcessor.queueInputBitmap
wurden inTimestampIterator
geändert.
- IMA-Erweiterung:
- Es wurde ein Fehler behoben, durch den bei einem DASH-Livestream mit mehreren Zeiträumen, der nicht der erste Artikel 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()
API 31 oder höher, um Probleme mit veralteten APIs auf Samsung-Geräten zu vermeiden (#167). - Verwende den Media Notification Controller als Proxy, um verfügbare Befehle und das benutzerdefinierte Layout festzulegen, das für die Benachrichtigung und die Plattformsitzung verwendet wird.
- Konvertiere Medienschalter-Ereignisse, die von
MediaSessionService.onStartCommand()
in Media3 empfangen werden, anstatt sie an die Plattformsitzung und zurück an 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. - Fehler behoben, durch den
MediaController.getCurrentPosition()
nicht fortschreitet, wenn eine Verbindung zu einer älterenMediaSessionCompat
besteht. - Fügen Sie
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. Wenn Android Auto als Clientcontroller die Framework-Sitzung liest, wird die Schaltflächequeue
in der Benutzeroberfläche von Android Auto nicht angezeigt (#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. Die Wiedergabe wird automatisch fortgesetzt, wenn innerhalb eines konfigurierbaren Zeitlimits (Standard: 5 Minuten) ein geeignetes Gerät verbunden ist.
- Fügen Sie eine
- Downloads:
- Deklarieren Sie den Typ „Datensynchronisierung“ für Dienste im Vordergrund für
DownloadService
, 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 den Typ „Datensynchronisierung“ für Dienste im Vordergrund 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. Dadurch werden überlappende Untertitel besser unterstützt und es wird verhindert, dass beim Wechsel zwischen Untertitelsegmenten ein Flimmern auftritt. Sie können diese Funktion mit
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
aktivieren (#288).
- RTSP-Erweiterung:
- Behebung einer Race-Bedingung, die beim Rückfall auf TCP zu
IndexOutOfBoundsException
oder in einigen Fällen zu einer hängenden Wiedergabe führen konnte - Status in der RTSP-Einrichtung prüfen, wenn der Ladestatus von
RtspMediaPeriod
zurückgegeben wird (#577). - Benutzerdefinierte Rtsp-Anfragemethoden im öffentlichen Options-Antwortheader ignorieren (#613).
- Verwende den Zeitlimitwert für die RTSP-Einrichtungsantwort im Zeitintervall für das Senden von Keep-Alive-RTSP-Optionsanfragen (#662).
- Behebung einer Race-Bedingung, die beim Rückfall auf TCP zu
- Decodererweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- MIDI-Decodiermodul freigeben, das die Wiedergabe von Standard-MIDI-Dateien mit 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 wurde 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
- Test-Dienstprogramme:
- Machen Sie
TestExoPlayerBuilder
undFakeClock
mit Espresso-UI-Tests und Compose-UI-Tests kompatibel. Dadurch wird ein Fehler behoben, durch den die Wiedergabe bei Interaktionen mit der Espresso- oder Compose-Ansicht nicht deterministisch fortgesetzt wurde.
- 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üge der CMCD-Protokollierung (Common Media Client Data) zusätzliche Felder hinzu: Streamingformat (sf), Streamtyp (st), Version (v), höchste Bitrate (tb), Objektdauer (d), gemessener Durchsatz (mtp) und Objekttyp (ot) (#8699).
- Problem in
- Audio:
- Es wurde ein Fehler behoben, durch den
Player.getState()
beim Abspielen sehr kurzer Dateien nie zuSTATE_ENDED
wechselte (#538).
- Es wurde ein Fehler behoben, durch den
- 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 Kurz- und Langzeit-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 Einzüge und Tabulatorabstand berücksichtigt, wenn die Cue-Länge auf 32 Zeichen begrenzt wurde. Dies war technisch gemäß der Spezifikation korrekt (#11019).
- IMA-Erweiterung:
- Die IMA SDK-Version wurde auf 3.30.3 erhöht.
- 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 die Unterdrückung zu lange. (#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ügen Sie
FilteringMediaSource
hinzu, mit dem sich verfügbare Titeltypen aus einerMediaSource
herausfiltern lassen. - 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 wurden übernommen:
br
,bl
,cid
,rtp
undsid
(#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
- Dem Manifest der Hauptdemo wurde eine zusätzliche Aktion hinzugefügt, um das Starten der Demo-App mit einer benutzerdefinierten
*.exolist.json
-Datei zu vereinfachen (#439). - Fügen Sie
ExoPlayer.setVideoEffects()
hinzu, umEffect
während der Videowiedergabe zu verwenden. - Aktualisieren Sie
SampleQueue
, damitsourceId
alslong
und nicht alsint
gespeichert wird. 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 dem entsprechendenMediaPeriod
verknüpft werden können. - Ändern Sie die Signatur von
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
, indem Sie einen Zeitachsenparameter hinzufügen, der die Zeiträume mit den UIDs enthält, die als Schlüssel in der Karte verwendet werden. Dies ist erforderlich, um Probleme mit der 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. Hinweis: Auch bei den veralteten Varianten wird der Offset nicht mehr zustartTimeUs
undendTimeUs
derMediaLoadData
-Objekte hinzugefügt, die vom Dispatcher gesendet werden.- Benennen Sie
ExoTrackSelection.blacklist
inexcludeTrack
undisBlacklisted
inisTrackExcluded
um. - 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)
. - Entfernen Sie
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - 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
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
hinzu, das standardmäßig deaktiviert ist. Wenn diese Option aktiviert ist, wird durch dasDefaultTrackSelector
eine neue Titelauswahl ausgelöst, wenn sich die Renderer-Funktionen geändert haben.
- Fügen Sie
- 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). - Opus-Frames in Ogg-Paketen bei der direkten Wiedergabe (Offload) kapseln
- 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
Fügen Sie im Konstruktor vonDefaultAudioSink
einen erforderlichen Parametercontext
hinzu, mit dem sichDefaultAudioSink
als Listener fürAudioCapabilitiesReceiver
registriert und seineaudioCapabilities
-Property aktualisiert, wenn eine Änderung der Funktionen erkannt wird. - Änderungen an den Audiofunktionen über ein neues Ereignis
onAudioCapabilitiesChanged
in der BenutzeroberflächeAudioSink.Listener
und eine neue BenutzeroberflächeRendererCapabilities.Listener
weitergeben, dieonRendererCapabilitiesChanged
-Ereignisse auslöst - Füge
ChannelMixingAudioProcessor
hinzu, um Audiokanäle zu skalieren oder zu mischen. - Füge
DecoderDiscardReasons
den neuen GanzzahlwertDISCARD_REASON_AUDIO_BYPASS_POSSIBLE
hinzu, um den Audiodecoder zu verwerfen, wenn nach einer Änderung der Audiofunktionen der Bypass-Modus möglich ist. - Unterstützung für die direkte Wiedergabe von DTS Express und DTS:X hinzugefügt (#335).
- Fehler behoben, bei dem einige Wiedergaben fehlgeschlagen sind, wenn das Tunneling aktiviert ist und
- Video:
- Wenn der Renderer deaktiviert ist, soll
MediaCodecVideoRenderer
einenVideoSize
mit einer Breite und Höhe von 0 melden.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.
- Wenn der Renderer deaktiviert ist, soll
- Digitale Rechteverwaltung:
- Reduzieren Sie die Sichtbarkeit mehrerer rein interner Methoden in
DefaultDrmSession
, die nicht von außerhalb des DRM-Pakets aufgerufen werden sollen:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Reduzieren Sie die Sichtbarkeit mehrerer rein 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 noch nicht das Suchen in Livestreams (#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 zum Controller zu erhalten, der derzeit 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 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 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 der 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 der 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
- Test-Dienstprogramme:
- Prüfen Sie in
DataSourceContractTest
, ob das URI-Schema nicht zwischen Groß- und Kleinschreibung unterscheidet.
- Prüfen Sie in
- Entfernen Sie nicht mehr unterstützte Symbole:
- Entfernen Sie die
DefaultAudioSink
-Konstruktoren und verwenden Sie stattdessenDefaultAudioSink.Builder
. - Entfernen Sie
HlsMasterPlaylist
und verwenden Sie stattdessenHlsMultivariantPlaylist
. - Entfernen Sie
Player.stop(boolean)
. Verwenden Sie stattdessenPlayer.stop()
undPlayer.clearMediaItems()
(wennreset
=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 die
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 veralteten Methoden
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
undcopyWithVideoSize
und 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 veralteten
DownloadManager
-Konstruktor und verwenden Sie stattdessen den Konstruktor, der einExecutor
annimmt. - 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 nicht mehr unterstützte
AnalyticsListener
-Methoden wurden entfernt:onDecoderEnabled
. Verwenden Sie stattdessenonAudioEnabled
und/oderonVideoEnabled
.onDecoderInitialized
; verwenden Sie stattdessenonAudioDecoderInitialized
und/oderonVideoDecoderInitialized
.onDecoderInputFormatChanged
; verwenden Sie stattdessenonAudioInputFormatChanged
und/oderonVideoInputFormatChanged
.onDecoderDisabled
. Verwenden Sie stattdessenonAudioDisabled
und/oderonVideoDisabled
.
- Entfernen Sie die veralteten
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 nicht mehr unterstützte 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 der ExoPlayer-Version 2.18.7.
Diese Version enthält die folgenden Änderungen seit der Version 1.0.1:
- Kernbibliothek:
- Fügen Sie
Buffer.isLastSample()
hinzu, um anzugeben, obBuffer
das FlagC.BUFFER_FLAG_LAST_SAMPLE
enthält. - Behebung eines Problems, bei dem der letzte Frame möglicherweise nicht gerendert wird, wenn das letzte Sample mit Frames aus der Warteschlange entfernt wird, ohne das Sample „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:
- Problem behoben, durch das
MediaController
seine verfügbaren Befehle nicht aktualisiert, wenn eine Verbindung zu einer älterenMediaSessionCompat
besteht, die ihre 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). - Speicherleck bei
MediaSessionService
oderMediaLibraryService
behoben (#346) - Ein Fehler wurde behoben, durch den eine kombinierte
Timeline
- und Positionsaktualisierung in einerMediaSession
dazu führen konnte, dass eineMediaController
eineIllegalStateException
auslöste.
- Problem behoben, durch das
Version 1.0.1
18. April 2023
androidx.media3:media3-*:1.0.1
wird veröffentlicht.
Version 1.0.1 enthält diese Commits.
Dieser Release entspricht der ExoPlayer-Version 2.18.6.
- Kernbibliothek:
- Überschreibung des Ziel-Livestreams zurücksetzen, wenn zur Standardposition gesprungen wird (#11051).
- Fehler behoben, durch den leere Sample-Streams in den Medien die Wiedergabe blockieren konnten
- Sitzung:
- Fehler behoben, bei dem mehrere identische Warteschlangenelemente, die von einer älteren
MediaSessionCompat
veröffentlicht wurden, zu einer Ausnahme inMediaController
führten (#290). - Fehlende Weiterleitung von
MediaSession.broadcastCustomCommand
an die alteMediaControllerCompat.Callback.onSessionEvent
hinzufügen (#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).
- Fehler behoben, bei dem mehrere identische Warteschlangenelemente, die von einer älteren
- DASH:
- Fehler bei der Verarbeitung leerer Zeitachsen für Segmente behoben (#11014).
- RTSP:
- Wiederholen Sie den Vorgang mit TCP, wenn die RTSP-Einrichtung mit UDP fehlschlägt und der RTSP-Fehler 461 UnsupportedTransport (#11069) auftritt.
Version 1.0.0
22. März 2023
androidx.media3:media3-*:1.0.0
wird veröffentlicht.
Version 1.0.0 enthält diese Commits.
Dieser Release entspricht 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 Segmente, die zusammengeführt werden sollen, kann in
SegmentDownloader
und Unterklassen konfiguriert werden (#248).
- Die maximale Differenz zwischen den Startzeiten zweier Segmente, die zusammengeführt werden sollen, kann in
- Audio:
- Video:
- Weise das HEVC HDR10-Format
HEVCProfileMain10HDR10
anstelle vonHEVCProfileMain10
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.
- Weise das HEVC HDR10-Format
- Streamen:
- Behebung des vorübergehenden
STATE_IDLE
beim Wechseln zwischen Medienelementen (#245)
- Behebung des vorübergehenden
- RTSP:
- 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üge
ExoPlayer.Builder.setPlaybackLooper
hinzu, um einen vorhandenen Wiedergabe-Thread für eine neue ExoPlayer-Instanz festzulegen. - 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:
- Gib
ParserException
anstelle vonNullPointerException
aus, wenn in der Beispieltabelle (stbl) beim Parsen von trak-Atomen eine erforderliche Beispielbeschreibung (stsd) fehlt. - Samples werden jetzt richtig übersprungen, wenn in fMP4 direkt zu einem Synchronframe gesprungen wird (#10941).
- Gib
- Audio:
- Verwende die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
AudioTrack
bei der direkten Wiedergabe (Passthrough) zu berechnen.
- Verwende die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
- Text:
- Korrigieren, 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.
- Korrigieren, 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 Inhaltstyp oder den Ordnertyp anzugeben, der in den Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordnertyp wird in der nächsten Version eingestellt.
- DASH:
- Vollständiges Parsen für Bildanpassungssätze hinzufügen, einschließlich der Kachelnanzahl (#3752).
- UI:
- Beheben Sie das in
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
veraltete Problem, damit Änderungen an der Sichtbarkeit an den registrierten Listener übergeben werden (#229). - Die Anordnung der Playersteuerung in der Mitte von
PlayerView
wurde bei einem Layout mit Leserichtung von rechts nach links korrigiert (#227).
- Beheben Sie das in
- Sitzung:
- Füge eine abstrakte
SimpleBasePlayer
hinzu, um diePlayer
-Benutzeroberfläche für benutzerdefinierte Player zu implementieren. - Hilfsmethode zum Konvertieren des Plattformsitzungstokens in Media3 hinzufügen
SessionToken
(#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 eine 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 Inhaltstyp oder den Ordnertyp anzugeben, der in den Metadaten beschrieben wird. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordnertyp wird in der nächsten Version 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
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
das AttributfocusSkipButtonWhenAvailable
hinzu, um das Fokussieren der Schaltfläche „Überspringen“ auf Fernsehern anzufordern, und setze es 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 Tracks 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 Tracing-Block „doSomeWork“, wenn die Auslagerung aktiviert ist.
- Problem beim Sitzungs-Tracking bei schnellen Suchanfragen in
PlaybackStatsListener
behoben (#180). - Fehlender
onMediaItemTransition
-Callback wird gesendet, wennseekToNext
oderseekToPrevious
in einer Playlist mit nur einem 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:
- Es wird ein Mindestwert für
compileSdkVersion
erzwungen, um Kompilierungsfehler zu vermeiden (#10684). - Blockieren Sie die Veröffentlichung, wenn die Datei in einem anderen Gradle-Build enthalten ist.
- Es wird ein Mindestwert für
- Titelauswahl:
- Wähle andere Tracks anstelle von Dolby Vision aus, wenn das Display diese Technologie 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:
- Verwende
SingleThreadExecutor
, umAudioTrack
-Instanzen freizugeben, um OutOfMemory-Fehler zu vermeiden, wenn mehrere Spieler gleichzeitig freigegeben werden (#10057). - Fügen Sie
AudioOffloadListener.onExperimentalOffloadedPlayback
für den Offload-Status von AudioTracks 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).
- Verwende
- Metadaten:
MetadataRenderer
kann jetzt so konfiguriert werden, dass Metadaten sobald sie verfügbar sind gerendert werden. 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:
- Umgehen eines Fehlers in der ClearKey-Implementierung von Android 13, bei dem eine nicht leere, aber ungültige Lizenz-URL zurückgegeben wird.
- 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 Namen des Benachrichtigungskanals 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 Bitmaps ausfile://
-URIs laden (#108).- Behebung einer Behauptung, die verhindert, dass
MediaController
in einem bestimmten Zeitraum über eine Anzeige springt (#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 einer ausstehenden Intent-Anfrage zum Pausieren (#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).
- Korrekte Berechnung der Fensterdauer für Livestreams mit serverseitig eingefügten Anzeigen, z. B. IMA DAI (#10764).
- FFmpeg-Erweiterung:
- Es wurden neue Flags hinzugefügt, um FFmpeg-Bibliotheken mit NDK 23.1.7779620 und höher zu verknüpfen (#9933).
- AV1-Erweiterung:
- Die CMake-Version wurde aktualisiert, um Inkompatibilitäten mit den neuesten Android Studio-Releases zu vermeiden (#9933).
- Cast-Erweiterung:
- Implementiere
getDeviceInfo()
, umCastPlayer
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).
- Benutzerdefinierten Protokoller für die gesamte ExoPlayer-Logausgabe zulassen (#9752).
- Fehler bei der Implementierung von
setDataSourceFactory
inDefaultMediaSourceFactory
behoben, der in einigen Fällen zu Funktionsstörungen führte (#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
- Streamen:
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:
- Aktivieren Sie die Unterstützung für die Android-Plattformdiagnose über
MediaMetricsManager
. 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. MitExoPlayer.Builder.setUsePlatformDiagnostics(false)
können Entwickler festlegen, dass ihre Apps nicht zur Plattformdiagnose für ExoPlayer beitragen. - Fehler behoben, bei dem Titel bei der Verwendung von
MergingMediaSource
zu oft 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.
- Übergabe von
null
anMediaSource.Factory.setDrmSessionManagerProvider
undMediaSource.Factory.setLoadErrorHandlingPolicy
nicht zulassen Instanzen vonDefaultDrmSessionManagerProvider
undDefaultLoadErrorHandlingPolicy
können bei Bedarf explizit übergeben werden. - Füge
MediaItem.RequestMetadata
hinzu, um Metadaten anzugeben, die zum Abspielen von Medien erforderlich sind, wenn die genaueLocalConfiguration
nicht bekannt ist. Entfernen Sie auchMediaMetadata.mediaUrl
, da es jetzt inRequestMetadata
enthalten ist. - Fügen Sie
Player.Command.COMMAND_SET_MEDIA_ITEM
hinzu, damit Spieler das Festlegen eines einzelnen Elements zulassen können.
- Aktivieren Sie die Unterstützung für die Android-Plattformdiagnose über
- Titelauswahl:
- Ebenen der Klasse
TrackSelectionOverrides
inTrackSelectionParameters
zusammenführen undTrackSelectionOverride
in eine Klasse der obersten Ebene verschieben - 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
, damitDefaultTrackSelector.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 Mehrkanal-Audioformat 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 einerContext
erstellt werden.
- Ebenen der 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 bei einer API < 21 zu verhindern. - Frage die Plattform (API 29 und höher) ab oder setze die Audiocodierungskanalanzahl für die Audioweiterleitung, wenn die Audiokanalanzahl des Formats nicht festgelegt ist. Das ist bei der HLS-Chunkless-Vorbereitung der Fall (10204).
- Konfiguriere
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
anstelle vonList<Cue>
zurückgegeben wird. - SSA: Unterstützung der Stileinstellung
OutlineColour
beiBorderStyle == 3
(d.h.OutlineColour
legt den Hintergrund des Cues fest) (#8435). - CEA-708: Daten in mehrere Dienstblöcke parsen und Blöcke ignorieren, die nicht mit der aktuell ausgewählten Dienstnummer verknüpft sind.
- Entfernen von
RawCcExtractor
, das nur für ein internes Untertitelformat von Google verwendet wurde
- Ändern Sie
- Extraktoren:
- UI:
- Korrektur der Zustellung von Ereignissen an
OnClickListener
s, die aufPlayerView
festgelegt sind, wennuseController=false
(#9605). Außerdem wurde die Übermittlung von Ereignissen anOnLongClickListener
für alle Ansichtskonfigurationen korrigiert. - Behebung eines Fehlers, bei dem eine Touch-Ereignisanweisung, die die Grenzen von
PlayerView
vorACTION_UP
verlässt, fälschlicherweise als Klick behandelt wurde (#9861). - Behebung eines
PlayerView
Problems mit Bedienungshilfen, bei dem durch Tippen die Wiedergabe statt der Steuerelemente ausgeblendet wurde (#8627). - Erstellen Sie neue Versionen von
TrackSelectionView
undTrackSelectionDialogBuilder
, die mit derPlayer
-Benutzeroberfläche und nicht mitExoPlayer
funktionieren. So können die Ansichten mit anderenPlayer
-Implementierungen verwendet werden und die Abhängigkeit des UI-Moduls vom ExoPlayer-Modul wird aufgehoben. Dies ist eine funktionsgefährdende Änderung. - Erzwungene Untertiteltracks werden nicht in der
PlayerView
-Titelauswahl angezeigt. Wenn „Kein“ ausgewählt ist, sollte ein geeigneter erzwungener Untertiteltrack ausgewählt bleiben (#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-Leser 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)
- RTP-Leser für WAV hinzufügen (#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).
- Geprüfte Ausnahme beim Parsen von RTSP-Timings auslösen (#10165).
- RTP-Leser für VP9 hinzugefügt (#47).
- RTP-Leser für OPUS hinzufügen (#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ützung von
setMediaItems(s)
-Methoden, wennMediaController
eine Verbindung zu einer älteren Mediensitzung herstellt. - Entfernen Sie
MediaController.setMediaUri
undMediaSession.Callback.onSetMediaUri
. Die gleiche Funktionalität kann auch mitMediaController.setMediaItem
undMediaSession.Callback.onAddMediaItems
erreicht werden. - Leiten Sie alte
MediaController
-Anrufe zum Abspielen von Medien anMediaSession.Callback.onAddMediaItems
statt anonSetMediaUri
weiter. - Fügen Sie
MediaNotification.Provider
undDefaultMediaNotificationProvider
hinzu, um die Benachrichtigung anzupassen. - Fügen Sie
BitmapLoader
undSimpleBitmapLoader
hinzu, um Artwork-Bilder herunterzuladen. - 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. - NPE in
MediaControllerImplLegacy
behoben (#59). - Informationen zur Sitzungsposition bei Zeitachsenänderungen aktualisieren(#51).
- Behebung des NPE in
MediaControllerImplBase
nach dem Freigeben des Controllers (#74).
- Ersetzen Sie
- Anzeigenwiedergabe / IMA:
- Reduzieren Sie die Abfragerate für Anzeigen von 100 ms auf 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, diese Methoden werden jedoch nicht mehr empfohlen. - Entfernen Sie die Konstanten
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
undDEFAULT_TRACK_SELECTOR_PARAMETERS
. Verwenden Sie nach MöglichkeitgetDefaultTrackSelectorParameters(Context)
und andernfallsDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Entfernen Sie den Konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Verwenden Sie stattdessenDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Entfernen Sie
Transformer.Builder.setContext
. DieContext
sollte stattdessen an 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 v0- als auch v1-EMSG-Atome 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
wird veröffentlicht.
Version 1.0.0-alpha02 enthält diese Commits.
Dies entspricht der ExoPlayer-Version 2.17.0.
- Core Library:
- 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. - Übermittle die ICY-Headerfelder
name
undgenre
anMediaMetadata.station
undMediaMetadata.genre
, damit sie die App überPlayer.Listener.onMediaMetadataChanged()
erreichen (#9677). - Entfernen Sie Nullschlüssel aus
DefaultHttpDataSource#getResponseHeaders
. - Warten Sie und versuchen Sie es noch einmal, wenn beim Erstellen einer
MediaCodec
-Instanz ein Fehler auftritt. 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. - Machen Sie
SimpleExoPlayer.renderers
zu einem privaten Konto. 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).
- Die Logik für die Auswahl von Video- und Audiotracks wurde aktualisiert, sodass für adaptive Auswahlen nur Formate ausgewählt werden, die dieselbe Dekoder- 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).
- Bevorzuge Einstellungen für Audioinhalte (z. B. den „Standard“-Audiotrack oder einen Track, der der Systemsprache entspricht) gegenüber technischen Einschränkungen bei der Trackauswahl (z. B. bevorzugter MIME-Typ oder maximale Kanalanzahl).
- Problem mit der Titelauswahl behoben, bei dem durch das Überschreiben einer Titelgruppe andere Titelgruppen desselben Typs 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
s können immer unterschieden werden, indem imTrackGroup
-Konstruktor einid
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). - Die Logik in
AdaptiveTrackSelection
wurde geändert, um bei ausreichender Netzwerkbandbreite eine Qualitätssteigerung zu ermöglichen, auch wenn die Wiedergabe sehr nah am Live-Edge liegt (#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. - Die Berechnung der
AudioTrack
-Puffergröße kann angepasst werden, indem eineAudioTrackBufferSizeProvider
inDefaultAudioSink
eingefügt wird. (#8891). - Wiederholen Sie die Erstellung von
AudioTrack
, 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 hinzufügen (#9886)
- Verhindern, dass
Cea708Decoder
mehr als die angegebene Größe eines Dienstblocks liest
- Füge ein
- Digitale Rechteverwaltung:
- Entfernen Sie
playbackLooper
ausDrmSessionManager.(pre)acquireSession
. Wenn eineDrmSessionManager
von einer App in einem benutzerdefiniertenMediaSource
verwendet wird, muss dieplaybackLooper
stattdessen 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 bei der Wiedergabe von Anzeigen 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 der
Representation
geparste wichtige und ergänzende Properties hinzu (#9579). - Unterstützung der Rolle „
forced-subtitle
“ für den Titel (#9727) - Die Trackrolle
main
wird nicht mehr alsC.SELECTION_FLAG_DEFAULT
interpretiert. - Logik für den Ausschluss von Basis-URLs für Manifeste korrigiert, in denen der DVB-Namespace nicht deklariert ist (#9856).
- Unterstützung relativer
MPD.Location
-URLs (#9939)
- Fügen Sie der
- 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:
- Biete eine Client-API an, um die
SocketFactory
zu überschreiben, die für jede Serververbindung verwendet wird (#9606). - Wenn beide vorhanden sind, bevorzuge die DIGEST-Authentifizierungsmethode gegenüber der BASIC-Authentifizierungsmethode (#9800).
- Umgang mit dem Fall, dass das RTSP-Track-Timing nicht verfügbar ist (#9775)
- Ungültige RTP-Info-Headerwerte ignorieren (#9619).
- Biete eine Client-API an, um die
- Transformator:
- Erforderliche Mindest-API-Version auf 21 erhöhen
TransformationException
wird jetzt verwendet, um Fehler zu beschreiben, die während einer Transformation auftreten.- Fügen Sie
TransformationRequest
hinzu, um die Transformationsoptionen anzugeben. - Es können mehrere Zuhörer registriert werden.
- Behebung eines Problems, bei dem der Transformer hängen blieb, wenn die Codec-Ausgabe nur teilweise gelesen wurde.
- Potenzieller NPE in
Transformer.getProgress
beim Freigeben des Muxers behoben - Fügen Sie eine Demo-App zum Anwenden von Transformationen hinzu.
- MediaSession-Erweiterung:
- Wenn du
MediaSessionConnector
drückst, wird die Playlist jetzt standardmäßig gelöscht. Apps, die die Playlist beibehalten möchten, könnensetClearMediaItemsOnStop(false)
über den Connector aufrufen.
- Wenn du
- Cast-Erweiterung:
- FFmpeg-Erweiterung:
build_ffmpeg.sh
ist jetzt von den Bin-Utils von LLVM statt von denen von GNU abhängig (#9933).
- Kompatibilität mit Android 12:
- Aktualisieren Sie die Cast-Erweiterung, sodass sie von
com.google.android.gms:play-services-cast-framework:20.1.0
abhängt. 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).
- Aktualisieren Sie die Cast-Erweiterung, sodass sie von
- Entfernen Sie veraltete Symbole:
- Entfernen Sie
Player.EventListener
. Verwenden Sie stattdessenPlayer.Listener
. - Entfernen Sie
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
undMediaSourceFactory#setDrmUserAgent
. Verwenden Sie stattdessenMediaSourceFactory#setDrmSessionManagerProvider
. - Entfernen Sie
MediaSourceFactory#setStreamKeys
. Verwenden Sie stattdessenMediaItem.Builder#setStreamKeys
. - Entfernen Sie
MediaSourceFactory#createMediaSource(Uri)
. Verwenden Sie stattdessenMediaSourceFactory#createMediaSource(MediaItem)
. - Entfernen Sie
setTag
ausDashMediaSource
,HlsMediaSource
undSsMediaSource
. Verwenden Sie stattdessenMediaItem.Builder#setTag
. - Entfernen Sie
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. Verwenden SieMediaItem.Builder#setLiveConfiguration
undMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
, um das Manifest zu überschreiben, oderDashMediaSource#setFallbackTargetLiveOffsetMs
, um einen 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 Heimat für Media-Support-Bibliotheken, einschließlich ExoPlayer. Die erste Alphaversion enthält frühe, funktionale Implementierungen von Bibliotheken für die Implementierung von Medienanwendungsfällen, darunter:
- ExoPlayer, ein Mediaplayer auf Anwendungsebene für Android, der sich einfach anpassen und erweitern lässt.
- Mediensitzungsfunktionen zum Bereitstellen und Steuern von Wiedergaben. Dieses neue Sitzungsmodul verwendet dieselbe
Player
-Schnittstelle wie ExoPlayer. - UI-Komponenten zum Erstellen von Benutzeroberflächen für die Medienwiedergabe.
- Module, die Funktionen in anderen Bibliotheken für die Verwendung mit ExoPlayer einschließen, z. B. Anzeigenbereitstellung über das IMA SDK.
Weitere Informationen finden Sie im GitHub-Projekt 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 alten 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.