Cette page explique comment utiliser l'API Co-Watching dans un scénario de visionnage à plusieurs.
Configuration initiale
Pour préparer la bibliothèque à utiliser, l'application de partage en direct doit initialiser un objet CoWatchingClient
qui représente une session de visionnage à plusieurs.
Pour utiliser le SDK de partage en direct Meet, appelez la méthode AddonClientFactory.getClient
. Cette action renvoie un AddonClient
qui servira de point d'entrée pour la session de visionnage à plusieurs.
Pour utiliser le client, appelez la méthode newSessionBuilder
à partir de AddonClient
afin de renvoyer un compilateur pour un nouveau AddonSession
.
newSessionBuilder
implémente l'interface AddonSessionHandler
pour gérer les rappels fournis par le module complémentaire pour la session.
Pour démarrer une session, ajoutez la méthode withCoWatching
au compilateur.
L'exemple de code suivant montre une initialisation de base de l'objet client de visionnage à plusieurs:
Java
class AwesomeVideoAddonSessionHandler implements AddonSessionHandler {}
// For sample implementation, see the "Manage remote state" section below.
class AwesomeVideoCoWatchingHandler implements CoWatchingHandler {}
public ListenableFuture<AddonSession> initialSetup() {
AddonClient meetClient = AddonClientFactory.getClient();
return meetClient
.newSessionBuilder(
new AwesomeVideoAddonSessionHandler())
.withCoWatching(new AwesomeVideoCoWatchingHandler())
.begin();
}
Envoyer des notifications en cas d'actions des utilisateurs
Lorsque l'utilisateur local effectue des actions (par exemple, mettre en pause ou rechercher la lecture d'un contenu multimédia sur son appareil), la bibliothèque doit en être informée afin que ces actions puissent être dupliquées pour les autres participants à l'expérience de visionnage à plusieurs. Pour obtenir un exemple d'envoi d'une notification à la bibliothèque pour plusieurs états, consultez la section Premiers pas.
Vous pouvez contrôler l'état de visionnage à plusieurs à l'aide des méthodes suivantes:
CoWatchingClient.notifyBuffering
: informe Meet que le contenu multimédia n'est pas prêt à être lu en raison d'une mise en mémoire tampon (en raison d'un contact multimédia précédent, d'une recherche multimédia ou d'une congestion normale du réseau).CoWatchingClient.notifyEnded
: informe Meet que le lecteur multimédia a atteint la fin du contenu multimédia en cours.CoWatchingClient.notifyPauseState
Informez Meet que l'utilisateur a interrompu ou réactivé la lecture des contenus multimédias afin que Meet puisse dupliquer cette action pour les autres utilisateurs.CoWatchingClient.notifyPlayoutRate
: informe Meet que l'utilisateur a remplacé le taux de lecture du contenu multimédia par une nouvelle valeur (par exemple, 1,25x).CoWatchingClient.notifyQueueUpdate
: informe Meet que la file d'attente a été modifiée afin que Meet puisse dupliquer cela pour les autres utilisateurs.CoWatchingClient.notifyReady
: informe Meet que la mise en mémoire tampon est terminée et que le contenu multimédia est maintenant prêt à être lu, à partir du code temporel fourni.CoWatchingClient.notifySeekToTimestamp
: informe Meet que l'utilisateur a recherché le point de lecture du contenu multimédia, afin que Meet puisse dupliquer cette action pour les autres utilisateurs.CoWatchingClient.notifySwitchedToMedia
: informe Meet que l'utilisateur a changé de contenu multimédia, afin que Meet puisse le transmettre aux autres utilisateurs. Il offre également une option de mise à jour simultanée de la file d'attente.
L'exemple de code suivant montre comment avertir les utilisateurs:
Java
public void onVideoPaused(Duration currentTimestamp) {
// Use Meet to broadcast the pause state to ensure other participants also pause.
this.session.getCoWatching().notifyPauseState(/* paused= */ true, currentTimestamp);
};
Gérer l'état distant
Pour appliquer les mises à jour entrantes des participants distants, vous devez proposer à Meet un moyen de gérer directement l'état de lecture du contenu multimédia local à l'aide du rappel CoWatchingHandler.onCoWatchingStateChanged()
.
Meet doit également récupérer la position actuelle de la lecture multimédia en appelant le rappel CoWatchingHandler.onStateQuery()
. Cette méthode est appelée régulièrement. Elle doit donc être écrite pour être performante (par exemple, < 100 ms).
L'exemple de code suivant montre une implémentation de CoWatchingHandler
:
Java
class AwesomeVideoCoWatchingHandler implements CoWatchingHandler {
/** Applies incoming playback state to the local video. */
public void onCoWatchingStateChanged(CoWatchingState newState) {
// Handle transition to new video.
if (!newState.mediaId().equals(this.videoPlayer.videoUrl)) {
this.videoPlayer.loadVideo(newState.mediaId());
}
// Only adjust the local video playout if it's sufficiently diverged from the timestamp in the
// applied update.
if (newState
.mediaPlayoutPosition()
.minus(this.videoPlayer.videoTimestamp)
.compareTo(Duration.ofMillis(500))
> 0) {
this.videoPlayer.seek(newState.mediaPlayoutPosition());
}
// Update pause state, if necessary.
if (newState.playbackState().equals(PLAY) && this.videoPlayer.isPaused) {
this.videoPlayer.unpause();
} else if (newState.playbackState().equals(PAUSE) && !this.videoPlayer.isPaused) {
this.videoPlayer.pause();
}
}
/** Returns local video playback state. */
public Optional<QueriedCoWatchingState> onStateQuery() {
return Optional.of(QueriedCoWatchingState.of(
/* mediaPlayoutPosition= */ this.videoPlayer.videoTimestamp));
}
}