Auf dieser Seite wird beschrieben, wie du die Co-Watching API zur Unterstützung eines gemeinsam ansehen.
Ersteinrichtung
Um die Bibliothek für die Verwendung vorzubereiten, sollte mit der Anwendung „Live teilen“ ein
CoWatchingClient
Objekt, das eine Sitzung zum gemeinsamen Ansehen darstellt.
Wenn Sie das Meet Live Sharing SDK verwenden möchten, rufen Sie die
AddonClientFactory.getClient
. Dadurch wird ein
AddonClient
das als Einstiegspunkt für das gemeinsame Ansehen dient.
Rufen Sie zur Verwendung des Clients die Methode
newSessionBuilder
aus AddonClient
, um einen Builder für ein neues
AddonSession
newSessionBuilder
implementiert die
AddonSessionHandler
verwendet, um die Callbacks zu verarbeiten, die vom
Add-on hinzufügen.
Um eine Sitzung zu beginnen, füge den
withCoWatching
auf den Builder übergeben.
Das folgende Codebeispiel zeigt eine grundlegende Initialisierung des Clients für das Co-Watching -Objekt enthält:
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();
}
Bei Nutzeraktionen benachrichtigen
Wenn der lokale Nutzer Aktionen ausführt, z. B. Medien pausiert oder danach sucht auf ihrem Gerät ausgeführt wird. Die Bibliothek muss informiert sein, damit diese Aktionen die den anderen Teilnehmenden beim gemeinsamen Ansehen gespiegelt werden. Ein Beispiel für wie Sie die Bibliothek für mehrere Bundesstaaten benachrichtigen, finden Sie unter
Mit den folgenden Methoden kannst du den Status der gemeinsamen Wiedergabe steuern:
CoWatchingClient.notifyBuffering
: Benachrichtigt Meet, dass die Medien aus folgendem Grund nicht abgespielt werden können: zum Zwischenspeichern aufgrund eines früheren Medienwechsels, einer Mediensuche oder einer normalen Netzwerkverbindung Überlastung.CoWatchingClient.notifyEnded
: Meet wird benachrichtigt, dass der Mediaplayer das Ende der das aktuelle Medium ist.CoWatchingClient.notifyPauseState
Benachrichtigen Sie Meet, dass der Nutzer die Wiedergabe pausiert oder die Pausierung wieder aufgehoben hat von Medien, damit diese Aktion in Meet für andere Nutzer übernommen werden kann.CoWatchingClient.notifyPlayoutRate
: Benachrichtigt Meet, dass der Nutzer die Playout-Rate von einen neuen Wert fest (z. B. 1.25x).CoWatchingClient.notifyQueueUpdate
: Informiert Meet, dass sich die Warteschlange geändert hat, sodass Meet kann das für andere Nutzer spiegeln.CoWatchingClient.notifyReady
: Informiert Meet, dass die Zwischenspeicherung abgeschlossen ist und die Mediendatei kann ab dem angegebenen Zeitstempel abgespielt werden.CoWatchingClient.notifySeekToTimestamp
: Informiert Meet, dass der Nutzer den Wiedergabepunkt von Medien übertragen, damit diese Aktion in Meet für andere Nutzer übernommen werden kann.CoWatchingClient.notifySwitchedToMedia
: Benachrichtigt Meet, dass der Nutzer die Medien gewechselt hat, sodass Meet kann das an andere Nutzer weitergeben. Bietet außerdem eine Option für eine gleichzeitige Aktualisierung der Warteschlange.
Das folgende Codebeispiel zeigt, wie Nutzer benachrichtigt werden:
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);
};
Remote-Status verwalten
Wenn Sie eingehende Updates von Remote-Teilnehmern anwenden möchten, müssen Sie
Hier erfahren Sie, wie Sie den lokalen Status der Medienwiedergabe direkt über
die
CoWatchingHandler.onCoWatchingStateChanged()
Callback des Nutzers an.
Meet muss außerdem die aktuelle Position der Medien abrufen
indem Sie die Methode
CoWatchingHandler.onStateQuery()
Callback des Nutzers an. Dieser wird regelmäßig aufgerufen und sollte daher
(z. B. <100 ms).
Das folgende Codebeispiel zeigt eine Implementierung des
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));
}
}