WebRTC, Firefox, Android, और iOS पर भी काम करता है

पिछले कुछ हफ़्तों में, WebRTC की मदद से lot में बहुत कुछ हुआ है. अपडेट का समय आ गया है!

विशेष रूप से, हम WebRTC को अनेक ब्राउज़र और प्लैटफ़ॉर्म पर उपलब्ध होते हुए देखने के लिए उत्साहित हैं.

getUserMedia अब Chrome में बिना किसी फ़्लैग के उपलब्ध है. साथ ही, यह Opera और Firefox Nightly/Aurora पर भी उपलब्ध है (हालांकि, Firefox के लिए आपको प्राथमिकताएं सेट करनी होंगी). सिंप्ल.info/gum पर getUserMedia का क्रॉस-ब्राउज़र डेमो देखें और साथ ही वेब ऑडियो के लिए getUserMedia को इनपुट के तौर पर इस्तेमाल करने के अद्भुत उदाहरण देखें.

webkitRTCPeerConnection अब Chrome में है और इस पर फ़्लैग नहीं किया गया है. Chrome 24 और इसके बाद के वर्शन में, TURN सर्वर सहायता उपलब्ध है. यहां simpl.info/pc पर Chrome के RTCPeerConnection को लागू करने का बेहद आसान डेमो और apprtc.appspot.com पर एक शानदार वीडियो चैट ऐप्लिकेशन मौजूद है. (नाम के बारे में कुछ शब्दों में जानकारी देने के लिए, इसे फ़िलहाल webkitRTCPeerConnection के नाम से जाना जाता है. अन्य नामों और लागू करने के तरीकों पर रोक लगा दी गई है. स्टैंडर्ड प्रोसेस के स्थिर होने पर, webkit प्रीफ़िक्स हटा दिया जाएगा.)

WebRTC को डेस्कटॉप के लिए Firefox Nightly और Aurora पर भी लागू किया जा चुका है. साथ ही, इसे iOS और Android के लिए भी एरिकसन Bowser ब्राउज़र के ज़रिए लागू किया जा चुका है.

DataChannel

DataChannel एक WebRTC API है, जो आर्बिट्रेरी डेटा के पीयर-टू-पीयर कम्यूनिकेशन के लिए, बेहतर परफ़ॉर्मेंस, इंतज़ार का समय कम करने, और पीयर-टू-पीयर कम्यूनिकेशन करने के लिए है. यह एपीआई, WebSocket की तरह ही आसान है. हालांकि, ब्राउज़र के बीच सीधे कम्यूनिकेशन हो सकता है. इसलिए, DataChannel WebSocket की तुलना में ज़्यादा तेज़ हो सकता है, भले ही रिले (टर्न) सर्वर की ज़रूरत हो. ऐसा तब होता है, जब फ़ायरवॉल और एनएटी से निपटने के लिए 'होल पंचिंग' काम नहीं करती हो.

DataChannel को Chrome के वर्शन 25 के लिए बनाया गया है, जो एक झंडे के साथ तैयार किया गया है – हालांकि, हो सकता है कि यह इस वर्शन से छूट जाए. यह सिर्फ़ प्रयोग के लिए होगा. ऐसा हो सकता है कि यह पूरी तरह से काम न करे और Firefox के इस्तेमाल से बातचीत संभव न हो. बाद के वर्शन में DataChannel पहले से ज़्यादा स्टेबल होगा और उसे लागू किया जाएगा, ताकि Firefox में DataChannel के साथ इंटरैक्शन चालू हो सके.

Firefox Nightly/Aurora mozGetUserMedia, mozRTCPeerConnection और DataChannel का समर्थन करता है (लेकिन अपनी about:config प्राथमिकताएं सेट करना न भूलें!)

यहां Firefox में चल रहे DataChannel का स्क्रीनशॉट दिया गया है:

Firefox DataChannel का स्क्रीनशॉट

यह डेमो http://mozilla.github.com/webrtc-landing/data_test.html पर उपलब्ध है. यहां कोड स्निपेट दिया गया है:

