Medien 3
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpha-Release |
---|---|---|---|---|
10. Juli 2024 | 1.3.1 | 1.4.0–rc01 | 1.4.0-beta01 | 1.4.0-alpha02 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Media3 hinzufügen möchten, müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre Anwendung oder Ihr Modul die Abhängigkeiten für die Artefakte hinzu, die Sie benötigen:
Cool
dependencies { def media3_version = "1.4.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Dein Feedback hilft uns, Jetpack zu verbessern. In der Media3-Problemverfolgung finden Sie Antworten auf Fragen, bekannte Probleme und Funktionsanfragen und können neue Probleme melden.
Version 1.4.0
Version 1.4.0-rc01
10. Juli 2024
androidx.media3:media3-*:1.4.0-rc01
wurde veröffentlicht.
Version 1.4.0-rc01 enthält diese Commits.
- Allgemeine Bibliothek:
- Fügen Sie
Format.customData
hinzu, um von der App bereitgestellte benutzerdefinierte Informationen zuFormat
-Instanzen zu speichern.
- Fügen Sie
- ExoPlayer:
- Beheben Sie einige Audiofokus-Inkonsistenzen, z.B. wenn kein vollständiger oder vorübergehender Fokusverlust gemeldet wurde, während der Player pausiert ist (#1436).
- Beheben Sie potenzielle
IndexOutOfBoundsException
, die dadurch verursacht werden, dass Extraktoren nach dem ersten Vorbereitungsschritt zusätzliche Tracks melden (#1476). Effects
inExoPlayer.setVideoEffect()
erhält die Zeitstempel ohne Renderer-Offset (#1098).- Beheben Sie den möglichen
IllegalArgumentException
-Fehler bei der Verarbeitung von Player-Fehlern, die beim Weiterlesen in ein anderes Playlist-Element aufgetreten sind (#1483).
- Text:
- Korrigieren Sie ein
IllegalArgumentException
ausLegacySubtitleUtil
, wenn ein WebVTT-Untertitelbeispiel keine Hinweise enthält, z.B. als Teil eines DASH-Streams (#1516).
- Korrigieren Sie ein
- Sitzung:
- Sie können zulassen, dass die Sitzungsaktivität pro Controller festgelegt wird, um die globale Sitzungsaktivität zu überschreiben. Die Sitzungsaktivität kann zum Zeitpunkt der Verbindung für einen Controller definiert werden. Dazu erstellen Sie eine
ConnectionResult
mitAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Sobald die Verbindung hergestellt ist, kann die Sitzungsaktivität mitMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
aktualisiert werden. - Fehlerreplikation von Aufrufen an
MediaLibrarySession.Callback
verbessern. Die Fehlerreplikation kann jetzt konfiguriert werden, indem Sie mitMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
den Fehlertyp auswählen oder die standardmäßig aktivierte Fehlerreplikation deaktivieren.
- Sie können zulassen, dass die Sitzungsaktivität pro Controller festgelegt wird, um die globale Sitzungsaktivität zu überschreiben. Die Sitzungsaktivität kann zum Zeitpunkt der Verbindung für einen Controller definiert werden. Dazu erstellen Sie eine
- UI:
- Sie können einen Plattformfehler umgehen, der zu einem verzerrten/beschnittenen Video führt, wenn
SurfaceView
innerhalb einer Compose-AndroidView
in API 34 verwendet wird (#1237).
- Sie können einen Plattformfehler umgehen, der zu einem verzerrten/beschnittenen Video führt, wenn
- Demo-App:
- Verwende
HttpEngineDataSource
alsHttpDataSource
, wenn dies vom Gerät unterstützt wird.
- Verwende
Version 1.4.0-beta01
26. Juni 2024
androidx.media3:media3-*:1.4.0-beta01
wurde veröffentlicht.
Version 1.4.0-beta01 enthält diese Commits.
- ExoPlayer:
- 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, für dieseekToPrevious()
zum vorherigen Element sucht (#1425).
- Fügen Sie
- Transformator:
- Feld „
ExportResult.processedInputs
“ entfernen. Wenn Sie dieses Feld für Codec-Details verwenden, verwenden Sie stattdessenDefaultDecoderFactory.listener
. Im Falle einer Codec-Ausnahme finden Sie Codec-Details inExportException.codecInfo
.
- Feld „
- Extraktoren:
- Probleme mit der Extraktion des PCM-Audioformats in AVI-Containern wurden behoben.
- Bild:
- Erlauben Sie
null
als Parameter fürExoPlayer.setImageOutput
, eine zuvor festgelegteImageOutput
zu löschen.
- Erlauben Sie
- Auswirkung:
- Entfernen Sie nicht verwendete
OverlaySettings.useHdr
, da der dynamische Bereich von Overlay und Frame übereinstimmen muss. - HDR-Unterstützung für
TextOverlay
hinzufügen. Die Helligkeit des Text-Overlays kann mitOverlaySettings.setHdrLuminanceMultiplier
angepasst werden.
- Entfernen Sie nicht verwendete
- Sitzung:
- Füge
MediaSession.Callback.onPlayerInteractionFinished
hinzu, um Sitzungen zu informieren, wenn eine Reihe von Spielerinteraktionen von einem bestimmten Controller abgeschlossen wurde. - Fügen Sie
SessionError
hinzu und verwenden Sie es inSessionResult
undLibraryResult
anstelle des Fehlercodes, um weitere Informationen zum Fehler und eine Anleitung zum Beheben des Fehlers anzugeben. - Veröffentlichen Sie den Code für die Media3-Controller-Test-App, mit der Interaktionen mit Apps getestet werden können, die eine Mediensitzung veröffentlichen.
- Geben Sie die an die
MediaSession[Builder].setSessionExtras()
von media3 übergebenen Extras an dasPlaybackStateCompat.getExtras()
eines Media1-Controllers weiter. - Ordnen Sie schwerwiegende und nicht schwerwiegende Fehler der Plattformsitzung und zurück zu. Ein
PlaybackException
wird einem schwerwiegenden Fehlerstatus desPlaybackStateCompat
zugeordnet. EinSessionError
, der mitMediaSession.sendError(ControllerInfo, SessionError)
an den Media Notification-Controller gesendet wird, ist einem nicht schwerwiegenden Fehler inPlaybackStateCompat
zugeordnet. Das bedeutet, dass Fehlercode und Nachricht festgelegt sind, der Status der Plattformsitzung jedoch vonSTATE_ERROR
abweicht.
- Füge
- UI:
- Unterstützung für die Bildanzeige zu
PlayerView
hinzufügen, wenn eine Verbindung mit einemExoPlayer
besteht (#1144). - Passen Sie verschiedene Symbole in
PlayerControlView
über XML-Attribute an, um unterschiedliche Drawables proPlayerView
-Instanz zuzulassen, anstatt globale Überschreibungen zu verwenden (#1200).
- Unterstützung für die Bildanzeige zu
- HLS-Erweiterung:
- Es wurde ein Fehler behoben, bei dem nicht primäre Playlists während der Live-Wiedergabe nicht aktualisiert werden (#1240).
- Entfernen Sie verworfene Symbole:
Bundleable
-Schnittstelle entfernen. Dazu gehört auch das Entfernen aller konstantenBundleable.Creator<Foo> CREATOR
-Felder. Aufrufer sollten stattdessen für jeden Typ die MethodenBundle toBundle()
undstatic Foo fromBundle(Bundle)
verwenden.
Version 1.4.0-alpha02
7. Juni 2024
androidx.media3:media3-*:1.4.0-alpha02
wurde veröffentlicht.
Version 1.4.0-alpha02 enthält diese Commits.
- Allgemeine Bibliothek:
- Weiterleitung von angenommenen No-Op-Suchaufrufen an die geschützten Methoden
BasePlayer.seekTo
undSimpleBasePlayer.handleSeek
, anstatt sie zu ignorieren. Wenn Sie diese Methoden in einem benutzerdefinierten Player implementieren, müssen Sie diese zusätzlichen Aufrufe möglicherweise mitmediaItemIndex == C.INDEX_UNSET
verarbeiten. - Entfernen Sie die Kompilierungsabhängigkeit von der optimierten Java 8-Entzuckerung (#1312).
- Achten Sie darauf, dass die an
MediaItem.Builder.setImageDurationMs
übergebene Dauer fürMediaItem
-Assets, die kein Bild sind, ignoriert wird (wie dokumentiert).
- Weiterleitung von angenommenen No-Op-Suchaufrufen an die geschützten Methoden
- ExoPlayer:
- Fügen Sie
reset
zuBasePreloadManager
hinzu, um alle Holds freizugeben, während die Preload-Manager-Instanz beibehalten wird. - Fügen Sie
ExoPlayer.setPriority
(undBuilder.setPriority
) hinzu, um den inPriorityTaskManager
verwendeten Prioritätswert und für die Bedeutung von MediaCodec von API 35 zu definieren. - Ein Problem beim Aktualisieren der letzten Pufferzeit wurde behoben, das zu einem falschen
bs
-Schlüssel (Puffermangel) in CMCD geführt hat (#1124). - Fügen Sie
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
hinzu, um anzugeben, dass die Quelle bis zum Ende geladen wurde. Dadurch kann dieDefaultPreloadManager
- und die benutzerdefiniertePreloadMediaSource.PreloadControl
-Implementierung die nächste Quelle vorab laden oder andere Aktionen ausführen. - Es wurde ein Fehler behoben, bei dem das Überspringen von Stummschaltungen am Ende von Elementen eine Wiedergabeausnahme auslösen konnte.
- Fügen Sie
clear
zuPreloadMediaSource
hinzu, um den Vorladezeitraum zu verwerfen. - Fügen Sie den neuen Fehlercode
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
hinzu, der verwendet wird, wenn Codec-Ressourcen für Aufgaben mit höherer Priorität zurückgefordert werden. - Lassen Sie
AdsMediaSource
Pre-Roll-Anzeigen laden, bevor die erste Vorbereitung der Inhaltsmedien abgeschlossen ist (#1358). - Es wurde ein Fehler behoben, durch den die Wiedergabe zu
STATE_ENDED
verschoben wurde, wenn ein mehrstufiger DASH-Livestream neu vorbereitet wurde, nachdem der ursprüngliche Zeitraum bereits aus dem Manifest entfernt wurde. - Benennen Sie
onTimelineRefreshed
inonSourcePrepared
undonPrepared
inonTracksSelected
inPreloadMediaSource.PreloadControl
um. Benennen Sie außerdem die IntDefs inDefaultPreloadManager.Stage
entsprechend um. - Fügen Sie experimentelle Unterstützung für die dynamische Planung hinzu, um die Arbeit besser auf CPU-Wakezyklen abzustimmen und das Ruhemodus bis zu dem Zeitpunkt zu verzögern, an dem Renderer vorankommen.
Sie können diese Funktion beim Einrichten Ihrer ExoPlayer-Instanz mit
experimentalSetDynamicSchedulingEnabled
aktivieren. Renderer.getDurationToProgressMs
hinzufügen. EinRenderer
kann diese Methode implementieren, um an ExoPlayer die Dauer zurückzugeben, die die Wiedergabe dauern muss, damit der Renderer vorankommen kann. WennExoPlayer
mitexperimentalSetDynamicSchedulingEnabled
festgelegt ist, ruftExoPlayer
diese Methode auf, wenn die Zeit für die Planung der Arbeitsaufgabe berechnet wird.- Fügen Sie
MediaCodecAdapter#OnBufferAvailableListener
hinzu, damit eine Benachrichtigung ausgegeben wird, wenn Eingabe- und Ausgabepuffer zur Verwendung durchMediaCodecRenderer
verfügbar sind.MediaCodecRenderer
signalisiertExoPlayer
beim Empfang dieser Callbacks. WennExoPlayer
aufexperimentalSetDynamicSchedulingEnabled
gesetzt ist, plantExoPlayer
die Work Loop, während Renderer vorankommen können. - Verwenden Sie die Datenklasse für
LoadControl
-Methoden anstelle einzelner Parameter.
- Fügen Sie
- Transformator:
- Es besteht eine Umgehung eines Decoderfehlers, bei dem die Anzahl der Audiokanäle bei der PCM-Eingabe auf Stereo begrenzt wurde.
- Ignorieren Sie bei der Auswahl von Tracks in
ExoPlayerAssetLoader
die Beschränkungen für die Anzahl der Audiokanäle, da sie nur für die Wiedergabe gelten. - Ersetzen Sie die Schnittstelle
androidx.media3.transformer.Muxer
durchandroidx.media3.muxer.Muxer
und entfernen Sieandroidx.media3.transformer.Muxer
. - Fehler beim Laden von HEIC-Bildern aus Inhalts-URI-Schemas behoben (#1373)
- Passe die Dauer des Audiotracks in
AudioGraphInput
an, um die AV-Synchronisierung zu verbessern.
- Extraktoren:
- MPEG-TS: Führen Sie ein Roll-Forward der Änderung durch und stellen Sie dabei sicher, dass der letzte Frame gerendert wird. Dazu wird die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange übergeben (#7909). Fehlerkorrekturen zur Behebung der Probleme, die in HLS-Streams nur über iFrames(#1150) und H.262-HLS-Streams (#1126) aufgetreten sind.
- MP3: Bevorzugen Sie die Datengröße eines
Info
-Frames gegenüber der vom zugrunde liegenden Stream gemeldeten Größe (z.B. Dateigröße oder HTTP-Content-Length
-Header). So lassen sich nicht spielbare Trailerdaten (z.B. Album-Artwork) bei der Berechnung der Suche mit konstanter Bitrate ausschließen und die Suche wird so genauer (#1376). - MP3: Verwenden Sie die Frame-Anzahl und andere Daten in einem
Info
-Frame (falls vorhanden), um eine durchschnittliche Bitrate für eine konstante Bitratesuche zu berechnen, anstatt von der Bitrate des Frames nach dem FrameInfo
zu extrahieren, der möglicherweise künstlich klein sein kann, z.B.PCUT
-Frame (#1376).
- Audio:
- Korrigieren Sie die Codierungsattribute des DTS:X-Profils 2 für die Passthrough-Wiedergabe (#1299).
- Setzen Sie für eine ausgelagerte Wiedergabe das Tracking-Feld für den Abschluss des Streams in
DefaultAudioSink
zurück, bevor SieAudioTrack.stop()
aufrufen, damitAudioTrack.StreamEventCallback#onPresentationEnded
korrekt erkennt, wenn alle ausstehenden Daten wiedergegeben wurden. - Es wurde ein 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). - Implementieren Sie
MediaCodecAudioRenderer.getDurationToProgressUs
, damit ExoPlayer seine Hauptarbeitsschleife dynamisch so plant, dass der MediaCodecAudioRenderer den Fortschritt fortsetzen kann.
- Video:
- Korrigieren Sie die Decoder-Fallback-Logik für Dolby Vision, damit bei Bedarf ein kompatibler AV1-Decoder verwendet wird (#1389).
- Text:
- Ein Problem wurde behoben, durch das Untertitel vor einer Suchposition übersprungen wurden. Dieses Problem trat nur in Media3 1.4.0-alpha01 auf.
- Ändern Sie das Standardverhalten beim Parsen von Untertiteln so, dass es während der Extraktion statt während des Renderings stattfindet. Informationen zum Unterschied zwischen ExoPlayer und Rendering finden Sie im Architekturdiagramm von ExoPlayer.
- Diese Änderung kann überschrieben werden, indem sowohl
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
als auchTextRenderer.experimentalSetLegacyDecodingEnabled(true)
aufgerufen werden. In der Dokumentation zur Anpassung erfahren Sie, wie Sie diese Komponenten in eineExoPlayer
-Instanz einbinden. Diese Methoden sowie die gesamte Unterstützung für die alte Untertiteldecodierung werden in einer zukünftigen Version entfernt. - Anwendungen mit benutzerdefinierten
SubtitleDecoder
-Implementierungen müssen aktualisiert werden, um stattdessenSubtitleParser
(undSubtitleParser.Factory
anstelle vonSubtitleDecoderFactory
) zu implementieren.
- Diese Änderung kann überschrieben werden, indem sowohl
- PGS: Die Decodierung der Lauflänge wurde korrigiert, um
0
als Farbindex anstelle eines literalen Farbwerts aufzulösen (#1367). - CEA-708:
rowLock
-Wert ignorieren. Die CEA-708-E S-2023-Spezifikation besagt, dass sowohlrowLock
als auchcolumnLock
unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden sollte. DiecolumnLock
-Unterstützung ist nicht implementiert, daher wird faktisch davon ausgegangen, dass sie immer „false“ sind.- Dies war ursprünglich in den Versionshinweisen zu
1.3.0-alpha01
enthalten, wurde jedoch vor der Version1.3.0-rc01
versehentlich rückgängig gemacht. Dieser Fehler wurde behoben, sodass die Änderung wieder vorhanden ist.
- Dies war ursprünglich in den Versionshinweisen zu
- CEA-708: Vermeiden Sie doppelte Zeilenumbrüche durch die naive Verarbeitung des Befehls "set pen location" durch ExoPlayer (#1315).
- Metadaten:
- Die Zuordnung von MP4- zu ID3-Sortier-Tags wurde korrigiert. Bisher wurden die MP4-Tags "Albumsortierung" (
soal
), "Art des Künstlers" (soar
) und "Album sortieren" (soaa
) den ID3-TagsTSO2
,TSOA
undTSOP
falsch zugeordnet (#1302). - Das Lesen von numerischen MP4-Tags (/iTunes) für
gnre
(genre) undtmpo
(Tempo) wurde korrigiert, wenn der Wert mehr als ein Byte lang ist. - Übergeben Sie den ID3-Frame
TCON
anMediaMetadata.genre
(#1305).
- Die Zuordnung von MP4- zu ID3-Sortier-Tags wurde korrigiert. Bisher wurden die MP4-Tags "Albumsortierung" (
- Bild:
- Nicht quadratische DASH-Miniaturansichtsraster werden jetzt unterstützt (#1300).
- AVIF wird ab API 34 unterstützt.
- Datenquelle:
- Erlaubt es
ByteArrayDataSource
, einen URI währendopen()
in ein Byte-Array aufzulösen, anstatt bei der Erstellung hartcodiert zu werden (#1405).
- Erlaubt es
- Digitale Rechteverwaltung:
- Festlegen von
LoadErrorHandlingPolicy
fürDefaultDrmSessionManagerProvider
zulassen (#1271).
- Festlegen von
- Auswirkung:
- Es wurde ein Fehler behoben, bei dem
TimestampWrapper
bei Verwendung mitExoPlayer#setVideoEffects
abstürzt (#821). - Standard-SDR-Farbarbeitsraum von linearen Farben in elektrische BT 709 SDR-Video ändern. Stellen Sie außerdem eine dritte Option zur Verfügung, um den ursprünglichen Farbraum beizubehalten.
- Festlegen einer unbestimmten Z-Reihenfolge von EditedMediaItemSequences zulassen (#1055).
- Beibehaltung eines konsistenten Leuchtdichtebereichs für verschiedene HDR-Inhalte (verwendet den HLG-Bereich).
- Unterstützung für Ultra HDR-Overlays (Bitmap) bei HDR-Inhalten hinzufügen
- Verwendung von
SeparableConvolution
-Effekten vor API 26 zulassen.
- Es wurde ein Fehler behoben, bei dem
- IMA-Erweiterung:
- Promote die API, die erforderlich ist, damit Apps stabil Anzeigenstreams für die dynamische Anzeigenbereitstellung wiedergeben können.
- Fügen Sie
replaceAdTagParameters(Map <String, String>)
zuImaServerSideAdInsertionMediaSource.AdLoader
hinzu, damit die Anzeigen-Tag-Parameter zur Laufzeit ersetzt werden können. - Es wurde ein Fehler behoben, bei dem
VideoAdPlayer.VideoAdPlayerCallback.onError
nicht aufgerufen wurde, wenn während der Anzeigenwiedergabe ein Playerfehler auftrat (#1334). - Aktualisieren Sie die IMA SDK-Version auf Version 3.33.0, um ein
NullPointerException
zu korrigieren, wenndata://
-URIs für Anzeigen-Tags verwendet werden (#700).
- Sitzung:
- Blenden Sie die Steuerleiste in der Medienbenachrichtigung für Livestreams aus, indem Sie die Dauer nicht in den Metadaten der Plattformsitzung festlegen (#1256).
- Richten Sie die Konvertierung von
MediaMetadata
inMediaDescriptionCompat
aus, um bei der Auswahl von Metadatenattributen wie in „media1“ dieselbe bevorzugte Reihenfolge und Logik zu verwenden. - Fügen Sie
MediaSession.sendError()
hinzu, damit nicht schwerwiegende Fehler an den Media3-Controller gesendet werden können. Bei Verwendung des Notification Controllers (sieheMediaSession.getMediaNotificationControllerInfo()
) wird der benutzerdefinierte Fehler verwendet, um denPlaybackState
der Plattformsitzung auf einen Fehlerstatus mit den angegebenen Fehlerinformationen zu aktualisieren (#543).
- Cronet-Erweiterung:
- Korrigieren Sie
SocketTimeoutException
inCronetDataSource
. Bei einigen Cronet-Versionen ist die vom Callback bereitgestellte Anfrage nicht immer identisch. Dies führt dazu, dass der Rückruf nicht abgeschlossen wird und eine Zeitüberschreitung bei der Anfrage auftritt (https://issuetracker.google.com/328442628).
- Korrigieren Sie
- HLS-Erweiterung:
- Es wurde ein Fehler behoben, bei dem ausstehende EMSG-Beispiele, die auf eine Unterbrechung warten, in
HlsSampleStreamWrapper
mit einem falschen Offset delegiert wurden, der einIndexOutOfBoundsException
oder einIllegalArgumentException
verursachte (#1002). - Es wurde ein Fehler behoben, bei dem nicht primäre Playlists für LL-HLS-Streams immer wieder neu geladen werden (#1240).
- Es wurde ein Fehler behoben, bei dem die Aktivierung von CMCD für HLS mit Initialisierungssegmenten zu
Source Error
undIllegalArgumentException
führte.
- Es wurde ein Fehler behoben, bei dem ausstehende EMSG-Beispiele, die auf eine Unterbrechung warten, in
- DASH-Erweiterung:
- Cast-Erweiterung:
- Es wurde ein Fehler behoben, bei dem der Albumtitel von
MediaQueueItem
in den Künstler im Media3-Medienelement konvertiert wurde (#1255).
- Es wurde ein Fehler behoben, bei dem der Albumtitel von
- Demo-App:
- Festlegen des Wiederholungsmodus mit
Intent
-Argumenten über die Befehlszeile zulassen (#1266).
- Festlegen des Wiederholungsmodus mit
- Entfernen Sie verworfene Symbole:
- Entfernen Sie die Methode
setContentTypePredicate(Predicate)
ausDefaultHttpDataSource
,OkHttpDataSource
undCronetDataSource
. Verwenden Sie stattdessen die entsprechende Methode für jedeXXXDataSource.Factory
. - Entfernen Sie die
OkHttpDataSource
-Konstruktoren undOkHttpDataSourceFactory
. Verwende stattdessenOkHttpDataSource.Factory
. PlayerMessage.setHandler(Handler)
entfernen. Verwenden Sie stattdessensetLooper(Looper)
.- Feld „
Timeline.Window.isLive
“ entfernen. Verwenden Sie stattdessen die MethodeisLive()
. - Entfernen Sie
DefaultHttpDataSource
-Konstruktoren. Verwenden Sie stattdessenDefaultHttpDataSource.Factory
. DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
entfernen. Verwenden Sie stattdessenDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
.MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
entfernen. Verwende stattdessenMediaCodecInfo.canReuseCodec(Format, Format)
.- Entfernen Sie die Methoden
DrmSessionManager.DUMMY
undgetDummyDrmSessionManager()
. Verwende stattdessenDrmSessionManager.DRM_UNSUPPORTED
. - Entfernen Sie
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
undVideoRendererEventListener.onVideoInputFormatChanged(Format)
. Verwenden Sie stattdessen die Überlastungen, die einenDecoderReuseEvaluation
verwenden. - Entfernen Sie die Konstanten
RendererSupport.FormatSupport
IntDef undFORMAT_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 Methode
Version 1.4.0-alpha01
17. April 2024
androidx.media3:media3-*:1.4.0-alpha01
wurde veröffentlicht.
Version 1.4.0-alpha01 enthält diese Commits.
- ExoPlayer:
- Fügen Sie
BasePreloadManager
hinzu. Damit wird das Vorabladen für mehrere Quellen anhand der in ihrenrankingData
definierten Prioritäten koordiniert. Erweitern Sie diesen Kurs, um Anpassungen vorzunehmen. Fügen SieDefaultPreloadManager
hinzu. Damit werden mitPreloadMediaSource
Medienbeispiele der Quellen in den Arbeitsspeicher geladen und eine GanzzahlrankingData
verwendet, die den Index eines Elements auf der Benutzeroberfläche angibt. - Füge den meisten
LoadControl
-MethodenPlayerId
hinzu, umLoadControl
-Implementierungen zur Unterstützung mehrerer Spieler zu aktivieren. - Entferne
Buffer.isDecodeOnly()
undC.BUFFER_FLAG_DECODE_ONLY
. Sie müssen dieses Flag nicht festlegen, da Renderer und Decodierer basierend auf dem Zeitstempel entscheiden, Puffer zu überspringen. Bei benutzerdefiniertenRenderer
-Implementierungen sollte geprüft werden, ob die Pufferzeit mindestensBaseRenderer.getLastResetPositionUs()
beträgt, um zu entscheiden, ob eine Stichprobe angezeigt werden soll. Bei benutzerdefiniertenSimpleDecoder
-Implementierungen kann bei BedarfisAtLeastOutputStartTimeUs
geprüft werden oder andere Zwischenspeicher mitDecoderOutputBuffer.shouldBeSkipped
markiert werden, um sie zu überspringen. - Lässt zu, dass von
TargetPreloadStatusControl.getTargetPreloadStatus(T)
ein Nullwert zurückgegeben wird, um anzugeben, dass keinMediaSource
mit dem angegebenenrankingData
vorab geladen werden soll. remove(MediaSource)
zuBasePreloadManager
hinzufügen.
- Fügen Sie
- Transformator:
- Fügen Sie
audioConversionProcess
undvideoConversionProcess
zuExportResult
hinzu und geben Sie an, wie der jeweilige Track in der Ausgabedatei erstellt wurde. - Lockern Sie die Prüfung der Schnittoptimierung auf H.264-Ebene.
- Unterstützung für den Wechsel zwischen SDR- und HDR-Eingabemedien in einer Sequenz hinzufügen
- Unterstützung für Audioeffekte auf Kompositionsebene hinzufügen
- Unterstützung für die Transcodierung von Ultra HDR-Bildern in HDR-Videos
- Ein Problem wurde behoben, bei dem
DefaultAudioMixer
nicht die richtige Anzahl von Byte ausgibt, nachdem es zurückgesetzt und wiederverwendet wurde.
- Fügen Sie
- Video:
- Ein Problem wurde behoben, bei dem
Listener.onRenderedFirstFrame()
zu früh erscheint, wenn während der Wiedergabe die Oberfläche gewechselt wird.
- Ein Problem wurde behoben, bei dem
- Datenquelle:
- Implementieren Sie die Unterstützung für
android.resource://package/id
-Rohressourcen-URIs, bei denen sichpackage
vom Paket der aktuellen Anwendung unterscheidet. Dies wurde bisher nicht dokumentiert, ist aber eine effizientere Möglichkeit, um auf Ressourcen in einem anderen Paket zuzugreifen, als über den Namen. - Prüfen Sie sorgfältig, ob
url
in denDataSpec
-Konstruktoren nicht null ist. Für diesen Parameter wurde bereits angegeben, dass er nicht null ist.
- Implementieren Sie die Unterstützung für
- Auswirkung:
- Unterstützung mehrerer Geschwindigkeitsänderungen innerhalb derselben
EditedMediaItem
oderComposition
inSpeedChangeEffect
. - Unterstützung für HLG- und PQ-Ausgabe durch Ultra-HDR-Bitmap-Eingabe.
- Unterstützung für EGL_GL_COLORSPACE_BT2020_HLG_EXT hinzugefügt, um die HLG-Oberflächenausgabe in ExoPlayer.setVideoEffect und Debug SurfaceView von Transformer zu verbessern.
- Aktualisiere die Implementierung der Overlay-Matrix so, dass sie mit der Dokumentation übereinstimmt. Drehe dazu die in
setOverlayFrameAnchor()
angewendeten x- und y-Werte um. Wenn SieOverlaySettings.Builder.setOverlayFrameAnchor()
verwenden, können Sie die x- und y-Werte umdrehen, indem Sie sie mit-1
multiplizieren.
- Unterstützung mehrerer Geschwindigkeitsänderungen innerhalb derselben
- Sitzung:
- Ändern Sie den Standardwert von
CommandButton.enabled
intrue
und achten Sie darauf, dass der Wert für Controller auch dann „falsch“ bleiben kann, wenn der zugehörige Befehl verfügbar ist. - Fügen Sie Symbolkonstanten für
CommandButton
hinzu, die anstelle von Ressourcen für benutzerdefinierte Symbole verwendet werden sollen. - Fügen Sie
MediaSessionService.isPlaybackOngoing()
hinzu, damit Anwendungen abfragen können, ob der Dienst inonTaskRemoved()
beendet werden muss (#1219). - Füge
MediaSessionService.pauseAllPlayersAndStopSelf()
hinzu. Damit kannst du bequem die Wiedergabe aller Sitzungen anhalten undstopSelf
aufrufen, um den Lebenszyklus vonMediaSessionService
zu beenden. - Überschreiben Sie
MediaSessionService.onTaskRemoved(Intent)
, um eine sichere Standardimplementierung bereitzustellen, bei der der Dienst im Vordergrund ausgeführt wird, wenn die Wiedergabe noch läuft, oder den Dienst andernfalls unterbricht.
- Ändern Sie den Standardwert von
- Downloads:
- Achten Sie darauf, dass
DownloadHelper
keine unveröffentlichtenRenderer
-Instanzen durchläuft, die schließlich zum Absturz einer App mitIllegalStateException: Too many receivers, total of 1000, registered for pid
führen können (#1224).
- Achten Sie darauf, dass
- Testdienstprogramme:
- Implementieren Sie
onInit()
undonRelease()
inFakeRenderer
. - Ändern Sie die
TestPlayerRunHelper.runUntil/playUntil
-Methoden so, dass sie bei nicht schwerwiegenden Fehlern fehlschlagen, z.B. bei solchen, die anAnalyticsListener.onVideoCodecError
gemeldet wurden. Verwenden Sie die neue MethodenketteTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
, um dieses Verhalten zu deaktivieren.
- Implementieren Sie
- Demo-App:
- Verwende
DefaultPreloadManager
in der kurzen Demo-App.
- Verwende
- Entfernen Sie verworfene Symbole:
CronetDataSourceFactory
entfernen. Verwenden Sie stattdessenCronetDataSource.Factory
.- Entfernen Sie einige
DataSpec
-Konstruktoren. Verwende stattdessenDataSpec.Builder
.
Version 1.3.0
Version 1.3.1
11. April 2024
androidx.media3:media3-*:1.3.1
wurde veröffentlicht.
Version 1.3.1 enthält diese Commits.
- Allgemeine Bibliothek:
- Füge
Format.labels
hinzu, um lokalisierte oder andere alternative Labels zuzulassen.
- Füge
- ExoPlayer:
- Ein Problem wurde behoben, bei dem
PreloadMediaPeriod
die Streams nicht beibehalten kann, wenn sie noch einmal vorab geladen werden. - Wende die korrekte
TrackSelectionResult
auf die Wiedergabeperiode bei der Titelauswahl an. - Starten Sie Early-Enabled-Renderer erst nach Ablauf des Wiedergabezeitraums, wenn Sie zwischen Medienelementen wechseln (#1017).
- Fehlenden Rückgabetyp zur Proguard-Regel
-keepclasseswithmembers
fürDefaultVideoFrameProcessor.Factory.Builder.build()
hinzufügen (#1187).
- Ein Problem wurde behoben, bei dem
- Transformator:
- Es wurde eine Problemumgehung für die Ausnahme hinzugefügt, die ausgelöst wurde, weil
MediaMuxer
negative Präsentationszeitstempel vor API 30 nicht unterstützt.
- Es wurde eine Problemumgehung für die Ausnahme hinzugefügt, die ausgelöst wurde, weil
- Titelauswahl:
DefaultTrackSelector
: Bevorzugen Sie Videotracks mit einer „angemessenen“ Framerate (>=10 fps) gegenüber solchen mit einer niedrigeren oder nicht festgelegten Framerate. Dadurch wird sichergestellt, dass der Player den "echten" Videotrack in MP4-Dateien auswählt, die aus Fotos mit Bewegtbild extrahiert wurden und zwei HEVC-Tracks enthalten können, von denen eine eine höhere Auflösung, aber nur eine sehr kleine Anzahl von Frames hat (#1051).
- Extraktoren:
- Ein Problem wurde behoben, bei dem das Auffüllen beim Lesen von Blöcken mit ungerader Größe aus WAV-Dateien nicht übersprungen wurde (#1117).
- MP3: Füllen Sie
Format.averageBitrate
aus Metadatenframes wieXING
undVBRI
. - MPEG-TS: Sie können eine Änderung rückgängig machen, durch die sichergestellt werden soll, dass der letzte Frame gerendert wird. Dazu wird die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange übergeben (#7909). Dies liegt daran, dass die Änderung neue Probleme mit HLS-Streams, die nur I-Frames enthalten (#1150) und H.262-HLS-Streams (#1126), verursacht haben.
- Audio:
- Ermöglichen Sie die Renderer-Wiederherstellung, indem Sie die Auslagerung deaktivieren, wenn der Audiotrack im Auslagerungsmodus 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 hinzufügen, durch das H265-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden
- Fügen Sie eine Problemumgehung hinzu, die sicherstellt, dass der erste Frame beim Tunneling immer gerendert wird, auch wenn das Gerät dies nicht wie von der API gefordert automatisch ausführt (#1169). (#966)
- Ein Problem wurde behoben, bei dem die Verarbeitung von HDR-Farbinformationen zu Codec-Fehlverhalten führte und dazu führt, dass adaptive Formatwechsel für SDR-Videotracks verhindert wurden (#1158).
- Text:
- WebVTT: Verhindert, dass direkt aufeinanderfolgende Cues falsche zusätzliche
CuesWithTiming
-Instanzen ausWebvttParser.parse
erstellen (#1177).
- WebVTT: Verhindert, dass direkt aufeinanderfolgende Cues falsche zusätzliche
- Digitale Rechteverwaltung:
- Sie können ein
NoSuchMethodError
umgehen, das auf einigen Android 14-Geräten vomMediaDrm
-Framework anstelle vonResourceBusyException
oderNotProvisionedException
ausgelöst werden kann (#1145).
- Sie können ein
- Auswirkung:
- Verbesserte PQ- und SDR-Tonzuordnung durch Konvertierung von Farbräumen.
- Sitzung:
- UI:
- Fallback zum Einbeziehen des Sprachnamens des Audiotracks, wenn
Locale
keinen Anzeigenamen identifizieren kann (#988).
- Fallback zum Einbeziehen des Sprachnamens des Audiotracks, wenn
- DASH-Erweiterung:
- Füllen Sie alle
Label
-Elemente aus dem Manifest inFormat.labels
aus (#1054).
- Füllen Sie alle
- RTSP-Erweiterung:
- Überspringen Sie leere Sitzungsinformationswerte (i-Tags) beim SDP-Parsing (#1087).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Deaktivieren Sie die MIDI-Erweiterung standardmäßig als lokale Abhängigkeit, da dafür ein zusätzliches Maven-Repository konfiguriert werden muss. Nutzer, die dieses Modul aus einer lokalen Abhängigkeit benötigen, können es wieder aktivieren.
Version 1.3.0
6. März 2024
androidx.media3:media3-*:1.3.0
wurde veröffentlicht.
Version 1.3.0 enthält diese Commits.
- Allgemeine Bibliothek:
- Implementieren Sie die Unterstützung für
android.resource://package/[type/]name
-Rohressourcen-URIs, bei denen sichpackage
vom Paket der aktuellen Anwendung unterscheidet. Es wurde immer dokumentiert, dass dies funktioniert, aber bis jetzt wurde es nicht richtig implementiert. - Verwenden Sie für die vom App-Code festgelegten MIME-Typen oder beim Lesen von Medien aus Medien nur die Kleinschreibung.
- Definieren Sie Anzeigen mit einem vollständigen
MediaItem
statt mit einem einzelnenUri
inAdPlaybackState
. - Erhöhen Sie
minSdk
auf 19 (Android KitKat). Dies ist an allen anderen AndroidX-Bibliotheken ausgerichtet und ist erforderlich, damit wir ein Upgrade auf die neuesten Versionen unserer AndroidX-Abhängigkeiten durchführen können. - Füllen Sie sowohl
artworkUri
als auchartworkData
inMediaMetadata.Builder.populate(MediaMetadata)
aus, wenn mindestens einer von ihnen nicht null ist (#964).
- Implementieren Sie die Unterstützung für
- ExoPlayer:
- Fügen Sie
PreloadMediaSource
undPreloadMediaPeriod
hinzu, damit Apps eine Inhaltsmedienquelle vor der Wiedergabe an einer bestimmten Startposition vorab laden können.PreloadMediaSource
bereitet die Contentmedienquelle für den Empfang vonTimeline
vor und bereitet den Zeitraum an der angegebenen Startposition vor und speichert ihn im Cache. Dabei werden Titel ausgewählt und Mediendaten für den Zeitraum geladen. 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 Spieler jetzt standardmäßig einImageRenderer
mit nullImageOutput
undImageDecoder.Factory.DEFAULT
bereit.- Gibt ein
Player.Listener.onPositionDiscontinuity
-Ereignis aus, wenn Stille übersprungen wird (#765). - Zusätzliche experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion. Sie können diese Funktion mit
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
aktivieren. - Unterstützen Sie adaptive Medienquellen mit
PreloadMediaSource
. - Implementieren Sie
HttpEngineDataSource
, eineHttpDataSource
, mithilfe der HttpEngine API. - Verhindert das Erstellen von abgeleiteten Klassen von
CompositeSequenceableLoader
. Diese Komponente war zuvor erweiterbar, wurde aber innerhalb der Bibliothek nie abgeleitet. Sie können Anpassungen vornehmen, indem Sie eine Instanz mithilfe des Decorator-Musters umschließen und eine benutzerdefinierteCompositeSequenceableLoaderFactory
implementieren. - Ein Problem wurde behoben, bei dem Metadaten aus diesem Element bei einer Wiederholung gleichzeitig gelöscht werden (#1007).
- Benennen Sie die
experimentalSetSubtitleParserFactory
-Methoden inBundledChunkExtractor.Factory
undDefaultHlsExtractorFactory
insetSubtitleParserFactory
um und lassen Sie die Weitergabe vonnull
nicht zu. Verwenden Sie die neuenexperimentalParseSubtitlesDuringExtraction(boolean)
-Methoden, um das Parsing-Verhalten zu steuern. - Die während der Extraktion verwendete
SubtitleParser.Factory
kann jetzt angepasst werden. Dies kann mitMediaSource.Factory.setSubtitleParserFactory()
erreicht werden. - Fügen Sie allen aus
MergingMediaSource
generiertenFormat.id
-Feldern ein Quellpräfix hinzu. Damit lässt sich ermitteln, von welcher Quelle einFormat
erzeugt wurde (#883). - Korrigieren Sie den regulären Ausdruck, der zum Validieren von benutzerdefinierten CMCD-Schlüsselnamen (Common Media Client Data) verwendet wird, indem Sie ihn so ändern, dass nur ein Bindestrich geprüft wird (#1028).
- Beenden Sie die Doppelcodierung von CMCD-Abfrageparametern (#1075).
- Fügen Sie
- Transformator:
- Unterstützung für die Abflachung von Videos in Zeitlupe H.265/HEVC SEF
- Erhöhen Sie die Transmuxing-Geschwindigkeit, insbesondere bei Bearbeitungen des Typs "Video entfernen".
- Fügen Sie eine API hinzu, um sicherzustellen, dass die Ausgabedatei auf einem Videoframe beginnt. Dadurch wird die Ausgabe von Zuschneidevorgängen besser mit Playerimplementierungen kompatibel, bei denen der erste Videoframe erst nach seinem Präsentationszeitstempel angezeigt wird (#829).
- Unterstützung für die Optimierung von MP4-Trennvorgängen für einzelne Assets hinzufügen.
- Fügen Sie Unterstützung hinzu, damit ein Videoframe in der Ausgabedatei den ersten Zeitstempel enthält. Korrigiert Ausgabedateien, die in iOS-basierten Playern mit einem schwarzen Frame beginnen (#829).
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.selectImageTrack
hinzu, um die Auswahl von Bild-Tracks zu aktivieren. - Fügen Sie
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
hinzu, um festzulegen, ob eine Bildspur ausgewählt werden soll, wenn sowohl eine Bild- als auch eine Videospur verfügbar sind. Der Standardwert istfalse
. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
- Fügen Sie
- Extraktoren:
- Fügen Sie dem MP4-Extraktor ein zusätzliches AV1C-Parsing hinzu, um
ColorInfo.colorSpace
-,ColorInfo.colorTransfer
- undColorInfo.colorRange
-Werte abzurufen (#692). - MP3: Verwenden Sie eine konstante Bitrate (CBR)-Suche nach Dateien mit einem
Info
-Header (die CBR-Entsprechung desXing
-Headers). Bisher wurde die Suchtabelle aus demInfo
-Header verwendet. Dies führt jedoch zu einer weniger präzisen Suche, als wenn wir sie ignorieren und davon ausgehen, dass es sich bei der Datei um eine CBR-Datei handelt. - MPEG2-TS: Unterstützung für DTS, DTS-LBR und DTS:X Profile2 hinzufügen (#275).
- Extrahieren Sie Audiotypen aus TS-Deskriptoren und ordnen Sie sie Rollen-Flags zu, damit Nutzer eine fundiertere Auswahl von Audiotracks treffen können (#973).
- Fügen Sie dem MP4-Extraktor ein zusätzliches AV1C-Parsing hinzu, um
- Audio:
- Video:
- Ändern Sie den
MediaCodecVideoRenderer
-Konstruktor, der einVideoFrameProcessor.Factory
-Argument annimmt, und ersetzen Sie ihn durch einen Konstruktor, der einVideoSinkProvider
-Argument annimmt. Anwendungen, die eine benutzerdefinierteVideoFrameProcessor.Factory
einfügen möchten, können eineCompositingVideoSinkProvider
instanziieren, die das benutzerdefinierteVideoFrameProcessor.Factory
verwendet, und den Anbieter der Videosenke anMediaCodecVideoRenderer
übergeben.
- Ändern Sie den
- Text:
- Die Serialisierung von Bitmaphinweisen wurde korrigiert, um den
Tried to marshall a Parcel that contained Binder objects
-Fehler bei Verwendung vonDefaultExtractorsFactory.setTextTrackTranscodingEnabled
zu beheben (#836). - CEA-708:
rowLock
-Wert ignorieren. Die CEA-708-E S-2023-Spezifikation besagt, dass sowohlrowLock
als auchcolumnLock
unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden sollte. DiecolumnLock
-Unterstützung ist nicht implementiert, daher wird faktisch davon ausgegangen, dass sie immer „false“ sind.
- Die Serialisierung von Bitmaphinweisen wurde korrigiert, um den
- Bild:
- Unterstützung für DASH-Miniaturansichten hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden
ImageOutput
kurz vor ihrer Präsentationszeit bereitgestellt.
- Unterstützung für DASH-Miniaturansichten hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden
- Digitale Rechteverwaltung:
- Unverschlüsselte „Lead löschen“-Beispiele in DRM-Inhalten werden standardmäßig sofort wiedergegeben, auch wenn die Schlüssel für die später verschlüsselten Beispiele noch nicht bereit sind. Dies kann dazu führen, dass die Schlüssel mitten in der Wiedergabe angehalten werden, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Zuvor wurde die Wiedergabe aber zu diesem Zeitpunkt überhaupt nicht gestartet. Dieses Verhalten kann mit
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
oderDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
deaktiviert werden.
- Unverschlüsselte „Lead löschen“-Beispiele in DRM-Inhalten werden standardmäßig sofort wiedergegeben, auch wenn die Schlüssel für die später verschlüsselten Beispiele noch nicht bereit sind. Dies kann dazu führen, dass die Schlüssel mitten in der Wiedergabe angehalten werden, wenn die Schlüssel noch nicht bereit sind, wenn die Wiedergabeposition die verschlüsselten Samples erreicht. Zuvor wurde die Wiedergabe aber zu diesem Zeitpunkt überhaupt nicht gestartet. Dieses Verhalten kann mit
- IMA-Erweiterung:
- Ein Problem wurde behoben, bei dem DASH- und HLS-Anzeigen ohne die entsprechende Dateiendung nicht wiedergegeben werden konnten.
- Sitzung:
- Deaktivieren Sie die Doppelklickerkennung für TV-Apps (#962).
- Es wurde ein Problem behoben, bei dem
MediaItem.RequestMetadata
nicht nur mit Extras ungleich Null zwischen Media-Controllern und Sitzungen übertragen wird. - Fügen Sie
MediaLibrarySession.Builder
einen Konstruktor hinzu, der nurContext
anstelle vonMediaLibraryService
verwendet.
- HLS-Erweiterung:
HlsMediaPeriod
auf paketbasierte Sichtbarkeit reduzieren. Von diesem Typ sollte außerhalb des HLS-Pakets nicht direkt abhängig sein.- Bei der Aufklärung wird effizienter zum Anfang eines Segments gesucht (#1031).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- MIDI-Decoder: SysEx-Ereignismeldungen ignorieren (#710)
- Testdienstprogramme:
- Wiedergabe in
TestPlayerRunHelper.playUntilPosition
nicht pausieren. Der Test behält die Wiedergabe im Wiedergabestatus, unterbricht jedoch den Fortschritt, bis der Test Assertions und weitere Aktionen hinzufügen kann.
- Wiedergabe in
- Demo-App:
- Fügen Sie ein kurzes Demomodul hinzu, um die Verwendung von
PreloadMediaSource
mit dem Anwendungsfall für kurze Inhalte zu demonstrieren.
- Fügen Sie ein kurzes Demomodul hinzu, um die Verwendung von
Version 1.3.0-rc01
22. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-beta01
7. Februar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.3.0-alpha01
15. Januar 2024
Verwenden Sie die stabile Version 1.3.0.
Version 1.2.0
Version 1.2.1
9. Januar 2024
- ExoPlayer:
- Ein Problem wurde behoben, bei dem manuelle Suchen außerhalb des
LiveConfiguration.min/maxOffset
-Bereichs den Offset immer wieder aufmin/maxOffset
zurücksetzen. - Problem behoben, bei dem die OPUS- und VORBIS-Kanallayouts für 3, 5, 6, 7 und 8 Kanäle falsch sind (#8396).
- Es wurde ein Problem behoben, bei dem die Titelauswahl nach einer Suche auf null in einem Livestream den Stream fälschlicherweise an der Standardposition startete (#9347).
- Behebung des Problems, bei dem neue Instanzen von
CmcdData.Factory
negative Werte fürbufferedDurationUs
aus Blockquellen erhalten haben, was zu einemIllegalArgumentException
führte (#888).
- Ein Problem wurde behoben, bei dem manuelle Suchen außerhalb des
- Transformator:
- Du kannst ein Problem umgehen, bei dem der Encoder bei der Konfiguration eine hohe Betriebsrate ausgibt.
- Extraktoren:
- Kennzeichnen Sie sekundäre HEVC-Tracks in JPEG-Fotos mit Bewegtbild als
ROLE_FLAG_ALTERNATE
, um zu verhindern, dass sie aufgrund ihrer höheren Auflösung automatisch für die Wiedergabe ausgewählt werden. - Die falsche Keyframe-Erkennung für TS H264-Streams wurde korrigiert (#864).
- Die geschätzte Dauer von TS-Streams, die länger als 47.721 Sekunden sind, wurde korrigiert (#855).
- Kennzeichnen Sie sekundäre HEVC-Tracks in JPEG-Fotos mit Bewegtbild als
- Audio:
- Behebung des Umgangs mit EOS für
SilenceSkippingAudioProcessor
bei mehrfachem Aufruf (#712).
- Behebung des Umgangs mit EOS für
- Video:
- Wir fügen eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzu, durch die AVC-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#693).
- Metadaten:
- Es wurde ein Fehler behoben, bei dem
MediaMetadata
nur aus Vorbis-Kommentaren mit Großbuchstaben gefüllt wurde (#876). - Fangen Sie
OutOfMemoryError
ab, wenn sehr große ID3-Frames geparst werden. Dies bedeutet, dass die Wiedergabe ohne die Tag-Informationen fortgesetzt werden kann, statt einen kompletten Fehler bei der Wiedergabe zu verursachen.
- Es wurde ein Fehler behoben, bei dem
- Digitale Rechteverwaltung:
- Erweitern Sie die Problemumgehung für die falsche ClearKey-Lizenz-URL
https://default.url
auf API 33 und höher (bisher wurde diese Problemumgehung nur auf API 33 angewendet) (#837). ERROR_DRM_SESSION_NOT_OPENED
wurde korrigiert, wenn von verschlüsselten Inhalten zum Löschen von Inhalten ohne Oberfläche gewechselt wurde. Der Fehler wurde dadurch verursacht, dass zum Abspielen der unverschlüsselten Inhalte fälschlicherweise ein sicherer Decoder verwendet wurde.
- Erweitern Sie die Problemumgehung für die falsche ClearKey-Lizenz-URL
- Sitzung:
- Fügen Sie die benutzerdefinierten Schlüssel und Werte in
MediaMetadataCompat
inMediaMetadata.extras
undMediaMetadata.extras
inMediaMetadataCompat
ein (#756, #802). - Das Übertragen von
notifyChildrenChanged
für Legacy-Controller wurde korrigiert (#644). - Es wurde ein Fehler behoben, bei dem das Festlegen einer negativen Zeit für einen deaktivierten
setWhen
-Timer der Benachrichtigung auf einigen Geräten zu einem Absturz führte (#903). - Das Problem mit
IllegalStateException
wurde behoben, wenn der Controller für Medienbenachrichtigungen beim Anfordern der ersten Aktualisierung von Benachrichtigungen keine Verbindung hergestellt hat (#917).
- Fügen Sie die benutzerdefinierten Schlüssel und Werte in
- UI:
- Ein Problem wurde behoben, durch das Schaltflächen zum Vor- und Zurückspulen nicht sichtbar waren, wenn sie mit Material Design in einem BottomSheetDialogFragment-Element verwendet wurden (#511).
- Ein Problem wurde behoben, bei dem die Zahlen auf der Schaltfläche zum Vorspulen von
PlayerControlView
falsch ausgerichtet waren (#547).
- DASH-Erweiterung:
- Parsen Sie "f800" im DASH-Manifest als Kanalanzahl von 5 für Dolby (#688).
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Cast-Erweiterung:
- Lösche die Erstellung von
Timeline
, damit die App nicht abstürzt, wenn das Laden von Medien auf dem Übertragungsgerät fehlschlägt (#708).
- Lösche die Erstellung von
Version 1.2.0
15. November 2023
- Allgemeine Bibliothek:
- Fügen Sie den Methoden auf der
Log.Logger
-Oberfläche einen@Nullable Throwable
-Parameter hinzu. Dermessage
-Parameter für diese Methoden enthält keine Informationen mehr über dieThrowable
, die an dieLog.{d,i,w,e}()
-Methoden übergeben werden. Daher müssen Implementierungen diese Informationen bei Bedarf manuell anhängen, z. B. mitLogger.appendThrowableString(String, Throwable)
. - Ein Kotlin-Kompatibilitätsproblem wurde behoben, bei dem generische Typparameter mit Nullwerten und Array-Elementtypen mit Nullwerten nicht als Nullwerte erkannt wurden. Beispiele sind die Methodenparameter
TrackSelectorResult
undSimpleDecoder
(#6792). - Ändere das Standard-UI und das Benachrichtigungsverhalten in
Util.shouldShowPlayButton
so, dass eine Wiedergabeschaltfläche angezeigt wird, während die Wiedergabe vorübergehend unterdrückt wird (z.B. aufgrund eines vorübergehenden Verlusts des Audiofokus). Das Legacy-Verhalten kann mitPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
oderMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
beibehalten werden (#11213). - Aktualisiere
androidx.annotation:annotation-experimental
auf1.3.1
, um das Problem zu beheben: https://issuetracker.google.com/251172715. - Verschieben Sie
ExoPlayer.setAudioAttributes
in diePlayer
-Oberfläche.
- Fügen Sie den Methoden auf der
- ExoPlayer:
- Beheben Sie Probleme bei der Suche in AC4-Streams, die dadurch verursacht wurden, dass reine Decodierungsproben nicht richtig identifiziert wurden (#11000).
- Füge die Unterdrückung der Wiedergabe auf ungeeigneten Audioausgabegeräten wie dem integrierten Lautsprecher auf Wear OS-Geräten hinzu, wenn diese Funktion über
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
aktiviert wird. Der Grund für die Unterdrückung der Wiedergabe wird mitPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
aktualisiert, wenn die Wiedergabe versucht wird, während keine geeigneten Audioausgaben verfügbar sind, oder wenn alle geeigneten Ausgaben während der Wiedergabe getrennt werden. Der Unterdrückungsgrund wird entfernt, wenn eine geeignete Ausgabe verbunden wird. - Fügen Sie
MediaSource.canUpdateMediaItem
undMediaSource.updateMediaItem
hinzu, umMediaItem
-Aktualisierungen nach dem Erstellen überPlayer.replaceMediaItem(s)
anzunehmen. MediaItem
-Updates für alleMediaSource
-Klassen zulassen, die von der Bibliothek überPlayer.replaceMediaItem(s)
bereitgestellt werden (#33, #9978).- Benennen Sie
MimeTypes.TEXT_EXOPLAYER_CUES
inMimeTypes.APPLICATION_MEDIA3_CUES
um. - Fügen Sie
PngExtractor
hinzu, der eine vollständige PNG-Datei als ein Sample sendet und in dieTrackOutput
liest. - Die Methode
SequenceableLoader.continueLoading(long)
in derSequenceableLoader
-Oberfläche wurde aufSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
erweitert.LoadingInfo
enthält zusätzlich zum vorhandenenplaybackPositionUs
weitere Parameter, einschließlichplaybackSpeed
undlastRebufferRealtimeMs
. - Die Methode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
in derChunkSource
-Schnittstelle wurde aufChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
erweitert. - Fügen Sie dem CMCD-Logging (Common Media Client Data) zusätzliche Felder hinzu: Puffermangel (
bs
), Frist (dl
), Wiedergaberate (pr
) und Start (su
) (#8699). - Fügen Sie
ColorInfo
die Luma- und die Chroma-Bittiefe hinzu (#491). - Fügen Sie dem CMCD-Logging (Common Media Client Data) zusätzliche Felder hinzu: nächste Objektanfrage (
nor
) und nächste Bereichsanfrage (nrr
) (#8699). - Wir haben eine Funktion zum Übertragen von CMCD-Daten (Common Media Client Data) mithilfe von Abfrageparametern hinzugefügt (#553).
- Korrigieren Sie
ConcurrentModificationException
inExperimentalBandwidthMeter
(#612). - Fügen Sie den Parameter
MediaPeriodId
zuCompositeMediaSource.getMediaTimeForChildMediaTime
hinzu. - Unterstützt
ClippingMediaSource
(und andere Quellen mit Zeitraum-/Fensterzeitverschiebungen) inConcatenatingMediaSource2
(#11226). - Ändern Sie
BaseRenderer.onStreamChanged()
so, dass auch einMediaPeriodId
-Argument empfangen wird.
- Transformator:
- EXIF-Rotationsdaten für Bildeingaben parsen
- Entfernen Sie den Annotationstyp
TransformationRequest.HdrMode
und die zugehörigen Konstanten. Verwenden Sie stattdessenComposition.HdrMode
und die zugehörigen Konstanten. - Vereinfache den
OverlaySettings
, um Rotationsprobleme zu beheben. - Die Parameter
frameRate
unddurationUs
vonSampleConsumer.queueInputBitmap
wurden inTimestampIterator
geändert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
hinzu, um eine nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Die Standardeinstellung bleibt bei ihrem aktuellen Verhalten vontrue
.
- Fügen Sie
- Extraktoren:
- MPEG-TS: Sorgen Sie dafür, dass der letzte Frame gerendert wird. Dazu übergeben Sie die letzte Zugriffseinheit eines Streams an die Beispielwarteschlange (#7909).
- Tippfehler bei der Bestimmung von
rotationDegrees
wurde korrigiert.projectionPosePitch
wurde inprojectionPoseRoll
geändert (#461). - Gehen Sie nicht davon aus, 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. BmpExtractor
hinzufügen.WebpExtractor
hinzufügen.HeifExtractor
hinzufügen.- Unterstützung für QuickTime Classic wurde zu
Mp4Extractor
hinzugefügt.
- Audio:
- Unterstützung für 24/32-Bit Big-Endian-PCM in MP4 und Matroska hinzufügen und die PCM-Codierung für
lpcm
in MP4 parsen. - Unterstützung für das Extrahieren von Vorbis-Audioinhalten in MP4
- Fügen Sie
AudioSink.getFormatOffloadSupport(Format)
hinzu, um den Grad der Auslagerungsunterstützung abzurufen, die die Senke für das Format über einenDefaultAudioOffloadSupportProvider
bereitstellen kann. Sie gibt das neueAudioOffloadSupport
zurück, dasisFormatSupported
,isGaplessSupported
undisSpeedChangeSupported
enthält. - Fügen Sie
AudioSink.setOffloadMode()
hinzu, über die die Auslagerungskonfiguration auf der Audiosenke konfiguriert wird. Der Standardwert istAudioSink.OFFLOAD_MODE_DISABLED
. - Die Auslagerung kann über
setAudioOffloadPreference
inTrackSelectionParameters
aktiviert werden. Wenn in der Einstellung „Aktivieren“ festgelegt ist, unterstützt das Gerät das Auslagern des Formats und die Trackauswahl ist eine einzelne Audiospur. In diesem Fall wird die Audioauslagerung aktiviert. - Wenn
audioOffloadModePreference
aufAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
gesetzt ist, wählt dieDefaultTrackSelector
nur einen Audiotrack aus und nur dann, wenn das Format dieses Titels beim Auslagern unterstützt wird. Wenn beim Auslagern keine Audiotracks unterstützt werden, wird kein Track ausgewählt. - Deaktivierung der Unterstützung für Auslagerung ohne Lücken bei der Auslagerung vor API-Level 33 aufgrund eines Problems mit der Wiedergabeposition nach dem Titelübergang.
- Entfernen Sie den Parameter
enableOffload
aus der MethodensignaturDefaultRenderersFactory.buildAudioSink
. - Methode
DefaultAudioSink.Builder.setOffloadMode
entfernen. - Entfernen Sie den intdef-Wert
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Zusätzliche Unterstützung für lückenlose Opus-Metadaten während der Auslagerungswiedergabe.
- Lassen Sie die Renderer-Wiederherstellung zu, indem Sie die Auslagerung deaktivieren, wenn beim ersten Schreibvorgang ein Fehler aufgetreten ist (#627).
- Aktiviere standardmäßig die Auslagerungsplanung für die reine Audiowiedergabe.
- Löschen Sie
ExoPlayer.experimentalSetOffloadSchedulingEnabled
undAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
wurde inonSleepingForOffloadChanged
undonExperimentalOffloadedPlayback
inonOffloadedPlayback
umbenannt.- Verschiebt im Modus „Audio-Offload“ zugehörige
TrackSelectionParameters
-Schnittstellen und -Definitionen in eine innereAudioOffloadPreferences
-Klasse. - Füge
onAudioTrackInitialized
- undonAudioTrackReleased
-Callbacks zuAnalyticsListener
,AudioRendererEventListener
undAudioSink.Listener
hinzu. - Problem mit Unterlauf des DTS Express-Audiopuffers behoben (#650)
- Es wurde ein Fehler behoben, bei dem die Funktionsprüfung für E-AC3-JOC
IllegalArgumentException
ausgibt (#677).
- Unterstützung für 24/32-Bit Big-Endian-PCM in MP4 und Matroska hinzufügen und die PCM-Codierung für
- Video:
- Erlauben Sie
MediaCodecVideoRenderer
, eine benutzerdefinierteVideoFrameProcessor.Factory
zu verwenden. - Es wurde ein Fehler behoben, bei dem der erste Frame nicht gerendert werden konnte, wenn der Audiostream mit negativen Zeitstempeln beginnt (#291).
- Erlauben Sie
- Text:
ExoplayerCuesDecoder
entfernen. Text-Tracks mitsampleMimeType = application/x-media3-cues
werden jetzt direkt vonTextRenderer
verarbeitet, ohne dass eineSubtitleDecoder
-Instanz erforderlich ist.
- Metadaten:
- Bei rein decodierten Beispielen wird
MetadataDecoder.decode
nicht mehr aufgerufen, da die Implementierung trotzdem null zurückgeben muss.
- Bei rein decodierten Beispielen wird
- Auswirkung:
- Fügen Sie die Bitmap-Eingabe für die
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
-Warteschlange nach Zeitstempel hinzu. - Ändere die
VideoFrameProcessor.registerInputStream()
so, dass sie nicht blockiert wird. Apps müssenVideoFrameProcessor.Listener#onInputStreamRegistered()
implementieren. - Die Parameter
frameRate
unddurationUs
vonVideoFrameProcessor.queueInputBitmap
wurden inTimestampIterator
geändert.
- Fügen Sie die Bitmap-Eingabe für die
- IMA-Erweiterung:
- Es wurde ein Fehler behoben, bei dem ein mehrstufiger DASH-Livestream, der nicht das erste Element in einer Playlist ist, eine Ausnahme auslösen kann (#571).
- Gib StreamManager frei, bevor du
AdsLoader.destroy()
aufrufst. - Aktualisierung der IMA SDK-Version auf Version 3.31.0.
- Sitzung:
- Setzen Sie das Verhalten der Benachrichtigungen für Dienste im Vordergrund in
DefaultMediaNotificationProvider
aufFOREGROUND_SERVICE_IMMEDIATE
(#167). - Verwenden Sie nur
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
ab API 31, um Probleme mit verworfenen APIs auf Samsung-Geräten zu vermeiden (#167). - Verwenden Sie den Medienbenachrichtigungs-Controller als Proxy, um verfügbare Befehle und ein benutzerdefiniertes Layout für die Benachrichtigung und die Plattformsitzung festzulegen.
- Wandeln Sie Medienschaltflächenereignisse, die von
MediaSessionService.onStartCommand()
in Media3 empfangen werden, um, anstatt sie an die Plattformsitzung und zurück in Media3 weiterzuleiten. Dadurch ist der Aufrufer-Controller immer der Controller für Medienbenachrichtigungen und Apps können Anrufe, die von der Benachrichtigung kommen, auf allen unterstützten API-Ebenen auf dieselbe Weise erkennen. - Es wurde ein Fehler behoben, bei dem
MediaController.getCurrentPosition()
nicht voranschreitet, wenn eine Verbindung zu einer Legacy-MediaSessionCompat
besteht. - Fügen Sie der Einfachheit halber
MediaLibrarySession.getSubscribedControllers(mediaId)
hinzu. - Überschreiben Sie
MediaLibrarySession.Callback.onSubscribe()
, um die Verfügbarkeit der übergeordneten ID zu bestätigen, die der Controller abonniert. Wenn der Vorgang erfolgreich ist, wird das Abo angenommen und sofortnotifyChildrenChanged()
aufgerufen, um den Browser zu informieren (#561). - Fügen Sie das Sitzungs-Demomodul 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
nicht für den Media Notification Controller verfügbar ist. Da Android Auto der Client-Controller ist, der aus der Framework-Sitzung liest, hat dies zur Folge, dass die Schaltflächequeue
in der Benutzeroberfläche von Android Auto nicht angezeigt wird (#339). - Verwenden Sie standardmäßig
DataSourceBitmapLoader
anstelle vonSimpleBitmapLoader
(#271, #327). - Füge
MediaSession.Callback.onMediaButtonEvent(Intent)
hinzu, damit Apps die standardmäßige Ereignisbehandlung bei Medienschaltflächen überschreiben können.
- Setzen Sie das Verhalten der Benachrichtigungen für Dienste im Vordergrund in
- UI:
- Füge eine
Player.Listener
-Implementierung für Wear OS-Geräte hinzu, die die Wiedergabeunterdrückung durchPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
verwalten. Dazu öffnest du ein Systemdialogfeld, über das Nutzer einen geeigneten Audioausgang anschließen können (z. B. Bluetooth-Kopfhörer). Der Listener setzt die Wiedergabe automatisch fort, wenn innerhalb eines konfigurierbaren Zeitlimits (Standardwert: 5 Minuten) ein geeignetes Gerät verbunden ist.
- Füge eine
- Downloads:
- Deklarieren Sie den Typ „Datensynchronisierung“ im Vordergrund für
DownloadService
, um die Kompatibilität mit Android 14 zu gewährleisten. Wenn dieser Dienst verwendet wird, muss die App außerdemdataSync
alsforegroundServiceType
im Manifest und die BerechtigungFOREGROUND_SERVICE_DATA_SYNC
hinzufügen (#11239).
- Deklarieren Sie den Typ „Datensynchronisierung“ im Vordergrund für
- HLS-Erweiterung:
- Aktualisieren Sie die HLS-Liveplaylist mit einem Intervall, das aus der Startzeit des letzten Ladevorgangs und nicht aus der Zeit des letzten Ladevorgangs berechnet wurde (#663).
- DASH-Erweiterung:
- Mehrere identische DASH-Kennungen in der URL der Segmentvorlage zulassen.
- Zusätzliche experimentelle Unterstützung für das Parsen von Untertiteln während der Extraktion. Dadurch wird das Zusammenführen von sich überschneidenden Untertiteln sowie das Beheben von Flimmern beim Übergang zwischen Untertitelsegmenten besser unterstützt. Sie können diese Funktion mit
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
aktivieren (#288).
- RTSP-Erweiterung:
- Es wurde eine Race-Bedingung behoben, die zu
IndexOutOfBoundsException
führen könnte, wenn auf TCP zurückgegriffen wird, oder die Wiedergabe in einigen Situationen hängenbleibt. - Prüfen Sie den Status in der RTSP-Einrichtung, wenn Sie den Ladestatus von
RtspMediaPeriod
zurückgeben (#577). - Ignorieren Sie benutzerdefinierte Rtsp-Anfragemethoden im öffentlichen Header der Optionsantwort (#613).
- Verwenden Sie den Zeitüberschreitungswert für die RTSP-Einrichtungsantwort im Zeitintervall des Sendens von Keep-Alive-RTSP-Optionsanfragen (#662).
- Es wurde eine Race-Bedingung behoben, die zu
- Decoder-Erweiterungen (FFmpeg, VP9, AV1, MIDI usw.):
- Geben Sie das MIDI-Decodermodul frei, das die Wiedergabe von Standard-MIDI-Dateien mithilfe der Jsyn-Bibliothek zur Audiosynthese unterstützt.
- Fügen Sie
DecoderOutputBuffer.shouldBeSkipped
hinzu, um Ausgabepuffer, die nicht präsentiert werden müssen, direkt zu markieren. Diese Einstellung wird gegenüberC.BUFFER_FLAG_DECODE_ONLY
bevorzugt, der eingestellt wird. - Füge
Decoder.setOutputStartTimeUs
undSimpleDecoder.isAtLeastOutputStartTimeUs
hinzu, damit Decodierer nur Decodierungsproben vor der Startzeit löschen können. Diese Methode sollte der EinstellungBuffer.isDecodeOnly
vorgezogen werden, die eingestellt werden. - Fehler beim Veröffentlichen eines MIDI-Decoder-Artefakts im Maven-Repository behoben. Das Artefakt wird in
media3-exoplayer-midi
umbenannt (#734).
- Leanback-Erweiterung:
- Es wurde ein Fehler behoben, bei dem das Deaktivieren einer Oberfläche zu einem
ArithmeticException
im Leanback-Code führen konnte (#617).
- Es wurde ein Fehler behoben, bei dem das Deaktivieren einer Oberfläche zu einem
- Testdienstprogramme:
TestExoPlayerBuilder
undFakeClock
mit Espresso-UI-Tests und Compose-UI-Tests kompatibel machen. Dadurch wird ein Fehler behoben, bei dem die Wiedergabe bei Interaktionen mit der Ansicht „Espresso“ oder „Compose“ nicht deterministisch voranschreitet.
- Entfernen Sie verworfene Symbole:
- Entfernen Sie
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
undTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. Verwenden SieComposition.Builder.setHdrMode(int)
und übergeben SieComposition
stattdessen anTransformer.start(Composition, String)
. - Entfernen Sie die verworfene Methode
DownloadNotificationHelper.buildProgressNotification
. Verwenden Sie stattdessen eine nicht verworfene Methode, die stattdessen einennotMetRequirements
-Parameter verwendet.
- Entfernen Sie
Version 1.2.0-rc01
1. November 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-beta01
19. Oktober 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-alpha02
29. September 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.2.0-alpha01
17. August 2023
Verwenden Sie die stabile Version 1.2.0.
Version 1.1.0
Version 1.1.1
16. August 2023
- Allgemeine Bibliothek:
- Entfernen Sie die versehentlich hinzugefügte
multidex
-Abhängigkeit aus allen Modulen (#499).
- Entfernen Sie die versehentlich hinzugefügte
- ExoPlayer:
- Ein Problem in
PlaybackStatsListener
wurde behoben, bei dem falschePlaybackStats
-Elemente erstellt wurden, nachdem die Playlist gelöscht wurde. - Fügen Sie dem CMCD-Logging (Common Media Client Data) weitere Felder hinzu: Streamingformat (sf), Streamtyp (st), Version (v), Top-Birate (tb), Objektdauer (d), gemessener Durchsatz (mtp) und Objekttyp (ot) (#8699).
- Ein Problem in
- Audio:
- Es wurde ein Fehler behoben, bei dem
Player.getState()
beim Abspielen sehr kurzer Dateien nicht zuSTATE_ENDED
übergegangen wurde (#538).
- Es wurde ein Fehler behoben, bei dem
- Audio-Offload:
- Stellen Sie Ogg-ID-Header und Kommentar-Header-Seiten dem Bitstream für die Auslagerung der Opus-Wiedergabe gemäß RFC 7845 voran.
- Video:
- H.265/HEVC: Fehler beim Parsen der kurzen und langfristigen Referenzbildinformationen von SPS behoben.
- Text:
- CEA-608: Logik zum Abschneiden von Cues so ändern, dass nur sichtbarer Text berücksichtigt wird Bisher wurden bei der Begrenzung der Cue-Länge auf 32 Zeichen ein Einzug und ein Tab-Offset hinzugefügt, was gemäß der Spezifikation technisch korrekt war (#11019).
- IMA-Erweiterung:
- Aktualisierung der IMA SDK-Version auf Version 3.30.3.
- Sitzung:
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie einen Getter für den Zugriff bereit. 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
tun. Dazu verwenden sieAcceptedResultBuilder
, damit das benutzerdefinierte Layout für den Controller verfügbar ist, sobald die Verbindung hergestellt ist. - Beheben Sie Fälle, in denen
MediaLibraryServiceLegacyStub
einen Fehler an eineResult
gesendet hat, die dies nicht unterstützt, wodurch einUnsupportedOperationException
erzeugt wurde (#78). - Sie haben die Art und Weise korrigiert, wie
PlayerWrapper
eineVolumeProviderCompat
erstellt, indem SievolumeControlType
sowohl durch Legacy-Befehle (COMMAND_ADJUST_DEVICE_VOLUME
undCOMMAND_SET_DEVICE_VOLUME
) als auch neue Befehle (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
undCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554) ermitteln.
- Fügen Sie dem Status des Controllers ein benutzerdefiniertes Layout hinzu und stellen Sie einen Getter für den Zugriff bereit. Wenn sich das benutzerdefinierte Layout ändert, wird
Version 1.1.0
5. Juli 2023
- Allgemeine Bibliothek:
- Fügen Sie einen Unterdrückungsgrund für die ungeeignete Audioroute hinzu und starten Sie die Wiedergabe, wenn der Grund für die Unterdrückung zu lange geändert wird. (#15)
- Fügen Sie dem Player Befehle hinzu:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Fügen Sie dem Player überladene Methoden hinzu, mit denen Nutzer Lautstärke-Flags angeben können:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Fügen Sie
Builder
fürDeviceInfo
hinzu und verwerfen Sie den vorhandenen Konstruktor. - Fügen Sie
DeviceInfo.routingControllerId
hinzu, um die Routing-Controller-ID für Remote-Wiedergaben anzugeben. - Fügen Sie
Player.replaceMediaItem(s)
als Verknüpfung zum Hinzufügen und Entfernen von Elementen an derselben Position hinzu (#8046).
- ExoPlayer:
- ExoPlayer darf die Lautstärkemethoden für Geräte nur dann steuern, wenn dies explizit aktiviert ist. Mit
ExoPlayer.Builder.setDeviceVolumeControlEnabled
haben Sie Zugriff auf Folgendes:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
undsetDeviceVolume(int, int)
increaseDeviceVolume(int)
undincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
unddecreaseDeviceVolume(int, int)
- Füge
FilteringMediaSource
hinzu, um verfügbare Track-Typen aus einerMediaSource
zu filtern. - Unterstützung für das Einbeziehen von Common Media Client Data (CMCD) in die ausgehenden Anfragen der adaptiven Streamingformate DASH, HLS und SmoothStreaming. Die folgenden Felder
br
,bl
,cid
,rtp
undsid
wurden eingebunden (#8699). API-Struktur und API-Methoden:- Das CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
, um es zu aktivieren. - Alle Schlüssel sind standardmäßig aktiviert. Überschreiben Sie
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
, um herauszufiltern, welche Schlüssel protokolliert werden. - Überschreiben Sie
CmcdConfiguration.RequestConfig.getCustomData()
, um das benutzerdefinierte Schlüssel-Logging zu aktivieren.
- Das CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie
- Füge dem Manifest der Hauptdemo eine zusätzliche Aktion hinzu, um das Starten der Demo-App mit einer benutzerdefinierten
*.exolist.json
-Datei zu vereinfachen (#439). - Füge
ExoPlayer.setVideoEffects()
hinzu, umEffect
während der Videowiedergabe zu verwenden. - Aktualisieren Sie
SampleQueue
, umsourceId
alslong
und nicht alsint
zu speichern. Dadurch werden die Signaturen der öffentlichen MethodenSampleQueue.sourceId
undSampleQueue.peekSourceId
geändert. - Fügen Sie den
LoadControl
-MethodenshouldStartPlayback
undonTracksSelected
Parameter hinzu, die eine Verknüpfung dieser Methoden mit dem entsprechendenMediaPeriod
ermöglichen. - Sie können die Signatur von
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
ändern, indem Sie einen Zeitachsenparameter hinzufügen, der die Punkte mit den UIDs enthält, die als Schlüssel in der Zuordnung verwendet werden. Dies ist erforderlich, um Gleichzeitigkeitsprobleme bei mehrstufigen Livestreams zu vermeiden. EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
undBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
verwerfen. Stattdessen kann die Variante der Methoden ohnemediaTimeOffsetUs
aufgerufen werden. Beachten Sie, dass der Offset auch für die verworfenen Varianten nicht mehr zustartTimeUs
undendTimeUs
derMediaLoadData
-Objekte hinzugefügt wird, die vom Disponenten gesendet werden.- Benennen Sie
ExoTrackSelection.blacklist
inexcludeTrack
undisBlacklisted
inisTrackExcluded
um. - Beheben Sie das inkonsistente Verhalten zwischen
ExoPlayer.setMediaItem(s)
undaddMediaItem(s)
beim Aufruf für eine leere Playlist.
- ExoPlayer darf die Lautstärkemethoden für Geräte nur dann steuern, wenn dies explizit aktiviert ist. Mit
- Transformator:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
entfernen. Verwenden Sie stattdessenExoPlayerAssetLoader.Factory(MediaSource.Factory)
undTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
.Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
entfernen.- Es wurde ein Fehler behoben, bei dem die Transformation hängen blieb (was zu einer Muxer-Zeitüberschreitung führt), wenn das Ende des Videostreams in dem Moment signalisiert wurde, in dem die Verarbeitung eines Eingabe-Frames ausstand.
- Abfrage-Codecs über
MediaCodecList
anstelle vonfindDecoder/EncoderForFormat
-Dienstprogrammen, um die Unterstützung zu erweitern. - Entfernen Sie die B-Frame-Konfiguration in
DefaultEncoderFactory
, da sie auf einigen Geräten nicht funktioniert.
- Titelauswahl:
- Fügen Sie
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
hinzu. Diese ist standardmäßig deaktiviert. Wenn diese Option aktiviert ist, löstDefaultTrackSelector
eine neue Trackauswahl aus, sobald sich die Renderer-Funktionen ändern.
- Fügen Sie
- Extraktoren:
- Audio:
- Es wurde ein Fehler behoben, bei dem einige Wiedergaben fehlschlagen, wenn Tunneling aktiviert ist und
AudioProcessors
aktiv sind, z.B. beim lückenlosen Zuschneiden (#10847). - Kapseln Sie Opus-Frames in Ogg-Paketen für direkte Wiedergaben (Auslagerung).
- Mit Auslagerungsplanung die aktuelle Position im Ruhezustand extrapolieren.
- Füge
Renderer.release()
undAudioSink.release()
für die Freigabe der Ressourcen am Ende des Spielerlebenszyklus hinzu. - Änderungen der Audiofunktionen in
DefaultAudioSink
anhören. Fügen Sie dem Konstruktor vonDefaultAudioSink
den erforderlichen Parametercontext
hinzu. Damit wirdDefaultAudioSink
als Listener fürAudioCapabilitiesReceiver
registriert und das AttributaudioCapabilities
aktualisiert, wenn es über eine Funktionsänderung informiert wird. - Geben Sie Änderungen an Audiofunktionen über das neue Ereignis
onAudioCapabilitiesChanged
in derAudioSink.Listener
-Schnittstelle und die neue SchnittstelleRendererCapabilities.Listener
weiter, dieonRendererCapabilitiesChanged
-Ereignisse auslöst. - Fügen Sie
ChannelMixingAudioProcessor
hinzu, um Skalierung/Mischung auf Audiokanäle anzuwenden. - Fügen Sie den neuen Ganzzahlwert
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
zuDecoderDiscardReasons
hinzu, um den Audiodecoder zu verwerfen, wenn der Umgehungsmodus nach einer Änderung der Audiofunktionen möglich ist. - Unterstützung der direkten Wiedergabe für DTS Express und DTS:X hinzufügen (#335).
- Es wurde ein Fehler behoben, bei dem einige Wiedergaben fehlschlagen, wenn Tunneling aktiviert ist und
- Video:
- Legen Sie fest, dass
MediaCodecVideoRenderer
alsVideoSize
mit einer Breite und Höhe von 0 gemeldet wird, wenn der Renderer deaktiviert ist.Player.Listener.onVideoSizeChanged
wird entsprechend aufgerufen, wenn sichPlayer.getVideoSize()
ändert. Nach dieser Ä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 bestimmt wurde.
- Legen Sie fest, dass
- Digitale Rechteverwaltung:
- Reduzieren Sie die Sichtbarkeit mehrerer nur interner Methoden in
DefaultDrmSession
, die nicht von außerhalb des DRM-Pakets aufgerufen werden:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Reduzieren Sie die Sichtbarkeit mehrerer nur interner Methoden in
- Muxer:
- Fügen Sie eine neue Muxer-Bibliothek hinzu, mit der eine MP4-Containerdatei erstellt werden kann.
- IMA-Erweiterung:
- DASH-Livestreams für die dynamische Anzeigenbereitstellung über mehrere Zeiträume aktivieren. Die aktuelle Implementierung unterstützt die Suche in Livestreams noch nicht (#10912).
- Es wurde ein Fehler behoben, bei dem eine neue Anzeigengruppe in Livestreams eingefügt wird, da die berechnete Contentposition in aufeinanderfolgenden Zeitachsen leicht variiert.
- Sitzung:
- Fügen Sie die Hilfsmethode
MediaSession.getControllerForCurrentRequest
hinzu, um Informationen über den Controller abzurufen, der gerade einePlayer
-Methode aufruft. - Fügen Sie
androidx.media3.session.MediaButtonReceiver
hinzu, damit Apps die Wiederaufnahme der Wiedergabe mit Medienschaltflächenereignissen implementieren können, die z. B. von einem Bluetooth-Headset gesendet werden (#167). - Fügen Sie
MediaSession.Callback.onAddMediaItems
eine Standardimplementierung hinzu, damit die angeforderteMediaItems
anPlayer
übergeben werden kann, wenn sieLocalConfiguration
enthalten (z.B. URI) (#282). - In der Benachrichtigungsansicht für kompakte Medien für Android 12 und niedriger wurden die Schaltflächen „Suchen“ und „Weiter“ standardmäßig hinzugefügt (#410).
- Fügen Sie
MediaSession.Callback.onAddMediaItems
eine Standardimplementierung hinzu, damit die angeforderteMediaItems
anPlayer
übergeben werden kann, wenn sieLocalConfiguration
enthalten (z.B. URI) (#282). - In der Benachrichtigungsansicht für kompakte Medien für Android 12 und niedriger wurden die Schaltflächen „Suchen“ und „Weiter“ standardmäßig hinzugefügt (#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 schreiben.
- Fügen Sie die Util-Methoden
- RTSP-Erweiterung:
- DASH-Erweiterung:
- Entfernen Sie den Medienzeitversatz von
MediaLoadData.startTimeMs
undMediaLoadData.endTimeMs
für mehrjährige DASH-Streams. - Es wurde ein Fehler behoben, bei dem durch das erneute Vorbereiten einer mehrstufigen Live-Dash-Medienquelle ein
IndexOutOfBoundsException
erzeugt wurde (#10838).
- Entfernen Sie den Medienzeitversatz von
- HLS-Erweiterung:
- Fügen Sie
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
hinzu, um ein Zeitlimit für den Ladethread festzulegen, das auf die Initialisierung vonTimestampAdjuster
wartet. Wenn die Initialisierung nicht vor Ablauf der Zeitüberschreitung abgeschlossen ist, wird einPlaybackException
ausgelöst, um eine endlose Unterbrechung der Wiedergabe zu vermeiden. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
- Fügen Sie
- Testdienstprogramme:
- Prüfen Sie in
DataSourceContractTest
, ob die Groß- und Kleinschreibung beim URI-Schema ignoriert wird.
- Prüfen Sie in
- Entfernen Sie verworfene Symbole:
- Entfernen Sie
DefaultAudioSink
-Konstruktoren und verwenden Sie stattdessenDefaultAudioSink.Builder
. HlsMasterPlaylist
entfernen und stattdessenHlsMultivariantPlaylist
verwenden.Player.stop(boolean)
entfernen. Verwenden Sie stattdessenPlayer.stop()
undPlayer.clearMediaItems()
(wennreset
den Werttrue
hat).- Entfernen Sie zwei verworfene
SimpleCache
-Konstruktoren. Verwenden Sie einen nicht verworfenen Konstruktor, der stattdessen einenDatabaseProvider
verwendet, um die Leistung zu verbessern. - Entfernen Sie den
DefaultBandwidthMeter
-Konstruktor und verwenden Sie stattdessenDefaultBandwidthMeter.Builder
. - Entfernen Sie
DefaultDrmSessionManager
-Konstruktoren und verwenden Sie stattdessenDefaultDrmSessionManager.Builder
. - Entfernen Sie zwei verworfene
HttpDataSource.InvalidResponseCodeException
-Konstruktoren und verwenden Sie einen nicht verworfenen Konstruktor, der zusätzliche Felder(cause
,responseBody
) akzeptiert, um das Fehler-Logging zu verbessern. - Entfernen Sie
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
undDownloadHelper.forSmoothStreaming
und verwenden Sie stattdessenDownloadHelper.forMediaItem
. - Entfernen Sie den verworfenen
DownloadService
-Konstruktor und verwenden Sie einen nicht verworfenen Konstruktor mit der Option zum Angeben eineschannelDescriptionResourceId
-Parameters. - Entfernen Sie die verworfenen Stringkonstanten für Charsets (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
undUTF16LE_NAME
). Verwenden Sie stattdessen Kotlin-Charsets aus demkotlin.text
-Paket, demjava.nio.charset.StandardCharsets
odercom.google.common.base.Charsets
. - Entfernen Sie den verworfenen
WorkManagerScheduler
-Konstruktor und verwenden Sie einen nicht verworfenen Konstruktor, der stattdessen die Option enthält, einenContext
-Parameter anzugeben. - Entfernen Sie die verworfenen Methoden
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
undcreateSampleFormat
, die zum Instanziieren der KlasseFormat
verwendet wurden. Verwenden Sie stattdessenFormat.Builder
, um Instanzen vonFormat
zu erstellen. - Entfernen Sie die verworfenen Methoden
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
undcopyWithVideoSize
. Verwenden Sie stattdessenFormat.buildUpon()
und Setter-Methoden. - Entfernen Sie die verworfene
ExoPlayer.retry()
. Verwenden Sie stattdessenprepare()
. - Entfernen Sie den verworfenen
DefaultTrackSelector
-Konstruktor mit Null-Argumenten und verwenden Sie stattdessenDefaultTrackSelector(Context)
. - Entfernen Sie den verworfenen
OfflineLicenseHelper
-Konstruktor und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Entfernen Sie den verworfenen
DownloadManager
-Konstruktor. Verwenden Sie stattdessen den Konstruktor, der stattdessen einenExecutor
verwendet. - Entfernen Sie verworfene
Cue
-Konstruktoren und verwenden Sie stattdessenCue.Builder
. - Entfernen Sie den verworfenen
OfflineLicenseHelper
-Konstruktor und verwenden Sie stattdessenOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Entfernen Sie vier verworfene
AnalyticsListener
-Methoden:onDecoderEnabled
verwenden Sie stattdessenonAudioEnabled
und/oderonVideoEnabled
.onDecoderInitialized
verwenden, verwenden Sie stattdessenonAudioDecoderInitialized
und/oderonVideoDecoderInitialized
.onDecoderInputFormatChanged
verwenden, verwenden Sie stattdessenonAudioInputFormatChanged
und/oderonVideoInputFormatChanged
.onDecoderDisabled
verwenden Sie stattdessenonAudioDisabled
und/oderonVideoDisabled
.
- Entfernen Sie die eingestellten
Player.Listener.onSeekProcessed
undAnalyticsListener.onSeekProcessed
und verwenden Sie stattdessenonPositionDiscontinuity
mitDISCONTINUITY_REASON_SEEK
. - Entfernen Sie
ExoPlayer.setHandleWakeLock(boolean)
und verwenden Sie stattdessensetWakeMode(int)
. - Entfernen Sie das verworfene
DefaultLoadControl.Builder.createDefaultLoadControl()
. Verwenden Sie stattdessenbuild()
. - Entfernen Sie die verworfene
MediaItem.PlaybackProperties
und verwenden Sie stattdessenMediaItem.LocalConfiguration
. Das verworfene FeldMediaItem.playbackProperties
hat jetzt den TypMediaItem.LocalConfiguration
.
- Entfernen Sie
Version 1.1.0-rc01
21. Juni 2023
Verwenden Sie die stabile Version 1.1.0.
Version 1.1.0-beta01
7. Juni 2023
Verwenden Sie die stabile Version 1.1.0.
Version 1.1.0-alpha01
10. Mai 2023
Verwenden Sie die stabile Version 1.1.0.
Version 1.0.0
Version 1.0.2
18. Mai 2023
androidx.media3:media3-*:1.0.2
wurde veröffentlicht.
Version 1.0.2 enthält diese Commits.
Dieser Release entspricht dem Release ExoPlayer 2.18.7.
Diese Version enthält die folgenden Änderungen gegenüber Version 1.0.1:
- Kernbibliothek:
- Fügen Sie
Buffer.isLastSample()
hinzu, der angibt, obBuffer
das FlagC.BUFFER_FLAG_LAST_SAMPLE
enthält. - Ein Problem wurde behoben, bei dem der letzte Frame möglicherweise nicht gerendert wurde, wenn das letzte Beispiel mit Frames aus der Warteschlange entfernt wurde, ohne das Beispiel „Ende des Streams“ zu lesen. (#11079)
- Fügen Sie
- Extraktoren:
- Das Parsen von H.265 SPS in MPEG-TS-Dateien wurde korrigiert, indem die von RTSP- und MP4-Extraktoren bereits verwendete Parsing-Logik wiederverwendet wurde (#303).
- Text:
- SSA: UTF-16-Dateien werden unterstützt, wenn sie mit einer Bytereihenfolgemarkierung beginnen (#319).
- Sitzung:
- Es wurde ein Problem behoben, bei dem
MediaController
die verfügbaren Befehle nicht aktualisiert, wenn es mit einem Legacy-MediaSessionCompat
verbunden ist, der seine Aktionen aktualisiert. - Es wurde ein Fehler behoben, durch den
MediaLibraryService
keine Null für einen Aufruf von der System-UI anCallback.onGetLibraryRoot
mitparams.isRecent == true
in API 30 zurückgeben konnte (#355). - Beheben Sie das Speicherleck von
MediaSessionService
oderMediaLibraryService
(#346). - Es wurde ein Fehler behoben, bei dem eine kombinierte
Timeline
- und Positionsaktualisierung in einerMediaSession
dazu führen konnte, dass einMediaController
eineIllegalStateException
auslöst.
- Es wurde ein Problem behoben, bei dem
Version 1.0.1
18. April 2023
androidx.media3:media3-*:1.0.1
wurde veröffentlicht.
Version 1.0.1 enthält diese Commits.
Dieser Release entspricht dem Release ExoPlayer 2.18.6.
- Kernbibliothek:
- Setzen Sie die Ziel-Livestream-Überschreibung beim Suchen auf die Standardposition zurück (#11051).
- Es wurde ein Fehler behoben, bei dem leere Beispielstreams in den Medien dazu führten, dass die Wiedergabe hängen blieb.
- Sitzung:
- Es wurde ein Fehler behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
MediaSessionCompat
veröffentlicht wurden, zu einer Ausnahme inMediaController
führen (#290). - Fügen Sie der Legacy-Version
MediaControllerCompat.Callback.onSessionEvent
die fehlende Weiterleitung vonMediaSession.broadcastCustomCommand
hinzu (#293). - Es wurde ein Fehler behoben, bei dem durch das Aufrufen von
MediaSession.setPlayer
die verfügbaren Befehle nicht aktualisiert wurden. - Es wurde ein Problem behoben, bei dem
TrackSelectionOverride
-Instanzen, die von einemMediaController
gesendet wurden, ignoriert werden, wenn sie auf eine Gruppe mitFormat.metadata
verweisen (#296). - Ein Problem wurde behoben, bei dem
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
für den Zugriff auf Metadaten über das Legacy-MediaSessionCompat
verfügbar sein muss. - Ein Problem wurde behoben, bei dem
MediaSession
-Instanzen in einem Hintergrundthread Abstürze verursachen, wenn sie inMediaSessionService
verwendet werden (#318). - Ein Problem wurde behoben, bei dem ein Medientastenempfänger von der Bibliothek deklariert wurde, ohne dass dies von der App beabsichtigt war (#314).
- Es wurde ein Fehler behoben, bei dem mehrere identische Warteschlangenelemente, die von einem Legacy-
- DASH:
- Fehlerbehebung bei leeren Segmentzeitachsen (#11014)
- RTSP:
- Versuchen Sie es noch einmal mit TCP, wenn die RTSP-Einrichtung mit UDP mit dem RTSP-Fehler 461 Nicht unterstützter Transport (#11069) fehlschlägt.
Version 1.0.0
22. März 2023
androidx.media3:media3-*:1.0.0
wurde veröffentlicht.
Version 1.0.0 enthält diese Commits.
Dieser Release entspricht dem Release ExoPlayer 2.18.5.
Seit 1.0.0 bis rc02 gibt es keine Änderungen.
Version 1.0.0-rc02
2. März 2023
androidx.media3:media3-*:1.0.0-rc02
wurde veröffentlicht.
Version 1.0.0-rc02 enthält diese Commits.
Dieser Release entspricht dem Release ExoPlayer 2.18.4.
- Kernbibliothek:
- Downloads:
- Nutzen Sie die maximale Differenz der Startzeit von zwei Segmenten, die konfigurierbar in
SegmentDownloader
und abgeleiteten Klassen zusammengeführt werden sollen (#248).
- Nutzen Sie die maximale Differenz der Startzeit von zwei Segmenten, die konfigurierbar in
- Audio:
- Video:
- Ordnen Sie das HEVC HDR10-Format
HEVCProfileMain10HDR10
stattHEVCProfileMain10
zu. - Wir fügen eine Problemumgehung für ein Geräteproblem auf Chromecast mit Google TV und Lenovo M10 FHD Plus hinzu, durch die AVC-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#10898).
- Probleme mit der Frame-Release-Leistung bei der Wiedergabe von Medien mit einer Framerate, die deutlich höher ist als die Bildschirmaktualisierungsrate, wurden behoben.
- Ordnen Sie das HEVC HDR10-Format
- Besetzung:
- Das vorübergehende
STATE_IDLE
beim Übergang zwischen Medienelementen wurde korrigiert (#245).
- Das vorübergehende
- RTSP:
- Fangen Sie die Sperre aus, die beim Parsen ungültiger RTSP-Antworten-Nachrichten ausgelöst wird (#10971).
- Sitzung:
- Es wurde ein Fehler behoben, bei dem die Schaltfläche für die Wiedergabe/Pause für Benachrichtigungen nicht mit dem Player-Status aktualisiert wurde (#192).
- IMA-Erweiterung:
- Es wurde ein Fehler behoben, der verhinderte, dass Streams für die dynamische Anzeigenbereitstellung ohne Anzeigen gestartet wurden, weil das erste
LOADED
-Ereignis (und im Fall ohne Anzeigen das einzige) nicht empfangen wurde.
- Es wurde ein Fehler behoben, der verhinderte, dass Streams für die dynamische Anzeigenbereitstellung ohne Anzeigen gestartet wurden, weil das erste
Version 1.0.0-rc01
16. Februar 2023
androidx.media3:media3-*:1.0.0-rc01
wurde veröffentlicht.
Version 1.0.0-rc01 enthält diese Commits.
Dieser Release entspricht dem Release ExoPlayer 2.18.3.
- Kernbibliothek:
- Passen Sie die Logik des Renderer-Sortiervorgangs an, um die Einstellungen von
MediaCodecSelector
beizubehalten, auch wenn ein Decoder angibt, dass die Medien möglicherweise nicht optimal wiedergegeben werden können. Bei der Standardauswahl wird beispielsweise ein Hardwaredecoder mit ausschließlicher Funktionsunterstützung gegenüber einem Softwaredecoder bevorzugt, der das Format vollständig unterstützt (#10604). - Fügen Sie
ExoPlayer.Builder.setPlaybackLooper
hinzu, die einen bereits vorhandenen Wiedergabethread für eine neue ExoPlayer-Instanz festlegt. - Löschen von Hilfsprogrammen im Download-Manager zulassen (#10776)
- Fügen Sie
BasePlayer.seekTo
einen Parameter hinzu, um auch den Befehl anzugeben, der für die Suche verwendet wird. - Design beim Laden von Drawables unter API 21 und höher verwenden (#220).
- Fügen Sie
ConcatenatingMediaSource2
hinzu, damit mehrere Medienelemente in einem einzigen Fenster kombiniert werden können (#247).
- Passen Sie die Logik des Renderer-Sortiervorgangs an, um die Einstellungen von
- Extraktoren:
- Wenn beim Parsen der Trak-Atome in der Beispieltabelle (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt, wird ein
ParserException
anstelle vonNullPointerException
ausgelöst. - Wenn Sie in fMP4 direkt zu einem Synchronisierungsframe springen, werden Stichproben korrekt übersprungen (#10941).
- Wenn beim Parsen der Trak-Atome in der Beispieltabelle (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt, wird ein
- Audio:
- Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
AudioTrack
bei direkten Wiedergaben (Passthrough) zu berechnen.
- Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für
- Text:
- Korrigieren Sie
TextRenderer
und übergeben Sie einen ungültigen (negativen) Index anSubtitle.getEventTime
, wenn eine Untertiteldatei keine Hinweise enthält. - SubRip: Unterstützung für UTF-16-Dateien, wenn sie mit einer Bytereihenfolgemarkierung beginnen
- Korrigieren Sie
- Metadaten:
- Parst mehrere durch Nullen getrennte Werte aus ID3-Frames, wie in ID3 Version 2.4 zulässig.
- Fügen Sie
MediaMetadata.mediaType
hinzu, um den in den Metadaten beschriebenen Inhaltstyp oder Ordnertyp anzugeben. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordnertyp wird im nächsten Release eingestellt.
- DASH:
- Fügen Sie ein vollständiges Parsen für Bildanpassungssätze hinzu, einschließlich der Kachelanzahl (#3752).
- UI:
- Korrigieren Sie das verworfene
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
, damit Sichtbarkeitsänderungen an den registrierten Listener übergeben werden (#229). - Korrigiere die Reihenfolge der Steuerelemente des mittleren Players in
PlayerView
, wenn du ein Rechts-nach-links-Layout (RTL-Layout) verwendest (#227).
- Korrigieren Sie das verworfene
- Sitzung:
- Füge abstrakte
SimpleBasePlayer
-Elemente hinzu, um diePlayer
-Schnittstelle für benutzerdefinierte Player zu implementieren. - Fügen Sie eine Hilfsmethode hinzu, um das Plattformsitzungstoken in Media3
SessionToken
zu konvertieren (#171). - Verwenden Sie
onMediaMetadataChanged
, um Aktualisierungen der Plattformmediensitzung auszulösen (#219). - Fügen Sie die Mediensitzung als Argument von
getMediaButtons()
derDefaultMediaNotificationProvider
hinzu und verwenden Sie zur besseren Übersichtlichkeit unveränderliche Listen (#216). - Füge den
onSetMediaItems
-Callback-Listener hinzu, um dieMediaItem
-Liste, den Startindex und die Position nach Sitzung vor der Einstellung auf den Player zu ändern/festlegen (#156). - Vermeiden Sie die Erkennung von Doppeltippen bei Ereignissen, die keine Bluetooth-Medienschaltflächen sind (#233).
- Machen Sie
QueueTimeline
im Fall eines unsicheren Legacy-Sitzungsstatus robuster (#241).
- Füge abstrakte
- Metadaten:
- Parst mehrere durch Nullen getrennte Werte aus ID3-Frames, wie in ID3 Version 2.4 zulässig.
- Fügen Sie
MediaMetadata.mediaType
hinzu, um den in den Metadaten beschriebenen Inhaltstyp oder Ordnertyp anzugeben. - Fügen Sie
MediaMetadata.isBrowsable
als Ersatz fürMediaMetadata.folderType
hinzu. Der Ordnertyp wird im nächsten Release eingestellt.
- Cast-Erweiterung:
- Verbessern Sie die Version des Cast SDK auf Version 21.2.0.
- IMA-Erweiterung:
- Entfernen Sie den Player-Listener von
ImaServerSideAdInsertionMediaSource
im Anwendungsthread, um Threading-Probleme zu vermeiden. - Fügen Sie dem
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
das AttributfocusSkipButtonWhenAvailable
hinzu, damit die Schaltfläche „Überspringen“ auf Fernsehern hervorgehoben wird, und legen Sie sie standardmäßig auf „true“ fest. - Fügen Sie für die programmatische Anfrage die Methode
focusSkipButton()
zurImaServerSideAdInsertionMediaSource.AdsLoader
hinzu, damit die Schaltfläche „Überspringen“ hervorgehoben wird. - Aktualisierung der IMA SDK-Version auf 3.29.0.
- Entfernen Sie den Player-Listener von
- 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
wurde veröffentlicht.
Version 1.0.0-beta03 enthält diese Commits.
Dieser Release entspricht dem Release ExoPlayer 2.18.2.
- Kernbibliothek:
- Fügen Sie
ExoPlayer.isTunnelingEnabled
hinzu, um zu prüfen, ob Tunneling für die aktuell ausgewählten Tracks aktiviert ist (#2518). - Fügen Sie
WrappingMediaSource
hinzu, um das Verpacken eines einzelnenMediaSource
zu vereinfachen (#7279). - Verwerfen Sie den Back-Zwischenspeicher, bevor die Wiedergabe aufgrund von unzureichendem verfügbaren Speicher unterbrochen wird.
- Schließen Sie den Tracing-Block „doSomeWork“, wenn die Auslagerung aktiviert ist.
- Ein Sitzungstracking-Problem mit schnellen Suchvorgängen in
PlaybackStatsListener
wurde behoben (#180). - Fehlenden
onMediaItemTransition
-Callback senden, wennseekToNext
oderseekToPrevious
in einer Playlist mit einem einzelnen Element aufgerufen wird (#10667). - Fügen Sie
Player.getSurfaceSize
hinzu. Damit wird die Größe der Oberfläche zurückgegeben, auf der das Video gerendert wird. - Es wurde ein Fehler behoben, bei dem das Entfernen von Listenern während der Veröffentlichung des Players zu einem
IllegalStateException
führen konnte (#10758).
- Fügen Sie
- Erstellen:
- Erzwingen Sie die Mindestanzahl von
compileSdkVersion
, um Kompilierungsfehler zu vermeiden (#10684). - Vermeiden Sie einen Veröffentlichungsblock, wenn er in einem anderen Gradle-Build enthalten ist.
- Erzwingen Sie die Mindestanzahl von
- Titelauswahl:
- Andere Tracks als Dolby Vision bevorzugen, wenn das Display diese nicht unterstützt. (#8944)
- Downloads:
- Eine mögliche Endlosschleife in
ProgressiveDownloader
, die durch einen gleichzeitigen Download und die gleichzeitige Wiedergabe mit demselbenPriorityTaskManager
verursacht wurde, wurde behoben (#10570). - Downloadbenachrichtigung sofort anzeigen (#183).
- Begrenzen Sie parallele Downloadentfernungen auf 1, um eine übermäßige Threaderstellung zu vermeiden (#10458).
- Eine mögliche Endlosschleife in
- Video:
- Probieren Sie einen anderen Decoder für Dolby Vision aus, wenn das Display diese nicht unterstützt. (#9794)
- Audio:
- Verwenden Sie
SingleThreadExecutor
für die Veröffentlichung vonAudioTrack
-Instanzen, um Fehler aufgrund von unzureichendem Arbeitsspeicher zu vermeiden, wenn mehrere Spieler gleichzeitig freigegeben werden (#10057). - Fügt
AudioOffloadListener.onExperimentalOffloadedPlayback
für den AudioTrack-Auslagerungsstatus hinzu. (#134) AudioTrackBufferSizeProvider
zu einer öffentlichen Schnittstelle machen.- Fügen Sie
ExoPlayer.setPreferredAudioDevice
hinzu, um das bevorzugte Audioausgabegerät festzulegen (#135). - Benennen Sie
androidx.media3.exoplayer.audio.AudioProcessor
inandroidx.media3.common.audio.AudioProcessor
um. - Ordnen Sie 8- und 12-Kanal-Audio den 7.1- und 7.1.4-Kanalmasken bzw. in allen Android-Versionen zu (#10701).
- Verwenden Sie
- Metadaten:
MetadataRenderer
kann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstellen Sie eine Instanz mitMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
, um anzugeben, ob der Renderer Metadaten vorzeitig oder synchron mit der Playerposition ausgibt.
- Digitale Rechteverwaltung:
- Sie können einen Fehler in der ClearKey-Implementierung für Android 13 umgehen, der eine nicht leere, aber ungültige Lizenz-URL zurückgibt.
setMediaDrmSession failed: session not opened
-Fehler beim Wechseln zwischen DRM-Schemas in einer Playlist (z.B. Widevine zu ClearKey) wurde behoben.
- Text:
- CEA-608: Achten Sie darauf, dass Dienstwechselbefehle in Feld 2 korrekt verarbeitet werden (#10666).
- DASH:
- Parsen Sie
EventStream.presentationTimeOffset
aus Manifesten (#10460).
- Parsen Sie
- UI:
- Aktuelle Überschreibungen des Players gemäß Voreinstellung in
TrackSelectionDialogBuilder
verwenden (#10429).
- Aktuelle Überschreibungen des Players gemäß Voreinstellung in
- Sitzung:
- Achten Sie darauf, dass Befehle immer in der richtigen Reihenfolge ausgeführt werden, auch wenn einige Befehle eine asynchrone Auflösung erfordern (#85).
- Fügen Sie
DefaultMediaNotificationProvider.Builder
hinzu, umDefaultMediaNotificationProvider
-Instanzen zu erstellen. Der Builder kann die Benachrichtigungs-ID, die Benachrichtigungskanal-ID und den vom Anbieter verwendeten Namen des Benachrichtigungskanals konfigurieren. Fügen Sie außerdem die MethodeDefaultMediaNotificationProvider.setSmallIcon(int)
hinzu, um das kleine Symbol für Benachrichtigungen festzulegen. (#104) - Achten Sie darauf, dass Befehle, die vor
MediaController.release()
gesendet wurden, nicht gelöscht werden (#99). SimpleBitmapLoader
kann Bitmap ausfile://
-URIs laden (#108).- Eine Assertion wurde korrigiert, die verhindert, dass
MediaController
in einem bestimmten Zeitraum eine Anzeige durchsuchen kann (#122). - Wenn die Wiedergabe beendet ist, wird
MediaSessionService
vom Vordergrund angehalten und eine Benachrichtigung angezeigt, dass die Wiedergabe des zuletzt wiedergegebenen Medienelements neu gestartet werden soll (#112). - Starten Sie keinen Dienst im Vordergrund mit einem ausstehenden Intent für eine Pause (#167).
- Das Logo, das mit der Benachrichtigung verknüpft ist, die von
DefaultNotificationProvider
in API 26 und API 27 erstellt wurde, wird manuell ausgeblendet. Bei API 28 und höher wird das Logo automatisch ausgeblendet (#131). - Es wurde ein Fehler behoben, bei dem eine zweite Binder-Verbindung von einer Legacy-MediaSession zu einem Media3-MediaController zu IllegalStateExceptions führt (#49).
- RTSP:
- IMA:
- Fügen Sie eine Zeitüberschreitung für das Laden von Anzeigeninformationen hinzu, um Fälle zu handhaben, in denen das IMA SDK beim Laden einer Anzeige hängen bleibt (#10510).
- Verhindern Sie das Überspringen von Mid-Roll-Anzeigen bei der Suche zum Ende des Inhalts (#10685).
- Berechnen Sie die Fensterdauer für Livestreams mit serverseitig eingefügten Anzeigen korrekt, z. B. für die dynamische Anzeigenbereitstellung mit IMA (#10764).
- FFmpeg-Erweiterung:
- Fügen Sie neu erforderliche Flags hinzu, um FFmpeg-Bibliotheken mit NDK 23.1.7779620 und höher zu verknüpfen (#9933).
- AV1-Erweiterung:
- Aktualisieren Sie die CMake-Version, um Inkompatibilitäten mit den neuesten Android Studio-Releases zu vermeiden (#9933).
- Cast-Erweiterung:
- Implementiere
getDeviceInfo()
, umCastPlayer
bei der Steuerung der Wiedergabe mit einemMediaController
identifizieren zu können (#142).
- Implementiere
- Transformator:
- Fügen Sie einen Muxer-Watchdog-Timer hinzu, um festzustellen, ob das Generieren einer Ausgabestichprobe zu langsam ist.
- Entfernen Sie verworfene Symbole:
Transformer.Builder.setOutputMimeType(String)
entfernen. Diese Funktion wurde entfernt. Der MIME-Typ ist immer MP4, wenn der Standard-Muxer verwendet wird.
Version 1.0.0-beta02
21. Juli 2022
androidx.media3:media3-*:1.0.0-beta02
wurde veröffentlicht.
Version 1.0.0-beta02 enthält diese Commits.
Dieser Release entspricht dem Release ExoPlayer 2.18.1.
- Kernbibliothek:
- Das Ändern von
ShuffleOrder
mitExoPlayer.setShuffleOrder
muss zu einem Aufruf vonPlayer.Listener#onTimelineChanged
mitreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
führen (#9889). - Bei Progressive-Medien nur die ausgewählten Tracks an der gepufferten Position einschließen (#10361).
- Benutzerdefinierte Protokollierung für die gesamte ExoPlayer-Logausgabe zulassen (#9752).
- Die Implementierung von
setDataSourceFactory
inDefaultMediaSourceFactory
wurde korrigiert, die in einigen Fällen nicht funktionierte (#116).
- Das Ändern von
- Extraktoren:
- DASH:
- Parsen Sie die ClearKey-Lizenz-URL aus den Manifesten (#10246).
- UI:
- Achten Sie darauf, dass TalkBack die aktuell aktive Geschwindigkeitsoption im Menü für die Wiedergabesteuerung angibt (#10298).
- RTSP:
- Fügen Sie die VP8-Verarbeitung fragmentierter Pakete hinzu (#110).
- Leanback-Erweiterung:
- Überwachen Sie
playWhenReady
-Änderungen inLeanbackAdapter
(10420).
- Überwachen Sie
- Besetzung:
Version 1.0.0-beta01
16. Juni 2022
androidx.media3:media3-*:1.0.0-beta01
wurde veröffentlicht.
Version 1.0.0-beta01 enthält diese Commits.
Dies entspricht dem Release ExoPlayer 2.18.0.
- Kernbibliothek:
- Unterstützung für Android-Plattformdiagnosen über
MediaMetricsManager
aktivieren. ExoPlayer leitet Wiedergabeereignisse und Leistungsdaten an die Plattform weiter. Dies hilft bei der Bereitstellung von Systemleistungs- und Debugging-Informationen auf dem Gerät. Diese Daten können auch von Google erhoben werden, wenn der Nutzer des Geräts die Freigabe von Nutzungs- und Diagnosedaten aktiviert hat. Apps können mitExoPlayer.Builder.setUsePlatformDiagnostics(false)
verhindern, dass sie zur Plattformdiagnose für ExoPlayer beitragen. - Es wurde ein Fehler behoben, bei dem Tracks bei der Verwendung von
MergingMediaSource
zu oft zurückgesetzt werden, z. B. beim Sideloading von Untertiteln und Ändern der ausgewählten Untertitel mitten in der Wiedergabe (#10248). - Erkennung des 5G-NSA-Netzwerktyps auf API 29 und API 30 beenden. Bei dieser Wiedergabe wird von einem 4G-Netzwerk ausgegangen.
- Die Übergabe von
null
anMediaSource.Factory.setDrmSessionManagerProvider
undMediaSource.Factory.setLoadErrorHandlingPolicy
ist nicht zulässig. Instanzen vonDefaultDrmSessionManagerProvider
undDefaultLoadErrorHandlingPolicy
können bei Bedarf explizit übergeben werden. - Fügen Sie
MediaItem.RequestMetadata
hinzu, um Metadaten darzustellen, die zum Abspielen von Medien erforderlich sind, wenn das genaueLocalConfiguration
nicht bekannt ist. Entfernen Sie auchMediaMetadata.mediaUrl
, da dies jetzt inRequestMetadata
enthalten ist. - Füge
Player.Command.COMMAND_SET_MEDIA_ITEM
hinzu, damit Spieler das Festlegen eines einzelnen Elements zulassen können.
- Unterstützung für Android-Plattformdiagnosen über
- Titelauswahl:
- Fassen Sie die Klasse
TrackSelectionOverrides
inTrackSelectionParameters
zusammen und stufen SieTrackSelectionOverride
zu einer Klasse der obersten Ebene hoch. - Benennen Sie
TracksInfo
inTracks
undTracksInfo.TrackGroupInfo
inTracks.Group
um.Player.getCurrentTracksInfo
undPlayer.Listener.onTracksInfoChanged
wurden ebenfalls inPlayer.getCurrentTracks
undPlayer.Listener.onTracksChanged
umbenannt. Dazu gehört auch, dass der MethodennamePlayer.Listener.onTracksChanged
nicht mehr eingestellt wird, allerdings mit anderen Parametertypen. - Ändern Sie
DefaultTrackSelector.buildUponParameters
undDefaultTrackSelector.Parameters.buildUpon
so, dassDefaultTrackSelector.Parameters.Builder
anstelle der verworfenenDefaultTrackSelector.ParametersBuilder
zurückgegeben wird. - Fügen Sie
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
hinzu. Dies ist standardmäßig aktiviert. Wenn diese Option aktiviert ist, bevorzugtDefaultTrackSelector
Audiotracks, deren Kanalanzahl die Ausgabefunktionen des Geräts nicht überschreitet. Auf Handheld-Geräten bevorzugtDefaultTrackSelector
Stereo/Mono gegenüber Mehrkanal-Audioformaten, es sei denn, das Mehrkanalformat kann Spatialized (Android 12L oder höher) oder ein Dolby-Surround-Sound-Format sein. Auf Geräten, die die Audioräumlichkeit unterstützen, überwachtDefaultTrackSelector
außerdem Änderungen an den Spatializer-Eigenschaften und löst darüber eine neue Trackauswahl aus. Geräte mit dem UI-Modustelevision
sind von diesen Einschränkungen ausgeschlossen. Das Format mit der höchsten Kanalanzahl wird bevorzugt. Zum Aktivieren dieser Funktion muss dieDefaultTrackSelector
-Instanz mit einerContext
erstellt werden.
- Fassen Sie die Klasse
- Video:
- Benennen Sie
DummySurface
inPlaceholderSurface
um. - AV1-Support zu
MediaCodecVideoRenderer.getCodecMaxInputSize
hinzufügen.
- Benennen Sie
- Audio:
- LG AC3-Audiodecoder verwenden, um den nicht standardmäßigen MIME-Typ zu bewerben
- Ändern Sie den Rückgabetyp von
AudioAttributes.getAudioAttributesV21()
vonandroid.media.AudioAttributes
in eine neueAudioAttributesV21
-Wrapper-Klasse, um eine langsame ART-Überprüfung für API < 21 zu verhindern. - Fragen Sie die Plattform ab (API 29 oder höher) oder nehmen Sie an, dass die Anzahl der Audiocodierungskanäle für Audiopassthrough nicht festgelegt ist, wenn das Format für die Anzahl der Audiokanäle nicht festgelegt ist. Dies ist bei der HLS-Vorbereitung ohne Blöcke (10204) der Fall.
- Konfigurieren Sie
AudioTrack
mit der KanalmaskeAudioFormat.CHANNEL_OUT_7POINT1POINT4
, wenn der Decoder 12-Kanal-PCM-Audio ausgibt (#10322).
- DRM
- Achten Sie darauf, dass die DRM-Sitzung immer korrekt aktualisiert wird, wenn direkt nach einer Formatänderung (10274) eine Suche durchgeführt wird.
- Text:
- Ändern Sie
Player.getCurrentCues()
, sodassCueGroup
anstelle vonList<Cue>
zurückgegeben wird. - SSA: Unterstützung der Stileinstellung
OutlineColour
, wennBorderStyle == 3
(d.h.OutlineColour
legt den Hintergrund des Cues fest) (#8435). - CEA-708: Parst Daten in mehrere Dienstblöcke und ignoriert Blöcke, die nicht mit der aktuell ausgewählten Dienstnummer verknüpft sind.
- Entferne
RawCcExtractor
. Das Format wurde nur zur Verarbeitung eines Google-internen Untertitelformats verwendet.
- Ändern Sie
- Extraktoren:
- UI:
- Die Zustellung von Ereignissen an
OnClickListener
s, die fürPlayerView
festgelegt wurden, wurde korrigiert, wennuseController=false
gilt (#9605). Auch die Übermittlung von Ereignissen anOnLongClickListener
für alle Ansichtskonfigurationen wurde korrigiert. - Eine Folge von Touch-Ereignissen, die die Grenzen von
PlayerView
vorACTION_UP
überschreiten, wurde fälschlicherweise als Klick behandelt (#9861). Das Problem wurde behoben. - Ein
PlayerView
-Problem mit der Barrierefreiheit wurde behoben, bei dem durch Tippen die Wiedergabe ein- und ausgeschaltet werden konnte, anstatt die Steuerelemente auszublenden (#8627). - Schreiben Sie
TrackSelectionView
undTrackSelectionDialogBuilder
so um, dass sie mit derPlayer
-Schnittstelle und nicht mitExoPlayer
arbeiten. Dadurch können die Ansichten mit anderenPlayer
-Implementierungen verwendet werden und die Abhängigkeit vom UI-Modul vom ExoPlayer-Modul wird aufgehoben. Das ist eine sensationelle Veränderung. - Zeigen Sie keine erzwungenen Texttracks in der
PlayerView
-Trackauswahl an und lassen Sie einen geeigneten Tracks mit erzwungenem Text ausgewählt, wenn „Keine“ ausgewählt ist (#9432).
- Die Zustellung von Ereignissen an
- DASH:
- Parst die Kanalanzahl aus DTS-
AudioChannelConfiguration
-Elementen. Dadurch wird der Audiopassthrough für DTS-Streams wieder aktiviert (#10159). - Übergabe von
null
anDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
nicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Parst die Kanalanzahl aus DTS-
- HLS:
- Fallback auf die Chunk-Vorbereitung, wenn das Attribut CODECS der Playlist nicht den Audio-Codec enthält (#10065).
- Die Übergabe von
null
anHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
undHlsMediaSource.Factory.setPlaylistTrackerFactory
ist nicht zulässig. Instanzen vonDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
oder ein Verweis aufDefaultHlsPlaylistTracker.FACTORY
können bei Bedarf explizit übergeben werden.
- Unterbrechungsfreies Streaming:
- Übergabe von
null
anSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
nicht zulassen. Instanzen vonDefaultCompositeSequenceableLoaderFactory
können bei Bedarf explizit übergeben werden.
- Übergabe von
- RTSP:
- Fügen Sie einen RTP-Leser für H263 hinzu (#63).
- Fügen Sie einen RTP-Reader für MPEG4 hinzu (#35).
- Fügen Sie einen RTP-Leser für HEVC hinzu (#36).
- RTP-Lesegerät für AMR hinzufügen. Derzeit werden nur nicht verschränkte AMR-Streams mit Monokanal unterstützt. Zusammengesetzte AMR-RTP-Nutzlast wird nicht unterstützt. (#46)
- Fügen Sie einen RTP-Leser für VP8 hinzu (#47).
- Fügen Sie einen RTP-Reader für WAV hinzu (#56).
- Der RTSP-Basis-Autorisierungsheader wurde korrigiert. (#9544)
- Beenden Sie die Überprüfung von SDP-Pflichtfeldern, da ExoPlayer sie nicht benötigt (#10049).
- Beim Parsen des RTSP-Timings wurde eine geprüfte Ausnahme ausgelöst (#10165).
- Fügen Sie einen RTP-Leser für VP9 hinzu (#47).
- Fügen Sie einen RTP-Leser für OPUS hinzu (#53).
- Datenquellen:
- Benennen Sie
DummyDataSource
inPlaceholderDataSource
um. - Behelfslösung für die Verarbeitung von OkHttp-Unterbrechungen.
- Benennen Sie
- Sitzung:
- Ersetzen Sie
MediaSession.MediaItemFiller
durchMediaSession.Callback.onAddMediaItems
, um die asynchrone Auflösung von Anfragen zu ermöglichen. - Unterstützen Sie
setMediaItems(s)
-Methoden, wennMediaController
eine Verbindung zu einer Legacy-Mediensitzung herstellt. - Entfernen Sie
MediaController.setMediaUri
undMediaSession.Callback.onSetMediaUri
. Die gleiche Funktionalität kann mitMediaController.setMediaItem
undMediaSession.Callback.onAddMediaItems
erreicht werden. - Leiten Sie alte
MediaController
-Aufrufe zur Wiedergabe von Medien anMediaSession.Callback.onAddMediaItems
statt anonSetMediaUri
weiter. - Füge
MediaNotification.Provider
undDefaultMediaNotificationProvider
hinzu, um die Benachrichtigung anzupassen. - Füge
BitmapLoader
undSimpleBitmapLoader
zum Herunterladen von Artwork-Bildern hinzu. - Fügen Sie
MediaSession.setCustomLayout()
hinzu, um für Abwärtskompatibilität mit der Legacy-Sitzung zu sorgen. - Fügen Sie
MediaSession.setSessionExtras()
hinzu, um die Funktionsparität mit der Legacy-Sitzung zu erzielen. - Benennen Sie
MediaSession.MediaSessionCallback
inMediaSession.Callback
um,MediaLibrarySession.MediaLibrarySessionCallback
inMediaLibrarySession.Callback
undMediaSession.Builder.setSessionCallback
insetCallback
. - Korrigieren Sie NPE in
MediaControllerImplLegacy
(#59). - Aktualisieren Sie die Informationen zur Sitzungsposition bei einer Änderung der Zeitachse(#51).
- Fehler bei NPE in
MediaControllerImplBase
nach Freigabe des Controllers (#74)
- Ersetzen Sie
- Anzeigenwiedergabe / IMA:
- Verringern Sie die Polling-Rate von Anzeigen von alle 100 ms auf alle 200 ms, um den Empfehlungen des Media Rating Council (MRC) zu entsprechen.
- FFmpeg-Erweiterung:
- Aktualisieren Sie die CMake-Version auf
3.21.0+
, um einen CMake-Fehler zu vermeiden, der dazu führt, dass die Gradle-Synchronisierung von AndroidStudio fehlschlägt (#9933).
- Aktualisieren Sie die CMake-Version auf
- Entfernen Sie verworfene Symbole:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
entfernen. Verwenden Sie stattdessenPlayer.Listener.onTracksChanged(Tracks)
.- Entfernen Sie
Player.getCurrentTrackGroups
undPlayer.getCurrentTrackSelections
. Verwenden Sie stattdessenPlayer.getCurrentTracks
. Sie können auch weiterhinExoPlayer.getCurrentTrackGroups
undExoPlayer.getCurrentTrackSelections
verwenden, obwohl diese Methoden nicht mehr unterstützt werden. - Entfernen Sie die Konstanten
DownloadHelper
,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
undDEFAULT_TRACK_SELECTOR_PARAMETERS
. Verwenden Sie nach Möglichkeit stattdessengetDefaultTrackSelectorParameters(Context)
und andernfallsDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - Entfernen Sie den Konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Verwende stattdessenDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. Transformer.Builder.setContext
entfernen. DasContext
sollte stattdessen an denTransformer.Builder
-Konstruktor übergeben werden.
Version 1.0.0-alpha03
14. März 2022
androidx.media3:media3-*:1.0.0-alpha03
wurde veröffentlicht.
Version 1.0.0-alpha03 enthält diese Commits.
Dies entspricht dem Release ExoPlayer 2.17.1.
- Audio:
- Fehler beim Überprüfen der Audiofunktionen für Dolby Atmos (E-AC3-JOC) in HLS behoben.
- Extraktoren:
- FMP4: Ein Problem wurde behoben, bei dem Emsg-Beispielmetadaten für Streams, die sowohl v0- als auch v1-Emsg-Atome enthalten, in der falschen Reihenfolge ausgegeben wurden (#9996).
- Text:
- Korrigieren Sie die Interaktion von
SingleSampleMediaSource.Factory.setTrackId
undMediaItem.SubtitleConfiguration.Builder.setId
, um das FeldSubtitleConfiguration
zu priorisieren und auf den WertFactory
zurückzugreifen, wenn er nicht festgelegt ist (#10016).
- Korrigieren Sie die Interaktion von
- Anzeigenwiedergabe:
- Audio-Unterläufe zwischen den Anzeigenzeiträumen in Live-Streams der HLS-SAI-Technologie korrigieren.
Version 1.0.0-alpha02
2. März 2022
androidx.media3:media3-*:1.0.0-alpha02
wurde veröffentlicht.
Version 1.0.0-alpha02 enthält diese Commits.
Dies entspricht dem Release ExoPlayer 2.17.0.
- Kernbibliothek:
- Fügen Sie die geschützte Methode
DefaultRenderersFactory.getCodecAdapterFactory()
hinzu, damit abgeleitete Klassen vonDefaultRenderersFactory
, diebuildVideoRenderers()
oderbuildAudioRenderers()
überschreiben, auf die Codec-Adapter-Factory zugreifen und sie an von ihnen erstellteMediaCodecRenderer
-Instanzen übergeben können. - Geben Sie die ICY-Headerfelder
name
undgenre
anMediaMetadata.station
bzw.MediaMetadata.genre
weiter, sodass sie die Anwendung überPlayer.Listener.onMediaMetadataChanged()
erreichen (#9677). - Entfernen Sie Null-Schlüssel aus
DefaultHttpDataSource#getResponseHeaders
. - Ruhemodus starten und wiederholen, wenn beim Erstellen einer
MediaCodec
-Instanz ein Fehler auftritt. Damit lässt sich ein Problem umgehen, das auf einigen Geräten auftritt, wenn eine Oberfläche von einem sicheren Codec zu einem anderen Codec gewechselt wird (#8696). - Fügen Sie
MediaCodecAdapter.getMetrics()
hinzu, damit Nutzer Messwertdaten vonMediaCodec
abrufen können. (#9766) - Beheben Sie das Problem der Maven-Abhängigkeitsauflösung (#8353).
- Deaktivieren Sie die automatische Anpassung der Geschwindigkeit für Livestreams, die weder Funktionen mit niedriger Latenz noch eine Nutzeranfrage zur Einstellung der Geschwindigkeit haben (#9329).
- Benennen Sie
DecoderCounters#inputBufferCount
inqueuedInputBufferCount
um. SimpleExoPlayer.renderers
als privat festlegen. Auf Renderer kann überExoPlayer.getRenderer
zugegriffen werden.- Einige
AnalyticsListener.EventFlags
-Konstantenwerte wurden aktualisiert, damit sie den Werten inPlayer.EventFlags
entsprechen. - Teilen Sie
AnalyticsCollector
in eine Schnittstelle und eine Standardimplementierung auf, damit sie von R8 entfernt werden kann, wenn eine App sie nicht benötigt.
- Fügen Sie die geschützte Methode
- Titelauswahl:
- Unterstützung bevorzugter Videorollen-Flags bei der Trackauswahl (#9402).
- Aktualisieren Sie die Auswahllogik für Videotracks so, dass bevorzugte MIME-Typen und Rollenflags berücksichtigt werden, wenn mehrere Videotracks für die Anpassung ausgewählt werden (#9519).
- Aktualisieren Sie die Auswahllogik für Video- und Audiotracks so, dass nur Formate für die adaptive Auswahl ausgewählt werden, die dieselbe Decoder- und Hardwareunterstützung haben (#9565).
- Aktualisieren Sie die Auswahllogik für die Videospur, um effizientere Codecs zu bevorzugen, wenn mehrere Codecs von primären, hardwarebeschleunigten Decodern unterstützt werden (#4835).
- Sie sollten Einstellungen für Audioinhalte (z. B. den Standardaudiospur oder einen Titel, der mit der Sprache des Systems übereinstimmt) gegenüber technischen Einschränkungen für die Titelauswahl (z. B. bevorzugter MIME-Typ oder maximale Kanalanzahl) bevorzugen.
- Es wurde ein Problem mit der Titelauswahl behoben, bei dem andere Trackgruppen desselben Typs beim Überschreiben einer Trackgruppe nicht deaktiviert wurden (#9675).
- Ein Problem mit der Trackauswahl wurde behoben, bei dem eine Mischung aus Überschreibungen von nicht leeren und leeren Tracks nicht richtig angewendet wurde (#9649).
- Doppelte
TrackGroup
s in einemTrackGroupArray
verbieten.TrackGroup
-Elemente lassen sich immer unterscheidbar machen, indem imTrackGroup
-Konstruktor einid
festgelegt wird. Dadurch wird ein Absturz behoben, der beim Fortsetzen der Wiedergabe nach dem Hintergrund der App mit einer aktiven Titel-Überschreibung auftritt (#9718). - Ändern Sie die Logik in
AdaptiveTrackSelection
so, dass bei ausreichender Netzwerkbandbreite eine Qualitätssteigerung möglich ist, auch wenn die Wiedergabe sehr nahe am Live-Edge erfolgt (#9784).
- Video:
- Korrigieren Sie die Decoder-Fallback-Logik für Dolby Vision, um bei Bedarf einen kompatiblen H264-/H265-Decoder zu verwenden.
- Audio:
- Korrigieren Sie die Decoder-Fallback-Logik für Dolby Atmos (E-AC3-JOC), damit bei Bedarf ein kompatibler E-AC3-Decoder verwendet wird.
- Ändern Sie die
AudioCapabilities
APIs so, dassAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
stattnull
explizit übergeben werden muss. - Erlaubt die Anpassung der Berechnung der Puffergröße
AudioTrack
durch Einfügen einesAudioTrackBufferSizeProvider
inDefaultAudioSink
. (#8891) - Erstellen Sie
AudioTrack
noch einmal, wenn die angeforderte Puffergröße größer als 1 MB war. (#9712)
- Extraktoren:
- Text:
- Fügen Sie das Feld
MediaItem.SubtitleConfiguration.id
hinzu, das in das FeldFormat.id
des aus der Konfiguration erstellten Untertitel-Tracks übertragen wird (#9673). - Grundlegende Unterstützung für WebVTT-Untertitel in Matroska-Containern (#9886)
- Verhindern Sie, dass
Cea708Decoder
mehr als die deklarierte Größe eines Dienstblocks liest.
- Fügen Sie das Feld
- Digitale Rechteverwaltung:
playbackLooper
ausDrmSessionManager.(pre)acquireSession
entfernen. WennDrmSessionManager
von einer Anwendung in einer benutzerdefiniertenMediaSource
verwendet wird, muss stattdessenplaybackLooper
anDrmSessionManager.setPlayer
übergeben werden.
- Anzeigenwiedergabe / IMA:
- Unterstützung für die dynamische Anzeigenbereitstellung von IMA (#8213) hinzufügen.
- Fügen Sie
AdPlaybackState
eine Methode hinzu, um das Zurücksetzen einer Anzeigengruppe zu ermöglichen, sodass die Anzeigengruppe noch einmal wiedergegeben werden kann (#9615). - Wiedergabegeschwindigkeit von 1,0 während der Anzeigenwiedergabe erzwingen (#9018)
- Ein Problem wurde behoben, bei dem eine Anzeigengruppe, die nicht geladen werden konnte, zu einer sofortigen Zurücksetzung der Wiedergabe führte (#9929).
- UI:
- DASH:
- Fügen Sie geparste wichtige und ergänzende Attribute zu
Representation
hinzu (#9579). - Die Track-Rolle
forced-subtitle
unterstützen (#9727). - Die Track-Rolle
main
nicht mehr alsC.SELECTION_FLAG_DEFAULT
interpretieren. - Korrigieren Sie die Basis-URL-Ausschlusslogik für Manifeste, in denen der DVB-Namespace nicht deklariert ist (#9856).
- Relative
MPD.Location
-URLs müssen unterstützt werden (#9939).
- Fügen Sie geparste wichtige und ergänzende Attribute zu
- HLS:
- Füllen Sie
Format.label
für reine Audio-HLS-Streams korrekt aus (#9608). - Verwenden Sie standardmäßig die Vorbereitung ohne Knoten, um die Startzeit zu verkürzen. Wenn deine Wiedergaben gemuxte Untertitel enthalten, die nicht in der Masterplaylist deklariert sind, solltest du sie der Masterplaylist hinzufügen, damit sie für die Wiedergabe verfügbar sind, oder die chunklose Vorbereitung mit
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
deaktivieren. - Sie unterstützen die genaue Keyframe-Suche in HLS (#2882).
- Füllen Sie
- RTSP:
- Geben Sie eine Client-API an, um den
SocketFactory
zu überschreiben, der für eine Serververbindung verwendet wird (#9606). - Bevorzugen Sie die Authentifizierungsmethode DIGEST gegenüber der BASIC-Methode, wenn beide vorhanden sind (#9800).
- Verarbeiten, wenn kein RTSP-Track-Timing verfügbar ist (#9775).
- Ignorieren Sie ungültige RTP-Info-Headerwerte (#9619).
- Geben Sie eine Client-API an, um den
- Transformator:
- Erhöhen Sie die erforderliche Mindest-API-Version auf 21.
- Mit
TransformationException
werden jetzt Fehler beschrieben, die während einer Transformation auftreten. - Fügen Sie
TransformationRequest
hinzu, um die Transformationsoptionen anzugeben. - Registrierung mehrerer Listener zulassen.
- Problem behoben, bei dem Transformer hängen blieb, wenn die Codec-Ausgabe teilweise gelesen wurde.
- Das potenzielle NPE in
Transformer.getProgress
wurde behoben, wenn die Muxer-Wellen freigegeben werden. - Fügen Sie eine Demo-App zum Anwenden von Transformationen hinzu.
- MediaSession-Erweiterung:
MediaSessionConnector
löscht die Playlist jetzt standardmäßig beim Anhalten. Apps, die die Playlist beibehalten möchten, könnensetClearMediaItemsOnStop(false)
für den Connector aufrufen.
- Cast-Erweiterung:
- FFmpeg-Erweiterung:
- Stellen Sie sicher, dass
build_ffmpeg.sh
von den bin-Dienstprogrammen von LLVM und nicht von dem von GNU abhängig ist (#9933).
- Stellen Sie sicher, dass
- Kompatibilität mit Android 12:
- Aktualisiere die Cast-Erweiterung, um eine Abhängigkeit von
com.google.android.gms:play-services-cast-framework:20.1.0
zu erhalten. Frühere Versionen vonplay-services-cast-framework
sind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind, und stürzen beim Erstellen vonPendingIntent
s mit einemIllegalArgumentException
ab (#9528).
- Aktualisiere die Cast-Erweiterung, um eine Abhängigkeit von
- Entfernen Sie verworfene Symbole:
Player.EventListener
entfernen. Verwende stattdessenPlayer.Listener
.- Entfernen Sie
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
undMediaSourceFactory#setDrmUserAgent
. Verwenden Sie stattdessenMediaSourceFactory#setDrmSessionManagerProvider
. MediaSourceFactory#setStreamKeys
entfernen. Verwenden Sie stattdessenMediaItem.Builder#setStreamKeys
.MediaSourceFactory#createMediaSource(Uri)
entfernen. Verwenden Sie stattdessenMediaSourceFactory#createMediaSource(MediaItem)
.- Entfernen Sie
setTag
ausDashMediaSource
,HlsMediaSource
undSsMediaSource
. Verwende stattdessenMediaItem.Builder#setTag
. DashMediaSource#setLivePresentationDelayMs(long, boolean)
entfernen. Verwenden SieMediaItem.Builder#setLiveConfiguration
undMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
, um das Manifest zu überschreiben, oderDashMediaSource#setFallbackTargetLiveOffsetMs
, um einen Fallback-Wert anzugeben.(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
entfernen. Die Thread-Erzwingung kann nicht mehr deaktiviert werden.- Entferne
ActionFile
undActionFileUpgradeUtil
. Verwenden Sie ExoPlayer 2.16.1 oder älter, umActionFileUpgradeUtil
zu verwenden, um Legacy-Aktionsdateien mitDefaultDownloadIndex
zusammenzuführen. ProgressiveMediaSource#setExtractorsFactory
entfernen. Verwenden Sie stattdessen den KonstruktorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
.- Entfernen Sie
ProgressiveMediaSource.Factory#setTag
undProgressiveMediaSource.Factory#setCustomCacheKey
. Verwenden Sie stattdessenMediaItem.Builder#setTag
undMediaItem.Builder#setCustomCacheKey
. - Entfernen Sie die Konstruktoren
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
undDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Verwenden Sie stattdessen den KonstruktorDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
undDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Entfernen Sie alle öffentlichen
CronetDataSource
-Konstruktoren. Verwenden Sie stattdessenCronetDataSource.Factory
.
- Ändern Sie die folgende
IntDefs
nur in@Target(TYPE_USE)
. Dies kann dazu führen, dass die Kompilierung von Nutzungen in Kotlin nicht mehr funktioniert. Das lässt sich beheben, indem Sie die Annotation verschieben, um den Typ (Int
) zu annotieren.@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(im Paketcom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(imcom.google.android.exoplayer2.extractor.flac
-Paket)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Version 1.0.0-alpha01
27. Oktober 2021
androidx.media3:media3-*:1.0.0-alpha01
wurde veröffentlicht.
Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Media3 ist die neue Plattform für unterstützende Bibliotheken wie ExoPlayer. Die erste Alphaversion umfasst frühe, funktionale Implementierungen von Bibliotheken zur Implementierung von Medienanwendungsfällen, darunter:
- ExoPlayer, ein Mediaplayer auf Anwendungsebene für Android, der einfach angepasst und erweitert werden kann.
- Mediensitzungsfunktion zur Anzeige und Steuerung der Wiedergaben Dieses neue Sitzungsmodul verwendet dieselbe
Player
-Schnittstelle wie ExoPlayer. - UI-Komponenten zum Erstellen von Benutzeroberflächen für die Medienwiedergabe
- Module, die Funktionen in anderen Bibliotheken zur Verwendung mit ExoPlayer zusammenfassen, z. B. Anzeigenbereitstellung über das IMA SDK.
Weitere Informationen finden Sie im GitHub-Projekt zu Media3.
ExoPlayer wurde zuvor in einem separaten ExoPlayer-GitHub-Projekt gehostet. Bei Media3 lautet der Paketname androidx.media3.exoplayer
. Wir planen, das ExoPlayer GitHub-Projekt noch eine Zeit lang zu warten und zu veröffentlichen, damit die Anwendungen Zeit für die Migration zu Media3 haben. Media3 bietet Ersatz für alle ExoPlayer-Module, mit Ausnahme der Legacy-Erweiterungen „media2“ und „mediasession“, die durch das neue Modul media3-session
ersetzt werden. Dies ermöglicht eine direkte Integration zwischen Playern und Mediensitzungen, ohne dass eine Adapter-/Connector-Klasse verwendet werden muss.