Cast-Plugin für das Native SDK für Android

In diesem Thema erfahren Sie, wie Sie Ihre Videos mithilfe des Cast-Plugins für das Brightcove Native SDK für Android an ein mit Chromecast verbundenes Fernsehgerät übertragen können.

Überblick

Mit Google Cast Technologie können Sie gestreamte Videoinhalte von Ihren Mobilgeräten zu hochauflösenden Fernseh- und Heimaudiosystemen initiieren und steuern. Tippen Sie in Ihrer App auf die Cast-Schaltfläche, um Ihre Inhalte auf einem großen Bildschirm zu streamen.

Um eine Cast-Anwendung zu erstellen, benötigen Sie die folgenden Komponenten:

  • EIN Absender Bewerbung - Diese befindet sich auf Ihrem Mobilgerät und erkennt Empfängergeräte, stellt eine sichere Verbindung her und spiegelt Ihre Inhalte. Die Sender-App ist der lokale Player, mit dem Inhalte an die Empfänger-App auf Ihrem Chromecast-Gerät übertragen werden. Nachdem Sie die Übertragung an die Empfänger-App vorgenommen haben, können Sie sie sich als Fernbedienung für den Chromecast vorstellen.

    Die Absender-App wird vom Cast-Plug-in für das Brightcove Native SDK für Android bereitgestellt. In diesem Thema erfahren Sie darüber.

  • EIN Empfängeranwendung - Diese Anwendung läuft auf dem Chromecast-Gerät. Man kann es sich als eine einseitige HTML-App mit CSS- und JavaScript-Assets vorstellen.

    Gehen Sie zum Testen wie folgt vor:

    1. Beginnen mit Sample Cast-Empfänger von Google
    2. Rezension Google Cast-Apps Dokumentation

    Für Produktionszwecke veranschaulicht dieses Dokument die Verwendung von Brightcove Receiver v2.0.0.

Unterstützte SDK-Version

Um das Cast-Plug-in mit dem neuen Brightcove Receiver v2.0 zu verwenden, müssen Sie das Brightcove Native SDK für Android Version 6.16.0 und höher verwenden.

Das Cast-Plugin verstehen

Das Cast-Plugin basiert auf dem neue ExoPlayer Cast-Erweiterung und das Google Play Services Cast Framework. Nach dem Hinzufügen der Cast-Plugin-Abhängigkeit zieht gradle die Play Services Cast Framework-Abhängigkeit, die ExoPlayer Cast Extension-Abhängigkeit zusammen mit anderen erforderlichen Abhängigkeiten.

Das Cast-Plug-in wurde neu gestaltet, um Ihren Aufwand bei der Integration in Video Cloud zu minimieren. Wenn Sie Video Cloud verwenden, BrightcoveCastMediaManager -Klasse sammelt Informationen aus der Video Cloud-Antwort, z Video und Source Objekte, jedes Mal, wenn die EventType.SET_SOURCE Ereignis ausgegeben wird. Diese Informationen werden zwischengespeichert und können verwendet werden, wenn der Benutzer die Wiedergabe auswählt, um das Video in die Warteschlange zu stellen.

Integration des Cast-Plugins

Es gibt zwei Möglichkeiten, wie Sie Ihre App mit dem Native SDK für Android Cast-Plug-in integrieren können. Sie können entweder den Brightcove Cast Receiver v2.0 oder den Google Cast Demo Receiver integrieren.

Für beide Integrationen müssen Sie Ihrem App-Projekt diese Abhängigkeit hinzufügen:

implementation "com.brightcove.player:android-cast-plugin:6.16.0"

Verwenden des Brightcove Cast-Empfängers v2.0

Diese Integration ist für Brightcove-Kunden gedacht, die Brightcove-APIs verwenden, um ihre Inhalte bereitzustellen.

Ein vollständiges Codebeispiel finden Sie im BasicCastBrightcoveReceiverSampleApp.

