Co-Doing API implementieren

Auf dieser Seite wird beschrieben, wie Sie mit der Co-Doing API ein Co-Doing unterstützen können. Szenario.

Ersteinrichtung

Um die Bibliothek für die Verwendung vorzubereiten, sollte mit der Anwendung „Live teilen“ ein CoDoingClient , das eine Co-Doing-Sitzung 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 die Co-Doing-Sitzung 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 withCoDoing auf den Builder übergeben.

Das folgende Codebeispiel zeigt eine grundlegende Initialisierung des Co-Doing-Clients -Objekt enthält:

Java

class AwesomeVideoAddonSessionHandler implements AddonSessionHandler {}

//For sample implementation, see the "Handle incoming updates" section.
class AwesomeVideoCoDoingHandler implements CoDoingHandler {}

public ListenableFuture<AddonSession> initialSetup() {
  AddonClient meetClient = AddonClientFactory.getClient();
  return meetClient
      .newSessionBuilder(
          new AwesomeVideoAddonSessionHandler())
      .withCoDoing(new AwesomeVideoCoDoingHandler())
      .begin();
}

Video anhalten

Wenn ein Nutzer die Wiedergabe pausiert, wenn er die Funktion „Live teilen“ verwendet müssen Sie dafür sorgen, dass alle Teilnehmer das Video auch pausiert.

Dazu erstellen Sie ein CoDoingState an, dass das Video pausiert wurde, und weisen Sie Google Meet an, eine Nachricht an alle zu senden. alle anderen Teilnehmenden mithilfe der setGlobalState . Der gemeinsame globale Status wird zum Standardstatus für alle Teilnehmer, vorhanden oder neu sein, bis ein neuer Status festgelegt wird.

Das folgende Codebeispiel zeigt, wie Nutzer über den Status „Pausiert“ informiert werden:

Java

public void onVideoPaused(String videoUrl, Instant currentTimestamp) {
  // Create an internal state object to share with other participants. Note: It's
  // good practice to encode all metadata—even seemingly irrelevant data—into
  // ActivityState updates to guard against race conditions and other subtle
  // failures.
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(true)
    .build();

  // Create the CoDoingState object to wrap the internal state
  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  // Use Meet to broadcast internal state update to all other participants
  this.coDoingClient.setGlobalState(coDoingState);
};

Das Codebeispiel löst das serialisierte videoState-Objekt für die Übertragung an alle anderen Meet-Instanzen, bei denen die Funktion „Live teilen“ verwendet wird Nutzererfahrung. Weitere Informationen zum Empfangen von Broadcast-Updates von anderen erhalten Sie im Artikel Umgang mit eingehenden Updates .

Das folgende Diagramm zeigt die Abfolge der Ereignisse nach der Pause. ausgelöst:

Diagramm zum Starten der Live Sharing API.

Pausierung des Videos aufheben

Ähnlich wie beim Pausieren des Videos gilt: in der lokalen App, dann muss Meet diesen Vorgang live an andere für die Freigabe der Teilnehmenden.

Der einzige Unterschied aufseiten des Absenders (Nutzer, der die Pausierung des Videos aufhebt) Das Pausenbeispiel ist, dass der Status isPaused aktualisiert wird.

Im folgenden Codebeispiel wird gezeigt, wie Sie Nutzer über den Status der aufgehobenen Pausierung auf der Absenderseite:

Java

public void onVideoUnpaused(String videoUrl, Instant currentTimestamp) {
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(false)
    .build();

  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  this.coDoingClient.setGlobalState(coDoingState);
}

Videosuche

Genau wie bei den Funktionen zum Pausieren des Videos und Fortsetzen der Wiedergabe: wenn Nutzende die Zeitachse in der lokalen App auf einen neuen Zeitstempel ziehen, Dieser Vorgang muss in Meet an alle Teilnehmer übertragen werden.

Das folgende Codebeispiel zeigt, wie Nutzer über den aktualisierten Zeitstempel informiert werden von der Absenderseite aus:

Java

public void onVideoSeeked(String videoUrl, Instant currentTimestamp, bool isPaused) {
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(isPaused)
    .build();

  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  this.coDoingClient.setGlobalState(coDoingState);
}

Anderes Video abspielen

Wenn der Nutzer das Video ändert, indem er auf die lokale App verwenden, muss Meet bei allen „Live teilen“-Funktionen das neue Video abspielen Teilnehmenden. Das geänderte Video wird in videoState.videoUrl gespeichert.

Das folgende Codebeispiel zeigt, wie Nutzer über die aktualisierte Video-URL informiert werden:

Java

public void onVideoChanged(String videoUrl, Duration currentTimestamp, bool isPaused) {
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(isPaused)
    .build();

  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  this.coDoingClient.setGlobalState(coDoingState);
}

Gemeinsame Bearbeitung beenden

Wenn ein Nutzer sich entscheidet, die Aktivität zu beenden, endSession wird die Verbindung zur Meet App getrennt. Dies erzwingt keine wird die Videokonferenz beendet und der Nutzer verlässt die Besprechung nicht. zu treffen.

Das folgende Codebeispiel zeigt, wie Nutzer über die beendete Sitzung benachrichtigt werden:

Java

public void endCoDoing() {
  this.session.endSession();
}

Eingehende Updates verarbeiten

Wenn die Meet App eines anderen Teilnehmers eine Nachricht an alle empfängt, wird das Symbol onGlobalStateChanged() Callback ausgelöst. Normalerweise ist es wichtig, gute Entscheidungen darüber zu treffen, als Reaktion auf eingehende Updates auszuführen, z. B. nur für den Abgleich eingehender Videozeitstempel, wenn sie sich ausreichend vom lokalen Zeitstempel unterscheiden.

Das folgende Codebeispiel zeigt, wie die verschiedenen eingehenden Updates verarbeitet werden:

Java

class AwesomeVideoCoDoingHandler implements CoDoingHandler {
  public void onGlobalStateChanged(CoDoingState update) {
    AwesomeVideoState videoState = SerializationUtils.deserialize(update.state());

    // Handle transition to new video.
    if (!videoState.videoUrl.equals(this.videoPlayer.videoUrl)) {
      this.videoPlayer.loadVideo(videoState.videoUrl);
    }

    // If the timestamp in the arriving update has sufficiently diverged, adjust
    // the local video playout.
    if (videoState.videoTimestamp.minus(this.videoPlayer.videoTimestamp).abs() >
                                        Duration.ofSeconds(2)) {
      this.videoPlayer.seek(videoState.videoTimestamp);
    }

    // Update pause state, if necessary.
    if (!videoState.isPaused && this.videoPlayer.isPaused) {
      this.videoPlayer.unpause();
    } else if (videoState.isPaused && !this.videoPlayer.isPaused) {
      this.videoPlayer.pause();
    }
  }
}