Ortak İzleme API'sini uygulayın

Bu sayfada, birlikte izleme senaryosunu desteklemek için Ortak İzleme API'sinin nasıl kullanılacağı açıklanmaktadır.

İlk kurulum

Kitaplığı kullanıma hazırlamak için canlı paylaşım uygulaması, birlikte izleme oturumunu temsil eden bir CoWatchingClient nesnesini başlatmalıdır.

Meet Canlı Paylaşım SDK'sını kullanmak için AddonClientFactory.getClient yöntemini çağırın. Bu işlem, birlikte izleme oturumunun giriş noktası olarak kullanılan 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 withCoWatching yöntemini derleyiciye ekleyin.

Aşağıdaki kod örneğinde birlikte izleme istemci nesnesinin temel bir başlatılması 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şlemlerini bildir

Yerel kullanıcı, cihazında medya oynatmayı duraklatma veya arama gibi işlemler gerçekleştirdiğinde, söz konusu işlemlerin birlikte izleme deneyimindeki diğer katılımcılara yansıtılabilmesi için kitaplık bu konuda bilgilendirilmelidir. Kitaplığı birden fazla durum için nasıl bilgilendireceğinizi görmek isterseniz Başlayın bölümüne bakın.

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

  • CoWatchingClient.notifyBuffering: Meet'e önceden bir medya geçişi, medya arama veya normal ağ tıkanıklığı nedeniyle arabelleğe alma nedeniyle medya oynatılmaya hazır olmadığını bildirir.
  • CoWatchingClient.notifyEnded: Meet'e medya oynatıcının geçerli medyanın sonuna ulaştığını bildirir.
  • CoWatchingClient.notifyPauseState Kullanıcının medya oynatmayı duraklattığını veya devam ettirdiğini Meet'e bildirin. Böylece Meet bu işlemi diğer kullanıcılara yansıtabilir.
  • CoWatchingClient.notifyPlayoutRate: Kullanıcının medyanın oynatılma hızını yeni bir değerle (örneğin, 1,25x) güncellediğini Meet'e bildirir.
  • CoWatchingClient.notifyQueueUpdate: Sıranın değiştiğini Meet'e bildirir. Böylece Meet, sırayı diğer kullanıcılara yansıtabilir.
  • CoWatchingClient.notifyReady: 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 Meet'e bildirir.
  • CoWatchingClient.notifySeekToTimestamp: Kullanıcının medyanın oynatma noktasını aradığını Meet'e bildirir. Böylece Meet, işlemi diğer kullanıcılara yansıtabilir.
  • CoWatchingClient.notifySwitchedToMedia: Kullanıcının medyayı değiştirdiğini Meet'e bildirir. Böylece Meet, medyayı diğer kullanıcılara iletebilir. Eşzamanlı sıra güncellemesi 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 Meet'e, CoWatchingHandler.onCoWatchingStateChanged() geri çağırma işlevini kullanarak yerel medya oynatma durumunu doğrudan yönetebileceğiniz bir yöntem sunmanız gerekir.

Meet'in CoWatchingHandler.onStateQuery() geri çağırma işlevini çağırarak medya oynatmasının mevcut konumunu da alması gerekir. Bu işleve düzenli olarak çağrı yapılır. Bu nedenle, performans yüksek (ör. <100 ms) şeklinde yazılmalıdır.

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