pc1.onconnection = function() {
    log("pc1 onConnection ");
    dc1 = pc1.createDataChannel("This is pc1",{}); // reliable (TCP-like)
    dc1 = pc1.createDataChannel("This is pc1",{outOfOrderAllowed: true, maxRetransmitNum: 0}); // unreliable (UDP-like)
    log("pc1 created channel " + dc1 + " binarytype = " + dc1.binaryType);
    channel = dc1;
    channel.binaryType = "blob";
    log("pc1 new binarytype = " + dc1.binaryType);

    // Since we create the datachannel, don't wait for onDataChannel!
    channel.onmessage = function(evt) {
    if (evt.data instanceof Blob) {
        fancy_log("*** pc2 sent Blob: " + evt.data + ", length=" + evt.data.size,"blue");
    } else {
        fancy_log('pc2 said: ' + evt.data, "blue");
    }
    }
    channel.onopen = function() {
    log("pc1 onopen fired for " + channel);
    channel.send("pc1 says Hello...");
    log("pc1 state: " + channel.state);
    }
    channel.onclose = function() {
    log("pc1 onclose fired");
    };
    log("pc1 state:" + channel.readyState);
        }

Firefox को लागू करने के बारे में ज़्यादा जानकारी और डेमो, hacks.desktop.org ब्लॉग पर जाकर उपलब्ध हैं. WebRTC की बुनियादी सुविधाओं को 2013 की शुरुआत में Firefox 18 में रिलीज़ किया जाएगा. इसके अलावा, अन्य सुविधाओं के लिए भी आने वाले सहायता की योजना बनाई गई है, जैसे कि getUserMedia और createOffer/Answer से जुड़ी पाबंदियों के साथ-साथ 'चालू करें' (ऐसा करने के लिए जो फ़ायरवॉल से सुरक्षित ब्राउज़र के बीच कम्यूनिकेशन की अनुमति दी जाती है).

WebRTC के बारे में ज़्यादा जानकारी के लिए, WebRTC का इस्तेमाल शुरू करना देखें. यहां एक WebRTC किताब भी है, जो प्रिंट और कई ई-बुक फ़ॉर्मैट में उपलब्ध है.

समाधान से जुड़ी पाबंदियां

Chrome 24 और उसके बाद के वर्शन में, पाबंदियां लागू की गई हैं. इनका इस्तेमाल getUserMedia() और RTCPeerConnection addStream() कॉल के लिए, वीडियो रिज़ॉल्यूशन की वैल्यू सेट करने के लिए किया जा सकता है.

SIMpl.info/getusermedia/constraints पर एक उदाहरण यहां दिया गया है. ब्रेकपॉइंट सेट करके और वैल्यू में बदलाव करके, अलग-अलग कंस्ट्रेंट के साथ काम करें.

कुछ समझ आ गए हैं... एक ब्राउज़र टैब में सेट की गई getUserMedia पाबंदियां, बाद में खोले जाने वाले सभी टैब की पाबंदियों पर असर डालती हैं. कंस्ट्रेंट के लिए अस्वीकार की गई वैल्यू सेट करने से, गड़बड़ी का एक गुप्त मैसेज मिलता है:

navigator.getUserMedia error:  NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}

इसी तरह, अगर सर्वर पर नहीं, बल्कि लोकल फ़ाइल सिस्टम से getUserMedia का इस्तेमाल करने की कोशिश की जाती है, तो यह गड़बड़ी दिखती है!

स्ट्रीमिंग स्क्रीन कैप्चर

टैब कैप्चर करने की सुविधा अब Chrome Dev चैनल में उपलब्ध है. इसकी मदद से, टैब की दिखने वाली जगह को स्ट्रीम के तौर पर कैप्चर किया जा सकता है. इसके बाद, इसे स्थानीय तौर पर या RTCPeerConnection के addStream() के साथ इस्तेमाल किया जा सकता है. सीन कास्ट करने और वेब पेज शेयर करने के लिए बहुत काम की है. ज़्यादा जानकारी के लिए, WebRTC टैब कॉन्टेंट को कैप्चर करने का प्रस्ताव देखें.

इस अपडेट पर टिप्पणी करके हमें पोस्ट करते रहें: हम जानना चाहते हैं कि आप इन API के साथ क्या कर रहे हैं.

...और अगर आपको किसी गड़बड़ी का सामना करना पड़ता है, तो chromiumbugs.appspot.com पर शिकायत करें!