इस पेज में बताया गया है कि लोगों के साथ मिलकर वीडियो देखने से जुड़े मामले देखें.
शुरुआती सेट अप
लाइब्रेरी को इस्तेमाल के लिए तैयार करने के लिए, लाइव शेयरिंग ऐप्लिकेशन को
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 को सूचना दें कि उपयोगकर्ता ने वीडियो चलाने पर रोक लगा दी है या उसे फिर से चालू कर दिया है का इस्तेमाल किया जा सकता है, ताकि 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);
};
रिमोट स्थिति मैनेज करें
दूर से मीटिंग में हिस्सा लेने वाले लोगों से मिलने वाले अपडेट लागू करने के लिए, आपको ये सुविधाएं देनी होंगी
इसका इस्तेमाल करके, लोकल मीडिया प्लेआउट स्टेटस को सीधे तौर पर मैनेज करने का तरीका जानें
यह
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));
}
}