In questa pagina viene descritto come utilizzare l'API Co-Watching per supportare una scenario di visione condivisa.
Configurazione iniziale
Per preparare la libreria all'uso, l'applicazione di condivisione in tempo reale deve inizializzare un componente
CoWatchingClient
che rappresenta una sessione di visualizzazione condivisa.
Per utilizzare l'SDK di condivisione in tempo reale di Meet, chiama il
AddonClientFactory.getClient
. Questo restituisce un
AddonClient
che funge da punto di accesso per la sessione di visione condivisa.
Per utilizzare il client, chiama il metodo
newSessionBuilder
da AddonClient
per restituire un builder per un nuovo
AddonSession
.
L'newSessionBuilder
implementa i parametri
AddonSessionHandler
per gestire i callback forniti
per la sessione.
Per iniziare una sessione, aggiungi il metodo
withCoWatching
sul builder.
Il seguente esempio di codice mostra un'inizializzazione di base del client per la visualizzazione condivisa :
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();
}
Invia notifiche per le azioni degli utenti
Quando l'utente locale compie azioni, ad esempio mettendo in pausa o cercando i contenuti multimediali. playout sul proprio dispositivo: la raccolta deve essere informata in modo che queste azioni possano essere e visualizzato dagli altri partecipanti nell'esperienza di visione condivisa. Ad esempio, come inviare notifiche alla biblioteca per più stati, consulta Come inviare una notifica il deployment.
Puoi controllare lo stato di visualizzazione condivisa utilizzando questi metodi:
CoWatchingClient.notifyBuffering
: Informa Meet che i contenuti multimediali non sono pronti per essere riprodotti a causa del al buffering, a causa di un precedente cambio di contenuti multimediali, di una ricerca di contenuti multimediali o di una normale rete congestionanti.CoWatchingClient.notifyEnded
: Informa Meet che il media player ha raggiunto la fine i contenuti multimediali correnti.CoWatchingClient.notifyPauseState
Avvisa Meet che l'utente ha messo in pausa o riattivato la riproduzione di contenuti multimediali, per consentire a Meet di eseguire il mirroring di quell'azione per altri utenti.CoWatchingClient.notifyPlayoutRate
: Informa Meet che l'utente ha aggiornato la percentuale di playout di l'elemento multimediale impostandolo su un nuovo valore (ad esempio, 1.25x).CoWatchingClient.notifyQueueUpdate
: Informa Meet che la coda è stata modificata, Meet può eseguirne il mirroring per altri utenti.CoWatchingClient.notifyReady
: Informa Meet che il buffering è stato completato e che il contenuto multimediale è ora pronti per essere riprodotti, a partire dal timestamp fornito.CoWatchingClient.notifySeekToTimestamp
: Informa Meet che l'utente ha cercato il punto di riproduzione di i contenuti multimediali, in modo che Meet possa eseguire il mirroring di quell'azione per altri utenti.CoWatchingClient.notifySwitchedToMedia
: Informa Meet che l'utente ha cambiato contenuti multimediali, quindi Meet può trasmetterlo ad altri utenti. Ha anche un'opzione per l'aggiornamento simultaneo della coda.
Il seguente esempio di codice mostra come inviare una notifica agli utenti:
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);
};
Gestisci stato remoto
Per applicare gli aggiornamenti in arrivo dai partecipanti da remoto, devi offrire
Scopri un modo per gestire direttamente lo stato di playout dei contenuti multimediali locali utilizzando
il
CoWatchingHandler.onCoWatchingStateChanged()
di Google.
Meet deve recuperare anche la posizione attuale dei contenuti multimediali
playout richiamando il
CoWatchingHandler.onStateQuery()
di Google. Questa operazione viene chiamata regolarmente, quindi deve essere scritta per garantire prestazioni ottimali
(ad esempio, <100 ms).
Il seguente esempio di codice mostra un'implementazione del modello
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));
}
}