এনক্রিপ্টেড মিডিয়া এক্সটেনশন (EME) একটি API প্রদান করে যা ওয়েব অ্যাপ্লিকেশনগুলিকে এনক্রিপ্ট করা অডিও এবং ভিডিও প্লেব্যাকের অনুমতি দিতে সামগ্রী সুরক্ষা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম করে।
অন্তর্নিহিত সুরক্ষা ব্যবস্থা নির্বিশেষে যেকোন ব্রাউজারে ব্যবহার করার জন্য একই অ্যাপ এবং এনক্রিপ্ট করা ফাইলগুলিকে সক্ষম করার জন্য EME ডিজাইন করা হয়েছে। আগেরটি প্রমিত API এবং প্রবাহ দ্বারা সম্ভব হয়েছে যখন পরবর্তীটি সাধারণ এনক্রিপশনের ধারণার দ্বারা সম্ভব হয়েছে৷
EME হল HTMLMediaElement
স্পেসিফিকেশনের একটি এক্সটেনশন - তাই নাম। একটি 'এক্সটেনশন' হওয়ার অর্থ হল EME-এর জন্য ব্রাউজার সমর্থন ঐচ্ছিক: যদি একটি ব্রাউজার এনক্রিপ্ট করা মিডিয়া সমর্থন না করে, তাহলে এটি এনক্রিপ্ট করা মিডিয়া চালাতে সক্ষম হবে না, কিন্তু HTML স্পেক কমপ্লায়েন্সের জন্য EME-এর প্রয়োজন নেই৷ EME স্পেক থেকে:
EME বাস্তবায়ন নিম্নলিখিত বাহ্যিক উপাদান ব্যবহার করে:
- কী সিস্টেম: একটি বিষয়বস্তু সুরক্ষা (ডিআরএম) প্রক্রিয়া। EME ক্লিয়ার কী (নীচে সে সম্পর্কে আরও) ছাড়াও কী সিস্টেমগুলিকে সংজ্ঞায়িত করে না।
- কন্টেন্ট ডিক্রিপশন মডিউল (CDM): একটি ক্লায়েন্ট-সাইড সফ্টওয়্যার বা হার্ডওয়্যার মেকানিজম যা এনক্রিপ্ট করা মিডিয়ার প্লেব্যাক সক্ষম করে। কী সিস্টেমের মতো, ইএমই কোনো সিডিএম সংজ্ঞায়িত করে না, তবে উপলব্ধ সিডিএমগুলির সাথে যোগাযোগ করার জন্য অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টারফেস প্রদান করে।
- লাইসেন্স (কী) সার্ভার: মিডিয়া ডিক্রিপ্ট করার জন্য কী প্রদান করতে একটি CDM এর সাথে ইন্টারঅ্যাক্ট করে। লাইসেন্স সার্ভারের সাথে আলোচনার দায়িত্ব আবেদনের।
- প্যাকেজিং পরিষেবা: বিতরণ/ব্যবহারের জন্য মিডিয়া এনকোড এবং এনক্রিপ্ট করে।
মনে রাখবেন যে EME ব্যবহার করে একটি অ্যাপ্লিকেশন ডিক্রিপশন সক্ষম করার জন্য কী পেতে লাইসেন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করে, কিন্তু ব্যবহারকারীর পরিচয় এবং প্রমাণীকরণ EME এর অংশ নয়। মিডিয়া প্লেব্যাক সক্ষম করার জন্য কীগুলি পুনরুদ্ধার করা হয় (ঐচ্ছিকভাবে) ব্যবহারকারীকে প্রমাণীকরণ করার পরে। Netflix-এর মতো পরিষেবাগুলিকে অবশ্যই তাদের ওয়েব অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে: যখন একজন ব্যবহারকারী অ্যাপ্লিকেশনটিতে সাইন ইন করেন, তখন অ্যাপ্লিকেশনটি ব্যবহারকারীর পরিচয় এবং সুযোগ-সুবিধা নির্ধারণ করে।
EME কিভাবে কাজ করে?
নিম্নলিখিত কোড উদাহরণের সাথে মিল রেখে EME এর উপাদানগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা এখানে রয়েছে:
- একটি ওয়েব অ্যাপ্লিকেশন অডিও বা ভিডিও চালানোর চেষ্টা করে যাতে এক বা একাধিক এনক্রিপ্ট করা স্ট্রিম রয়েছে।
- ব্রাউজার স্বীকার করে যে মিডিয়াটি এনক্রিপ্ট করা হয়েছে (এটি কীভাবে ঘটে তার জন্য নীচের বাক্সটি দেখুন) এবং এনক্রিপশন সম্পর্কে মিডিয়া থেকে প্রাপ্ত মেটাডেটা (
initData
) সহ একটিencrypted
ইভেন্ট ফায়ার করে৷ - অ্যাপ্লিকেশনটি
encrypted
ইভেন্ট পরিচালনা করে:- যদি কোন
MediaKeys
অবজেক্ট মিডিয়া উপাদানের সাথে যুক্ত না থাকে, তাহলে প্রথমে একটি উপলব্ধ কী সিস্টেম নির্বাচন করুনnavigator.requestMediaKeySystemAccess()
ব্যবহার করে কী সিস্টেমগুলি উপলব্ধ তা পরীক্ষা করে দেখুন, তারপর একটিMediaKeySystemAccess
অবজেক্টের মাধ্যমে একটি উপলব্ধ কী সিস্টেমের জন্য একটিMediaKeys
অবজেক্ট তৈরি করুন। উল্লেখ্য যে MediaKeys অবজেক্টের সূচনা প্রথমencrypted
ইভেন্টের আগে হওয়া উচিত। একটি লাইসেন্স সার্ভার URL প্রাপ্তি একটি উপলব্ধ কী সিস্টেম নির্বাচন স্বাধীনভাবে অ্যাপ্লিকেশন দ্বারা সম্পন্ন করা হয়. একটিMediaKeys
অবজেক্ট একটি অডিও বা ভিডিও উপাদানের জন্য মিডিয়া ডিক্রিপ্ট করার জন্য উপলব্ধ সমস্ত কী উপস্থাপন করে। এটি একটি সিডিএম দৃষ্টান্ত উপস্থাপন করে এবং সিডিএম-এ অ্যাক্সেস প্রদান করে, বিশেষত কী সেশন তৈরি করার জন্য, যা লাইসেন্স সার্ভার থেকে কী পেতে ব্যবহৃত হয়। - একবার
MediaKeys
অবজেক্ট তৈরি হয়ে গেলে, এটিকে মিডিয়া উপাদানে বরাদ্দ করুন:setMediaKeys()
একটি HTMLMediaElement-এর সাথেMediaKeys
অবজেক্টকে সংযুক্ত করে, যাতে এর কীগুলি প্লেব্যাকের সময়, অর্থাৎ ডিকোডিংয়ের সময় ব্যবহার করা যেতে পারে।
- যদি কোন
- অ্যাপটি
MediaKeys
এcreateSession()
কল করে একটিMediaKeySession
তৈরি করে। এটি একটিMediaKeySession
তৈরি করে, যা একটি লাইসেন্সের জীবনকাল এবং এর কী(গুলি) প্রতিনিধিত্ব করে। - অ্যাপটি
encrypted
হ্যান্ডলারে প্রাপ্ত মিডিয়া ডেটা সিডিএম-এ প্রেরণ করে,MediaKeySession
এgenerateRequest()
কল করে লাইসেন্সের অনুরোধ তৈরি করে। - সিডিএম একটি
message
ইভেন্ট ফায়ার করে: লাইসেন্স সার্ভার থেকে একটি কী অর্জনের অনুরোধ। -
MediaKeySession
অবজেক্টmessage
ইভেন্ট গ্রহণ করে এবং অ্যাপ্লিকেশন লাইসেন্স সার্ভারে একটি বার্তা পাঠায় (উদাহরণস্বরূপ, XHR এর মাধ্যমে)। - অ্যাপ্লিকেশনটি লাইসেন্স সার্ভার থেকে একটি প্রতিক্রিয়া পায় এবং
MediaKeySession
এরupdate()
পদ্ধতি ব্যবহার করে ডেটা CDM-তে পাঠায়। - সিডিএম লাইসেন্সের কী ব্যবহার করে মিডিয়াকে ডিক্রিপ্ট করে। মিডিয়া উপাদানের সাথে যুক্ত
MediaKey
এর মধ্যে যেকোনো সেশন থেকে একটি বৈধ কী ব্যবহার করা যেতে পারে। সিডিএম কী এবং নীতি অ্যাক্সেস করবে, কী আইডি দ্বারা সূচীকৃত। - মিডিয়া প্লেব্যাক আবার শুরু হয়।
উফ…
মনে রাখবেন যে সিডিএম এবং লাইসেন্স সার্ভারের মধ্যে একাধিক বার্তা থাকতে পারে এবং এই প্রক্রিয়ার সমস্ত যোগাযোগ ব্রাউজার এবং অ্যাপ্লিকেশনের সাথে অস্বচ্ছ: বার্তাগুলি শুধুমাত্র সিডিএম এবং লাইসেন্স সার্ভার দ্বারা বোঝা যায়, যদিও অ্যাপ স্তরটি দেখতে পারে কোন ধরনের বার্তা সিডিএম পাঠাচ্ছে। লাইসেন্সের অনুরোধে সিডিএম-এর বৈধতা (এবং আস্থার সম্পর্ক) প্রমাণ রয়েছে এবং সেইসাথে ফলস্বরূপ লাইসেন্সে বিষয়বস্তু কী(গুলি) এনক্রিপ্ট করার সময় ব্যবহার করার জন্য একটি কী রয়েছে।
…কিন্তু সিডিএম আসলে কি করে?
একটি 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-এর জন্য) এবং অন্যান্য সমাধানগুলি তৈরি করা হচ্ছে৷
সম্পর্কিত প্রযুক্তি #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);
}
};
HTML5 Rocks নিবন্ধে MSE সম্পর্কে আরও জানুন।
সম্পর্কিত প্রযুক্তি #2
ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH)
মাল্টি-ডিভাইস, মাল্টি-প্ল্যাটফর্ম, মোবাইল - আপনি যে যাই বলুন না কেন, ওয়েব প্রায়শই পরিবর্তনযোগ্য সংযোগের শর্তে অভিজ্ঞ হয়। বহু-ডিভাইস জগতে ব্যান্ডউইথের সীমাবদ্ধতা এবং পরিবর্তনশীলতার সাথে মোকাবিলা করার জন্য গতিশীল, অভিযোজিত বিতরণ অত্যন্ত গুরুত্বপূর্ণ।
DASH (ওরফে MPEG-DASH) স্ট্রিমিং এবং ডাউনলোড উভয়ের জন্যই ফ্ল্যাকি বিশ্বে সর্বোত্তম সম্ভাব্য মিডিয়া ডেলিভারি সক্ষম করার জন্য ডিজাইন করা হয়েছে৷ অন্যান্য বেশ কয়েকটি প্রযুক্তি একই রকম কিছু করে - যেমন অ্যাপলের HTTP লাইভ স্ট্রিমিং (HLS) এবং মাইক্রোসফ্টের স্মুথ স্ট্রিমিং - কিন্তু 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% এর বেশি মোবাইল এবং ডেস্কটপ ব্রাউজার এখন <video>
এবং <audio>
সমর্থন করে, এবং সিসকো অনুমান করে যে ভিডিও 2017 সালের মধ্যে বিশ্বব্যাপী গ্রাহক ইন্টারনেট ট্রাফিকের 80 থেকে 90 শতাংশ হবে। এই প্রসঙ্গে, সুরক্ষিত সামগ্রী বিতরণের জন্য ব্রাউজার সমর্থন সম্ভবত ক্রমবর্ধমান তাৎপর্যপূর্ণ হয়ে উঠছে, কারণ ব্রাউজার বিক্রেতারা এপিআই-এর জন্য সমর্থন কমিয়ে দেয় যা বেশিরভাগ মিডিয়া প্লাগইন নির্ভর করে।
আরও পড়া
চশমা এবং মান
- ইএমই স্পেক : সর্বশেষ সম্পাদকের খসড়া<
- সাধারণ এনক্রিপশন (CENC)
- মিডিয়া সোর্স এক্সটেনশন
- ড্যাশ স্ট্যান্ডার্ড (হ্যাঁ, এটি একটি পিডিএফ)
- ড্যাশ স্ট্যান্ডার্ড সম্পর্কে
প্রবন্ধ
- DTG ওয়েবিনার (আংশিকভাবে অপ্রচলিত)
- EME কি? , হেনরি সিভোনেন দ্বারা
- HTML5 রকস মিডিয়া সোর্স এক্সটেনশন নিবন্ধ
- MPEG-DASH টেস্ট স্ট্রীম: BBC R&D ব্লগ পোস্ট