Co-Doing API'sini uygulayın

Bu sayfada, birlikte yapma senaryosunu desteklemek için Co-Doing API'nin nasıl kullanılacağı açıklanmaktadır.

İlk kurulum

Canlı paylaşım uygulamasının, kitaplığı kullanıma hazırlamak için birlikte yapma oturumunu temsil eden bir CoDoingClient nesnesi başlatması gerekir.

Meet canlı paylaşım SDK'sını kullanmak için AddonClientFactory.getClient yöntemini çağırın. Bu komut, birlikte yapma oturumu için giriş noktası olarak işlev gören bir AddonClient döndürür.

İstemciyi kullanmak istiyorsanız AddonClient üzerinden newSessionBuilder yöntemini çağırarak yeni bir AddonSession için derleyici döndürün. newSessionBuilder, oturum için eklentinin sağladığı geri çağırmaları işlemek için AddonSessionHandler arayüzünü uygular.

Oturum başlatmak için oluşturucuya withCoDoing yöntemini ekleyin.

Aşağıdaki kod örneğinde, birlikte yapılan istemci nesnesinin temel bir ilk kullanıma hazırlanması gösterilmektedir:

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

Videoyu duraklat

Canlı paylaşım deneyimine katılırken kullanıcı yerel video uygulamasında oynatmayı duraklatırsa canlı paylaşım deneyimindeki tüm katılımcıların da videolarını duraklattığından emin olmanız gerekir.

Bunun için videonun duraklatıldığını gösteren bir CoDoingState mesajı oluşturun ve Google Meet'e setGlobalState yöntemini kullanarak diğer tüm katılımcılara yayınlamasını söyleyin. Paylaşılan genel durum, yeni bir durum ayarlanana kadar mevcut veya yeni tüm katılımcılar için varsayılan durum olur.

Aşağıdaki kod örneğinde, kullanıcılara duraklatılmış durumun nasıl bildirileceği gösterilmektedir:

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

Kod örneği, canlı paylaşım deneyimine katılan diğer tüm Meet örneklerine yayınlanacak serileştirilmiş videoState nesnesini tetikler. Diğer katılımcılardan yayın güncellemelerini nasıl alacağınızla ilgili ayrıntılar için Gelen güncellemeleri işleme bölümüne bakın.

Aşağıdaki şemada, duraklatma işlemi tetiklendikten sonraki etkinliklerin sırası açıklanmaktadır:

Canlı Paylaşım API&#39;si diyagramını başlatın.

Videonun duraklatmasını kaldır

Videoyu duraklatma özelliğine benzer şekilde, kullanıcı yerel uygulamasında videonun duraklatmasını kaldırırsa Meet'in bu işlemi diğer canlı paylaşım katılımcılarına yayınlaması gerekir.

Gönderen tarafında (videoyu devam ettiren kullanıcı), duraklatma örneğinden tek fark isPaused durumunun güncellenmesidir.

Aşağıdaki kod örneğinde, kullanıcıları gönderen tarafında duraklatmanın durdurulma durumunun nasıl bildirileceği gösterilmektedir:

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

Videoda ara

Videoyu duraklatma ve videonun duraklatmasını kaldırma gibi, kullanıcı yerel uygulamadaki zaman çizelgesini yeni bir zaman damgasına sürüklerse Meet'in bu işlemi tüm katılımcılara yayınlaması gerekir.

Aşağıdaki kod örneğinde, güncellenen zaman damgasının gönderen tarafından kullanıcılara nasıl bildirileceği gösterilmektedir:

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

Farklı bir video oynatma

Kullanıcı, yerel uygulamada başka bir video seçerek izlenmekte olan videoyu da değiştirirse Meet'in, yeni videoyu tüm canlı paylaşım katılımcıları için oynatması gerekir. Değiştirilen video videoState.videoUrl içinde depolanır.

Aşağıdaki kod örneğinde, kullanıcılara güncellenen video URL'sinin nasıl bildirileceği gösterilmektedir:

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

Birlikte yapmayı sonlandır

Bir kullanıcı etkinliği sonlandırmayı seçtiğinde endSession yönteminin Meet uygulamasıyla bağlantısı kesilir. Bu işlem, Meet'i sonlandırmaya zorlanmaz veya kullanıcının toplantıdan ayrılmasına neden olmaz.

Aşağıdaki kod örneğinde, durdurulan oturumun kullanıcılara nasıl bildirileceği gösterilmektedir:

Java

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

Gelen güncellemeleri yönetme

Başka bir katılımcının Meet uygulaması yayın aldığında onGlobalStateChanged() geri çağırması tetiklenir. Genellikle, gelen güncellemelere yanıt olarak hangi işlemin gerçekleştirileceğine dair doğru kararlar vermek önemlidir. Örneğin, yalnızca yerel zaman damgasından yeterince farklıysa gelen video zaman damgalarının eşleştirilmesi gibi.

Aşağıdaki kod örneğinde, farklı gelen güncellemelerin nasıl işleneceği gösterilmektedir:

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