अगर 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]
को कॉल करें.
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 में किए गए बदलावों के बारे में आपके सुझाव, शिकायत या राय का हमेशा स्वागत है. इन सुविधाओं को हटाने से जुड़ी गड़बड़ियों के बारे में यहां और यहां जानकारी देखी जा सकती है. साथ ही, लागू करने का मकसद में ज़्यादा चर्चा और जानकारी देखी जा सकती है.