कैप्चर हैंडल की मदद से बेहतर टैब शेयर करें

François Beaufort
François Beaufort

ब्राउज़र के इस्तेमाल से जुड़ी सहायता

  • Chrome: 102.
  • एज: 102.
  • Firefox: यह सुविधा काम नहीं करती.
  • Safari: यह सुविधा काम नहीं करती.

वेब प्लैटफ़ॉर्म पर अब कैप्चर हैंडल की सुविधा उपलब्ध है. इस हैंडल से, वेब ऐप्लिकेशन कैप्चर करके साथ मिलकर काम करने में मदद मिलती है. कैप्चर हैंडल की मदद से, कैप्चर करने वाले वेब ऐप्लिकेशन को आसानी से और भरोसेमंद तरीके से कैप्चर किए गए वेब ऐप्लिकेशन की पहचान करने में मदद मिलती है. ऐसा तब होता है, जब कैप्चर किए गए वेब ऐप्लिकेशन ने ऑप्ट-इन किया हो.

इसके फ़ायदों के बारे में कुछ उदाहरणों से बताया गया है.

पहला उदाहरण: अगर कोई वीडियो कॉन्फ़्रेंसिंग वेब ऐप्लिकेशन, किसी प्रज़ेंटेशन वेब ऐप्लिकेशन को कैप्चर कर रहा है, तो वीडियो कॉन्फ़्रेंसिंग वेब ऐप्लिकेशन, उपयोगकर्ता को स्लाइड के बीच नेविगेट करने के लिए कंट्रोल दिखा सकता है. कंट्रोल सीधे वीडियो कॉन्फ़्रेंसिंग वेब ऐप्लिकेशन में एम्बेड किए जाते हैं. इसलिए, उपयोगकर्ता को वीडियो कॉन्फ़्रेंसिंग टैब और प्रज़ेंटेशन टैब के बीच बार-बार स्विच करने की ज़रूरत नहीं पड़ती. इस बोझ से मुक्त होने के बाद, उपयोगकर्ता अब अपने प्रज़ेंटेशन को बेहतर तरीके से डिलीवर करने पर ध्यान दे सकता है.

दूसरा उदाहरण: "हॉल ऑफ़ मिरर" इफ़ेक्ट तब दिखता है, जब कैप्चर किए गए किसी हिस्से को फिर से कैप्चर की जा रही जगह पर रेंडर किया जाता है. खास तौर पर, अगर उपयोगकर्ता उस टैब को कैप्चर करता है जिसमें वीडियो कॉन्फ़्रेंसिंग कॉल चल रहा है और वीडियो कॉन्फ़्रेंसिंग वेब ऐप्लिकेशन, लोकल झलक दिखाता है, तो यह खतरनाक असर दिखेगा. कैप्चर हैंडल का इस्तेमाल करके, अपने-आप कैप्चर होने की सुविधा का पता लगाया जा सकता है और उसे कम किया जा सकता है. उदाहरण के लिए, वेब ऐप्लिकेशन में लोकल प्रीव्यू को दबाकर.

हॉल ऑफ़ मिरर इफ़ेक्ट का इलस्ट्रेशन

कैप्चर हैंडल के बारे में जानकारी

कैप्चर हैंडल में दो हिस्से होते हैं:

  • कैप्चर किए गए वेब ऐप्लिकेशन, navigator.mediaDevices.setCaptureHandleConfig() की मदद से कुछ ऑरिजिन को कुछ जानकारी दिखाने के लिए ऑप्ट-इन कर सकते हैं.
  • इसके बाद, वेब ऐप्लिकेशन कैप्चर करने वाले टूल, MediaStreamTrack ऑब्जेक्ट पर getCaptureHandle() की मदद से उस जानकारी को पढ़ सकते हैं.

कैप्चर किया गया साइड

वेब ऐप्लिकेशन, कैप्चर किए जाने वाले वेब ऐप्लिकेशन को जानकारी दे सकते हैं. ऐसा करने के लिए, यह navigator.mediaDevices.setCaptureHandleConfig() को कॉल करता है. इस ऑब्जेक्ट में ये सदस्य शामिल होते हैं:

  • handle: इसमें 1024 वर्णों तक की कोई भी स्ट्रिंग हो सकती है..
  • exposeOrigin: अगर true है, तो कैप्चर किए गए वेब ऐप्लिकेशन का ऑरिजिन, वेब ऐप्लिकेशन कैप्चर करने वाले लोगों को दिख सकता है.
  • permittedOrigins: मान्य वैल्यू ये हैं: (i) खाली कलेक्शन, (ii) एक आइटम "*" वाला कलेक्शन या (iii) ऑरिजिन का कलेक्शन. अगर permittedOrigins में सिर्फ़ एक आइटम "*" है, तो CaptureHandle को कैप्चर करने वाले सभी वेब ऐप्लिकेशन देख सकते हैं. अगर ऐसा नहीं है, तो यह सिर्फ़ उन वेब ऐप्लिकेशन को कैप्चर करने के लिए देखा जा सकता है जिनका ऑरिजिन permittedOrigins में है.

