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 के अन्य सभी इंस्टेंस पर किया जाता है. मीटिंग में शामिल अन्य लोगों से ब्रॉडकास्ट अपडेट पाने का तरीका जानने के लिए, आने वाले अपडेट मैनेज करना सेक्शन देखें.

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

Live Share API का डायग्राम शुरू करना.

वीडियो चलाएं

वीडियो को रोकें की तरह ही, अगर कोई उपयोगकर्ता अपने लोकल ऐप्लिकेशन पर वीडियो को फिर से चालू करता है, तो 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();
    }
  }
}