MediaStream का बंद होना

अगर getUserMedia() या WebRTC के साथ काम किया जाता है, तो आपको Chrome 45 और इसके बाद के वर्शन के लिए अपने कोड में बदलाव करना पड़ सकता है.

MediaStream API, मीडिया की सिंक की गई स्ट्रीम को दिखाता है. उदाहरण के लिए, कैमरे और माइक्रोफ़ोन इनपुट से ली गई स्ट्रीम में, वीडियो और ऑडियो ट्रैक सिंक किए हुए होते हैं. हर ट्रैक को MediaStreamTrack की मदद से दिखाया जाता है. (<track> एलिमेंट को समझने की भूल न करें!)

Chrome 45 में, MediaStream के इस्तेमाल को तीन तरीकों से बंद किया जाता है:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

साथ-साथ दो जोड़ हैं:

  • MediaStream.active
  • MediaStreamTrack.stop()

इनके लिए, नीचे दिए गए बदलावों की ज़रूरत होती है:

  • MediaStream.active का इस्तेमाल करके पता लगाएं कि MediaStream, स्ट्रीमिंग कर रहा है या नहीं, MediaStream.ended का नहीं.
  • स्ट्रीमिंग रोकने के लिए MediaStreamTrack.stop() का इस्तेमाल करें, न कि MediaStream.stop() का.
  • अगर आपको MediaStream के लिए यूनीक आइडेंटिफ़ायर चाहिए, तो MediaStream.label के बजाय MediaStream.id का इस्तेमाल करें. MediaStreamTrack.label किसी स्ट्रीम के सोर्स डिवाइस का नाम ऐसा होता है जिसे कोई भी व्यक्ति आसानी से पढ़ सके. उदाहरण के लिए, FaceTime HD कैमरा (बिल्ट-इन) (05ac:8510).

इन्हें काम करते हुए देखा जा सकता है: Chrome में simpl.info/gum खोलें (कैमरे वाले डिवाइस पर) और Chrome DevTools कंसोल देखें. इस डेमो में, getUserMedia() कॉलबैक को पास किया गया MediaStream ऑब्जेक्ट stream ग्लोबल स्कोप में है. इसलिए, कंसोल से इसकी जांच की जा सकती है. इस स्ट्रीम का MediaStreamTrack देखने के लिए, stream.getTracks()[0] पर कॉल करें.

Chrome DevTools कंसोल में MediaStream और MediaStreamTrack का स्क्रीनशॉट

बंद करें(), खत्म हो गया है और चालू है

जब मीडिया कैप्चर और स्ट्रीम W3C वर्किंग ग्रुप ने पता लगाया कि MediaStream में नए ट्रैक जोड़ने से क्या होता है और खाली MediaStream खत्म हो जाता है या नहीं, तो उन्हें पता चला कि MediaStream पर ended लागू करने का कोई सही तरीका नहीं है (जैसा कि 'फिर से शुरू नहीं होगा'). HTML5 के दूसरे हिस्सों में 'खत्म' का मतलब है कि 'यह खत्म हो गया है और फिर से कभी नहीं होगा'. 'चालू है' पर ऐसा कोई असर नहीं पड़ता है: अगर बंद स्ट्रीम में कोई नया ट्रैक जोड़ा जाता है, तो ऐसी कई स्ट्रीम फिर से चालू हो सकती हैं. भ्रमित करने वाले एट्रिब्यूट और फ़ंक्शन को बनाए रखने के बजाय, वर्किंग ग्रुप ने इसे हटाने का फ़ैसला किया.

किसी स्ट्रीम की स्थिति जांचने के लिए 'MediaStream.active' का इस्तेमाल करने के तरीके का उदाहरण यहां दिया गया है:

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

stop() को MediaStream से हटाने पर कोई सुविधा नहीं हटी: सोर्स डिवाइसों को अलग करने की प्रोसेस, MediaStreamTrack पर भी पूरी होनी चाहिए. इसके बजाय, MediaStreamTrack पर stop() का इस्तेमाल करें:

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

लेबल

अब यह पता चला है कि कोई भी इस प्रॉपर्टी को इस्तेमाल करने का तरीका ठीक से नहीं समझ पाया!

MediaStream.label को स्पेसिफ़िकेशन के पहले वर्शन में जोड़ा गया था, लेकिन किसी को नहीं पता था कि label क्या काम करता है. यह भी पता नहीं चल पाया कि RTCPeerConnection से स्ट्रीम भेजे जाने पर, label का क्या हुआ.

W3C वर्किंग ग्रुप ने इस बारे में पूछा, किसी को भी इसकी ज़रूरत नहीं थी, इसलिए उन्होंने इसे हटा दिया.

यह दोहराने के लिए: MediaStream.id, MediaStream के लिए एक यूनीक आइडेंटिफ़ायर देता है. वहीं, MediaStreamTrack.label स्ट्रीम के सोर्स का नाम बताता है, जैसे कि कैमरे या माइक्रोफ़ोन का टाइप.

Mozilla Developer Network पर MediaStream और MediaStreamTrack के बारे में ज़्यादा जानकारी दी गई है. साथ ही, HTML5 Rocks, ऑडियो और वीडियो कैप्चर करने में getUserMedia() के बारे में बेहतरीन जानकारी देता है.

हमेशा की तरह, हम Chrome में किए गए बदलावों के बारे में आपके सुझाव की सराहना करते हैं. इन गड़बड़ियों से जुड़ी गड़बड़ियां देखने के लिए (यहां और यहां) क्लिक करें. साथ ही, लागू करने के इंटेंट में जाकर, ज़्यादा जानकारी और चर्चा पाएं.