Implementare l'API Co-Watching

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 le migliori prestazioni (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));
  }
}