Verwenden des Google Cast-Demoempfängers

Diese Integration ist für Brightcove-Kunden gedacht, die neu im Casting sind.

Ein vollständiges Codebeispiel finden Sie im BasicCastGoogleReceiverSampleApp.

Angeben Ihrer eigenen Cast-Empfänger-App-ID

Die BasicCastGoogleReceiverSampleApp legt eine Google Demo Receiver-App-ID fest, die für den Einstieg und das Testen hilfreich sein kann, jedoch nicht für die Produktion.

Um diesen Wert mit Ihrer Cast Receiver-Anwendung zu überschreiben, definieren Sie den folgenden Zeichenfolgenwert in der Beispiel-App strings.xml Datei:

<string name="cast_receiver_app_id">4F8B3483</string>

Die Brightcove-GoogleCast-Komponente

Die GoogleCastComponent class ist die Hauptklasse des Brightcove Cast-Plug-ins. Es instanziiert den ExoPlayer CastPlayer und setzt seine Listener. Es stellt einige wichtige Methoden zum Laden eines Videos oder zum Hinzufügen zur Warteschlange bereit. Die GoogleCastComponent -Klasse fügt außerdem mehrere Brightcove-Ereignis-Listener hinzu, um Aktivitäts- und Fragment-Lebenszyklusereignisse zu verarbeiten, sowie andere Ereignis-Listener, mit denen Sie Medieninformationen ausgeben können, um ein Video auf Ihr Chromecast-Gerät zu laden.

Die GoogleCastComponent verwendet jetzt ein Builder-Muster. In den nativen SDK für Android-Versionen vor v6.16.0 mussten Sie die Komponente instanziieren und die Context und EventEmitter zum GoogleCastComponent Konstrukteur. Anschließend würden Sie die Optionen der Komponente in einer Reihe separater Methodenaufrufe festlegen.

Verwenden Sie ab dem Native SDK für Android v6.16.0 das Builder-Muster, um eine Instanz des GoogleCastComponent und legen Sie seine Optionen fest, alles innerhalb einer einzigen Kette von Builder-Methodenaufrufen.

Benutzerdefinierte Daten

Wie bei der GoogleCastComponent , das CustomData -Klasse verwendet ein Builder-Muster, um das Objekt zu instanziieren und ihm Eigenschaften hinzuzufügen. Während der Brightcove-Empfänger CustomData Um Videos aus Ihrem Brightcove-Katalog abzurufen, ist es nicht erforderlich, eine vollständige CustomData -Objekt, beispielsweise für das Casting eines Remote-Assets. Es ist auch wichtig zu beachten, dass bei Verwendung des Google Demo Receivers die Verwendung von CustomData wird nicht unterstützt. Für die Zwecke dieser Diskussion konzentrieren wir uns auf CustomData an den Empfänger gesendet, der zum Abrufen der Videodaten aus dem Brightcove-Katalog verwendet wird.

Was sind CustomData?

CustomData ist ein JSON-Objekt, das in der MediaInfo Objekt. Die beabsichtigte Verwendung ist mit der Brightcove Cast Receiver App v2.0.

CustomData mit dem Brightcove-Empfänger und Katalogdaten

Bei der Integration mit dem Brightcove-Empfänger wird die CustomData Das JSON-Objekt nimmt diese Form an:

"customData": {
	"accountId": "1234567890",
	"analyticsParams": {
		"application": "com.brightcove.player.test",
		"user": "abcde1c44b951234"
	},
	"catalogParams": {
		"adConfigId": null,
		"type": "video",
		"bcovAuthToken": null,
		"id": "2345678901",
		"policyKey": "BCpkPolicyKeyObject"
	}
}

Die CustomData Das obige Objektbeispiel enthält alle Datenelemente, die zum Umwandeln eines Videos vom Brightcove-Empfänger erforderlich sind. Diese Daten sind unabhängig von der Verschlüsselung gleich, dh bei DRM-Videos ist keine zusätzliche Struktur der Lizenz-URL notwendig.

