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

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

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

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

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

  • की सिस्टम: कॉन्टेंट की सुरक्षा (डीएमआर) का तरीका. ईएमई, क्लियर की के अलावा, खुद से पासकोड सिस्टम तय नहीं करता. क्लियर की के बारे में यहां ज़्यादा बताया गया है.
  • कॉन्टेंट डिक्रिप्शन मॉड्यूल (सीडीएम): यह एक क्लाइंट-साइड सॉफ़्टवेयर या हार्डवेयर सिस्टम है, जिसकी मदद से एन्क्रिप्ट (सुरक्षित) किए गए मीडिया को चलाया जा सकता है. Key System की तरह ही, 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. ऐप्लिकेशन, encrypted हैंडलर में मिले मीडिया डेटा को सीडीएम को पास करके, लाइसेंस का अनुरोध जनरेट करता है. ऐसा करने के लिए, MediaKeySession पर generateRequest() को कॉल किया जाता है.
  6. सीडीएम, message इवेंट को ट्रिगर करता है: लाइसेंस सर्वर से पासकोड पाने का अनुरोध.
  7. MediaKeySession ऑब्जेक्ट को message इवेंट मिलता है और ऐप्लिकेशन, लाइसेंस सर्वर को मैसेज भेजता है (उदाहरण के लिए, XHR के ज़रिए).
  8. ऐप्लिकेशन को लाइसेंस सर्वर से जवाब मिलता है और वह MediaKeySession के update() तरीके का इस्तेमाल करके, डेटा को सीडीएम को भेजता है.
  9. सीडीएम, लाइसेंस में मौजूद कुंजियों का इस्तेमाल करके मीडिया को डिक्रिप्ट करता है. मीडिया एलिमेंट से जुड़े MediaKey में मौजूद किसी भी सेशन से, मान्य कुंजी का इस्तेमाल किया जा सकता है. सीडीएम, कुंजी और नीति को ऐक्सेस करेगा. इनका इंडेक्स, कुंजी आईडी के हिसाब से किया जाएगा.
  10. मीडिया प्लेबैक फिर से शुरू हो जाता है.

वाह…

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

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

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

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

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

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

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

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

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

सामान्य एन्क्रिप्शन

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

यह लेगसी समाधानों से अलग है, जो सिर्फ़ पूरे वर्टिकल स्टैक के साथ काम करते हैं. इनमें एक क्लाइंट भी शामिल होता है, जिसमें अक्सर ऐप्लिकेशन रनटाइम भी शामिल होता है.

कॉमन एन्क्रिप्शन (CENC), ISO स्टैंडर्ड है. इसमें ISO BMFF के लिए सुरक्षा स्कीम तय की गई है. WebM पर भी इसी तरह का कॉन्सेप्ट लागू होता है.

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

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

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

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

HTMLMediaElement, बेहद आसान भाषा का इस्तेमाल करके कॉन्टेंट तैयार करने की सुविधा देता है.

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

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

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

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

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

MSE को simpl.info/mse पर जाकर देखा जा सकता है; इस उदाहरण के लिए, File API का इस्तेमाल करके WebM वीडियो को पांच हिस्सों में बांटा गया है. प्रोडक्शन ऐप्लिकेशन में, वीडियो के हिस्सों को 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);
  }
};

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

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

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

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

नतीजा

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

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

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

लेख