Ü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:
- Beginnen mit Sample Cast-Empfänger von Google
- 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.
- Erweitern Sie den BrightcoveCastMediaManager
- Setzen Sie die MediaControllerConfig
- Ü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 dieisRemote
Parameter wird seintrue
und dersetupRemoteController
Methode aufgerufen wird. Ansonsten derisRemote
wird seinfalse
und derresetToLocalController
wird genannt. -
protected void setupRemoteController()
Diese Methode gibt das Ereignis aus
EventType.SET_MEDIA_CONTROLLER_CONFIG
mit demMediaControllerConfig
Objekt. Wir werden mehr darüber redenMediaControllerConfig
später in diesem Abschnitt. Diese Methode hört auch auf dieBrightcoveMediaController.CONTROL_BAR_CREATED
Ereignis und reagiert mit Aufruf dessetupBrightcoveControlBar
Methode. -
protected void resetToLocalController()
Diese Methode ist für das Zurücksetzen der
BrightcoveMediaController
zum ursprünglichen Controller-Layout durch Senden desEventType.RESTORE_DEFAULT_MEDIA_CONTROLLER
. -
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar)
Sobald die
BrightcoveMediaController
wurde mit dem Layout in der bereitgestellten neu erstelltMediaControllerConfig
, erhalten Sie Zugang zumBrightcoveControlBar
Aussicht. Von hier aus können Sie auf Ihre UI-Ansichten zugreifen, z. B. Schaltflächen, in denen Sie hinzufügen könnenOnClickListener
ist 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.