Sie finden auch ein Beispiel für die CustomData Objekt in der BrightcoveCastBrightcoveReceiverSampleApp.

CustomData mit dem Google Demo Receiver

Wie oben erwähnt, CustomData wird vom Google Demo Receiver nicht unterstützt.

BrightcoveCastMediaManager

Es ist möglich, die BrightcoveCastMediaManager , wie oben gezeigt, um seine Methoden zu überschreiben oder eigene zu implementieren. Beispiele für das Erweitern der BrightcoveCastMediaManager-Klasse finden Sie unter:

  • Erweitern Sie den Abschnitt BrightcoveCastMediaManager
  • BasicCastCustomRemoteVideoSampleApp

OptionenAnbieter

Als nächstes müssen Sie die OptionenAnbieter Implementierung für das Google Cast-Framework. Die OptionsProvider Schnittstelle hilft bei der Einrichtung mehrerer Optionen, die zum Initialisieren der CastContext Klasse. Hier legen Sie die Cast-Empfänger-App-ID fest. Um mehr über die Integration der . zu erfahren OptionsProvider , siehe Googles Den Besetzungskontext initialisieren dokumentieren.

Das Brightcove Cast-Plug-in enthält Folgendes: DefaultOptionsProvider -Klasse, wobei die Cast-Empfänger-App-ID über einen Zeichenfolgenschlüssel festgelegt wird, der in der strings.xml Ressourcendatei. Weitere Informationen und Informationen zum Überschreiben in Ihrer App finden Sie im Verwenden Ihrer eigenen Cast-Empfänger-App-ID Abschnitt oben.

Ob Sie die DefaultOptionsProvider Klasse oder deine eigene OptionsProvider Implementierung müssen Sie die OptionsProvider Name der Implementierungsklasse im AndroidManifest.xml Datei als Schlüssel-Wert-Paar-Metadaten, wie hier gezeigt:

<meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="com.brightcove.cast.DefaultOptionsProvider" />

Wenn Sie das verwenden DefaultOptionsProvider Klasse, können Sie die ExpandedControllerActivity um die Cast-Benachrichtigung zu aktivieren/deaktivieren, indem du ähnliche Metadaten-Informationen in deinem AndroidManifest.

Erweiterte Controller-Aktivität

Die Erweiterte Controller-Aktivität wird mit der Google Cast-Bibliothek geliefert und ermöglicht es Ihnen, das auf Ihrem Chromecast-Gerät übertragene Video zu steuern. Diese Klasse bietet eine gewisse Anpassungsflexibilität. Es stehen beispielsweise fünf Slots zum Anzeigen von Schaltflächen zur Verfügung, wobei der dritte Slot für die nicht konfigurierbare Play-Schaltfläche reserviert ist. Die restlichen Schaltflächen können als andere vordefinierte Schaltflächen oder als Ihre eigenen benutzerdefinierten Schaltflächen eingerichtet werden.

Das Brightcove Cast-Plug-in bietet die Unterklasse DefaultExpandedControllerActivity. Wir haben die folgenden Schaltflächen in der folgenden Reihenfolge aktiviert:

  • Untertitel
  • Zurück überspringen
  • Spiel
  • Das Nächste überspringen
  • Stummschaltung

Darüber hinaus stellt die Suchleiste die gleiche Standard-Zeichnbarkeit ein, die im Standard verwendet wird BrightcoveMediaController:

  • Der Fortschritt Drawable:
    R.drawable.default_scrubber_progress_horizontal
  • Der Daumen zum Zeichnen:
    R.drawable.default_scrubber_thumb

Informationen zum Anpassen der Suchleiste finden Sie im SeekBarColorsSampleApp.

Um die DefaultExpandedControllerActivity oder deine eigene ExpandedControllerActivity , legen Sie die folgenden Metadaten in Ihrem AndroidManifest.xml Datei:

