Co-डूइंग एपीआई लागू करना

इस पेज में बताया गया है कि साथ मिलकर काम करने की स्थितियों को बेहतर बनाने के लिए, को-डूइंग एपीआई का इस्तेमाल कैसे किया जाता है.

शुरुआती सेट अप

लाइब्रेरी को इस्तेमाल के लिए तैयार करने के लिए, लाइव शेयरिंग ऐप्लिकेशन को CoDoingClient ऑब्जेक्ट शुरू करना चाहिए, जो को-डूइंग सेशन को दिखाता हो.

Meet लाइव शेयरिंग SDK टूल इस्तेमाल करने के लिए, AddonClientFactory.getClient तरीके को कॉल करें. इससे एक AddonClient दिखता है, जो को-डूइंग सेशन के लिए एंट्री पॉइंट के तौर पर काम करता है.

क्लाइंट का इस्तेमाल करने के लिए, AddonClient में दिए गए newSessionBuilder तरीके को कॉल करें, ताकि नए AddonSession के लिए बिल्डर को दिखाया जा सके. newSessionBuilder, सेशन के लिए ऐड-ऑन से मिले कॉलबैक को मैनेज करने के लिए, AddonSessionHandler इंटरफ़ेस लागू करता है.

सेशन शुरू करने के लिए, बिल्डर में withCoDoing तरीका जोड़ें.

नीचे दिए गए कोड सैंपल से पता चलता है कि को-डूइंग क्लाइंट ऑब्जेक्ट को बुनियादी तौर पर शुरू करना है या नहीं:

Java

class AwesomeVideoAddonSessionHandler implements AddonSessionHandler {}

//For sample implementation, see the "Handle incoming updates" section.
class AwesomeVideoCoDoingHandler implements CoDoingHandler {}

public ListenableFuture<AddonSession> initialSetup() {
  AddonClient meetClient = AddonClientFactory.getClient();
  return meetClient
      .newSessionBuilder(
          new AwesomeVideoAddonSessionHandler())
      .withCoDoing(new AwesomeVideoCoDoingHandler())
      .begin();
}

वीडियो रोकें

लाइव शेयरिंग में हिस्सा लेते समय, अगर कोई व्यक्ति अपने स्थानीय वीडियो ऐप्लिकेशन पर वीडियो चलाना रोक देता है, तो आपको पक्का करना होगा कि लाइव शेयरिंग में शामिल सभी लोग वीडियो रोक दें.

ऐसा करने के लिए, एक CoDoingState मैसेज बनाएं, जिसमें दिखाया गया हो कि वीडियो रुका हुआ है. साथ ही, Google Meet को मीटिंग में शामिल अन्य सभी लोगों को इसे ब्रॉडकास्ट करने के लिए कहें. इसके लिए, setGlobalState तरीके का इस्तेमाल करें. शेयर की गई ग्लोबल स्टेट, मौजूदा या नई मीटिंग में हिस्सा लेने वाले सभी लोगों के लिए, डिफ़ॉल्ट स्थिति बनी रहती है. यह स्थिति तब तक बनी रहती है, जब तक कोई नई स्थिति सेट नहीं हो जाती.

यहां दिए गए कोड सैंपल में, उपयोगकर्ताओं को 'रोका गया' स्टेटस के बारे में सूचना देने का तरीका बताया गया है:

Java

public void onVideoPaused(String videoUrl, Instant currentTimestamp) {
  // Create an internal state object to share with other participants. Note: It's
  // good practice to encode all metadata—even seemingly irrelevant data—into
  // ActivityState updates to guard against race conditions and other subtle
  // failures.
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(true)
    .build();

  // Create the CoDoingState object to wrap the internal state
  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  // Use Meet to broadcast internal state update to all other participants
  this.coDoingClient.setGlobalState(coDoingState);
};

कोड सैंपल, सीरियल वाले videoState ऑब्जेक्ट को ट्रिगर करता है. ऐसा करने पर, Meet के उन सभी इंस्टेंस पर ब्रॉडकास्ट होता है जो लाइव शेयरिंग में हिस्सा लेते हैं. मीटिंग में हिस्सा लेने वाले अन्य लोगों से ब्रॉडकास्ट के अपडेट पाने का तरीका जानने के लिए, इनकमिंग अपडेट मैनेज करना सेक्शन देखें.

नीचे दिए गए डायग्राम में, रोकने की कार्रवाई के ट्रिगर होने के बाद, इवेंट के क्रम के बारे में बताया गया है:

लाइव शेयरिंग एपीआई का डायग्राम शुरू करें.

वीडियो चलाएं

वीडियो रोकने की तरह ही, अगर कोई उपयोगकर्ता अपने लोकल ऐप्लिकेशन पर वीडियो को चालू करता है, तो Meet को यह कार्रवाई, लाइव शेयरिंग में शामिल दूसरे लोगों के लिए ब्रॉडकास्ट करनी होगी.

