توفّر Encrypted Media Extensions واجهة برمجة تطبيقات تتيح لتطبيقات الويب التفاعل مع أنظمة حماية المحتوى، للسماح بتشغيل محتوى صوتي وفيديو مشفَّرَين.
تم تصميم EME للسماح باستخدام التطبيق نفسه والملفات المشفّرة في أي browser، بغض النظر عن نظام الحماية الأساسي. يمكن تنفيذ الإجراء الأول بفضل واجهات برمجة التطبيقات والإجراءات الموحدة، ويمكن تنفيذ الإجراء الثاني بفضل مفهوم التشفير المشترَك.
EME هي إضافة إلى مواصفات HTMLMediaElement، ومن هنا جاء اسمها. وبما أنّ EME هي "إضافة"، فإنّ توافق المتصفّح معها يكون اختياريًا: إذا كان المتصفّح لا يتوافق مع الوسائط المشفّرة، لن يتمكّن من تشغيل الوسائط المشفّرة، ولكنّ EME غير مطلوبة للتوافق مع مواصفات HTML. من مواصفات EME:
يضيف هذا الاقتراح HTMLMediaElement واجهة برمجة تطبيقات للتحكّم في تشغيل المحتوى المحمي.
تتوافق واجهة برمجة التطبيقات مع حالات الاستخدام التي تتراوح بين فك تشفير مفتاح التشفير البسيط إلى الفيديوهات العالية القيمة (في حال تنفيذ وكيل مستخدم مناسب). يتحكّم التطبيق في عملية مبادلة التراخيص/المفاتيح، ما يسهّل تطوير تطبيقات تشغيل قوية تتوافق مع مجموعة من تقنيات فك تشفير المحتوى وحماية المحتوى.
لا تحدّد هذه المواصفة نظامًا لحماية المحتوى أو لإدارة الحقوق الرقمية. بدلاً من ذلك، يحدِّد معيار واجهة برمجة تطبيقات شائعة يمكن استخدامها لمحاولة اكتشاف هذه الأنظمة واختيارها والتفاعل معها، بالإضافة إلى أنظمة تشفير المحتوى البسيطة. لا يُشترط تنفيذ إدارة الحقوق الرقمية للامتثال لهذه المواصفة: يجب فقط تنفيذ نظام Clear Key كقاعدة أساسية مشتركة.
تتيح واجهة برمجة التطبيقات الشائعة مجموعة بسيطة من إمكانات تشفير المحتوى، وتترك وظائف التطبيق، مثل المصادقة والترخيص، لمؤلفي الصفحات. ويتم ذلك من خلال مطالبة الصفحة بالتوسّط في رسائل نظام حماية المحتوى بدلاً من افتراض أنّه يتم استخدام قنوات تواصل خارج النطاق بين نظام التشفير والترخيص أو خادم آخر.
تستخدِم عمليات تنفيذ EME المكوّنات الخارجية التالية:
- نظام المفاتيح: آلية حماية المحتوى (إدارة الحقوق الرقمية) لا تحدِّد إدارة الحقوق الرقمية للمحتوى المحمي بالتشفير (EME) أنظمة مفاتيح التشفير بحد ذاتها، باستثناء Clear Key (مزيد من المعلومات عن ذلك أدناه).
- وحدة فك تشفير المحتوى (CDM): هي برمجية أو جهاز آلية من جهة العميل تتيح تشغيل الوسائط المشفَّرة. كما هو الحال مع أنظمة إدارة المفاتيح، لا تحدِّد EME أيّ أنظمة إدارة حقوق رقمية، بل توفِّر واجهة للتطبيقات كي تتمكّن من التفاعل مع أنظمة إدارة الحقوق الرقمية المتاحة.
- خادم الترخيص (المفتاح): يتفاعل مع وحدة إدارة الحقوق الرقمية (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. يتم تقديم إرشادات لكل حاوية في سجلّ خاص بإدارة الحقوق الرقمية للمحتوى المحمي.
يُرجى العِلم أنّه قد تكون هناك رسائل متعدّدة بين وحدة إدارة الحقوق الرقمية وخادم الترخيص، وتكون جميع عمليات الاتّصال في هذه العملية غير شفافة للمتصفّح والتطبيق: لا يمكن فهم الرسائل إلا من خلال وحدة إدارة الحقوق الرقمية وخادم الترخيص، على الرغم من أنّ نوع الرسالة التي ترسلها وحدة إدارة الحقوق الرقمية يمكن أن تظهر لطبقة التطبيق. يحتوي طلب الترخيص على إثبات لصلاحية وحدة إدارة الحقوق الرقمية (وعلاقتها بالثقة) بالإضافة إلى مفتاح يتم استخدامه عند تشفير مفاتيح المحتوى في الترخيص الناتج.
ولكن ما هي وظيفة منصّات إدارة البيانات؟
لا يقدّم تطبيق EME في حدّ ذاته طريقة لفك تشفير الوسائط، بل يقدّم ببساطة واجهة برمجة تطبيقات لتطبيق ويب للتفاعل مع وحدات فك تشفير المحتوى.
لا تحدّد مواصفات EME الإجراءات التي تُنفذها منصّات إدارة الحقوق الرقمية (CDM)، وقد تتعامل منصّة إدارة الحقوق الرقمية مع فك ترميز الوسائط (إزالة الضغط) وفك التشفير أيضًا. من الأقل إلى الأكثر فعالية، هناك عدة خيارات محتملة لوظائف إدارة البيانات الوصفية:
- فك التشفير فقط، ما يتيح التشغيل باستخدام مسار الوسائط العادي، على سبيل المثال من خلال عنصر <video>
- فك التشفير وفك الترميز، ونقل إطارات الفيديو إلى المتصفّح لعرضها
- فك التشفير وفك الترميز، والعرض مباشرةً في الجهاز (مثل وحدة معالجة الرسومات)
تتوفّر طرق متعدّدة لإتاحة منصّة إدارة البيانات لتطبيق ويب:
- حِزم إدارة جهاز Chrome مع المتصفّح
- توزيع وحدة إدارة البيانات (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 في المتصفّح: لا يتطلّب ذلك استخدام وحدة فك تشفير منفصلة.
على الرغم من أنّه من غير المرجّح استخدام Clear Key مع العديد من أنواع المحتوى التجاري، إلا أنّه يمكن استخدامه بشكل متوافق تمامًا مع جميع المتصفّحات المتوافقة مع EME. وهو مفيد أيضًا لاختبار عمليات تنفيذ EME والتطبيقات التي تستخدم EME، بدون الحاجة إلى طلب مفتاح محتوى من خادم ترخيص. يمكنك الاطّلاع على مثال بسيط على Clear Key على الرابط 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 أدناه.
يمكنك الاطّلاع على MSE في simpl.info/mse. لأغراض هذا المثال، يتم تقسيم فيديو WebM إلى خمس أجزاء باستخدام File APIs. في تطبيق الإصدار العلني، يتم استرداد أجزاء من الفيديو عبر 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 والتي تستند إلى معيار مفتوح. يستخدم موقع YouTube حاليًا بروتوكول DASH.
ما علاقة ذلك بتنسيقَي EME وMSE؟ يمكن لعمليات تنفيذ DASH المستندة إلى MSE قراءة بيان بيانات وتنزيل مقاطع من الفيديو بمعدّل نقل بيانات مناسب وإرسالها إلى عنصر فيديو عند الحاجة، وذلك باستخدام البنية الأساسية الحالية لبروتوكول 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 (قديم جزئيًا) ما هو EME؟، بقلم "هنري سيفونين" مقدّمة عن Media Source Extensions عمليات بث اختبارية لتنسيق MPEG-DASH: مدوّنة الأبحاث والتطوير في BBC
إصدارات تجريبية
عرض Clear Key التجريبي: simpl.info/ck عرض Media Source Extensions (MSE) التجريبي ينفِّذ Shaka Player من Google برنامج DASH client مع إتاحة EME.