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