एन्क्रिप्ट किए गए मीडिया एक्सटेंशन के बारे में जानकारी

एन्क्रिप्टेड मीडिया एक्सटेंशन (ईएमई) एक ऐसा एपीआई उपलब्ध कराता है जिसकी मदद से वेब ऐप्लिकेशन, कॉन्टेंट की सुरक्षा करने वाले सिस्टम के साथ इंटरैक्ट कर सकते हैं. इससे, एन्क्रिप्ट किए गए ऑडियो और वीडियो को चलाने की अनुमति मिलती है.

EME को इस तरह से डिज़ाइन किया गया है कि एक ही ऐप्लिकेशन और एन्क्रिप्ट की गई फ़ाइलों का इस्तेमाल, किसी भी ब्राउज़र में किया जा सके. भले ही, सुरक्षा के लिए इस्तेमाल किया जा रहा सिस्टम कोई भी हो. पहले को स्टैंडर्ड एपीआई और फ़्लो की मदद से पूरा किया जा सकता है, जबकि दूसरे को कॉमन एन्क्रिप्शन के कॉन्सेप्ट की मदद से पूरा किया जा सकता है.

EME, HTMLMediaElement स्पेसिफ़िकेशन का एक एक्सटेंशन है - इसलिए इसका नाम ऐसा है. 'एक्सटेंशन' होने का मतलब है कि ब्राउज़र में EME की सुविधा होना ज़रूरी नहीं है: अगर कोई ब्राउज़र एन्क्रिप्ट (सुरक्षित) किए गए मीडिया के साथ काम नहीं करता है, तो वह एन्क्रिप्ट किए गए मीडिया को नहीं चला पाएगा. हालांकि, एचटीएमएल स्पेसिफ़िकेशन का पालन करने के लिए EME की ज़रूरत नहीं है. ईएमई स्पेसिफ़िकेशन के मुताबिक:

EME लागू करने के लिए, इन बाहरी कॉम्पोनेंट का इस्तेमाल किया जाता है:

  • की सिस्टम: कॉन्टेंट की सुरक्षा (डीएमआर) का तरीका. ईएमई, क्लियर की के अलावा, खुद से पासकोड सिस्टम तय नहीं करता. क्लियर की के बारे में यहां ज़्यादा बताया गया है.
  • कॉन्टेंट डिक्रिप्ट करने वाला मॉड्यूल (सीडीएम): यह क्लाइंट-साइड सॉफ़्टवेयर या हार्डवेयर मशीन है. इसकी मदद से, एन्क्रिप्ट (सुरक्षित) किए गए मीडिया को चलाया जा सकता है. की सिस्टम की तरह, ईएमई भी किसी सीडीएम की जानकारी नहीं देता. हालांकि, यह ऐप्लिकेशन के लिए एक इंटरफ़ेस उपलब्ध कराता है, ताकि वे उपलब्ध सीडीएम के साथ इंटरैक्ट कर सकें.
  • लाइसेंस (की) सर्वर: मीडिया को डिक्रिप्ट करने के लिए कुंजियां उपलब्ध कराने के लिए, सीडीएम के साथ इंटरैक्ट करता है. लाइसेंस सर्वर के साथ बातचीत करने की ज़िम्मेदारी, ऐप्लिकेशन की होती है.
  • पैकेजिंग सेवा: डिस्ट्रिब्यूशन/उपयोग के लिए, मीडिया को एन्कोड और एन्क्रिप्ट करती है.

