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

François Beaufort
François Beaufort

برنامج فك ترميز الفيديوهات AV1

Chromestatus Tracker | خطأ Chromium

EME: طلب البحث عن مخطط التشفير

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

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

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

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

في حال عدم تحديد هذه السياسة، يعني ذلك أنّ أي نظام تشفير مقبول. تجدر الإشارة إلى أنّ ميزة Clear Key (محو المفتاح) متوافقة دائمًا مع المخطط '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']
  }]);

هدف التنفيذ | Chromestatus Tracker | خطأ Chromium

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

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

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

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

باختصار، إليك آلية عمل واجهة برمجة التطبيقات في الوقت الحالي. يمكنك الاطّلاع على النموذج الرسمي لتجربة جميع إصدارات 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 في Chrome 69 لأجهزة الكمبيوتر المكتبي (ChromeOS وLinux وMac وWindows).

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

هدف إلى إجراء تجربة | Chromestatus Tracker | خطأ Chromium

التوافق مع MSE PTS/DTS

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

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

بروتوكول PTS/DTS
PTS/DTS

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

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

هدف التنفيذ | خطأ Chromium

التعامل مع الأهداف المرتبطة بعرض الوسائط على Android Go

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

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

ALT_TEXT_HERE
معالج الغرض من الوسائط

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

خطأ Chromium

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

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

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

هدف الإيقاف والإزالة | Chromestatus Tracker | خطأ Chromium