Création d'un plugin pour le SDK natif pour Android

Dans cette rubrique, vous allez apprendre à créer un plugin pour le SDK natif pour Android.

Aperçu

À un niveau élevé, un plugin s'intègre au lecteur en écoutant et en émettant des événements. Un plugin peut écouter les événements du lecteur et d'autres plugins. Un plugin peut émettre des événements pour le lecteur et pour d'autres plugins.

Ce contenu ainsi que l'exemple de code se trouvent à l'adresse https://github.com/BrightcoveOS/android-plugin-guide

Architecture des plugins

Un plugin doit s'enregistrer auprès du SDK lorsqu'il est instancié. Pour enregistrer un plugin doit émettre un REGISTER_PLUGIN événement avec un PLUGIN_NAME biens. Par exemple :

Map<String, Object> properties = new HashMap<String, Object>();
properties.put(Event.PLUGIN_NAME, "my custom plugin");
eventEmitter.emit(EventType.REGISTER_PLUGIN, properties);

La lecture vidéo passe généralement par un flux d'événements de cycle de vie standard :

Flux d'événements de plug-in
Flux d'événements de plug-in

Détails de l'évènement

Un plugin peut écouter les événements, qui initient une action, afin de changer le comportement par défaut du lecteur. Ces événements comprennent :

  • WILL_CHANGE_VIDEO
  • SET_VIDEO
  • SET_SOURCE
  • PLAY
  • PAUSE
  • SEEK_TO
  • STOP

Le comportement par défaut peut être modifié en empêchant les écouteurs par défaut de recevoir l'événement et/ou en arrêtant la propagation de l'événement aux écouteurs autres que ceux par défaut. Empêcher les écouteurs par défaut de recevoir l'événement est accompli en appelant le preventDefault() méthode. La propagation de l'événement peut être arrêtée en appelant le stopPropagation() méthode. Si seulement preventDefault() est appelé, le reste des auditeurs autres que ceux par défaut seront notifiés. Si seulement stopPropagation() est appelé, les écouteurs par défaut seront toujours notifiés, mais le reste des écouteurs autres que ceux par défaut seront ignorés. Un plugin peut également utiliser ces méthodes pour suspendre le flux d'événements normal et insérer un comportement supplémentaire, comme l'initialisation du plugin. Un plugin peut reprendre le flux d'événements en émettant à nouveau l'événement d'origine.

Un plugin peut également écouter les événements, qui signalent la fin d'une action. Ces événements sont généralement utilisés par les plug-ins d'analyse. Les événements comprennent :

  • DID_CHANGE_LIST
  • DID_SELECT_SOURCE
  • DID_PAUSE
  • DID_PLAY
  • DID_SEEK_TO
  • DID_SET_SOURCE
  • DID_STOP
  • PROGRESS
  • COMPLETED

Interrompre la lecture

Un plugin, qui souhaite interrompre la lecture du contenu vidéo, doit utiliser WILL_INTERRUPT_CONTENT et WILL_RESUME_CONTENT. Ces événements sont généralement utilisés par les plugins publicitaires. Un plugin doit émettre WILL_INTERRUPT_CONTENT pour demander que la lecture soit suspendue, si elle est en cours de lecture, et pour demander que la vue vidéo soit rendue invisible. Un plugin doit émettre WILL_RESUME_CONTENT pour demander que la vue vidéo soit à nouveau visible. Les WILL_RESUME_CONTENT l'événement devrait inclure un ORIGINAL_EVENT propriété qui sera émise après que la vue vidéo soit rendue visible. Les ORIGINAL_EVENT devrait être un PLAY événement pour reprendre la lecture, un CUE_POINT événement pour continuer le traitement des points de repère, ou un COMPLETED événement pour terminer la lecture. UNE SKIP_CUE_POINTS la propriété doit être ajoutée à la ORIGINAL_EVENT pour empêcher le traitement récursif des points de repère.

Points de repère

De nombreux plugins voudront écouter CUE_POINT événements. Il existe trois types de points de repère, BEFORE , POINT_IN_TIME , et AFTER . BEFORE les points de repère sont émis juste avant le début de la lecture. POINT_IN_TIME des points de repère sont émis lorsque la lecture atteint la position du point de repère. AFTER les points de repère sont émis juste après la fin de la lecture. Un plugin doit utiliser WILL_INTERRUPT_CONTENT et WILL_RESUME_CONTENT événements pour interrompre et reprendre la lecture du contenu lors de la gestion d'un événement de point de repère. Dans le cas des points de repère avant et après, l'événement comprendra un ORIGINAL_EVENT propriété, avec soit un PLAY événement ou un COMPLETED un événement. Les événements de point de repère incluent également un CUE_POINTS propriété avec le lot de points de repère. START_TIME et END_TIME Les propriétés définissent la plage de temps du point de repère.

Exemple de répertoire

Les exemple de répertoire comprend un projet basé sur Android Studio avec deux modules :

  • SamplePlugin - Un exemple de plugin, qui peut être utilisé comme base pour écrire de nouveaux plugins.
  • Exemple d'application de plug-in - Montre comment les plugins sont incorporés dans une application vidéo Brightcove et peuvent être utilisés pour tester le SamplePlugin ou de nouveaux plugins.

Étapes de mise en œuvre

Les étapes pour écrire un plugin incluent :

  1. Copiez l'exemple de plug-in dans un nouveau référentiel.
  2. Modifiez les noms de package et de classe.
  3. Mettre à jour le TAG initialiseur.
  4. Modifier le @Emits et @ListensFor annotations pour refléter les événements que le plugin émet et écoute.
  5. Modifiez le constructeur si nécessaire.
  6. Remplacez ou retirez le videoView logique connexe si nécessaire.
  7. Modifier initializeListeners() en ajoutant et/ou en soustrayant des écouteurs d'événement si nécessaire.
  8. Compilez et distribuez votre plugin en tant que .aar fichier pour Android Studio.