Esta página describe cómo usar la API de Co-Watching para admitir un situación de visualización en compañía.
Configuración inicial
Para preparar la biblioteca para su uso, la aplicación de compartir en vivo debe inicializar un elemento
CoWatchingClient
un objeto que representa una sesión de visualización en compañía.
Para utilizar el SDK de Compartir en vivo de Meet, llama al
AddonClientFactory.getClient
. Esto muestra un
AddonClient
que funcione como el punto de entrada
para la sesión de visualización en compañía.
Para usar el cliente, llama al
newSessionBuilder
método de AddonClient
para mostrar un compilador para un nuevo
AddonSession
newSessionBuilder
implementa
AddonSessionHandler
para administrar las devoluciones de llamada que proporciona el
para la sesión.
Para iniciar una sesión, agrega
withCoWatching
en el compilador.
En la siguiente muestra de código, se muestra una inicialización básica del cliente de visualización en compañía objeto:
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();
}
Notificar sobre las acciones del usuario
Cuando el usuario local realiza acciones, por ejemplo, detener o buscar contenido multimedia en su dispositivo, se debe informar a la biblioteca para que se puedan se refleja en los demás participantes de la experiencia de visualización en compañía. Por ejemplo cómo notificar a la biblioteca para varios estados, consulta Obtener comenzar.
Puedes controlar el estado de visualización en compañía con estos métodos:
CoWatchingClient.notifyBuffering
Notifica a Meet que el contenido multimedia no está listo para reproducirse debido a al almacenamiento en búfer, debido a un cambio de contenido multimedia previo, una búsqueda de contenido multimedia o una conexión de red normal la congestión.CoWatchingClient.notifyEnded
Notifica a Meet que el reproductor multimedia llegó al final de el contenido multimedia actual.CoWatchingClient.notifyPauseState
Notificar a Meet que el usuario pausó o reanudó la reproducción de contenido multimedia, para que Meet pueda replicar esa acción para otros usuarios.CoWatchingClient.notifyPlayoutRate
Notifica a Meet que el usuario actualizó la tasa de reproducción de el elemento multimedia a un valor nuevo (por ejemplo, 1.25x).CoWatchingClient.notifyQueueUpdate
Notifica a Meet que la fila cambió, por lo que Meet puede replicar eso para otros usuarios.CoWatchingClient.notifyReady
Notifica a Meet que se completó el almacenamiento en búfer y que el contenido multimedia está Ya está listo para reproducirse, a partir de la marca de tiempo proporcionada.CoWatchingClient.notifySeekToTimestamp
Notifica a Meet que el usuario buscó el punto de reproducción de y el contenido multimedia, para que Meet pueda replicar esa acción para otros usuarios.CoWatchingClient.notifySwitchedToMedia
Notifica a Meet que el usuario cambió de contenido multimedia, por lo que Meet puede pasárselo a otros usuarios. También tiene una opción para la actualización simultánea de la cola.
En la siguiente muestra de código, se indica cómo notificar a los usuarios:
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);
};
Administra el estado remoto
Para aplicar las actualizaciones entrantes de los participantes remotos, debes ofrecer
Descubre una forma de administrar directamente el estado de la reproducción de contenido multimedia local usando
el
CoWatchingHandler.onCoWatchingStateChanged()
devolución de llamada.
Meet también necesita recuperar la posición actual del contenido multimedia
el juego llamando al
CoWatchingHandler.onStateQuery()
devolución de llamada. Se llama a este método con regularidad, por lo que se debe escribir para que tenga un buen rendimiento.
(por ejemplo, <100 ms).
En la siguiente muestra de código, se presenta una implementación del
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));
}
}