Anleitungen

Media3 1.11 – Das ist neu

3 Minuten Lesezeit
Profil von Toni Heidenreich ansehen
Toni Heidenreich Software Engineer, Android

Media3 1.11 ist da. Diese Version wird in den meisten Top-Android-Media-Apps verwendet und bietet neue Funktionen, Fehlerkorrekturen und Verbesserungen für die Wiedergabe, Bearbeitung und UI-Komponenten. Wir erweitern unsere Jetpack Compose-UI-Module mit anpassbaren Player Slots und benutzerfreundlichen Standardeinstellungen, interaktiven Gesten, Statusbeobachtern und dem Vorabladen von Kurzvideos mit PlayerPool. Außerdem haben wir die Media3 Cast-Integration mit Unterstützung für den SystemUI-Ausgabewähler modernisiert, eine neue Ktor-HTTP-Client-Netzwerkerweiterung eingeführt und neue Muxing-Dienstprogramme für Ogg- und WAV-Dateien hinzugefügt.

Im Folgenden finden Sie die wichtigsten Neuerungen. Eine vollständige Liste der Änderungen finden Sie in den Versionshinweisen.

Wiedergabe-UI und Compose

Da Android immer mehr auf Compose setzt, erweitern wir die Module media3-ui-compose und media3-ui-compose-material3 kontinuierlich. Mit diesem Update haben Sie eine genauere Kontrolle über das Player-Layout, mehr Interaktionsmuster und eine tiefere Integration mit Material3.

Anpassbares Player-Layout

Die Material3-Player-Composable unterstützt jetzt spezielle Content-Slots für topControls, centerControls, bottomControls und errorOverlay. Sie können Ihre eigenen Composables einfügen oder die vorgefertigten Standardeinstellungen verwenden, die in PlayerDefaults veröffentlicht wurden:

Player(
  player = player,
  topControls = { PlayerDefaults.TopControls(player) },
  centerControls = { PlayerDefaults.CenterControls(player) },
  bottomControls = { PlayerDefaults.BottomControls(player) },
)

Die Player-Composable bietet auch FocusRequester-Unterstützung, die eine nahtlose Steuerkreuz- und Tastaturnavigation auf Android TV, faltbaren Geräten und in Desktop-Umgebungen ermöglicht. 

player_video.png
Beispiel für einen Composable-Player mit angepassten Steuerelementen

Gesten und Steuerung der Wiedergabegeschwindigkeit

PlaybackSpeedState bietet jetzt eine API für schnellen Vorlauf und Zeitlupe. Das demo-compose app veranschaulicht dies mit einer Geste für langes Drücken zum schnellen Vorlauf und einer Geste für Doppeltippen zum Suchen. In Kombination mit dem in Version 1.10 eingeführten ProgressSlider bietet die Compose-Player-UI jetzt standardmäßig umfassende Touch- und Gesteninteraktionen.

Vorabladen von Kurzvideos mit PlayerPool

Bei Apps mit Media-Feeds mit gleitendem Fenster (z. B. vertikale Kurzvideos) ist die effiziente Verwaltung mehrerer ExoPlayer-Instanzen eine häufige Herausforderung. Mit Media3 1.11 werden PlayerPool (in common-ktx) und rememberPooledPlayer (in ui-compose) eingeführt, um das Player-Recycling und das Vorabladen automatisch zu verwalten.

Der neue ShortFormPlayerScreen in demo-compose zeigt dies in Aktion: ein vertikal paginierter Feed, in dem Player gepoolt, vorab geladen und nahtlos wiederverwendet werden, während der Nutzer scrollt.

MiniController

Eine neue MiniController-Composable in media3-ui-compose-material3 bietet eine kompakte Wiedergabeleiste mit dem Titel, dem Interpreten, dem Cover und dem Fortschritt des aktuellen Elements sowie Steuerelementen für die Wiedergabe und Pause. Wie alle unsere Standard-Composables in media3-ui-compose-material3 unterstützt auch MiniController die dynamische Farbintegration von Material3, sodass sie sich automatisch an das Hintergrundbild-Design des Nutzers anpasst. Das ist ideal für dauerhafte Bottom-Sheet- oder Miniplayer-Affordances, z. B. wenn der Nutzer Inhalte durchsucht oder während aktiver Cast-Sitzungen.

mini_player.png
Der Media3-MiniController mit Albumcover, Metadaten und grundlegenden Steuerelementen

Erweiterte Status-Holder für Metadaten und Fehler

Wir haben media3-ui-compose mehrere neue reaktive Status-Holder hinzugefügt:

  • rememberCurrentMediaItemState – Metadaten zum aktuell wiedergegebenen Element beobachten
  • rememberPlaylistState – die vollständige Playlist und aktive Indexe beobachten
  • rememberErrorState – Wiedergabefehler verfolgen, mit einer passenden ErrorText-Composable und einem Standard-ErrorOverlay in Material3

Wir arbeiten in den kommenden Versionen weiter an neuen Ergänzungen und weiteren Anpassungsoptionen. Teilen Sie uns Ihre Meinung in der Problemverfolgung des Projekts mit.

Modernisierte Cast-Integration

In Media3 1.11 wird die Cast-Erweiterung mit programmatischen Konfigurationsoptionen und Unterstützung für das Routing auf Betriebssystemebene aktualisiert.

