एन्क्रिप्ट (सुरक्षित) किए गए मीडिया एक्सटेंशन, एक ऐसा एपीआई उपलब्ध कराता है जिसकी मदद से वेब ऐप्लिकेशन, कॉन्टेंट की सुरक्षा करने वाले सिस्टम के साथ इंटरैक्ट कर सकते हैं. इससे, एन्क्रिप्ट किए गए ऑडियो और वीडियो को चलाने की अनुमति मिलती है.
ईएमई को इस तरह से डिज़ाइन किया गया है कि एक ही ऐप्लिकेशन और एन्क्रिप्ट (सुरक्षित) की गई फ़ाइलों का इस्तेमाल, किसी भी ब्राउज़र में किया जा सके. भले ही, सुरक्षा के लिए इस्तेमाल किया जा रहा सिस्टम कोई भी हो. पहला तरीका, स्टैंडर्ड एपीआई और फ़्लो की मदद से किया जाता है, जबकि दूसरा तरीका कॉमन एन्क्रिप्शन के सिद्धांत के आधार पर किया जाता है.
EME, HTMLMediaElement का एक एक्सटेंशन है — इसलिए इसका नाम भी दिया गया है. 'एक्सटेंशन' होने का मतलब है कि ब्राउज़र में EME की सुविधा होना ज़रूरी नहीं है: अगर कोई ब्राउज़र एन्क्रिप्ट (सुरक्षित) किए गए मीडिया के साथ काम नहीं करता है, तो वह एन्क्रिप्ट किए गए मीडिया को नहीं चला पाएगा. हालांकि, एचटीएमएल स्पेसिफ़िकेशन का पालन करने के लिए, EME की ज़रूरत नहीं है. ईएमई स्पेसिफ़िकेशन के मुताबिक:
इस प्रस्ताव में, कॉपीराइट वाले कॉन्टेंट को कंट्रोल करने के लिए, HTMLMediaElement के एपीआई उपलब्ध कराए गए हैं.
एपीआई, अलग-अलग तरह के इस्तेमाल के उदाहरणों के साथ काम करता है. जैसे, साफ़ कुंजी को डिक्रिप्ट करना और अच्छी क्वालिटी का वीडियो (उपयोगकर्ता एजेंट को सही तरीके से लागू करने पर). लाइसेंस/की एक्सचेंज को ऐप्लिकेशन से कंट्रोल किया जाता है. इससे कॉन्टेंट के डिक्रिप्शन और सुरक्षा से जुड़ी टेक्नोलॉजी की रेंज को सपोर्ट करने वाले वीडियो चलाने के लिए, बेहतरीन ऐप्लिकेशन बनाने में मदद मिलती है.
इस स्पेसिफ़िकेशन में, कॉन्टेंट की सुरक्षा या डिजिटल राइट मैनेजमेंट सिस्टम के बारे में नहीं बताया गया है. इसके बजाय, यह एक सामान्य एपीआई तय करता है. इसका इस्तेमाल, ऐसे सिस्टम के साथ-साथ कॉन्टेंट को एन्क्रिप्ट करने वाले आसान सिस्टम को खोजने, चुनने, और उनसे इंटरैक्ट करने के लिए किया जा सकता है. इस स्पेसिफ़िकेशन का पालन करने के लिए, डिजिटल राइट मैनेजमेंट (डीआरएम) को लागू करना ज़रूरी नहीं है: सिर्फ़ क्लियर बटन सिस्टम को सामान्य आधार के तौर पर लागू करना ज़रूरी है.
सामान्य API, कॉन्टेंट को एन्क्रिप्ट करने की सुविधाओं के एक आसान सेट के साथ काम करता है. साथ ही, यह पेज के लेखकों को पुष्टि करने और अनुमति देने जैसे ऐप्लिकेशन फ़ंक्शन देता है. ऐसा करने के लिए, कॉन्टेंट की सुरक्षा के सिस्टम के हिसाब से मैसेज को पेज के ज़रिए भेजा जाता है. ऐसा इसलिए किया जाता है, ताकि एन्क्रिप्शन सिस्टम और लाइसेंस या किसी दूसरे सर्वर के बीच, अलग से कम्यूनिकेशन न हो.
EME लागू करने के लिए, इन बाहरी कॉम्पोनेंट का इस्तेमाल किया जाता है:
- की सिस्टम: कॉन्टेंट की सुरक्षा (डीएमआर) का तरीका. ईएमई, 'मिटाएं' बटन के अलावा किसी अन्य कुंजी सिस्टम को खुद तय नहीं करता. इस बारे में ज़्यादा जानकारी यहां दी गई है.
- कॉन्टेंट डिक्रिप्ट (एन्क्रिप्ट किए गए कॉन्टेंट को डिक्रिप्ट) करने वाला मॉड्यूल (सीडीएम): यह क्लाइंट-साइड सॉफ़्टवेयर या हार्डवेयर मकैनिज्म है, जो एन्क्रिप्ट किए गए मीडिया को चलाने की सुविधा देता है. मुख्य सिस्टम की तरह, EME किसी भी सीडीएम की जानकारी नहीं देता. हालांकि, यह ऐप्लिकेशन के लिए एक इंटरफ़ेस उपलब्ध कराता है, ताकि वे उपलब्ध सीडीएम के साथ इंटरैक्ट कर सकें.
- लाइसेंस (कुंजी) सर्वर: यह मीडिया को डिक्रिप्ट करने के लिए कुंजियां उपलब्ध कराने के लिए, सीडीएम के साथ इंटरैक्ट करता है. लाइसेंस सर्वर के साथ बातचीत करने की ज़िम्मेदारी, ऐप्लिकेशन की होती है.
- पैकेजिंग सेवा: डिलीवरी/इस्तेमाल के लिए मीडिया को कोड में बदल देती है और एन्क्रिप्ट (सुरक्षित) करती है.
ध्यान दें कि EME का इस्तेमाल करने वाला ऐप्लिकेशन, डिक्रिप्शन को चालू करने के लिए कुंजियां पाने के लिए, लाइसेंस सर्वर से इंटरैक्ट करता है. हालांकि, उपयोगकर्ता की पहचान और पुष्टि करने की प्रक्रिया, EME का हिस्सा नहीं होती है. मीडिया प्लेबैक चालू करने के लिए, उपयोगकर्ता की पुष्टि करने के बाद (ज़रूरी नहीं) बटन वापस पाए जाते हैं. Netflix जैसी सेवाओं को अपने वेब ऐप्लिकेशन में उपयोगकर्ताओं की पुष्टि करनी होगी: जब कोई उपयोगकर्ता ऐप्लिकेशन में साइन इन करता है, तो ऐप्लिकेशन उपयोगकर्ता की पहचान और विशेषाधिकारों का पता लगाता है.
ईएमई कैसे काम करता है?
यहां बताया गया है कि नीचे दिए गए कोड के उदाहरण के हिसाब से, EME के कॉम्पोनेंट कैसे इंटरैक्ट करते हैं:
अगर एक से ज़्यादा फ़ॉर्मैट या कोडेक उपलब्ध हैं, तो सही फ़ॉर्मैट चुनने के लिए, MediaSource.isTypeSupported() या HTMLMediaElement.canPlayType(), दोनों का इस्तेमाल किया जा सकता है. हालांकि, हो सकता है कि सीडीएम, एन्क्रिप्ट (सुरक्षित) नहीं किए गए कॉन्टेंट के लिए, ब्राउज़र के काम करने वाले सबसेट के साथ ही काम करे. फ़ॉर्मैट और कोडेक चुनने से पहले, MediaKeys कॉन्फ़िगरेशन के लिए बातचीत करना सबसे अच्छा होता है. अगर ऐप्लिकेशन, एन्क्रिप्ट किए गए इवेंट का इंतज़ार करता है, लेकिन MediaKeys से पता चलता है कि वह चुने गए फ़ॉर्मैट/कोडेक को हैंडल नहीं कर सकता, तो हो सकता है कि वीडियो चलाने में रुकावट आए बिना, फ़ॉर्मैट या कोडेक को स्विच करने का समय बीत चुका हो.
हमारा सुझाव है कि पहले MediaKeys के लिए बातचीत करें. इसके बाद, MediaKeysSystemAccess.getConfiguration() का इस्तेमाल करके, बातचीत के दौरान तय किए गए कॉन्फ़िगरेशन का पता लगाएं.
अगर चुनने के लिए सिर्फ़ एक फ़ॉर्मैट/कोडेक है, तो फिर getConfiguration() की ज़रूरत नहीं है. हालांकि, पहले MediaKeys सेट अप करना बेहतर होता है. एन्क्रिप्ट (सुरक्षित) किए गए इवेंट के लिए सिर्फ़ तब इंतज़ार किया जा सकता है, जब आपको पता न हो कि कॉन्टेंट एन्क्रिप्ट (सुरक्षित) किया गया है या नहीं. हालांकि, असल में ऐसा होता है.
- कोई वेब ऐप्लिकेशन, एन्क्रिप्ट (सुरक्षित) की गई एक या उससे ज़्यादा स्ट्रीम वाला ऑडियो या वीडियो चलाने की कोशिश करता है.
- ब्राउज़र यह पहचानता है कि मीडिया को एन्क्रिप्ट (सुरक्षित) किया गया है. यह कैसे होता है, यह जानने के लिए नीचे दिया गया बॉक्स देखें. इसके बाद, ब्राउज़र एन्क्रिप्शन के बारे में मीडिया से मिले मेटाडेटा (initData) के साथ एन्क्रिप्ट किया गया इवेंट ट्रिगर करता है.
ऐप्लिकेशन, एन्क्रिप्ट (सुरक्षित) किए गए इवेंट को मैनेज करता है:
अगर मीडिया एलिमेंट के साथ कोई MediaKeys ऑब्जेक्ट नहीं जोड़ा गया है, तो सबसे पहले navigator.requestMediaKeySystemAccess() का इस्तेमाल करके, कोई उपलब्ध कुंजी सिस्टम चुनें. इससे, यह पता लगाया जा सकेगा कि कौनसे मुख्य सिस्टम उपलब्ध हैं. इसके बाद, MediaKeySystemAccess ऑब्जेक्ट की मदद से उपलब्ध कुंजी सिस्टम के लिए, MediaKeys ऑब्जेक्ट बनाएं. ध्यान दें कि एन्क्रिप्ट (सुरक्षित) किए गए पहले इवेंट से पहले, MediaKeys ऑब्जेक्ट को शुरू किया जाना चाहिए. ऐप्लिकेशन, लाइसेंस सर्वर का यूआरएल ले सकता है. इसके लिए, ज़रूरी है कि ऐप्लिकेशन किसी उपलब्ध कुंजी सिस्टम को चुने. MediaKeys ऑब्जेक्ट, किसी ऑडियो या वीडियो एलिमेंट के लिए मीडिया को डिक्रिप्ट करने के लिए उपलब्ध सभी कुंजियों को दिखाता है. यह सीडीएम इंस्टेंस को दिखाता है और सीडीएम का ऐक्सेस देता है. खास तौर पर, पासकोड सेशन बनाने के लिए, जिसका इस्तेमाल लाइसेंस सर्वर से पासकोड पाने के लिए किया जाता है.
MediaKeys ऑब्जेक्ट बनाने के बाद, उसे मीडिया एलिमेंट को असाइन करें: setMediaKeys() MediaKeys ऑब्जेक्ट को HTMLMediaElement से जोड़ता है, ताकि उसके पास वीडियो चलाने के दौरान, यानी डिकोड करने के दौरान पासकोड का इस्तेमाल करने की अनुमति हो.
ऐप्लिकेशन, MediaKeys पर createSession() को कॉल करके MediaKeySession बनाता है. इससे एक MediaKeyOption बनता है, जो लाइसेंस और उसकी कुंजी(कुंजी) की अवधि के बारे में बताता है.
ऐप्लिकेशन, एन्क्रिप्ट (सुरक्षित) किए गए हैंडलर में मिले मीडिया डेटा को सीडीएम को पास करके, लाइसेंस का अनुरोध जनरेट करता है. इसके लिए, MediaKey Session में generateRequest() को कॉल करना है.
सीडीएम, मैसेज इवेंट को ट्रिगर करता है: लाइसेंस सर्वर से कुंजी पाने का अनुरोध.
MediaKeyसेशन ऑब्जेक्ट को मैसेज इवेंट मिलता है और ऐप्लिकेशन लाइसेंस सर्वर को (उदाहरण के लिए, XHR के ज़रिए) मैसेज भेजता है.
ऐप्लिकेशन को लाइसेंस सर्वर से जवाब मिलता है और वह MediaKeySession के update() तरीके का इस्तेमाल करके, डेटा को सीडीएम को भेजता है.
सीडीएम, लाइसेंस में मौजूद कुंजियों का इस्तेमाल करके मीडिया को डिक्रिप्ट करता है. मीडिया एलिमेंट से जुड़े MediaKeys में मौजूद किसी भी सेशन से, मान्य कुंजी का इस्तेमाल किया जा सकता है. सीडीएम, कुंजी और नीति को ऐक्सेस करेगा, जिसे कुंजी आईडी से इंडेक्स किया जाता है.
मीडिया प्लेबैक फिर से शुरू हो जाता है.
ब्राउज़र को कैसे पता चलता है कि मीडिया एन्क्रिप्ट (सुरक्षित) किया गया है?
यह जानकारी, मीडिया कंटेनर फ़ाइल के मेटाडेटा में होती है. यह ISO BMFF या WebM जैसे फ़ॉर्मैट में होगी. ISO BMFF के लिए, इसका मतलब हेडर मेटाडेटा है, जिसे सुरक्षा स्कीम की जानकारी वाले बॉक्स कहा जाता है. WebM में Matroska ContentContext एलिमेंट इस्तेमाल होता है, जिसमें कुछ WebM-खास एलिमेंट जोड़े जाते हैं. ईएमई से जुड़ी रजिस्ट्री में, हर कंटेनर के लिए दिशा-निर्देश दिए जाते हैं.
ध्यान दें कि सीडीएम और लाइसेंस सर्वर के बीच कई मैसेज हो सकते हैं. साथ ही, इस प्रोसेस में होने वाला सारा कम्यूनिकेशन, ब्राउज़र और ऐप्लिकेशन के लिए साफ़ तौर पर नहीं दिखता: मैसेज सिर्फ़ सीडीएम और लाइसेंस सर्वर को समझ आते हैं. हालांकि, ऐप्लिकेशन लेयर यह देख सकती है कि सीडीएम किस तरह का मैसेज भेज रहा है. लाइसेंस के अनुरोध में, सीडीएम की पुष्टि (और भरोसे के संबंध) का सबूत होता है. साथ ही, लाइसेंस में कॉन्टेंट की कुंजी (कुंजियों) को एन्क्रिप्ट (सुरक्षित) करते समय इस्तेमाल करने के लिए एक कुंजी भी होती है.
लेकिन सीडीएम असल में क्या करते हैं?
ईएमई लागू करने से मीडिया को डिक्रिप्ट नहीं किया जा सकता: इससे वेब ऐप्लिकेशन को कॉन्टेंट डिक्रिप्शन मॉड्यूल के साथ इंटरैक्ट करने के लिए एपीआई मिलता है.
सीडीएम, असल में ईएमई स्पेसिफ़िकेशन के मुताबिक काम नहीं करते हैं. सीडीएम, मीडिया की डिकोडिंग (डिकंप्रेशन) और डिक्रिप्शन हैंडल कर सकता है. सीडीएम की सुविधाओं के लिए, कम से ज़्यादा बेहतर कई विकल्प उपलब्ध हैं:
- सिर्फ़ डिक्रिप्ट करने की सुविधा, जो सामान्य मीडिया पाइपलाइन का इस्तेमाल करके प्लेबैक को चालू करती है. उदाहरण के लिए, <video> एलिमेंट के ज़रिए.
- वीडियो को डिक्रिप्ट (सुरक्षित से सामान्य में बदलना) और डिकोड (कोड को सामान्य भाषा में बदलना) करना. साथ ही, वीडियो फ़्रेम को ब्राउज़र को रेंडरिंग के लिए भेजना.
- सीधे हार्डवेयर (उदाहरण के लिए, जीपीयू) में डिक्रिप्ट और डिकोड करके रेंडर करना.
सीडीएम को वेब ऐप्लिकेशन में उपलब्ध कराने के कई तरीके हैं:
- ब्राउज़र के साथ सीडीएम को बंडल करें.
- सीडीएम को अलग से डिस्ट्रिब्यूट करें.
- ऑपरेटिंग सिस्टम में एक सीडीएम बनाएं.
- फ़र्मवेयर में सीडीएम शामिल करें.
- हार्डवेयर में सीडीएम एम्बेड करना.
EME स्पेसिफ़िकेशन में यह नहीं बताया गया है कि सीडीएम को कैसे उपलब्ध कराया जाता है. हालांकि, सभी मामलों में ब्राउज़र की यह ज़िम्मेदारी होती है कि वह सीडीएम की जांच करे और उसे दिखाए.
EME किसी खास पासकोड सिस्टम का इस्तेमाल करने की ज़रूरी शर्त नहीं है. फ़िलहाल, डेस्कटॉप और मोबाइल ब्राउज़र में, Chrome पर Widevine और IE11 पर PlayReady काम करता है.
लाइसेंस सर्वर से कुंजी हासिल करना
आम तौर पर व्यावसायिक इस्तेमाल में, कॉन्टेंट को पैकेजिंग सेवा या टूल की मदद से एन्क्रिप्ट (सुरक्षित) किया जाता है और उसे कोड में बदला जाता है. एन्क्रिप्ट (सुरक्षित) किए गए मीडिया को ऑनलाइन उपलब्ध कराने के बाद, वेब क्लाइंट किसी लाइसेंस सर्वर से लाइसेंस में शामिल कुंजी हासिल कर सकता है. साथ ही, कॉन्टेंट को डिक्रिप्ट (सामान्य भाषा में बदलना) और चलाने के लिए, उस कुंजी का इस्तेमाल कर सकता है.
यहां दिया गया कोड (स्पेसिफ़िकेशन के उदाहरणों से लिया गया है), यह दिखाता है कि कोई ऐप्लिकेशन, लाइसेंस सर्वर से सही पासकोड सिस्टम कैसे चुन सकता है और पासकोड कैसे हासिल कर सकता है.
var video = document.querySelector('video');
var config = [{initDataTypes: ['webm'],
videoCapabilities: [{contentType: 'video/webm; codecs="vp09.00.10.08"'}]}];
if (!video.mediaKeys) {
navigator.requestMediaKeySystemAccess('org.w3.clearkey',
config).then(
function(keySystemAccess) {
var promise = keySystemAccess.createMediaKeys();
promise.catch(
console.error.bind(console, 'Unable to create MediaKeys')
);
promise.then(
function(createdMediaKeys) {
return video.setMediaKeys(createdMediaKeys);
}
).catch(
console.error.bind(console, 'Unable to set MediaKeys')
);
promise.then(
function(createdMediaKeys) {
var initData = new Uint8Array([...]);
var keySession = createdMediaKeys.createSession();
keySession.addEventListener('message', handleMessage,
false);
return keySession.generateRequest('webm', initData);
}
).catch(
console.error.bind(console,
'Unable to create or initialize key session')
);
}
);
}
function handleMessage(event) {
var keySession = event.target;
var license = new Uint8Array([...]);
keySession.update(license).catch(
console.error.bind(console, 'update() failed')
);
}
सामान्य एन्क्रिप्शन
एन्क्रिप्ट (सुरक्षित) करने के सामान्य समाधान, कॉन्टेंट देने वालों को हर कंटेनर/कोडेक के लिए, एक बार अपने कॉन्टेंट को एन्क्रिप्ट (सुरक्षित) और पैकेज करने की सुविधा देते हैं. साथ ही, उसका इस्तेमाल कई तरह के मुख्य सिस्टम, सीडीएम, और क्लाइंट के साथ किया जा सकता है. जैसे, कोई भी सीडीएम जो सामान्य एन्क्रिप्शन के साथ काम करता हो. उदाहरण के लिए, Playready का इस्तेमाल करके पैकेज किए गए वीडियो को ब्राउज़र में चलाया जा सकता है. इसके लिए, Widevine लाइसेंस सर्वर से कुंजी हासिल करने वाले Widevine सीडीएम का इस्तेमाल किया जाता है.
यह लेगसी समाधानों के उलट है, जो सिर्फ़ पूरे वर्टिकल स्टैक के साथ काम करते हैं. इनमें एक क्लाइंट भी शामिल है, जिसमें अक्सर ऐप्लिकेशन रनटाइम भी शामिल होता है.
सामान्य एन्क्रिप्शन (CENC) एक आईएसओ स्टैंडर्ड है, जो आईएसओ बीएमएफ़एफ़ के लिए सुरक्षा स्कीम को तय करता है. इसी तरह का सिद्धांत WebM पर लागू होता है.
कुंजी को हटाएं
हालांकि, EME DRM फ़ंक्शन को परिभाषित नहीं करता है, लेकिन फ़िलहाल स्पेसिफ़िकेशन के मुताबिक यह ज़रूरी है कि EME के साथ काम करने वाले सभी ब्राउज़र के लिए 'क्लियर की' लागू करना ज़रूरी हो. इस सिस्टम का इस्तेमाल करके, मीडिया को किसी कुंजी से एन्क्रिप्ट किया जा सकता है. इसके बाद, उस कुंजी को डालकर मीडिया को आसानी से चलाया जा सकता है. क्लियर पासकोड को ब्राउज़र में बनाया जा सकता है: इसके लिए, डिक्रिप्ट करने वाले अलग मॉड्यूल का इस्तेमाल करने की ज़रूरत नहीं होती.
हालांकि, कई तरह के व्यावसायिक कॉन्टेंट के लिए इसका इस्तेमाल नहीं किया जा सकता, लेकिन यह EME की सुविधा वाले सभी ब्राउज़र पर पूरी तरह से काम करता है. यह किसी लाइसेंस सर्वर से कॉन्टेंट कुंजी का अनुरोध किए बिना, EME को लागू करने के तरीके की जांच करने के लिए भी आसान है. साथ ही, EME का इस्तेमाल करने वाले ऐप्लिकेशन के लिए भी यह काम आता है. simpl.info/ck पर, क्लियर पासकोड का एक आसान उदाहरण दिया गया है. यहां कोड के बारे में पूरी जानकारी दी गई है. यह ऊपर बताए गए चरणों से मिलता-जुलता है. हालांकि, इसमें लाइसेंस सर्वर के साथ इंटरैक्शन नहीं होता.
// Define a key: hardcoded in this example
// – this corresponds to the key used for encryption
var KEY = new Uint8Array([
0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b, 0x68, 0xef, 0x12, 0x2a, 0xfc,
0xe4, 0xae, 0x3c,
]);
var config = [
{
initDataTypes: ['webm'],
videoCapabilities: [
{
contentType: 'video/webm; codecs="vp8"',
},
],
},
];
var video = document.querySelector('video');
video.addEventListener('encrypted', handleEncrypted, false);
navigator
.requestMediaKeySystemAccess('org.w3.clearkey', config)
.then(function (keySystemAccess) {
return keySystemAccess.createMediaKeys();
})
.then(function (createdMediaKeys) {
return video.setMediaKeys(createdMediaKeys);
})
.catch(function (error) {
console.error('Failed to set up MediaKeys', error);
});
function handleEncrypted(event) {
var session = video.mediaKeys.createSession();
session.addEventListener('message', handleMessage, false);
session
.generateRequest(event.initDataType, event.initData)
.catch(function (error) {
console.error('Failed to generate a license request', error);
});
}
function handleMessage(event) {
// If you had a license server, you would make an asynchronous XMLHttpRequest
// with event.message as the body. The response from the server, as a
// Uint8Array, would then be passed to session.update().
// Instead, we will generate the license synchronously on the client, using
// the hard-coded KEY at the top.
var license = generateLicense(event.message);
var session = event.target;
session.update(license).catch(function (error) {
console.error('Failed to update the session', error);
});
}
// Convert Uint8Array into base64 using base64url alphabet, without padding.
function toBase64(u8arr) {
return btoa(String.fromCharCode.apply(null, u8arr))
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=*$/, '');
}
// This takes the place of a license server.
// kids is an array of base64-encoded key IDs
// keys is an array of base64-encoded keys
function generateLicense(message) {
// Parse the clearkey license request.
var request = JSON.parse(new TextDecoder().decode(message));
// We only know one key, so there should only be one key ID.
// A real license server could easily serve multiple keys.
console.assert(request.kids.length === 1);
var keyObj = {
kty: 'oct',
alg: 'A128KW',
kid: request.kids[0],
k: toBase64(KEY),
};
return new TextEncoder().encode(
JSON.stringify({
keys: [keyObj],
}),
);
}
इस कोड की जांच करने के लिए, आपको एन्क्रिप्ट (सुरक्षित) किया गया वीडियो चलाना होगा. webm_crypt के निर्देशों के मुताबिक, 'साफ़ कुंजी' की मदद से इस्तेमाल के लिए, वीडियो को एन्क्रिप्ट (सुरक्षित) करने का काम WebM के लिए किया जा सकता है. कमर्शियल सेवाएं भी उपलब्ध हैं (कम से कम ISO BMFF/MP4 के लिए). साथ ही, अन्य समाधान भी तैयार किए जा रहे हैं.
मिलती-जुलती टेक्नोलॉजी 1: मीडिया सोर्स एक्सटेंशन (MSE)
HTMLMediaElement एक आसान और खूबसूरत एलिमेंट है.
हम src यूआरएल देकर, मीडिया को लोड, डिकोड, और चला सकते हैं:
<video src="foo.webm"></video>
Media Source API, HTMLMediaElement का एक एक्सटेंशन है. इससे मीडिया के सोर्स को बेहतर तरीके से कंट्रोल किया जा सकता है. इसके लिए, JavaScript को वीडियो के 'चंक' से प्लेबैक के लिए स्ट्रीम बनाने की अनुमति दी जाती है. इससे, अडैप्टिव स्ट्रीमिंग और टाइम शिफ़्ट जैसी तकनीकें काम करती हैं.
एमईई के लिए एमएसई क्यों ज़रूरी है? ऐसा इसलिए है, क्योंकि कॉन्टेंट की सुरक्षा के अलावा, कमर्शियल कॉन्टेंट उपलब्ध कराने वाली कंपनियों को नेटवर्क की स्थितियों और अन्य ज़रूरी शर्तों के हिसाब से कॉन्टेंट डिलीवरी में बदलाव करने की ज़रूरत होती है. जैसे, Netflix, नेटवर्क की स्थितियों में बदलाव होने पर स्ट्रीम बिटरेट को डाइनैमिक तौर पर बदल देता है. एमईएम, एमएसई लागू करने से मिलने वाली मीडिया स्ट्रीम के प्लेबैक के साथ काम करता है. ठीक उसी तरह जैसे यह src एट्रिब्यूट की मदद से मिलने वाली मीडिया स्ट्रीम के साथ काम करता है.
अलग-अलग बिटरेट के हिसाब से कोड में बदले गए मीडिया को अलग-अलग हिस्सों में कैसे चलाएं? DASH सेक्शन देखें.
MSE को simpl.info/mse पर जाकर देखा जा सकता है; इस उदाहरण के लिए, एक WebM वीडियो को File API का इस्तेमाल करके पांच हिस्सों में बांटा गया है. प्रोडक्शन ऐप्लिकेशन में, वीडियो के हिस्सों को AJAX के ज़रिए वापस लाया जाएगा.
सबसे पहले, एक SourceBuffer बनाया जाता है:
var sourceBuffer = mediaSource.addSourceBuffer(
'video/webm; codecs="vorbis,vp8"',
);
इसके बाद, पूरी फ़िल्म को वीडियो एलिमेंट पर 'स्ट्रीम' किया जाता है. इसके लिए, appendBuffer() तरीके का इस्तेमाल करके हर चंक को जोड़ा जाता है:
reader.onload = function (e) {
sourceBuffer.appendBuffer(new Uint8Array(e.target.result));
if (i === NUM_CHUNKS - 1) {
mediaSource.endOfStream();
} else {
if (video.paused) {
// start playing after first chunk is appended
video.play();
}
readChunk_(++i);
}
};
MSE प्राइमर में MSE के बारे में ज़्यादा जानें.
मिलती-जुलती दूसरी टेक्नोलॉजी: डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी (डीएश)
मल्टी-डिवाइस, मल्टी-प्लैटफ़ॉर्म, मोबाइल — इसे चाहे कुछ भी नाम दें, अक्सर बदलती कनेक्टिविटी वाली स्थितियों में वेब का अनुभव मिलता है. कई डिवाइसों के ज़माने में, बैंडविड्थ की समस्याओं और डिवाइसों के हिसाब से बदलावों को मैनेज करने के लिए, डाइनैमिक और अडैप्टिव डिलीवरी ज़रूरी है.
DASH (जिसे MPEG-DASH भी कहा जाता है) को इस तरह डिज़ाइन किया गया है कि यह स्ट्रीमिंग और डाउनलोड, दोनों के लिए बेहतरीन मीडिया डिलीवरी की सुविधा दे सके. कई अन्य टेक्नोलॉजी भी कुछ ऐसा ही करती हैं — जैसे, Apple की एचटीटीपी लाइव स्ट्रीमिंग (एचएलएस) और Microsoft की स्मूद स्ट्रीमिंग — लेकिन एचटीटीपी के ज़रिए अडैप्टिव बिटरेट स्ट्रीमिंग का एकमात्र तरीका, डीएएसएच है, जो ओपन स्टैंडर्ड पर आधारित है. YouTube जैसी साइटें पहले से ही DASH का इस्तेमाल कर रही हैं.
इसका EME और MSE से क्या लेना-देना है? एमएसई पर आधारित डीएएसएच लागू करने की सुविधा, किसी मेनिफ़ेस्ट को पार्स कर सकती है. साथ ही, वीडियो के सेगमेंट को सही बिटरेट पर डाउनलोड कर सकती है. साथ ही, ज़रूरत पड़ने पर उन्हें वीडियो एलिमेंट को फ़ीड कर सकती है. इसके लिए, मौजूदा एचटीटीपी इन्फ़्रास्ट्रक्चर का इस्तेमाल किया जाता है.
दूसरे शब्दों में, DASH की मदद से व्यावसायिक कॉन्टेंट उपलब्ध कराने वाली कंपनियां, सुरक्षित कॉन्टेंट को अडैप्टिव स्ट्रीमिंग की सुविधा के साथ उपलब्ध करा सकती हैं.
DASH, जैसा नाम है वैसा ही काम करता है:
- डाइनैमिक: यह बदलती परिस्थितियों के हिसाब से काम करता है.
- अडैप्टिव: इसमें, ऑडियो या वीडियो बिटरेट के हिसाब से बदलाव होता है.
- स्ट्रीमिंग: इस विकल्प की मदद से, वीडियो को स्ट्रीम करने के साथ-साथ डाउनलोड भी किया जा सकता है.
- एचटीटीपी: यह सुविधा, एचटीटीपी का इस्तेमाल करके कॉन्टेंट डिलीवरी की सुविधा देती है. इसमें पारंपरिक स्ट्रीमिंग सर्वर का कोई नुकसान नहीं होता.
BBC ने DASH का इस्तेमाल करके टेस्ट स्ट्रीम उपलब्ध कराना शुरू कर दिया है:
मीडिया को अलग-अलग बिटरेट पर कई बार एन्कोड किया जाता है. हर कोड को रीप्रज़ेंटेशन कहा जाता है. इन्हें कई मीडिया सेगमेंट में बांटा जाता है. क्लाइंट, एचटीटीपी पर किसी प्रोग्राम के सेगमेंट का अनुरोध करके, उसे चलाता है. कॉन्टेंट के मिलते-जुलते वर्शन को एक ग्रुप में रखा जा सकता है. अगर क्लाइंट को बिटरेट बदलना है, तो वह मौजूदा अडैप्टेशन सेट से कोई विकल्प चुन सकता है और उस रीप्रज़ेंटेशन से सेगमेंट का अनुरोध करना शुरू कर सकता है. कॉन्टेंट को इस तरह से कोड में बदला जाता है कि क्लाइंट के लिए, एक सेगमेंट से दूसरे पर स्विच करना आसान हो. आम तौर पर, किसी रेप्रज़ेंटेशन में कई मीडिया सेगमेंट के साथ-साथ एक शुरू करने वाला सेगमेंट भी होता है. इसे हेडर के तौर पर देखा जा सकता है, जिसमें एन्कोडिंग, फ़्रेम साइज़ वगैरह की जानकारी होती है. किसी दिए गए रेप्रज़ेंटेशन से मीडिया सेगमेंट का इस्तेमाल करने से पहले, क्लाइंट को यह जानकारी हासिल करनी होती है.
खास जानकारी:
- मीडिया को अलग-अलग बिटरेट पर एन्कोड किया जाता है.
- अलग-अलग बिटरेट वाली फ़ाइलें, एचटीटीपी सर्वर से उपलब्ध कराई जाती हैं.
- क्लाइंट वेब ऐप्लिकेशन यह चुनता है कि DASH के साथ कौनसी बिटरेट को वापस लाया और चलाया जाए.
वीडियो को सेगमेंट में बांटने की प्रोसेस के तहत, प्रोग्राम के ज़रिए एक एक्सएमएल मेनिफ़ेस्ट बनाया जाता है. इसे मीडिया प्रज़ेंटेशन डिस्क्रिप्शन (एमपीडी) कहा जाता है. इसमें, अवधि और यूआरएल के साथ अडैप्टेशन सेट और रेप्रज़ेंटेशन के बारे में बताया गया है. एमपीडी इस तरह दिखता है:
<MPD xmlns="urn:mpeg:DASH:schema:MPD:2011" mediaPresentationDuration="PT0H3M1.63S" minBufferTime="PT1.5S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"
type="static">
<Period duration="PT0H3M1.63S" start="PT0S">
<AdaptationSet>
<ContentComponent contentType="video" id="1" />
<Representation bandwidth="4190760" codecs="avc1.640028" height="1080" id="1" mimeType="video/mp4" width="1920">
<BaseURL>car-20120827-89.mp4</BaseURL>
<SegmentBase indexRange="674-1149">
<Initialization range="0-673" />
</SegmentBase>
</Representation>
<Representation bandwidth="2073921" codecs="avc1.4d401f" height="720" id="2" mimeType="video/mp4" width="1280">
<BaseURL>car-20120827-88.mp4</BaseURL>
<SegmentBase indexRange="708-1183">
<Initialization range="0-707" />
</SegmentBase>
</Representation>
…
</AdaptationSet>
</Period>
</MPD>
(यह एक्सएमएल, YouTube DASH डेमो प्लेयर के लिए इस्तेमाल की गई .mpd फ़ाइल से लिया गया है.)
DASH स्पेसिफ़िकेशन के मुताबिक, किसी एमपीडी फ़ाइल को किसी वीडियो के सोर्स के तौर पर इस्तेमाल किया जा सकता है. हालांकि, वेब डेवलपर को ज़्यादा सुविधा देने के लिए, ब्राउज़र वेंडर ने एमएसई का इस्तेमाल करने वाली JavaScript लाइब्रेरी, जैसे कि dash.js के लिए DASH की सहायता को छोड़ने का विकल्प चुना है. JavaScript में DASH लागू करने से, ब्राउज़र अपडेट किए बिना अडैप्टेशन एल्गोरिदम को बेहतर बनाया जा सकता है. MSE का इस्तेमाल करने से, ब्राउज़र में बदलाव किए बिना अन्य मेनिफ़ेस्ट फ़ॉर्मैट और डिलीवरी की प्रोसेस को भी आज़माया जा सकता है. Google का Shaka Player, EME की सुविधा के साथ DASH क्लाइंट लागू करता है.
नतीजा
पैसे देकर वीडियो और ऑडियो उपलब्ध कराने के लिए वेब का इस्तेमाल तेज़ी से बढ़ रहा है. ऐसा लगता है कि हर नया डिवाइस, एचटीटीपी पर कॉन्टेंट उपलब्ध कराने वाली बड़ी कंपनियों के मीडिया को स्ट्रीम कर सकता है. भले ही, वह डिवाइस टैबलेट, गेम कंसोल, कनेक्टेड टीवी या सेट-टॉप बॉक्स हो. 85% से ज़्यादा मोबाइल और डेस्कटॉप ब्राउज़र अब <video> और <audio> के साथ काम करते हैं. साथ ही, Cisco का अनुमान है कि साल 2017 तक ग्लोबल कंज्यूमर इंटरनेट ट्रैफ़िक का 80 से 90 प्रतिशत हिस्सा वीडियो से होगा. इस संदर्भ में, सुरक्षित कॉन्टेंट के डिस्ट्रिब्यूशन के लिए ब्राउज़र की सहायता का महत्व बढ़ता जा रहा है. ऐसा इसलिए है, क्योंकि ब्राउज़र वेंडर, उन एपीआई के लिए सहायता को कम कर रहे हैं जिन पर ज़्यादातर मीडिया प्लग इन निर्भर हैं.
इसके बारे में और पढ़ें
खास जानकारी और स्टैंडर्ड
EME स्पेसिफ़िकेशन: एडिटर का नया ड्राफ़्ट कॉमन एन्क्रिप्शन (CENC) मीडिया सोर्स एक्सटेंशन: एडिटर का नया ड्राफ़्ट DASH स्टैंडर्ड (हां, यह एक PDF है) DASH स्टैंडर्ड की खास जानकारी
लेख
DTG वेबिनार (कुछ हद तक पुराना) EME क्या है?, हेनरी सिवोनन की ओर से लिखा गया लेख मीडिया सोर्स एक्सटेंशन के बारे में जानकारी देने वाला लेख MPEG-DASH टेस्ट स्ट्रीम: BBC R&D ब्लॉग पोस्ट
डेमो
साफ़ कुंजी डेमो: simpl.info/ck मीडिया सोर्स एक्सटेंशन (MSE) डेमो Google का Shaka Player ईएमई सहायता के साथ DASH क्लाइंट लागू करता है