यहां दिए गए उदाहरण में, किसी भी कैप्चरिंग वेब ऐप्लिकेशन के लिए, यूनीक आइडेंटिफ़ायर (यूयूआईडी) को हैंडल और ऑरिजिन के तौर पर एक्सपोज़ करने का तरीका बताया गया है.

const config = {
  handle: crypto.randomUUID(),
  exposeOrigin: true,
  permittedOrigins: ['*'],
};
navigator.mediaDevices.setCaptureHandleConfig(config);

ध्यान दें कि कैप्चर किए गए वेब ऐप्लिकेशन को यह पता नहीं चलता कि उसे कैप्चर किया जा रहा है. उदाहरण के लिए, जब तक कैप्चर करने वाला वेब ऐप्लिकेशन, कैप्चर किए गए वेब ऐप्लिकेशन से कम्यूनिकेशन करने के लिए, CaptureHandle की जानकारी का इस्तेमाल नहीं करता है, तब तक वह इस जानकारी का इस्तेमाल नहीं करता है. जैसे, कर्मचारी से मैसेज सेवा का इस्तेमाल करना या शेयर किए गए क्लाउड इन्फ़्रास्ट्रक्चर का इस्तेमाल करना.

कैप्चर करने वाली साइड

कैप्चर करने वाला वेब ऐप्लिकेशन, एक वीडियो MediaStreamTrack रखता है. साथ ही, उस MediaStreamTrack पर getCaptureHandle() को कॉल करके, कैप्चर हैंडल की जानकारी पढ़ सकता है. अगर कोई कैप्चर हैंडल उपलब्ध नहीं है या कैप्चर करने वाले वेब ऐप्लिकेशन को इसे पढ़ने की अनुमति नहीं है, तो यह कॉल null दिखाता है. अगर कैप्चर हैंडल उपलब्ध है और कैप्चर करने वाला वेब ऐप्लिकेशन permittedOrigins में जोड़ा गया है, तो यह कॉल इन सदस्यों के साथ एक ऑब्जेक्ट दिखाता है:

  • handle: navigator.mediaDevices.setCaptureHandleConfig() के साथ कैप्चर किए गए वेब ऐप्लिकेशन से सेट की गई स्ट्रिंग वैल्यू.
  • origin: अगर exposeOrigin को true पर सेट किया गया था, तो कैप्चर किए गए वेब ऐप्लिकेशन का ऑरिजिन. नहीं तो, इसकी जानकारी नहीं है.

यहां दिए गए उदाहरण में, किसी वीडियो ट्रैक से कैप्चर हैंडल की जानकारी को पढ़ने का तरीका बताया गया है.

// Prompt the user to capture their display (screen, window, tab).
const stream = await navigator.mediaDevices.getDisplayMedia();

// Check if the video track is exposing information.
const [videoTrack] = stream.getVideoTracks();
const captureHandle = videoTrack.getCaptureHandle();
if (captureHandle) {
  // Use captureHandle.origin and captureHandle.handle...
}

MediaStreamTrack ऑब्जेक्ट पर "capturehandlechange" इवेंट को सुनकर, CaptureHandle में होने वाले बदलावों को मॉनिटर करें. बदलाव तब होते हैं, जब:

  • कैप्चर किया गया वेब ऐप्लिकेशन, navigator.mediaDevices.setCaptureHandleConfig() को कॉल करता है.
  • कैप्चर किए गए वेब ऐप्लिकेशन में, क्रॉस-दस्तावेज़ नेविगेशन होता है.
videoTrack.addEventListener('capturehandlechange', event => {
  captureHandle = event.target.getCaptureHandle();
  // Consume new capture handle...
});

सुरक्षा और निजता

