Neue Funktionen von AndroidX Media und ExoPlayer / Sudo Null IT News

Das Erstellen von Anwendungen mit Multimedia-Wiedergabefunktionen bringt eine Reihe von Herausforderungen mit sich, die die Entwicklung erschweren. In diesem Jahr wurde es jedoch möglich, Jetpack Media3 zu verwenden, eine Lösung, die die Art und Weise, wie Sie mit Multimedia interagieren, vollständig verändert. Ein Android-Entwickler wird über diese Bibliothek und ihre Fähigkeiten berichten CleverKürbis Sergej Smirnow.

Um eine Multimediadatei abzuspielen, werden zwei Komponenten benötigt: der Mediaplayer selbst, der Audio und Video abspielt, und eine Benutzeroberfläche, die einige Metadaten anzeigt (z. B. den Titel, die Dauer des Audiotracks oder Videos und die aktuelle Wiedergabe). Status).

Darüber hinaus können Sie über die Benutzeroberfläche mit dem Player über Schaltflächen interagieren – die Anwendung empfängt die Befehle Wiedergabe, Pause, Zeitnavigation und zeigt Benachrichtigungen an, wenn sich der Status ändert.

Das Problem ist, dass bei dieser Architektur das Android-System und andere Anwendungen keine Informationen über die Medienwiedergabe erhalten. Infolgedessen werden Benutzern praktische Möglichkeiten zum Anzeigen und Steuern des Players außerhalb unserer Anwendung vorenthalten.

Um dieses Problem zu lösen, müssen Sie den Player mit einer Multimedia-Sitzung verbinden – dann erhält das System Informationen darüber, dass die Datei gerade abgespielt wird, und bietet die Kontrolle. In diesem Fall müssen Sie die Anwendung selbst nicht eingeben.

Dadurch stehen viele nützliche Integrationen zur Verfügung. Sie können beispielsweise die Wiedergabe einer Datei über eine Smartwatch steuern oder die Tasten am Kopfhörer verwenden. In Zukunft ist geplant, die Steuerung aus anderen Anwendungen sowie über einen Sprachassistenten zu implementieren.

Somit ermöglicht Ihnen eine solche Architektur, die Fähigkeiten sowohl des Players selbst als auch des gesamten Systems als Ganzes umfassender zu nutzen.

Bibliotheken

Das Hauptproblem, mit dem Entwickler in diesem Bereich konfrontiert sind, ist die Auswahl einer geeigneten Bibliothek, um die Funktion der Wiedergabe und des Medienmanagements zu implementieren.

Die Lösung für dieses Problem ist Jetpack Media3. Aber um seine Vorteile besser zu verstehen, lassen Sie uns zunächst einige der Bibliotheken überprüfen, die zuvor verwendet wurden.

androidx.media2. Es implementiert Wiedergabemodule, Schnittstellenkomponenten, Mediensitzungssteuerung und allgemeine Datenstrukturen und -funktionen.

ExoPlayer. Dies ist eine Bibliothek für Medienwiedergabevorgänge. Es wird in Hunderttausenden von Anwendungen verwendet, einschließlich unserer eigenen Kassir.ru – hier werden mit seiner Hilfe Geschichten und Videos in Bannern abgespielt.

Es gibt Module in diesen APIs, die sich fast gegenseitig duplizieren und im Grunde die gleichen Funktionen ausführen.
Es gibt auch andere Bibliotheken, einschließlich der ursprünglichen Bibliothek androidx.media compat.

Viele ähnliche Bibliotheken, ihre Fähigkeiten und Nachteile, verschiedene Kompatibilitätsbedingungen – all dies erschwert die Auswahl einer zu verwendenden Bibliothek.

Für die Bequemlichkeit der Entwickler hat sich Jetpack Media3 entschieden, diese Bibliotheken zu kombinieren.

  1. Es wurde ein gemeinsames Modul erstellt.

  2. ExoPlayer wurde standardisiert, wobei sein umfangreiches Set an Unterstützungsmodulen beibehalten wurde.

  3. Ein Modul mit Benutzerschnittstellen- und Playeransichtskomponenten und ein weiteres Modul mit API zum Arbeiten mit Systemmediensitzungen wurden implementiert.

Das Ergebnis ist androidx.media3, das einen verwandten Satz von Bibliotheken für verschiedene Medienanwendungsfälle bereitstellt.

Wiedergabe im Vordergrund

Lassen Sie uns die wichtigsten Anwendungsfälle beschreiben und die Vorteile von Jetpack Media3 im Vergleich zu früheren Versionen hervorheben.
Betrachten wir die Möglichkeit, Inhalte abzuspielen, bei denen sich die Anwendung im Vordergrund befindet. Hier können Sie die Architektur verwenden, wenn sich die Benutzeroberfläche, der Player und die Mediensitzung in derselben Aktivität befinden. In diesem Fall ermöglicht Ihnen die Mediensitzung die Unterstützung von Medientastenereignissen und Bild-in-Bild-Anzeigesteuerungen.

