Aperçu
Avec Google Cast technologie, vous pouvez lancer et contrôler le contenu vidéo diffusé depuis vos appareils mobiles vers la télévision haute définition et les systèmes audio domestiques. Depuis votre application, appuyez sur le bouton Cast pour diffuser votre contenu sur un grand écran.
Pour créer une application Cast, vous avez besoin des composants suivants :
-
Une application d' expéditeur : elle se trouve sur votre appareil mobile et détecte les appareils récepteurs, établit une connexion sécurisée et reproduit votre contenu. L'application émettrice est le lecteur local utilisé pour diffuser du contenu vers l'application réceptrice sur votre appareil Chromecast. Après avoir diffusé sur l'application du récepteur, vous pouvez la considérer comme une télécommande pour le Chromecast.
L'application de l'expéditeur est fournie par le plug-in Cast pour le Brightcove Native SDK pour Android. Vous en apprendrez plus sur ce sujet.
-
Une application de réception : cette application s'exécute sur l'appareil Chromecast. Il peut être considéré comme une application HTML d'une seule page avec des ressources CSS et JavaScript.
Pour effectuer des tests, procédez comme suit :
- Commencer avec Exemple de récepteur Cast de Google
- Revoir Applications Google Cast Documentation
Pour une utilisation en production, ce document illustrera comment utiliser le Brightcove Receiver v2.0.0.
Version SDK prise en charge
Pour utiliser le plug-in Cast avec le nouveau Brightcove Receiver v2.0, vous devez utiliser le Brightcove Native SDK pour Android version 6.16.0 et supérieure.
Comprendre le plugin Cast
Le plugin Cast est construit au-dessus du nouvelle extension de diffusion ExoPlayer et le cadre de diffusion des services Google Play. Après avoir ajouté la dépendance du plug-in Cast, gradle extraira la dépendance Play Services Cast Framework, la dépendance ExoPlayer Cast Extension ainsi que d'autres dépendances nécessaires.
Le plugin Cast a été repensé pour minimiser vos efforts lors de l'intégration avec Video Cloud. Lors de l'utilisation de Video Cloud, le BrightcoveCastMediaManager
la classe recueille des informations à partir de la réponse Video Cloud, comme le Brightcove Video
et Source
objets, chaque fois que le EventType.SET_SOURCE
événement est émis. Ces informations sont mises en cache et prêtes à être utilisées lorsque l'utilisateur sélectionne la lecture pour mettre la vidéo en file d'attente.
Intégration du plugin Cast
Il existe deux manières d'intégrer votre application au plug-in Native SDK for Android Cast. Vous pouvez intégrer le Brightcove Cast Receiver v2.0 ou le Google Cast Demo Receiver.
Pour l'une ou l'autre intégration, vous devez ajouter cette dépendance à votre projet d'application :
implementation "com.brightcove.player:android-cast-plugin:6.16.0"
Utilisation du récepteur Brightcove Cast v2.0
Cette intégration est destinée aux clients Brightcove qui utilisent les API Brightcove pour diffuser leur contenu.
Pour un exemple de code complet, consultez le BasicCastBrightcoveReceiverSampleApp.
Utilisation du récepteur de démonstration Google Cast
Cette intégration est destinée aux clients Brightcove qui débutent dans le casting.
Pour un exemple de code complet, consultez le BasicCastGoogleReceiverSampleApp.
Spécification de votre propre identifiant d'application Cast Receiver
Les BasicCastGoogleReceiverSampleApp définit un identifiant d'application Google Demo Receiver, qui peut être utile pour démarrer et tester, mais pas pour la production.
Pour remplacer cette valeur par votre application Cast Receiver, définissez la valeur de chaîne suivante dans l'exemple d'application chaînes.xml déposer:
<string name="cast_receiver_app_id">4F8B3483</string>
Le composant Brightcove GoogleCast
Les GoogleCastComponent
class est la classe principale du plugin Brightcove Cast. Il instancie l'ExoPlayer CastPlayer et définit ses écouteurs. Il expose quelques méthodes essentielles pour charger une vidéo ou l'ajouter à la file d'attente. Les GoogleCastComponent
La classe ajoute également plusieurs écouteurs d'événements Brightcove pour gérer les événements de cycle de vie des activités et des fragments, ainsi que d'autres écouteurs d'événements que vous pouvez utiliser pour émettre des informations multimédias afin de charger une vidéo sur votre appareil Chromecast.
Les GoogleCastComponent
utilise maintenant un modèle Builder. Dans les versions natives du SDK pour Android antérieures à la v6.16.0, vous deviez instancier le composant et passer le Context
et EventEmitter
à la GoogleCastComponent
constructeur. Ensuite, vous définiriez les options du composant dans une série d'appels de méthode distincts.
À partir du SDK natif pour Android v6.16.0, utilisez le modèle Builder pour créer une instance du GoogleCastComponent
et définissez ses options, le tout dans une seule chaîne d'appels de méthode Builder.
Données personnalisées
Comme dans le cas de GoogleCastComponent
, la CustomData
classe utilise un modèle Builder pour instancier l'objet et lui ajouter des propriétés. Bien que le récepteur Brightcove puisse utiliser CustomData
pour récupérer des vidéos de votre catalogue Brightcove, il n'est pas nécessaire d'envoyer un CustomData
objet, par exemple pour diffuser une ressource distante. Il est également important de noter que lors de l'utilisation de Google Demo Receiver, l'utilisation de CustomData
n'est pas pris en charge. Dans le cadre de cette discussion, nous nous concentrerons sur l' CustomData
envoi au récepteur utilisé pour récupérer les données vidéo à partir du catalogue Brightcove.
Qu'est-ce que CustomData ?
CustomData
est un objet JSON contenu dans le MediaInfo
objet. Son utilisation prévue est avec l'application Brightcove Cast Receiver v2.0.
CustomData avec le récepteur Brightcove et les données de catalogue
Lors de l'intégration avec le récepteur Brightcove, le CustomData
L'objet JSON prendra cette forme :
"customData": {
"accountId": "1234567890",
"analyticsParams": {
"application": "com.brightcove.player.test",
"user": "abcde1c44b951234"
},
"catalogParams": {
"adConfigId": null,
"type": "video",
"bcovAuthToken": null,
"id": "2345678901",
"policyKey": "BCpkPolicyKeyObject"
}
}
Les CustomData
L'exemple d'objet ci-dessus contient tous les éléments de données nécessaires pour diffuser une vidéo à partir du récepteur Brightcove. Ces données sont les mêmes quel que soit le cryptage, c'est-à-dire qu'il n'y a pas de structure supplémentaire nécessaire pour l'URL de licence dans le cas des vidéos DRM.
Vous pouvez également trouver un exemple de CustomData
objet dans le BrightcoveCastBrightcoveReceiverSampleApp.
CustomData avec le récepteur de démonstration Google
Comme indiqué ci-dessus, CustomData
n'est pas pris en charge avec le récepteur de démonstration Google.
BrightcoveCastMediaManager
Il est possible de l'étendre BrightcoveCastMediaManager
, comme indiqué ci-dessus, pour remplacer ses méthodes ou pour implémenter les vôtres. Pour des exemples d'extension de la classe BrightcoveCastMediaManager, consultez ce qui suit :
- Étendre la section BrightcoveCastMediaManager
- BasicCastCustomRemoteVideoSampleApp
Fournisseur d'options
Ensuite, vous devez spécifier le Fournisseur d'options implémentation pour le framework Google Cast. Les OptionsProvider
l'interface permet de configurer plusieurs options nécessaires pour initialiser le Contexte de diffusion classer. C'est ici que vous définirez l'ID de l'application Cast Receiver. Pour en savoir plus sur l'intégration de OptionsProvider
, voir Google Initialiser le contexte de distribution document.
Le plugin Brightcove Cast comprend un DefaultOptionsProvider
classe, où l'ID d'application du récepteur Cast est défini via une clé de chaîne définie dans le chaînes.xml fichier de ressources. Pour plus de détails et pour savoir comment l'ignorer dans votre application, consultez le Utiliser votre propre identifiant d'application Cast Receiver rubrique ci-dessus.
Que vous utilisiez le DefaultOptionsProvider
classe ou la vôtre OptionsProvider
mise en œuvre, vous devez définir le OptionsProvider
nom de la classe d'implémentation dans votre application AndroidManifest.xml fichier en tant que métadonnées de paire clé-valeur, comme indiqué ici :
<meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="com.brightcove.cast.DefaultOptionsProvider" />
Si vous utilisez le DefaultOptionsProvider
classe, vous pouvez définir le ExpandedControllerActivity
pour activer/désactiver la notification de diffusion en définissant des informations de métadonnées similaires dans votre AndroidManifeste.
Activité de contrôleur étendue
Les Activité de contrôleur étendue est fourni avec la bibliothèque Google Cast et vous permet de contrôler la vidéo en cours de diffusion sur votre appareil Chromecast. Cette classe offre une certaine flexibilité de personnalisation. Par exemple, cinq emplacements sont disponibles pour afficher les boutons, le troisième emplacement étant réservé au bouton Lecture non configurable. Le reste des boutons peut être défini comme d'autres boutons prédéfinis ou comme vos propres boutons personnalisés.
Le plugin Brightcove Cast fournit la sous-classe DefaultExpandedControllerActivity
. Nous avons activé les boutons suivants dans l'ordre suivant :
- Sous-titres codés
- Passer le précédent
- Jouer
- Passez au suivant
- Basculement Muet
De plus, la barre de recherche définit le même dessin par défaut que celui utilisé dans la norme BrightcoveMediaController
:
- Le progrès dessinable :
R.drawable.default_scrubber_progress_horizontal
- Le pouce dessinable :
R.drawable.default_scrubber_thumb
Pour savoir comment personnaliser la barre de recherche, consultez le SeekBarColorsSampleApp.
Afin de régler le DefaultExpandedControllerActivity
ou le vôtre ExpandedControllerActivity
, définissez les métadonnées suivantes dans votre AndroidManifest.xml déposer:
<meta-data android:name="com.brightcove.cast.DefaultOptionsProvider.EXPANDED_CONTROLLER_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.DefaultExpandedControllerActivity" />
Notification de diffusion
Lorsque la notification de diffusion est activée, la notification apparaît lorsque vous diffusez une vidéo et placez votre application en arrière-plan ; par exemple, après avoir appuyé sur la touche d'accueil.
<pPour activer la notification de diffusion, définissez les métadonnées suivantes dans votre AndroidManifest.xml et indiquez le nom de l'activité à lancer lorsque vous cliquez sur la notification :
<meta-data android:name="com.brightcove.cast.DefaultOptionsProvider.NOTIFICATION_TARGET_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.BrightcoveControllerActivity" />
Si vous ne fournissez pas com.brightcove.cast.DefaultOptionsProvider.NOTIFICATION_TARGET_ACTIVITY_CLASS_NAME ou si la valeur a un nom d'activité non valide, la notification de diffusion sera désactivée.
Le bouton Cast
Le bouton Cast vous permet de sélectionner un appareil Chromecast sur le même réseau que votre appareil, et vous permet de vous connecter et de créer une session. Pour ajouter le bouton Cast à votre application, suivez les instructions de Google Intégrer Cast : Ajouter un bouton Cast document.
Le plugin Brightcove Cast fournit une méthode utilitaire pour configurer facilement le bouton Cast. Ceci est utile lorsque vous souhaitez simplement ajouter le bouton Diffuser au menu Activité/Fragment. Consultez le code suivant pour plus de détails :
//Activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
GoogleCastComponent.setUpMediaRouteButton(MainActivity.this, menu);
return true;
}
Le mini contrôleur
Le mini contrôleur est un fragment qui s'attache à votre activité, généralement situé au bas de la mise en page. Le mini contrôleur vous permet de lire et de mettre en pause la vidéo, et indique quand une vidéo est en cours de lecture sur votre appareil Chromecast. Lorsque le mini contrôleur est cliqué, le contrôleur étendu sera lancé.
Pour activer le mini contrôleur, ajoutez le code suivant à la mise en page de votre activité.
<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" />
Pour découvrir les meilleures pratiques avec le mini contrôleur, consultez le Liste de contrôle de conception : Expéditeur Mini Contrôleur document. Pour plus de détails sur la mise en œuvre, consultez le Intégrer Cast : Ajouter un mini contrôleur document.
Sujets avancés
Écoute de la session Cast
Si vous souhaitez que votre application réagisse lorsque la connexion Cast démarre ou se termine, vous pouvez ajouter le GoogleCastEventType.CAST_SESSION_STARTED
ou GoogleCastEventType.CAST_SESSION_ENDED
écouteurs d'événement comme indiqué ici :
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
}
});
Alternativement, vous pouvez appeler GoogleCastComponent.isSessionAvailable()
pour vérifier une session disponible.
Caster une vidéo
Afin de diffuser une vidéo sur Chromecast après une connexion réussie, vous pouvez soit utiliser EventEmitter et émettre les informations d'informations sur le média, soit utiliser directement le GoogleCastComponent
méthodes.
Si vous préférez émettre les infos média, vous pouvez utiliser les événements suivants :
GoogleCastEventType.LOAD_MEDIA_INFO
GoogleCastEventType.LOAD_MEDIA_QUEUE_ITEM
GoogleCastEventType.ADD_MEDIA_INFO
GoogleCastEventType.ADD_MEDIA_QUEUE_ITEM
Le tableau suivant présente les propriétés attendues pour chaque événement :
Nom de l'événement | Propriétés | |
---|---|---|
Clé | Type de classe de valeur | |
LOAD_MEDIA_INFO |
GoogleCastComponent.CAST_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_PLAY_POSITION |
MediaInfo Entier |
LOAD_MEDIA_QUEUE_ITEM |
GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM |
MediaQueueItem |
ADD_MEDIA_INFO |
GoogleCastComponent.CAST_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_PLAY_POSITION |
MediaInfo Entier |
ADD_MEDIA_QUEUE_ITEM |
GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM |
MediaQueueItem |
Vous pouvez également utiliser les GoogleCastComponent
méthodes suivantes :
-
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 )
Modification des données MediaInfo par défaut
Par défaut, le plugin Cast rassemble des informations sur l'objet Video et Source actuel émis par le EventType.SET_SOURCE event
. Si vous souhaitez modifier ou ajouter des informations supplémentaires, telles que l'ajout d'un objet JSON personnalisé à votre MediaInfo
que votre récepteur d'application comprend, vous pouvez le faire en écrasant le loadMediaInfo()
et addMediaInfo()
méthodes de la BrightcoveCastMediaManager
. Ensuite, votre BrightcoveCastMediaManager
la sous-classe est passée en tant que paramètre de constructeur à la GoogleCastComponent
classer.
A l'intérieur de ces méthodes, vous pouvez créer votre MediaInfo
objets et émettre les événements appropriés comme indiqué précédemment. Assurez-vous de vérifier com.brightcove.cast.util.CastMediaUtil
, car il fournit des méthodes utilitaires pour créer un à MediaInfo
partir des objets vidéo et source.
Configuration du Cast MediaController
Pour modifier la disposition du contrôleur qui apparaît dans votre vue vidéo Brightcove lorsqu'une session Cast a démarré, procédez comme suit.
- Étendre le BrightcoveCastMediaManager
- Définir le MediaControllerConfig
- Écraser la configuration de la barre de contrôle
Étendre le BrightcoveCastMediaManager
Pour modifier le comportement par défaut de BrightcoveCastMediaManager
, créez une sous-classe et remplacez certaines méthodes clés :
-
public void updateBrightcoveMediaController(boolean isRemote)
Cette méthode est appelée
GoogleCastComponent
lorsque la session change, c'est-à-dire lorsque la session a commencé ou s'est terminée. Lorsque la session a commencé, leisRemote
le paramètre seratrue
et lesetupRemoteController
méthode est appelée. Sinon, leisRemote
serafalse
et leresetToLocalController
est appelé. -
protected void setupRemoteController()
Cette méthode émet l'événement
EventType.SET_MEDIA_CONTROLLER_CONFIG
avec leMediaControllerConfig
objet. Nous parlerons plus deMediaControllerConfig
plus loin dans cette section. Cette méthode écoute également lesBrightcoveMediaController.CONTROL_BAR_CREATED
événement et réagit en appelant lesetupBrightcoveControlBar
méthode. -
protected void resetToLocalController()
Cette méthode est responsable de la réinitialisation du
BrightcoveMediaController
à la disposition d'origine du contrôleur en émettant leEventType.RESTORE_DEFAULT_MEDIA_CONTROLLER
. -
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar)
Une fois
BrightcoveMediaController
recréé avec la mise en page fournie dans leMediaControllerConfig
, vous aurez accès à laBrightcoveControlBar
vue. De là, vous pouvez accéder à vos vues d'interface utilisateur, comme les boutons, où vous pouvez ajouterOnClickListener
est à eux.
Définir le MediaControllerConfig
Les MediaControllerConfig
est une classe de configuration que vous pouvez utiliser pour modifier la disposition de contrôle par défaut du BrightcoveMediaController
classer. Dans cette classe, vous pouvez définir la mise en page et le OnTouchListener
. Une fois créé et configuré, vous pouvez émettre cet objet comme indiqué ci-dessous :
Map<String, Object> properties = new HashMap<>();
properties.put(Event.MEDIA_CONTROLLER_CONFIG, myMediaControllerConfig);
eventEmitter.emit(EventType.SET_MEDIA_CONTROLLER_CONFIG,properties);
Le défaut MediaControllerConfig
l'objet définit le R.layout.cast_media_controller
comme la mise en page avec un seul Jouer bouton. Lorsque vous cliquez dessus, une boîte de dialogue s'ouvre avec deux options :
- Lire maintenant : lorsque cette option est sélectionnée, la
loadMediaInfo()
méthode est appelée et la vidéo est chargée et lue dans Chromecast. - Ajouter à la file d'attente : lorsque cette option est sélectionnée, la
addMediaInfo()
méthode est appelée et la vidéo est ajoutée à la fin de la file d'attente.
Écraser la configuration de la barre de contrôle
Lorsque la disposition de votre contrôleur multimédia est définie en émettant le MediaControllerConfig
, la BrightcoveControlBar
vue est créée et la BrightcoveCastMediaManager.setupBrightcoveControlBar()
méthode est appelée. C'est ici que vous pouvez obtenir vos composants d'interface utilisateur par Id et ajouter les écouteurs appropriés.
@Override
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar) {
Button playButton = controlBar.findViewById(R.id.cast_play);
if (playButton != null) {
playButton.setOnClickListener(new View.OnClickListener() {...});
}
}
Problèmes connus
Android 9
Lorsque vous utilisez Chromecast avec Android 9 et versions ultérieures, vous devez inclure un FOREGROUND_SERVICE
autorisation. Cela permet à l'application d'utiliser des notifications pour contrôler une session de diffusion lorsque l'application est en arrière-plan et ramenée au premier plan.
Le uses-permission
la balise doit être ajoutée à l'application AndroidManifest.xml dossier, comme suit :
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
Services Google Play
La connexion Casting peut ne pas être créée si la version des services Google Play de l'expéditeur n'est pas à jour. Lorsque les services Google Play de l'expéditeur, en particulier le cadre des services Cast, sont obsolètes, vous pouvez ne pas réussir à créer une connexion Cast. Ceci est résolu en mettant à jour les services Google Play de l'expéditeur via le Google Play Store.