এনক্রিপ্ট করা মিডিয়া এক্সটেনশনের ভূমিকা

এনক্রিপ্টেড মিডিয়া এক্সটেনশন (EME) একটি API প্রদান করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে এনক্রিপ্ট করা অডিও এবং ভিডিও প্লেব্যাকের অনুমতি দিতে সামগ্রী সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে।

অন্তর্নিহিত সুরক্ষা ব্যবস্থা নির্বিশেষে যেকোন ব্রাউজারে ব্যবহার করার জন্য একই অ্যাপ এবং এনক্রিপ্ট করা ফাইলগুলিকে সক্ষম করার জন্য EME ডিজাইন করা হয়েছে। আগেরটি প্রমিত API এবং প্রবাহ দ্বারা সম্ভব হয়েছে যখন পরবর্তীটি সাধারণ এনক্রিপশনের ধারণার দ্বারা সম্ভব হয়েছে৷

EME হল HTMLMediaElement স্পেসিফিকেশনের একটি এক্সটেনশন - তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হল EME-এর জন্য ব্রাউজার সমর্থন ঐচ্ছিক: যদি একটি ব্রাউজার এনক্রিপ্ট করা মিডিয়া সমর্থন না করে, তাহলে এটি এনক্রিপ্ট করা মিডিয়া চালাতে সক্ষম হবে না, কিন্তু HTML স্পেক কমপ্লায়েন্সের জন্য EME-এর প্রয়োজন নেই৷ EME স্পেক থেকে:

EME বাস্তবায়ন নিম্নলিখিত বাহ্যিক উপাদান ব্যবহার করে:

  • কী সিস্টেম: একটি বিষয়বস্তু সুরক্ষা (ডিআরএম) প্রক্রিয়া। EME ক্লিয়ার কী (নীচে সে সম্পর্কে আরও) ছাড়াও কী সিস্টেমগুলিকে সংজ্ঞায়িত করে না।
  • কন্টেন্ট ডিক্রিপশন মডিউল (CDM): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার মেকানিজম যা এনক্রিপ্ট করা মিডিয়ার প্লেব্যাক সক্ষম করে। কী সিস্টেমের মতো, ইএমই কোনো সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে যোগাযোগ করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস প্রদান করে।
  • লাইসেন্স (কী) সার্ভার: মিডিয়া ডিক্রিপ্ট করার জন্য কী প্রদান করতে একটি CDM এর সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনার দায়িত্ব আবেদনের।
  • প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য মিডিয়া এনকোড এবং এনক্রিপ্ট করে।

মনে রাখবেন যে EME ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কী পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে, কিন্তু ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করার জন্য কীগুলি পুনরুদ্ধার করা হয় (ঐচ্ছিকভাবে) ব্যবহারকারীকে প্রমাণীকরণ করার পরে। Netflix-এর মতো পরিষেবাগুলিকে অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন একজন ব্যবহারকারী অ্যাপ্লিকেশনটিতে সাইন ইন করেন, তখন অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুযোগ-সুবিধা নির্ধারণ করে।

EME কিভাবে কাজ করে?

নিম্নলিখিত কোড উদাহরণের সাথে মিল রেখে EME এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে রয়েছে:

  1. একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও চালানোর চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
  2. ব্রাউজার স্বীকার করে যে মিডিয়াটি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা ( initData ) সহ একটি encrypted ইভেন্ট ফায়ার করে৷
  3. অ্যাপ্লিকেশনটি encrypted ইভেন্ট পরিচালনা করে:
    1. যদি কোন MediaKeys অবজেক্ট মিডিয়া উপাদানের সাথে যুক্ত না থাকে, তাহলে প্রথমে একটি উপলব্ধ কী সিস্টেম নির্বাচন করুন navigator.requestMediaKeySystemAccess() ব্যবহার করে কী সিস্টেমগুলি উপলব্ধ তা পরীক্ষা করে দেখুন, তারপর একটি MediaKeySystemAccess অবজেক্টের মাধ্যমে একটি উপলব্ধ কী সিস্টেমের জন্য একটি MediaKeys অবজেক্ট তৈরি করুন। উল্লেখ্য যে MediaKeys অবজেক্টের সূচনা প্রথম encrypted ইভেন্টের আগে হওয়া উচিত। একটি লাইসেন্স সার্ভার URL প্রাপ্তি একটি উপলব্ধ কী সিস্টেম নির্বাচন স্বাধীনভাবে অ্যাপ্লিকেশন দ্বারা সম্পন্ন করা হয়. একটি MediaKeys অবজেক্ট একটি অডিও বা ভিডিও উপাদানের জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কী উপস্থাপন করে। এটি একটি সিডিএম দৃষ্টান্ত উপস্থাপন করে এবং সিডিএম-এ অ্যাক্সেস প্রদান করে, বিশেষত কী সেশন তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কী পেতে ব্যবহৃত হয়।
    2. একবার MediaKeys অবজেক্ট তৈরি হয়ে গেলে, এটিকে মিডিয়া উপাদানে বরাদ্দ করুন: setMediaKeys() একটি HTMLMediaElement-এর সাথে MediaKeys অবজেক্টকে সংযুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময়, অর্থাৎ ডিকোডিংয়ের সময় ব্যবহার করা যেতে পারে।
  4. অ্যাপটি MediaKeyscreateSession() কল করে একটি MediaKeySession তৈরি করে। এটি একটি MediaKeySession তৈরি করে, যা একটি লাইসেন্সের জীবনকাল এবং এর কী(গুলি) প্রতিনিধিত্ব করে।
  5. অ্যাপটি encrypted হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম-এ প্রেরণ করে, MediaKeySessiongenerateRequest() কল করে লাইসেন্সের অনুরোধ তৈরি করে।
  6. সিডিএম একটি message ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে একটি কী অর্জনের অনুরোধ।
  7. MediaKeySession অবজেক্ট message ইভেন্ট গ্রহণ করে এবং অ্যাপ্লিকেশন লাইসেন্স সার্ভারে একটি বার্তা পাঠায় (উদাহরণস্বরূপ, XHR এর মাধ্যমে)।
  8. অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া পায় এবং MediaKeySession এর update() পদ্ধতি ব্যবহার করে ডেটা CDM-তে পাঠায়।
  9. সিডিএম লাইসেন্সের কী ব্যবহার করে মিডিয়াকে ডিক্রিপ্ট করে। মিডিয়া উপাদানের সাথে যুক্ত MediaKey এর মধ্যে যেকোনো সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচীকৃত।
  10. মিডিয়া প্লেব্যাক আবার শুরু হয়।

উফ…

মনে রাখবেন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়ার সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনের সাথে অস্বচ্ছ: বার্তাগুলি শুধুমাত্র সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ স্তরটি দেখতে পারে যে সিডিএম কী ধরনের বার্তা পাঠাচ্ছে। লাইসেন্সের অনুরোধে সিডিএম-এর বৈধতা (এবং আস্থার সম্পর্ক) প্রমাণ রয়েছে এবং সেইসাথে ফলস্বরূপ লাইসেন্সে বিষয়বস্তু কী(গুলি) এনক্রিপ্ট করার সময় ব্যবহার করার জন্য একটি কী রয়েছে।

…কিন্তু সিডিএম আসলে কি করে?

একটি EME বাস্তবায়ন নিজেই মিডিয়া ডিক্রিপ্ট করার একটি উপায় প্রদান করে না: এটি কেবল একটি ওয়েব অ্যাপ্লিকেশনের জন্য সামগ্রী ডিক্রিপশন মডিউলগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য একটি API প্রদান করে।

সিডিএম আসলে যা করে তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না এবং একটি সিডিএম মিডিয়ার ডিকোডিং (ডিকম্প্রেশন) পাশাপাশি ডিক্রিপশন পরিচালনা করতে পারে। কমপক্ষে থেকে সবচেয়ে শক্তিশালী, সিডিএম কার্যকারিতার জন্য বেশ কয়েকটি সম্ভাব্য বিকল্প রয়েছে:

  • শুধুমাত্র ডিক্রিপশন, সাধারণ মিডিয়া পাইপলাইন ব্যবহার করে প্লেব্যাক সক্ষম করা, উদাহরণস্বরূপ একটি <video> উপাদানের মাধ্যমে।
  • ডিক্রিপশন এবং ডিকোডিং, রেন্ডারিংয়ের জন্য ব্রাউজারে ভিডিও ফ্রেম পাস করা।
  • ডিক্রিপশন এবং ডিকোডিং, সরাসরি হার্ডওয়্যারে রেন্ডারিং (উদাহরণস্বরূপ, GPU)।

একটি ওয়েব অ্যাপে সিডিএম উপলব্ধ করার একাধিক উপায় রয়েছে:

  • ব্রাউজার দিয়ে একটি সিডিএম বান্ডিল করুন।
  • আলাদাভাবে একটি সিডিএম বিতরণ করুন।
  • অপারেটিং সিস্টেমে একটি সিডিএম তৈরি করুন।
  • ফার্মওয়্যারে একটি সিডিএম অন্তর্ভুক্ত করুন।
  • হার্ডওয়্যারে একটি সিডিএম এম্বেড করুন।

কিভাবে একটি সিডিএম উপলব্ধ করা হয় তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না, তবে সমস্ত ক্ষেত্রে ব্রাউজার সিডিএম পরীক্ষা এবং প্রকাশের জন্য দায়ী।

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 CDM ব্যবহার করে একটি ব্রাউজারে চালানো যেতে পারে।

এটি লিগ্যাসি সমাধানগুলির বিপরীতে যা শুধুমাত্র একটি সম্পূর্ণ উল্লম্ব স্ট্যাকের সাথে কাজ করবে, একটি একক ক্লায়েন্ট সহ যা প্রায়শই একটি অ্যাপ্লিকেশন রানটাইম অন্তর্ভুক্ত করে।

কমন এনক্রিপশন (CENC) হল একটি ISO স্ট্যান্ডার্ড যা ISO BMFF-এর জন্য একটি সুরক্ষা স্কিম সংজ্ঞায়িত করে; একটি অনুরূপ ধারণা WebM এ প্রযোজ্য।

ক্লিয়ার কী

যদিও ইএমই ডিআরএম কার্যকারিতা সংজ্ঞায়িত করে না, তবে বিশেষত্ব বর্তমানে বাধ্যতামূলক করে যে EME সমর্থনকারী সমস্ত ব্রাউজারকে অবশ্যই ক্লিয়ার কী প্রয়োগ করতে হবে। এই সিস্টেমটি ব্যবহার করে, মিডিয়াকে একটি কী দিয়ে এনক্রিপ্ট করা যেতে পারে এবং তারপরে সেই কী প্রদান করে আবার চালানো যায়। ক্লিয়ার কী ব্রাউজারে তৈরি করা যেতে পারে: এটির জন্য আলাদা ডিক্রিপশন মডিউল ব্যবহারের প্রয়োজন নেই।

