मीडिया कैप्चर और कंस्ट्रेंट

WebRTC के मीडिया सेक्शन में, वीडियो और ऑडियो कैप्चर करने वाले हार्डवेयर को ऐक्सेस करने का तरीका बताया गया है. जैसे, कैमरा और माइक्रोफ़ोन. साथ ही, इसमें मीडिया स्ट्रीम के काम करने के तरीके के बारे में भी बताया गया है. इसमें डिसप्ले मीडिया भी शामिल है. इसकी मदद से कोई ऐप्लिकेशन स्क्रीन कैप्चर कर सकता है.

मीडिया डिवाइस

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

कंस्ट्रेंट

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

खास शर्तें, MediaTrackConstraint ऑब्जेक्ट में तय की जाती हैं. ऑडियो के लिए एक और वीडियो के लिए एक. इस ऑब्जेक्ट में मौजूद एट्रिब्यूट, ConstraintLong, ConstraintBoolean, ConstraintDouble या ConstraintDOMString टाइप के होते हैं. ये कोई खास वैल्यू (जैसे, कोई संख्या, बूलियन या स्ट्रिंग), कोई रेंज (LongRange या DoubleRange, जिसमें कम से कम और ज़्यादा से ज़्यादा वैल्यू हो) या कोई ऐसा ऑब्जेक्ट हो सकता है जिसमें ideal या exact की डेफ़िनिशन हो. किसी खास वैल्यू के लिए, ब्राउज़र सबसे मिलती-जुलती वैल्यू चुनने की कोशिश करेगा. किसी रेंज के लिए, उस रेंज में मौजूद सबसे अच्छी वैल्यू का इस्तेमाल किया जाएगा. exact तय किए जाने पर, सिर्फ़ वे मीडिया स्ट्रीम दिखाई जाएंगी जो उस शर्त से पूरी तरह मेल खाती हैं.

पास में

// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

सीमा

// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

निश्चित

// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

किसी मीडिया स्ट्रीम के किसी ट्रैक का मौजूदा कॉन्फ़िगरेशन पता करने के लिए, हम MediaStreamTrack.getSettings() को कॉल कर सकते हैं. इससे MediaTrackSettings मिलता है.

हमने जिस मीडिया डिवाइस को खोला है उससे ट्रैक की सीमाओं को भी अपडेट किया जा सकता है. इसके लिए, ट्रैक पर applyConstraints() को कॉल करें. इस सुविधा की मदद से, कोई ऐप्लिकेशन मौजूदा स्ट्रीम को बंद किए बिना, मीडिया डिवाइस को फिर से कॉन्फ़िगर कर सकता है.

मीडिया दिखाएं

स्क्रीन कैप्चर और रिकॉर्ड करने की सुविधा देने वाले ऐप्लिकेशन को, Display Media API का इस्तेमाल करना होगा. getDisplayMedia() फ़ंक्शन, navigator.mediaDevices का हिस्सा है. यह getUserMedia() फ़ंक्शन की तरह ही काम करता है. इसका इस्तेमाल, डिसप्ले के कॉन्टेंट (या उसके किसी हिस्से, जैसे कि विंडो) को खोलने के लिए किया जाता है. MediaStream की वैल्यू, getUserMedia() का इस्तेमाल करने पर मिलने वाली वैल्यू की तरह ही होती है.

getDisplayMedia() के लिए इस्तेमाल की जाने वाली शर्तें, सामान्य वीडियो या ऑडियो इनपुट के लिए इस्तेमाल की जाने वाली शर्तों से अलग होती हैं.

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

ऊपर दिए गए कोड स्निपेट में बताया गया है कि स्क्रीन रिकॉर्डिंग से जुड़ी खास शर्तें कैसे काम करती हैं. ध्यान दें कि हो सकता है कि ये सभी ब्राउज़र पर काम न करें.

स्ट्रीम और ट्रैक

MediaStream, मीडिया कॉन्टेंट की स्ट्रीम को दिखाता है. इसमें ऑडियो और वीडियो के ट्रैक (MediaStreamTrack) शामिल होते हैं. MediaStream.getTracks() को कॉल करके, MediaStream से सभी ट्रैक वापस पाए जा सकते हैं. यह फ़ंक्शन, MediaStreamTrack ऑब्जेक्ट का एक कलेक्शन दिखाता है.

MediaStreamTrack

MediaStreamTrack में kind प्रॉपर्टी होती है, जिसकी वैल्यू audio या video होती है. इससे पता चलता है कि यह किस तरह का मीडिया है. हर ट्रैक को म्यूट करने के लिए, उसकी enabled प्रॉपर्टी को टॉगल किया जा सकता है. ट्रैक में एक बूलियन प्रॉपर्टी remote होती है. इससे पता चलता है कि ट्रैक को RTCPeerConnection से सोर्स किया गया है और यह रिमोट पीयर से आ रहा है.