ما هي عملية EME؟

توفر إضافات الوسائط المشفرة واجهة برمجة تطبيقات تمكِّن تطبيقات الويب من التفاعل مع أنظمة حماية المحتوى، مما يسمح بتشغيل الصوت والفيديو المشفّرين.

تم تصميم أداة EME لإتاحة استخدام التطبيق نفسه والملفات المشفّرة في أي متصفّح، بغض النظر عن نظام الحماية الأساسي. ويمكن استخدام الطريقة الأولى من خلال التدفق وواجهات برمجة التطبيقات الموحّدة، بينما تصبح الطريقة الثانية متاحة بالاستناد إلى مفهوم التشفير المشترك.

EME هي إضافة إلى مواصفات HTMLMediaElement، ومن هنا جاء اسمها. فاستخدام "الإضافة" يعني أنّ استخدام المتصفّح EME اختياري: فإذا كان المتصفّح لا يتيح استخدام الوسائط المشفرة، لن يتمكّن من تشغيل وسائط مشفّرة، ولكن لن يكون ملف EME مطلوبًا للامتثال لمواصفات HTML. من مواصفات EME:

يعمل هذا الاقتراح على توسيع نطاق HTMLMediaElement الذي يوفّر واجهات برمجة تطبيقات للتحكم في تشغيل المحتوى المحمي.

تتيح واجهة برمجة التطبيقات حالات استخدام تتراوح بين فك التشفير البسيط والواضح والفيديوهات العالية القيمة (مع الأخذ في الاعتبار تنفيذ وكيل مستخدم مناسب). يتحكم التطبيق في تبادل التراخيص/المفاتيح، ما يسهِّل تطوير تطبيقات تشغيل قوية تتوافق مع مجموعة من تقنيات فك تشفير المحتوى وحمايته.

لا تحدّد هذه المواصفات نظام حماية المحتوى أو إدارة الحقوق الرقمية. وإنما تحدد واجهة برمجة تطبيقات شائعة يمكن استخدامها لاكتشاف مثل هذه الأنظمة واختيارها والتفاعل معها، فضلاً عن تحديد أنظمة تشفير المحتوى الأبسط. لا يلزم تنفيذ "إدارة الحقوق الرقمية" للامتثال لهذه المواصفات: يلزم فقط تنفيذ نظام "إدارة الحقوق الرقمية" كمرجع مشترك.

تتيح واجهة برمجة التطبيقات الشائعة استخدام مجموعة بسيطة من إمكانات تشفير المحتوى، ما يؤدي إلى إتاحة وظائف التطبيق، مثل المصادقة والتفويض، لمؤلفي الصفحات. ويتم تحقيق ذلك من خلال اشتراط التوسّط في الرسائل الخاصة بنظام حماية المحتوى من خلال الصفحة بدلاً من افتراض التواصل خارج النطاق بين نظام التشفير وترخيص أو خادم آخر.

تستخدم عمليات تنفيذ EME المكونات الخارجية التالية:

  • نظام المفاتيح: يشير إلى آلية حماية المحتوى (DRM). لا تُعرِّف EME أنظمة المفاتيح نفسها، باستثناء "المفتاح الواضح" (المزيد عن ذلك أدناه).
  • وحدة فك تشفير المحتوى (CDM): هي آلية برمجية أو أجهزة من جهة العميل تتيح تشغيل الوسائط المشفرة. كما هو الحال مع الأنظمة الأساسية، لا تُحدِّد EME أي أوامر تقنية، ولكنها توفر واجهة للتطبيقات للتفاعل مع أجهزة إدارة المحتوى المتاحة.
  • خادم الترخيص (المفتاح): يتفاعل مع أداة إدارة المحتوى (CDM) لتوفير مفاتيح لفك تشفير الوسائط. ويكون التفاوض مع خادم الترخيص هو المسؤول عن التطبيق.
  • خدمة حزمة المحتوى: تشفّر الوسائط وتشفِّرها للتوزيع/الاستهلاك.