ध्यान दें कि EME का इस्तेमाल करने वाला ऐप्लिकेशन, डिक्रिप्ट (सुरक्षित जानकारी को वापस सामान्य जानकारी में बदलना) करने की सुविधा चालू करने के लिए कुंजियां पाने के लिए, लाइसेंस सर्वर के साथ इंटरैक्ट करता है. हालांकि, उपयोगकर्ता की पहचान और पुष्टि करना, EME का हिस्सा नहीं है. मीडिया चलाने की सुविधा चालू करने के लिए, कुंजियों को वापस पाने के लिए उपयोगकर्ता की पुष्टि की जाती है. हालांकि, ऐसा करना ज़रूरी नहीं है. Netflix जैसी सेवाओं को अपने वेब ऐप्लिकेशन में उपयोगकर्ताओं की पुष्टि करनी होगी: जब कोई उपयोगकर्ता ऐप्लिकेशन में साइन इन करता है, तो ऐप्लिकेशन उपयोगकर्ता की पहचान और विशेषाधिकारों का पता लगाता है.

ईएमई कैसे काम करता है?

यहां दिए गए कोड के उदाहरण के हिसाब से, EME के कॉम्पोनेंट इस तरह इंटरैक्ट करते हैं:

  1. कोई वेब ऐप्लिकेशन, एन्क्रिप्ट (सुरक्षित) की गई एक या उससे ज़्यादा स्ट्रीम वाला ऑडियो या वीडियो चलाने की कोशिश करता है.
  2. ब्राउज़र को पता चलता है कि मीडिया को एन्क्रिप्ट (सुरक्षित) किया गया है. यह कैसे होता है, इसके बारे में जानने के लिए नीचे दिया गया बॉक्स देखें. इसके बाद, ब्राउज़र एन्क्रिप्शन के बारे में मीडिया से मिले मेटाडेटा (initData) के साथ encrypted इवेंट को ट्रिगर करता है.
  3. ऐप्लिकेशन, encrypted इवेंट को मैनेज करता है:
    1. अगर मीडिया एलिमेंट से कोई MediaKeys ऑब्जेक्ट नहीं जुड़ा है, तो पहले navigator.requestMediaKeySystemAccess() का इस्तेमाल करके कोई उपलब्ध की-सिस्टम चुनें. इससे यह पता चलेगा कि कौनसे की-सिस्टम उपलब्ध हैं. इसके बाद, MediaKeySystemAccess ऑब्जेक्ट की मदद से, उपलब्ध की-सिस्टम के लिए MediaKeys ऑब्जेक्ट बनाएं. ध्यान दें कि MediaKeys ऑब्जेक्ट को शुरू करने की प्रोसेस, पहले encrypted इवेंट से पहले पूरी हो जानी चाहिए. ऐप्लिकेशन, लाइसेंस सर्वर का यूआरएल अपने हिसाब से चुनता है. इसके लिए, उसे उपलब्ध कुंजी सिस्टम को चुनने की ज़रूरत नहीं होती. MediaKeys ऑब्जेक्ट, किसी ऑडियो या वीडियो एलिमेंट के मीडिया को डिक्रिप्ट करने के लिए उपलब्ध सभी कुंजियों को दिखाता है. यह सीडीएम इंस्टेंस को दिखाता है और सीडीएम का ऐक्सेस देता है. खास तौर पर, कुंजी सेशन बनाने के लिए, जिसका इस्तेमाल लाइसेंस सर्वर से कुंजियां पाने के लिए किया जाता है.
    2. MediaKeys ऑब्जेक्ट बनाने के बाद, उसे मीडिया एलिमेंट को असाइन करें: setMediaKeys(), MediaKeys ऑब्जेक्ट को HTMLMediaElement से जोड़ता है, ताकि उसके पास वीडियो चलाने के दौरान, यानी डिकोड करने के दौरान कुंजियों का इस्तेमाल करने का विकल्प हो.
  4. ऐप्लिकेशन, MediaKeys पर createSession() को कॉल करके MediaKeySession बनाता है. इससे एक MediaKeySession बनता है, जो लाइसेंस और उसकी कुंजियों के लाइफ़टाइम को दिखाता है.
  5. ऐप्लिकेशन, MediaKeySession पर generateRequest() को कॉल करके, encrypted हैंडलर में मिला मीडिया डेटा, सीडीएम को भेजकर लाइसेंस का अनुरोध जनरेट करता है.
  6. सीडीएम, message इवेंट को ट्रिगर करता है: लाइसेंस सर्वर से पासकोड पाने का अनुरोध.
  7. MediaKeySession ऑब्जेक्ट को message इवेंट मिलता है और ऐप्लिकेशन, लाइसेंस सर्वर को एक मैसेज भेजता है. उदाहरण के लिए, XHR के ज़रिए.
  8. ऐप्लिकेशन को लाइसेंस सर्वर से जवाब मिलता है और वह MediaKeySession के update() तरीके का इस्तेमाल करके, डेटा को सीडीएम को भेजता है.
  9. सीडीएम, लाइसेंस में मौजूद कुंजियों का इस्तेमाल करके मीडिया को डिक्रिप्ट करता है. मीडिया एलिमेंट से जुड़े MediaKey में मौजूद किसी भी सेशन से, मान्य कुंजी का इस्तेमाल किया जा सकता है. सीडीएम, कुंजी और नीति को ऐक्सेस करेगा. इनका इंडेक्स, कुंजी आईडी के हिसाब से किया जाएगा.
  10. मीडिया प्लेबैक फिर से शुरू हो जाता है.