অনেক ধরনের বাণিজ্যিক সামগ্রীর জন্য ব্যবহার করার সম্ভাবনা না থাকলেও, EME সমর্থন করে এমন সমস্ত ব্রাউজার জুড়ে Clear Key সম্পূর্ণরূপে ইন্টারঅপারেবল। লাইসেন্স সার্ভার থেকে একটি বিষয়বস্তু কী অনুরোধ করার প্রয়োজন ছাড়াই এটি 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-এর জন্য Clear Key ব্যবহার করার জন্য একটি ভিডিও এনক্রিপ্ট করা যেতে পারে। বাণিজ্যিক পরিষেবাগুলিও উপলব্ধ (অন্তত ISO BMFF/MP4-এর জন্য) এবং অন্যান্য সমাধানগুলি তৈরি করা হচ্ছে৷

মিডিয়া সোর্স এক্সটেনশন (MSE)

HTMLMediaElement হল সরল সৌন্দর্যের একটি প্রাণী।

আমরা একটি src URL প্রদান করে মিডিয়া লোড, ডিকোড এবং প্লে করতে পারি:

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

মিডিয়া সোর্স API হল HTMLMediaElement-এর একটি এক্সটেনশন যা জাভাস্ক্রিপ্টকে ভিডিওর 'খণ্ডগুলি' থেকে প্লেব্যাকের জন্য স্ট্রীম তৈরি করার অনুমতি দিয়ে মিডিয়ার উৎসের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ সক্ষম করে। এটি পরিবর্তে অভিযোজিত স্ট্রিমিং এবং সময় পরিবর্তনের মতো কৌশলগুলিকে সক্ষম করে।

কেন MSE EME এর জন্য গুরুত্বপূর্ণ? কারণ সুরক্ষিত বিষয়বস্তু বিতরণের পাশাপাশি, বাণিজ্যিক বিষয়বস্তু প্রদানকারীরা অবশ্যই নেটওয়ার্কের অবস্থা এবং অন্যান্য প্রয়োজনীয়তার সাথে সামগ্রী বিতরণকে মানিয়ে নিতে সক্ষম হবেন। Netflix, উদাহরণস্বরূপ, নেটওয়ার্ক অবস্থার পরিবর্তনের সাথে সাথে গতিশীলভাবে স্ট্রিম বিটরেট পরিবর্তন করে। EME একটি MSE বাস্তবায়ন দ্বারা প্রদত্ত মিডিয়া স্ট্রীমগুলির প্লেব্যাকের সাথে কাজ করে, ঠিক যেমন এটি একটি src বৈশিষ্ট্যের মাধ্যমে সরবরাহ করা মিডিয়ার সাথে কাজ করে।

বিভিন্ন বিটরেটে এনকোড করা মিডিয়াকে কীভাবে খণ্ড ও প্লে ব্যাক করবেন? নীচের DASH বিভাগটি দেখুন।

আপনি simpl.info/mse- এ MSE কাজ করতে দেখতে পারেন; এই উদাহরণের উদ্দেশ্যে, একটি WebM ভিডিও ফাইল 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);
  }
};

HTML5 Rocks নিবন্ধে MSE সম্পর্কে আরও জানুন।

ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH)

মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল - আপনি যে যাই বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। বহু-ডিভাইস জগতে ব্যান্ডউইথের সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে মোকাবিলা করার জন্য গতিশীল, অভিযোজিত বিতরণ অত্যন্ত গুরুত্বপূর্ণ।

DASH (ওরফে MPEG-DASH) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্যই ফ্ল্যাকি বিশ্বে সর্বোত্তম সম্ভাব্য মিডিয়া ডেলিভারি সক্ষম করার জন্য ডিজাইন করা হয়েছে৷ অন্যান্য বেশ কয়েকটি প্রযুক্তি একই রকম কিছু করে - যেমন অ্যাপলের HTTP লাইভ স্ট্রিমিং (HLS) এবং মাইক্রোসফ্টের স্মুথ স্ট্রিমিং - কিন্তু DASH হল HTTP-এর মাধ্যমে অভিযোজিত বিটরেট স্ট্রিমিংয়ের একমাত্র পদ্ধতি যা একটি ওপেন স্ট্যান্ডার্ডের উপর ভিত্তি করে। DASH ইতিমধ্যেই YouTube এর মতো সাইট দ্বারা ব্যবহার করা হচ্ছে৷

EME এবং MSE এর সাথে এর কি সম্পর্ক? MSE-ভিত্তিক DASH বাস্তবায়ন একটি ম্যানিফেস্টকে পার্স করতে পারে, একটি উপযুক্ত বিটরেটে ভিডিওর সেগমেন্ট ডাউনলোড করতে পারে, এবং ক্ষুধার্ত হয়ে গেলে একটি ভিডিও উপাদানে তাদের খাওয়াতে পারে - বিদ্যমান HTTP পরিকাঠামো ব্যবহার করে।

অন্য কথায়, DASH বাণিজ্যিক সামগ্রী প্রদানকারীদের সুরক্ষিত সামগ্রীর অভিযোজিত স্ট্রিমিং করতে সক্ষম করে।

DASH টিনের উপর যা বলে তা করে:

  • গতিশীল: পরিবর্তিত পরিস্থিতিতে সাড়া দেয়।
  • অভিযোজিত: একটি উপযুক্ত অডিও বা ভিডিও বিটরেট প্রদান করতে অভিযোজিত হয়।
  • স্ট্রিমিং: স্ট্রিমিংয়ের পাশাপাশি ডাউনলোডের অনুমতি দেয়।
  • HTTP: একটি ঐতিহ্যগত স্ট্রিমিং সার্ভারের অসুবিধা ছাড়াই HTTP এর সুবিধার সাথে সামগ্রী বিতরণ সক্ষম করে।

বিবিসি DASH ব্যবহার করে পরীক্ষামূলক স্ট্রীম সরবরাহ করা শুরু করেছে:

সংক্ষিপ্ত করতে:

  1. মিডিয়া বিভিন্ন বিটরেট এ এনকোড করা হয়.
  2. বিভিন্ন বিটরেট ফাইল একটি HTTP সার্ভার থেকে উপলব্ধ করা হয়.
  3. একটি ক্লায়েন্ট ওয়েব অ্যাপ বেছে নেয় কোন বিটরেট পুনরুদ্ধার করতে হবে এবং DASH এর সাথে প্লে ব্যাক করতে হবে।

ভিডিও বিভাজন প্রক্রিয়ার অংশ হিসাবে, একটি XML ম্যানিফেস্ট যা মিডিয়া প্রেজেন্টেশন বর্ণনা (MPD) নামে পরিচিত প্রোগ্রামগতভাবে তৈরি করা হয়। এটি সময়কাল এবং URL সহ অভিযোজন সেট এবং উপস্থাপনা বর্ণনা করে। একটি MPD এই মত দেখায়:

<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>

(এই XMLটি YouTube DASH ডেমো প্লেয়ারের জন্য ব্যবহৃত .mpd ফাইল থেকে নেওয়া হয়েছে)

DASH স্পেক অনুসারে, একটি MPD ফাইল তত্ত্বগতভাবে একটি ভিডিওর জন্য src হিসাবে ব্যবহার করা যেতে পারে। যাইহোক, ওয়েব ডেভেলপারদের আরও নমনীয়তা দেওয়ার জন্য, ব্রাউজার বিক্রেতারা DASH সমর্থনকে MSE যেমন dash.js ব্যবহার করে জাভাস্ক্রিপ্ট লাইব্রেরি পর্যন্ত ছেড়ে দেওয়া বেছে নিয়েছে। জাভাস্ক্রিপ্টে DASH প্রয়োগ করা ব্রাউজার আপডেটের প্রয়োজন ছাড়াই অভিযোজন অ্যালগরিদমকে বিকশিত হতে দেয়। MSE ব্যবহার করা ব্রাউজার পরিবর্তনের প্রয়োজন ছাড়াই বিকল্প ম্যানিফেস্ট ফরম্যাট এবং ডেলিভারি মেকানিজম নিয়ে পরীক্ষা-নিরীক্ষার অনুমতি দেয়। Google এর শাকা প্লেয়ার EME সমর্থন সহ একটি DASH ক্লায়েন্ট প্রয়োগ করে৷

Mozilla ডেভেলপার নেটওয়ার্কের নির্দেশাবলী রয়েছে কিভাবে WebM টুল এবং FFmpeg ভিডিওকে সেগমেন্ট করতে এবং একটি MPD তৈরি করতে ব্যবহার করতে হয়।

উপসংহার

ভিডিও এবং অডিওর জন্য অর্থ প্রদানের জন্য ওয়েবের ব্যবহার ব্যাপক হারে বাড়ছে। মনে হচ্ছে প্রতিটি নতুন ডিভাইস, তা একটি ট্যাবলেট, গেম কনসোল, সংযুক্ত টিভি বা সেট-টপ বক্সই হোক না কেন, HTTP এর মাধ্যমে প্রধান বিষয়বস্তু প্রদানকারীদের থেকে মিডিয়া স্ট্রিম করতে সক্ষম। 85% এরও বেশি মোবাইল এবং ডেস্কটপ ব্রাউজারগুলি এখন <video> এবং <audio> সমর্থন করে, এবং সিসকো অনুমান করে যে ভিডিও 2017 সালের মধ্যে বিশ্বব্যাপী গ্রাহক ইন্টারনেট ট্রাফিকের 80 থেকে 90 শতাংশ হবে। এই প্রসঙ্গে, সুরক্ষিত সামগ্রী বিতরণের জন্য ব্রাউজার সমর্থন ক্রমবর্ধমান তাৎপর্যপূর্ণ হতে পারে, কারণ ব্রাউজার বিক্রেতারা API-এর জন্য সমর্থন কমিয়ে দেয় যা বেশিরভাগ মিডিয়াতে পুনরায় প্লাগ করে।

আরও পড়া

চশমা এবং মান

প্রবন্ধ

,

এনক্রিপ্টেড মিডিয়া এক্সটেনশন (EME) একটি API প্রদান করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে এনক্রিপ্ট করা অডিও এবং ভিডিও প্লেব্যাকের অনুমতি দিতে সামগ্রী সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে।

অন্তর্নিহিত সুরক্ষা ব্যবস্থা নির্বিশেষে যেকোন ব্রাউজারে ব্যবহার করার জন্য একই অ্যাপ এবং এনক্রিপ্ট করা ফাইলগুলিকে সক্ষম করার জন্য EME ডিজাইন করা হয়েছে। আগেরটি প্রমিত API এবং প্রবাহ দ্বারা সম্ভব হয়েছে যখন পরবর্তীটি সাধারণ এনক্রিপশনের ধারণার দ্বারা সম্ভব হয়েছে৷

EME হল HTMLMediaElement স্পেসিফিকেশনের একটি এক্সটেনশন - তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হল EME-এর জন্য ব্রাউজার সমর্থন ঐচ্ছিক: যদি একটি ব্রাউজার এনক্রিপ্ট করা মিডিয়া সমর্থন না করে, তাহলে এটি এনক্রিপ্ট করা মিডিয়া চালাতে সক্ষম হবে না, কিন্তু HTML স্পেক কমপ্লায়েন্সের জন্য EME-এর প্রয়োজন নেই৷ EME স্পেক থেকে:

EME বাস্তবায়ন নিম্নলিখিত বাহ্যিক উপাদান ব্যবহার করে:

  • কী সিস্টেম: একটি বিষয়বস্তু সুরক্ষা (ডিআরএম) প্রক্রিয়া। EME ক্লিয়ার কী (নীচে সে সম্পর্কে আরও) ছাড়াও কী সিস্টেমগুলিকে সংজ্ঞায়িত করে না।
  • কন্টেন্ট ডিক্রিপশন মডিউল (CDM): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার মেকানিজম যা এনক্রিপ্ট করা মিডিয়ার প্লেব্যাক সক্ষম করে। কী সিস্টেমের মতো, ইএমই কোনো সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে যোগাযোগ করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস প্রদান করে।
  • লাইসেন্স (কী) সার্ভার: মিডিয়া ডিক্রিপ্ট করার জন্য কী প্রদান করতে একটি CDM এর সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনার দায়িত্ব আবেদনের।
  • প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য মিডিয়া এনকোড এবং এনক্রিপ্ট করে।

মনে রাখবেন যে EME ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কী পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে, কিন্তু ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করার জন্য কীগুলি পুনরুদ্ধার করা হয় (ঐচ্ছিকভাবে) ব্যবহারকারীকে প্রমাণীকরণ করার পরে। Netflix-এর মতো পরিষেবাগুলিকে অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন একজন ব্যবহারকারী অ্যাপ্লিকেশনটিতে সাইন ইন করেন, তখন অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুযোগ-সুবিধা নির্ধারণ করে।

EME কিভাবে কাজ করে?

নিম্নলিখিত কোড উদাহরণের সাথে মিল রেখে EME এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে রয়েছে:

  1. একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও চালানোর চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
  2. ব্রাউজার স্বীকার করে যে মিডিয়াটি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা ( initData ) সহ একটি encrypted ইভেন্ট ফায়ার করে৷
  3. অ্যাপ্লিকেশনটি encrypted ইভেন্ট পরিচালনা করে:
    1. যদি কোন MediaKeys অবজেক্ট মিডিয়া উপাদানের সাথে যুক্ত না থাকে, তাহলে প্রথমে একটি উপলব্ধ কী সিস্টেম নির্বাচন করুন navigator.requestMediaKeySystemAccess() ব্যবহার করে কী সিস্টেমগুলি উপলব্ধ তা পরীক্ষা করে দেখুন, তারপর একটি MediaKeySystemAccess অবজেক্টের মাধ্যমে একটি উপলব্ধ কী সিস্টেমের জন্য একটি MediaKeys অবজেক্ট তৈরি করুন। উল্লেখ্য যে MediaKeys অবজেক্টের সূচনা প্রথম encrypted ইভেন্টের আগে হওয়া উচিত। একটি লাইসেন্স সার্ভার URL প্রাপ্তি একটি উপলব্ধ কী সিস্টেম নির্বাচন স্বাধীনভাবে অ্যাপ্লিকেশন দ্বারা সম্পন্ন করা হয়. একটি MediaKeys অবজেক্ট একটি অডিও বা ভিডিও উপাদানের জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কী উপস্থাপন করে। এটি একটি সিডিএম দৃষ্টান্ত উপস্থাপন করে এবং সিডিএম-এ অ্যাক্সেস প্রদান করে, বিশেষত কী সেশন তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কী পেতে ব্যবহৃত হয়।
    2. একবার MediaKeys অবজেক্ট তৈরি হয়ে গেলে, এটিকে মিডিয়া উপাদানে বরাদ্দ করুন: setMediaKeys() একটি HTMLMediaElement-এর সাথে MediaKeys অবজেক্টকে সংযুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময়, অর্থাৎ ডিকোডিংয়ের সময় ব্যবহার করা যেতে পারে।
  4. অ্যাপটি MediaKeyscreateSession() কল করে একটি MediaKeySession তৈরি করে। এটি একটি MediaKeySession তৈরি করে, যা একটি লাইসেন্সের জীবনকাল এবং এর কী(গুলি) প্রতিনিধিত্ব করে।
  5. অ্যাপটি encrypted হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম-এ প্রেরণ করে, MediaKeySessiongenerateRequest() কল করে লাইসেন্সের অনুরোধ তৈরি করে।
  6. সিডিএম একটি message ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে একটি কী অর্জনের অনুরোধ।
  7. MediaKeySession অবজেক্ট message ইভেন্ট গ্রহণ করে এবং অ্যাপ্লিকেশন লাইসেন্স সার্ভারে একটি বার্তা পাঠায় (উদাহরণস্বরূপ, XHR এর মাধ্যমে)।
  8. অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া পায় এবং MediaKeySession এর update() পদ্ধতি ব্যবহার করে ডেটা CDM-তে পাঠায়।
  9. সিডিএম লাইসেন্সের কী ব্যবহার করে মিডিয়াকে ডিক্রিপ্ট করে। মিডিয়া উপাদানের সাথে যুক্ত MediaKey এর মধ্যে যেকোনো সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচীকৃত।
  10. মিডিয়া প্লেব্যাক আবার শুরু হয়।

উফ…

মনে রাখবেন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়ার সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনের সাথে অস্বচ্ছ: বার্তাগুলি শুধুমাত্র সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ স্তরটি দেখতে পারে যে সিডিএম কী ধরনের বার্তা পাঠাচ্ছে। লাইসেন্সের অনুরোধে সিডিএম-এর বৈধতা (এবং আস্থার সম্পর্ক) প্রমাণ রয়েছে এবং সেইসাথে ফলস্বরূপ লাইসেন্সে বিষয়বস্তু কী(গুলি) এনক্রিপ্ট করার সময় ব্যবহার করার জন্য একটি কী রয়েছে।

…কিন্তু সিডিএম আসলে কি করে?

একটি EME বাস্তবায়ন নিজেই মিডিয়া ডিক্রিপ্ট করার একটি উপায় প্রদান করে না: এটি কেবল একটি ওয়েব অ্যাপ্লিকেশনের জন্য সামগ্রী ডিক্রিপশন মডিউলগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য একটি API প্রদান করে।

সিডিএম আসলে যা করে তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না এবং একটি সিডিএম মিডিয়ার ডিকোডিং (ডিকম্প্রেশন) পাশাপাশি ডিক্রিপশন পরিচালনা করতে পারে। কমপক্ষে থেকে সবচেয়ে শক্তিশালী, সিডিএম কার্যকারিতার জন্য বেশ কয়েকটি সম্ভাব্য বিকল্প রয়েছে:

  • শুধুমাত্র ডিক্রিপশন, সাধারণ মিডিয়া পাইপলাইন ব্যবহার করে প্লেব্যাক সক্ষম করা, উদাহরণস্বরূপ একটি <video> উপাদানের মাধ্যমে।
  • ডিক্রিপশন এবং ডিকোডিং, রেন্ডারিংয়ের জন্য ব্রাউজারে ভিডিও ফ্রেম পাস করা।
  • ডিক্রিপশন এবং ডিকোডিং, সরাসরি হার্ডওয়্যারে রেন্ডারিং (উদাহরণস্বরূপ, GPU)।

একটি ওয়েব অ্যাপে সিডিএম উপলব্ধ করার একাধিক উপায় রয়েছে:

  • ব্রাউজার দিয়ে একটি সিডিএম বান্ডিল করুন।
  • আলাদাভাবে একটি সিডিএম বিতরণ করুন।
  • অপারেটিং সিস্টেমে একটি সিডিএম তৈরি করুন।
  • ফার্মওয়্যারে একটি সিডিএম অন্তর্ভুক্ত করুন।
  • হার্ডওয়্যারে একটি সিডিএম এম্বেড করুন।

কিভাবে একটি সিডিএম উপলব্ধ করা হয় তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না, তবে সমস্ত ক্ষেত্রে ব্রাউজার সিডিএম পরীক্ষা এবং প্রকাশের জন্য দায়ী।

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 CDM ব্যবহার করে একটি ব্রাউজারে চালানো যেতে পারে।

এটি লিগ্যাসি সমাধানগুলির বিপরীতে যা শুধুমাত্র একটি সম্পূর্ণ উল্লম্ব স্ট্যাকের সাথে কাজ করবে, একটি একক ক্লায়েন্ট সহ যা প্রায়শই একটি অ্যাপ্লিকেশন রানটাইম অন্তর্ভুক্ত করে।

কমন এনক্রিপশন (CENC) হল একটি ISO স্ট্যান্ডার্ড যা ISO BMFF-এর জন্য একটি সুরক্ষা স্কিম সংজ্ঞায়িত করে; একটি অনুরূপ ধারণা WebM এ প্রযোজ্য।

ক্লিয়ার কী

যদিও ইএমই ডিআরএম কার্যকারিতা সংজ্ঞায়িত করে না, তবে বিশেষত্ব বর্তমানে বাধ্যতামূলক করে যে EME সমর্থনকারী সমস্ত ব্রাউজারকে অবশ্যই ক্লিয়ার কী প্রয়োগ করতে হবে। এই সিস্টেমটি ব্যবহার করে, মিডিয়াকে একটি কী দিয়ে এনক্রিপ্ট করা যেতে পারে এবং তারপরে সেই কী প্রদান করে আবার চালানো যায়। ক্লিয়ার কী ব্রাউজারে তৈরি করা যেতে পারে: এটির জন্য আলাদা ডিক্রিপশন মডিউল ব্যবহারের প্রয়োজন নেই।

অনেক ধরনের বাণিজ্যিক সামগ্রীর জন্য ব্যবহার করার সম্ভাবনা না থাকলেও, EME সমর্থন করে এমন সমস্ত ব্রাউজার জুড়ে Clear Key সম্পূর্ণরূপে ইন্টারঅপারেবল। লাইসেন্স সার্ভার থেকে একটি বিষয়বস্তু কী অনুরোধ করার প্রয়োজন ছাড়াই এটি 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-এর জন্য Clear Key ব্যবহার করার জন্য একটি ভিডিও এনক্রিপ্ট করা যেতে পারে। বাণিজ্যিক পরিষেবাগুলিও উপলব্ধ (অন্তত ISO BMFF/MP4-এর জন্য) এবং অন্যান্য সমাধানগুলি তৈরি করা হচ্ছে৷

মিডিয়া সোর্স এক্সটেনশন (MSE)

HTMLMediaElement হল সরল সৌন্দর্যের একটি প্রাণী।

আমরা একটি src URL প্রদান করে মিডিয়া লোড, ডিকোড এবং প্লে করতে পারি:

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

মিডিয়া সোর্স API হল HTMLMediaElement-এর একটি এক্সটেনশন যা জাভাস্ক্রিপ্টকে ভিডিওর 'খণ্ডগুলি' থেকে প্লেব্যাকের জন্য স্ট্রীম তৈরি করার অনুমতি দিয়ে মিডিয়ার উৎসের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ সক্ষম করে। এটি পরিবর্তে অভিযোজিত স্ট্রিমিং এবং সময় পরিবর্তনের মতো কৌশলগুলিকে সক্ষম করে।

