Plugin Cast pour le SDK natif pour Android

Dans cette rubrique, vous allez apprendre à diffuser vos vidéos sur un téléviseur connecté avec Chromecast, à l'aide du plugin Cast pour le SDK Native Brightcove pour Android.

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 :

    1. Commencer avec Exemple de récepteur Cast de Google
    2. 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.

  1. Étendre le BrightcoveCastMediaManager
  2. Définir le MediaControllerConfig
  3. É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é, le isRemote le paramètre sera true et le setupRemoteController méthode est appelée. Sinon, le isRemote sera false et le resetToLocalController est appelé.

  • protected void setupRemoteController()

    Cette méthode émet l'événement EventType.SET_MEDIA_CONTROLLER_CONFIG avec le MediaControllerConfig objet. Nous parlerons plus de MediaControllerConfig plus loin dans cette section. Cette méthode écoute également les BrightcoveMediaController.CONTROL_BAR_CREATED événement et réagit en appelant le setupBrightcoveControlBar 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 le EventType.RESTORE_DEFAULT_MEDIA_CONTROLLER.

  • protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar)

    Une fois BrightcoveMediaController recréé avec la mise en page fournie dans le MediaControllerConfig, vous aurez accès à la BrightcoveControlBar vue. De là, vous pouvez accéder à vos vues d'interface utilisateur, comme les boutons, où vous pouvez ajouter OnClickListenerest à 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.