फ़्यू…

ध्यान दें कि सीडीएम और लाइसेंस सर्वर के बीच कई मैसेज हो सकते हैं. साथ ही, इस प्रोसेस में होने वाला पूरा कम्यूनिकेशन, ब्राउज़र और ऐप्लिकेशन के लिए साफ़ तौर पर नहीं दिखता: मैसेज सिर्फ़ सीडीएम और लाइसेंस सर्वर को समझ आते हैं. हालांकि, ऐप्लिकेशन लेयर यह देख सकती है कि सीडीएम किस तरह का मैसेज भेज रहा है. लाइसेंस के अनुरोध में, सीडीएम की पुष्टि (और भरोसे के संबंध) का सबूत होता है. साथ ही, लाइसेंस में कॉन्टेंट की कुंजी (कुंजियों) को एन्क्रिप्ट (सुरक्षित) करते समय इस्तेमाल करने के लिए एक कुंजी भी होती है.

…लेकिन सीडीएम असल में क्या करते हैं?

EME लागू करने से, मीडिया को डिक्रिप्ट करने का तरीका अपने-आप नहीं मिलता: यह सिर्फ़ वेब ऐप्लिकेशन के लिए एक एपीआई उपलब्ध कराता है, ताकि वह कॉन्टेंट डिक्रिप्ट करने वाले मॉड्यूल के साथ इंटरैक्ट कर सके.

EME स्पेसिफ़िकेशन में यह नहीं बताया गया है कि सीडीएम असल में क्या करते हैं. साथ ही, सीडीएम मीडिया को डीकोड (डिकंप्रेस) करने के साथ-साथ, उसे डीक्रिप्ट भी कर सकते हैं. सीडीएम की सुविधाओं के लिए, कम से ज़्यादा बेहतर कई विकल्प मौजूद हैं:

  • सिर्फ़ डिक्रिप्ट करने की सुविधा, जो सामान्य मीडिया पाइपलाइन का इस्तेमाल करके प्लेबैक को चालू करती है. उदाहरण के लिए, <video> एलिमेंट के ज़रिए.
  • वीडियो को डिक्रिप्ट (सुरक्षित से सामान्य में बदलना) और डिकोड (कोड को सामान्य भाषा में बदलना) करना. साथ ही, वीडियो फ़्रेम को रेंडर करने के लिए ब्राउज़र को भेजना.
  • सीधे हार्डवेयर (उदाहरण के लिए, जीपीयू) में डिक्रिप्ट और डिकोड करके रेंडर करना.

किसी वेब ऐप्लिकेशन के लिए सीडीएम उपलब्ध कराने के कई तरीके हैं:

  • ब्राउज़र के साथ सीडीएम को बंडल करें.
  • सीडीएम को अलग से डिस्ट्रिब्यूट करें.
  • ऑपरेटिंग सिस्टम में सीडीएम बनाएं.
  • फ़र्मवेयर में सीडीएम शामिल करें.
  • हार्डवेयर में सीडीएम एम्बेड करना.