কেন MSE EME এর জন্য গুরুত্বপূর্ণ? কারণ সুরক্ষিত বিষয়বস্তু বিতরণের পাশাপাশি, বাণিজ্যিক বিষয়বস্তু প্রদানকারীরা অবশ্যই নেটওয়ার্কের অবস্থা এবং অন্যান্য প্রয়োজনীয়তার সাথে সামগ্রী বিতরণকে মানিয়ে নিতে সক্ষম হবেন। Netflix, উদাহরণস্বরূপ, নেটওয়ার্ক অবস্থার পরিবর্তনের সাথে সাথে গতিশীলভাবে স্ট্রিম বিটরেট পরিবর্তন করে। EME একটি MSE বাস্তবায়ন দ্বারা প্রদত্ত মিডিয়া স্ট্রীমগুলির প্লেব্যাকের সাথে কাজ করে, ঠিক যেমন এটি একটি src বৈশিষ্ট্যের মাধ্যমে সরবরাহ করা মিডিয়ার সাথে কাজ করে।

বিভিন্ন বিটরেটে এনকোড করা মিডিয়াকে কীভাবে খণ্ড ও প্লে ব্যাক করবেন? নীচের DASH বিভাগটি দেখুন।

আপনি simpl.info/mse- এ MSE কাজ করতে দেখতে পারেন; এই উদাহরণের উদ্দেশ্যে, একটি WebM ভিডিও ফাইল 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);
  }
};

HTML5 Rocks নিবন্ধে MSE সম্পর্কে আরও জানুন।

ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH)

মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল - আপনি যে যাই বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। বহু-ডিভাইস জগতে ব্যান্ডউইথের সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে মোকাবিলা করার জন্য গতিশীল, অভিযোজিত বিতরণ অত্যন্ত গুরুত্বপূর্ণ।

DASH (ওরফে MPEG-DASH) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্যই ফ্ল্যাকি বিশ্বে সর্বোত্তম সম্ভাব্য মিডিয়া ডেলিভারি সক্ষম করার জন্য ডিজাইন করা হয়েছে৷ অন্যান্য বেশ কয়েকটি প্রযুক্তি একই রকম কিছু করে - যেমন অ্যাপলের HTTP লাইভ স্ট্রিমিং (HLS) এবং মাইক্রোসফ্টের স্মুথ স্ট্রিমিং - কিন্তু DASH হল HTTP-এর মাধ্যমে অভিযোজিত বিটরেট স্ট্রিমিংয়ের একমাত্র পদ্ধতি যা একটি ওপেন স্ট্যান্ডার্ডের উপর ভিত্তি করে। DASH ইতিমধ্যেই YouTube এর মতো সাইট দ্বারা ব্যবহার করা হচ্ছে৷

EME এবং MSE এর সাথে এর কি সম্পর্ক? MSE-ভিত্তিক DASH বাস্তবায়ন একটি ম্যানিফেস্টকে পার্স করতে পারে, একটি উপযুক্ত বিটরেটে ভিডিওর সেগমেন্ট ডাউনলোড করতে পারে, এবং ক্ষুধার্ত হয়ে গেলে একটি ভিডিও উপাদানে তাদের খাওয়াতে পারে - বিদ্যমান HTTP পরিকাঠামো ব্যবহার করে।

অন্য কথায়, DASH বাণিজ্যিক সামগ্রী প্রদানকারীদের সুরক্ষিত সামগ্রীর অভিযোজিত স্ট্রিমিং করতে সক্ষম করে।

DASH টিনের উপর যা বলে তা করে:

  • গতিশীল: পরিবর্তিত পরিস্থিতিতে সাড়া দেয়।
  • অভিযোজিত: একটি উপযুক্ত অডিও বা ভিডিও বিটরেট প্রদান করতে অভিযোজিত হয়।
  • স্ট্রিমিং: স্ট্রিমিংয়ের পাশাপাশি ডাউনলোডের অনুমতি দেয়।
  • HTTP: একটি ঐতিহ্যগত স্ট্রিমিং সার্ভারের অসুবিধা ছাড়াই HTTP এর সুবিধার সাথে সামগ্রী বিতরণ সক্ষম করে।

বিবিসি DASH ব্যবহার করে পরীক্ষামূলক স্ট্রীম সরবরাহ করা শুরু করেছে:

সংক্ষিপ্ত করতে:

  1. মিডিয়া বিভিন্ন বিটরেট এ এনকোড করা হয়.
  2. বিভিন্ন বিটরেট ফাইল একটি HTTP সার্ভার থেকে উপলব্ধ করা হয়.
  3. একটি ক্লায়েন্ট ওয়েব অ্যাপ বেছে নেয় কোন বিটরেট পুনরুদ্ধার করতে হবে এবং DASH এর সাথে প্লে ব্যাক করতে হবে।

ভিডিও বিভাজন প্রক্রিয়ার অংশ হিসাবে, একটি XML ম্যানিফেস্ট যা মিডিয়া প্রেজেন্টেশন বর্ণনা (MPD) নামে পরিচিত প্রোগ্রামগতভাবে তৈরি করা হয়। এটি সময়সীমা এবং ইউআরএল সহ অভিযোজন সেট এবং উপস্থাপনা বর্ণনা করে। একটি এমপিডি দেখতে এরকম:

<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>

(এই এক্সএমএল ইউটিউব ড্যাশ ডেমো প্লেয়ারের জন্য ব্যবহৃত .mpd ফাইল থেকে নেওয়া হয়েছে)

ড্যাশ স্পেকের মতে, একটি এমপিডি ফাইল তাত্ত্বিকভাবে একটি ভিডিওর জন্য src হিসাবে ব্যবহার করা যেতে পারে। যাইহোক, ওয়েব বিকাশকারীদের আরও নমনীয়তা দেওয়ার জন্য, ব্রাউজার বিক্রেতারা ড্যাশ.জেএসের মতো এমএসই ব্যবহার করে জাভাস্ক্রিপ্ট লাইব্রেরিতে ড্যাশ সমর্থন ছেড়ে দেওয়ার পরিবর্তে বেছে নিয়েছেন। জাভাস্ক্রিপ্টে ড্যাশ প্রয়োগ করা ব্রাউজারের আপডেটের প্রয়োজন ছাড়াই অভিযোজন অ্যালগরিদমকে বিকশিত হতে দেয়। এমএসই ব্যবহার করে ব্রাউজারের পরিবর্তনের প্রয়োজন ছাড়াই বিকল্প ম্যানিফেস্ট ফর্ম্যাট এবং বিতরণ প্রক্রিয়াগুলির সাথেও পরীক্ষার অনুমতি দেয়। গুগলের শাকা প্লেয়ার ইএমই সমর্থন সহ একটি ড্যাশ ক্লায়েন্ট প্রয়োগ করে।

মোজিলা বিকাশকারী নেটওয়ার্কের ভিডিওটি বিভাগ এবং এমপিডি তৈরি করতে কীভাবে ওয়েবএম সরঞ্জাম এবং এফএফএমপিইজি ব্যবহার করতে হয় সে সম্পর্কে নির্দেশাবলী রয়েছে

উপসংহার

ভিডিও এবং অডিও সরবরাহ করতে ওয়েবের ব্যবহার বিশাল হারে বাড়ছে। দেখে মনে হচ্ছে যে প্রতিটি নতুন ডিভাইস, এটি কোনও ট্যাবলেট, গেম কনসোল, সংযুক্ত টিভি বা সেট-টপ বক্স, এইচটিটিপি-র মাধ্যমে প্রধান সামগ্রী সরবরাহকারীদের কাছ থেকে মিডিয়া স্ট্রিম করতে সক্ষম। 85% এরও বেশি মোবাইল এবং ডেস্কটপ ব্রাউজারগুলি এখন <video> এবং <audio> অডিও> সমর্থন করে এবং সিসকো অনুমান করে যে ভিডিওটি 2017 সালের মধ্যে গ্লোবাল ভোক্তা ইন্টারনেট ট্র্যাফিকের 80 থেকে 90 শতাংশ হবে।

আরও পড়া

চশমা এবং মান

প্রবন্ধ

,

এনক্রিপ্টড মিডিয়া এক্সটেনশনস (ইএমই) একটি এপিআই সরবরাহ করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে সামগ্রী সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে, এনক্রিপ্ট করা অডিও এবং ভিডিওর প্লেব্যাকের অনুমতি দেয়।

অন্তর্নিহিত সুরক্ষা সিস্টেম নির্বিশেষে ইএমই একই অ্যাপ্লিকেশন এবং এনক্রিপ্ট করা ফাইলগুলি কোনও ব্রাউজারে ব্যবহার করার জন্য ডিজাইন করা হয়েছে। পূর্ববর্তীটি স্ট্যান্ডার্ডাইজড এপিআই এবং প্রবাহ দ্বারা সম্ভব হয় যখন সাধারণ এনক্রিপশন ধারণার দ্বারা পরবর্তীটি সম্ভব হয়।

EME হ'ল HTMLMediaElement স্পেসিফিকেশনের একটি এক্সটেনশন - তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হ'ল ইএমইর জন্য ব্রাউজার সমর্থন al চ্ছিক: যদি কোনও ব্রাউজার এনক্রিপ্ট করা মিডিয়া সমর্থন না করে তবে এটি এনক্রিপ্ট করা মিডিয়া খেলতে সক্ষম হবে না, তবে এইচটিএমএল স্পেস কমপ্লায়েন্সের জন্য EME প্রয়োজন হয় না। ইএমই স্পেক থেকে:

ইএমই বাস্তবায়নগুলি নিম্নলিখিত বাহ্যিক উপাদানগুলি ব্যবহার করে:

  • কী সিস্টেম: একটি সামগ্রী সুরক্ষা (ডিআরএম) প্রক্রিয়া। ইএমই ক্লিয়ার কী (নীচের সম্পর্কে আরও) বাদে মূল সিস্টেমগুলি নিজেরাই সংজ্ঞায়িত করে না।
  • সামগ্রী ডিক্রিপশন মডিউল (সিডিএম): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার প্রক্রিয়া যা এনক্রিপ্ট করা মিডিয়াগুলির প্লেব্যাক সক্ষম করে। কী সিস্টেমগুলির মতো, EME কোনও সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস সরবরাহ করে।
  • লাইসেন্স (কী) সার্ভার: ডিক্রিপ্ট মিডিয়াগুলিতে কী সরবরাহ করতে একটি সিডিএমের সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনা হ'ল আবেদনের দায়িত্ব।
  • প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য এনকোডস এবং এনক্রিপ্টস মিডিয়া।

নোট করুন যে ইএমই ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কীগুলি পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে তবে ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করতে কীগুলির পুনরুদ্ধার (ally চ্ছিকভাবে) কোনও ব্যবহারকারীকে প্রমাণীকরণের পরে ঘটে। নেটফ্লিক্সের মতো পরিষেবাগুলি অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন কোনও ব্যবহারকারী অ্যাপ্লিকেশনটিতে স্বাক্ষর করে, অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুবিধাগুলি নির্ধারণ করে।