<meta-data  android:name="com.brightcove.cast.DefaultOptionsProvider.EXPANDED_CONTROLLER_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.DefaultExpandedControllerActivity" />

Cast-Benachrichtigung

Wenn die Cast-Benachrichtigung aktiviert ist, wird die Benachrichtigung angezeigt, wenn Sie ein Video streamen und Ihre App in den Hintergrund stellen. B. nach Drücken der Home-Taste.

<pUm die Besetzungsbenachrichtigung zu aktivieren, legen Sie die folgenden Metadaten in Ihrem . fest AndroidManifest.xml Datei und geben Sie den Namen der Aktivität an, die gestartet werden soll, wenn auf die Benachrichtigung geklickt wird:

<meta-data android:name="com.brightcove.cast.DefaultOptionsProvider.NOTIFICATION_TARGET_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.BrightcoveControllerActivity" />

Wenn Sie com.brightcove.cast.DefaultOptionsProvider.NOTIFICATION_TARGET_ACTIVITY_CLASS_NAME nicht angeben oder der Wert einen ungültigen Aktivitätsnamen hat, wird die Besetzungsbenachrichtigung deaktiviert.

Der Cast-Button

Mit der Cast-Schaltfläche können Sie ein Chromecast-Gerät im selben Netzwerk wie Ihr Gerät auswählen, eine Verbindung herstellen und eine Sitzung erstellen. Folgen Sie den Anweisungen von Google, um die Cast-Schaltfläche zu Ihrer Anwendung hinzuzufügen Besetzung integrieren: Cast-Button hinzufügen dokumentieren.

Das Brightcove Cast-Plug-in bietet eine Dienstprogrammmethode zum einfachen Einrichten der Cast-Schaltfläche. Dies ist nützlich, wenn Sie nur die Besetzungsschaltfläche zum Menü „Aktivität/Fragment“ hinzufügen möchten. Weitere Informationen finden Sie im folgenden Code:

//Activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
   super.onCreateOptionsMenu(menu);
   GoogleCastComponent.setUpMediaRouteButton(MainActivity.this, menu);
   return true;
}

Der Mini-Controller

Der Mini-Controller ist ein Fragment, das an Ihre Aktivität angehängt wird und sich normalerweise am unteren Rand des Layouts befindet. Der Mini-Controller ermöglicht Ihnen das Abspielen und Anhalten des Videos und zeigt an, wenn ein Video auf Ihrem Chromecast-Gerät abgespielt wird. Wenn auf den Mini-Controller geklickt wird, wird der erweiterte Controller gestartet.

Um den Mini Controller zu aktivieren, fügen Sie dem Layout Ihrer Aktivität den folgenden Code hinzu.

<fragment
   android:id="@+id/castMiniController"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:visibility="gone"
   class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment" />

Informationen zu Best Practices mit dem Mini Controller finden Sie im Design-Checkliste: Sender Mini-Controller dokumentieren. Einzelheiten zur Implementierung finden Sie in der Besetzung integrieren: Mini-Controller hinzufügen dokumentieren.

Fortgeschrittene Themen

Cast-Sitzung anhören

Wenn Sie möchten, dass Ihre App reagiert, wenn die Cast-Verbindung beginnt oder endet, können Sie die GoogleCastEventType.CAST_SESSION_STARTED oder GoogleCastEventType.CAST_SESSION_ENDED Ereignis-Listener wie hier gezeigt:

eventEmitter.on(GoogleCastEventType.CAST_SESSION_STARTED, new EventListener() {
   @Override
   public void processEvent(Event event) {
       // Session Started
   }
});
eventEmitter.on(GoogleCastEventType.CAST_SESSION_ENDED, new EventListener() {
   @Override
   public void processEvent(Event event) {
       // Session Ended
   }
});

Alternativ können Sie anrufen GoogleCastComponent.isSessionAvailable() um nach einer verfügbaren Sitzung zu suchen.