ईएमई स्पेसिफ़िकेशन में यह नहीं बताया गया है कि सीडीएम को कैसे उपलब्ध कराया जाता है. हालांकि, सभी मामलों में सीडीएम की जांच करने और उसे एक्सपोज़ करने की ज़िम्मेदारी ब्राउज़र की होती है.

EME किसी खास पासकोड सिस्टम का इस्तेमाल करने की ज़रूरी शर्त नहीं है. मौजूदा डेस्कटॉप और मोबाइल ब्राउज़र में, Chrome Widevine के साथ काम करता है और IE11 PlayReady के साथ काम करता है.

लाइसेंस सर्वर से कुंजी पाना

आम तौर पर, व्यावसायिक मकसद से इस्तेमाल किए जाने वाले कॉन्टेंट को पैकेजिंग सेवा या टूल का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) और कोड में बदला जाएगा. एन्क्रिप्ट (सुरक्षित) किए गए मीडिया को ऑनलाइन उपलब्ध कराने के बाद, वेब क्लाइंट किसी लाइसेंस सर्वर से लाइसेंस में शामिल कुंजी हासिल कर सकता है. साथ ही, इस कुंजी का इस्तेमाल करके, कॉन्टेंट को डिक्रिप्ट (सामान्य भाषा में बदलना) और चलाया जा सकता है.

यहां दिया गया कोड (स्पेसिफ़िकेशन के उदाहरणों से लिया गया है), यह दिखाता है कि कोई ऐप्लिकेशन, सही पासकोड सिस्टम कैसे चुन सकता है और लाइसेंस सर्वर से पासकोड कैसे हासिल कर सकता है.

var video = document.querySelector('video');

var config = [{initDataTypes: ['webm'],
  videoCapabilities: [{contentType: 'video/webm; codecs="vp9"'}]}];

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), ISO स्टैंडर्ड है. इसमें ISO BMFF के लिए सुरक्षा स्कीम तय की गई है. WebM पर भी इसी तरह का कॉन्सेप्ट लागू होता है.

कुंजी को हटाएं

हालांकि, ईएमई में डीआरएम की सुविधा के बारे में नहीं बताया गया है, लेकिन फ़िलहाल यह ज़रूरी है कि ईएमई के साथ काम करने वाले सभी ब्राउज़र में क्लियर-की लागू हो. इस सिस्टम का इस्तेमाल करके, मीडिया को किसी कुंजी से एन्क्रिप्ट किया जा सकता है. इसके बाद, उस कुंजी को डालकर मीडिया को आसानी से चलाया जा सकता है. क्लियर पासकोड को ब्राउज़र में बनाया जा सकता है: इसके लिए, डिक्रिप्ट करने वाले किसी अलग मॉड्यूल का इस्तेमाल करने की ज़रूरत नहीं होती.

हालांकि, इसकी संभावना नहीं है कि इसका इस्तेमाल कई तरह के व्यावसायिक कॉन्टेंट के लिए किया जाए, लेकिन यह 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 के लिए). साथ ही, अन्य समाधान भी तैयार किए जा रहे हैं.

मीडिया सोर्स एक्सटेंशन (एमएसई)

HTMLMediaElement एक आसान और खूबसूरत एलिमेंट है.

हम src यूआरएल देकर, मीडिया को लोड, डिकोड, और चला सकते हैं:

<video src='foo.webm'></video>

Media Source API, HTMLMediaElement का एक एक्सटेंशन है. इससे मीडिया के सोर्स को बेहतर तरीके से कंट्रोल किया जा सकता है. इसके लिए, JavaScript को वीडियो के 'चंक' से प्लेबैक के लिए स्ट्रीम बनाने की अनुमति दी जाती है. इससे, अडैप्टिव स्ट्रीमिंग और टाइम शिफ़्ट जैसी तकनीकें काम करती हैं.

