توفّر إضافات الوسائط المشفرة واجهة برمجة تطبيقات تمكّن تطبيقات الويب من التفاعل مع أنظمة حماية المحتوى، للسماح بتشغيل الصوت والفيديو المشفرَين.
تم تصميم EME للسماح باستخدام التطبيق نفسه والملفات المشفّرة في أي browser، بغض النظر عن نظام الحماية الأساسي. يمكن تنفيذ الإجراء الأول بفضل واجهات برمجة التطبيقات والإجراءات الموحدة، ويمكن تنفيذ الإجراء الثاني بفضل مفهوم التشفير المشترَك.
EME هي إضافة إلى مواصفات HTMLMediaElement، ومن هنا جاء اسمها. وبما أنّ EME هي "إضافة"، فإنّ توافق المتصفّح معها يكون اختياريًا: إذا كان المتصفّح لا يتوافق مع الوسائط المشفّرة، لن يتمكّن من تشغيل الوسائط المشفّرة، ولكنّ EME غير مطلوبة للتوافق مع مواصفات HTML. من مواصفات EME:
يضيف هذا الاقتراح HTMLMediaElement واجهة برمجة تطبيقات للتحكّم في تشغيل المحتوى المحمي.
تتيح واجهة برمجة التطبيقات حالات استخدام تتراوح بين فك تشفير مفتاح التشفير البسيط إلى الفيديوهات العالية القيمة (في حال تنفيذ وكيل مستخدم مناسب). يتحكّم التطبيق في عملية مبادلة التراخيص/المفاتيح، ما يسهّل تطوير تطبيقات تشغيل قوية تتوافق مع مجموعة من تقنيات فك تشفير المحتوى وحماية المحتوى.
لا تحدّد هذه المواصفة نظامًا لحماية المحتوى أو لإدارة الحقوق الرقمية. بدلاً من ذلك، يحدِّد معيار واجهة برمجة تطبيقات شائعة يمكن استخدامها لمحاولة اكتشاف هذه الأنظمة واختيارها والتفاعل معها، بالإضافة إلى استخدامها مع أنظمة تشفير محتوى أبسط. لا يُشترط تنفيذ إدارة الحقوق الرقمية للامتثال لهذه المواصفة: يجب فقط تنفيذ نظام Clear Key كقاعدة أساسية مشتركة.
تدعم واجهة برمجة التطبيقات الشائعة مجموعة بسيطة من إمكانات تشفير المحتوى، مما يترك وظائف التطبيق مثل المصادقة والتفويض لمؤلفي الصفحات. ويتم ذلك من خلال طلب توسّط الصفحة في رسائل نظام حماية المحتوى بدلاً من افتراض حصول اتصال خارج النطاق بين نظام التشفير وترخيص أو خادم آخر.
تستخدِم عمليات تنفيذ EME المكوّنات الخارجية التالية:
- نظام المفاتيح: آلية حماية المحتوى (إدارة الحقوق الرقمية) لا يحدد EME الأنظمة الأساسية نفسها، باستثناء "Clear Key" (مزيد من المعلومات حول ذلك أدناه).
- وحدة فك تشفير المحتوى (CDM): برامج أو آلية من الأجهزة من جهة العميل تتيح تشغيل الوسائط المشفّرة كما هو الحال مع Key Systems، لا تحدّد EME أي منصات إدارة بيانات (CDM)، ولكنها توفّر واجهة للتطبيقات للتفاعل مع منصات إدارة المشروعات المتاحة.
- خادم الترخيص (المفتاح): يتفاعل مع وحدة إدارة الحقوق الرقمية (CDM) لتوفير مفاتيح لفك تشفير الوسائط. تقع على عاتق العميل مهمة التفاوض مع خادم الترخيص.
- خدمة التجميع: لترميز الوسائط وتشفيرها للتوزيع/الاستهلاك.
يُرجى العلم أنّ أحد التطبيقات التي تستخدم EME يتفاعل مع خادم تراخيص للحصول على المفاتيح لتفعيل فك التشفير، ولكن هوية المستخدم والمصادقة ليست جزءًا من EME. يتم استرداد المفاتيح لتفعيل تشغيل الوسائط بعد (اختياريًا) مصادقة المستخدم. يجب على خدمات مثل Netflix مصادقة المستخدمين داخل تطبيق الويب: فعندما يقوم المستخدم بتسجيل الدخول إلى التطبيق، يحدد التطبيق هوية المستخدم وامتيازاته.
كيف يعمل EME؟
في ما يلي كيفية تفاعل مكونات EME، وفقًا لمثال الرمز البرمجي أدناه:
إذا كانت هناك تنسيقات أو برامج ترميز متعددة متاحة، يمكن استخدام كل من MediaSource.isTypeSupported() أو HTMLMediaElement.canPlayType() لاختيار التنسيق أو برنامج الترميز المناسب. ومع ذلك، قد لا يتوافق معيار CDM إلا مع مجموعة فرعية من المحتوى الذي يتيح المتصفّح استخدامه غير المشفَّر. من الأفضل الاتفاق على إعداد MediaKeys قبل اختيار تنسيق وبرنامج ترميز. إذا كان التطبيق ينتظر الحدث المشفّر ولكن أظهرت MediaKeys أنه لا يمكنه معالجة التنسيق/برنامج الترميز الذي تم اختياره، قد يكون الوقت متأخرًا جدًا للتبديل بدون مقاطعة التشغيل.
إنّ الإجراء المقترَح هو التفاوض على MediaKeys أولاً، باستخدام MediaKeysSystemAccess.getConfiguration() لمعرفة الإعدادات التي تم التفاوض عليها.
إذا كان هناك تنسيق أو برنامج ترميز واحد فقط للاختيار من بينها، لن تكون هناك حاجة إلى getConfiguration()، ولكن من الأفضل إعداد MediaKeys أولاً. السبب الوحيد في انتظار الحدث المشفَّر هو عدم توفُّر طريقة لتحديد ما إذا كان المحتوى مشفَّرًا أم لا، ولكن من غير المرجّح أن يحدث ذلك في الواقع.
- يحاول تطبيق ويب تشغيل محتوى صوتي أو فيديو يتضمّن مصدرًا واحدًا أو أكثر من مصادر البث المشفَّرة.
- يرصد المتصفّح أنّ الوسائط مشفّرة (اطّلِع على المربّع أدناه لمعرفة كيفية حدوث ذلك) ويُطلق حدثًا مشفّرًا يتضمّن بيانات وصفية (initData) تم الحصول عليها من الوسائط حول التشفير.
يتعامل التطبيق مع الحدث المشفَّر:
إذا لم يتم ربط عنصر MediaKeys بعنصر الوسائط، عليك أولاً اختيار نظام مفاتيح متاح باستخدام navigator.requestMediaKeySystemAccess() للتحقّق من أنظمة المفاتيح المتاحة، ثم إنشاء عنصر MediaKeys لنظام مفاتيح متاح من خلال عنصر MediaKeySystemAccess. يُرجى العِلم أنّه يجب بدء معالجة عنصر MediaKeys قبل الحدث المشفَّر الأول. يحصل التطبيق على عنوان URL لخادم الترخيص بغض النظر عن اختيار نظام مفاتيح متاح. يمثّل عنصر MediaKeys جميع المفاتيح المتاحة لفك تشفير الوسائط لعنصر صوت أو فيديو. ويمثّل هذا العنصر مثيلًا لنظام إدارة المحتوى الرقمي (CDM) ويوفّر إمكانية الوصول إلى نظام إدارة المحتوى الرقمي، وتحديدًا لإنشاء جلسات المفاتيح التي تُستخدَم للحصول على المفاتيح من خادم الترخيص.
بعد إنشاء عنصر MediaKeys، يمكنك إسناده إلى عنصر الوسائط: تربط دالة setMediaKeys() عنصر MediaKeys بعنصر HTMLMediaElement، حتى يمكن استخدام مفاتيحه أثناء التشغيل، أي أثناء فك التشفير.
ينشئ التطبيق جلسة MediaKeySession عن طريق استدعاء createSession() على MediaKeys. يؤدّي ذلك إلى إنشاء MediaKeySession، التي تمثّل مدة صلاحية الترخيص ومفاتيحه.
ينشئ التطبيق طلب ترخيص من خلال تمرير بيانات الوسائط التي تم الحصول عليها في المعالج المشفَّر إلى وحدة إدارة الحقوق الرقمية (CDM)، وذلك من خلال استدعاء generateRequest() في MediaKeySession.
يُطلق CDM حدث رسالة: طلب الحصول على مفتاح من خادم الترخيص.
يتلقّى عنصر MediaKeySession حدث الرسالة ويُرسِل التطبيق رسالة إلى خادم الترخيص (عبر XHR مثلاً).
يتلقّى التطبيق استجابة من خادم الترخيص ويُرسِل العبارة data إلى وحدة إدارة الحقوق الرقمية باستخدام طريقة update() في MediaKeySession.
يفكّ نظام إدارة الحقوق الرقمية تشفير الوسائط باستخدام المفاتيح الواردة في الترخيص. ويمكن استخدام مفتاح صالح من أي جلسة داخل MediaKeys المرتبطة بعنصر الوسائط. ستصل إدارة جهاز إدارة البيانات إلى المفتاح والسياسة اللذَين تمت فهرستهما من خلال رقم تعريف المفتاح.
يستأنف تشغيل الوسائط.
كيف يتعرّف المتصفّح على أنّ الوسائط مشفّرة؟
تتوفّر هذه المعلومات في البيانات الوصفية لملف حاوية الوسائط، وسيكون بتنسيق مثل ISO BMFF أو WebM. بالنسبة إلى ISO BMFF، يعني ذلك البيانات الوصفية للرأس، ويُشار إليها باسم مربّع معلومات مخطّط الحماية. يستخدم WebM عنصر Matroska ContentEncryption مع بعض الإضافات الخاصة بتنسيق WebM. يتم تقديم إرشادات لكل حاوية في سجلّ خاص بإدارة الحقوق الرقمية للمحتوى المحمي.
يُرجى العِلم أنّه قد تكون هناك رسائل متعدّدة بين وحدة إدارة الحقوق الرقمية وخادم الترخيص، وتكون جميع عمليات الاتّصال في هذه العملية غير شفافة للمتصفّح والتطبيق: لا يمكن فهم الرسائل إلا من خلال وحدة إدارة الحقوق الرقمية وخادم الترخيص، على الرغم من أنّ نوع الرسالة التي ترسلها وحدة إدارة الحقوق الرقمية يمكن أن تظهر لطبقة التطبيق. يحتوي طلب الترخيص على إثبات لصلاحية وحدة إدارة الحقوق الرقمية (وعلاقتها بالثقة) بالإضافة إلى مفتاح يتم استخدامه عند تشفير مفاتيح المحتوى في الترخيص الناتج.
ما هي وظيفة منصات CDM في الواقع؟
لا يقدّم تطبيق EME في حدّ ذاته طريقة لفك تشفير الوسائط، بل يقدّم ببساطة واجهة برمجة تطبيقات لتطبيق ويب للتفاعل مع وحدات فك تشفير المحتوى .
لا تحدّد مواصفات EME الإجراءات التي تُنفذها منصّات إدارة الحقوق الرقمية (CDM)، وقد تتعامل منصّة إدارة الحقوق الرقمية مع فك ترميز الوسائط (إزالة الضغط) وفك التشفير أيضًا. هناك العديد من الخيارات المحتملة لوظائف CDM من الأقل إلى الأكثر قوة:
- فك التشفير فقط، ويتم تفعيل التشغيل باستخدام مسار الوسائط العادي، عبر عنصر <video> مثلاً.
- فك التشفير وفك الترميز، ونقل لقطات الفيديو إلى المتصفّح لعرضها
- فك التشفير وفك الترميز، والعرض مباشرةً في الجهاز (مثل وحدة معالجة الرسومات)
هناك عدة طرق لإتاحة CDM لتطبيق الويب:
- تجميع جهاز CDM مع المتصفّح.
- توزيع خدمة إدارة البيانات (CDM) بشكل منفصل
- إنشاء وحدة إدارة بيانات في نظام التشغيل
- تضمين وحدة إدارة حقوق رقمية في البرامج الثابتة
- تضمين CDM في الأجهزة.
لا يتم تحديد كيفية توفير "إدارة إدارة البرامج" وفقًا لمواصفات EME، ولكن في جميع الحالات يكون المتصفح مسؤولاً عن فحص "إدارة إدارة المحتوى" وكشفها.
لا يفرض معيار 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 CDM الذي يحصل على مفتاح من خادم ترخيص Widevine.
ويختلف ذلك عن الحلول القديمة التي لا تعمل إلا مع بنية تقنية عمودية كاملة، بما في ذلك بيئة تشغيل تطبيق واحدة غالبًا ما تتضمّن أيضًا بيئة تشغيل التطبيق.
التشفير المشترك (CENC) هو معيار ISO يحدد مخطط حماية ISO BMFF، وينطبق مفهوم مشابه على WebM.
محو المفتاح
على الرغم من أنّ EME لا يحدّد وظيفة إدارة الحقوق الرقمية، إلا أنّ المواصفات تفرض حاليًا أن ينفذ جميع المتصفّحات التي تتيح EME تقنية Clear Key. باستخدام هذا النظام، يمكن تشفير الوسائط باستخدام مفتاح ثم تشغيلها ببساطة من خلال تقديم هذا المفتاح. ويمكن تضمين مفتاح محو البيانات في المتصفح، إذ لا يتطلّب استخدام وحدة فك تشفير منفصلة.
على الرغم من أنّه من غير المرجّح استخدام Clear Key مع العديد من أنواع المحتوى التجاري، إلا أنّه يمكن استخدامه بشكل متوافق بالكامل مع جميع المتصفّحات المتوافقة مع EME. وهو مفيد أيضًا لاختبار عمليات تنفيذ EME والتطبيقات التي تستخدم EME، بدون الحاجة إلى طلب مفتاح محتوى من خادم ترخيص. يمكنك العثور على مثال بسيط لـ "محو المفتاح" على الرابط simpl.info/ck. في ما يلي دليل تفصيلي حول الرمز البرمجي، والذي يتطابق مع الخطوات الموضّحة أعلاه، ولكن بدون تفاعل مع خادم الترخيص.
// Define a key: hardcoded in this example
// – this corresponds to the key used for encryption
var KEY = new Uint8Array([
0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b, 0x68, 0xef, 0x12, 0x2a, 0xfc,
0xe4, 0xae, 0x3c,
]);
var config = [
{
initDataTypes: ['webm'],
videoCapabilities: [
{
contentType: 'video/webm; codecs="vp8"',
},
],
},
];
var video = document.querySelector('video');
video.addEventListener('encrypted', handleEncrypted, false);
navigator
.requestMediaKeySystemAccess('org.w3.clearkey', config)
.then(function (keySystemAccess) {
return keySystemAccess.createMediaKeys();
})
.then(function (createdMediaKeys) {
return video.setMediaKeys(createdMediaKeys);
})
.catch(function (error) {
console.error('Failed to set up MediaKeys', error);
});
function handleEncrypted(event) {
var session = video.mediaKeys.createSession();
session.addEventListener('message', handleMessage, false);
session
.generateRequest(event.initDataType, event.initData)
.catch(function (error) {
console.error('Failed to generate a license request', error);
});
}
function handleMessage(event) {
// If you had a license server, you would make an asynchronous XMLHttpRequest
// with event.message as the body. The response from the server, as a
// Uint8Array, would then be passed to session.update().
// Instead, we will generate the license synchronously on the client, using
// the hard-coded KEY at the top.
var license = generateLicense(event.message);
var session = event.target;
session.update(license).catch(function (error) {
console.error('Failed to update the session', error);
});
}
// Convert Uint8Array into base64 using base64url alphabet, without padding.
function toBase64(u8arr) {
return btoa(String.fromCharCode.apply(null, u8arr))
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=*$/, '');
}
// This takes the place of a license server.
// kids is an array of base64-encoded key IDs
// keys is an array of base64-encoded keys
function generateLicense(message) {
// Parse the clearkey license request.
var request = JSON.parse(new TextDecoder().decode(message));
// We only know one key, so there should only be one key ID.
// A real license server could easily serve multiple keys.
console.assert(request.kids.length === 1);
var keyObj = {
kty: 'oct',
alg: 'A128KW',
kid: request.kids[0],
k: toBase64(KEY),
};
return new TextEncoder().encode(
JSON.stringify({
keys: [keyObj],
}),
);
}
لاختبار هذا الرمز، تحتاج إلى فيديو مشفَّر لتشغيله. يمكن تشفير مقطع فيديو للاستخدام باستخدام Clear Key لـ WebM وفقًا لتعليمات webm_crypt. تتوفّر أيضًا خدمات تجارية (لتنسيق ISO BMFF/MP4 على الأقل) ويتم تطوير حلول أخرى.
التكنولوجيا ذات الصلة 1: إضافات مصدر الوسائط (MSE)
HTMLMediaElement هو عنصر يتسم بجمال بسيط.
يمكننا تحميل الوسائط وفك ترميزها وتشغيلها ببساطة من خلال تقديم عنوان URL لعنصر src:
<video src="foo.webm"></video>
Media Source API هي إضافة إلى HTMLMediaElement تتيح التحكّم بشكل أدق في مصدر الوسائط، وذلك من خلال السماح لـ JavaScript بإنشاء مجرى بث لتشغيل الفيديو من "أجزاء" منه. ويؤدي ذلك بدوره إلى تفعيل تقنيات مثل البث التكيُّفي وتغيير الوقت.
ما أهمية MSE لميزة إدارة الحقوق الرقمية (EME)؟ لأنّه بالإضافة إلى توزيع المحتوى المحمي، يجب أن يتمكّن مقدّمو المحتوى التجاري من تكييف عرض المحتوى مع شروط الشبكة والمتطلبات الأخرى. على سبيل المثال، تغيّر منصة Netflix معدل نقل البيانات للبث بشكل ديناميكي مع تغيُّر ظروف الشبكة. تعمل واجهة EME مع تشغيل مجرى الوسائط الذي يوفّره تطبيق MSE، تمامًا كما تعمل مع الوسائط التي يتم توفيرها من خلال سمة src.
كيف يمكن تقسيم الوسائط التي تم ترميزها بمعدّلات نقل بيانات مختلفة وتشغيلها؟ يُرجى الاطّلاع على قسم DASH أدناه.
يمكنك الاطّلاع على الخطأ التربيعي المتوسط أثناء عمله على simpl.info/mse. ولأغراض هذا المثال، يتم تقسيم فيديو WebM إلى خمسة أجزاء باستخدام واجهات برمجة تطبيقات الملفات. في تطبيق الإصدار العلني، يتم استرداد أجزاء من الفيديو عبر AJAX.
أولاً، يتم إنشاء SourceBuffer:
var sourceBuffer = mediaSource.addSourceBuffer(
'video/webm; codecs="vorbis,vp8"',
);
بعد ذلك، يتم "بثّ" الفيلم بالكامل إلى عنصر فيديو من خلال إلحاق كل جزء باستخدام الطريقة appendBuffer():
reader.onload = function (e) {
sourceBuffer.appendBuffer(new Uint8Array(e.target.result));
if (i === NUM_CHUNKS - 1) {
mediaSource.endOfStream();
} else {
if (video.paused) {
// start playing after first chunk is appended
video.play();
}
readChunk_(++i);
}
};
يمكنك الاطّلاع على مزيد من المعلومات عن MSE في ملف المعلومات الأساسية عن MSE.
تقنية ذات صلة 2: البث الديناميكي التكيُّفي عبر HTTP (DASH)
سواء كانت على أجهزة متعددة أو منصات متعددة أو أجهزة جوّالة، غالبًا ما يتم استخدام الويب في ظروف اتصال متقلب. من المهم جدًا استخدام أسلوب التسليم الديناميكي والمكيّف للتغلب على القيود المفروضة على معدل نقل البيانات والتغيّرات في استخدام التطبيقات على مختلف الأجهزة.
صُمِّمت DASH (المعروفة أيضًا باسم MPEG-DASH) للسماح بتقديم أفضل عرض للوسائط في العالم غير المستقر، سواء للبث أو التنزيل. توفّر العديد من التقنيات الأخرى ميزات مماثلة، مثل تقنية البث المباشر عبر بروتوكول HTTP (HLS) من Apple وتقنية البث السلس من Microsoft، ولكنّ DASH هي الطريقة الوحيدة لبث الفيديوهات بمعدّل نقل بيانات متكيّف عبر بروتوكول HTTP والتي تستند إلى معيار مفتوح. يتم استخدام DASH حاليًا في مواقع مثل YouTube.
ما علاقة ذلك بالميزتَين EME وMSE؟ ويمكن لعمليات تنفيذ DASH المستندة إلى الخطأ التربيعي المتوسط تحليل أحد البيان وتنزيل أجزاء من الفيديو بمعدل نقل بيانات مناسب وتزويدها بعنصر فيديو في حال الجوع، وذلك باستخدام بنية HTTP الأساسية الحالية.
بعبارة أخرى، تتيح تقنية DASH لموفّري المحتوى التجاري بث محتوى محمي باستخدام تقنية البث التكيُّفي.
تؤدي تقنية DASH ما وعدتك به:
- ديناميكية: تستجيب للظروف المتغيّرة.
- التحكّم التلقائي بالصوت: يتمّ ضبطه لتوفير معدل بت مناسب للصوت أو الفيديو.
- البث: يسمح بالبث والتنزيل.
- بروتوكول HTTP: يتيح هذا البروتوكول إمكانية عرض المحتوى مع الاستفادة من مزايا بروتوكول HTTP، بدون التحمّل لمزايا خادم البث التقليدي.
بدأت شبكة BBC في توفير مجموعات بث تجريبية باستخدام DASH:
يتم ترميز الوسائط عدة مرات بمعدّلات نقل بيانات مختلفة. كل ترميز يسمى تمثيلاً. ويتم تقسيمها إلى عدد من مقاطع الوسائط. يشغِّل العميل برنامجًا من خلال طلب المقاطع بالترتيب من تمثيل عبر بروتوكول HTTP. يمكن تجميع التمثيلات في مجموعات محتوى مماثل تتضمّن تمثيلات تحتوي على محتوى مماثل. إذا أراد العميل تغيير معدل نقل البيانات، يمكنه اختيار بديل من مجموعة التكيف الحالية و بدء طلب المقاطع من هذا التمثيل. يتم ترميز المحتوى بطريقة تجعل من السهل على العميل إجراء هذا التبديل. بالإضافة إلى عدد من أقسام الوسائط، يتضمّن التمثيل بشكل عام أيضًا قسمًا لبدء التشغيل. يمكن اعتبار ذلك عنوانًا يحتوي على معلومات حول الترميز وأحجام الإطارات وما إلى ذلك. ويحتاج العميل إلى الحصول على ذلك لتمثيل تمثيل معيّن قبل استخدام شرائح الوسائط من هذا التمثيل.
في ما يلي ملخّص:
- يتم ترميز الوسائط بمعدّلات نقل بيانات مختلفة.
- تتوفّر ملفات معدلات نقل البيانات المختلفة من خادم HTTP.
- يختار تطبيق الويب العميل معدّل نقل البيانات الذي سيتم استرجاعه وتشغيله باستخدام DASH.
كجزء من عملية تقسيم الفيديو، يتم إنشاء بيان XML يُعرف باسم Media Presentation Description (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 هذا من ملف .mpd المستخدَم في مشغّل YouTube DASH التجريبي.)
وفقًا لمواصفات DASH، يمكن نظريًا استخدام ملف MPD كملف src لفيديو. ولتوفير المزيد من المرونة لمطوّري الويب، اختار مورّدو المتصفّحات بدلاً من ذلك ترك DASH متوافقًا مع مكتبات JavaScript التي تستخدم الخطأ MSE، مثل dash.js. ويؤدي تنفيذ DASH في JavaScript إلى تطوير خوارزمية التكيف بدون الحاجة إلى تحديثات للمتصفح. يتيح استخدام MSE أيضًا تجربة تنسيقات بيان بيانات بديلة وآليات عرض بدون الحاجة إلى إجراء تغييرات على المتصفّح. ينفِّذ Shaka Player من Google برنامج DASH متوافقًا مع EME.
تتوفّر في Mozilla Developer Network تعليمات حول كيفية استخدام أدوات WebM وFFmpeg لتقسيم الفيديو وإنشاء ملف MPD.
الخاتمة
يزداد استخدام الويب لعرض الفيديوهات والمحتوى الصوتي المدفوع بوتيرة كبيرة. يبدو أنّ كل جهاز جديد، سواء كان جهازًا لوحيًا أو وحدة تحكّم ألعاب أو تلفزيون متّصل أو جهاز فكّ ترميز المحتوى التلفزيوني، يمكنه بث الوسائط من موفّري المحتوى الرئيسيين عبر بروتوكول HTTP. تتيح أكثر من %85 من متصفّحات الأجهزة الجوّالة وأجهزة الكمبيوتر المكتبي حاليًا استخدام <video> و <audio>، وتُقدّر شركة Cisco أنّه بحلول عام 2017، ستشكل الفيديوهات %80 إلى %90 من إجمالي عدد زيارات المستهلكين على الإنترنت. في هذا السياق، من المرجّح أن يزداد تأثير توافق المتصفِّحات في توزيع المحتوى المحمي بشكل كبير، وذلك في ظل توقّف دعم مورِّدي المتصفحات لواجهات برمجة التطبيقات التي تعتمد عليها معظم المكوّنات الإضافية للوسائط.
مراجع إضافية
المواصفات والمعايير
مواصفات EME: أحدث نسخة من مسودة المحرّر التشفير المشترَك (CENC) إضافات مصدر الوسائط: أحدث نسخة من مسودة المحرّر معيار DASH (نعم، هذا ملف بتنسيق PDF) نظرة عامة على معيار DASH
مقالات
DTG Webinar (قديم جزئيًا) What is EME?، بقلم "هنري سيفونن" دليل إضافات مصادر الوسائط الدورة التمهيدية MPEG-DASH Test Streams: مشاركة مدونة BBC R&D
إصدارات تجريبية
عرض Clear Key التجريبي: simpl.info/ck عرض Media Source Extensions (MSE) التجريبي ينفِّذ Shaka Player من Google برنامج DASH client مع دعم EME.