تجدر الإشارة إلى أنّ التطبيق الذي يستخدم EME يتفاعل مع خادم الترخيص للحصول على مفاتيح لتفعيل فك التشفير، ولكن هوية المستخدم والمصادقة ليستا جزءًا من EME. يتم استرداد المفاتيح لتمكين تشغيل الوسائط بعد (اختياريًا) مصادقة مستخدم. يجب على الخدمات مثل Netflix مصادقة المستخدمين داخل تطبيق الويب: عندما يسجل المستخدم الدخول إلى التطبيق، يحدد التطبيق هوية المستخدم وامتيازاته.

كيف تعمل أداة EME؟

إليك كيفية تفاعل مكونات EME، وفقًا لمثال الرمز البرمجي أدناه:

في حال توفُّر تنسيقات أو برامج ترميز متعددة، يمكن استخدام MediaSource.isTypeSupported() أو HTMLMediaElement.canPlayType() لاختيار التنسيق الصحيح. مع ذلك، قد لا تتوافق "أداة إدارة المحتوى (CDM)" إلا مع مجموعة فرعية مما يتوافق مع المتصفّح للمحتوى غير المشفر. فمن الأفضل التفاوض بشأن إعداد MediaKeys قبل اختيار التنسيق والبرنامج. وإذا كان التطبيق ينتظر الحدث المشفَّر، ولكن أظهرت واجهة MediaKeys أنّه غير قادر على التعامل مع التنسيق/برنامج الترميز الذي تم اختياره، ربما يتأخر التبديل بدون مقاطعة التشغيل.

الخطوات المقترحة هي التفاوض بشأن MediaKeys أولاً، باستخدام MediaKeysSystemAccess.getConfiguration() لمعرفة الإعدادات التي تم التفاوض بشأنها.

إذا كان هناك تنسيق أو برنامج ترميز واحد فقط للاختيار من بينها، لا حاجة إلى استخدام getConfiguration(). ومع ذلك، يُفضَّل إعداد مفاتيح MediaKeys أولاً. إنّ السبب الوحيد لانتظار الحدث المشفَّر هو عدم توفُّر طريقة لمعرفة ما إذا كان المحتوى مشفَّرًا أم لا، إلا أنّ ذلك غير مرجّح على أرض الواقع.

  1. يحاول أحد تطبيقات الويب تشغيل الصوت أو الفيديو الذي يتضمن بثًا مشفّرًا واحدًا أو أكثر.
  2. يدرك المتصفح أن الوسائط مشفرة (انظر المربع أدناه لمعرفة كيفية حدوث ذلك) ويطلق حدثًا مشفَّرًا ببيانات وصفية (initData) تم الحصول عليها من الوسائط المتعلقة بالتشفير.
  3. يتعامل التطبيق مع الحدث المشفَّر:

    1. إذا لم يتم ربط أي كائن MediaKeys بعنصر الوسائط، عليك أولاً تحديد نظام مفاتيح متاح من خلال استخدام navigator.requestMediaKeySystemAccess() للتحقّق من أنظمة المفاتيح المتاحة، ثم إنشاء كائن MediaKeys لأحد أنظمة المفاتيح المتاحة عن طريق كائن MediaKeySystemAccess. تجدر الإشارة إلى أنّه يجب إعداد كائن MediaKeys قبل أول حدث مشفّر. يتم الحصول على عنوان URL لخادم الترخيص من خلال التطبيق بشكل مستقل عن اختيار نظام إدارة مفاتيح متاح. ويمثل كائن MediaKeys جميع المفاتيح المتاحة لفك تشفير الوسائط لعنصر صوتي أو فيديو. وهو يمثّل مثيلاً لـ CDM ويتيح الوصول إلى CDM، لا سيما لإنشاء الجلسات الرئيسية التي تُستخدم للحصول على المفاتيح من خادم ترخيص.

    2. بعد إنشاء كائن MediaKeys، عليك تعيينه إلى عنصر الوسائط: يربط setMediaKeys() بين كائن MediaKeys وHTMLMediaElement، لكي يتم استخدام مفاتيحه أثناء التشغيل، أي أثناء فك الترميز.

  4. ينشئ التطبيق MediaKeySession عن طريق استدعاء createSession() على MediaKeys. يؤدي ذلك إلى إنشاء MediaKeySession، والتي تمثل عمر الترخيص ومفاتيحه.

  5. ينشئ التطبيق طلب ترخيص عن طريق تمرير بيانات الوسائط التي تم الحصول عليها في المعالج المشفر إلى وحدة تحكم المحتوى (CDM)، عن طريق استدعاء generateRequest() على MediaKeySession.

  6. تنشط أداة CDM حدث رسالة: طلب للحصول على مفتاح من خادم ترخيص.

  7. يتلقى الكائن MediaKeySession حدث الرسالة ويرسل التطبيق رسالة إلى خادم الترخيص (عبر XHR مثلاً).

  8. يتلقى التطبيق استجابة من خادم الترخيص ويمرر البيانات إلى وحدة إدارة المحتوى (CDM) باستخدام طريقة update() في MediaKeySession.

  9. تفكّ وحدة إدارة المحتوى (CDM) تشفير الوسائط باستخدام المفاتيح الموجودة في الترخيص. ويجوز استخدام مفتاح صالح من أي جلسة داخل MediaKeys مرتبطة بعنصر الوسائط. سيصل CDM إلى المفتاح والسياسة المفهرَسة بواسطة معرّف المفتاح.