एमईई के लिए एमएसई क्यों ज़रूरी है? ऐसा इसलिए है, क्योंकि कॉन्टेंट उपलब्ध कराने वाली कंपनियों को, सुरक्षित कॉन्टेंट को डिस्ट्रिब्यूट करने के साथ-साथ, नेटवर्क की स्थितियों और अन्य ज़रूरी शर्तों के हिसाब से कॉन्टेंट डिलीवरी को अडजस्ट करना होता है. उदाहरण के लिए, Netflix, नेटवर्क की स्थिति में बदलाव होने पर स्ट्रीम की बिटरेट को डाइनैमिक तौर पर बदलता है. एमई (E) एमएसई (MSE) लागू करने से मिलने वाली मीडिया स्ट्रीम के प्लेबैक के साथ काम करता है. ठीक उसी तरह जैसे यह src एट्रिब्यूट से मिलने वाले मीडिया के साथ काम करता है.

अलग-अलग बिटरेट में एन्कोड किए गए मीडिया को चंक में बांटकर कैसे चलाया जा सकता है? नीचे DASH सेक्शन देखें.

एमएसई को simpl.info/mse पर देखा जा सकता है. इस उदाहरण के लिए, फ़ाइल एपीआई का इस्तेमाल करके, WebM वीडियो को पांच हिस्सों में बांटा गया है. प्रोडक्शन ऐप्लिकेशन में, वीडियो के हिस्सों को Ajax के ज़रिए वापस लाया जाएगा.

सबसे पहले, एक सोर्स बफ़र बनाया जाता है:

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);
  }
};

HTML5 Rocks लेख में एमएसई के बारे में ज़्यादा जानें.

डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी (DASH)

मल्टी-डिवाइस, मल्टी-प्लैटफ़ॉर्म, मोबाइल - इसे किसी भी नाम से पुकारा जा सकता है. हालांकि, वेब को अक्सर अलग-अलग कनेक्टिविटी की स्थितियों में इस्तेमाल किया जाता है. कई डिवाइसों के बीच कॉन्टेंट डिलीवर करने के लिए, डाइनैमिक और अडैप्टिव डिलीवरी की सुविधा ज़रूरी है. इससे, अलग-अलग डिवाइसों के लिए बैंडविड्थ की कमी और कॉन्टेंट में होने वाले बदलावों से निपटने में मदद मिलती है.

DASH (जिसे MPEG-DASH भी कहा जाता है) को इस तरह से डिज़ाइन किया गया है कि यह स्ट्रीमिंग और डाउनलोड, दोनों के लिए मीडिया को बेहतर तरीके से डिलीवर कर सके. कई अन्य टेक्नोलॉजी भी ऐसा ही करती हैं. जैसे, Apple की एचटीटीपी लाइव स्ट्रीमिंग (एचएलएस) और Microsoft की स्मूद स्ट्रीमिंग. हालांकि, एचटीटीपी के ज़रिए अडैप्टिव बिटरेट स्ट्रीमिंग करने का सिर्फ़ DASH ही एक ऐसा तरीका है जो ओपन स्टैंडर्ड पर आधारित है. YouTube जैसी साइटें पहले से ही DASH का इस्तेमाल कर रही हैं.

इसका EME और MSE से क्या लेना-देना है? एमएसई पर आधारित डीएश लागू करने से, मेनिफ़ेस्ट को पार्स किया जा सकता है. साथ ही, वीडियो के सेगमेंट को सही बिटरेट पर डाउनलोड किया जा सकता है. इसके बाद, वीडियो एलिमेंट के मांगने पर उन्हें फ़ीड किया जा सकता है. इसके लिए, मौजूदा एचटीटीपी इन्फ़्रास्ट्रक्चर का इस्तेमाल किया जाता है.

दूसरे शब्दों में, DASH की मदद से व्यावसायिक कॉन्टेंट देने वाली कंपनियां, सुरक्षित कॉन्टेंट को अडैप्टिव स्ट्रीमिंग की सुविधा के साथ उपलब्ध करा सकती हैं.

