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

François Beaufort
François Beaufort

تم تعديل إمكانات الوسائط في Chrome في الإصدار 75. في هذه المقالة، سأناقش تلك الميزات الجديدة التي تشمل:

  • توقع ما إذا كان التشغيل سيكون سلسًا وفعالاً مع الوسائط المشفرة.
  • إتاحة تلميح السمة playsInline لعنصر الفيديو

الوسائط المشفرة: معلومات فك الترميز

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

تم تعديل مواصفات Media Capabilities API التي تحدّد فك الترميز، وذلك لمعالجة إعدادات الوسائط المشفّرة أيضًا، بما يتيح للمواقع الإلكترونية التي تستخدم الوسائط المشفّرة (EME) اختيار مجموعات بث الوسائط الأمثل.

باختصار، في ما يلي طريقة عمل فك ترميز المعلومات for EME. حاوِل استخدام العيّنة الرسمية.

const encryptedMediaConfig = {
  type: 'media-source', // or 'file'
  video: {
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    width: 1920,
    height: 1080,
    bitrate: 2646242, // number of bits used to encode a second of video
    framerate: '25' // number of frames used in one second
  },
  keySystemConfiguration: {
    keySystem: 'com.widevine.alpha',
    videoRobustness: 'SW_SECURE_DECODE' // Widevine L3
  }
};

navigator.mediaCapabilities.decodingInfo(encryptedMediaConfig).then(result => {
  if (!result.supported) {
    console.log('Argh! This encrypted media configuration is not supported.');
    return;
  }

  if (!result.keySystemAccess) {
    console.log('Argh! Encrypted media support is not available.')
    return;
  }

  console.log('This encrypted media configuration is supported.');
  console.log('Playback should be' +
      (result.smooth ? '' : ' NOT') + ' smooth and' +
      (result.powerEfficient ? '' : ' NOT') + ' power efficient.');

  // TODO: Use `result.keySystemAccess.createMediaKeys()` to setup EME playback.
});

تتميّز عمليات تشغيل EME بمسارات متخصّصة لفك الترميز وعرض الرموز، ما يعني توافق برنامج الترميز وأداءه بشكل مختلف مقارنةً بعمليات التشغيل الواضحة. وبالتالي، يجب ضبط مفتاح keySystemConfiguration جديد في كائن إعداد الوسائط الذي تم تمريره إلى navigator.mediaCapabilities.decodingInfo(). وقيمة هذا المفتاح هي قاموس يحتوي على عدد من أنواع EME المعروفة. يكرِّر هذا المدخلات المقدَّمة إلى requestMediaKeySystemAccess() في EME مع اختلاف كبير واحد: يتم تسوية تسلسلات المُدخلات المقدَّمة إلى requestMediaKeySystemAccess() في قيمة واحدة، عندما يكون القصد من التسلسل هو اختيار requestMediaKeySystemAccess() لمجموعة فرعية يتوافق معها.

يشير فك ترميز المعلومات إلى جودة (السلاسة وكفاءة الطاقة) التي يوفرها دعم لزوج واحد من عمليات بث الصوت والفيديو بدون اتخاذ قرار بالنسبة للمتصل. سيظل بإمكان المتصلين طلب إعدادات الوسائط كما هو الحال مع requestMediaKeySystemAccess(). فقط الآن هم يمشون القائمة بأنفسهم.

تعرض السمة navigator.mediaCapabilities.decodingInfo() وعدًا يتم التعامل معه بشكل غير متزامن مع عنصر يحتوي على ثلاث قيم منطقية: supported وsmooth وpowerEfficient. ومع ذلك، عند ضبط مفتاح keySystemConfiguration وتكون قيمة supported هي true، يتم أيضًا عرض كائن MediaKeySystemAccess آخر باسم keySystemAccess. يمكن استخدامه لطلب بعض مفاتيح الوسائط وإعداد تشغيل الوسائط المشفرة. وفي ما يلي مثال لذلك:

// Like rMSKA(), orderedMediaConfigs is ordered from most to least wanted.
const capabilitiesPromises = orderedMediaConfigs.map(mediaConfig =>
  navigator.mediaCapabilities.decodingInfo(mediaConfig)
);

// Assume this app wants a supported and smooth media playback.
let bestConfig = null;
for await (const result of capabilitiesPromises) {
  if (result.supported && result.smooth) {
    bestConfig = result;
    break;
  }
}

if (bestConfig) {
  const mediaKeys = await bestConfig.keySystemAccess.createMediaKeys();
  // TODO: rest of EME path as-is
} else {
  // Argh! No smooth configs found.
  // TODO: Maybe choose the lowest resolution and framerate available.
}

يُرجى العِلم أنّ فك ترميز معلومات الوسائط المشفّرة يتطلب HTTPS.

بالإضافة إلى ذلك، يُرجى العلم أنّه قد يؤدي إلى ظهور طلب للمستخدم على نظامَي التشغيل Android وChromeOS بطريقة requestMediaKeySystemAccess(). ولن يعرض التطبيق طلبات أكثر من requestMediaKeySystemAccess()، على الرغم من أنّ عدد المكالمات يتطلب إعداد تشغيل الوسائط المشفّر.

ALT_TEXT_HERE
طلب بشأن المحتوى المحمي

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

HTMLVideoElement.playsInline

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

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

<video playsinline></video>

بما أنّ Chrome على أجهزة Android وأجهزة الكمبيوتر المكتبي لا يستخدم ميزة ملء الشاشة تلقائيًا، لا يتم استخدام تلميح سمة عنصر الفيديو playsInline.

هدف الشحن | أداة تتبّع حالة Chrome | خطأ Chromium