Mengimplementasikan Co-Watching API

Halaman ini menjelaskan cara menggunakan Co-Watching API untuk mendukung skenario menonton bersama.

Penyiapan awal

Untuk menyiapkan library yang akan digunakan, aplikasi berbagi live harus menginisialisasi objek CoWatchingClient yang mewakili sesi menonton bersama.

Untuk menggunakan SDK Berbagi Live Meet, panggil metode AddonClientFactory.getClient. Tindakan ini akan menampilkan AddonClient yang berfungsi sebagai titik entri untuk sesi menonton bersama.

Untuk menggunakan klien, panggil metode newSessionBuilder dari AddonClient guna menampilkan builder untuk AddonSession baru. newSessionBuilder menerapkan antarmuka AddonSessionHandler untuk menangani callback yang disediakan oleh add-on untuk sesi tersebut.

Untuk memulai sesi, tambahkan metode withCoWatching ke builder.

Contoh kode berikut menunjukkan inisialisasi dasar objek klien yang menonton bersama:

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

Beri tahu pada tindakan pengguna

Saat pengguna lokal melakukan tindakan—misalnya, menjeda atau mencari playout media di perangkat—library harus diberi tahu agar tindakan tersebut dapat dicerminkan ke peserta lain dalam pengalaman menonton bersama. Untuk mengetahui contoh cara memberi tahu library untuk beberapa status, lihat Memulai.

Anda dapat mengontrol status menonton bersama menggunakan metode berikut:

Contoh kode berikut menunjukkan cara memberi tahu pengguna:

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

Mengelola status jarak jauh

Untuk menerapkan update masuk dari peserta jarak jauh, Anda harus menawarkan cara kepada Meet untuk mengelola status pemutaran media lokal secara langsung menggunakan callback CoWatchingHandler.onCoWatchingStateChanged().

Meet juga perlu mengambil posisi tata letak media saat ini dengan memanggil callback CoWatchingHandler.onStateQuery(). Ini dipanggil secara teratur, sehingga harus ditulis agar berperforma tinggi (misalnya, <100 md).

Contoh kode berikut menunjukkan implementasi CoWatchingHandler:

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