يتم استئناف تشغيل الوسائط.

كيف يعرف المتصفح أن الوسائط مشفرة؟

تتوفّر هذه المعلومات في البيانات الوصفية لملف حاوية الوسائط، الذي سيكون بتنسيق مثل ISO BMFF أو WebM. بالنسبة إلى ISO BMFF، يعني ذلك بيانات التعريف للعنوان، المُسمى "مربع معلومات مخطط الحماية". يستخدم WebM عنصر Matroska ContentEncryption مع بعض الإضافات الخاصة بـ WebM. يتم توفير الإرشادات لكل حاوية في سجلّ EME خاص بأداة EME.

تجدر الإشارة إلى أنّه قد تكون هناك رسائل متعدّدة بين CDM وخادم الترخيص، وتكون جميع عمليات التواصل في هذه العملية مبهمة بالنسبة إلى المتصفّح والتطبيق: لا يتعرّف CDM وخادم الترخيص على الرسائل إلا، على الرغم من أنّ طبقة التطبيق يمكنها معرفة نوع الرسالة التي يرسلها CDM. يحتوي طلب الترخيص على إثبات لصحة (وعلاقة الثقة) بـ CDM، بالإضافة إلى مفتاح لاستخدامه عند تشفير مفاتيح المحتوى في الترخيص الناتج.

ولكن ما الذي تفعله أجهزة CDMs في الواقع؟

لا يوفّر تنفيذ EME في حد ذاته طريقة لفك تشفير الوسائط، بل يوفّر فقط واجهة برمجة تطبيقات لتطبيق ويب للتفاعل مع وحدات فك تشفير المحتوى.

وفي الواقع، لا يتم تحديد ما لا تفعله أجهزة CDM بواسطة مواصفات EME، وقد تتولى الأداة معالجة فك ترميز (فك ضغط) الوسائط وفك تشفيرها. من الأقل إلى الأكثر قوة، هناك العديد من الخيارات المحتملة لوظائف CDM:

  • فك التشفير فقط، مع تمكين التشغيل باستخدام مسار الوسائط العادي، من خلال عنصر <video> مثلاً.
  • فك التشفير وفك الترميز، وتمرير إطارات الفيديو إلى المتصفّح لعرضها
  • فك التشفير وفك الترميز، والعرض مباشرةً في الأجهزة (على سبيل المثال، وحدة معالجة الرسومات)

هناك عدة طرق لإتاحة CDM لتطبيق ويب:

  • تجميع CDM مع المتصفح.
  • توزيع CDM بشكل منفصل.
  • إنشاء CDM في نظام التشغيل.
  • تضمين CDM في البرامج الثابتة
  • تضمين CDM في الأجهزة.

لا تتحدد طريقة توفير CDM من خلال مواصفات EME، ولكن في جميع الحالات يكون المتصفح مسؤولاً عن فحصه وعرضه.

