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.
  • स्ट्रीमिंग बंद करने के लिए, MediaStream.stop() के बजाय MediaStreamTrack.stop() का इस्तेमाल करें.
  • अगर आपको MediaStream के लिए यूनीक आइडेंटिफ़ायर की ज़रूरत है, तो MediaStream.label के बजाय MediaStream.id का इस्तेमाल करें. MediaStreamTrack.label, स्ट्रीम के सोर्स डिवाइस के लिए ऐसा नाम दिखाता है जिसे कोई भी आसानी से पढ़ सकता है. जैसे, FaceTime HD Camera (Built-in) (05ac:8510).

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

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

Stop(), खत्म हो गया, और चालू है

मीडिया कैप्चर और स्ट्रीम 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, स्ट्रीम के सोर्स का नाम उपलब्ध कराता है. जैसे, कैमरा या माइक्रोफ़ोन का टाइप.

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

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