Medien 3

Supportbibliotheken für Medienanwendungsfälle.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpha-Release
26. Juni 2024 1.3.1 - 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:

Groovig

dependencies {
    def media3_version = "1.3.1"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.3.1"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

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

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. 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-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, ob Exoplayer.release() aufgerufen wurde.
    • Fügen Sie ExoPlayer.Builder.setMaxSeekToPreviousPositionMs hinzu, um die maximale Position zu konfigurieren, für die seekToPrevious() zum vorherigen Element sucht (#1425).
  • Transformator:
    • Feld „ExportResult.processedInputs“ entfernen. Wenn Sie dieses Feld für Codec-Details verwenden, verwenden Sie stattdessen DefaultDecoderFactory.listener. Im Falle einer Codec-Ausnahme finden Sie Codec-Details in ExportException.codecInfo.
  • Extraktoren:
    • Probleme mit der Extraktion des PCM-Audioformats in AVI-Containern wurden behoben.
  • Bild:
    • Erlauben Sie null als Parameter für ExoPlayer.setImageOutput, eine zuvor festgelegte ImageOutput zu löschen.
  • 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 mit OverlaySettings.setHdrLuminanceMultiplier angepasst werden.
  • 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 in SessionResult und LibraryResult 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 das PlaybackStateCompat.getExtras() eines Media1-Controllers weiter.
    • Ordnen Sie schwerwiegende und nicht schwerwiegende Fehler der Plattformsitzung und zurück zu. Ein PlaybackException wird einem schwerwiegenden Fehlerstatus des PlaybackStateCompat zugeordnet. Ein SessionError, der mit MediaSession.sendError(ControllerInfo, SessionError) an den Media Notification-Controller gesendet wird, ist einem nicht schwerwiegenden Fehler in PlaybackStateCompat zugeordnet. Das bedeutet, dass Fehlercode und Nachricht festgelegt sind, der Status der Plattformsitzung jedoch von STATE_ERROR abweicht.
  • UI:
    • Unterstützung für die Bildanzeige zu PlayerView hinzufügen, wenn eine Verbindung mit einem ExoPlayer besteht (#1144).
    • Passen Sie verschiedene Symbole in PlayerControlView über XML-Attribute an, um unterschiedliche Drawables pro PlayerView-Instanz zuzulassen, anstatt globale Überschreibungen zu verwenden (#1200).
  • 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 konstanten Bundleable.Creator<Foo> CREATOR-Felder. Aufrufer sollten stattdessen für jeden Typ die Methoden Bundle toBundle() und static 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 und SimpleBasePlayer.handleSeek, anstatt sie zu ignorieren. Wenn Sie diese Methoden in einem benutzerdefinierten Player implementieren, müssen Sie diese zusätzlichen Aufrufe möglicherweise mit mediaItemIndex == 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ür MediaItem-Assets, die kein Bild sind, ignoriert wird (wie dokumentiert).
  • ExoPlayer:
    • Fügen Sie reset zu BasePreloadManager hinzu, um alle Holds freizugeben, während die Preload-Manager-Instanz beibehalten wird.
    • Fügen Sie ExoPlayer.setPriority (und Builder.setPriority) hinzu, um den in PriorityTaskManager 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 die DefaultPreloadManager- und die benutzerdefinierte PreloadMediaSource.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 zu PreloadMediaSource 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 in onSourcePrepared und onPrepared in onTracksSelected in PreloadMediaSource.PreloadControl um. Benennen Sie außerdem die IntDefs in DefaultPreloadManager.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. Ein Renderer kann diese Methode implementieren, um an ExoPlayer die Dauer zurückzugeben, die die Wiedergabe dauern muss, damit der Renderer vorankommen kann. Wenn ExoPlayer mit experimentalSetDynamicSchedulingEnabled festgelegt ist, ruft ExoPlayer 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 durch MediaCodecRenderer verfügbar sind. MediaCodecRenderer signalisiert ExoPlayer beim Empfang dieser Callbacks. Wenn ExoPlayer auf experimentalSetDynamicSchedulingEnabled gesetzt ist, plant ExoPlayer die Work Loop, während Renderer vorankommen können.
    • Verwenden Sie die Datenklasse für LoadControl-Methoden anstelle einzelner Parameter.
  • 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 durch androidx.media3.muxer.Muxer und entfernen Sie androidx.media3.transformer.Muxer.
    • Fehler beim Laden von HEIC-Bildern aus Inhalts-URI-Schemas behoben (#1373)
    • Passe die Dauer des Audiotracks in AudioGraphInput an, um die AV-Synchronisierung zu verbessern.
  • 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 Frame Info 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 Sie AudioTrack.stop() aufrufen, damit AudioTrack.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 auch TextRenderer.experimentalSetLegacyDecodingEnabled(true) aufgerufen werden. In der Dokumentation zur Anpassung erfahren Sie, wie Sie diese Komponenten in eine ExoPlayer-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 stattdessen SubtitleParser (und SubtitleParser.Factory anstelle von SubtitleDecoderFactory) zu implementieren.
    • PGS: Die Decodierung der Lauflänge wurde korrigiert, um 0 als Farbindex anstelle eines literalen Farbwerts aufzulösen (#1367).
    • CEA-708: rowLock-Wert ignorieren. Die CEA-708-E S-2023-Spezifikation besagt, dass sowohl rowLock als auch columnLock unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden sollte. Die columnLock-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 Version 1.3.0-rc01 versehentlich rückgängig gemacht. Dieser Fehler wurde behoben, sodass die Änderung wieder vorhanden ist.
    • 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-Tags TSO2, TSOA und TSOP falsch zugeordnet (#1302).
    • Das Lesen von numerischen MP4-Tags (/iTunes) für gnre (genre) und tmpo (Tempo) wurde korrigiert, wenn der Wert mehr als ein Byte lang ist.
    • Übergeben Sie den ID3-Frame TCON an MediaMetadata.genre (#1305).
  • Bild:
    • Nicht quadratische DASH-Miniaturansichtsraster werden jetzt unterstützt (#1300).
    • AVIF wird ab API 34 unterstützt.
  • Datenquelle:
    • Erlaubt es ByteArrayDataSource, einen URI während open() in ein Byte-Array aufzulösen, anstatt bei der Erstellung hartcodiert zu werden (#1405).
  • Digitale Rechteverwaltung:
    • Festlegen von LoadErrorHandlingPolicy für DefaultDrmSessionManagerProvider zulassen (#1271).
  • Auswirkung:
    • Es wurde ein Fehler behoben, bei dem TimestampWrapper bei Verwendung mit ExoPlayer#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.
  • IMA-Erweiterung:
    • Promote die API, die erforderlich ist, damit Apps stabil Anzeigenstreams für die dynamische Anzeigenbereitstellung wiedergeben können.
    • Fügen Sie replaceAdTagParameters(Map <String, String>) zu ImaServerSideAdInsertionMediaSource.AdLoader hinzu, damit 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, wenn data://-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 in MediaDescriptionCompat 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 (siehe MediaSession.getMediaNotificationControllerInfo()) wird der benutzerdefinierte Fehler verwendet, um den PlaybackState der Plattformsitzung auf einen Fehlerstatus mit den angegebenen Fehlerinformationen zu aktualisieren (#543).
  • Cronet-Erweiterung:
    • Korrigieren Sie SocketTimeoutException in CronetDataSource. 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).
  • 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 ein IndexOutOfBoundsException oder ein IllegalArgumentException 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 und IllegalArgumentException führte.
  • DASH-Erweiterung:
    • Es wurde ein Fehler behoben, bei dem die erneute Vorbereitung eines Livestreams mit mehreren Zeiträumen ein IndexOutOfBoundsException auslösen konnte (#1329).
    • Unterstützung für dashif:Laurl-Lizenz-URLs hinzugefügt (#1345).
  • Cast-Erweiterung:
    • Es wurde ein Fehler behoben, bei dem der Albumtitel von MediaQueueItem in den Künstler im Media3-Medienelement konvertiert wurde (#1255).
  • Demo-App:
    • Festlegen des Wiederholungsmodus mit Intent-Argumenten über die Befehlszeile zulassen (#1266).
  • Entfernen Sie verworfene Symbole:
    • Entfernen Sie die Methode setContentTypePredicate(Predicate) aus DefaultHttpDataSource, OkHttpDataSource und CronetDataSource. Verwenden Sie stattdessen die entsprechende Methode für jede XXXDataSource.Factory.
    • Entfernen Sie die OkHttpDataSource-Konstruktoren und OkHttpDataSourceFactory. Verwende stattdessen OkHttpDataSource.Factory.
    • PlayerMessage.setHandler(Handler) entfernen. Verwenden Sie stattdessen setLooper(Looper).
    • Feld „Timeline.Window.isLive“ entfernen. Verwenden Sie stattdessen die Methode isLive().
    • Entfernen Sie DefaultHttpDataSource-Konstruktoren. Verwenden Sie stattdessen DefaultHttpDataSource.Factory.
    • DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS entfernen. Verwenden Sie stattdessen DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.
    • MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean) entfernen. Verwende stattdessen MediaCodecInfo.canReuseCodec(Format, Format).
    • Entfernen Sie die Methoden DrmSessionManager.DUMMY und getDummyDrmSessionManager(). Verwende stattdessen DrmSessionManager.DRM_UNSUPPORTED.
    • Entfernen Sie AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format) und VideoRendererEventListener.onVideoInputFormatChanged(Format). Verwenden Sie stattdessen die Überlastungen, die einen DecoderReuseEvaluation verwenden.
    • Entfernen Sie die Konstanten RendererSupport.FormatSupport IntDef und FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE und FORMAT_UNSUPPORTED_TYPE. Verwenden Sie stattdessen die entsprechenden IntDef- und Konstanten in androidx.media3.common.C (z.B. C.FORMAT_HANDLED).

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 ihren rankingData definierten Prioritäten koordiniert. Erweitern Sie diesen Kurs, um Anpassungen vorzunehmen. Fügen Sie DefaultPreloadManager hinzu. Damit werden mit PreloadMediaSource Medienbeispiele der Quellen in den Arbeitsspeicher geladen und eine Ganzzahl rankingData verwendet, die den Index eines Elements auf der Benutzeroberfläche angibt.
    • Füge den meisten LoadControl-Methoden PlayerId hinzu, um LoadControl-Implementierungen zur Unterstützung mehrerer Spieler zu aktivieren.
    • Entferne Buffer.isDecodeOnly() und C.BUFFER_FLAG_DECODE_ONLY. Sie müssen dieses Flag nicht festlegen, da Renderer und Decodierer basierend auf dem Zeitstempel entscheiden, Puffer zu überspringen. Bei benutzerdefinierten Renderer-Implementierungen sollte geprüft werden, ob die Pufferzeit mindestens BaseRenderer.getLastResetPositionUs() beträgt, um zu entscheiden, ob eine Stichprobe angezeigt werden soll. Bei benutzerdefinierten SimpleDecoder-Implementierungen kann bei Bedarf isAtLeastOutputStartTimeUs geprüft werden oder andere Zwischenspeicher mit DecoderOutputBuffer.shouldBeSkipped markiert werden, um sie zu überspringen.
    • Lässt zu, dass von TargetPreloadStatusControl.getTargetPreloadStatus(T) ein Nullwert zurückgegeben wird, um anzugeben, dass kein MediaSource mit dem angegebenen rankingData vorab geladen werden soll.
    • remove(MediaSource) zu BasePreloadManager hinzufügen.
  • Transformator:
    • Fügen Sie audioConversionProcess und videoConversionProcess zu ExportResult hinzu und geben Sie an, wie der jeweilige Track in der Ausgabedatei erstellt wurde.
    • 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.
  • Video:
    • Ein Problem wurde behoben, bei dem Listener.onRenderedFirstFrame() zu früh erscheint, wenn während der Wiedergabe die Oberfläche gewechselt wird.
  • Datenquelle:
    • Implementieren Sie die Unterstützung für android.resource://package/id-Rohressourcen-URIs, bei denen sich package vom Paket der aktuellen Anwendung unterscheidet. Dies 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 den DataSpec-Konstruktoren nicht null ist. Für diesen Parameter wurde bereits angegeben, dass er nicht null ist.
  • Auswirkung:
    • Unterstützung mehrerer Geschwindigkeitsänderungen innerhalb derselben EditedMediaItem oder Composition in SpeedChangeEffect.
    • 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 Sie OverlaySettings.Builder.setOverlayFrameAnchor() verwenden, können Sie die x- und y-Werte umdrehen, indem Sie sie mit -1 multiplizieren.
  • Sitzung:
    • Ändern Sie den Standardwert von CommandButton.enabled in true und achten Sie darauf, dass der Wert für Controller 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 in onTaskRemoved() beendet werden muss (#1219).
    • Füge MediaSessionService.pauseAllPlayersAndStopSelf() hinzu. Damit kannst du bequem die Wiedergabe aller Sitzungen anhalten und stopSelf aufrufen, um den Lebenszyklus von MediaSessionService zu beenden.
    • Überschreiben Sie MediaSessionService.onTaskRemoved(Intent), um eine sichere Standardimplementierung bereitzustellen, bei der der Dienst im Vordergrund ausgeführt wird, wenn die Wiedergabe noch läuft, oder den Dienst andernfalls unterbricht.
  • Downloads:
    • Achten Sie darauf, dass DownloadHelper keine unveröffentlichten Renderer-Instanzen durchläuft, die schließlich zum Absturz einer App mit IllegalStateException: Too many receivers, total of 1000, registered for pid führen können (#1224).
  • Testdienstprogramme:
    • Implementieren Sie onInit() und onRelease() in FakeRenderer.
    • Ändern Sie die TestPlayerRunHelper.runUntil/playUntil-Methoden so, dass sie bei nicht schwerwiegenden Fehlern fehlschlagen, z.B. bei solchen, die an AnalyticsListener.onVideoCodecError gemeldet wurden. Verwenden Sie die neue Methodenkette TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX(), um dieses Verhalten zu deaktivieren.
  • Demo-App:
    • Verwende DefaultPreloadManager in der kurzen Demo-App.
  • Entfernen Sie verworfene Symbole:
    • CronetDataSourceFactory entfernen. Verwenden Sie stattdessen CronetDataSource.Factory.
    • Entfernen Sie einige DataSpec-Konstruktoren. Verwende stattdessen DataSpec.Builder.

Version 1.3.0

Version 1.3.1

11. April 2024

androidx.media3:media3-*:1.3.1 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.
  • 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ür DefaultVideoFrameProcessor.Factory.Builder.build() hinzufügen (#1187).
  • Transformator:
    • Es wurde eine Problemumgehung für die Ausnahme hinzugefügt, die ausgelöst wurde, weil MediaMuxer negative Präsentationszeitstempel vor API 30 nicht unterstützt.
  • Titelauswahl:
    • DefaultTrackSelector: 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 wie XING und VBRI.
    • 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 aus WebvttParser.parse erstellen (#1177).
  • Digitale Rechteverwaltung:
    • Sie können ein NoSuchMethodError umgehen, das auf einigen Android 14-Geräten vom MediaDrm-Framework anstelle von ResourceBusyException oder NotProvisionedException ausgelöst werden kann (#1145).
  • Auswirkung:
    • Verbesserte PQ- und SDR-Tonzuordnung durch Konvertierung von Farbräumen.
  • Sitzung:
    • Ein Problem wurde behoben, bei dem die aktuelle Position zurückspringt, wenn der Controller das aktuelle Element ersetzt (#951).
    • Es wurde ein Problem behoben, bei dem MediaMetadata nur mit extras-Werten ungleich null nicht zwischen Media-Controllern und Sitzungen übertragen wurde (#1176).
  • UI:
    • Fallback zum Einbeziehen des Sprachnamens des Audiotracks, wenn Locale keinen Anzeigenamen identifizieren kann (#988).
  • DASH-Erweiterung:
    • Füllen Sie alle Label-Elemente aus dem Manifest in Format.labels aus (#1054).
  • 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 sich package 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 einzelnen Uri in AdPlaybackState.
    • 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 auch artworkData in MediaMetadata.Builder.populate(MediaMetadata) aus, wenn mindestens einer von ihnen nicht null ist (#964).
  • ExoPlayer:
    • Fügen Sie PreloadMediaSource und PreloadMediaPeriod hinzu, damit Apps eine Inhaltsmedienquelle vor der Wiedergabe an einer bestimmten Startposition vorab laden können. PreloadMediaSource bereitet die Contentmedienquelle für den Empfang von Timeline 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 sie PreloadMediaSource.PreloadControl implementieren und die vorab geladene Quelle für die Wiedergabe auf den Player festlegen.
    • Fügen Sie ExoPlayer.setImageOutput hinzu, damit Apps ImageRenderer.ImageOutput festlegen können.
    • DefaultRenderersFactory stellt dem Spieler jetzt standardmäßig ein ImageRenderer mit null ImageOutput und ImageDecoder.Factory.DEFAULT 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, eine HttpDataSource, 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 benutzerdefinierte CompositeSequenceableLoaderFactory implementieren.
    • Ein Problem wurde behoben, bei dem Metadaten aus diesem Element bei einer Wiederholung gleichzeitig gelöscht werden (#1007).
    • Benennen Sie die experimentalSetSubtitleParserFactory-Methoden in BundledChunkExtractor.Factory und DefaultHlsExtractorFactory in setSubtitleParserFactory um und lassen Sie die Weitergabe von null nicht zu. Verwenden Sie die neuen experimentalParseSubtitlesDuringExtraction(boolean)-Methoden, um das Parsing-Verhalten zu steuern.
    • Die während der Extraktion verwendete SubtitleParser.Factory kann jetzt angepasst werden. Dies kann mit MediaSource.Factory.setSubtitleParserFactory() erreicht werden.
    • Fügen Sie allen aus MergingMediaSource generierten Format.id-Feldern ein Quellpräfix hinzu. Damit lässt sich ermitteln, von welcher Quelle ein Format 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).
  • 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 ist false. Das bedeutet, dass die Auswahl eines Videotracks priorisiert wird.
  • Extraktoren:
    • Fügen Sie dem MP4-Extraktor ein zusätzliches AV1C-Parsing hinzu, um ColorInfo.colorSpace-, ColorInfo.colorTransfer- und ColorInfo.colorRange-Werte abzurufen (#692).
    • MP3: Verwenden Sie eine konstante Bitrate (CBR)-Suche nach Dateien mit einem Info-Header (die CBR-Entsprechung des Xing-Headers). Bisher wurde die Suchtabelle aus dem Info-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).
  • Audio:
    • Verbessern Sie den Algorithmus zum Überspringen der Stille mit einer gleichmäßigen Erhöhung der Lautstärke; minimale Stille sowie eine längere natürliche Stilldauer (#7423).
    • Die übersprungene Stille wird genauer gemeldet. (#1035).
  • Video:
    • Ändern Sie den MediaCodecVideoRenderer-Konstruktor, der ein VideoFrameProcessor.Factory-Argument annimmt, und ersetzen Sie ihn durch einen Konstruktor, der ein VideoSinkProvider-Argument annimmt. Anwendungen, die eine benutzerdefinierte VideoFrameProcessor.Factory einfügen möchten, können eine CompositingVideoSinkProvider instanziieren, die das benutzerdefinierte VideoFrameProcessor.Factory verwendet, und den Anbieter der Videosenke an MediaCodecVideoRenderer übergeben.
  • Text:
    • Die Serialisierung von Bitmaphinweisen wurde korrigiert, um den Tried to marshall a Parcel that contained Binder objects-Fehler bei Verwendung von DefaultExtractorsFactory.setTextTrackTranscodingEnabled zu beheben (#836).
    • CEA-708: rowLock-Wert ignorieren. Die CEA-708-E S-2023-Spezifikation besagt, dass sowohl rowLock als auch columnLock unabhängig von den im Stream vorhandenen Werten als wahr angenommen werden sollte. Die columnLock-Unterstützung ist nicht implementiert, daher wird faktisch davon ausgegangen, dass sie immer „false“ sind.
  • Bild:
    • Unterstützung für DASH-Miniaturansichten hinzufügen Rasterbilder werden zugeschnitten und einzelne Miniaturansichten werden ImageOutput kurz vor ihrer Präsentationszeit bereitgestellt.
  • 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 oder DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys deaktiviert werden.
  • 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 nur Context anstelle von MediaLibraryService 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.
  • Demo-App:
    • Fügen Sie ein kurzes Demomodul hinzu, um die Verwendung von PreloadMediaSource mit dem Anwendungsfall für kurze Inhalte zu demonstrieren.

Version 1.3.0-rc01

22. Februar 2024

Verwenden Sie die stabile Version 1.3.0.

Version 1.3.0-beta01

7. Februar 2024

Verwenden Sie die stabile Version 1.3.0.

Version 1.3.0-alpha01

15. Januar 2024

Verwenden Sie die stabile Version 1.3.0.

Version 1.2.0

Version 1.2.1

9. Januar 2024

  • ExoPlayer:
    • Ein Problem wurde behoben, bei dem manuelle Suchen außerhalb des LiveConfiguration.min/maxOffset-Bereichs den Offset immer wieder auf min/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ür bufferedDurationUs aus Blockquellen erhalten haben, was zu einem IllegalArgumentException führte (#888).
  • 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).
  • Audio:
    • Behebung des Umgangs mit EOS für SilenceSkippingAudioProcessor bei mehrfachem Aufruf (#712).
  • Video:
    • Wir fügen eine Problemumgehung für ein Geräteproblem auf dem Galaxy Tab S7 FE, Chromecast mit Google TV und Lenovo M10 FHD Plus hinzu, durch die AVC-Streams mit 60 fps als nicht unterstützt gekennzeichnet werden (#693).
  • Metadaten:
    • 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.
  • 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.
  • Sitzung:
    • Fügen Sie die benutzerdefinierten Schlüssel und Werte in MediaMetadataCompat in MediaMetadata.extras und MediaMetadata.extras in MediaMetadataCompat 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).
  • 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.):
    • MIDI: Ein Problem wurde behoben, bei dem beim Vorspulen die Programmänderungsereignisse übersprungen wurden (#704).
    • Migrieren Sie zu FFmpeg 6.0 und aktualisieren Sie das unterstützte NDK auf r26b (#707, #867).
  • Cast-Erweiterung:
    • Lösche die Erstellung von Timeline, damit die App nicht abstürzt, wenn das Laden von Medien auf dem Übertragungsgerät fehlschlägt (#708).

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. Der message-Parameter für diese Methoden enthält keine Informationen mehr über die Throwable, die an die Log.{d,i,w,e}()-Methoden übergeben werden. Daher müssen Implementierungen diese Informationen bei Bedarf manuell anhängen, z. B. mit Logger.appendThrowableString(String, Throwable).
    • Ein Kotlin-Kompatibilitätsproblem wurde behoben, bei dem generische Typparameter mit Nullwerten und Array-Elementtypen mit Nullwerten nicht als Nullwerte erkannt wurden. Beispiele sind die Methodenparameter TrackSelectorResult und SimpleDecoder (#6792).
    • Ä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 mit PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) oder MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) beibehalten werden (#11213).
    • Aktualisiere androidx.annotation:annotation-experimental auf 1.3.1, um das Problem zu beheben: https://issuetracker.google.com/251172715.
    • Verschieben Sie ExoPlayer.setAudioAttributes in die Player-Oberfläche.
  • 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 mit Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT aktualisiert, wenn die Wiedergabe versucht wird, während keine geeigneten Audioausgaben verfügbar sind, oder wenn alle geeigneten Ausgaben während der Wiedergabe getrennt werden. Der Unterdrückungsgrund wird entfernt, wenn eine geeignete Ausgabe verbunden wird.
    • Fügen Sie MediaSource.canUpdateMediaItem und MediaSource.updateMediaItem hinzu, um MediaItem-Aktualisierungen nach dem Erstellen über Player.replaceMediaItem(s) anzunehmen.
    • MediaItem-Updates für alle MediaSource-Klassen zulassen, die von der Bibliothek über Player.replaceMediaItem(s) bereitgestellt werden (#33, #9978).
    • Benennen Sie MimeTypes.TEXT_EXOPLAYER_CUES in MimeTypes.APPLICATION_MEDIA3_CUES um.
    • Fügen Sie PngExtractor hinzu, der eine vollständige PNG-Datei als ein Sample sendet und in die TrackOutput liest.
    • Die Methode SequenceableLoader.continueLoading(long) in der SequenceableLoader-Oberfläche wurde auf SequenceableLoader.continueLoading(LoadingInfo loadingInfo) erweitert. LoadingInfo enthält zusätzlich zum vorhandenen playbackPositionUs weitere Parameter, einschließlich playbackSpeed und lastRebufferRealtimeMs.
    • Die Methode ChunkSource.getNextChunk(long, long, List, ChunkHolder) in der ChunkSource-Schnittstelle wurde auf ChunkSource.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 in ExperimentalBandwidthMeter (#612).
    • Fügen Sie den Parameter MediaPeriodId zu CompositeMediaSource.getMediaTimeForChildMediaTime hinzu.
    • Unterstützt ClippingMediaSource (und andere Quellen mit Zeitraum-/Fensterzeitverschiebungen) in ConcatenatingMediaSource2 (#11226).
    • Ändern Sie BaseRenderer.onStreamChanged() so, dass auch ein MediaPeriodId-Argument empfangen wird.
  • Transformator:
    • EXIF-Rotationsdaten für Bildeingaben parsen
    • Entfernen Sie den Annotationstyp TransformationRequest.HdrMode und die zugehörigen Konstanten. Verwenden Sie stattdessen Composition.HdrMode und die zugehörigen Konstanten.
    • Vereinfache den OverlaySettings, um Rotationsprobleme zu beheben.
    • Die Parameter frameRate und durationUs von SampleConsumer.queueInputBitmap wurden in TimestampIterator geändert.
  • Titelauswahl:
    • Fügen Sie DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness hinzu, um eine nicht nahtlose Anpassung explizit zuzulassen oder zu verbieten. Die Standardeinstellung bleibt bei ihrem aktuellen Verhalten von true.
  • 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 in projectionPoseRoll geändert (#461).
    • Gehen Sie nicht davon aus, dass Extractor-Instanzen direkt mit instanceof geprüft werden können. Wenn Sie Laufzeitzugriff auf die Implementierungsdetails eines Extractor benötigen, müssen Sie zuerst Extractor.getUnderlyingInstance aufrufen.
    • 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 einen DefaultAudioOffloadSupportProvider bereitstellen kann. Sie gibt das neue AudioOffloadSupport zurück, das isFormatSupported, isGaplessSupported und isSpeedChangeSupported enthält.
    • Fügen Sie AudioSink.setOffloadMode() hinzu, über die die Auslagerungskonfiguration auf der Audiosenke konfiguriert wird. Der Standardwert ist AudioSink.OFFLOAD_MODE_DISABLED.
    • Die Auslagerung kann über setAudioOffloadPreference in TrackSelectionParameters 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 auf AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED gesetzt ist, wählt die DefaultTrackSelector 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 Methodensignatur DefaultRenderersFactory.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 und AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged wurde in onSleepingForOffloadChanged und onExperimentalOffloadedPlayback in onOffloadedPlayback umbenannt.
    • Verschiebt im Modus „Audio-Offload“ zugehörige TrackSelectionParameters-Schnittstellen und -Definitionen in eine innere AudioOffloadPreferences-Klasse.
    • Füge onAudioTrackInitialized- und onAudioTrackReleased-Callbacks zu AnalyticsListener, AudioRendererEventListener und AudioSink.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).
  • Video:
    • Erlauben Sie MediaCodecVideoRenderer, eine benutzerdefinierte VideoFrameProcessor.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).
  • Text:
    • ExoplayerCuesDecoder entfernen. Text-Tracks mit sampleMimeType = application/x-media3-cues werden jetzt direkt von TextRenderer verarbeitet, ohne dass eine SubtitleDecoder-Instanz erforderlich ist.
  • Metadaten:
    • Bei rein decodierten Beispielen wird MetadataDecoder.decode nicht mehr aufgerufen, da die Implementierung trotzdem null zurückgeben muss.
  • 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üssen VideoFrameProcessor.Listener#onInputStreamRegistered() implementieren.
    • Die Parameter frameRate und durationUs von VideoFrameProcessor.queueInputBitmap wurden in TimestampIterator geändert.
  • 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 auf FOREGROUND_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 sofort notifyChildrenChanged() 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äche queue in der Benutzeroberfläche von Android Auto nicht angezeigt wird (#339).
    • Verwenden Sie standardmäßig DataSourceBitmapLoader anstelle von SimpleBitmapLoader (#271, #327).
    • Füge MediaSession.Callback.onMediaButtonEvent(Intent) hinzu, damit Apps die standardmäßige Ereignisbehandlung bei Medienschaltflächen überschreiben können.
  • UI:
    • Füge eine Player.Listener-Implementierung für Wear OS-Geräte hinzu, die die Wiedergabeunterdrückung durch Player.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.
  • 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ßerdem dataSync als foregroundServiceType im Manifest und die Berechtigung FOREGROUND_SERVICE_DATA_SYNC hinzufügen (#11239).
  • 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).
  • 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über C.BUFFER_FLAG_DECODE_ONLY bevorzugt, der eingestellt wird.
    • Füge Decoder.setOutputStartTimeUs und SimpleDecoder.isAtLeastOutputStartTimeUs hinzu, damit Decodierer nur Decodierungsproben vor der Startzeit löschen können. Diese Methode sollte der Einstellung Buffer.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).
  • Testdienstprogramme:
    • TestExoPlayerBuilder und FakeClock mit Espresso-UI-Tests und Compose-UI-Tests kompatibel machen. Dadurch wird ein Fehler behoben, bei dem die Wiedergabe bei Interaktionen mit der Ansicht „Espresso“ oder „Compose“ nicht deterministisch voranschreitet.
  • Entfernen Sie verworfene Symbole:
    • Entfernen Sie TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) und TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Verwenden Sie Composition.Builder.setHdrMode(int) und übergeben Sie Composition stattdessen an Transformer.start(Composition, String).
    • Entfernen Sie die verworfene Methode DownloadNotificationHelper.buildProgressNotification. Verwenden Sie stattdessen eine nicht verworfene Methode, die stattdessen einen notMetRequirements-Parameter verwendet.

Version 1.2.0-rc01

1. November 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.2.0-beta01

19. Oktober 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.2.0-alpha02

29. September 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.2.0-alpha01

17. August 2023

Verwenden Sie die stabile Version 1.2.0.

Version 1.1.0

Version 1.1.1

16. August 2023

  • Allgemeine Bibliothek:
    • Entfernen Sie die versehentlich hinzugefügte multidex-Abhängigkeit aus allen Modulen (#499).
  • ExoPlayer:
    • Ein Problem in PlaybackStatsListener wurde behoben, bei dem falsche PlaybackStats-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).
  • Audio:
    • Es wurde ein Fehler behoben, bei dem Player.getState() beim Abspielen sehr kurzer Dateien nicht zu STATE_ENDED übergegangen wurde (#538).
  • 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 in MediaSession.Callback.onConnect tun. Dazu verwenden sie AcceptedResultBuilder, 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 eine Result gesendet hat, die dies nicht unterstützt, wodurch ein UnsupportedOperationException erzeugt wurde (#78).
    • Sie haben die Art und Weise korrigiert, wie PlayerWrapper eine VolumeProviderCompat erstellt, indem Sie volumeControlType sowohl durch Legacy-Befehle (COMMAND_ADJUST_DEVICE_VOLUME und COMMAND_SET_DEVICE_VOLUME) als auch neue Befehle (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS und COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554) ermitteln.

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ür DeviceInfo 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) und setDeviceVolume(int, int)
      • increaseDeviceVolume(int) und increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) und decreaseDeviceVolume(int, int)
    • Füge FilteringMediaSource hinzu, um verfügbare Track-Typen aus einer MediaSource zu filtern.
    • Unterstützung für das 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 und sid wurden eingebunden (#8699). API-Struktur und API-Methoden:
      • Das CMCD-Logging ist standardmäßig deaktiviert. Verwenden Sie MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory), um es zu aktivieren.
      • Alle Schlüssel sind standardmäßig aktiviert. Überschreiben Sie CmcdConfiguration.RequestConfig.isKeyAllowed(String key), um herauszufiltern, welche Schlüssel protokolliert werden.
      • Überschreiben Sie CmcdConfiguration.RequestConfig.getCustomData(), um das benutzerdefinierte Schlüssel-Logging zu aktivieren.
    • Fü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, um Effect während der Videowiedergabe zu verwenden.
    • Aktualisieren Sie SampleQueue, um sourceId als long und nicht als int zu speichern. Dadurch werden die Signaturen der öffentlichen Methoden SampleQueue.sourceId und SampleQueue.peekSourceId geändert.
    • Fügen Sie den LoadControl-Methoden shouldStartPlayback und onTracksSelected Parameter hinzu, die eine Verknüpfung dieser Methoden mit dem entsprechenden MediaPeriod 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) und BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) verwerfen. Stattdessen kann die Variante der Methoden ohne mediaTimeOffsetUs aufgerufen werden. Beachten Sie, dass der Offset auch für die verworfenen Varianten nicht mehr zu startTimeUs und endTimeUs der MediaLoadData-Objekte hinzugefügt wird, die vom Disponenten gesendet werden.
    • Benennen Sie ExoTrackSelection.blacklist in excludeTrack und isBlacklisted in isTrackExcluded um.
    • Beheben Sie das inkonsistente Verhalten zwischen ExoPlayer.setMediaItem(s) und addMediaItem(s) beim Aufruf für eine leere Playlist.
  • Transformator:
    • Transformer.Builder.setMediaSourceFactory(MediaSource.Factory) entfernen. Verwenden Sie stattdessen ExoPlayerAssetLoader.Factory(MediaSource.Factory) und Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • Transformer.startTransformation(MediaItem, ParcelFileDescriptor) entfernen.
    • Es wurde ein Fehler behoben, bei dem die 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 von findDecoder/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öst DefaultTrackSelector eine neue Trackauswahl aus, sobald sich die Renderer-Funktionen ändern.
  • Extraktoren:
    • Ogg: Fehler bei der Suche in Dateien mit langer Dauer wurde behoben (#391).
    • FMP4: Ein Problem wurde behoben, bei dem TimestampAdjuster einen falschen Zeitstempel-Offset mit der Metadaten-Beispielzeit aus dem Emsg-Atom initialisiert (#356).
  • 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() und AudioSink.release() für die Freigabe der Ressourcen am Ende des Spielerlebenszyklus hinzu.
    • Änderungen der Audiofunktionen in DefaultAudioSink anhören. Fügen Sie dem Konstruktor von DefaultAudioSink den erforderlichen Parameter context hinzu. Damit wird DefaultAudioSink als Listener für AudioCapabilitiesReceiver registriert und das Attribut audioCapabilities aktualisiert, wenn es über eine Funktionsänderung informiert wird.
    • Geben Sie Änderungen an Audiofunktionen über das neue Ereignis onAudioCapabilitiesChanged in der AudioSink.Listener-Schnittstelle und die neue Schnittstelle RendererCapabilities.Listener weiter, die onRendererCapabilitiesChanged-Ereignisse auslöst.
    • Fügen Sie ChannelMixingAudioProcessor hinzu, um Skalierung/Mischung auf Audiokanäle anzuwenden.
    • Fügen Sie den neuen Ganzzahlwert DISCARD_REASON_AUDIO_BYPASS_POSSIBLE zu DecoderDiscardReasons hinzu, um den Audiodecoder zu verwerfen, wenn der Umgehungsmodus nach einer Änderung der Audiofunktionen möglich ist.
    • Unterstützung der direkten Wiedergabe für DTS Express und DTS:X hinzufügen (#335).
  • Video:
    • Legen Sie fest, dass MediaCodecVideoRenderer als VideoSize mit einer Breite und Höhe von 0 gemeldet wird, wenn der Renderer deaktiviert ist. Player.Listener.onVideoSizeChanged wird entsprechend aufgerufen, wenn sich Player.getVideoSize() ändert. Nach dieser Änderung hat die Videogröße von ExoPlayer mit MediaCodecVideoRenderer eine Breite und Höhe von 0, wenn Player.getCurrentTracks kein Video unterstützt oder die Größe des unterstützten Videotracks noch nicht bestimmt wurde.
  • Digitale Rechteverwaltung:
    • Reduzieren Sie die Sichtbarkeit mehrerer nur interner Methoden in DefaultDrmSession, die nicht von außerhalb des DRM-Pakets aufgerufen werden:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Fü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 eine Player-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 angeforderte MediaItems an Player übergeben werden kann, wenn sie LocalConfiguration 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 angeforderte MediaItems an Player übergeben werden kann, wenn sie LocalConfiguration 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).
  • UI:
    • Fügen Sie die Util-Methoden shouldShowPlayButton und handlePlayPauseButtonAction hinzu, um benutzerdefinierte UI-Elemente mit einer Wiedergabe-/Pause-Schaltfläche zu schreiben.
  • RTSP-Erweiterung:
    • Verwenden Sie für MPEG4-LATM den Standard-ID-Wert auf Profilebene, wenn er in der SDP-Nachricht zur Beschreibung der Antwort nicht vorhanden ist (#302).
    • Verwenden Sie den Basis-URI für die relative Pfadauflösung aus der RTSP-Sitzung, wenn er im Antwortheader DESCRIBE vorhanden ist (#11160).
  • DASH-Erweiterung:
    • Entfernen Sie den Medienzeitversatz von MediaLoadData.startTimeMs und MediaLoadData.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).
  • HLS-Erweiterung:
    • Fügen Sie HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) hinzu, um ein Zeitlimit für den Ladethread festzulegen, das auf die Initialisierung von TimestampAdjuster wartet. Wenn die Initialisierung nicht vor Ablauf der Zeitüberschreitung abgeschlossen ist, wird ein PlaybackException ausgelöst, um eine endlose Unterbrechung der Wiedergabe zu vermeiden. Das Zeitlimit ist standardmäßig auf null gesetzt (#323).
  • Testdienstprogramme:
    • Prüfen Sie in DataSourceContractTest, ob die Groß- und Kleinschreibung beim URI-Schema ignoriert wird.
  • Entfernen Sie verworfene Symbole:
    • Entfernen Sie DefaultAudioSink-Konstruktoren und verwenden Sie stattdessen DefaultAudioSink.Builder.
    • HlsMasterPlaylist entfernen und stattdessen HlsMultivariantPlaylist verwenden.
    • Player.stop(boolean) entfernen. Verwenden Sie stattdessen Player.stop() und Player.clearMediaItems() (wenn reset den Wert true hat).
    • Entfernen Sie zwei verworfene SimpleCache-Konstruktoren. Verwenden Sie einen nicht verworfenen Konstruktor, der stattdessen einen DatabaseProvider verwendet, um die Leistung zu verbessern.
    • Entfernen Sie den DefaultBandwidthMeter-Konstruktor und verwenden Sie stattdessen DefaultBandwidthMeter.Builder.
    • Entfernen Sie DefaultDrmSessionManager-Konstruktoren und verwenden Sie stattdessen DefaultDrmSessionManager.Builder.
    • Entfernen Sie zwei verworfene HttpDataSource.InvalidResponseCodeException-Konstruktoren und verwenden Sie einen nicht verworfenen Konstruktor, der zusätzliche Felder(cause, responseBody) akzeptiert, um das Fehler-Logging zu verbessern.
    • Entfernen Sie DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash und DownloadHelper.forSmoothStreaming und verwenden Sie stattdessen DownloadHelper.forMediaItem.
    • Entfernen Sie den verworfenen DownloadService-Konstruktor und verwenden Sie einen nicht verworfenen Konstruktor mit der Option zum Angeben eines channelDescriptionResourceId-Parameters.
    • Entfernen Sie die verworfenen Stringkonstanten für Charsets (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME und UTF16LE_NAME). Verwenden Sie stattdessen Kotlin-Charsets aus dem kotlin.text-Paket, dem java.nio.charset.StandardCharsets oder com.google.common.base.Charsets.
    • Entfernen Sie den verworfenen WorkManagerScheduler-Konstruktor und verwenden Sie einen nicht verworfenen Konstruktor, der stattdessen die Option enthält, einen Context-Parameter anzugeben.
    • Entfernen Sie die verworfenen Methoden createVideoSampleFormat, createAudioSampleFormat, createContainerFormat und createSampleFormat, die zum Instanziieren der Klasse Format verwendet wurden. Verwenden Sie stattdessen Format.Builder, um Instanzen von Format zu erstellen.
    • Entfernen Sie die verworfenen Methoden copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate und copyWithVideoSize. Verwenden Sie stattdessen Format.buildUpon() und Setter-Methoden.
    • Entfernen Sie die verworfene ExoPlayer.retry(). Verwenden Sie stattdessen prepare().
    • Entfernen Sie den verworfenen DefaultTrackSelector-Konstruktor mit Null-Argumenten und verwenden Sie stattdessen DefaultTrackSelector(Context).
    • Entfernen Sie den verworfenen OfflineLicenseHelper-Konstruktor und verwenden Sie stattdessen OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Entfernen Sie den verworfenen DownloadManager-Konstruktor. Verwenden Sie stattdessen den Konstruktor, der stattdessen einen Executor verwendet.
    • Entfernen Sie verworfene Cue-Konstruktoren und verwenden Sie stattdessen Cue.Builder.
    • Entfernen Sie den verworfenen OfflineLicenseHelper-Konstruktor und verwenden Sie stattdessen OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Entfernen Sie vier verworfene AnalyticsListener-Methoden:
      • onDecoderEnabled verwenden Sie stattdessen onAudioEnabled und/oder onVideoEnabled.
      • onDecoderInitialized verwenden, verwenden Sie stattdessen onAudioDecoderInitialized und/oder onVideoDecoderInitialized.
      • onDecoderInputFormatChanged verwenden, verwenden Sie stattdessen onAudioInputFormatChanged und/oder onVideoInputFormatChanged.
      • onDecoderDisabled verwenden Sie stattdessen onAudioDisabled und/oder onVideoDisabled.
    • Entfernen Sie die eingestellten Player.Listener.onSeekProcessed und AnalyticsListener.onSeekProcessed und verwenden Sie stattdessen onPositionDiscontinuity mit DISCONTINUITY_REASON_SEEK.
    • Entfernen Sie ExoPlayer.setHandleWakeLock(boolean) und verwenden Sie stattdessen setWakeMode(int).
    • Entfernen Sie das verworfene DefaultLoadControl.Builder.createDefaultLoadControl(). Verwenden Sie stattdessen build().
    • Entfernen Sie die verworfene MediaItem.PlaybackProperties und verwenden Sie stattdessen MediaItem.LocalConfiguration. Das verworfene Feld MediaItem.playbackProperties hat jetzt den Typ MediaItem.LocalConfiguration.

Version 1.1.0-rc01

21. Juni 2023

Verwenden Sie die stabile Version 1.1.0.

Version 1.1.0-beta01

7. Juni 2023

Verwenden Sie die stabile Version 1.1.0.

Version 1.1.0-alpha01

10. Mai 2023

Verwenden Sie die stabile Version 1.1.0.

Version 1.0.0

Version 1.0.2

18. Mai 2023

androidx.media3:media3-*:1.0.2 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, ob Buffer das Flag C.BUFFER_FLAG_LAST_SAMPLE enthält.
    • Ein Problem wurde behoben, bei dem der letzte Frame möglicherweise nicht gerendert wurde, wenn das letzte Beispiel mit Frames aus der Warteschlange entfernt wurde, ohne das Beispiel „Ende des Streams“ zu lesen. (#11079)
  • Extraktoren:
    • Das Parsen von H.265 SPS in MPEG-TS-Dateien wurde korrigiert, indem die 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 an Callback.onGetLibraryRoot mit params.isRecent == true in API 30 zurückgeben konnte (#355).
    • Beheben Sie das Speicherleck von MediaSessionService oder MediaLibraryService (#346).
    • Es wurde ein Fehler behoben, bei dem eine kombinierte Timeline- und Positionsaktualisierung in einer MediaSession dazu führen konnte, dass ein MediaController eine IllegalStateException auslöst.

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 in MediaController führen (#290).
    • Fügen Sie der Legacy-Version MediaControllerCompat.Callback.onSessionEvent die fehlende Weiterleitung von MediaSession.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 einem MediaController gesendet wurden, ignoriert werden, wenn sie auf eine Gruppe mit Format.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 in MediaSessionService 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).
  • 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:
    • Fehlerkorrektur für die Erkennung des Netzwerktyps in API 33 (#10970).
    • Fehlerkorrektur von NullPointerException beim Aufrufen von ExoPlayer.isTunnelingEnabled (#10977).
  • Downloads:
    • Nutzen Sie die maximale Differenz der Startzeit von zwei Segmenten, die konfigurierbar in SegmentDownloader und abgeleiteten Klassen zusammengeführt werden sollen (#248).
  • Audio:
    • Probleme mit der lückenlosen MP3-Wiedergabe auf Samsung-Geräten wurden behoben (#8594).
    • Es wurde ein Fehler behoben, bei dem Wiedergabegeschwindigkeiten, die direkt nach der Deaktivierung des Audios eingestellt wurden, durch eine vorherige Änderung der Geschwindigkeit überschrieben wurden (#10882).
  • Video:
    • Ordnen Sie das HEVC HDR10-Format HEVCProfileMain10HDR10 statt HEVCProfileMain10 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.
  • Besetzung:
    • Das vorübergehende STATE_IDLE beim Übergang zwischen Medienelementen wurde korrigiert (#245).
  • 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.

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).
  • Extraktoren:
    • Wenn beim Parsen der Trak-Atome in der Beispieltabelle (stbl) eine erforderliche Beispielbeschreibung (stsd) fehlt, wird ein ParserException anstelle von NullPointerException ausgelöst.
    • Wenn Sie in fMP4 direkt zu einem Synchronisierungsframe springen, werden Stichproben korrekt übersprungen (#10941).
  • Audio:
    • Verwenden Sie die Bitrate des komprimierten Audioformats, um die minimale Puffergröße für AudioTrack bei direkten Wiedergaben (Passthrough) zu berechnen.
  • Text:
    • Korrigieren Sie TextRenderer und übergeben Sie einen ungültigen (negativen) Index an Subtitle.getEventTime, wenn eine Untertiteldatei keine Hinweise enthält.
    • SubRip: Unterstützung für UTF-16-Dateien, wenn sie mit einer Bytereihenfolgemarkierung beginnen
  • 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ür MediaMetadata.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).
  • Sitzung:
    • Füge abstrakte SimpleBasePlayer-Elemente hinzu, um die Player-Schnittstelle für benutzerdefinierte Player zu implementieren.
    • Fügen Sie eine Hilfsmethode hinzu, um das Plattformsitzungstoken in Media3 SessionToken zu konvertieren (#171).
    • Verwenden Sie onMediaMetadataChanged, um Aktualisierungen der Plattformmediensitzung auszulösen (#219).
    • Fügen Sie die Mediensitzung als Argument von getMediaButtons() der DefaultMediaNotificationProvider hinzu und verwenden Sie zur besseren Übersichtlichkeit unveränderliche Listen (#216).
    • Füge den onSetMediaItems-Callback-Listener hinzu, um die MediaItem-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).
  • 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ür MediaMetadata.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 Attribut focusSkipButtonWhenAvailable 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() zur ImaServerSideAdInsertionMediaSource.AdsLoader hinzu, damit die Schaltfläche „Überspringen“ hervorgehoben wird.
    • Aktualisierung der IMA SDK-Version auf 3.29.0.
  • 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 einzelnen MediaSource 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, wenn seekToNext oder seekToPrevious 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).
  • 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.
  • 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 demselben PriorityTaskManager verursacht wurde, wurde behoben (#10570).
    • Downloadbenachrichtigung sofort anzeigen (#183).
    • Begrenzen Sie parallele Downloadentfernungen auf 1, um eine übermäßige Threaderstellung zu vermeiden (#10458).
  • 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 von AudioTrack-Instanzen, um Fehler aufgrund von unzureichendem Arbeitsspeicher zu vermeiden, wenn mehrere Spieler gleichzeitig freigegeben werden (#10057).
    • Fügt AudioOffloadListener.onExperimentalOffloadedPlayback für den AudioTrack-Auslagerungsstatus hinzu. (#134)
    • 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 in androidx.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).
  • Metadaten:
    • MetadataRenderer kann jetzt so konfiguriert werden, dass Metadaten gerendert werden, sobald sie verfügbar sind. Erstellen Sie eine Instanz mit MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean), um anzugeben, ob der Renderer Metadaten 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).
  • UI:
    • Aktuelle Überschreibungen des Players gemäß Voreinstellung in TrackSelectionDialogBuilder verwenden (#10429).
  • 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, um DefaultMediaNotificationProvider-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 Methode DefaultMediaNotificationProvider.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 aus file://-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:
    • Fügen Sie die H263-Verarbeitung fragmentierter Pakete hinzu (#119).
    • Unterstützung für MP4A-LATM hinzufügen (#162).
  • 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(), um CastPlayer bei der Steuerung der Wiedergabe mit einem MediaController identifizieren zu können (#142).
  • 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 mit ExoPlayer.setShuffleOrder muss zu einem Aufruf von Player.Listener#onTimelineChanged mit reason=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 in DefaultMediaSourceFactory wurde korrigiert, die in einigen Fällen nicht funktionierte (#116).
  • Extraktoren:
    • Ein Fehler beim Parsen von kurzfristigen H265-Referenzbildsätzen wurde behoben (#10316).
    • Ein Fehler beim Parsen der Bitraten aus esds-Feldern wurde behoben (#10381).
  • 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 in LeanbackAdapter (10420).
  • Besetzung:
    • Verwenden Sie das an die Playlist-Methoden übergebene MediaItem als Window.mediaItem in CastTimeline (#25, #8212).
    • Unterstützen Sie Player.getMetadata() und Listener.onMediaMetadataChanged() mit CastPlayer (#25).

Version 1.0.0-beta01

16. Juni 2022

androidx.media3:media3-*:1.0.0-beta01 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 mit ExoPlayer.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 an MediaSource.Factory.setDrmSessionManagerProvider und MediaSource.Factory.setLoadErrorHandlingPolicy ist nicht zulässig. Instanzen von DefaultDrmSessionManagerProvider und DefaultLoadErrorHandlingPolicy können bei Bedarf explizit übergeben werden.
    • Fügen Sie MediaItem.RequestMetadata hinzu, um Metadaten darzustellen, die zum Abspielen von Medien erforderlich sind, wenn das genaue LocalConfiguration nicht bekannt ist. Entfernen Sie auch MediaMetadata.mediaUrl, da dies jetzt in RequestMetadata enthalten ist.
    • Füge Player.Command.COMMAND_SET_MEDIA_ITEM hinzu, damit Spieler das Festlegen eines einzelnen Elements zulassen können.
  • Titelauswahl:
    • Fassen Sie die Klasse TrackSelectionOverrides in TrackSelectionParameters zusammen und stufen Sie TrackSelectionOverride zu einer Klasse der obersten Ebene hoch.
    • Benennen Sie TracksInfo in Tracks und TracksInfo.TrackGroupInfo in Tracks.Group um. Player.getCurrentTracksInfo und Player.Listener.onTracksInfoChanged wurden ebenfalls in Player.getCurrentTracks und Player.Listener.onTracksChanged umbenannt. Dazu gehört auch, dass der Methodenname Player.Listener.onTracksChanged nicht mehr eingestellt wird, allerdings mit anderen Parametertypen.
    • Ändern Sie DefaultTrackSelector.buildUponParameters und DefaultTrackSelector.Parameters.buildUpon so, dass DefaultTrackSelector.Parameters.Builder anstelle der verworfenen DefaultTrackSelector.ParametersBuilder zurückgegeben wird.
    • Fügen Sie DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities hinzu. Dies ist standardmäßig aktiviert. Wenn diese Option aktiviert ist, bevorzugt DefaultTrackSelector Audiotracks, deren Kanalanzahl die Ausgabefunktionen des Geräts nicht überschreitet. Auf Handheld-Geräten bevorzugt DefaultTrackSelector 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, überwacht DefaultTrackSelector außerdem Änderungen an den Spatializer-Eigenschaften und löst darüber eine neue Trackauswahl aus. Geräte mit dem UI-Modus television sind von diesen Einschränkungen ausgeschlossen. Das Format mit der höchsten Kanalanzahl wird bevorzugt. Zum Aktivieren dieser Funktion muss die DefaultTrackSelector-Instanz mit einer Context erstellt werden.
  • Video:
    • Benennen Sie DummySurface in PlaceholderSurface um.
    • AV1-Support zu MediaCodecVideoRenderer.getCodecMaxInputSize hinzufügen.
  • Audio:
    • LG AC3-Audiodecoder verwenden, um den nicht standardmäßigen MIME-Typ zu bewerben
    • Ändern Sie den Rückgabetyp von AudioAttributes.getAudioAttributesV21() von android.media.AudioAttributes in eine neue AudioAttributesV21-Wrapper-Klasse, um eine langsame ART-Überprüfung für API < 21 zu verhindern.
    • Fragen Sie die Plattform ab (API 29 oder höher) oder nehmen Sie an, dass die Anzahl der Audiocodierungskanäle für Audiopassthrough nicht festgelegt ist, wenn das Format für die Anzahl der Audiokanäle nicht festgelegt ist. Dies ist bei der HLS-Vorbereitung ohne Blöcke (10204) der Fall.
    • Konfigurieren Sie AudioTrack mit der Kanalmaske AudioFormat.CHANNEL_OUT_7POINT1POINT4, wenn der Decoder 12-Kanal-PCM-Audio ausgibt (#10322).
  • DRM
    • 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(), sodass CueGroup anstelle von List<Cue> zurückgegeben wird.
    • SSA: Unterstützung der Stileinstellung OutlineColour, wenn BorderStyle == 3 (d.h. OutlineColour legt den Hintergrund des Cues fest) (#8435).
    • CEA-708: 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.
  • Extraktoren:
    • AVI-Unterstützung hinzufügen (#2092).
    • Matroska: Analysiere DiscardPadding für Opus-Titel.
    • MP4: Bitraten aus esds-Boxen parsen
    • Ogg: Doppelte Opus-ID und Kommentar-Header zulassen (#10038).
  • UI:
    • Die Zustellung von Ereignissen an OnClickListeners, die für PlayerView festgelegt wurden, wurde korrigiert, wenn useController=false gilt (#9605). Auch die Übermittlung von Ereignissen an OnLongClickListener für alle Ansichtskonfigurationen wurde korrigiert.
    • Eine Folge von Touch-Ereignissen, die die Grenzen von PlayerView vor ACTION_UP überschreiten, wurde fälschlicherweise als Klick behandelt (#9861). Das Problem wurde behoben.
    • 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 und TrackSelectionDialogBuilder so um, dass sie mit der Player-Schnittstelle und nicht mit ExoPlayer arbeiten. Dadurch können die Ansichten mit anderen Player-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).
  • DASH:
    • Parst die Kanalanzahl aus DTS-AudioChannelConfiguration-Elementen. Dadurch wird der Audiopassthrough für DTS-Streams wieder aktiviert (#10159).
    • Übergabe von null an DashMediaSource.Factory.setCompositeSequenceableLoaderFactory nicht zulassen. Instanzen von DefaultCompositeSequenceableLoaderFactory können bei Bedarf explizit übergeben werden.
  • HLS:
    • Fallback auf die Chunk-Vorbereitung, wenn das Attribut CODECS der Playlist nicht den Audio-Codec enthält (#10065).
    • Die Übergabe von null an HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory und HlsMediaSource.Factory.setPlaylistTrackerFactory ist nicht zulässig. Instanzen von DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory oder ein Verweis auf DefaultHlsPlaylistTracker.FACTORY können bei Bedarf explizit übergeben werden.
  • Unterbrechungsfreies Streaming:
    • Übergabe von null an SsMediaSource.Factory.setCompositeSequenceableLoaderFactory nicht zulassen. Instanzen von DefaultCompositeSequenceableLoaderFactory können bei Bedarf explizit übergeben werden.
  • 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 in PlaceholderDataSource um.
    • Behelfslösung für die Verarbeitung von OkHttp-Unterbrechungen.
  • Sitzung:
    • Ersetzen Sie MediaSession.MediaItemFiller durch MediaSession.Callback.onAddMediaItems, um die asynchrone Auflösung von Anfragen zu ermöglichen.
    • Unterstützen Sie setMediaItems(s)-Methoden, wenn MediaController eine Verbindung zu einer Legacy-Mediensitzung herstellt.
    • Entfernen Sie MediaController.setMediaUri und MediaSession.Callback.onSetMediaUri. Die gleiche Funktionalität kann mit MediaController.setMediaItem und MediaSession.Callback.onAddMediaItems erreicht werden.
    • Leiten Sie alte MediaController-Aufrufe zur Wiedergabe von Medien an MediaSession.Callback.onAddMediaItems statt an onSetMediaUri weiter.
    • Füge MediaNotification.Provider und DefaultMediaNotificationProvider hinzu, um die Benachrichtigung anzupassen.
    • Füge BitmapLoader und SimpleBitmapLoader 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 in MediaSession.Callback um, MediaLibrarySession.MediaLibrarySessionCallback in MediaLibrarySession.Callback und MediaSession.Builder.setSessionCallback in setCallback.
    • 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)
  • 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).
  • Entfernen Sie verworfene Symbole:
    • Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray) entfernen. Verwenden Sie stattdessen Player.Listener.onTracksChanged(Tracks).
    • Entfernen Sie Player.getCurrentTrackGroups und Player.getCurrentTrackSelections. Verwenden Sie stattdessen Player.getCurrentTracks. Sie können auch weiterhin ExoPlayer.getCurrentTrackGroups und ExoPlayer.getCurrentTrackSelections verwenden, obwohl diese Methoden nicht mehr unterstützt werden.
    • Entfernen Sie die Konstanten DownloadHelper, DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT und DEFAULT_TRACK_SELECTOR_PARAMETERS. Verwenden Sie nach Möglichkeit stattdessen getDefaultTrackSelectorParameters(Context) und andernfalls DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • Entfernen Sie den Konstruktor DefaultTrackSelector(ExoTrackSelection.Factory). Verwende stattdessen DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Transformer.Builder.setContext entfernen. Das Context sollte stattdessen an den Transformer.Builder-Konstruktor übergeben werden.

Version 1.0.0-alpha03

14. März 2022

androidx.media3:media3-*:1.0.0-alpha03 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 und MediaItem.SubtitleConfiguration.Builder.setId, um das Feld SubtitleConfiguration zu priorisieren und auf den Wert Factory zurückzugreifen, wenn er nicht festgelegt ist (#10016).
  • Anzeigenwiedergabe:
    • 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 von DefaultRenderersFactory, die buildVideoRenderers() oder buildAudioRenderers() überschreiben, auf die Codec-Adapter-Factory zugreifen und sie an von ihnen erstellte MediaCodecRenderer-Instanzen übergeben können.
    • Geben Sie die ICY-Headerfelder name und genre an MediaMetadata.station bzw. MediaMetadata.genre weiter, sodass sie die Anwendung über Player.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 von MediaCodec 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 in queuedInputBufferCount um.
    • SimpleExoPlayer.renderers als privat festlegen. Auf Renderer kann über ExoPlayer.getRenderer zugegriffen werden.
    • Einige AnalyticsListener.EventFlags-Konstantenwerte wurden aktualisiert, damit sie den Werten in Player.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.
  • 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 TrackGroups in einem TrackGroupArray verbieten. TrackGroup-Elemente lassen sich immer unterscheidbar machen, indem im TrackGroup-Konstruktor ein id 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, dass AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES statt null explizit übergeben werden muss.
    • Erlaubt die Anpassung der Berechnung der Puffergröße AudioTrack durch Einfügen eines AudioTrackBufferSizeProvider in DefaultAudioSink. (#8891)
    • Erstellen Sie AudioTrack noch einmal, wenn die angeforderte Puffergröße größer als 1 MB war. (#9712)
  • Extraktoren:
    • WAV: Unterstützung für RF64-Streams hinzugefügt (#9543).
    • Fehler beim Parsen von H.265 SPS NAL-Einheiten behoben (#9719).
    • Vorbis-Kommentare (einschließlich METADATA_BLOCK_PICTURE) in Ogg Opus- und Ogg Vorbis-Dateien parsen
  • Text:
    • Fügen Sie das Feld MediaItem.SubtitleConfiguration.id hinzu, das in das Feld Format.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.
  • Digitale Rechteverwaltung:
    • playbackLooper aus DrmSessionManager.(pre)acquireSession entfernen. Wenn DrmSessionManager von einer Anwendung in einer benutzerdefinierten MediaSource verwendet wird, muss stattdessen playbackLooper an DrmSessionManager.setPlayer übergeben werden.
  • Anzeigenwiedergabe / IMA:
    • Unterstützung für die dynamische Anzeigenbereitstellung 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:
    • Korrigieren Sie die Farbe der Zahlen in den StyledPlayerView-Schaltflächen zum Zurückspulen und Vorspulen, wenn bestimmte Designs verwendet werden (#9765).
    • Übersetzen Sie Strings mit Wiedergabegeschwindigkeit korrekt (#9811).
  • 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 als C.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).
  • 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).
  • 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).
  • 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önnen setClearMediaItemsOnStop(false) für den Connector aufrufen.
  • Cast-Erweiterung:
    • Es wurde ein Fehler behoben, bei dem CastPlayer onIsPlayingChanged nicht korrekt aufrufen konnte (#9792).
    • Es werden Audiometadaten einschließlich Artwork mit DefaultMediaItemConverter unterstützt (#9663).
  • FFmpeg-Erweiterung:
    • Stellen Sie sicher, dass build_ffmpeg.sh von den bin-Dienstprogrammen von LLVM und nicht von dem von GNU abhängig ist (#9933).
  • Kompatibilität mit Android 12:
    • Aktualisiere die Cast-Erweiterung, um eine Abhängigkeit von com.google.android.gms:play-services-cast-framework:20.1.0 zu erhalten. Frühere Versionen von play-services-cast-framework sind nicht mit Apps kompatibel, die auf Android 12 ausgerichtet sind, und stürzen beim Erstellen von PendingIntents mit einem IllegalArgumentException ab (#9528).
  • Entfernen Sie verworfene Symbole:
    • Player.EventListener entfernen. Verwende stattdessen Player.Listener.
    • Entfernen Sie MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory und MediaSourceFactory#setDrmUserAgent. Verwenden Sie stattdessen MediaSourceFactory#setDrmSessionManagerProvider.
    • MediaSourceFactory#setStreamKeys entfernen. Verwenden Sie stattdessen MediaItem.Builder#setStreamKeys.
    • MediaSourceFactory#createMediaSource(Uri) entfernen. Verwenden Sie stattdessen MediaSourceFactory#createMediaSource(MediaItem).
    • Entfernen Sie setTag aus DashMediaSource, HlsMediaSource und SsMediaSource. Verwende stattdessen MediaItem.Builder#setTag.
    • DashMediaSource#setLivePresentationDelayMs(long, boolean) entfernen. Verwenden Sie MediaItem.Builder#setLiveConfiguration und MediaItem.LiveConfiguration.Builder#setTargetOffsetMs, um das Manifest zu überschreiben, oder DashMediaSource#setFallbackTargetLiveOffsetMs, um einen Fallback-Wert anzugeben.
    • (Simple)ExoPlayer.setThrowsWhenUsingWrongThread entfernen. Die Thread-Erzwingung kann nicht mehr deaktiviert werden.
    • Entferne ActionFile und ActionFileUpgradeUtil. Verwenden Sie ExoPlayer 2.16.1 oder älter, um ActionFileUpgradeUtil zu verwenden, um Legacy-Aktionsdateien mit DefaultDownloadIndex zusammenzuführen.
    • ProgressiveMediaSource#setExtractorsFactory entfernen. Verwenden Sie stattdessen den Konstruktor ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • Entfernen Sie ProgressiveMediaSource.Factory#setTag und ProgressiveMediaSource.Factory#setCustomCacheKey. Verwenden Sie stattdessen MediaItem.Builder#setTag und MediaItem.Builder#setCustomCacheKey.
    • Entfernen Sie die Konstruktoren DefaultRenderersFactory(Context, @ExtensionRendererMode int) und DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Verwenden Sie stattdessen den Konstruktor DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode und DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Entfernen Sie alle öffentlichen CronetDataSource-Konstruktoren. Verwenden Sie stattdessen CronetDataSource.Factory.
  • Ä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 Paket com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (im com.google.android.exoplayer2.extractor.flac-Paket)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Version 1.0.0-alpha01

27. Oktober 2021

androidx.media3:media3-*:1.0.0-alpha01 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.