फ़ाइल भेजने वाले व्यक्ति (वीडियो को फिर से चालू करने वाले उपयोगकर्ता) की ओर से, रोकें के उदाहरण में सिर्फ़ isPaused का स्टेटस अपडेट होता है.

नीचे दिए गए कोड सैंपल में बताया गया है कि ईमेल भेजने वाले की तरफ़ से उपयोगकर्ताओं को रोक हटाई गई स्थिति के बारे में कैसे सूचना दी जाए:

Java

public void onVideoUnpaused(String videoUrl, Instant currentTimestamp) {
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(false)
    .build();

  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  this.coDoingClient.setGlobalState(coDoingState);
}

वीडियो खोजें

वीडियो रोकें और वीडियो को फिर से चलाएं की तरह ही, अगर कोई उपयोगकर्ता स्थानीय ऐप्लिकेशन पर टाइमलाइन को खींचकर नए टाइमस्टैंप पर डालता है, तो Meet को यह कार्रवाई, मीटिंग में हिस्सा लेने वाले सभी लोगों के लिए ब्रॉडकास्ट करनी होगी.

यहां दिए गए कोड सैंपल में बताया गया है कि ईमेल भेजने वाले की तरफ़ से उपयोगकर्ताओं को अपडेट किए गए टाइमस्टैंप की सूचना कैसे दी जाए:

Java

public void onVideoSeeked(String videoUrl, Instant currentTimestamp, bool isPaused) {
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(isPaused)
    .build();

  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  this.coDoingClient.setGlobalState(coDoingState);
}

कोई दूसरा वीडियो चलाना

अगर उपयोगकर्ता स्थानीय ऐप्लिकेशन पर कोई दूसरा वीडियो चुनकर, देखे जा रहे वीडियो में बदलाव करता है, तो लाइव शेयरिंग में हिस्सा लेने वाले सभी लोगों के लिए, Meet को नया वीडियो चलाना होगा. बदला गया वीडियो videoState.videoUrl में सेव है.

यहां दिए गए कोड सैंपल में, अपडेट किए गए वीडियो के यूआरएल के बारे में उपयोगकर्ताओं को सूचना देने का तरीका बताया गया है:

Java

public void onVideoChanged(String videoUrl, Duration currentTimestamp, bool isPaused) {
  AwesomeVideoState videoState = AwesomeVideoState
    .builder()
    .videoUrl(videoUrl)
    .videoTimestamp(currentTimestamp)
    .isPaused(isPaused)
    .build();

  CoDoingState coDoingState = new CoDoingState();
  coDoingState.state = SerializationUtils.serialize(videoState);

  this.coDoingClient.setGlobalState(coDoingState);
}

अन्य लोगों के साथ मिलकर काम करना बंद करें

जब कोई उपयोगकर्ता गतिविधि खत्म करने का विकल्प चुनता है, तो endSession तरीका Meet ऐप्लिकेशन से डिसकनेक्ट हो जाता है. इससे, Meet को न तो मीटिंग खत्म करने के लिए मजबूर किया जाता है और न ही उसे मीटिंग से बाहर रखा जाता है.

यहां दिए गए कोड सैंपल में, बंद किए गए सेशन के बारे में उपयोगकर्ताओं को सूचना देने का तरीका बताया गया है:

Java

public void endCoDoing() {
  this.session.endSession();
}

आने वाले अपडेट मैनेज करना

जब मीटिंग में शामिल किसी दूसरे व्यक्ति के Meet ऐप्लिकेशन को ब्रॉडकास्ट मिलता है, तो onGlobalStateChanged() कॉलबैक ट्रिगर हो जाता है. आम तौर पर, इस बारे में अच्छे फ़ैसले लेना ज़रूरी होता है कि आने वाले अपडेट के जवाब में क्या कार्रवाई की जाए. जैसे, आने वाले वीडियो के टाइमस्टैंप सिर्फ़ तब मैच करें, जब वे स्थानीय टाइमस्टैंप से काफ़ी अलग हों.

यहां दिया गया कोड सैंपल दिखाता है कि आने वाले अलग-अलग अपडेट को कैसे मैनेज किया जाए:

Java

class AwesomeVideoCoDoingHandler implements CoDoingHandler {
  public void onGlobalStateChanged(CoDoingState update) {
    AwesomeVideoState videoState = SerializationUtils.deserialize(update.state());

    // Handle transition to new video.
    if (!videoState.videoUrl.equals(this.videoPlayer.videoUrl)) {
      this.videoPlayer.loadVideo(videoState.videoUrl);
    }

    // If the timestamp in the arriving update has sufficiently diverged, adjust
    // the local video playout.
    if (videoState.videoTimestamp.minus(this.videoPlayer.videoTimestamp).abs() >
                                        Duration.ofSeconds(2)) {
      this.videoPlayer.seek(videoState.videoTimestamp);
    }

    // Update pause state, if necessary.
    if (!videoState.isPaused && this.videoPlayer.isPaused) {
      this.videoPlayer.unpause();
    } else if (videoState.isPaused && !this.videoPlayer.isPaused) {
      this.videoPlayer.pause();
    }
  }
}