ইএমই কীভাবে কাজ করে?

নিম্নলিখিত কোড উদাহরণের সাথে সম্পর্কিত, EME এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে:

  1. একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও খেলতে চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
  2. ব্রাউজারটি স্বীকৃতি দিয়েছে যে মিডিয়াগুলি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা ( initData ) সহ একটি encrypted ইভেন্টে আগুন লাগায়।
  3. অ্যাপ্লিকেশনটি encrypted ইভেন্টটি পরিচালনা করে:
    1. যদি কোনও MediaKeys অবজেক্ট মিডিয়া উপাদানগুলির সাথে সম্পর্কিত না হয় তবে প্রথমে কোন কী সিস্টেমগুলি উপলভ্য তা পরীক্ষা করার জন্য প্রথমে navigator.requestMediaKeySystemAccess() ব্যবহার করে একটি উপলভ্য কী সিস্টেম নির্বাচন করুন, তারপরে একটি MediaKeySystemAccess অবজেক্টের মাধ্যমে উপলব্ধ কী সিস্টেমের জন্য একটি MediaKeys অবজেক্ট তৈরি করুন। নোট করুন যে প্রথম encrypted ইভেন্টের আগে মিডিয়াকিজ অবজেক্টের সূচনা হওয়া উচিত। লাইসেন্স সার্ভার ইউআরএল পাওয়া অ্যাপটি একটি উপলভ্য কী সিস্টেম নির্বাচন করার জন্য স্বাধীনভাবে সম্পন্ন করে। একটি MediaKeys অবজেক্ট একটি অডিও বা ভিডিও উপাদানটির জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কীগুলি উপস্থাপন করে। এটি একটি সিডিএম উদাহরণ উপস্থাপন করে এবং সিডিএম -তে অ্যাক্সেস সরবরাহ করে, বিশেষত কী সেশনগুলি তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কীগুলি পেতে ব্যবহৃত হয়।
    2. একবার MediaKeys অবজেক্টটি তৈরি হয়ে গেলে, এটি মিডিয়া উপাদানকে নির্ধারণ করুন: setMediaKeys() MediaKeys অবজেক্টকে এইচটিএমএলমিডিয়েলিমেন্টের সাথে যুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময় ব্যবহার করা যায়, যেমন ডিকোডিংয়ের সময়।
  4. অ্যাপ্লিকেশনটি MediaKeys createSession() কল করে একটি MediaKeySession তৈরি করে। এটি একটি MediaKeySession তৈরি করে, যা লাইসেন্সের আজীবন এবং এর কী (গুলি) উপস্থাপন করে।
  5. অ্যাপ্লিকেশনটি encrypted হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম -এ পাস করে লাইসেন্স অনুরোধ উত্পন্ন করে, MediaKeySession generateRequest() কল করে।
  6. সিডিএম একটি message ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে কী অর্জনের জন্য একটি অনুরোধ।
  7. MediaKeySession অবজেক্টটি message ইভেন্টটি গ্রহণ করে এবং অ্যাপ্লিকেশনটি লাইসেন্স সার্ভারে একটি বার্তা প্রেরণ করে (উদাহরণস্বরূপ এক্সএইচআর এর মাধ্যমে)।
  8. অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া গ্রহণ করে এবং MediaKeySession update() পদ্ধতি ব্যবহার করে সিডিএম -তে ডেটা পাস করে।
  9. সিডিএম লাইসেন্সের কীগুলি ব্যবহার করে মিডিয়া ডিক্রিপ্ট করে। মিডিয়া উপাদানগুলির সাথে সম্পর্কিত MediaKey মধ্যে যে কোনও সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতিটি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচকযুক্ত।
  10. মিডিয়া প্লেব্যাক পুনরায় শুরু করে।

উফ…

নোট করুন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়াটিতে সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনটির কাছে অস্বচ্ছ: বার্তাগুলি কেবল সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ্লিকেশন স্তরটি সিডিএম কী ধরণের বার্তা প্রেরণ করছে তা দেখতে পারে। লাইসেন্স অনুরোধে সিডিএমের বৈধতা (এবং বিশ্বাসের সম্পর্ক) এর প্রমাণ রয়েছে পাশাপাশি ফলস্বরূপ লাইসেন্সে সামগ্রী কী (গুলি) এনক্রিপ্ট করার সময় ব্যবহারের মূল কী রয়েছে।

… তবে সিডিএম আসলে কী করে?

একটি ইএমই বাস্তবায়ন নিজেই মিডিয়া ডিক্রিপ্ট করার কোনও উপায় সরবরাহ করে না: এটি কেবল কোনও ওয়েব অ্যাপ্লিকেশনটির জন্য সামগ্রী ডিক্রিপশন মডিউলগুলির সাথে যোগাযোগের জন্য একটি এপিআই সরবরাহ করে।

সিডিএমগুলি আসলে যা করে তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না এবং একটি সিডিএম মিডিয়ার ডিকোডিং (ডিকম্প্রেশন) পাশাপাশি ডিক্রিপশন পরিচালনা করতে পারে। কমপক্ষে থেকে সবচেয়ে শক্তিশালী, সিডিএম কার্যকারিতার জন্য বেশ কয়েকটি সম্ভাব্য বিকল্প রয়েছে:

  • কেবলমাত্র ডিক্রিপশন, সাধারণ মিডিয়া পাইপলাইন ব্যবহার করে প্লেব্যাক সক্ষম করে, উদাহরণস্বরূপ <video> উপাদানটির মাধ্যমে।
  • ডিক্রিপশন এবং ডিকোডিং, রেন্ডারিংয়ের জন্য ব্রাউজারে ভিডিও ফ্রেমগুলি পাস করা।
  • ডিক্রিপশন এবং ডিকোডিং, সরাসরি হার্ডওয়্যারটিতে রেন্ডারিং (উদাহরণস্বরূপ, জিপিইউ)।

একটি ওয়েব অ্যাপ্লিকেশনটিতে সিডিএম উপলব্ধ করার একাধিক উপায় রয়েছে:

  • ব্রাউজার সহ একটি সিডিএম বান্ডিল করুন।
  • আলাদাভাবে একটি সিডিএম বিতরণ করুন।
  • অপারেটিং সিস্টেমে একটি সিডিএম তৈরি করুন।
  • ফার্মওয়্যারটিতে একটি সিডিএম অন্তর্ভুক্ত করুন।
  • হার্ডওয়্যারে একটি সিডিএম এম্বেড করুন।

সিডিএম কীভাবে উপলব্ধ করা হয় তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না, তবে সমস্ত ক্ষেত্রে ব্রাউজারটি সিডিএম পরীক্ষা এবং প্রকাশের জন্য দায়ী।

EME কোনও নির্দিষ্ট কী সিস্টেমকে আদেশ দেয় না; বর্তমান ডেস্কটপ এবং মোবাইল ব্রাউজারগুলির মধ্যে, ক্রোম ওয়াইডভাইন সমর্থন করে এবং আই 11 প্লে রেডি সমর্থন করে।

লাইসেন্স সার্ভার থেকে একটি কী পাওয়া

সাধারণ বাণিজ্যিক ব্যবহারে, সামগ্রীটি কোনও প্যাকেজিং পরিষেবা বা সরঞ্জাম ব্যবহার করে এনক্রিপ্ট করা এবং এনকোড করা হবে। একবার এনক্রিপ্ট করা মিডিয়া অনলাইনে উপলভ্য হয়ে গেলে, কোনও ওয়েব ক্লায়েন্ট লাইসেন্স সার্ভার থেকে একটি কী (লাইসেন্সের মধ্যে থাকা) পেতে পারে এবং সামগ্রীর ডিক্রিপশন এবং প্লেব্যাক সক্ষম করতে কীটি ব্যবহার করতে পারে।

নিম্নলিখিত কোডটি ( স্পেস উদাহরণগুলি থেকে অভিযোজিত) দেখায় যে কোনও অ্যাপ্লিকেশন কীভাবে একটি উপযুক্ত কী সিস্টেম নির্বাচন করতে পারে এবং লাইসেন্স সার্ভার থেকে একটি কী পেতে পারে।

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

সাধারণ এনক্রিপশন

সাধারণ এনক্রিপশন সলিউশনগুলি সামগ্রী সরবরাহকারীদের তাদের কন্টেন্ট/কোডেক অনুযায়ী একবার তাদের সামগ্রী এনক্রিপ্ট এবং প্যাকেজ করার অনুমতি দেয় এবং এটি বিভিন্ন কী সিস্টেম, সিডিএম এবং ক্লায়েন্টদের সাথে ব্যবহার করে: অর্থাৎ যে কোনও সিডিএম যা সাধারণ এনক্রিপশন সমর্থন করে। উদাহরণস্বরূপ, প্লে রেডি ব্যবহার করে প্যাকেজযুক্ত একটি ভিডিও ওয়াইডভাইন সিডিএম ব্যবহার করে একটি ব্রাউজারে ফিরে প্লে করা যেতে পারে যা ওয়াইডভাইন লাইসেন্স সার্ভার থেকে কী গ্রহণ করে।

এটি উত্তরাধিকার সমাধানের বিপরীতে যা কেবলমাত্র একটি সম্পূর্ণ উল্লম্ব স্ট্যাকের সাথে কাজ করবে, একটি একক ক্লায়েন্ট সহ প্রায়শই একটি অ্যাপ্লিকেশন রানটাইমও অন্তর্ভুক্ত করে।

কমন এনক্রিপশন (সিইএনসি) আইএসও স্ট্যান্ডার্ড যা আইএসও বিএমএফএফের জন্য সুরক্ষা প্রকল্পের সংজ্ঞা দেয়; একটি অনুরূপ ধারণা ওয়েবএম এর জন্য প্রযোজ্য।

ক্লিয়ার কী

যদিও EME ডিআরএম কার্যকারিতা সংজ্ঞায়িত করে না, তবে বর্তমানে স্পেকটি আদেশ দেয় যে EME সমর্থনকারী সমস্ত ব্রাউজারগুলি অবশ্যই পরিষ্কার কী প্রয়োগ করতে হবে। এই সিস্টেমটি ব্যবহার করে, মিডিয়াগুলি একটি কী দিয়ে এনক্রিপ্ট করা যেতে পারে এবং তারপরে কেবল সেই কী সরবরাহ করে আবার খেলতে পারে। ব্রাউজারে ক্লিয়ার কী তৈরি করা যেতে পারে: এটির জন্য পৃথক ডিক্রিপশন মডিউল ব্যবহারের প্রয়োজন হয় না।

