এনক্রিপ্ট করা মিডিয়া এক্সটেনশনগুলি একটি API প্রদান করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে এনক্রিপ্ট করা অডিও এবং ভিডিও প্লেব্যাকের অনুমতি দেওয়ার জন্য বিষয়বস্তু সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে৷
অন্তর্নিহিত সুরক্ষা ব্যবস্থা নির্বিশেষে যেকোন ব্রাউজারে ব্যবহার করার জন্য একই অ্যাপ এবং এনক্রিপ্ট করা ফাইলগুলিকে সক্ষম করার জন্য EME ডিজাইন করা হয়েছে। আগেরটি প্রমিত API এবং প্রবাহ দ্বারা সম্ভব হয়েছে যখন পরবর্তীটি সাধারণ এনক্রিপশনের ধারণার দ্বারা সম্ভব হয়েছে৷
EME হল HTMLMediaElement স্পেসিফিকেশনের একটি এক্সটেনশন — তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হল EME-এর জন্য ব্রাউজার সমর্থন ঐচ্ছিক: যদি একটি ব্রাউজার এনক্রিপ্ট করা মিডিয়া সমর্থন না করে, তাহলে এটি এনক্রিপ্ট করা মিডিয়া চালাতে সক্ষম হবে না, কিন্তু HTML স্পেক কমপ্লায়েন্সের জন্য EME এর প্রয়োজন নেই৷ EME স্পেক থেকে:
এই প্রস্তাবটি HTMLMediaElement প্রসারিত করে যা সুরক্ষিত সামগ্রীর প্লেব্যাক নিয়ন্ত্রণ করতে API প্রদান করে।
এপিআই সাধারণ ক্লিয়ার কী ডিক্রিপশন থেকে উচ্চ মানের ভিডিও পর্যন্ত ব্যবহারের ক্ষেত্রে সমর্থন করে (একটি উপযুক্ত ব্যবহারকারী এজেন্ট বাস্তবায়ন দেওয়া হয়েছে)। লাইসেন্স/কী এক্সচেঞ্জ অ্যাপ্লিকেশন দ্বারা নিয়ন্ত্রিত হয়, যা কন্টেন্ট ডিক্রিপশন এবং সুরক্ষা প্রযুক্তির একটি পরিসীমা সমর্থন করে শক্তিশালী প্লেব্যাক অ্যাপ্লিকেশনগুলির বিকাশের সুবিধা দেয়৷
এই স্পেসিফিকেশন একটি বিষয়বস্তু সুরক্ষা বা ডিজিটাল অধিকার ব্যবস্থাপনা সিস্টেম সংজ্ঞায়িত করে না। বরং, এটি একটি সাধারণ এপিআইকে সংজ্ঞায়িত করে যা এই ধরনের সিস্টেমের পাশাপাশি সহজ কন্টেন্ট এনক্রিপশন সিস্টেমের সাথে আবিষ্কার, নির্বাচন এবং ইন্টারঅ্যাক্ট করতে ব্যবহার করা যেতে পারে। এই স্পেসিফিকেশন মেনে চলার জন্য ডিজিটাল রাইটস ম্যানেজমেন্টের বাস্তবায়নের প্রয়োজন নেই: শুধুমাত্র ক্লিয়ার কী সিস্টেমকে একটি সাধারণ বেসলাইন হিসেবে প্রয়োগ করতে হবে।
সাধারণ API কন্টেন্ট এনক্রিপশন ক্ষমতার একটি সাধারণ সেট সমর্থন করে, অ্যাপ্লিকেশন ফাংশন যেমন প্রমাণীকরণ এবং অনুমোদন পৃষ্ঠা লেখকদের কাছে রেখে দেয়। এনক্রিপশন সিস্টেম এবং একটি লাইসেন্স বা অন্য সার্ভারের মধ্যে ব্যান্ড-অব-ব্যান্ড যোগাযোগ অনুমান করার পরিবর্তে বিষয়বস্তু সুরক্ষা সিস্টেম-নির্দিষ্ট বার্তাগুলিকে পৃষ্ঠা দ্বারা মধ্যস্থতা করার প্রয়োজন দ্বারা এটি অর্জন করা হয়।
EME বাস্তবায়ন নিম্নলিখিত বাহ্যিক উপাদান ব্যবহার করে:
- কী সিস্টেম: একটি বিষয়বস্তু সুরক্ষা (ডিআরএম) প্রক্রিয়া। EME ক্লিয়ার কী ( নীচে সে সম্পর্কে আরও) ছাড়াও কী সিস্টেমগুলিকে সংজ্ঞায়িত করে না।
- কন্টেন্ট ডিক্রিপশন মডিউল (CDM): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার মেকানিজম যা এনক্রিপ্ট করা মিডিয়ার প্লেব্যাক সক্ষম করে। কী সিস্টেমের মতো, ইএমই কোনো সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে যোগাযোগ করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস প্রদান করে।
- লাইসেন্স (কী) সার্ভার: মিডিয়া ডিক্রিপ্ট করার জন্য কী প্রদান করতে একটি CDM এর সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনার দায়িত্ব আবেদনের।
- প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য মিডিয়া এনকোড এবং এনক্রিপ্ট করে।
মনে রাখবেন যে EME ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কী পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে, কিন্তু ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করার জন্য কীগুলি পুনরুদ্ধার করা হয় (ঐচ্ছিকভাবে) ব্যবহারকারীকে প্রমাণীকরণ করার পরে। Netflix-এর মতো পরিষেবাগুলিকে অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন একজন ব্যবহারকারী অ্যাপ্লিকেশনটিতে সাইন ইন করেন, তখন অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুযোগ-সুবিধা নির্ধারণ করে।
EME কিভাবে কাজ করে?
নীচের কোড উদাহরণের সাথে মিল রেখে EME এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে রয়েছে:
একাধিক ফরম্যাট বা কোডেক উপলব্ধ থাকলে, MediaSource.isTypeSupported() বা HTMLMediaElement.canPlayType() উভয়ই সঠিকটি নির্বাচন করতে ব্যবহার করা যেতে পারে। যাইহোক, সিডিএম শুধুমাত্র এনক্রিপ্ট করা সামগ্রীর জন্য ব্রাউজার যা সমর্থন করে তার একটি উপসেট সমর্থন করতে পারে। একটি ফর্ম্যাট এবং কোডেক নির্বাচন করার আগে একটি MediaKeys কনফিগারেশন নিয়ে আলোচনা করা ভাল৷ যদি অ্যাপ্লিকেশনটি এনক্রিপ্ট করা ইভেন্টের জন্য অপেক্ষা করে কিন্তু তখন MediaKeys দেখায় যে এটি নির্বাচিত ফরম্যাট/কোডেক পরিচালনা করতে পারে না, প্লেব্যাকে বাধা না দিয়ে স্যুইচ করতে অনেক দেরি হতে পারে।
প্রস্তাবিত প্রবাহ হল প্রথমে MediaKeys নিয়ে আলোচনা করা, MediaKeysSystemAccess.getConfiguration() ব্যবহার করে আলোচনা করা কনফিগারেশন খুঁজে বের করা।
যদি শুধুমাত্র একটি ফর্ম্যাট/কোডেক থেকে বেছে নেওয়া হয়, তাহলে getConfiguration() এর কোন প্রয়োজন নেই। যাইহোক, প্রথমে MediaKeys সেট আপ করা এখনও পছন্দনীয়। এনক্রিপ্ট করা ইভেন্টের জন্য অপেক্ষা করার একমাত্র কারণ হল বিষয়বস্তু এনক্রিপ্ট করা হয়েছে কিনা তা জানার কোন উপায় না থাকলে, কিন্তু বাস্তবে এটি অসম্ভাব্য।
- একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও চালানোর চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
- ব্রাউজার স্বীকার করে যে মিডিয়াটি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা (initData) সহ একটি এনক্রিপ্ট করা ইভেন্ট ফায়ার করে।
অ্যাপ্লিকেশনটি এনক্রিপ্ট করা ইভেন্ট পরিচালনা করে:
যদি কোন MediaKeys অবজেক্ট মিডিয়া উপাদানের সাথে যুক্ত না থাকে, তাহলে প্রথমে একটি উপলব্ধ কী সিস্টেম নির্বাচন করুন navigator.requestMediaKeySystemAccess() ব্যবহার করে কী সিস্টেমগুলি উপলব্ধ তা পরীক্ষা করে দেখুন, তারপর একটি MediaKeySystemAccess অবজেক্টের মাধ্যমে একটি উপলব্ধ কী সিস্টেমের জন্য একটি MediaKeys অবজেক্ট তৈরি করুন। উল্লেখ্য যে MediaKeys অবজেক্টের সূচনা প্রথম এনক্রিপ্ট করা ইভেন্টের আগে হওয়া উচিত। একটি লাইসেন্স সার্ভার URL প্রাপ্তি একটি উপলব্ধ কী সিস্টেম নির্বাচন স্বাধীনভাবে অ্যাপ্লিকেশন দ্বারা সম্পন্ন করা হয়. একটি MediaKeys অবজেক্ট একটি অডিও বা ভিডিও উপাদানের জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কী উপস্থাপন করে। এটি একটি সিডিএম দৃষ্টান্ত উপস্থাপন করে এবং সিডিএম-এ অ্যাক্সেস প্রদান করে, বিশেষত কী সেশন তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কী পেতে ব্যবহৃত হয়।
একবার MediaKeys অবজেক্ট তৈরি হয়ে গেলে, এটিকে মিডিয়া উপাদানে বরাদ্দ করুন: setMediaKeys() একটি HTMLMediaElement-এর সাথে MediaKeys অবজেক্টকে সংযুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময়, অর্থাৎ ডিকোডিংয়ের সময় ব্যবহার করা যেতে পারে।
অ্যাপটি MediaKeys-এ createSession() কল করে একটি MediaKeySession তৈরি করে। এটি একটি MediaKeySession তৈরি করে, যা একটি লাইসেন্সের জীবনকাল এবং এর কী(গুলি) প্রতিনিধিত্ব করে।
অ্যাপটি এনক্রিপ্ট করা হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম-এ প্রেরণ করে, MediaKeySession-এ generateRequest() কল করে লাইসেন্সের অনুরোধ তৈরি করে।
সিডিএম একটি বার্তা ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে একটি কী অর্জনের অনুরোধ।
MediaKeySession অবজেক্ট বার্তা ইভেন্ট গ্রহণ করে এবং অ্যাপ্লিকেশন লাইসেন্স সার্ভারে একটি বার্তা পাঠায় (উদাহরণস্বরূপ, XHR এর মাধ্যমে)।
অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া গ্রহণ করে এবং MediaKeySession-এর update() পদ্ধতি ব্যবহার করে ডেটা CDM-তে প্রেরণ করে।
সিডিএম লাইসেন্সের কী ব্যবহার করে মিডিয়াকে ডিক্রিপ্ট করে। মিডিয়া উপাদানের সাথে যুক্ত MediaKeys-এর মধ্যে যেকোনো সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচীকৃত।
মিডিয়া প্লেব্যাক আবার শুরু হয়।
কিভাবে ব্রাউজার জানে যে মিডিয়া এনক্রিপ্ট করা হয়েছে?
এই তথ্যটি মিডিয়া কন্টেইনার ফাইলের মেটাডেটাতে রয়েছে, যা ISO BMFF বা WebM-এর মতো ফর্ম্যাটে থাকবে৷ ISO BMFF এর জন্য এর অর্থ হেডার মেটাডেটা, যাকে বলা হয় সুরক্ষা স্কিম তথ্য বাক্স। WebM কিছু WebM-নির্দিষ্ট সংযোজন সহ Matroska ContentEncryption উপাদান ব্যবহার করে। EME-নির্দিষ্ট রেজিস্ট্রিতে প্রতিটি কন্টেইনারের জন্য নির্দেশিকা প্রদান করা হয়।
মনে রাখবেন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়ার সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনের সাথে অস্বচ্ছ: বার্তাগুলি শুধুমাত্র সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ স্তরটি দেখতে পারে যে সিডিএম কী ধরনের বার্তা পাঠাচ্ছে। লাইসেন্সের অনুরোধে সিডিএম-এর বৈধতা (এবং আস্থার সম্পর্ক) প্রমাণ রয়েছে এবং সেইসাথে ফলস্বরূপ লাইসেন্সে বিষয়বস্তু কী(গুলি) এনক্রিপ্ট করার সময় ব্যবহার করার জন্য একটি কী রয়েছে।
কিন্তু সিডিএম আসলে কি করে?
একটি EME বাস্তবায়ন নিজেই মিডিয়া ডিক্রিপ্ট করার একটি উপায় প্রদান করে না: এটি কেবল একটি ওয়েব অ্যাপ্লিকেশনের জন্য সামগ্রী ডিক্রিপশন মডিউলগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য একটি API প্রদান করে।
সিডিএম আসলে যা করে তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না এবং একটি সিডিএম মিডিয়ার ডিকোডিং (ডিকম্প্রেশন) পাশাপাশি ডিক্রিপশন পরিচালনা করতে পারে। কমপক্ষে থেকে সবচেয়ে শক্তিশালী, সিডিএম কার্যকারিতার জন্য বেশ কয়েকটি সম্ভাব্য বিকল্প রয়েছে:
- শুধুমাত্র ডিক্রিপশন, সাধারণ মিডিয়া পাইপলাইন ব্যবহার করে প্লেব্যাক সক্ষম করা, উদাহরণস্বরূপ একটি <ভিডিও> উপাদানের মাধ্যমে।
- ডিক্রিপশন এবং ডিকোডিং, রেন্ডারিংয়ের জন্য ব্রাউজারে ভিডিও ফ্রেম পাস করা।
- ডিক্রিপশন এবং ডিকোডিং, সরাসরি হার্ডওয়্যারে রেন্ডারিং (উদাহরণস্বরূপ, GPU)।
একটি ওয়েব অ্যাপে সিডিএম উপলব্ধ করার একাধিক উপায় রয়েছে:
- ব্রাউজার দিয়ে একটি সিডিএম বান্ডিল করুন।
- আলাদাভাবে একটি সিডিএম বিতরণ করুন।
- অপারেটিং সিস্টেমে একটি সিডিএম তৈরি করুন।
- ফার্মওয়্যারে একটি সিডিএম অন্তর্ভুক্ত করুন।
- হার্ডওয়্যারে একটি সিডিএম এম্বেড করুন।
কিভাবে একটি সিডিএম উপলব্ধ করা হয় তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না, তবে সমস্ত ক্ষেত্রে ব্রাউজার সিডিএম পরীক্ষা এবং প্রকাশের জন্য দায়ী।
EME একটি নির্দিষ্ট কী সিস্টেমকে বাধ্যতামূলক করে না; বর্তমান ডেস্কটপ এবং মোবাইল ব্রাউজারগুলির মধ্যে, Chrome Widevine সমর্থন করে এবং IE11 PlayReady সমর্থন করে।
লাইসেন্স সার্ভার থেকে একটি চাবি পাওয়া
সাধারণ বাণিজ্যিক ব্যবহারে, সামগ্রী একটি প্যাকেজিং পরিষেবা বা সরঞ্জাম ব্যবহার করে এনক্রিপ্ট এবং এনকোড করা হবে। একবার এনক্রিপ্ট করা মিডিয়া অনলাইনে উপলব্ধ করা হলে, একটি ওয়েব ক্লায়েন্ট লাইসেন্স সার্ভার থেকে একটি কী (লাইসেন্সের মধ্যে থাকা) পেতে পারে এবং বিষয়বস্তুর ডিক্রিপশন এবং প্লেব্যাক সক্ষম করতে কী ব্যবহার করতে পারে।
নিম্নলিখিত কোড ( নির্দিষ্ট উদাহরণ থেকে অভিযোজিত) দেখায় কিভাবে একটি অ্যাপ্লিকেশন একটি উপযুক্ত কী সিস্টেম নির্বাচন করতে পারে এবং লাইসেন্স সার্ভার থেকে একটি কী পেতে পারে।
var video = document.querySelector('video');
var config = [{initDataTypes: ['webm'],
videoCapabilities: [{contentType: 'video/webm; codecs="vp09.00.10.08"'}]}];
if (!video.mediaKeys) {
navigator.requestMediaKeySystemAccess('org.w3.clearkey',
config).then(
function(keySystemAccess) {
var promise = keySystemAccess.createMediaKeys();
promise.catch(
console.error.bind(console, 'Unable to create MediaKeys')
);
promise.then(
function(createdMediaKeys) {
return video.setMediaKeys(createdMediaKeys);
}
).catch(
console.error.bind(console, 'Unable to set MediaKeys')
);
promise.then(
function(createdMediaKeys) {
var initData = new Uint8Array([...]);
var keySession = createdMediaKeys.createSession();
keySession.addEventListener('message', handleMessage,
false);
return keySession.generateRequest('webm', initData);
}
).catch(
console.error.bind(console,
'Unable to create or initialize key session')
);
}
);
}
function handleMessage(event) {
var keySession = event.target;
var license = new Uint8Array([...]);
keySession.update(license).catch(
console.error.bind(console, 'update() failed')
);
}
সাধারণ এনক্রিপশন
সাধারণ এনক্রিপশন সলিউশন কন্টেন্ট প্রোভাইডারদের প্রতি কন্টেইনার/কোডেক প্রতি একবার তাদের কন্টেন্ট এনক্রিপ্ট করতে এবং প্যাকেজ করার অনুমতি দেয় এবং এটি বিভিন্ন কী সিস্টেম, সিডিএম এবং ক্লায়েন্টের সাথে ব্যবহার করে: অর্থাৎ, সাধারণ এনক্রিপশন সমর্থন করে এমন যেকোনো সিডিএম। উদাহরণস্বরূপ, Playready ব্যবহার করে প্যাকেজ করা একটি ভিডিও একটি Widevine লাইসেন্স সার্ভার থেকে একটি কী পেয়ে Widevine 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-এর জন্য করা যেতে পারে। বাণিজ্যিক পরিষেবাগুলিও উপলব্ধ (অন্তত ISO BMFF/MP4-এর জন্য) এবং অন্যান্য সমাধানগুলি তৈরি করা হচ্ছে৷
সম্পর্কিত প্রযুক্তি 1: মিডিয়া সোর্স এক্সটেনশন (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);
}
};
MSE প্রাইমারে MSE সম্পর্কে আরও জানুন।
সম্পর্কিত প্রযুক্তি 2: ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH)
মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল — আপনি যেটাকেই বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। বহু-ডিভাইস জগতে ব্যান্ডউইথের সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে মোকাবিলা করার জন্য গতিশীল, অভিযোজিত বিতরণ অত্যন্ত গুরুত্বপূর্ণ।
DASH (ওরফে MPEG-DASH) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্যই ফ্ল্যাকি বিশ্বে সর্বোত্তম সম্ভাব্য মিডিয়া ডেলিভারি সক্ষম করার জন্য ডিজাইন করা হয়েছে৷ অন্যান্য বেশ কিছু প্রযুক্তি একই রকম কিছু করে — যেমন Apple-এর HTTP লাইভ স্ট্রিমিং (HLS) এবং Microsoft-এর স্মুথ স্ট্রিমিং — কিন্তু DASH হল HTTP-এর মাধ্যমে অভিযোজিত বিটরেট স্ট্রিমিংয়ের একমাত্র পদ্ধতি যা ওপেন স্ট্যান্ডার্ডের উপর ভিত্তি করে। DASH ইতিমধ্যেই YouTube এর মতো সাইট দ্বারা ব্যবহার করা হচ্ছে৷
EME এবং MSE এর সাথে এর কি সম্পর্ক? MSE-ভিত্তিক DASH বাস্তবায়নগুলি একটি ম্যানিফেস্টকে পার্স করতে পারে, একটি উপযুক্ত বিটরেটে ভিডিওর সেগমেন্টগুলি ডাউনলোড করতে পারে এবং ক্ষুধার্ত হয়ে গেলে সেগুলিকে একটি ভিডিও উপাদানে খাওয়াতে পারে — বিদ্যমান HTTP পরিকাঠামো ব্যবহার করে৷
অন্য কথায়, DASH বাণিজ্যিক সামগ্রী প্রদানকারীদের সুরক্ষিত সামগ্রীর অভিযোজিত স্ট্রিমিং করতে সক্ষম করে।
DASH টিনের উপর যা বলে তা করে:
- গতিশীল: পরিবর্তিত পরিস্থিতিতে সাড়া দেয়।
- অভিযোজিত: একটি উপযুক্ত অডিও বা ভিডিও বিটরেট প্রদান করতে অভিযোজিত হয়।
- স্ট্রিমিং: স্ট্রিমিংয়ের পাশাপাশি ডাউনলোডের অনুমতি দেয়।
- HTTP: একটি ঐতিহ্যগত স্ট্রিমিং সার্ভারের অসুবিধা ছাড়াই HTTP এর সুবিধার সাথে সামগ্রী বিতরণ সক্ষম করে।
বিবিসি DASH ব্যবহার করে পরীক্ষামূলক স্ট্রীম সরবরাহ করা শুরু করেছে:
মিডিয়া বিভিন্ন বিটরেটে বহুবার এনকোড করা হয়। প্রতিটি এনকোডিংকে রিপ্রেজেন্টেশন বলা হয়। এগুলি কয়েকটি মিডিয়া সেগমেন্টে বিভক্ত। ক্লায়েন্ট এইচটিটিপি-তে উপস্থাপনা থেকে ক্রমানুসারে বিভাগগুলির অনুরোধ করে একটি প্রোগ্রাম চালায়। সমতুল্য বিষয়বস্তু সমন্বিত উপস্থাপনাগুলির অভিযোজন সেটে প্রতিনিধিত্বগুলিকে গোষ্ঠীভুক্ত করা যেতে পারে। যদি ক্লায়েন্ট বিটরেট পরিবর্তন করতে চায় তবে এটি বর্তমান অভিযোজন সেট থেকে একটি বিকল্প বেছে নিতে পারে এবং সেই প্রতিনিধিত্ব থেকে সেগমেন্টের অনুরোধ করা শুরু করতে পারে। বিষয়বস্তু এমনভাবে এনকোড করা হয়েছে যাতে ক্লায়েন্টের জন্য এই সুইচিং সহজ হয়। মিডিয়া সেগমেন্টের একটি সংখ্যা ছাড়াও, একটি উপস্থাপনা সাধারণত একটি সূচনা সেগমেন্ট আছে। এটিকে একটি শিরোনাম হিসাবে ভাবা যেতে পারে, যাতে এনকোডিং, ফ্রেমের আকার ইত্যাদি সম্পর্কে তথ্য রয়েছে৷ একজন ক্লায়েন্টকে সেই উপস্থাপনা থেকে মিডিয়া বিভাগগুলি গ্রহণ করার আগে একটি প্রদত্ত উপস্থাপনের জন্য এটি পেতে হবে৷
সংক্ষিপ্ত করতে:
- মিডিয়া বিভিন্ন বিটরেট এ এনকোড করা হয়.
- বিভিন্ন বিটরেট ফাইল একটি HTTP সার্ভার থেকে উপলব্ধ করা হয়.
- একটি ক্লায়েন্ট ওয়েব অ্যাপ বেছে নেয় কোন বিটরেট পুনরুদ্ধার করতে হবে এবং 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% এর বেশি মোবাইল এবং ডেস্কটপ ব্রাউজারগুলি এখন <ভিডিও> এবং <অডিও> সমর্থন করে, এবং সিসকো অনুমান করে যে ভিডিও 2017 সালের মধ্যে বিশ্বব্যাপী ভোক্তা ইন্টারনেট ট্রাফিকের 80 থেকে 90 শতাংশ হবে। এই প্রসঙ্গে, সুরক্ষিত সামগ্রী বিতরণের জন্য ব্রাউজার সমর্থন ক্রমবর্ধমান তাৎপর্যপূর্ণ হতে পারে, কারণ ব্রাউজার বিক্রেতারা APIগুলির জন্য সমর্থন কমিয়ে দেয় যা বেশিরভাগ মিডিয়া প্লাগইনগুলিতে পুনরায় ব্যবহার করে।
আরও পড়া
চশমা এবং মান
EME স্পেক : সর্বশেষ সম্পাদকের খসড়া কমন এনক্রিপশন (CENC) মিডিয়া সোর্স এক্সটেনশন : সর্বশেষ সম্পাদকের ড্রাফ্ট ড্যাশ স্ট্যান্ডার্ড (হ্যাঁ, এটি একটি পিডিএফ) ড্যাশ স্ট্যান্ডার্ডের ওভারভিউ
প্রবন্ধ
ডিটিজি ওয়েবিনার (আংশিকভাবে অপ্রচলিত) ইএমই কী? , হেনরি সিভোনেন মিডিয়া সোর্স এক্সটেনশন প্রাইমার MPEG-DASH টেস্ট স্ট্রীম দ্বারা: BBC R&D ব্লগ পোস্ট
ডেমো
ক্লিয়ার কী ডেমো: simpl.info/ck মিডিয়া সোর্স এক্সটেনশন (MSE) ডেমো Google এর শাকা প্লেয়ার EME সমর্থন সহ একটি DASH ক্লায়েন্ট প্রয়োগ করে
প্রতিক্রিয়া
,এনক্রিপ্ট করা মিডিয়া এক্সটেনশনগুলি একটি API প্রদান করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে এনক্রিপ্ট করা অডিও এবং ভিডিও প্লেব্যাকের অনুমতি দেওয়ার জন্য বিষয়বস্তু সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে৷
অন্তর্নিহিত সুরক্ষা ব্যবস্থা নির্বিশেষে যেকোন ব্রাউজারে ব্যবহার করার জন্য একই অ্যাপ এবং এনক্রিপ্ট করা ফাইলগুলিকে সক্ষম করার জন্য EME ডিজাইন করা হয়েছে। আগেরটি প্রমিত API এবং প্রবাহ দ্বারা সম্ভব হয়েছে যখন পরবর্তীটি সাধারণ এনক্রিপশনের ধারণার দ্বারা সম্ভব হয়েছে৷
EME হল HTMLMediaElement স্পেসিফিকেশনের একটি এক্সটেনশন — তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হল EME-এর জন্য ব্রাউজার সমর্থন ঐচ্ছিক: যদি একটি ব্রাউজার এনক্রিপ্ট করা মিডিয়া সমর্থন না করে, তাহলে এটি এনক্রিপ্ট করা মিডিয়া চালাতে সক্ষম হবে না, কিন্তু HTML স্পেক কমপ্লায়েন্সের জন্য EME এর প্রয়োজন নেই৷ EME স্পেক থেকে:
এই প্রস্তাবটি HTMLMediaElement প্রসারিত করে যা সুরক্ষিত সামগ্রীর প্লেব্যাক নিয়ন্ত্রণ করতে API প্রদান করে।
এপিআই সাধারণ ক্লিয়ার কী ডিক্রিপশন থেকে উচ্চ মানের ভিডিও পর্যন্ত ব্যবহারের ক্ষেত্রে সমর্থন করে (একটি উপযুক্ত ব্যবহারকারী এজেন্ট বাস্তবায়ন দেওয়া হয়েছে)। লাইসেন্স/কী এক্সচেঞ্জ অ্যাপ্লিকেশন দ্বারা নিয়ন্ত্রিত হয়, যা কন্টেন্ট ডিক্রিপশন এবং সুরক্ষা প্রযুক্তির একটি পরিসীমা সমর্থন করে শক্তিশালী প্লেব্যাক অ্যাপ্লিকেশনগুলির বিকাশের সুবিধা দেয়৷
এই স্পেসিফিকেশন একটি বিষয়বস্তু সুরক্ষা বা ডিজিটাল অধিকার ব্যবস্থাপনা সিস্টেম সংজ্ঞায়িত করে না। বরং, এটি একটি সাধারণ এপিআইকে সংজ্ঞায়িত করে যা এই ধরনের সিস্টেমের পাশাপাশি সহজ কন্টেন্ট এনক্রিপশন সিস্টেমের সাথে আবিষ্কার, নির্বাচন এবং ইন্টারঅ্যাক্ট করতে ব্যবহার করা যেতে পারে। এই স্পেসিফিকেশন মেনে চলার জন্য ডিজিটাল রাইটস ম্যানেজমেন্টের বাস্তবায়নের প্রয়োজন নেই: শুধুমাত্র ক্লিয়ার কী সিস্টেমকে একটি সাধারণ বেসলাইন হিসেবে প্রয়োগ করতে হবে।
সাধারণ API কন্টেন্ট এনক্রিপশন ক্ষমতার একটি সাধারণ সেট সমর্থন করে, অ্যাপ্লিকেশন ফাংশন যেমন প্রমাণীকরণ এবং অনুমোদন পৃষ্ঠা লেখকদের কাছে রেখে দেয়। এনক্রিপশন সিস্টেম এবং একটি লাইসেন্স বা অন্য সার্ভারের মধ্যে ব্যান্ড-অব-ব্যান্ড যোগাযোগ অনুমান করার পরিবর্তে বিষয়বস্তু সুরক্ষা সিস্টেম-নির্দিষ্ট বার্তাগুলিকে পৃষ্ঠা দ্বারা মধ্যস্থতা করার প্রয়োজন দ্বারা এটি অর্জন করা হয়।
EME বাস্তবায়ন নিম্নলিখিত বাহ্যিক উপাদান ব্যবহার করে:
- কী সিস্টেম: একটি বিষয়বস্তু সুরক্ষা (ডিআরএম) প্রক্রিয়া। EME ক্লিয়ার কী ( নীচে সে সম্পর্কে আরও) ছাড়াও কী সিস্টেমগুলিকে সংজ্ঞায়িত করে না।
- কন্টেন্ট ডিক্রিপশন মডিউল (CDM): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার মেকানিজম যা এনক্রিপ্ট করা মিডিয়ার প্লেব্যাক সক্ষম করে। কী সিস্টেমের মতো, ইএমই কোনো সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে যোগাযোগ করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস প্রদান করে।
- লাইসেন্স (কী) সার্ভার: মিডিয়া ডিক্রিপ্ট করার জন্য কী প্রদান করতে একটি CDM এর সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনার দায়িত্ব আবেদনের।
- প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য মিডিয়া এনকোড এবং এনক্রিপ্ট করে।
মনে রাখবেন যে EME ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কী পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে, কিন্তু ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করার জন্য কীগুলি পুনরুদ্ধার করা হয় (ঐচ্ছিকভাবে) ব্যবহারকারীকে প্রমাণীকরণ করার পরে। Netflix-এর মতো পরিষেবাগুলিকে অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন একজন ব্যবহারকারী অ্যাপ্লিকেশনটিতে সাইন ইন করেন, তখন অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুযোগ-সুবিধা নির্ধারণ করে।
EME কিভাবে কাজ করে?
নীচের কোড উদাহরণের সাথে মিল রেখে EME এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে রয়েছে:
একাধিক ফরম্যাট বা কোডেক উপলব্ধ থাকলে, MediaSource.isTypeSupported() বা HTMLMediaElement.canPlayType() উভয়ই সঠিকটি নির্বাচন করতে ব্যবহার করা যেতে পারে। যাইহোক, সিডিএম শুধুমাত্র এনক্রিপ্ট করা সামগ্রীর জন্য ব্রাউজার যা সমর্থন করে তার একটি উপসেট সমর্থন করতে পারে। একটি ফর্ম্যাট এবং কোডেক নির্বাচন করার আগে একটি MediaKeys কনফিগারেশন নিয়ে আলোচনা করা ভাল৷ যদি অ্যাপ্লিকেশনটি এনক্রিপ্ট করা ইভেন্টের জন্য অপেক্ষা করে কিন্তু তখন MediaKeys দেখায় যে এটি নির্বাচিত ফরম্যাট/কোডেক পরিচালনা করতে পারে না, প্লেব্যাকে বাধা না দিয়ে স্যুইচ করতে অনেক দেরি হতে পারে।
প্রস্তাবিত প্রবাহ হল প্রথমে MediaKeys নিয়ে আলোচনা করা, MediaKeysSystemAccess.getConfiguration() ব্যবহার করে আলোচনা করা কনফিগারেশন খুঁজে বের করা।
যদি শুধুমাত্র একটি ফর্ম্যাট/কোডেক থেকে বেছে নেওয়া হয়, তাহলে getConfiguration() এর কোন প্রয়োজন নেই। যাইহোক, প্রথমে MediaKeys সেট আপ করা এখনও পছন্দনীয়। এনক্রিপ্ট করা ইভেন্টের জন্য অপেক্ষা করার একমাত্র কারণ হল বিষয়বস্তু এনক্রিপ্ট করা হয়েছে কিনা তা জানার কোন উপায় না থাকলে, কিন্তু বাস্তবে এটি অসম্ভাব্য।
- একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও চালানোর চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
- ব্রাউজার স্বীকার করে যে মিডিয়াটি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা (initData) সহ একটি এনক্রিপ্ট করা ইভেন্ট ফায়ার করে।
অ্যাপ্লিকেশনটি এনক্রিপ্ট করা ইভেন্ট পরিচালনা করে:
যদি কোন MediaKeys অবজেক্ট মিডিয়া উপাদানের সাথে যুক্ত না থাকে, তাহলে প্রথমে একটি উপলব্ধ কী সিস্টেম নির্বাচন করুন navigator.requestMediaKeySystemAccess() ব্যবহার করে কী সিস্টেমগুলি উপলব্ধ তা পরীক্ষা করে দেখুন, তারপর একটি MediaKeySystemAccess অবজেক্টের মাধ্যমে একটি উপলব্ধ কী সিস্টেমের জন্য একটি MediaKeys অবজেক্ট তৈরি করুন। উল্লেখ্য যে MediaKeys অবজেক্টের সূচনা প্রথম এনক্রিপ্ট করা ইভেন্টের আগে হওয়া উচিত। একটি লাইসেন্স সার্ভার URL প্রাপ্তি একটি উপলব্ধ কী সিস্টেম নির্বাচন স্বাধীনভাবে অ্যাপ্লিকেশন দ্বারা সম্পন্ন করা হয়. একটি MediaKeys অবজেক্ট একটি অডিও বা ভিডিও উপাদানের জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কী উপস্থাপন করে। এটি একটি সিডিএম দৃষ্টান্ত উপস্থাপন করে এবং সিডিএম-এ অ্যাক্সেস প্রদান করে, বিশেষত কী সেশন তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কী পেতে ব্যবহৃত হয়।
একবার MediaKeys অবজেক্ট তৈরি হয়ে গেলে, এটিকে মিডিয়া উপাদানে বরাদ্দ করুন: setMediaKeys() একটি HTMLMediaElement-এর সাথে MediaKeys অবজেক্টকে সংযুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময়, অর্থাৎ ডিকোডিংয়ের সময় ব্যবহার করা যেতে পারে।
অ্যাপটি MediaKeys-এ createSession() কল করে একটি MediaKeySession তৈরি করে। এটি একটি MediaKeySession তৈরি করে, যা একটি লাইসেন্সের জীবনকাল এবং এর কী(গুলি) প্রতিনিধিত্ব করে।
অ্যাপটি এনক্রিপ্ট করা হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম-এ প্রেরণ করে, MediaKeySession-এ generateRequest() কল করে লাইসেন্সের অনুরোধ তৈরি করে।
সিডিএম একটি বার্তা ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে একটি কী অর্জনের অনুরোধ।
MediaKeySession অবজেক্ট বার্তা ইভেন্ট গ্রহণ করে এবং অ্যাপ্লিকেশন লাইসেন্স সার্ভারে একটি বার্তা পাঠায় (উদাহরণস্বরূপ, XHR এর মাধ্যমে)।
অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া গ্রহণ করে এবং MediaKeySession-এর update() পদ্ধতি ব্যবহার করে ডেটা CDM-তে প্রেরণ করে।
সিডিএম লাইসেন্সের কী ব্যবহার করে মিডিয়াকে ডিক্রিপ্ট করে। মিডিয়া উপাদানের সাথে যুক্ত MediaKeys-এর মধ্যে যেকোনো সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচীকৃত।
মিডিয়া প্লেব্যাক আবার শুরু হয়।
কিভাবে ব্রাউজার জানে যে মিডিয়া এনক্রিপ্ট করা হয়েছে?
এই তথ্যটি মিডিয়া কন্টেইনার ফাইলের মেটাডেটাতে রয়েছে, যা ISO BMFF বা WebM-এর মতো ফর্ম্যাটে থাকবে৷ ISO BMFF এর জন্য এর অর্থ হেডার মেটাডেটা, যাকে বলা হয় সুরক্ষা স্কিম তথ্য বাক্স। WebM কিছু WebM-নির্দিষ্ট সংযোজন সহ Matroska ContentEncryption উপাদান ব্যবহার করে। EME-নির্দিষ্ট রেজিস্ট্রিতে প্রতিটি কন্টেইনারের জন্য নির্দেশিকা প্রদান করা হয়।
মনে রাখবেন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়ার সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনের সাথে অস্বচ্ছ: বার্তাগুলি শুধুমাত্র সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ স্তরটি দেখতে পারে যে সিডিএম কী ধরনের বার্তা পাঠাচ্ছে। লাইসেন্সের অনুরোধে সিডিএম-এর বৈধতা (এবং আস্থার সম্পর্ক) প্রমাণ রয়েছে এবং সেইসাথে ফলস্বরূপ লাইসেন্সে বিষয়বস্তু কী(গুলি) এনক্রিপ্ট করার সময় ব্যবহার করার জন্য একটি কী রয়েছে।
কিন্তু সিডিএম আসলে কি করে?
একটি EME বাস্তবায়ন নিজেই মিডিয়া ডিক্রিপ্ট করার একটি উপায় প্রদান করে না: এটি কেবল একটি ওয়েব অ্যাপ্লিকেশনের জন্য সামগ্রী ডিক্রিপশন মডিউলগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য একটি API প্রদান করে।
সিডিএম আসলে যা করে তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না এবং একটি সিডিএম মিডিয়ার ডিকোডিং (ডিকম্প্রেশন) পাশাপাশি ডিক্রিপশন পরিচালনা করতে পারে। কমপক্ষে থেকে সবচেয়ে শক্তিশালী, সিডিএম কার্যকারিতার জন্য বেশ কয়েকটি সম্ভাব্য বিকল্প রয়েছে:
- শুধুমাত্র ডিক্রিপশন, সাধারণ মিডিয়া পাইপলাইন ব্যবহার করে প্লেব্যাক সক্ষম করা, উদাহরণস্বরূপ একটি <ভিডিও> উপাদানের মাধ্যমে।
- ডিক্রিপশন এবং ডিকোডিং, রেন্ডারিংয়ের জন্য ব্রাউজারে ভিডিও ফ্রেম পাস করা।
- ডিক্রিপশন এবং ডিকোডিং, সরাসরি হার্ডওয়্যারে রেন্ডারিং (উদাহরণস্বরূপ, GPU)।
একটি ওয়েব অ্যাপে সিডিএম উপলব্ধ করার একাধিক উপায় রয়েছে:
- ব্রাউজার দিয়ে একটি সিডিএম বান্ডিল করুন।
- আলাদাভাবে একটি সিডিএম বিতরণ করুন।
- অপারেটিং সিস্টেমে একটি সিডিএম তৈরি করুন।
- ফার্মওয়্যারে একটি সিডিএম অন্তর্ভুক্ত করুন।
- হার্ডওয়্যারে একটি সিডিএম এম্বেড করুন।
কিভাবে একটি সিডিএম উপলব্ধ করা হয় তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না, তবে সমস্ত ক্ষেত্রে ব্রাউজার সিডিএম পরীক্ষা এবং প্রকাশের জন্য দায়ী।
EME একটি নির্দিষ্ট কী সিস্টেমকে বাধ্যতামূলক করে না; বর্তমান ডেস্কটপ এবং মোবাইল ব্রাউজারগুলির মধ্যে, Chrome Widevine সমর্থন করে এবং IE11 PlayReady সমর্থন করে।
লাইসেন্স সার্ভার থেকে একটি চাবি পাওয়া
সাধারণ বাণিজ্যিক ব্যবহারে, সামগ্রী একটি প্যাকেজিং পরিষেবা বা সরঞ্জাম ব্যবহার করে এনক্রিপ্ট এবং এনকোড করা হবে। একবার এনক্রিপ্ট করা মিডিয়া অনলাইনে উপলব্ধ করা হলে, একটি ওয়েব ক্লায়েন্ট লাইসেন্স সার্ভার থেকে একটি কী (লাইসেন্সের মধ্যে থাকা) পেতে পারে এবং বিষয়বস্তুর ডিক্রিপশন এবং প্লেব্যাক সক্ষম করতে কী ব্যবহার করতে পারে।
নিম্নলিখিত কোড ( নির্দিষ্ট উদাহরণ থেকে অভিযোজিত) দেখায় কিভাবে একটি অ্যাপ্লিকেশন একটি উপযুক্ত কী সিস্টেম নির্বাচন করতে পারে এবং লাইসেন্স সার্ভার থেকে একটি কী পেতে পারে।
var video = document.querySelector('video');
var config = [{initDataTypes: ['webm'],
videoCapabilities: [{contentType: 'video/webm; codecs="vp09.00.10.08"'}]}];
if (!video.mediaKeys) {
navigator.requestMediaKeySystemAccess('org.w3.clearkey',
config).then(
function(keySystemAccess) {
var promise = keySystemAccess.createMediaKeys();
promise.catch(
console.error.bind(console, 'Unable to create MediaKeys')
);
promise.then(
function(createdMediaKeys) {
return video.setMediaKeys(createdMediaKeys);
}
).catch(
console.error.bind(console, 'Unable to set MediaKeys')
);
promise.then(
function(createdMediaKeys) {
var initData = new Uint8Array([...]);
var keySession = createdMediaKeys.createSession();
keySession.addEventListener('message', handleMessage,
false);
return keySession.generateRequest('webm', initData);
}
).catch(
console.error.bind(console,
'Unable to create or initialize key session')
);
}
);
}
function handleMessage(event) {
var keySession = event.target;
var license = new Uint8Array([...]);
keySession.update(license).catch(
console.error.bind(console, 'update() failed')
);
}
সাধারণ এনক্রিপশন
সাধারণ এনক্রিপশন সলিউশন কন্টেন্ট প্রোভাইডারদের প্রতি কন্টেইনার/কোডেক প্রতি একবার তাদের কন্টেন্ট এনক্রিপ্ট করতে এবং প্যাকেজ করার অনুমতি দেয় এবং এটি বিভিন্ন কী সিস্টেম, সিডিএম এবং ক্লায়েন্টের সাথে ব্যবহার করে: অর্থাৎ, সাধারণ এনক্রিপশন সমর্থন করে এমন যেকোনো সিডিএম। উদাহরণস্বরূপ, Playready ব্যবহার করে প্যাকেজ করা একটি ভিডিও একটি Widevine লাইসেন্স সার্ভার থেকে একটি কী পেয়ে Widevine 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-এর জন্য করা যেতে পারে। বাণিজ্যিক পরিষেবাগুলিও উপলব্ধ (অন্তত ISO BMFF/MP4-এর জন্য) এবং অন্যান্য সমাধানগুলি তৈরি করা হচ্ছে৷
সম্পর্কিত প্রযুক্তি 1: মিডিয়া সোর্স এক্সটেনশন (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);
}
};
MSE প্রাইমারে MSE সম্পর্কে আরও জানুন।
সম্পর্কিত প্রযুক্তি 2: ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH)
মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল — আপনি যেটাকেই বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। বহু-ডিভাইস জগতে ব্যান্ডউইথের সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে মোকাবিলা করার জন্য গতিশীল, অভিযোজিত বিতরণ অত্যন্ত গুরুত্বপূর্ণ।
DASH (ওরফে MPEG-DASH) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্যই ফ্ল্যাকি বিশ্বে সর্বোত্তম সম্ভাব্য মিডিয়া ডেলিভারি সক্ষম করার জন্য ডিজাইন করা হয়েছে৷ অন্যান্য বেশ কিছু প্রযুক্তি একই রকম কিছু করে — যেমন Apple-এর HTTP লাইভ স্ট্রিমিং (HLS) এবং Microsoft-এর স্মুথ স্ট্রিমিং — কিন্তু DASH হল HTTP-এর মাধ্যমে অভিযোজিত বিটরেট স্ট্রিমিংয়ের একমাত্র পদ্ধতি যা ওপেন স্ট্যান্ডার্ডের উপর ভিত্তি করে। DASH ইতিমধ্যেই YouTube এর মতো সাইট দ্বারা ব্যবহার করা হচ্ছে৷
EME এবং MSE এর সাথে এর কি সম্পর্ক? MSE-ভিত্তিক DASH বাস্তবায়নগুলি একটি ম্যানিফেস্টকে পার্স করতে পারে, একটি উপযুক্ত বিটরেটে ভিডিওর সেগমেন্টগুলি ডাউনলোড করতে পারে এবং ক্ষুধার্ত হয়ে গেলে সেগুলিকে একটি ভিডিও উপাদানে খাওয়াতে পারে — বিদ্যমান HTTP পরিকাঠামো ব্যবহার করে৷
অন্য কথায়, DASH বাণিজ্যিক সামগ্রী প্রদানকারীদের সুরক্ষিত সামগ্রীর অভিযোজিত স্ট্রিমিং করতে সক্ষম করে।
DASH টিনের উপর যা বলে তা করে:
- গতিশীল: পরিবর্তিত পরিস্থিতিতে সাড়া দেয়।
- অভিযোজিত: একটি উপযুক্ত অডিও বা ভিডিও বিটরেট প্রদান করতে অভিযোজিত হয়।
- স্ট্রিমিং: স্ট্রিমিংয়ের পাশাপাশি ডাউনলোডের অনুমতি দেয়।
- HTTP: একটি ঐতিহ্যগত স্ট্রিমিং সার্ভারের অসুবিধা ছাড়াই HTTP এর সুবিধার সাথে সামগ্রী বিতরণ সক্ষম করে।
বিবিসি 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>
(এই এক্সএমএল ইউটিউব ড্যাশ ডেমো প্লেয়ারের জন্য ব্যবহৃত .mpd ফাইল থেকে নেওয়া হয়েছে))
ড্যাশ স্পেকের মতে, একটি এমপিডি ফাইল তাত্ত্বিকভাবে একটি ভিডিওর জন্য এসআরসি হিসাবে ব্যবহার করা যেতে পারে। যাইহোক, ওয়েব বিকাশকারীদের আরও নমনীয়তা দেওয়ার জন্য, ব্রাউজার বিক্রেতারা ড্যাশ.জেএসের মতো এমএসই ব্যবহার করে জাভাস্ক্রিপ্ট লাইব্রেরিতে ড্যাশ সমর্থন ছেড়ে দেওয়ার পরিবর্তে বেছে নিয়েছেন। জাভাস্ক্রিপ্টে ড্যাশ প্রয়োগ করা ব্রাউজারের আপডেটের প্রয়োজন ছাড়াই অভিযোজন অ্যালগরিদমকে বিকশিত হতে দেয়। এমএসই ব্যবহার করে ব্রাউজারের পরিবর্তনের প্রয়োজন ছাড়াই বিকল্প ম্যানিফেস্ট ফর্ম্যাট এবং বিতরণ প্রক্রিয়াগুলির সাথেও পরীক্ষার অনুমতি দেয়। গুগলের শাকা প্লেয়ার ইএমই সমর্থন সহ একটি ড্যাশ ক্লায়েন্ট প্রয়োগ করে।
উপসংহার
ভিডিও এবং অডিও সরবরাহ করতে ওয়েবের ব্যবহার বিশাল হারে বাড়ছে। দেখে মনে হচ্ছে যে প্রতিটি নতুন ডিভাইস, এটি কোনও ট্যাবলেট, গেম কনসোল, সংযুক্ত টিভি বা সেট-টপ বক্স, এইচটিটিপি-র মাধ্যমে প্রধান সামগ্রী সরবরাহকারীদের কাছ থেকে মিডিয়া স্ট্রিম করতে সক্ষম। 85% এরও বেশি মোবাইল এবং ডেস্কটপ ব্রাউজারগুলি এখন <ভিডিও> এবং <অডিও> সমর্থন করে এবং সিসকো অনুমান করে যে ভিডিওটি 2017 সালের মধ্যে গ্লোবাল ভোক্তা ইন্টারনেট ট্র্যাফিকের 80 থেকে 90 শতাংশ হবে।
আরও পড়া
চশমা এবং মান
ইএমই স্পেস : সর্বশেষ সম্পাদকের খসড়া কমন এনক্রিপশন (সিএনসি) মিডিয়া সোর্স এক্সটেনশনস : সর্বশেষ সম্পাদকের খসড়া ড্যাশ স্ট্যান্ডার্ড (হ্যাঁ, এটি একটি পিডিএফ) ড্যাশ স্ট্যান্ডার্ডের ওভারভিউ
প্রবন্ধ
ডিটিজি ওয়েবিনার (আংশিকভাবে অপ্রচলিত) ইএমই কী? , হেনরি সিভোনেন মিডিয়া উত্স এক্সটেনশনস প্রাইমার এমপিইজি-ড্যাশ পরীক্ষার স্ট্রিম: বিবিসি আর অ্যান্ড ডি ব্লগ পোস্ট
ডেমো
ক্লিয়ার কী ডেমো: সিম্পল.ইনফো/ সি কে মিডিয়া সোর্স এক্সটেনশনস (এমএসই) ডেমো গুগলের শাকা প্লেয়ার ইএমই সমর্থন সহ একটি ড্যাশ ক্লায়েন্টকে প্রয়োগ করে
প্রতিক্রিয়া
,এনক্রিপ্ট করা মিডিয়া এক্সটেনশনগুলি এমন একটি এপিআই সরবরাহ করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে সামগ্রী সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে, এনক্রিপ্ট করা অডিও এবং ভিডিওর প্লেব্যাকের অনুমতি দেয়।
অন্তর্নিহিত সুরক্ষা সিস্টেম নির্বিশেষে ইএমই একই অ্যাপ্লিকেশন এবং এনক্রিপ্ট করা ফাইলগুলি কোনও ব্রাউজারে ব্যবহার করার জন্য ডিজাইন করা হয়েছে। পূর্ববর্তীটি স্ট্যান্ডার্ডাইজড এপিআই এবং প্রবাহ দ্বারা সম্ভব হয় যখন সাধারণ এনক্রিপশন ধারণার দ্বারা পরবর্তীটি সম্ভব হয়।
ইএমই এইচটিএমএলমিডিয়েলিমেন্ট স্পেসিফিকেশনের একটি এক্সটেনশন - তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হ'ল ইএমইর জন্য ব্রাউজার সমর্থন al চ্ছিক: যদি কোনও ব্রাউজার এনক্রিপ্টড মিডিয়া সমর্থন না করে তবে এটি এনক্রিপ্ট করা মিডিয়া খেলতে সক্ষম হবে না, তবে এইচটিএমএল স্পেস সম্মতির জন্য EME প্রয়োজন হয় না। ইএমই স্পেক থেকে:
এই প্রস্তাবটি সুরক্ষিত সামগ্রীর প্লেব্যাক নিয়ন্ত্রণ করতে এপিআই সরবরাহকারী এইচটিএমএলমিডিয়েলিমেন্ট প্রসারিত করে।
এপিআই সাধারণ পরিষ্কার কী ডিক্রিপশন থেকে উচ্চ মানের ভিডিও পর্যন্ত (উপযুক্ত ব্যবহারকারী এজেন্ট বাস্তবায়ন প্রদত্ত) কেসগুলি সমর্থন করে। লাইসেন্স/কী এক্সচেঞ্জ অ্যাপ্লিকেশন দ্বারা নিয়ন্ত্রিত হয়, বিভিন্ন সামগ্রী ডিক্রিপশন এবং সুরক্ষা প্রযুক্তিগুলিকে সমর্থন করে শক্তিশালী প্লেব্যাক অ্যাপ্লিকেশনগুলির বিকাশের সুবিধার্থে।
এই স্পেসিফিকেশন কোনও সামগ্রী সুরক্ষা বা ডিজিটাল অধিকার পরিচালনা সিস্টেমকে সংজ্ঞায়িত করে না। বরং এটি একটি সাধারণ এপিআই সংজ্ঞায়িত করে যা এই জাতীয় সিস্টেমগুলির সাথে পাশাপাশি সহজ সামগ্রী এনক্রিপশন সিস্টেমগুলির সাথে আবিষ্কার করতে, নির্বাচন করতে এবং ইন্টারঅ্যাক্ট করতে ব্যবহৃত হতে পারে। এই স্পেসিফিকেশনের সাথে সম্মতি দেওয়ার জন্য ডিজিটাল অধিকার পরিচালনার বাস্তবায়নের প্রয়োজন নেই: কেবলমাত্র একটি সাধারণ বেসলাইন হিসাবে প্রয়োগ করা প্রয়োজন।
সাধারণ এপিআই সামগ্রী এনক্রিপশন দক্ষতার একটি সাধারণ সেটকে সমর্থন করে, অ্যাপ্লিকেশন ফাংশন যেমন প্রমাণীকরণ এবং পৃষ্ঠা লেখকদের অনুমোদনের মতো রেখে। এনক্রিপশন সিস্টেম এবং লাইসেন্স বা অন্যান্য সার্ভারের মধ্যে ব্যান্ড-অফ-ব্যান্ড যোগাযোগ ধরে না করে পৃষ্ঠার মধ্যস্থতা করার জন্য সামগ্রী সুরক্ষা সিস্টেম-নির্দিষ্ট মেসেজিং প্রয়োজনের মাধ্যমে এটি অর্জন করা হয়।
ইএমই বাস্তবায়নগুলি নিম্নলিখিত বাহ্যিক উপাদানগুলি ব্যবহার করে:
- কী সিস্টেম: একটি সামগ্রী সুরক্ষা (ডিআরএম) প্রক্রিয়া। ইএমই ক্লিয়ার কী ( নীচের সম্পর্কে আরও) বাদে মূল সিস্টেমগুলি নিজেরাই সংজ্ঞায়িত করে না।
- সামগ্রী ডিক্রিপশন মডিউল (সিডিএম): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার প্রক্রিয়া যা এনক্রিপ্ট করা মিডিয়াগুলির প্লেব্যাক সক্ষম করে। কী সিস্টেমগুলির মতো, EME কোনও সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস সরবরাহ করে।
- লাইসেন্স (কী) সার্ভার: ডিক্রিপ্ট মিডিয়াগুলিতে কী সরবরাহ করতে একটি সিডিএমের সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনা হ'ল আবেদনের দায়িত্ব।
- প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য এনকোডস এবং এনক্রিপ্টস মিডিয়া।
নোট করুন যে ইএমই ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কীগুলি পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে তবে ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করতে কীগুলির পুনরুদ্ধার (ally চ্ছিকভাবে) কোনও ব্যবহারকারীকে প্রমাণীকরণের পরে ঘটে। নেটফ্লিক্সের মতো পরিষেবাগুলি অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন কোনও ব্যবহারকারী অ্যাপ্লিকেশনটিতে স্বাক্ষর করে, অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুবিধাগুলি নির্ধারণ করে।
ইএমই কীভাবে কাজ করে?
নীচের কোড উদাহরণের সাথে সম্পর্কিত ইএমই এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে:
যদি একাধিক ফর্ম্যাট বা কোডেক উপলব্ধ থাকে তবে মিডিয়াসোর্স.আইস্টাইপসপোর্টড () বা এইচটিএমএলমিডিয়েলিমেন্ট.ক্যানপ্লেটিপ () উভয়ই সঠিকটি নির্বাচন করতে ব্যবহার করা যেতে পারে। তবে, সিডিএম কেবল ব্রাউজারটি আনক্রিপ্ট করা সামগ্রীর জন্য কী সমর্থন করে তার একটি উপসেটকে সমর্থন করতে পারে। ফর্ম্যাট এবং কোডেক নির্বাচন করার আগে কোনও মিডিয়াকিজ কনফিগারেশন নিয়ে আলোচনা করা ভাল। যদি অ্যাপ্লিকেশনটি এনক্রিপ্ট করা ইভেন্টের জন্য অপেক্ষা করে তবে মিডিয়াকিরা দেখায় যে এটি নির্বাচিত ফর্ম্যাট/কোডেক পরিচালনা করতে পারে না, প্লেব্যাককে বাধা না দিয়ে স্যুইচ করতে খুব দেরি হতে পারে।
প্রস্তাবিত প্রবাহটি হ'ল মিডিয়াকিজিগুলি প্রথমে আলোচনার জন্য, মিডিয়াকিজ সিস্টেমসেসেস.সেট কনফিগারেশন () ব্যবহার করে আলোচনার কনফিগারেশনটি খুঁজে বের করার জন্য।
যদি বেছে নিতে কেবল একটি ফর্ম্যাট/কোডেক থাকে তবে গেট কনফিগারেশন () এর প্রয়োজন নেই। তবে প্রথমে মিডিয়াকিজ সেট আপ করা ভাল। এনক্রিপ্ট করা ইভেন্টটির জন্য অপেক্ষা করার একমাত্র কারণ হ'ল যদি সামগ্রীটি এনক্রিপ্ট করা হয়েছে কিনা তা জানার কোনও উপায় না থাকলে, তবে বাস্তবে এটি অসম্ভব।
- একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও খেলতে চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
- ব্রাউজারটি স্বীকৃতি দিয়েছে যে মিডিয়াগুলি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা (ইনিশডাটা) সহ একটি এনক্রিপ্টড ইভেন্টে আগুন লাগায়।
অ্যাপ্লিকেশনটি এনক্রিপ্ট করা ইভেন্টটি পরিচালনা করে:
যদি কোনও মিডিয়াকিজ অবজেক্ট মিডিয়া উপাদানগুলির সাথে সম্পর্কিত না হয় তবে প্রথমে কোন কী সিস্টেমগুলি উপলভ্য তা পরীক্ষা করার জন্য প্রথমে নেভিগেটর.আরকিউস্টমিডিয়াকিজিস্টেম্যাকসেস () ব্যবহার করে একটি উপলভ্য কী সিস্টেম নির্বাচন করুন, তারপরে একটি মিডিয়াকিসিস্টেমসেসেস অবজেক্টের মাধ্যমে উপলব্ধ কী সিস্টেমের জন্য একটি মিডিয়াকিজ অবজেক্ট তৈরি করুন। নোট করুন যে প্রথম এনক্রিপ্ট করা ইভেন্টের আগে মিডিয়াকিজ অবজেক্টের সূচনা হওয়া উচিত। লাইসেন্স সার্ভার ইউআরএল পাওয়া অ্যাপটি একটি উপলভ্য কী সিস্টেম নির্বাচন করার জন্য স্বাধীনভাবে সম্পন্ন করে। একটি মিডিয়াকিজ অবজেক্ট একটি অডিও বা ভিডিও উপাদানটির জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কীগুলি উপস্থাপন করে। এটি একটি সিডিএম উদাহরণ উপস্থাপন করে এবং সিডিএম -তে অ্যাক্সেস সরবরাহ করে, বিশেষত কী সেশনগুলি তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কীগুলি পেতে ব্যবহৃত হয়।
একবার মিডিয়াকিজ অবজেক্টটি তৈরি হয়ে গেলে, এটি মিডিয়া উপাদানকে নির্ধারণ করুন: সেটমিডিয়াকি () মিডিয়াকিজ অবজেক্টকে এইচটিএমএলমিডিয়েলিমেন্টের সাথে যুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময় ব্যবহার করা যায়, যেমন ডিকোডিংয়ের সময়।
অ্যাপ্লিকেশনটি মিডিয়াকিজগুলিতে ক্রিয়েটেসেশন () কল করে একটি মিডিয়াকিসেশন তৈরি করে। এটি একটি মিডিয়াকিসেশন তৈরি করে, যা লাইসেন্সের আজীবন এবং এর কী (গুলি) উপস্থাপন করে।
অ্যাপ্লিকেশনটি এনক্রিপ্ট করা হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম -এ পাস করে লাইসেন্স অনুরোধ উত্পন্ন করে, মিডিয়াসেকশনে জেনারেটারেক্ট () কল করে।
সিডিএম একটি বার্তার ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে কী অর্জনের জন্য একটি অনুরোধ।
মিডিয়াসেসেশন অবজেক্টটি বার্তা ইভেন্টটি গ্রহণ করে এবং অ্যাপ্লিকেশনটি লাইসেন্স সার্ভারে একটি বার্তা প্রেরণ করে (উদাহরণস্বরূপ এক্সএইচআর এর মাধ্যমে)।
অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া গ্রহণ করে এবং মিডিয়াসেকশনের আপডেট () পদ্ধতি ব্যবহার করে সিডিএম -তে ডেটা পাস করে।
সিডিএম লাইসেন্সের কীগুলি ব্যবহার করে মিডিয়া ডিক্রিপ্ট করে। মিডিয়া উপাদানগুলির সাথে সম্পর্কিত মিডিয়াকির মধ্যে যে কোনও সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতিটি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচকযুক্ত।
মিডিয়া প্লেব্যাক পুনরায় শুরু করে।
ব্রাউজার কীভাবে জানতে পারে যে মিডিয়া এনক্রিপ্ট করা হয়েছে?
এই তথ্যটি মিডিয়া কনটেইনার ফাইলের মেটাডেটাতে রয়েছে, যা আইএসও বিএমএফএফ বা ওয়েবএমের মতো ফর্ম্যাটে থাকবে। আইএসও বিএমএফএফের জন্য এর অর্থ হেডার মেটাডেটা, যাকে সুরক্ষা স্কিম তথ্য বাক্স বলা হয়। ওয়েবএম কিছু ওয়েব-নির্দিষ্ট সংযোজন সহ ম্যাট্রোস্কা কন্টেন্টেনক্রিপশন উপাদান ব্যবহার করে। EME-নির্দিষ্ট রেজিস্ট্রিতে প্রতিটি ধারক জন্য গাইডলাইন সরবরাহ করা হয়।
নোট করুন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়াটিতে সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনটির কাছে অস্বচ্ছ: বার্তাগুলি কেবল সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ্লিকেশন স্তরটি সিডিএম কী ধরণের বার্তা প্রেরণ করছে তা দেখতে পারে। লাইসেন্স অনুরোধে সিডিএমের বৈধতা (এবং বিশ্বাসের সম্পর্ক) এর প্রমাণ রয়েছে পাশাপাশি ফলস্বরূপ লাইসেন্সে সামগ্রী কী (গুলি) এনক্রিপ্ট করার সময় ব্যবহারের মূল কী রয়েছে।
তবে সিডিএম আসলে কী করে?
একটি ইএমই বাস্তবায়ন নিজেই মিডিয়া ডিক্রিপ্ট করার কোনও উপায় সরবরাহ করে না: এটি কেবল কোনও ওয়েব অ্যাপ্লিকেশনটির জন্য সামগ্রী ডিক্রিপশন মডিউলগুলির সাথে যোগাযোগের জন্য একটি এপিআই সরবরাহ করে।
সিডিএমগুলি আসলে যা করে তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না এবং একটি সিডিএম মিডিয়ার ডিকোডিং (ডিকম্প্রেশন) পাশাপাশি ডিক্রিপশন পরিচালনা করতে পারে। কমপক্ষে থেকে সবচেয়ে শক্তিশালী, সিডিএম কার্যকারিতার জন্য বেশ কয়েকটি সম্ভাব্য বিকল্প রয়েছে:
- কেবলমাত্র ডিক্রিপশন, সাধারণ মিডিয়া পাইপলাইন ব্যবহার করে প্লেব্যাক সক্ষম করে, উদাহরণস্বরূপ <ভিডিও> উপাদানটির মাধ্যমে।
- ডিক্রিপশন এবং ডিকোডিং, রেন্ডারিংয়ের জন্য ব্রাউজারে ভিডিও ফ্রেমগুলি পাস করা।
- ডিক্রিপশন এবং ডিকোডিং, সরাসরি হার্ডওয়্যারটিতে রেন্ডারিং (উদাহরণস্বরূপ, জিপিইউ)।
একটি ওয়েব অ্যাপ্লিকেশনটিতে সিডিএম উপলব্ধ করার একাধিক উপায় রয়েছে:
- ব্রাউজার সহ একটি সিডিএম বান্ডিল করুন।
- আলাদাভাবে একটি সিডিএম বিতরণ করুন।
- অপারেটিং সিস্টেমে একটি সিডিএম তৈরি করুন।
- ফার্মওয়্যারটিতে একটি সিডিএম অন্তর্ভুক্ত করুন।
- হার্ডওয়্যারে একটি সিডিএম এম্বেড করুন।
সিডিএম কীভাবে উপলব্ধ করা হয় তা ইএমই স্পেক দ্বারা সংজ্ঞায়িত করা হয় না, তবে সমস্ত ক্ষেত্রে ব্রাউজারটি সিডিএম পরীক্ষা এবং প্রকাশের জন্য দায়ী।
EME কোনও নির্দিষ্ট কী সিস্টেমকে আদেশ দেয় না; বর্তমান ডেস্কটপ এবং মোবাইল ব্রাউজারগুলির মধ্যে, ক্রোম ওয়াইডভাইন সমর্থন করে এবং আই 11 প্লে রেডি সমর্থন করে।
লাইসেন্স সার্ভার থেকে একটি কী পাওয়া
সাধারণ বাণিজ্যিক ব্যবহারে, সামগ্রীটি কোনও প্যাকেজিং পরিষেবা বা সরঞ্জাম ব্যবহার করে এনক্রিপ্ট করা এবং এনকোড করা হবে। একবার এনক্রিপ্ট করা মিডিয়া অনলাইনে উপলভ্য হয়ে গেলে, কোনও ওয়েব ক্লায়েন্ট লাইসেন্স সার্ভার থেকে একটি কী (লাইসেন্সের মধ্যে থাকা) পেতে পারে এবং সামগ্রীর ডিক্রিপশন এবং প্লেব্যাক সক্ষম করতে কীটি ব্যবহার করতে পারে।
নিম্নলিখিত কোডটি ( স্পেস উদাহরণগুলি থেকে অভিযোজিত) দেখায় যে কোনও অ্যাপ্লিকেশন কীভাবে একটি উপযুক্ত কী সিস্টেম নির্বাচন করতে পারে এবং লাইসেন্স সার্ভার থেকে একটি কী পেতে পারে।
var video = document.querySelector('video');
var config = [{initDataTypes: ['webm'],
videoCapabilities: [{contentType: 'video/webm; codecs="vp09.00.10.08"'}]}];
if (!video.mediaKeys) {
navigator.requestMediaKeySystemAccess('org.w3.clearkey',
config).then(
function(keySystemAccess) {
var promise = keySystemAccess.createMediaKeys();
promise.catch(
console.error.bind(console, 'Unable to create MediaKeys')
);
promise.then(
function(createdMediaKeys) {
return video.setMediaKeys(createdMediaKeys);
}
).catch(
console.error.bind(console, 'Unable to set MediaKeys')
);
promise.then(
function(createdMediaKeys) {
var initData = new Uint8Array([...]);
var keySession = createdMediaKeys.createSession();
keySession.addEventListener('message', handleMessage,
false);
return keySession.generateRequest('webm', initData);
}
).catch(
console.error.bind(console,
'Unable to create or initialize key session')
);
}
);
}
function handleMessage(event) {
var keySession = event.target;
var license = new Uint8Array([...]);
keySession.update(license).catch(
console.error.bind(console, 'update() failed')
);
}
সাধারণ এনক্রিপশন
সাধারণ এনক্রিপশন সলিউশনগুলি সামগ্রী সরবরাহকারীদের তাদের কন্টেন্ট/কোডেক অনুযায়ী একবার তাদের সামগ্রী এনক্রিপ্ট এবং প্যাকেজ করার অনুমতি দেয় এবং এটি বিভিন্ন কী সিস্টেম, সিডিএম এবং ক্লায়েন্টদের সাথে ব্যবহার করে: অর্থাৎ যে কোনও সিডিএম যা সাধারণ এনক্রিপশন সমর্থন করে। উদাহরণস্বরূপ, প্লে রেডি ব্যবহার করে প্যাকেজযুক্ত একটি ভিডিও ওয়াইডভাইন সিডিএম ব্যবহার করে একটি ব্রাউজারে ফিরে প্লে করা যেতে পারে যা ওয়াইডভাইন লাইসেন্স সার্ভার থেকে কী গ্রহণ করে।
এটি উত্তরাধিকার সমাধানের বিপরীতে যা কেবলমাত্র একটি সম্পূর্ণ উল্লম্ব স্ট্যাকের সাথে কাজ করবে, একটি একক ক্লায়েন্ট সহ প্রায়শই একটি অ্যাপ্লিকেশন রানটাইমও অন্তর্ভুক্ত করে।
কমন এনক্রিপশন (সিইএনসি) আইএসও স্ট্যান্ডার্ড যা আইএসও বিএমএফএফের জন্য সুরক্ষা প্রকল্পের সংজ্ঞা দেয়; একটি অনুরূপ ধারণা ওয়েবএম এর জন্য প্রযোজ্য।
ক্লিয়ার কী
যদিও 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 এর জন্য কমপক্ষে) এবং অন্যান্য সমাধানগুলি বিকাশ করা হচ্ছে।
সম্পর্কিত প্রযুক্তি 1: মিডিয়া উত্স এক্সটেনশন (এমএসই)
এইচটিএমএলমিডিয়েলিমেন্টটি সাধারণ সৌন্দর্যের একটি প্রাণী।
আমরা কেবল একটি এসআরসি ইউআরএল সরবরাহ করে মিডিয়া লোড, ডিকোড করতে এবং খেলতে পারি:
<video src="foo.webm"></video>
মিডিয়া সোর্স এপিআই হ'ল এইচটিএমএলমিডিয়েলিমেন্টের একটি এক্সটেনশন যা মিডিয়া উত্সের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ সক্ষম করে, জাভাস্ক্রিপ্টকে ভিডিওর 'খণ্ড' থেকে প্লেব্যাকের জন্য স্ট্রিম তৈরি করার অনুমতি দিয়ে। এটি পরিবর্তে অভিযোজিত স্ট্রিমিং এবং সময় স্থানান্তরিত করার মতো কৌশলগুলি সক্ষম করে।
এমএসই কেন ইমের কাছে গুরুত্বপূর্ণ? কারণ সুরক্ষিত সামগ্রী বিতরণ করার পাশাপাশি, বাণিজ্যিক সামগ্রী সরবরাহকারীদের অবশ্যই নেটওয়ার্ক শর্ত এবং অন্যান্য প্রয়োজনীয়তার সাথে সামগ্রী বিতরণটি মানিয়ে নিতে সক্ষম হতে হবে। নেটফ্লিক্স, উদাহরণস্বরূপ, নেটওয়ার্কের অবস্থার পরিবর্তনের সাথে সাথে গতিশীলভাবে স্ট্রিম বিটরেট পরিবর্তন করে। ইএমই এমএসই বাস্তবায়ন দ্বারা সরবরাহিত মিডিয়া স্ট্রিমগুলির প্লেব্যাকের সাথে কাজ করে, ঠিক যেমন এটি একটি এসআরসি বৈশিষ্ট্যের মাধ্যমে সরবরাহিত মিডিয়াগুলির সাথে।
কীভাবে বিভিন্ন বিটরেটে এনকোড করা মিডিয়া ব্যাক মিডিয়া খালি এবং খেলবেন? নীচে ড্যাশ বিভাগ দেখুন।
আপনি সিম্পল.ইনফো/ এমএসইতে এমএসই অ্যাকশন দেখতে পারেন; এই উদাহরণের উদ্দেশ্যে, একটি ওয়েবএম ভিডিও এপিআই ফাইল ব্যবহার করে পাঁচটি খণ্ডে বিভক্ত করা হয়েছে। একটি প্রযোজনা আবেদনে, ভিডিওগুলির কিছু অংশ আজাক্সের মাধ্যমে পুনরুদ্ধার করা হবে।
প্রথমে একটি সোর্সবফার তৈরি করা হয়:
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);
}
};
এমএসই প্রাইমারে এমএসই সম্পর্কে আরও জানুন।
সম্পর্কিত প্রযুক্তি 2: এইচটিটিপি (ড্যাশ) এর উপর গতিশীল অভিযোজিত স্ট্রিমিং
মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল-আপনি এটিকে যা বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। গতিশীল, অভিযোজিত বিতরণ মাল্টি-ডিভাইস বিশ্বে ব্যান্ডউইথ সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে লড়াই করার জন্য গুরুত্বপূর্ণ।
ড্যাশ (ওরফে এমপিইজি-ড্যাশ) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্য একটি ফ্লেকি বিশ্বে সেরা সম্ভাব্য মিডিয়া বিতরণ সক্ষম করার জন্য ডিজাইন করা হয়েছে। অন্যান্য বেশ কয়েকটি প্রযুক্তি অনুরূপ কিছু করে - যেমন অ্যাপলের এইচটিটিপি লাইভ স্ট্রিমিং (এইচএলএস) এবং মাইক্রোসফ্টের মসৃণ স্ট্রিমিং - তবে ড্যাশ হ'ল এইচটিটিপি -র মাধ্যমে অভিযোজিত বিটরেট স্ট্রিমিংয়ের একমাত্র পদ্ধতি যা একটি উন্মুক্ত মানের উপর ভিত্তি করে। ড্যাশ ইতিমধ্যে ইউটিউবের মতো সাইটগুলি দ্বারা ব্যবহৃত হচ্ছে।
ইএমই এবং এমএসই এর সাথে এর কী সম্পর্ক আছে? এমএসই-ভিত্তিক ড্যাশ বাস্তবায়নগুলি একটি উপযুক্ত বিটরেটে ভিডিওর বিভাগগুলি ডাউনলোড করতে পারে, এবং ক্ষুধার্ত হয়ে উঠলে কোনও ভিডিও উপাদানগুলিতে তাদের খাওয়াতে পারে-বিদ্যমান এইচটিটিপি অবকাঠামো ব্যবহার করে।
অন্য কথায়, ড্যাশ বাণিজ্যিক সামগ্রী সরবরাহকারীদের সুরক্ষিত সামগ্রীর অভিযোজিত স্ট্রিমিং করতে সক্ষম করে।
টিনে যা বলে ড্যাশ করে:
- গতিশীল: পরিবর্তনের শর্তে সাড়া দেয়।
- অভিযোজিত: উপযুক্ত অডিও বা ভিডিও বিট্রেট সরবরাহ করতে অভিযোজিত।
- স্ট্রিমিং: স্ট্রিমিংয়ের পাশাপাশি ডাউনলোডের অনুমতি দেয়।
- এইচটিটিপি: কোনও traditional তিহ্যবাহী স্ট্রিমিং সার্ভারের অসুবিধা ছাড়াই এইচটিটিপি -র সুবিধার সাথে সামগ্রী বিতরণ সক্ষম করে।
বিবিসি ড্যাশ ব্যবহার করে পরীক্ষার স্ট্রিম সরবরাহ করা শুরু করেছে:
মিডিয়া বিভিন্ন বিট্রেটে বেশ কয়েকবার এনকোড করা হয়। প্রতিটি এনকোডিংকে প্রতিনিধিত্ব বলা হয়। এগুলি বেশ কয়েকটি মিডিয়া বিভাগে বিভক্ত। ক্লায়েন্ট এইচটিটিপি -র প্রতিনিধিত্ব থেকে ক্রমানুসারে বিভাগগুলির অনুরোধ করে একটি প্রোগ্রাম বাজায়। উপস্থাপনাগুলি সমতুল্য সামগ্রীযুক্ত উপস্থাপনার অভিযোজন সেটগুলিতে গোষ্ঠীভুক্ত করা যেতে পারে। যদি ক্লায়েন্ট বিটরেট পরিবর্তন করতে চায় তবে এটি বর্তমান অভিযোজন সেট থেকে একটি বিকল্প বাছাই করতে পারে এবং সেই প্রতিনিধিত্ব থেকে বিভাগগুলির অনুরোধ করা শুরু করতে পারে। ক্লায়েন্টের পক্ষে এই স্যুইচিংটি সহজ করার জন্য সামগ্রীগুলি এমনভাবে এনকোড করা হয়েছে। বেশ কয়েকটি মিডিয়া বিভাগ ছাড়াও, একটি প্রতিনিধিত্ব সাধারণত একটি সূচনা বিভাগও থাকে। এটি একটি শিরোনাম হিসাবে ভাবা যেতে পারে, এনকোডিং, ফ্রেম আকার ইত্যাদি সম্পর্কিত তথ্য সমন্বিত একটি ক্লায়েন্টকে সেই প্রতিনিধিত্ব থেকে মিডিয়া বিভাগগুলি গ্রহণের আগে প্রদত্ত প্রতিনিধিত্বের জন্য এটি গ্রহণ করতে হবে।
সংক্ষিপ্ত করতে:
- মিডিয়া বিভিন্ন বিট্রেটে এনকোড করা হয়।
- বিভিন্ন বিটরেট ফাইলগুলি এইচটিটিপি সার্ভার থেকে উপলব্ধ করা হয়।
- একটি ক্লায়েন্ট ওয়েব অ্যাপ্লিকেশন ড্যাশ দিয়ে পুনরুদ্ধার করতে এবং খেলতে কোন বিটরেট চয়ন করে।
ভিডিও বিভাজন প্রক্রিয়ার অংশ হিসাবে, মিডিয়া উপস্থাপনা বিবরণ (এমপিডি) হিসাবে পরিচিত একটি এক্সএমএল ম্যানিফেস্ট প্রোগ্রামেভাবে নির্মিত হয়। এটি সময়সীমা এবং ইউআরএল সহ অভিযোজন সেট এবং উপস্থাপনা বর্ণনা করে। একটি এমপিডি দেখতে এরকম:
<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 ফাইল থেকে নেওয়া হয়েছে))
ড্যাশ স্পেকের মতে, একটি এমপিডি ফাইল তাত্ত্বিকভাবে একটি ভিডিওর জন্য এসআরসি হিসাবে ব্যবহার করা যেতে পারে। যাইহোক, ওয়েব বিকাশকারীদের আরও নমনীয়তা দেওয়ার জন্য, ব্রাউজার বিক্রেতারা ড্যাশ.জেএসের মতো এমএসই ব্যবহার করে জাভাস্ক্রিপ্ট লাইব্রেরিতে ড্যাশ সমর্থন ছেড়ে দেওয়ার পরিবর্তে বেছে নিয়েছেন। জাভাস্ক্রিপ্টে ড্যাশ প্রয়োগ করা ব্রাউজারের আপডেটের প্রয়োজন ছাড়াই অভিযোজন অ্যালগরিদমকে বিকশিত হতে দেয়। এমএসই ব্যবহার করে ব্রাউজারের পরিবর্তনের প্রয়োজন ছাড়াই বিকল্প ম্যানিফেস্ট ফর্ম্যাট এবং বিতরণ প্রক্রিয়াগুলির সাথেও পরীক্ষার অনুমতি দেয়। গুগলের শাকা প্লেয়ার ইএমই সমর্থন সহ একটি ড্যাশ ক্লায়েন্ট প্রয়োগ করে।
উপসংহার
ভিডিও এবং অডিও সরবরাহ করতে ওয়েবের ব্যবহার বিশাল হারে বাড়ছে। দেখে মনে হচ্ছে যে প্রতিটি নতুন ডিভাইস, এটি কোনও ট্যাবলেট, গেম কনসোল, সংযুক্ত টিভি বা সেট-টপ বক্স, এইচটিটিপি-র মাধ্যমে প্রধান সামগ্রী সরবরাহকারীদের কাছ থেকে মিডিয়া স্ট্রিম করতে সক্ষম। 85% এরও বেশি মোবাইল এবং ডেস্কটপ ব্রাউজারগুলি এখন <ভিডিও> এবং <অডিও> সমর্থন করে এবং সিসকো অনুমান করে যে ভিডিওটি 2017 সালের মধ্যে গ্লোবাল ভোক্তা ইন্টারনেট ট্র্যাফিকের 80 থেকে 90 শতাংশ হবে।
আরও পড়া
চশমা এবং মান
ইএমই স্পেস : সর্বশেষ সম্পাদকের খসড়া কমন এনক্রিপশন (সিএনসি) মিডিয়া সোর্স এক্সটেনশনস : সর্বশেষ সম্পাদকের খসড়া ড্যাশ স্ট্যান্ডার্ড (হ্যাঁ, এটি একটি পিডিএফ) ড্যাশ স্ট্যান্ডার্ডের ওভারভিউ
প্রবন্ধ
ডিটিজি ওয়েবিনার (আংশিকভাবে অপ্রচলিত) ইএমই কী? , হেনরি সিভোনেন মিডিয়া উত্স এক্সটেনশনস প্রাইমার এমপিইজি-ড্যাশ পরীক্ষার স্ট্রিম: বিবিসি আর অ্যান্ড ডি ব্লগ পোস্ট
ডেমো
ক্লিয়ার কী ডেমো: সিম্পল.ইনফো/ সি কে মিডিয়া সোর্স এক্সটেনশনস (এমএসই) ডেমো গুগলের শাকা প্লেয়ার ইএমই সমর্থন সহ একটি ড্যাশ ক্লায়েন্টকে প্রয়োগ করে