تعديلات الوسائط في الإصدار 69 من Chrome

François Beaufort
François Beaufort

أداة فك ترميز الفيديوهات بتنسيق AV1

Chromestatus Tracker | Chromium Bug

EME: الاستعلام عن مدى توفّر مخطط التشفير

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

لتجنُّب تحديد النظام الأساسي الذي يعمل عليه التطبيق للتحقّق من توفّر أحد مخططات التشفير المعروفة،تتم إضافة مفتاح encryptionScheme جديد في قائمة MediaKeySystemMediaCapability للسماح للمواقع الإلكترونية بتحديد مخطط التشفير الذي يمكن استخدامه في إضافات الوسائط المشفّرة (EME).

يمكن أن يكون مفتاح encryptionScheme الجديد إحدى القيمتَين التاليتَين:

  • 'cenc' تشفير عيّنة كاملة وجزء فرعي من NAL للفيديو في وضع AES-CTR
  • 'cbcs' تشفير جزئي لنمط NAL للفيديو في وضع AES-CBC

في حال عدم تحديد مخطط تشفير، يعني ذلك أنّ أي مخطط تشفير مقبول. يُرجى العلم أنّ مفتاح التشفير الواضح يتيح دائمًا استخدام مخطط 'cenc'.

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

await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [
    {
      label: 'configuration using the "cenc" encryption scheme',
      videoCapabilities: [{
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cenc'
      }],
      audioCapabilities: [{
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cenc'
      }],
      initDataTypes: ['keyids']
    },
    {
      label: 'configuration using the "cbcs" encryption scheme',
      videoCapabilities: [{
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cbcs'
      }],
      audioCapabilities: [{
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cbcs'
      }],
      initDataTypes: ['keyids']
    },
  ]);

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

await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{
    videoCapabilities: [
      { // A video capability using the "cenc" encryption scheme
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cenc'
      },
      { // A video capability using the "cbcs" encryption scheme
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: 'cbcs'
      },
    ],
    audioCapabilities: [
      { // An audio capability using the "cenc" encryption scheme
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cenc'
      },
      { // An audio capability using the "cbcs" encryption scheme
        contentType: 'audio/mp4; codecs="mp4a.40.2"',
        encryptionScheme: 'cbcs'
      },
    ],
    initDataTypes: ['keyids']
  }]);

Intent to Implement | Chromestatus Tracker | Chromium Bug

EME: التحقّق من سياسة HDCP

في الوقت الحالي، يُعدّ HDCP أحد متطلبات السياسة الشائعة لبث المحتوى المحمي بدرجات دقة عالية. وعلى مطوّري الويب الذين يريدون فرض سياسة HDCP الانتظار إلى أن تكتمل عملية تبادل الترخيص أو بدء بث المحتوى بدرجة دقة منخفضة. هذا موقف مزعج يهدف HDCP Policy Check API إلى حلّه.

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

تعمل واجهة برمجة التطبيقات HDCP Policy Check API ببساطة من خلال استدعاء mediaKeys.getStatusForPolicy() باستخدام عنصر يحتوي على مفتاح minHdcpVersion وقيمة صالحة. إذا كان بروتوكول HDCP متاحًا بالإصدار المحدّد، يتم حلّ الوعد المعروض بقيمة MediaKeyStatus‏='usable'. بخلاف ذلك، يتم حلّ الوعد باستخدام قيم خطأ أخرى من MediaKeyStatus مثل 'output-restricted' أو 'output-downscaled'. إذا كان نظام إدارة المفاتيح لا يسمح أبدًا بإجراء فحص سياسة HDCP (مثل نظام Clear Key System)، يتم رفض الوعد.

في ما يلي آلية عمل واجهة برمجة التطبيقات في الوقت الحالي. اطّلِع على العينة الرسمية لتجربة جميع إصدارات HDCP.

const config = [{
  videoCapabilities: [{
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    robustness: 'SW_SECURE_DECODE' // Widevine L3
  }]
}];

navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(mediaKeySystemAccess => mediaKeySystemAccess.createMediaKeys())
.then(mediaKeys => {

  // Get status for HDCP 2.2
  return mediaKeys.getStatusForPolicy({ minHdcpVersion: '2.2' })
  .then(status => {
    if (status !== 'usable')
      return Promise.reject(status);

    console.log('HDCP 2.2 can be enforced.');
    // TODO: Fetch high resolution protected content...
  });
})
.catch(error => {
  // TODO: Fallback to fetch license or stream low-resolution content...
});