যদিও বিভিন্ন ধরণের বাণিজ্যিক সামগ্রীর জন্য ব্যবহৃত হওয়ার সম্ভাবনা নেই, ক্লিয়ার কী EME সমর্থন করে এমন সমস্ত ব্রাউজারগুলিতে সম্পূর্ণ আন্তঃযোগযোগ্য। এটি ইএমই বাস্তবায়নগুলি পরীক্ষা করার জন্য এবং ইএমই ব্যবহার করে অ্যাপ্লিকেশনগুলির জন্যও কার্যকর, লাইসেন্স সার্ভার থেকে কোনও সামগ্রী কী অনুরোধ করার প্রয়োজন ছাড়াই। সিম্পল.ইনফো/সি কে এ একটি সাধারণ পরিষ্কার কী উদাহরণ রয়েছে। নীচে কোডটির একটি ওয়াকথ্রু রয়েছে, যা লাইসেন্স সার্ভারের মিথস্ক্রিয়া ছাড়াই উপরে বর্ণিত পদক্ষেপগুলির সাথে সমান্তরাল।

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

এই কোডটি পরীক্ষা করতে আপনার খেলতে একটি এনক্রিপ্ট করা ভিডিও দরকার। ক্লিয়ার কী সহ ব্যবহারের জন্য একটি ভিডিও এনক্রিপ্ট করা ওয়েবএম_ক্রিপ্ট নির্দেশাবলী অনুসারে ওয়েবএমের জন্য করা যেতে পারে। বাণিজ্যিক পরিষেবাগুলিও উপলব্ধ (আইএসও বিএমএফএফ/এমপি 4 এর জন্য কমপক্ষে) এবং অন্যান্য সমাধানগুলি বিকাশ করা হচ্ছে।

মিডিয়া সোর্স এক্সটেনশন (MSE)

এইচটিএমএলমিডিয়েলিমেন্টটি সাধারণ সৌন্দর্যের একটি প্রাণী।

আমরা কেবল একটি এসআরসি ইউআরএল সরবরাহ করে মিডিয়া লোড, ডিকোড করতে এবং খেলতে পারি:

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

মিডিয়া সোর্স এপিআই হ'ল এইচটিএমএলমিডিয়েলিমেন্টের একটি এক্সটেনশন যা মিডিয়ার উত্সের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ সক্ষম করে, জাভাস্ক্রিপ্টকে ভিডিওর 'খণ্ড' থেকে প্লেব্যাকের জন্য স্ট্রিম তৈরি করার অনুমতি দিয়ে। এটি পরিবর্তে অভিযোজিত স্ট্রিমিং এবং সময় স্থানান্তরিত করার মতো কৌশলগুলি সক্ষম করে।

এমএসই কেন ইমের কাছে গুরুত্বপূর্ণ? কারণ সুরক্ষিত সামগ্রী বিতরণ করার পাশাপাশি, বাণিজ্যিক সামগ্রী সরবরাহকারীদের অবশ্যই নেটওয়ার্ক শর্ত এবং অন্যান্য প্রয়োজনীয়তার সাথে সামগ্রী বিতরণটি মানিয়ে নিতে সক্ষম হতে হবে। নেটফ্লিক্স, উদাহরণস্বরূপ, নেটওয়ার্কের অবস্থার পরিবর্তনের সাথে সাথে গতিশীলভাবে স্ট্রিম বিটরেট পরিবর্তন করে। ইএমই এমএসই বাস্তবায়ন দ্বারা সরবরাহিত মিডিয়া স্ট্রিমগুলির প্লেব্যাকের সাথে কাজ করে, ঠিক যেমন এটি একটি src বৈশিষ্ট্যের মাধ্যমে সরবরাহিত মিডিয়াগুলির সাথে।

কীভাবে বিভিন্ন বিটরেটে এনকোড করা মিডিয়া ব্যাক মিডিয়া খালি এবং খেলবেন? নীচে ড্যাশ বিভাগ দেখুন।

আপনি সিম্পল.ইনফো/ এমএসইতে এমএসই অ্যাকশন দেখতে পারেন; এই উদাহরণের উদ্দেশ্যে, একটি ওয়েবএম ভিডিও এপিআই ফাইল ব্যবহার করে পাঁচটি খণ্ডে বিভক্ত করা হয়েছে। একটি প্রযোজনা আবেদনে, ভিডিওগুলির কিছু অংশ আজাক্সের মাধ্যমে পুনরুদ্ধার করা হবে।

প্রথমে একটি সোর্সবফার তৈরি করা হয়:

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

পুরো মুভিটি তখন অ্যাপেন্ডবফার () পদ্ধতিটি ব্যবহার করে প্রতিটি অংশকে সংযোজন করে একটি ভিডিও উপাদানটিতে 'স্ট্রিম' করা হয়:

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

এইচটিএমএল 5 রকস নিবন্ধে এমএসই সম্পর্কে আরও জানুন।

ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH)

মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল-আপনি এটিকে যা বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। গতিশীল, অভিযোজিত বিতরণ মাল্টি-ডিভাইস বিশ্বে ব্যান্ডউইথ সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে লড়াই করার জন্য গুরুত্বপূর্ণ।

ড্যাশ (ওরফে এমপিইজি-ড্যাশ) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্য একটি ফ্লেকি বিশ্বে সেরা সম্ভাব্য মিডিয়া বিতরণ সক্ষম করার জন্য ডিজাইন করা হয়েছে। অন্যান্য বেশ কয়েকটি প্রযুক্তি অনুরূপ কিছু করে - যেমন অ্যাপলের এইচটিটিপি লাইভ স্ট্রিমিং (এইচএলএস) এবং মাইক্রোসফ্টের মসৃণ স্ট্রিমিং - তবে ড্যাশ হ'ল এইচটিটিপি -র মাধ্যমে অভিযোজিত বিটরেট স্ট্রিমিংয়ের একমাত্র পদ্ধতি যা একটি মুক্ত মানের উপর ভিত্তি করে। ড্যাশ ইতিমধ্যে ইউটিউবের মতো সাইটগুলি দ্বারা ব্যবহৃত হচ্ছে।

ইএমই এবং এমএসই এর সাথে এর কী সম্পর্ক আছে? এমএসই -ভিত্তিক ড্যাশ বাস্তবায়নগুলি একটি উপযুক্ত বিটরেটে ভিডিওর বিভাগগুলি ডাউনলোড করতে পারে, এবং ক্ষুধার্ত হয়ে উঠলে তাদের ভিডিও উপাদানগুলিতে খাওয়াতে পারে - বিদ্যমান এইচটিটিপি অবকাঠামো ব্যবহার করে।

অন্য কথায়, ড্যাশ বাণিজ্যিক সামগ্রী সরবরাহকারীদের সুরক্ষিত সামগ্রীর অভিযোজিত স্ট্রিমিং করতে সক্ষম করে।

টিনে যা বলে ড্যাশ করে:

  • গতিশীল: পরিবর্তনের শর্তে সাড়া দেয়।
  • অভিযোজিত: উপযুক্ত অডিও বা ভিডিও বিট্রেট সরবরাহ করতে অভিযোজিত।
  • স্ট্রিমিং: স্ট্রিমিংয়ের পাশাপাশি ডাউনলোডের অনুমতি দেয়।
  • এইচটিটিপি: কোনও traditional তিহ্যবাহী স্ট্রিমিং সার্ভারের অসুবিধা ছাড়াই এইচটিটিপি -র সুবিধার সাথে সামগ্রী বিতরণ সক্ষম করে।

বিবিসি ড্যাশ ব্যবহার করে পরীক্ষার স্ট্রিম সরবরাহ করা শুরু করেছে:

সংক্ষিপ্ত করতে:

  1. মিডিয়া বিভিন্ন বিট্রেটে এনকোড করা হয়।
  2. বিভিন্ন বিটরেট ফাইলগুলি এইচটিটিপি সার্ভার থেকে উপলব্ধ করা হয়।
  3. একটি ক্লায়েন্ট ওয়েব অ্যাপ্লিকেশন ড্যাশ দিয়ে পুনরুদ্ধার করতে এবং খেলতে কোন বিটরেট চয়ন করে।

ভিডিও বিভাজন প্রক্রিয়ার অংশ হিসাবে, মিডিয়া উপস্থাপনা বিবরণ (এমপিডি) হিসাবে পরিচিত একটি এক্সএমএল ম্যানিফেস্ট প্রোগ্রামেভাবে নির্মিত হয়। এটি সময়সীমা এবং ইউআরএল সহ অভিযোজন সেট এবং উপস্থাপনা বর্ণনা করে। একটি এমপিডি দেখতে এরকম:

<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>

(এই এক্সএমএল ইউটিউব ড্যাশ ডেমো প্লেয়ারের জন্য ব্যবহৃত .mpd ফাইল থেকে নেওয়া হয়েছে)

ড্যাশ স্পেকের মতে, একটি এমপিডি ফাইল তাত্ত্বিকভাবে একটি ভিডিওর জন্য src হিসাবে ব্যবহার করা যেতে পারে। যাইহোক, ওয়েব বিকাশকারীদের আরও নমনীয়তা দেওয়ার জন্য, ব্রাউজার বিক্রেতারা ড্যাশ.জেএসের মতো এমএসই ব্যবহার করে জাভাস্ক্রিপ্ট লাইব্রেরিতে ড্যাশ সমর্থন ছেড়ে দেওয়ার পরিবর্তে বেছে নিয়েছেন। জাভাস্ক্রিপ্টে ড্যাশ প্রয়োগ করা ব্রাউজারের আপডেটের প্রয়োজন ছাড়াই অভিযোজন অ্যালগরিদমকে বিকশিত হতে দেয়। এমএসই ব্যবহার করে ব্রাউজারের পরিবর্তনের প্রয়োজন ছাড়াই বিকল্প ম্যানিফেস্ট ফর্ম্যাট এবং বিতরণ প্রক্রিয়াগুলির সাথেও পরীক্ষার অনুমতি দেয়। গুগলের শাকা প্লেয়ার ইএমই সমর্থন সহ একটি ড্যাশ ক্লায়েন্ট প্রয়োগ করে।

মোজিলা বিকাশকারী নেটওয়ার্কের ভিডিওটি বিভাগ এবং এমপিডি তৈরি করতে কীভাবে ওয়েবএম সরঞ্জাম এবং এফএফএমপিইজি ব্যবহার করতে হয় সে সম্পর্কে নির্দেশাবলী রয়েছে

উপসংহার

ভিডিও এবং অডিও সরবরাহ করতে ওয়েবের ব্যবহার বিশাল হারে বাড়ছে। দেখে মনে হচ্ছে যে প্রতিটি নতুন ডিভাইস, এটি কোনও ট্যাবলেট, গেম কনসোল, সংযুক্ত টিভি বা সেট-টপ বক্স, এইচটিটিপি-র মাধ্যমে প্রধান সামগ্রী সরবরাহকারীদের কাছ থেকে মিডিয়া স্ট্রিম করতে সক্ষম। 85% এরও বেশি মোবাইল এবং ডেস্কটপ ব্রাউজারগুলি এখন <video> এবং <audio> অডিও> সমর্থন করে এবং সিসকো অনুমান করে যে ভিডিওটি 2017 সালের মধ্যে গ্লোবাল ভোক্তা ইন্টারনেট ট্র্যাফিকের 80 থেকে 90 শতাংশ হবে।

আরও পড়া

চশমা এবং মান

