このページでは、Co-Watching API を使用して シナリオで説明します
初期設定
ライブラリを使用できるように準備するために、ライブ共有アプリケーションで
CoWatchingClient
共視聴セッションを表すオブジェクトです。
Meet ライブ共有 SDK を使用するには、
AddonClientFactory.getClient
メソッドを呼び出します。このメソッドは、
AddonClient
同時視聴セッションのエントリ ポイントとして機能します。
クライアントを使用するには、
newSessionBuilder
メソッドを AddonClient
から使用して、新しいジョブのビルダーを返す
AddonSession
。
newSessionBuilder
は、
AddonSessionHandler
インターフェースを使用して、
追加する必要があります。
セッションを開始するには、
withCoWatching
メソッドをビルダーに追加します。
次のコードサンプルは、同時視聴クライアントの基本的な初期化を示しています。 オブジェクト:
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();
}
ユーザーの操作時に通知
ローカル ユーザーがメディアの一時停止やシークなどの操作を行ったとき そのアクションを実行できるように、ライブラリに通知する必要がある 同時視聴中に他の参加者にミラーリングされます。たとえば ライブラリに複数の状態を通知する方法については、 開始されました。
同時視聴の状態は、次の方法で管理できます。
CoWatchingClient.notifyBuffering
: 次の理由でメディアを再生する準備ができていないことを Meet に通知します。 以前のメディア切り替え、メディア シーク、または通常のネットワークが原因でバッファリングが終了する あります。CoWatchingClient.notifyEnded
: メディア プレーヤーの視聴時間が制限に達したことを Meet に 確認できます。CoWatchingClient.notifyPauseState
ユーザーが再生の一時停止または一時停止解除を行ったことを Meet に通知する 他のユーザーも操作を行えます。CoWatchingClient.notifyPlayoutRate
: ユーザーが次のプレース レートを更新したことを Meet に通知します。 新しい値(1.25 倍など)に変更します。CoWatchingClient.notifyQueueUpdate
: キューが変更されたことを Meet に通知し、 Meet では、これを他のユーザーにミラーリングできます。CoWatchingClient.notifyReady
: バッファリングが完了し、メディアが 指定したタイムスタンプから再生できる状態になっています。CoWatchingClient.notifySeekToTimestamp
: ユーザーが次の再生ポイントをシークしたことを Meet に通知します。 これにより、Meet で他のユーザーにそのアクションをミラーリングできます。CoWatchingClient.notifySwitchedToMedia
: ユーザーがメディアを切り替えたことを Meet に通知し、 Meet ではその内容を他のユーザーに共有できます。もう 1 つは 同時キューをアップデートできます。
次のコードサンプルは、ユーザーに通知する方法を示しています。
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);
};
リモートの状態を管理する
リモートの参加者から受信した更新を適用するには、
以下を使用して、ローカルのメディア再生状態を直接管理する方法を
CoWatchingHandler.onCoWatchingStateChanged()
呼び出すことができます。
Meet はメディアの現在の位置も取得する必要があります。
呼び出すことによって、
CoWatchingHandler.onStateQuery()
呼び出すことができます。これは定期的に呼び出されるため、高パフォーマンスになるように記述する必要があります。
(例: 100 ミリ秒未満)。
次のコードサンプルは、
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));
}
}