Co-Watching API implementieren

Auf dieser Seite wird beschrieben, wie du die Co-Watching API zur Unterstützung eines gemeinsam ansehen.

Ersteinrichtung

Um die Bibliothek für die Verwendung vorzubereiten, sollte mit der Anwendung „Live teilen“ ein CoWatchingClient Objekt, das eine Sitzung zum gemeinsamen Ansehen darstellt.

Wenn Sie das Meet Live Sharing SDK verwenden möchten, rufen Sie die AddonClientFactory.getClient . Dadurch wird ein AddonClient das als Einstiegspunkt für das gemeinsame Ansehen dient.

Rufen Sie zur Verwendung des Clients die Methode newSessionBuilder aus AddonClient, um einen Builder für ein neues AddonSession newSessionBuilder implementiert die AddonSessionHandler verwendet, um die Callbacks zu verarbeiten, die vom Add-on hinzufügen.

Um eine Sitzung zu beginnen, füge den withCoWatching auf den Builder übergeben.

Das folgende Codebeispiel zeigt eine grundlegende Initialisierung des Clients für das gemeinsame Ansehen -Objekt enthält:

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

Bei Nutzeraktionen benachrichtigen

Wenn der lokale Nutzer Aktionen ausführt, z. B. Medien pausiert oder danach sucht auf ihrem Gerät ausgeführt wird. Die Bibliothek muss informiert sein, damit diese Aktionen die den anderen Teilnehmenden beim gemeinsamen Ansehen gespiegelt werden. Ein Beispiel für wie Sie die Bibliothek für mehrere Bundesstaaten benachrichtigen, finden Sie unter

Mit den folgenden Methoden kannst du den Status der gemeinsamen Wiedergabe steuern:

  • CoWatchingClient.notifyBuffering: Benachrichtigt Meet, dass die Medien aus folgendem Grund nicht abgespielt werden können: zum Zwischenspeichern aufgrund eines früheren Medienwechsels, einer Mediensuche oder einer normalen Netzwerkverbindung die Überlastung.
  • CoWatchingClient.notifyEnded: Meet wird benachrichtigt, dass der Mediaplayer das Ende der das aktuelle Medium ist.
  • CoWatchingClient.notifyPauseState Benachrichtigen Sie Meet, dass der Nutzer die Wiedergabe pausiert oder die Pausierung wieder aufgehoben hat von Medien, damit diese Aktion in Meet für andere Nutzer übernommen werden kann.
  • CoWatchingClient.notifyPlayoutRate: Benachrichtigt Meet, dass der Nutzer die Playout-Rate von einen neuen Wert fest (z. B. 1.25x).
  • CoWatchingClient.notifyQueueUpdate: Informiert Meet, dass sich die Warteschlange geändert hat, sodass Meet kann das für andere Nutzer spiegeln.
  • CoWatchingClient.notifyReady: Informiert Meet, dass die Zwischenspeicherung abgeschlossen ist und die Mediendatei kann ab dem angegebenen Zeitstempel abgespielt werden.
  • CoWatchingClient.notifySeekToTimestamp: Informiert Meet, dass der Nutzer den Wiedergabepunkt von Medien übertragen, damit diese Aktion in Meet für andere Nutzer übernommen werden kann.
  • CoWatchingClient.notifySwitchedToMedia: Benachrichtigt Meet, dass der Nutzer die Medien gewechselt hat, sodass Meet kann das an andere Nutzer weitergeben. Bietet außerdem eine Option für eine gleichzeitige Aktualisierung der Warteschlange.

Das folgende Codebeispiel zeigt, wie Nutzer benachrichtigt werden:

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);
};

Remote-Status verwalten

Wenn Sie eingehende Updates von Remote-Teilnehmern anwenden möchten, müssen Sie Hier erfahren Sie, wie Sie den lokalen Status der Medienwiedergabe direkt über die CoWatchingHandler.onCoWatchingStateChanged() Callback des Nutzers an.

Meet muss außerdem die aktuelle Position der Medien abrufen indem Sie die Methode CoWatchingHandler.onStateQuery() Callback des Nutzers an. Dieser wird regelmäßig aufgerufen und sollte daher (z. B. <100 ms).

Das folgende Codebeispiel zeigt eine Implementierung des 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));
  }
}