Ein Video streamen

Um nach erfolgreicher Verbindung ein Video auf Chromecast zu streamen, können Sie entweder den EventEmitter verwenden und die Media Info-Informationen ausgeben oder Sie können direkt die GoogleCastComponent Methoden.

Wenn Sie die Medieninfo lieber ausgeben möchten, können Sie die folgenden Ereignisse verwenden:

  • GoogleCastEventType.LOAD_MEDIA_INFO
  • GoogleCastEventType.LOAD_MEDIA_QUEUE_ITEM
  • GoogleCastEventType.ADD_MEDIA_INFO
  • GoogleCastEventType.ADD_MEDIA_QUEUE_ITEM

Die folgende Tabelle zeigt die erwarteten Eigenschaften für jedes Ereignis:

Veranstaltungsname Immobilien
Taste Wertklassentyp
LOAD_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_INFO
GoogleCastComponent.CAST_MEDIA_PLAY_POSITION
MediaInfo Ganze Zahl
LOAD_MEDIA_QUEUE_ITEM GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM MediaQueueItem
ADD_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_INFO
GoogleCastComponent.CAST_MEDIA_PLAY_POSITION
MediaInfo Ganze Zahl
ADD_MEDIA_QUEUE_ITEM GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM MediaQueueItem

Alternativ können Sie folgendes verwenden GoogleCastComponent Methoden:

  • public void loadMediaInfo(MediaInfo mediaInfo, long positionMs)
  • public void loadMediaInfo(MediaInfo mediaInfo)
  • public PendingResult<RemoteMediaClient.MediaChannelResult> loadItem(MediaQueueItem mediaQueue, int playheadPosition)
  • public PendingResult<RemoteMediaClient.MediaChannelResult> addItems(MediaQueueItem... mediaQueue )

Ändern der Standard-MediaInfo-Daten

Standardmäßig sammelt das Cast-Plugin Informationen über das aktuelle Video- und Quellobjekt, das vom EventType.SET_SOURCE event. Wenn Sie zusätzliche Informationen ändern oder hinzufügen möchten, z. B. ein benutzerdefiniertes JSON-Objekt zu Ihrem MediaInfo die Ihr App-Empfänger versteht, können Sie dies tun, indem Sie die loadMediaInfo() und addMediaInfo() Methoden aus der BrightcoveCastMediaManager. Dann, dein BrightcoveCastMediaManager Unterklasse wird als Konstruktorparameter an die GoogleCastComponent Klasse.

Innerhalb dieser Methoden können Sie Ihre MediaInfo Objekte und geben die entsprechenden Ereignisse aus, wie zuvor gezeigt. Unbedingt überprüfen com.brightcove.cast.util.CastMediaUtil , da es einige Dienstprogrammmethoden zum Erstellen eines MediaInfo aus den Video- und Quellobjekten.

Konfiguration des Cast MediaControllers

Gehen Sie folgendermaßen vor, um das Controller-Layout zu ändern, das in Ihrer Brightcove-Videoansicht angezeigt wird, wenn eine Cast-Sitzung gestartet wurde.

  1. Erweitern Sie den BrightcoveCastMediaManager
  2. Setzen Sie die MediaControllerConfig
  3. Überschreiben Sie das Setup der Steuerleiste

Erweitern Sie den BrightcoveCastMediaManager

