Chrome ने दो साल पहले VP9 कोडेक के लिए सहायता चालू की थी. डेस्कटॉप और Android पर Chrome 48 से, WebRTC का इस्तेमाल करके वीडियो कॉल करने के लिए, VP9 एक वैकल्पिक वीडियो कोडेक होगा.
VP9, पिछले कोडेक के जैसे ही बुनियादी ब्लूप्रिंट का इस्तेमाल करता है. हालांकि, WebM टीम ने VP9 में सुधार किए हैं, ताकि वीडियो के हर बाइट से ज़्यादा क्वालिटी मिल सके. उदाहरण के लिए, एन्कोडर सबसे शार्प इमेज की सुविधाओं को प्राथमिकता देता है. साथ ही, कोडेक अब असिमेट्रिक ट्रांसफ़ॉर्म का इस्तेमाल करता है, ताकि सबसे मुश्किल सीन भी साफ़ और ब्लॉक-फ़्री दिखें.
VP9 के साथ, ऐसे इंटरनेट कनेक्शन जो फ़िलहाल पैकेट लॉस या देरी के बिना 720 पिक्सल की सुविधा दे सकते हैं वे उसी बैंडविड्थ पर 1080 पिक्सल वाले वीडियो कॉल की सुविधा दे पाएंगे. VP9 का इस्तेमाल करने से, खराब इंटरनेट कनेक्शन या महंगे डेटा प्लान का इस्तेमाल करने वाले लोगों के लिए डेटा खर्च भी कम हो सकता है. सबसे अच्छे मामले में, VP8 की तुलना में VP9 के लिए सिर्फ़ 40% बिटरेट की ज़रूरत होती है.
नीचे दिए गए स्क्रीनशॉट में, WebRTC एन्कोडर सेटिंग की मदद से रिकॉर्ड की गई रिकॉर्डिंग की तुलना में, VP8 कॉल की तुलना VP9 से की गई है. इससे पता चलता है कि बिटरेट में 30% की बचत हुई है:
कॉल करने वाले और कॉल पाने वाले व्यक्ति के बीच, बिटरेट जैसी अन्य मीडिया सेटिंग के साथ-साथ WebRTC कॉल के लिए कोडेक के बारे में बातचीत की जाती है. इसके लिए, सेशन डिस्क्रिप्शन प्रोटोकॉल (एसडीपी) मेटाडेटा मैसेज का इस्तेमाल किया जाता है. इन मैसेज से क्लाइंट की मीडिया क्षमताओं के बारे में पता चलता है.
मीडिया की सुविधाओं को शेयर करने की इस प्रोसेस को ऑफ़र/जवाब कहा जाता है. उदाहरण के लिए, कॉल करने वाला व्यक्ति VP9 को प्राथमिकता देते हुए, VP8 को फ़ॉलबैक के तौर पर इस्तेमाल करने का ऑफ़र (एसडीपी मैसेज) भेज सकता है. अगर जवाब से यह पुष्टि होती है कि कॉल पाने वाला व्यक्ति VP9 का इस्तेमाल कर सकता है, तो वीडियो कॉल के लिए VP9 का इस्तेमाल किया जा सकता है. अगर कॉल पाने वाला व्यक्ति यह जवाब देता है कि वह सिर्फ़ VP8 का इस्तेमाल कर सकता है, तो कॉल VP8 पर जारी रहेगा.
इसे काम करते हुए देखने के लिए, कैननिकल WebRTC वीडियो चैट ऐप्लिकेशन appr.tc का कोड देखें.
appcontroller.js में, VP9 को पसंदीदा कोडेक के तौर पर सेट किया जाता है. ऐसा तब तक होता है, जब तक यूआरएल में vsc या vrc पैरामीटर नहीं दिया जाता:
AppController.prototype.loadUrlParams_ = function() {
// ...
var DEFAULT_VIDEO_CODEC = 'VP9';
// …
this.loadingParams_.videoSendCodec = urlParams['vsc'];
// ...
this.loadingParams_.videoRecvCodec = urlParams['vrc'] || DEFAULT_VIDEO_CODEC;
}
इसके बाद, sdputils.js में, कस्टम कोडेक वैल्यू (अगर तय की गई है) का इस्तेमाल एसडीपी मेटाडेटा के लिए किया जाता है:
function maybePreferVideoSendCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'send', params.videoSendCodec);
}
function maybePreferVideoReceiveCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'receive', params.videoRecvCodec);
}
यहां इस्तेमाल किया गया maybePreferCodec() फ़ंक्शन, एसडीपी मेटाडेटा के टेक्स्ट में, अनुरोध किए गए कोडेक के लिए वैल्यू सेट करता है. एसडीपी काफ़ी लंबा होता है और इसे लोगों के लिए पढ़ने लायक नहीं बनाया गया है. हालांकि, कॉल करने के बाद, DevTools कंसोल से appr.tc का इस्तेमाल किया गया एसडीपी देखा जा सकता है. कोडेक के लिए m लाइन अहम है:
{
"sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
"type": "offer"
}
Chrome के नए वर्शन में, appr.tc को डिफ़ॉल्ट सेटिंग के साथ इस्तेमाल करने पर, आपको दिखेगा कि SDP m लाइन में VP9 पहला कोडेक है. इसके बाद, VP8 कोडेक है, जिसका इस्तेमाल Chrome भी कर सकता है. अगर आपने appr.tc में यूआरएल पैरामीटर के ज़रिए, VP8 को पसंदीदा कोडेक के तौर पर सेट किया है, तो VP8 को पहले सूची में शामिल किया जाएगा.
ज़्यादा जानें
- The WebM Project: VP9 रिसॉर्स
- webrtc.org: WebRTC प्रोजेक्ट का होम पेज
- g.co/webrtc: WebRTC के अन्य रिसॉर्स के लिंक
- webrtc.github.io/samples: WebRTC के लाइव सैंपल
- test.webrtc.org: डिवाइस और नेटवर्क की जांच करने वाले ओपन सोर्स टूल और गड़बड़ी की शिकायत करने का फ़्रेमवर्क