ولا تشترط أداة EME استخدام نظام مفاتيح معيّن، فضمن المتصفّحات الحالية المتوافقة مع أجهزة الكمبيوتر المكتبي والأجهزة الجوّالة، يتوافق Chrome مع Widevine ويتوافق IE11 مع نظام التشغيل Playجاهز (IE11).

الحصول على مفتاح من خادم ترخيص

أثناء الاستخدام التجاري العادي، سيتم تشفير المحتوى وترميزه باستخدام خدمة أو أداة تعبئة وتغليف. بعد إتاحة الوسائط المشفّرة على الإنترنت، يمكن لبرنامج الويب الحصول على مفتاح (مضمّن في ترخيص) من خادم ترخيص واستخدام المفتاح لتفعيل فك التشفير وتشغيل المحتوى.

ويوضح الرمز التالي (المعدّل من أمثلة المواصفات) كيف يمكن لتطبيق اختيار نظام مفاتيح مناسب والحصول على مفتاح من خادم ترخيص.

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

التشفير الشائع

تتيح حلول التشفير الشائعة لموفّري المحتوى تشفير المحتوى وتجميعه مرة واحدة لكل حاوية أو برنامج ترميز، واستخدامه مع مجموعة متنوعة من أنظمة المفاتيح وأنظمة إدارة المحتوى (CDM) والبرامج العميلة: ويعني ذلك أي وحدة تحكم في المحتوى تتيح التشفير المشترك. على سبيل المثال، يمكن تشغيل فيديو تم تجميعه باستخدام Playready في متصفّح باستخدام جهاز Widevine CDM للحصول على مفتاح من خادم ترخيص Widevine.

هذا الأمر على عكس الحلول القديمة التي لا تعمل إلا مع حزمة رأسية كاملة، بما في ذلك برنامج واحد يتضمّن غالبًا وقت تشغيل التطبيق.

التشفير المشترك (CENC) هو معيار ISO يحدّد مخطط حماية لمعيار ISO BMFF، وينطبق مفهوم مشابه على WebM.

محو المفتاح

على الرغم من أنّ EME لا تحدّد وظيفة إدارة الحقوق الرقمية، إلا أنّ المواصفات تفرض حاليًا على جميع المتصفّحات التي تتيح استخدام EME تنفيذ ميزة "المفتاح الواضح". باستخدام هذا النظام، يمكن تشفير الوسائط باستخدام مفتاح ثم تشغيلها ببساطة من خلال توفير هذا المفتاح. يمكن تضمين ميزة "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 على الأقل) وجارٍ تطوير حلول أخرى.

HTMLMediaElement هو مخلوق رائع الجمال البسيط.

يمكننا تحميل الوسائط وفك ترميزها وتشغيلها ببساطة من خلال توفير عنوان URL لـ src:

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

تُعدّ واجهة برمجة التطبيقات Media Source API إضافة لـ HTMLMediaElement تتيح التحكم بشكل أكثر دقة في مصدر الوسائط من خلال السماح لـ JavaScript بإنشاء مجموعات بث للتشغيل من "أجزاء" من الفيديو. وهذا بدوره يؤدي إلى تفعيل أساليب مثل البث التكيُّفي وتغيير الوقت.

ما سبب أهمية الخطأ التربيعي المتوسط في عملية EME؟ فبالإضافة إلى توزيع المحتوى المحمي، يجب أن يكون موفرو المحتوى التجاري قادرين على تكيف تسليم المحتوى مع ظروف الشبكة والمتطلبات الأخرى. على سبيل المثال، تغيِّر Netflix معدل نقل بيانات البث ديناميكيًا مع تغير ظروف الشبكة. تعمل أداة EME مع تشغيل مجموعات بث الوسائط التي يوفّرها تنفيذ الخطأ التربيعي المتوسط، تمامًا كما تفعل مع الوسائط المتوفّرة من خلال سمة src.

كيف يمكن تقسيم وتشغيل الوسائط المشفرة بمعدلات نقل بيانات مختلفة؟ راجِع قسم DASH أدناه.

يمكنك الاطّلاع على الخطأ التربيعي المتوسط عمليًا على الرابط 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.

