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

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

डिसप्ले मीडिया

एक ऐप्लिकेशन जो स्क्रीन कैप्चर और रिकॉर्डिंग करने में सक्षम होना चाहता है उसे प्रदर्शन मीडिया 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 में एक kind प्रॉपर्टी होती है, जो audio या video होती है. इससे पता चलता है कि यह किस तरह का मीडिया है. हर ट्रैक को enabled की प्रॉपर्टी पर टॉगल करके, म्यूट किया जा सकता है. किसी ट्रैक में बूलियन प्रॉपर्टी remote है, जो बताती है कि इसका स्रोत RTCPeerConnection है और यह किसी रिमोट सहयोगी से आ रही है.