So ändern Sie das Standardverhalten der BrightcoveCastMediaManager , erstellen Sie eine Unterklasse und überschreiben Sie einige Schlüsselmethoden:

  • public void updateBrightcoveMediaController(boolean isRemote)

    Diese Methode wird aufgerufen von der GoogleCastComponent wenn sich die Sitzung ändert; das heißt, wenn die Sitzung begonnen oder beendet wurde. Wenn die Sitzung begonnen hat, wird die isRemote Parameter wird sein true und der setupRemoteController Methode aufgerufen wird. Ansonsten der isRemote wird sein false und der resetToLocalController wird genannt.

  • protected void setupRemoteController()

    Diese Methode gibt das Ereignis aus EventType.SET_MEDIA_CONTROLLER_CONFIG mit dem MediaControllerConfig Objekt. Wir werden mehr darüber reden MediaControllerConfig später in diesem Abschnitt. Diese Methode hört auch auf die BrightcoveMediaController.CONTROL_BAR_CREATED Ereignis und reagiert mit Aufruf des setupBrightcoveControlBar Methode.

  • protected void resetToLocalController()

    Diese Methode ist für das Zurücksetzen der BrightcoveMediaController zum ursprünglichen Controller-Layout durch Senden des EventType.RESTORE_DEFAULT_MEDIA_CONTROLLER.

  • protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar)

    Sobald die BrightcoveMediaController wurde mit dem Layout in der bereitgestellten neu erstellt MediaControllerConfig , erhalten Sie Zugang zum BrightcoveControlBar Aussicht. Von hier aus können Sie auf Ihre UI-Ansichten zugreifen, z. B. Schaltflächen, in denen Sie hinzufügen können OnClickListenerist für sie.

Setzen Sie die MediaControllerConfig

Die MediaControllerConfig ist eine Konfigurationsklasse, mit der Sie das standardmäßige Steuerelementlayout des BrightcoveMediaController Klasse. In dieser Klasse können Sie das Layout und die OnTouchListener. Nach dem Erstellen und Konfigurieren können Sie dieses Objekt wie unten gezeigt ausgeben:

Map<String, Object> properties = new HashMap<>();
properties.put(Event.MEDIA_CONTROLLER_CONFIG, myMediaControllerConfig);
eventEmitter.emit(EventType.SET_MEDIA_CONTROLLER_CONFIG,properties);

Der Standard MediaControllerConfig Objekt setzt die R.layout.cast_media_controller wie das Layout mit einem einzigen Spiel Taste. Wenn Sie darauf klicken, wird ein Dialogfeld mit zwei Optionen geöffnet:

  • Jetzt spielen - Wenn ausgewählt, wird die loadMediaInfo() -Methode aufgerufen und das Video wird geladen und in Chromecast abgespielt.
  • Zur Warteschlange hinzufügen - Wenn ausgewählt, wird die addMediaInfo() -Methode aufgerufen und das Video wird am Ende der Warteschlange hinzugefügt.

Überschreiben Sie das Setup der Steuerleiste

Wenn Ihr Media-Controller-Layout durch Ausgeben des MediaControllerConfig , das BrightcoveControlBar Ansicht wird erstellt und die BrightcoveCastMediaManager.setupBrightcoveControlBar() Methode aufgerufen wird. Hier können Sie Ihre UI-Komponenten nach ID abrufen und die entsprechenden Listener hinzufügen.

@Override
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar) {
   Button playButton = controlBar.findViewById(R.id.cast_play);
   if (playButton != null) {
       playButton.setOnClickListener(new View.OnClickListener() {...});
   }
}

Bekannte Probleme

Android 9

Wenn Sie Chromecast mit Android 9 und höher verwenden, müssen Sie a FOREGROUND_SERVICE Erlaubnis. Auf diese Weise kann die App Benachrichtigungen verwenden, um eine Casting-Sitzung zu steuern, wenn die App im Hintergrund und wieder in den Vordergrund gebracht wird.

Die uses-permission Tag sollte der App hinzugefügt werden AndroidManifest.xml Datei wie folgt:

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

Google Play-Dienste

Die Casting-Verbindung darf nicht erstellt werden, wenn die Version der Google Play-Dienste des Absenders nicht aktuell ist. Wenn die Google Play-Dienste des Absenders, insbesondere das Cast-Dienste-Framework, veraltet sind, kann es sein, dass Sie keine Cast-Verbindung herstellen können. Dies wird behoben, indem die Google Play-Dienste des Absenders über den Google Play Store aktualisiert werden.