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