প্রবন্ধ

,

এনক্রিপ্টড মিডিয়া এক্সটেনশনস (ইএমই) একটি এপিআই সরবরাহ করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে সামগ্রী সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে, এনক্রিপ্ট করা অডিও এবং ভিডিওর প্লেব্যাকের অনুমতি দেয়।

অন্তর্নিহিত সুরক্ষা সিস্টেম নির্বিশেষে ইএমই একই অ্যাপ্লিকেশন এবং এনক্রিপ্ট করা ফাইলগুলি কোনও ব্রাউজারে ব্যবহার করার জন্য ডিজাইন করা হয়েছে। পূর্ববর্তীটি স্ট্যান্ডার্ডাইজড এপিআই এবং প্রবাহ দ্বারা সম্ভব হয় যখন সাধারণ এনক্রিপশন ধারণার দ্বারা পরবর্তীটি সম্ভব হয়।

EME হ'ল HTMLMediaElement স্পেসিফিকেশনের একটি এক্সটেনশন - তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হ'ল ইএমইর জন্য ব্রাউজার সমর্থন al চ্ছিক: যদি কোনও ব্রাউজার এনক্রিপ্ট করা মিডিয়া সমর্থন না করে তবে এটি এনক্রিপ্ট করা মিডিয়া খেলতে সক্ষম হবে না, তবে এইচটিএমএল স্পেস কমপ্লায়েন্সের জন্য EME প্রয়োজন হয় না। ইএমই স্পেক থেকে:

ইএমই বাস্তবায়নগুলি নিম্নলিখিত বাহ্যিক উপাদানগুলি ব্যবহার করে:

  • কী সিস্টেম: একটি সামগ্রী সুরক্ষা (ডিআরএম) প্রক্রিয়া। ইএমই ক্লিয়ার কী (নীচের সম্পর্কে আরও) বাদে মূল সিস্টেমগুলি নিজেরাই সংজ্ঞায়িত করে না।
  • সামগ্রী ডিক্রিপশন মডিউল (সিডিএম): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার প্রক্রিয়া যা এনক্রিপ্ট করা মিডিয়াগুলির প্লেব্যাক সক্ষম করে। কী সিস্টেমগুলির মতো, EME কোনও সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস সরবরাহ করে।
  • লাইসেন্স (কী) সার্ভার: ডিক্রিপ্ট মিডিয়াগুলিতে কী সরবরাহ করতে একটি সিডিএমের সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনা হ'ল আবেদনের দায়িত্ব।
  • প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য এনকোডস এবং এনক্রিপ্টস মিডিয়া।

নোট করুন যে ইএমই ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কীগুলি পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে তবে ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করতে কীগুলির পুনরুদ্ধার (ally চ্ছিকভাবে) কোনও ব্যবহারকারীকে প্রমাণীকরণের পরে ঘটে। নেটফ্লিক্সের মতো পরিষেবাগুলি অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন কোনও ব্যবহারকারী অ্যাপ্লিকেশনটিতে স্বাক্ষর করে, অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুবিধাগুলি নির্ধারণ করে।

ইএমই কীভাবে কাজ করে?

নিম্নলিখিত কোড উদাহরণের সাথে সম্পর্কিত, EME এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে:

  1. একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও খেলতে চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
  2. ব্রাউজারটি স্বীকৃতি দিয়েছে যে মিডিয়াগুলি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা ( initData ) সহ একটি encrypted ইভেন্টে আগুন লাগায়।
  3. অ্যাপ্লিকেশনটি encrypted ইভেন্টটি পরিচালনা করে:
    1. যদি কোনও MediaKeys অবজেক্ট মিডিয়া উপাদানগুলির সাথে সম্পর্কিত না হয় তবে প্রথমে কোন কী সিস্টেমগুলি উপলভ্য তা পরীক্ষা করার জন্য প্রথমে navigator.requestMediaKeySystemAccess() ব্যবহার করে একটি উপলভ্য কী সিস্টেম নির্বাচন করুন, তারপরে একটি MediaKeySystemAccess অবজেক্টের মাধ্যমে উপলব্ধ কী সিস্টেমের জন্য একটি MediaKeys অবজেক্ট তৈরি করুন। নোট করুন যে প্রথম encrypted ইভেন্টের আগে মিডিয়াকিজ অবজেক্টের সূচনা হওয়া উচিত। লাইসেন্স সার্ভার ইউআরএল পাওয়া অ্যাপটি একটি উপলভ্য কী সিস্টেম নির্বাচন করার জন্য স্বাধীনভাবে সম্পন্ন করে। একটি MediaKeys অবজেক্ট একটি অডিও বা ভিডিও উপাদানটির জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কীগুলি উপস্থাপন করে। এটি একটি সিডিএম উদাহরণ উপস্থাপন করে এবং সিডিএম -তে অ্যাক্সেস সরবরাহ করে, বিশেষত কী সেশনগুলি তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কীগুলি পেতে ব্যবহৃত হয়।
    2. একবার MediaKeys অবজেক্টটি তৈরি হয়ে গেলে, এটি মিডিয়া উপাদানকে নির্ধারণ করুন: setMediaKeys() MediaKeys অবজেক্টকে এইচটিএমএলমিডিয়েলিমেন্টের সাথে যুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময় ব্যবহার করা যায়, যেমন ডিকোডিংয়ের সময়।
  4. অ্যাপ্লিকেশনটি MediaKeys createSession() কল করে একটি MediaKeySession তৈরি করে। এটি একটি MediaKeySession তৈরি করে, যা লাইসেন্সের আজীবন এবং এর কী (গুলি) উপস্থাপন করে।
  5. অ্যাপ্লিকেশনটি encrypted হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম -এ পাস করে লাইসেন্স অনুরোধ উত্পন্ন করে, MediaKeySession generateRequest() কল করে।
  6. সিডিএম একটি message ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে কী অর্জনের জন্য একটি অনুরোধ।
  7. MediaKeySession অবজেক্টটি message ইভেন্টটি গ্রহণ করে এবং অ্যাপ্লিকেশনটি লাইসেন্স সার্ভারে একটি বার্তা প্রেরণ করে (উদাহরণস্বরূপ এক্সএইচআর এর মাধ্যমে)।
  8. অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া গ্রহণ করে এবং MediaKeySession update() পদ্ধতি ব্যবহার করে সিডিএম -তে ডেটা পাস করে।
  9. সিডিএম লাইসেন্সের কীগুলি ব্যবহার করে মিডিয়া ডিক্রিপ্ট করে। মিডিয়া উপাদানগুলির সাথে সম্পর্কিত MediaKey মধ্যে যে কোনও সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতিটি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচকযুক্ত।
  10. মিডিয়া প্লেব্যাক পুনরায় শুরু করে।

উফ…

নোট করুন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়াটিতে সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনটির কাছে অস্বচ্ছ: বার্তাগুলি কেবল সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ্লিকেশন স্তরটি সিডিএম কী ধরণের বার্তা প্রেরণ করছে তা দেখতে পারে। লাইসেন্স অনুরোধে সিডিএমের বৈধতা (এবং বিশ্বাসের সম্পর্ক) এর প্রমাণ রয়েছে পাশাপাশি ফলস্বরূপ লাইসেন্সে সামগ্রী কী (গুলি) এনক্রিপ্ট করার সময় ব্যবহারের মূল কী রয়েছে।

… তবে সিডিএম আসলে কী করে?

একটি ইএমই বাস্তবায়ন নিজেই মিডিয়া ডিক্রিপ্ট করার কোনও উপায় সরবরাহ করে না: এটি কেবল কোনও ওয়েব অ্যাপ্লিকেশনটির জন্য সামগ্রী ডিক্রিপশন মডিউলগুলির সাথে যোগাযোগের জন্য একটি এপিআই সরবরাহ করে।

সিডিএমগুলি আসলে যা করে তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না এবং একটি সিডিএম মিডিয়ার ডিকোডিং (ডিকম্প্রেশন) পাশাপাশি ডিক্রিপশন পরিচালনা করতে পারে। কমপক্ষে থেকে সবচেয়ে শক্তিশালী, সিডিএম কার্যকারিতার জন্য বেশ কয়েকটি সম্ভাব্য বিকল্প রয়েছে:

  • কেবলমাত্র ডিক্রিপশন, সাধারণ মিডিয়া পাইপলাইন ব্যবহার করে প্লেব্যাক সক্ষম করে, উদাহরণস্বরূপ <video> উপাদানটির মাধ্যমে।
  • ডিক্রিপশন এবং ডিকোডিং, রেন্ডারিংয়ের জন্য ব্রাউজারে ভিডিও ফ্রেমগুলি পাস করা।
  • ডিক্রিপশন এবং ডিকোডিং, সরাসরি হার্ডওয়্যারটিতে রেন্ডারিং (উদাহরণস্বরূপ, জিপিইউ)।

একটি ওয়েব অ্যাপ্লিকেশনটিতে সিডিএম উপলব্ধ করার একাধিক উপায় রয়েছে:

  • ব্রাউজার সহ একটি সিডিএম বান্ডিল করুন।
  • আলাদাভাবে একটি সিডিএম বিতরণ করুন।
  • অপারেটিং সিস্টেমে একটি সিডিএম তৈরি করুন।
  • ফার্মওয়্যারটিতে একটি সিডিএম অন্তর্ভুক্ত করুন।
  • হার্ডওয়্যারে একটি সিডিএম এম্বেড করুন।

সিডিএম কীভাবে উপলব্ধ করা হয় তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না, তবে সমস্ত ক্ষেত্রে ব্রাউজারটি সিডিএম পরীক্ষা এবং প্রকাশের জন্য দায়ী।

EME কোনও নির্দিষ্ট কী সিস্টেমকে আদেশ দেয় না; বর্তমান ডেস্কটপ এবং মোবাইল ব্রাউজারগুলির মধ্যে, ক্রোম ওয়াইডভাইন সমর্থন করে এবং আই 11 প্লে রেডি সমর্থন করে।

লাইসেন্স সার্ভার থেকে একটি কী পাওয়া

সাধারণ বাণিজ্যিক ব্যবহারে, সামগ্রীটি কোনও প্যাকেজিং পরিষেবা বা সরঞ্জাম ব্যবহার করে এনক্রিপ্ট করা এবং এনকোড করা হবে। একবার এনক্রিপ্ট করা মিডিয়া অনলাইনে উপলভ্য হয়ে গেলে, কোনও ওয়েব ক্লায়েন্ট লাইসেন্স সার্ভার থেকে একটি কী (লাইসেন্সের মধ্যে থাকা) পেতে পারে এবং সামগ্রীর ডিক্রিপশন এবং প্লেব্যাক সক্ষম করতে কীটি ব্যবহার করতে পারে।

নিম্নলিখিত কোডটি ( স্পেস উদাহরণগুলি থেকে অভিযোজিত) দেখায় যে কোনও অ্যাপ্লিকেশন কীভাবে একটি উপযুক্ত কী সিস্টেম নির্বাচন করতে পারে এবং লাইসেন্স সার্ভার থেকে একটি কী পেতে পারে।

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

