Media3 1.9.0 ist da! Neben den üblichen Fehlerkorrekturen und Leistungsverbesserungen enthält die neueste Version auch vier neue oder weitgehend überarbeitete Module:
media3-inspector- Metadaten und Frames außerhalb der Wiedergabe extrahierenmedia3-ui-compose-material3- In wenigen Schritten eine einfache Material3 Compose-Medien-UI erstellenmedia3-cast- Übergänge zwischen Cast- und lokalen Wiedergaben automatisch verarbeitenmedia3-decoder-av1- Einheitliche AV1-Wiedergabe mit dem überarbeiteten Erweiterungsdecoder, der auf der dav1d-Bibliothek basiert
Außerdem haben wir Verbesserungen beim Caching und bei der Speicherverwaltung in PreloadManager vorgenommen und mehrere neue Vereinfachungen für ExoPlayer, Transformer und MediaSession eingeführt.
Mit dieser Version erhalten Sie auch den ersten experimentellen Zugriff auf CompositionPlayer, um Medienbearbeitungen in der Vorschau anzusehen.
Lesen Sie weiter, um mehr zu erfahren. Wie immer finden Sie in den vollständigen Versionshinweisen eine umfassende Übersicht über die Änderungen in dieser Version.
Metadaten und Frames außerhalb der Wiedergabe extrahieren
Es gibt viele Fälle, in denen Sie Medien prüfen möchten, ohne die Wiedergabe zu starten. Beispielsweise möchten Sie möglicherweise erkennen, welche Formate sie enthalten oder wie lang sie sind, oder Thumbnails abrufen.
Das neue Modul media3-inspector kombiniert alle Dienstprogramme zum Prüfen von Medien ohne Wiedergabe an einem Ort:
MetadataRetrieverzum Lesen von Dauer, Format und statischen Metadaten aus einemMediaItem.FrameExtractorzum Abrufen von Frames oder Thumbnails aus einem Element.MediaExtractorCompatals direkter Ersatz für die Android-Plattformklasse MediaExtractor, um detaillierte Informationen zu Beispielen in der Datei zu erhalten.
MetadataRetriever und FrameExtractor folgen einem einfachen AutoCloseable-Muster. Weitere Informationen finden Sie auf unseren neuen Hilfeseiten.
suspend fun extractThumbnail(mediaItem: MediaItem) {
FrameExtractor.Builder(context, mediaItem).build().use {
val thumbnail = frameExtractor.getThumbnail().await()
}
}In wenigen Schritten eine einfache Material3 Compose-Medien-UI erstellen
In früheren Versionen haben wir begonnen, Connector-Code zwischen Compose-UI-Elementen und Ihrer Player-Instanz bereitzustellen. Mit Media3 1.9.0 haben wir ein neues Modul media3-ui-compose-material3 mit vollständig gestalteten Material3-Schaltflächen und Inhaltselementen hinzugefügt. Damit können Sie in wenigen Schritten eine Medien-UI erstellen und gleichzeitig den Stil flexibel anpassen. Wenn Sie Ihren eigenen UI-Stil erstellen möchten, können Sie die Bausteine verwenden, die die gesamte Update- und Verbindungslogik übernehmen. So können Sie sich ganz auf das Design des UI-Elements konzentrieren. Weitere Informationen finden Sie auf unseren erweiterten Hilfeseiten für die Compose-UI-Module.
Wir arbeiten auch weiterhin an noch mehr Compose-Komponenten, z. B. einer vorgefertigten Suchleiste, einem vollständigen sofort einsatzbereiten Ersatz für PlayerView sowie an der Integration von Untertiteln und Anzeigen.
@Composable fun SimplePlayerUI(player: Player, modifier: Modifier = Modifier) { Column(modifier) { ContentFrame(player) // Video surface and shutter logic Row (Modifier.align(Alignment.CenterHorizontally)) { SeekBackButton(player) // Simple controls PlayPauseButton(player) SeekForwardButton(player) } } }
Einfache Compose-Player-UI mit sofort einsatzbereiten Elementen
Übergänge zwischen Cast- und lokalen Wiedergaben automatisch verarbeiten
Der CastPlayer im media3-cast Modul wurde überarbeitet, um Übergänge zwischen der lokalen Wiedergabe (z. B. mit ExoPlayer) und der Remote-Cast-Wiedergabe automatisch zu verarbeiten.
Wenn Sie Ihre MediaSession einrichten, erstellen Sie einfach einen CastPlayer um Ihren ExoPlayer und fügen Sie Ihrer UI eine MediaRouteButton hinzu. Das war's!
// MediaSession setup with CastPlayer val exoPlayer = ExoPlayer.Builder(context).build() val castPlayer = CastPlayer.Builder(context).setLocalPlayer(exoPlayer).build() val session = MediaSession.Builder(context, castPlayer).build() // MediaRouteButton in UI @Composable fun UIWithMediaRouteButton() { MediaRouteButton() }
Neue CastPlayer-Integration in der Media3-Sitzungsdemo-App
Einheitliche AV1-Wiedergabe mit der überarbeiteten Erweiterung, die auf dav1d basiert
Die Version 1.9.0 enthält ein vollständig überarbeitetes AV1-Erweiterungsmodul, das auf der beliebten dav1d-Bibliothek basiert.
Wie bei allen Erweiterungsdecoder-Modulen muss es aus der Quelle erstellt werden , um den relevanten nativen Code korrekt zu bündeln. Das Bündeln eines Decoders sorgt für Konsistenz und Formatunterstützung auf allen Geräten. Da die Decodierung jedoch in Ihrem Prozess ausgeführt wird, ist es am besten für Inhalte geeignet, denen Sie vertrauen.
Caching und Speicherverwaltung in PreloadManager integrieren
Wir haben auch unseren PreloadManager verbessert. Damit konnten Sie bereits Medien außerhalb der Wiedergabe in den Arbeitsspeicher vorab laden und sie dann bei Bedarf nahtlos an einen Player übergeben. Obwohl die Leistung recht gut war, mussten Sie darauf achten, die Arbeitsspeicherlimits nicht zu überschreiten, indem Sie versehentlich zu viel vorab laden. Mit Media3 1.9.0 haben wir zwei Funktionen hinzugefügt, die dies viel einfacher und stabiler machen:
- Caching-Unterstützung : Wenn Sie festlegen, wie weit vorab geladen werden soll, können Sie jetzt
PreloadStatus.specifiedRangeCached(0, 5000)als Zielstatus für vorab geladene Elemente auswählen. Dadurch wird der angegebene Bereich Ihrem Cache auf dem Laufwerk hinzugefügt, anstatt die Daten in den Arbeitsspeicher zu laden. So können Sie einen viel größeren Bereich von Elementen für das Vorabladen bereitstellen, da die Elemente, die weiter vom aktuellen Element entfernt sind, nicht mehr Arbeitsspeicher belegen müssen. Dazu muss einCacheinDefaultPreloadManager.Builderfestgelegt werden. - Automatische Speicherverwaltung : Wir haben auch unsere
LoadControl-Schnittstelle aktualisiert, um den Fall des Vorabladens besser zu verarbeiten. So können Sie jetzt ein explizites oberes Arbeitsspeicherlimit für alle vorab geladenen Elemente im Arbeitsspeicher festlegen. Standardmäßig sind das 144 MB. Sie können das Limit inDefaultLoadControl.Builderkonfigurieren. DerDefaultPreloadManagerbeendet das Vorabladen automatisch, sobald das Limit erreicht ist, und gibt bei Bedarf automatisch Arbeitsspeicher für Elemente mit niedrigerer Priorität frei.
Neue vereinfachte Standardverhaltensweisen in ExoPlayer nutzen
Wie immer haben wir auch viele inkrementelle Verbesserungen an ExoPlayer vorgenommen. Einige Beispiele:
- Stummschalten und Stummschaltung aufheben : Wir hatten bereits eine
setVolume-Methode, haben aber jetzt die praktischen Methodenmuteundunmutehinzugefügt, um die vorherige Lautstärke einfach wiederherzustellen, ohne sie selbst im Blick behalten zu müssen. - Erkennung von Playern, die nicht mehr reagieren : In einigen seltenen Fällen kann der Player in einem Pufferungs- oder Wiedergabestatus hängen bleiben, ohne dass etwas passiert, z. B. aufgrund von Codec-Problemen oder Fehlkonfigurationen. Ihre Nutzer werden sich ärgern, aber diese Probleme werden in Ihren Analysen nicht angezeigt. Um dies deutlicher zu machen, meldet der Player jetzt eine
StuckPlayerException, wenn er einen solchen Zustand erkennt. - Wakelock standardmäßig : Die Verwaltung von Wakelocks war bisher optional. Das führte zu schwer zu findenden Grenzfällen, in denen die Wiedergabe im Hintergrund stark verzögert werden konnte. Jetzt ist diese Funktion standardmäßig aktiviert. Sie müssen sich also keine Gedanken darüber machen und können auch die gesamte manuelle Wakelock-Verwaltung für die Wiedergabe entfernen.
- Vereinfachte Einstellung für die Logik der Untertitelschaltfläche : Es war überraschend schwierig,
TrackSelectionParametersso zu ändern, dass Untertitel ein- und ausgeschaltet werden konnten. Deshalb haben wir für diesen Anwendungsfall eine einfache boolesche OptionselectTextByDefaulthinzugefügt.
Einstellungen für Medientasten in MediaSession vereinfachen
Bisher mussten Sie benutzerdefinierte Befehle und Schaltflächen definieren, um festzulegen, welche Schaltflächen in der Medienbenachrichtigung auf Android Auto oder WearOS angezeigt werden sollen. Das galt auch, wenn Sie einfach eine Standard-Player-Methode auslösen wollten.
Media3 1.9.0 bietet eine neue Funktion, die dies viel einfacher macht. Sie können jetzt Ihre Einstellungen für Medientasten definieren mit einem Standard-Player-Befehl, ohne dass eine benutzerdefinierte Befehlsverarbeitung erforderlich ist.
session.setMediaButtonPreferences(listOf(
CommandButton.Builder(CommandButton.ICON_FAST_FORWARD) // choose an icon
.setDisplayName(R.string.skip_forward)
.setPlayerCommand(Player.COMMAND_SEEK_FORWARD) // choose an action
.build()
))
Einstellungen für Medientasten mit der Schaltfläche „Schneller Vorlauf“
CompositionPlayer für die Echtzeitvorschau
Mit der Version 1.9.0 wird CompositionPlayer unter einer neuen Annotation @ExperimentalApi eingeführt. Die Annotation gibt an, dass die Funktion für Tests verfügbar ist, sich aber noch in der Entwicklung befindet.
CompositionPlayer ist eine neue Komponente in den Media3-Bearbeitungs-APIs, die für die Echtzeitvorschau von Medienbearbeitungen entwickelt wurde. Basiert auf der bekannten Media3 Player Schnittstelle, CompositionPlayer ermöglicht es Nutzern, ihre Änderungen in Aktion zu sehen, bevor sie den Exportprozess starten. Dabei wird dasselbe Composition-Objekt verwendet, das Sie an Transformer übergeben würden, um den Bearbeitungsablauf zu optimieren, indem das Datenmodell für Vorschau und Export vereinheitlicht wird.
Wir empfehlen Ihnen, CompositionPlayer zu verwenden und uns Feedback zu geben. Weitere Informationen finden Sie in den kommenden Beiträgen und Updates der Dokumentation.
InAppMuxer als Standard-Muxer in Transformer
Transformer verwendet jetzt InAppMp4Muxer als Standard-Muxer zum Schreiben von Mediendateien. Intern hängt InAppMp4Muxer vom Media3 Muxer-Modul ab, das ein einheitliches Verhalten über alle API-Versionen hinweg bietet.
Transformer verwendet zwar nicht mehr standardmäßig den MediaMuxer der Android-Plattform, Sie können aber weiterhin FrameworkMuxer.Factory über setMuxerFactory bereitstellen, wenn dies für Ihren Anwendungsfall erforderlich ist.
Neue APIs zur Geschwindigkeitsanpassung
Mit der Version 1.9.0 werden die APIs zur Geschwindigkeitsanpassung für die Medienbearbeitung vereinfacht. Wir haben neue Methoden direkt in EditedMediaItem.Builder eingeführt, um die Geschwindigkeit zu steuern. Dadurch wird die API intuitiver. Sie können die Geschwindigkeit eines Clips jetzt ändern, indem Sie setSpeed(SpeedProvider provider) für EditedMediaItem.Builder aufrufen:
val speedProvider = object : SpeedProvider {
override fun getSpeed(presentationTimeUs: Long): Float {
return speed
}
override fun getNextSpeedChangeTimeUs(timeUs: Long): Long {
return C.TIME_UNSET
}
}
EditedMediaItem speedEffectItem = EditedMediaItem.Builder(mediaItem)
.setSpeed(speedProvider)
.build()Dieser neue Ansatz ersetzt die bisherige Methode mit Effects#createExperimentalSpeedChangingEffects(), die wir eingestellt haben und in einer zukünftigen Version entfernen werden.
Track-Typen für EditedMediaItemSequence einführen
In der Version 1.9.0 muss für EditedMediaItemSequence bei der Sequenzerstellung die gewünschten Ausgabetrack-Typen angegeben werden. Diese Änderung sorgt dafür, dass die Track-Verarbeitung in der gesamten Komposition expliziter und robuster ist.
Dies erfolgt über einen neuen EditedMediaItemSequence.Builder-Konstruktor, der eine Reihe von Track-Typen akzeptiert (z.B. C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO).
Um die Erstellung zu vereinfachen, haben wir neue statische Hilfsmethoden hinzugefügt:
- EditedMediaItemSequence.withAudioFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withVideoFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withAudioAndVideoFrom(List<EditedMediaItem>)
Wir empfehlen Ihnen, zum neuen Konstruktor oder zu den Hilfsmethoden zu migrieren, um klarere und zuverlässigere Sequenzdefinitionen zu erhalten.
Beispiel für das Erstellen einer reinen Videosequenz:
EditedMediaItemSequence videoOnlySequence =
EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_VIDEO))
.addItem(editedMediaItem)
.build()Wenn Sie Fehler finden oder Fragen oder Funktionsanfragen haben, wenden Sie sich bitte über den Media3-Issue-Tracker an uns. Wir freuen uns darauf, von Ihnen zu hören!
Weiterlesen
-
Produktneuheiten
Der KI-Workflow und die Anforderungen jedes Entwicklers sind einzigartig. Daher ist es wichtig, dass Sie auswählen können, wie KI Ihre Entwicklung unterstützt. Im Januar haben wir die Möglichkeit eingeführt, ein beliebiges lokales oder Remote-KI-Modell auszuwählen, um die KI-Funktionen in Android Studio zu nutzen.
Matthew Warner • Lesezeit: 2 Minuten
-
Produktneuheiten
Android Studio Panda 3 ist jetzt stabil und kann für die Produktion verwendet werden. Mit dieser Version haben Sie noch mehr Kontrolle und Anpassungsmöglichkeiten für Ihre KI-gestützten Workflows. So können Sie noch einfacher hochwertige Android-Apps entwickeln.
Matt Dyor • Lesezeit: 3 Minuten
-
Produktneuheiten
Wir bei Google möchten die leistungsstärksten KI-Modelle direkt auf Android-Geräten verfügbar machen. Heute freuen wir uns, die Veröffentlichung unseres neuesten hochmodernen offenen Modells anzukündigen: Gemma 4.
Caren Chang, David Chou • Lesezeit: 3 Minuten
Auf dem Laufenden bleiben
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.