कैप्चर किए गए वेब ऐप्लिकेशन और कैप्चर करने वाले वेब ऐप्लिकेशन के बीच, सैद्धांतिक तौर पर सहयोग किया जा सकता है. उदाहरण के लिए, कैप्चर किए गए वेब ऐप्लिकेशन में "मैजिक पिक्सल" एम्बेड करके या वीडियो स्ट्रीम में क्यूआर कोड एम्बेड करके ऐसा किया जा सकता है. कैप्चर हैंडल, आसान, भरोसेमंद, और ज़्यादा सुरक्षित तरीका उपलब्ध कराता है. इससे कैप्चर किए गए वेब ऐप्लिकेशन को ऑडियंस चुनने की सुविधा भी मिलती है. ऑडियंस के तौर पर, ऑरिजिन या पूरा वेब चुना जा सकता है.

ध्यान दें कि navigator.mediaDevices.setCaptureHandleConfig() सिर्फ़ सुरक्षित ब्राउज़िंग कॉन्टेक्स्ट (सिर्फ़ एचटीटीपीएस) में, टॉप-लेवल के मुख्य फ़्रेम के लिए उपलब्ध है.

नमूना

Glitch पर सैंपल चलाकर, कैप्चर हैंडल के साथ एक्सपेरिमेंट किया जा सकता है. सोर्स कोड देखना न भूलें.

डेमो

कुछ डेमो यहां उपलब्ध हैं:

सुविधा की पहचान

यह देखने के लिए कि getCaptureHandle() काम करता है या नहीं, इनका इस्तेमाल करें:

if ('getCaptureHandle' in MediaStreamTrack.prototype) {
  // getCaptureHandle() is supported.
}

यह देखने के लिए कि navigator.mediaDevices.setCaptureHandleConfig() काम करता है या नहीं, इनका इस्तेमाल करें:

if ('setCaptureHandleConfig' in navigator.mediaDevices) {
  // navigator.mediaDevices.setCaptureHandleConfig() is supported.
}

आगे क्या करना है

यहां आपको यह जानकारी दी गई है कि आने वाले समय में वेब पर स्क्रीन शेयर करने की सुविधा को बेहतर बनाने के लिए, हम क्या-क्या करने जा रहे हैं:

  • क्षेत्र की जानकारी कैप्चर करने की सुविधा का इस्तेमाल करके, मौजूदा टैब के डिसप्ले-कैप्चर के ज़रिए वीडियो ट्रैक को क्रॉप किया जा सकेगा.
  • शर्त के हिसाब से फ़ोकस की सुविधा से, कैप्चर करने वाले वेब ऐप्लिकेशन को ब्राउज़र को निर्देश देने की सुविधा मिलती है. इससे, ब्राउज़र को कैप्चर किए गए डिसप्ले-सर्फ़ेस पर फ़ोकस करने या फ़ोकस में बदलाव न करने का निर्देश दिया जा सकता है.

सुझाव/राय दें या शिकायत करें

Chrome की टीम और वेब स्टैंडर्ड कम्यूनिटी, कैप्चर हैंडल के साथ आपके अनुभवों के बारे में जानना चाहती है.

हमें डिज़ाइन के बारे में बताएं

क्या कैप्चर हैंडल के बारे में कुछ ऐसा है जो आपकी उम्मीद के मुताबिक काम नहीं करता? क्या आपके आइडिया को लागू करने के लिए, कोई तरीका या प्रॉपर्टी मौजूद नहीं है? क्या आपको सुरक्षा मॉडल के बारे में कोई सवाल पूछना है या कोई टिप्पणी करनी है?

  • GitHub repo पर, खास जानकारी से जुड़ी समस्या दर्ज करें या किसी मौजूदा समस्या में अपने सुझाव जोड़ें.

क्या लागू करने में समस्या आ रही है?

क्या आपको Chrome को लागू करने में कोई गड़बड़ी मिली? या क्या इसे लागू करने का तरीका, खास जानकारी से अलग है?

  • https://new.crbug.com पर जाकर, गड़बड़ी की शिकायत करें. ज़्यादा से ज़्यादा जानकारी दें और इसे दोबारा बनाने के आसान निर्देश दें. Glitch, जल्दी और आसान रेप्रोस शेयर करने के लिए शानदार काम करता है.

क्रिएटर के लिए अपना सपोर्ट दिखाना

क्या आपको कैप्चर हैंडल का इस्तेमाल करना है? सार्वजनिक तौर पर सहायता करने से, Chrome की टीम को सुविधाओं को प्राथमिकता देने में मदद मिलती है. साथ ही, इससे अन्य ब्राउज़र वेंडर को यह पता चलता है कि इन सुविधाओं को उपलब्ध कराना कितना ज़रूरी है.

@ChromiumDev को ट्वीट करें और हमें बताएं कि इसका इस्तेमाल कहां और कैसे किया जा रहा है.

धन्यवाद

इस लेख की समीक्षा करने के लिए, Joe Medley का धन्यवाद.