ईएमई क्या बकवास है?

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

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

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

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

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

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

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

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

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

  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. मीडिया प्लेबैक फिर से शुरू हो जाएगा.

ओह...

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

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

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

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

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

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

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

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

ईएमई किसी खास 'की सिस्टम' को ज़रूरी नहीं करता. मौजूदा डेस्कटॉप और मोबाइल ब्राउज़र में 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 लाइसेंस सर्वर से कुंजी हासिल करने वाले Widevine CDM का इस्तेमाल किया जा सकता है.

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

कॉमन एन्क्रिप्शन (सीईएनसी), आईएसओ बीएमएफ़एफ़ के लिए प्रोटेक्शन स्कीम तय करने वाला एक आईएसओ स्टैंडर्ड है. इसी तरह का सिद्धांत WebM पर लागू होता है.

कुंजी हटाएं

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

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

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

HTMLMediaElement एक ऐसा जीव है जो सामान्य तरीके से दिखता है.

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

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

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

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

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

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

सबसे पहले एक SourceBuffer बनाया जाता है:

var sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"');

इसके बाद, EngageBuffer() तरीके का इस्तेमाल करके हर हिस्से को जोड़कर पूरी मूवी को किसी वीडियो एलिमेंट के साथ 'स्ट्रीम' किया जाता है:

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 लेख में MSE के बारे में ज़्यादा जानें.

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

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

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

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

दूसरे शब्दों में कहें, तो 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 फ़ाइल से लिया गया है)

डीएएसएच की खास जानकारी के मुताबिक, एमपीडी फ़ाइल को वीडियो के लिए src के तौर पर इस्तेमाल किया जा सकता है. हालांकि, वेब डेवलपर को ज़्यादा सुविधा देने के लिए, ब्राउज़र वेंडर ने DASH को dash.js जैसे MSE का इस्तेमाल करके JavaScript लाइब्रेरी तक सीमित रखने का विकल्प चुना है. JavaScript में DASH को लागू करने पर, ब्राउज़र को अपडेट किए बिना भी एडॉप्शन एल्गोरिदम बेहतर हो जाता है. MSE का इस्तेमाल करने पर ब्राउज़र में बदलाव किए बिना, अन्य मेनिफ़ेस्ट फ़ॉर्मैट और डिलीवरी के तरीके इस्तेमाल किए जा सकते हैं. Google का Shaka Player, ईएमई की सुविधा के साथ DASH क्लाइंट लागू करता है.

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

नतीजा

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

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

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

लेख