DASH, जैसा नाम है वैसा ही काम करता है:

  • डाइनैमिक: यह बदलती परिस्थितियों के हिसाब से काम करता है.
  • अडैप्टिव: यह ऑडियो या वीडियो की सही बिटरेट देने के लिए अडजस्ट होता है.
  • स्ट्रीमिंग: इस विकल्प की मदद से, वीडियो को स्ट्रीम करने के साथ-साथ डाउनलोड भी किया जा सकता है.
  • एचटीटीपी: एचटीटीपी के फ़ायदों के साथ कॉन्टेंट डिलीवरी की सुविधा देता है. इसमें, किसी पारंपरिक स्ट्रीमिंग सर्वर के नुकसान नहीं होते.

BBC ने DASH का इस्तेमाल करके टेस्ट स्ट्रीम उपलब्ध कराना शुरू कर दिया है:

खास जानकारी के लिए:

  1. मीडिया को अलग-अलग बिटरेट पर एन्कोड किया जाता है.
  2. अलग-अलग बिटरेट वाली फ़ाइलें, एचटीटीपी सर्वर से उपलब्ध कराई जाती हैं.
  3. क्लाइंट वेब ऐप्लिकेशन यह चुनता है कि 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 स्पेसिफ़िकेशन के मुताबिक, एमपीडी फ़ाइल का इस्तेमाल वीडियो के लिए src के तौर पर किया जा सकता है. हालांकि, वेब डेवलपर को ज़्यादा सुविधा देने के लिए, ब्राउज़र वेंडर ने dash.js जैसी एमएसई का इस्तेमाल करने वाली JavaScript लाइब्रेरी के लिए, DASH की सहायता को छोड़ दिया है. JavaScript में DASH लागू करने से, ब्राउज़र अपडेट किए बिना अडैप्टेशन एल्गोरिदम को बेहतर बनाया जा सकता है. MSE का इस्तेमाल करके, ब्राउज़र में बदलाव किए बिना, अन्य मेनिफ़ेस्ट फ़ॉर्मैट और डिलीवरी के तरीकों के साथ भी एक्सपेरिमेंट किया जा सकता है. Google का Shaka Player, EME की सुविधा के साथ DASH क्लाइंट लागू करता है.

Mozilla Developer Network पर, वीडियो को सेगमेंट में बांटने और एमपीडी बनाने के लिए, WebM टूल और FFmpeg का इस्तेमाल करने के तरीके के बारे में निर्देश दिए गए हैं.

नतीजा

पैसे चुकाकर देखे जाने वाले वीडियो और ऑडियो को डिलीवर करने के लिए, वेब का इस्तेमाल बहुत तेज़ी से बढ़ रहा है. ऐसा लगता है कि हर नया डिवाइस, चाहे वह टैबलेट, गेम कंसोल, कनेक्टेड टीवी या सेट-टॉप बॉक्स हो, वह एचटीटीपी के ज़रिए कॉन्टेंट देने वाली मुख्य कंपनियों से मीडिया स्ट्रीम कर सकता है. <video> और <audio> के साथ अब 85%से ज़्यादा मोबाइल और डेस्कटॉप ब्राउज़र काम करते हैं. Cisco का अनुमान है कि 2017 तक ग्लोबल कंज्यूमर इंटरनेट ट्रैफ़िक का 80 से 90 प्रतिशत हिस्सा वीडियो से होगा. इस संदर्भ में, सुरक्षित कॉन्टेंट के डिस्ट्रिब्यूशन के लिए ब्राउज़र की सहायता का ज़्यादा से ज़्यादा इस्तेमाल किया जा सकता है. ऐसा इसलिए, क्योंकि ब्राउज़र वेंडर उन एपीआई के लिए सहायता को कम कर रहे हैं जिन पर ज़्यादातर मीडिया प्लग इन निर्भर हैं.

इसके बारे में और पढ़ें

खास जानकारी और स्टैंडर्ड

लेख