متوفّر لعمليات التجربة والتقييم

للحصول على ملاحظات من مطوّري الويب، أضفنا سابقًا واجهة برمجة التطبيقات HDCP Policy Check API في الإصدار 69 من Chrome لأجهزة الكمبيوتر المكتبي (ChromeOS وLinux وMac وWindows).

وانتهت الفترة التجريبية بنجاح في تشرين الثاني (نوفمبر) 2018.

Intent to Experiment | Chromestatus Tracker | Chromium Bug

الامتثال لمعايير PTS/DTS في MSE

يتم الآن تسجيل النطاقات المخزّنة مؤقتًا وقيم المدة حسب فواصل الطابع الزمني لعرض المحتوى (PTS)، بدلاً من فواصل الطابع الزمني لفك التشفير (DTS) في إضافات مصدر الوسائط (MSE).

عندما كان معيار MSE جديدًا، تم اختبار تنفيذه في Chrome على WebM وMP3، وبعض تنسيقات مجرى الوسائط التي لم يكن فيها فرق بين PTS وDTS. وكان يعمل بشكل جيد إلى أن تمت إضافة ISO BMFF (المعروف أيضًا باسم MP4). غالبًا ما يحتوي هذا الحاوي على بثّ زمني للعرض بترتيب غير متّسق مقارنةً ببثّ فك التشفير (لبرامج الترميز مثل H.264 مثلاً)، ما يؤدي إلى اختلاف DTS وPTS. وقد أدّى ذلك إلى تسجيل Chrome لقيم مختلفة قليلاً (عادةً) عن القيم المتوقّعة في النطاقات المخزّنة مؤقتًا ومدّة عرض الفيديو. سيتم طرح هذا السلوك الجديد تدريجيًا في الإصدار 69 من Chrome وسيتم جعل تطبيق MSE متوافقًا مع مواصفات MSE.

PTS/DTS
PTS/DTS

يؤثر هذا التغيير في MediaSource.duration (وبالتالي HTMLMediaElement.duration) وSourceBuffer.buffered (وبالتالي HTMLMediaElement.buffered) وSourceBuffer.remove(start, end).

إذا لم تكن متأكّدًا من الطريقة المستخدَمة للإبلاغ عن القيم المتعلّقة بالنطاقات التي تم تخزينها مؤقتًا ومدّة التخزين المؤقت، يمكنك الانتقال إلى صفحة chrome://media-internals الداخلية والبحث عن "ChunkDemuxer: buffering by PTS" أو "ChunkDemuxer: buffering by DTS" فيملفّات السجلّ.

Intent to Implement | Chromium Bug

التعامل مع نوايا عرض الوسائط على Android Go

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

لحلّ هذه المشكلة، يتتبّع الإصدار 69 من Chrome على Android Go الآن نوايا عرض الوسائط لكي يتمكن المستخدمون من عرض الملفات الصوتية والفيديوهات والصور التي تم تنزيلها. وبعبارة أخرى، يحلّ محل التطبيقات غير المتوفّرة لعرض الإعلانات.

ALT_TEXT_HERE
معالج نية الوسائط

يُرجى العِلم أنّ ميزة Chrome هذه مفعّلة على جميع أجهزة Android التي تعمل بالإصدار O والإصدارات الأحدث والمزوّدة بذاكرة وصول عشوائي (RAM) بسعة 1 غيغابايت أو أقل.

خطأ في Chromium

إزالة الأحداث "المتوقفة" لعناصر الوسائط باستخدام MSE

يتمّ رفع حدث "توقّف مؤقت" في عنصر الوسائط إذا تعذّر تحميل بيانات الوسائط لعدّة ثوانٍ تقريبًا. عند استخدام إضافات مصدر الوسائط (MSE)، يدير تطبيق الويب عملية التنزيل ولا يدرك عنصر الوسائط مستوى تقدّمها. وقد أدّى ذلك إلى أن يُرسِل Chrome أحداث "توقّف مؤقت" في مواقع غير مناسبة كلما لم يُرفِق الموقع الإلكتروني مقتطفات جديدة من بيانات الوسائط باستخدام SourceBuffer.appendBuffer() في آخر 3 ثوانٍ.

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

القرار بإيقاف الميزة نهائيًا وإزالتها | تتبُّع حالة Chrome | خطأ في Chromium