Co-Doing API'sini uygulayın

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

İlk kurulum

Kitaplığı kullanıma hazırlamak için canlı paylaşım uygulamasının ortak çalışma oturumunu temsil eden bir CoDoingClient nesnesini başlatması gerekir.

Meet Canlı Paylaşım SDK'sını kullanmak için AddonClientFactory.getClient yöntemini çağırın. Bu komut, ortak yapma oturumu için giriş noktası görevi gören bir AddonClient döndürür.

İstemciyi kullanmak için AddonClient üzerinden newSessionBuilder yöntemini çağırarak yeni AddonSession için derleyiciyi döndürün. newSessionBuilder, oturum için eklenti tarafından sağlanan geri çağırmaları işlemek üzere AddonSessionHandler arayüzünü uygular.

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

Aşağıdaki kod örneğinde, ortak yapılan istemci nesnesinin temel bir başlatılması 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ılan bir kullanıcı, yerel video uygulamasında oynatmayı duraklatırsa canlı paylaşım deneyimindeki tüm katılımcıların da videosunu 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 video 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ıların duraklatma durumunun 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 şekilde serileştirilmiş videoState nesnesini tetikler. Diğer katılımcılardan yayın güncellemelerini nasıl alacağınız hakkında ayrıntılı bilgi için Gelen güncellemeleri yönetme bölümüne göz atın.

Aşağıdaki şemada, duraklatma işlemi tetiklendikten sonra gerçekleşen etkinlik sırası açıklanmaktadır:

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

Videoyu devam ettir

Videoyu duraklatma işlemine benzer şekilde, bir kullanıcı yerel uygulamasında videoyu devam ettirirse Meet'in bu işlemi diğer canlı paylaşım katılımcılarına yayınlaması gerekir.

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

Aşağıdaki kod örneğinde, duraklatmanın kaldırıldığı durum hakkında kullanıcıların gönderen tarafından nasıl bilgilendirileceğ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);
}

Video ara

Videoyu duraklatma ve videonun duraklatmasını kaldırma gibi, bir kullanıcı yerel uygulamada 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 oynat

Kullanıcı yerel uygulamada başka bir video seçerek izlenmekte olan videoyu da değiştirirse Meet'in yeni videoyu canlı paylaşıma katılan tü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'sini nasıl bildireceğiniz 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 çalışmayı sonlandır

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

Aşağıdaki kod örneğinde, kullanıcıların durdurulan oturum hakkında nasıl bilgilendirileceğ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ı bir yayın aldığında onGlobalStateChanged() geri çağırma özelliği tetiklenir. Gelen güncellemelere yanıt olarak hangi işlemin yapılacağı konusunda iyi kararlar vermek genellikle oldukça önemlidir. Örneğin, yalnızca yerel zaman damgasından yeterince farklı olan gelen video zaman damgalarını eşleştirmek gibi işlemler yapılmalıdır.

Aşağıdaki kod örneğinde, gelen farklı 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();
    }
  }
}