أجهزة متعددة، وأنظمة أساسية متعددة، والجوال - بغض النظر عن الاسم الذي تطلقه عليه، فإن الويب غالبًا ما يكون خبيرًا في ظل ظروف اتصال قابل للتغيير. يُعد التسليم الديناميكي والتكيّفي أمرًا ضروريًا للتعامل مع قيود معدل نقل البيانات والتباين في عالم متعدد الأجهزة.

تم تصميم DASH (المعروفة أيضًا باسم MPEG-DASH) لتوفير أفضل طريقة ممكنة لتوصيل الوسائط في عالم غير مستقر، لكل من البث والتنزيل. وهناك العديد من التكنولوجيات الأخرى التي تنفّذ إجراءات مشابهة، مثل البث المباشر وفق بروتوكول HTTP (HLS) من Apple والبث السلس من Microsoft، ولكن بروتوكول DASH هو الطريقة الوحيدة لبثّ نقل البيانات التكيُّفي عبر HTTP والذي يعتمد على معيار مفتوح. تُستخدم DASH حاليًا في مواقع مثل YouTube.

ما علاقة ذلك بكل من EME وMSE؟ يمكن لعمليات تنفيذ DASH المستندة إلى الخطأ التربيعي المتوسط تحليل البيان، وتنزيل مقاطع من الفيديو بمعدل نقل بيانات مناسب، و إرسالها إلى عنصر فيديو عندما لا يكون هناك رضا - وذلك باستخدام البنية الأساسية الحالية لبروتوكول HTTP.

بعبارة أخرى، تمكّن تقنية DASH مزوّدي المحتوى التجاري من بث المحتوى المحمي بشكل تكيُّفي.

يقوم DASH بما يقوله على القصدير:

  • ديناميكي: تستجيب للظروف المتغيرة.
  • تكيُّفي: تتكيّف هذه الميزة مع المحتوى الذي يتم فيه ضبط معدل نقل بيانات مناسب للصوت أو الفيديو.
  • البث: يتيح البث والتنزيل.
  • HTTP:يتيح هذا الخيار عرض المحتوى باستخدام بروتوكول HTTP، بدون عيوب خادم البث التقليدي.

بدأت شبكة BBC تقديم مجموعات بث تجريبية باستخدام بروتوكول DASH:

يتم تشفير الوسائط عدة مرات بمعدلات نقل بيانات مختلفة. كل ترميز يسمى التمثيل. تنقسم هذه الشرائح إلى عدد من شرائح الوسائط. يشغّل العميل برنامجًا عن طريق طلب الأقسام بالترتيب من تمثيلات على HTTP. يمكن تجميع الممثلين في مجموعات تكييف من التمثيلات التي تحتوي على محتوى مكافئ. إذا أراد العميل تغيير معدل نقل البيانات، يمكنه اختيار بديل من مجموعة التكيّف الحالية والبدء في طلب المقاطع من ذلك التمثيل. يتمّ ترميز المحتوى بطريقة تسهّل على العميل عملية التبديل. بالإضافة إلى عدد من شرائح الوسائط، يشتمل التمثيل بشكل عام أيضًا على شريحة إعداد. يمكن اعتبار ذلك عنوانًا يحتوي على معلومات حول الترميز وأحجام الإطارات وما إلى ذلك. ويحتاج العميل إلى الحصول على ذلك لتمثيل تمثيل معيّن قبل استخدام قطاعات الوسائط من هذا التمثيل.

خلاصة القول:

  1. يتم تشفير الوسائط بمعدلات نقل بيانات مختلفة.
  2. تتوفر الملفات المختلفة لمعدل نقل البيانات من خادم HTTP.
  3. يختار تطبيق الويب للعميل معدل نقل البيانات المطلوب استرداده وتشغيله مرة أخرى باستخدام DASH.