CastParams und SystemUI-Ausgabewähler

Sie können die Cast-Erweiterung jetzt mit CastParams konfigurieren:

val castParams = CastParams.Builder()
  .setShowSystemOutputSwitcherOnCastButtonClick(true)
  .build()


Cast.getSingletonInstance(context).initialize(castParams)

Wenn Sie setShowSystemOutputSwitcherOnCastIconClick(true) festlegen, wird der MediaRouteButton so konfiguriert, dass auf unterstützten Plattformversionen der native SystemUI-Ausgabewähler von Android geöffnet wird. So erhalten Sie eine einheitliche Ausgabewahl.

Reaktiver MediaRouteButton-Status in Compose

Apps, die Jetpack Compose verwenden, können jetzt ganz einfach das Media-Routing-Symbol (auch als Cast-Symbol bezeichnet) hinzufügen. Der Dialogstatus wird automatisch beobachtet und entsprechend aktualisiert. In Kombination mit CastPlayer von Media3 ist keine weitere Logik erforderlich.

@Composable
fun TopAppBarWithCast() {
  Row {
    Text(text = "App Title")
    MediaRouteButton()
  }
}
cast_button_2.png
Media3-Schaltfläche für das Medienrouting in einer App, die den Standarddialog für die Ausgabeauswahl startet

Verbesserungen bei der Kernwiedergabe und Sitzung

Eclipsa Video – dynamische HAGC-HDR-Metadaten (API 37+)

Eclipsa Video sorgt für ein einheitlicheres HDR-Erlebnis auf allen Geräten. Es bietet ein einheitliches HDR-Weiß als Grundlage und einen adaptiven Headroom, der vom Bildschirm und der Umgebung abhängt. So wird die kreative Absicht auf allen Geräten beibehalten.

ExoPlayer unterstützt jetzt die Wiedergabe der erforderlichen zeitgesteuerten HAGC-Metadaten (ST 2094-50) für progressive Medien (MP4, Matroska). Der Player führt HAGC-Metadatentracks automatisch mit dem zugehörigen Videotrack zusammen und liefert die Metadaten auf Geräten mit API 37+ außerhalb des Bandes an den Decoder. Auf älteren Geräten bietet ExoPlayer nahtlos eine Standard-HDR-Wiedergabe ohne die Anpassungen.  

eclipsa.png
Illustration der Vorteile von Eclipsa Video HDR, z. B. einheitlicherer Farbkontrast

Neue Ktor-HTTP-Client-Erweiterung

Ein neues media3-datasource-ktor Erweiterungsmodul bietet KtorDataSource, das auf dem Ktor HTTP-Stack basiert. Dies ist eine Kotlin-First-Alternative zu den vorhandenen Cronet- und OkHttp-Datenquellenmodulen, die mit Coroutinen kompatibel ist.

Asynchrone MediaSession-Verbindungen

MediaSession.Callback enthält jetzt onConnectAsync(), mit dem Sie Versuche zur Controllerverbindung asynchron verarbeiten können, z. B. um die Autorisierung zu überprüfen, bevor Sie eine Verbindung akzeptieren. Sie können sofort ein Future mit Futures.immediateFuture(ConnectionResult) zurückgeben, um dasselbe Verhalten wie bei der vorhandenen onConnect zu erzielen. 

override fun onConnectAsync(
  session: MediaSession,
  controller: MediaSession.ControllerInfo
): ListenableFuture<MediaSession.ConnectionResult> {
  return authenticateControllerAsync(controller)
}

Sicherere MediaSession-Standardeinstellungen

Für Apps, die onConnect oder onConnectAsync in MediaSession.Callback nicht überschreiben, verwendet die Bibliothek jetzt standardmäßig eine sicherere Konfiguration. Insbesondere werden Sitzungsdaten standardmäßig nicht mehr für nicht vertrauenswürdige Controller freigegeben. Das bedeutet, dass Apps von Drittanbietern oder Nicht-System-Apps ohne Benachrichtigungszugriff nicht auf Sitzungsdaten zugreifen können, es sei denn, Sie implementieren diese Callback-Methoden explizit, um die Verbindung zu autorisieren.

Neue Muxer-Implementierungen und Container-Parsing

OggMuxer und WavMuxer

Wir haben zwei neue spezielle Muxer hinzugefügt: OggMuxer zum Muxen von OPUS- und VORBIS-Streams in Standard-.ogg-Dateien und WavMuxer zum Generieren unkomprimierter und Gleitkomma-PCM-.wav-Audiodateien.

Container-Parsing und Track-Referenzen

  • MP4-Track-Referenzen (tref): Mp4Muxer.addTrackReference ermöglicht die Verknüpfung abhängiger Metadaten oder Aux-Tracks mit primären Videostreams.
  • Kapitel-Extraktion: QuickTime- und Nero-Kapitel aus MP4-Dateien (.m4a, .m4b) und Matroska-Kapitel werden jetzt als Chapter-Metadateneinträge für die Navigation in Hörbüchern und Podcasts extrahiert.

Verwenden Sie die Problemverfolgung, um Fehler zu melden oder Fragen zu stellen oder Feature-Anfragen zu senden. Wir freuen uns auf Ihre Antwort.

Geschrieben von:
Weiterlesen