সাধারণ এনক্রিপশন

সাধারণ এনক্রিপশন সলিউশনগুলি সামগ্রী সরবরাহকারীদের তাদের কন্টেন্ট/কোডেক অনুযায়ী একবার তাদের সামগ্রী এনক্রিপ্ট এবং প্যাকেজ করার অনুমতি দেয় এবং এটি বিভিন্ন কী সিস্টেম, সিডিএম এবং ক্লায়েন্টদের সাথে ব্যবহার করে: অর্থাৎ যে কোনও সিডিএম যা সাধারণ এনক্রিপশন সমর্থন করে। উদাহরণস্বরূপ, প্লে রেডি ব্যবহার করে প্যাকেজযুক্ত একটি ভিডিও ওয়াইডভাইন সিডিএম ব্যবহার করে একটি ব্রাউজারে ফিরে প্লে করা যেতে পারে যা ওয়াইডভাইন লাইসেন্স সার্ভার থেকে কী গ্রহণ করে।

এটি উত্তরাধিকার সমাধানের বিপরীতে যা কেবলমাত্র একটি সম্পূর্ণ উল্লম্ব স্ট্যাকের সাথে কাজ করবে, একটি একক ক্লায়েন্ট সহ প্রায়শই একটি অ্যাপ্লিকেশন রানটাইমও অন্তর্ভুক্ত করে।

কমন এনক্রিপশন (সিইএনসি) আইএসও স্ট্যান্ডার্ড যা আইএসও বিএমএফএফের জন্য সুরক্ষা প্রকল্পের সংজ্ঞা দেয়; একটি অনুরূপ ধারণা ওয়েবএম এর জন্য প্রযোজ্য।

ক্লিয়ার কী

যদিও EME ডিআরএম কার্যকারিতা সংজ্ঞায়িত করে না, তবে বর্তমানে স্পেকটি আদেশ দেয় যে EME সমর্থনকারী সমস্ত ব্রাউজারগুলি অবশ্যই পরিষ্কার কী প্রয়োগ করতে হবে। এই সিস্টেমটি ব্যবহার করে, মিডিয়াগুলি একটি কী দিয়ে এনক্রিপ্ট করা যেতে পারে এবং তারপরে কেবল সেই কী সরবরাহ করে আবার খেলতে পারে। ব্রাউজারে ক্লিয়ার কী তৈরি করা যেতে পারে: এটির জন্য পৃথক ডিক্রিপশন মডিউল ব্যবহারের প্রয়োজন হয় না।

যদিও বিভিন্ন ধরণের বাণিজ্যিক সামগ্রীর জন্য ব্যবহৃত হওয়ার সম্ভাবনা নেই, ক্লিয়ার কী EME সমর্থন করে এমন সমস্ত ব্রাউজারগুলিতে সম্পূর্ণ আন্তঃযোগযোগ্য। এটি ইএমই বাস্তবায়নগুলি পরীক্ষা করার জন্য এবং ইএমই ব্যবহার করে অ্যাপ্লিকেশনগুলির জন্যও কার্যকর, লাইসেন্স সার্ভার থেকে কোনও সামগ্রী কী অনুরোধ করার প্রয়োজন ছাড়াই। সিম্পল.ইনফো/সি কে এ একটি সাধারণ পরিষ্কার কী উদাহরণ রয়েছে। নীচে কোডটির একটি ওয়াকথ্রু রয়েছে, যা লাইসেন্স সার্ভারের মিথস্ক্রিয়া ছাড়াই উপরে বর্ণিত পদক্ষেপগুলির সাথে সমান্তরাল।

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

এই কোডটি পরীক্ষা করতে আপনার খেলতে একটি এনক্রিপ্ট করা ভিডিও দরকার। ক্লিয়ার কী সহ ব্যবহারের জন্য একটি ভিডিও এনক্রিপ্ট করা ওয়েবএম_ক্রিপ্ট নির্দেশাবলী অনুসারে ওয়েবএমের জন্য করা যেতে পারে। বাণিজ্যিক পরিষেবাগুলিও উপলব্ধ (আইএসও বিএমএফএফ/এমপি 4 এর জন্য কমপক্ষে) এবং অন্যান্য সমাধানগুলি বিকাশ করা হচ্ছে।

মিডিয়া সোর্স এক্সটেনশন (MSE)

এইচটিএমএলমিডিয়েলিমেন্টটি সাধারণ সৌন্দর্যের একটি প্রাণী।

আমরা কেবল একটি এসআরসি ইউআরএল সরবরাহ করে মিডিয়া লোড, ডিকোড করতে এবং খেলতে পারি:

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

মিডিয়া সোর্স এপিআই হ'ল এইচটিএমএলমিডিয়েলিমেন্টের একটি এক্সটেনশন যা মিডিয়ার উত্সের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ সক্ষম করে, জাভাস্ক্রিপ্টকে ভিডিওর 'খণ্ড' থেকে প্লেব্যাকের জন্য স্ট্রিম তৈরি করার অনুমতি দিয়ে। এটি পরিবর্তে অভিযোজিত স্ট্রিমিং এবং সময় স্থানান্তরিত করার মতো কৌশলগুলি সক্ষম করে।

এমএসই কেন ইমের কাছে গুরুত্বপূর্ণ? কারণ সুরক্ষিত সামগ্রী বিতরণ করার পাশাপাশি, বাণিজ্যিক সামগ্রী সরবরাহকারীদের অবশ্যই নেটওয়ার্ক শর্ত এবং অন্যান্য প্রয়োজনীয়তার সাথে সামগ্রী বিতরণটি মানিয়ে নিতে সক্ষম হতে হবে। নেটফ্লিক্স, উদাহরণস্বরূপ, নেটওয়ার্কের অবস্থার পরিবর্তনের সাথে সাথে গতিশীলভাবে স্ট্রিম বিটরেট পরিবর্তন করে। ইএমই এমএসই বাস্তবায়ন দ্বারা সরবরাহিত মিডিয়া স্ট্রিমগুলির প্লেব্যাকের সাথে কাজ করে, ঠিক যেমন এটি একটি src বৈশিষ্ট্যের মাধ্যমে সরবরাহিত মিডিয়াগুলির সাথে।

কীভাবে বিভিন্ন বিটরেটে এনকোড করা মিডিয়া ব্যাক মিডিয়া খালি এবং খেলবেন? নীচে ড্যাশ বিভাগ দেখুন।

আপনি সিম্পল.ইনফো/ এমএসইতে এমএসই অ্যাকশন দেখতে পারেন; এই উদাহরণের উদ্দেশ্যে, একটি ওয়েবএম ভিডিও এপিআই ফাইল ব্যবহার করে পাঁচটি খণ্ডে বিভক্ত করা হয়েছে। একটি প্রযোজনা আবেদনে, ভিডিওগুলির কিছু অংশ আজাক্সের মাধ্যমে পুনরুদ্ধার করা হবে।

প্রথমে একটি সোর্সবফার তৈরি করা হয়:

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

পুরো মুভিটি তখন অ্যাপেন্ডবফার () পদ্ধতিটি ব্যবহার করে প্রতিটি অংশকে সংযোজন করে একটি ভিডিও উপাদানটিতে 'স্ট্রিম' করা হয়:

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

এইচটিএমএল 5 রকস নিবন্ধে এমএসই সম্পর্কে আরও জানুন।

ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH)

মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল-আপনি এটিকে যা বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। গতিশীল, অভিযোজিত বিতরণ মাল্টি-ডিভাইস বিশ্বে ব্যান্ডউইথ সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে লড়াই করার জন্য গুরুত্বপূর্ণ।

ড্যাশ (ওরফে এমপিইজি-ড্যাশ) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্য একটি ফ্লেকি বিশ্বে সেরা সম্ভাব্য মিডিয়া বিতরণ সক্ষম করার জন্য ডিজাইন করা হয়েছে। অন্যান্য বেশ কয়েকটি প্রযুক্তি অনুরূপ কিছু করে - যেমন অ্যাপলের এইচটিটিপি লাইভ স্ট্রিমিং (এইচএলএস) এবং মাইক্রোসফ্টের মসৃণ স্ট্রিমিং - তবে ড্যাশ হ'ল এইচটিটিপি -র মাধ্যমে অভিযোজিত বিটরেট স্ট্রিমিংয়ের একমাত্র পদ্ধতি যা একটি মুক্ত মানের উপর ভিত্তি করে। ড্যাশ ইতিমধ্যে ইউটিউবের মতো সাইটগুলি দ্বারা ব্যবহৃত হচ্ছে।

ইএমই এবং এমএসই এর সাথে এর কী সম্পর্ক আছে? এমএসই -ভিত্তিক ড্যাশ বাস্তবায়নগুলি একটি উপযুক্ত বিটরেটে ভিডিওর বিভাগগুলি ডাউনলোড করতে পারে, এবং ক্ষুধার্ত হয়ে উঠলে তাদের ভিডিও উপাদানগুলিতে খাওয়াতে পারে - বিদ্যমান এইচটিটিপি অবকাঠামো ব্যবহার করে।

In other words, DASH enables commercial content providers to do adaptive streaming of protected content.

DASH does what it says on the tin:

  • Dynamic: responds to changing conditions.
  • Adaptive: adapts to provide an appropriate audio or video bitrate.
  • Streaming: allows for streaming as well as download.
  • HTTP: enables content delivery with the advantage of HTTP, without the disadvantages of a traditional streaming server.

The BBC has begun providing test streams using DASH :

সংক্ষিপ্ত করতে:

  1. Media is encoded at different bitrates.
  2. The different bitrate files are made available from an HTTP server.
  3. A client web app chooses which bitrate to retrieve and play back with DASH.

As part of the video segmentation process, an XML manifest known as a Media Presentation Description (MPD) is built programmatically. This describes Adaptation Sets and Representations, with durations and URLs. An MPD looks like this:

<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>

(This XML is taken from the .mpd file used for the YouTube DASH demo player )

According to the DASH spec, an MPD file could in theory be used as the src for a video. However, to give more flexibility to web developers, browser vendors have chosen instead to leave DASH support up to JavaScript libraries using MSE such as dash.js . Implementing DASH in JavaScript allows the adaptation algorithm to evolve without requiring browser updates. Using MSE also allows experimentation with alternative manifest formats and delivery mechanisms without requiring browser changes. Google's Shaka Player implements a DASH client with EME support.

Mozilla Developer Network has instructions on how to use WebM tools and FFmpeg to segment video and build an MPD.

উপসংহার

Use of the web to deliver paid-for video and audio is growing at a huge rate . It seems that every new device, whether it's a tablet, game console, connected TV, or set-top box, is able to stream media from the major content providers over HTTP. Over 85% of mobile and desktop browsers now support <video> and <audio> , and Cisco estimates that video will be 80 to 90 percent of global consumer internet traffic by 2017. In this context, browser support for protected content distribution is likely to be become increasingly significant, as browser vendors curtail support for APIs that most media plugins rely on.

আরও পড়া

Specs and standards

প্রবন্ধ