كجزء من عملية تصنيف الفيديو إلى قطاعات أو شرائح، يتم آليًا إنشاء بيان XML يُعرف باسم "وصف عرض تقديمي للوسائط" (MPD). يصف هذا مجموعات التكيف والتمثيل، مع المدد وعناوين URL. يبدو ملف MPD على النحو التالي:

    <MPD xmlns="urn:mpeg:DASH:schema:MPD:2011" mediaPresentationDuration="PT0H3M1.63S" minBufferTime="PT1.5S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"
    type="static">
      <Period duration="PT0H3M1.63S" start="PT0S">
        <AdaptationSet>
          <ContentComponent contentType="video" id="1" />
          <Representation bandwidth="4190760" codecs="avc1.640028" height="1080" id="1" mimeType="video/mp4" width="1920">
            <BaseURL>car-20120827-89.mp4</BaseURL>
            <SegmentBase indexRange="674-1149">
              <Initialization range="0-673" />
            </SegmentBase>
          </Representation>
          <Representation bandwidth="2073921" codecs="avc1.4d401f" height="720" id="2" mimeType="video/mp4" width="1280">
            <BaseURL>car-20120827-88.mp4</BaseURL>
            <SegmentBase indexRange="708-1183">
              <Initialization range="0-707" />
            </SegmentBase>
          </Representation>

          …

        </AdaptationSet>
      </Period>
    </MPD>

(مصدر XML هذا مأخوذ من ملف .mpd المستخدَم في مشغّل العرض التوضيحي لـ DASH على YouTube.)

وفقًا لمواصفات DASH، يمكن نظريًا استخدام ملف MPD كعنصر src لفيديو معيّن. ومع ذلك، لمنح المطوّرين على الويب المزيد من المرونة، اختار مورّدو المتصفّحات بدلاً من ذلك ترك إتاحة DASH في مكتبات JavaScript باستخدام الخطأ التربيعي المتوسط، مثل dash.js. يسمح تنفيذ DASH في JavaScript لخوارزمية التكيف بالتطور بدون الحاجة إلى تحديثات المتصفح. بالإضافة إلى ذلك، يتيح استخدام الخطأ التربيعي المتوسط أيضًا إجراء التجارب باستخدام تنسيقات ملفات بيان بديلة وآليات عرض بديلة بدون الحاجة إلى إجراء تغييرات على المتصفّح. ينفِّذ Shka Player من Google برنامج DASH بدعم من EME.

تتضمّن شبكة مطوّري برامج Mozilla تعليمات حول كيفية استخدام أدوات WebM وFFmpeg لتقسيم الفيديو وإنشاء تنسيق MPD.

الخلاصة

يتزايد استخدام الويب لتقديم محتوى فيديو وصوت مدفوع بمعدل ضخم. يبدو أنّ كل جهاز جديد، سواء كان جهازًا لوحيًا أو وحدة تحكم ألعاب أو تلفزيونًا متصلاً أو جهاز فكّ ترميز المحتوى التلفزيوني، قادر على بث الوسائط من كبار مزوّدي المحتوى عبر HTTP. أكثر من 85% من المتصفحات المتوافقة مع الأجهزة الجوّالة وأجهزة الكمبيوتر المكتبي تتوافق الآن مع <video> و <audio>، وتقدّر Cisco أن الفيديوهات ستجذب ما بين 80 إلى 90 بالمئة من الزيارات الواردة من المستهلكين على الإنترنت حول العالم بحلول عام 2017. في هذا السياق، من المحتمل أن يزداد أهمية دعم المتصفح لتوزيع المحتوى المحمي بشكل متزايد، نظرًا لأن مورّدي المتصفحات يقلّلون استخدام واجهات برمجة التطبيقات التي تعتمد عليها معظم المكوّنات الإضافية للوسائط.

محتوى إضافي للقراءة

المواصفات والمعايير

مواصفات EME: أحدث مسودة للمحرِّر التشفير المشترك (CENC) إضافات مصدر الوسائط: أحدث مسودة للمحرِّر معيار DASH (نعم، ملف PDF) نظرة عامة على معيار DASH

مقالات

DTG Webinar (قديم إلى حد ما) What is EME?، الكتاب التمهيدية إضافات مصادر الوسائط MPEG-DASH Test Streams: مشاركة مدونة BBC R&D

إصدارات تجريبية

العرض التوضيحي لـClear Key: simpl.info/ck عرض توضيحي لإضافات مصادر الوسائط (MSE) ينفِّذ Shka Player من Google برنامج DASH مع دعم EME

إضافة ملاحظات