Ortak İzleme API'sini uygulayın

Bu sayfada, birlikte izleme senaryosunu desteklemek için Co-Watching 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 izleme oturumunu temsil eden bir CoWatchingClient nesnesi başlatması gerekir.

Meet canlı paylaşım SDK'sını kullanmak için AddonClientFactory.getClient yöntemini çağırın. Bu, birlikte izleme 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 withCoWatching yöntemini ekleyin.

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

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

Kullanıcı işlemleri olduğunda bildirim gönder

Yerel kullanıcı, cihazında medya içeriğini oynatma veya oynatma gibi işlemler gerçekleştirdiğinde, bu işlemlerin birlikte izleme deneyimindeki diğer katılımcılara yansıtılabilmesi için kitaplık bilgilendirilmelidir. Kitaplığı birden fazla durum hakkında bilgilendirmeyle ilgili bir örnek için Başlarken bölümüne bakın.

Birlikte izleme durumunu şu yöntemleri kullanarak kontrol edebilirsiniz:

  • CoWatchingClient.notifyBuffering: Meet'e, önceki bir medya geçişi, medya arama işlemi veya normal ağ tıkanıklığı nedeniyle arabelleğe alma nedeniyle medyanın oynatılmaya hazır olmadığını bildirir.
  • CoWatchingClient.notifyEnded: Meet'e, medya oynatıcının mevcut medyanın sonuna ulaştığını bildirir.
  • CoWatchingClient.notifyPauseState Meet'e kullanıcının medya oynatmayı duraklattığını veya devam ettirdiğini bildirerek Meet'in bu işlemi diğer kullanıcılara yansıtabilmesi için bunu yapmanız gerekir.
  • CoWatchingClient.notifyPlayoutRate: Kullanıcının, medyanın oynatma oranını yeni bir değerle (ör.1,25x) güncellediğini Meet'e bildirir.
  • CoWatchingClient.notifyQueueUpdate: Meet'e sıranın değiştiğini bildirir. Böylece Meet bunu diğer kullanıcılara yansıtabilir.
  • CoWatchingClient.notifyReady: Meet'e, sağlanan zaman damgasından başlayarak arabelleğe alma işleminin tamamlandığını ve medyanın artık oynatılmaya hazır olduğunu bildirir.
  • CoWatchingClient.notifySeekToTimestamp: Meet'e, kullanıcının medyanın oynatma noktasını aradığını bildirir. Böylece Meet bu işlemi diğer kullanıcılara yansıtabilir.
  • CoWatchingClient.notifySwitchedToMedia: Meet'e, kullanıcının medya değiştirdiğini bildirir. Böylece Meet bunu diğer kullanıcılara iletebilir. Eş zamanlı sıra güncelleme seçeneği de vardır.

Aşağıdaki kod örneğinde, kullanıcıların nasıl bilgilendirileceği gösterilmektedir:

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

Uzak durumu yönet

Uzak katılımcılardan gelen güncellemeleri uygulamak için CoWatchingHandler.onCoWatchingStateChanged() geri çağırmasını kullanarak Meet'e yerel medya oynatma durumunu doğrudan yönetebileceğiniz bir yöntem sunmanız gerekir.

Meet'in, CoWatchingHandler.onStateQuery() geri çağırmasını yaparak medya oynatmanın mevcut konumunu da alması gerekir. Bu, düzenli olarak adlandırılır. Bu nedenle, yüksek performanslı olacak şekilde yazılmalıdır (örneğin, <100 ms).

Aşağıdaki kod örneğinde CoWatchingHandler uygulaması gösterilmektedir:

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