इस पेज पर बताया गया है कि लोगों के साथ मिलकर वीडियो देखने के लिए, को-वॉचिंग एपीआई का इस्तेमाल कैसे किया जाता है.
शुरुआती सेट अप
लाइब्रेरी को इस्तेमाल के लिए तैयार करने के लिए, लाइव शेयरिंग ऐप्लिकेशन को
CoWatchingClient
ऑब्जेक्ट शुरू करना चाहिए, जो लोगों के साथ मिलकर वीडियो देखने के सेशन को दिखाता है.
Meet लाइव शेयरिंग SDK टूल इस्तेमाल करने के लिए, AddonClientFactory.getClient
तरीके को कॉल करें. इससे एक AddonClient
दिखता है, जो लोगों के साथ मिलकर वीडियो देखने के सेशन में एंट्री पॉइंट के तौर पर काम करता है.
क्लाइंट का इस्तेमाल करने के लिए, AddonClient
में दिए गए newSessionBuilder
तरीके को कॉल करें, ताकि नए 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 को सूचना दें कि उपयोगकर्ता ने मीडिया को चलाने की सुविधा को रोक दिया है या उसे फिर से चालू कर दिया है. ऐसा करने से, Meet उस कार्रवाई की डुप्लीकेट कॉपी बना सकता है.CoWatchingClient.notifyPlayoutRate
: Meet से यह सूचना देता है कि उपयोगकर्ता ने मीडिया की प्लेआउट दर को नई वैल्यू में अपडेट किया है (उदाहरण के लिए, 1.25x).CoWatchingClient.notifyQueueUpdate
: Meet से सूचना मिलती है कि सूची बदल गई है. इसलिए, Meet दूसरे उपयोगकर्ताओं को भी सूची में मौजूद कॉन्टेंट की जानकारी दे सकता है.CoWatchingClient.notifyReady
: Meet से यह सूचना मिलती है कि बफ़रिंग पूरी हो गई है और मीडिया अब चलाया जा सकता है. यह दिए गए टाइमस्टैंप से शुरू होता है.CoWatchingClient.notifySeekToTimestamp
: Meet से यह सूचना मिलती है कि उपयोगकर्ता ने मीडिया चलाने की जगह को ढूंढा है, ताकि Meet दूसरे उपयोगकर्ताओं के लिए उस कार्रवाई को शेयर कर सके.CoWatchingClient.notifySwitchedToMedia
: Meet से यह सूचना मिलती है कि उपयोगकर्ता ने मीडिया स्विच किया है, ताकि Meet उसे दूसरे उपयोगकर्ताओं के साथ शेयर कर सके. साथ ही, सूची को एक साथ अपडेट करने का विकल्प भी है.
यहां दिए गए कोड सैंपल में, उपयोगकर्ताओं को सूचना देने का तरीका बताया गया है:
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);
};
रिमोट स्थिति मैनेज करें
रिमोट तौर पर हिस्सा लेने वाले लोगों से मिलने वाले अपडेट लागू करने के लिए, आपको Meet को कोई ऐसा तरीका उपलब्ध कराना होगा जिसका इस्तेमाल करके, लोकल मीडिया प्लेआउट की स्थिति को सीधे तौर पर मैनेज किया जा सके. इसके लिए, आपको 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));
}
}