In der Vergangenheit war dieser Ansatz schwierig, da die Mediensitzung mit früheren APIs nicht direkt mit dem Player interagieren konnte. Es war ein Verbindungsobjekt erforderlich, das Befehle und Rückrufe zwischen diesen Komponenten übersetzt. Es war viel Code erforderlich, um den vollständigen Satz von Befehlen zu implementieren, die eine Mediensitzung empfangen konnte, und um die verschiedenen Zustände des Players zu handhaben. Aus diesem Grund traten zusätzliche Schwierigkeiten auf und das Fehlerrisiko stieg.

Um dieses Problem zu beheben, hat Media3 den Connector aufgegeben. Media3 bietet ExoPlayer als seinen Standard-Player an – und darin ist die Player-Schnittstelle implementiert.

Daher hat Google die MediaSession- und UI-Widgets aktualisiert, um dieselbe Player-Oberfläche zu akzeptieren, indem sie direkt miteinander verknüpft wurden.

Wiedergabe im Hintergrund

Bei der Wiedergabe im Hintergrund ist die Sache etwas komplizierter. Die Architektur ist aufgeteilt in einen Dienst, der den Player enthält, und eine Aktivität für die Benutzeroberfläche.

Der Dienst startet eine Mediensitzung, die verwendet wird, um die Wiedergabe anzukündigen und Befehle an den Player zu senden. Und innerhalb der Aktivität erstellen wir einen Mediencontroller, der zur Kommunikation mit der Mediensitzung dient.

Wie bereits erwähnt, kann der Player nicht direkt mit der Sitzung interagieren – ein Connector ist erforderlich. Es wird auch für den Mediencontroller und unsere Benutzeroberfläche benötigt. Das Ergebnis ist das gleiche Problem wie beim Spielen im Vordergrund – Konnektoren verkomplizieren den Code und führen zu Abstürzen.

Um dieses Problem zu beheben, wurde die generische Player-Schnittstelle implementiert. Der ExoPlayer ist jetzt direkt mit der Mediensitzung kompatibel und der Mediencontroller ist direkt mit der Benutzeroberfläche kompatibel. Diese Änderungen führen zu Code, der einfacher zu warten und weniger fehleranfällig ist.

PlayerService

Sehen wir uns nun an, wie Sie eine Anwendung erstellen, die Audio- und Videoinhalte im Hintergrund abspielt.

Zunächst erstellen wir eine Instanz von ExoPlayer. Dann starten wir die Mediensitzung und übergeben ihr unsere Player-Implementierung.

Media3 aktualisiert die Mediensitzung automatisch basierend auf dem Status des Players. Verbindungsschichten sind in diesem Fall nicht erforderlich.

Fahren wir mit der Aktivität fort, in der wir die Benutzeroberfläche anzeigen werden.

Wir setzen einen Link zur Wiedergabesitzung in der OnStart()-Methode des Aktivitätslebenszyklus.

  1. Wir generieren ein Token für die Sitzung, zu der wir uns verbinden möchten.

  2. Wir erstellen einen MediaController, der sich asynchron mit der Mediensitzung verbindet.

  3. Sie können den Listener auch verbinden, um eine Verbindung herzustellen.

  4. Da der MediaController nur eine Implementierung der Player-Schnittstelle ist, können wir ihn direkt an die PlayerView übergeben.

Nach der Einrichtung wird die Benutzeroberfläche auf die gleiche Weise aktualisiert wie beim Spielen im Vordergrund, wenn sich die Benutzeroberfläche und der Player in derselben Aktivität befinden. Dies funktioniert auch dann, wenn Ihr Dienst und Ihr Player in einem separaten Prozess ausgeführt werden.

Arbeiten mit anderen Apps

Lassen Sie uns abschließend auf die Frage eingehen, wie unsere Anwendung mit anderen Anwendungen auf dem Android-System zusammenarbeiten kann.

Es gibt zwei Hauptoptionen.

Im ersten Fall öffnen wir den Zugriff auf die Mediensitzung, damit andere Anwendungen und Geräte unseren Mediaplayer und die Wiedergabe steuern können. Für den Benutzer ist diese Option möglicherweise die bequemste.

Im zweiten Fall übergeben wir den Wiedergabeinhalt – andere Anwendungen können ihre eigene Benutzeroberfläche verwenden. Dies ist beispielsweise für Android Auto wichtig, das eine eigene, fahrerfreundliche Benutzeroberfläche für unsere Inhalte bereitstellt.

Similar Posts

Leave a Reply

Your email address will not be published.