Aggiornamenti di contenuti multimediali in Chrome 75

François Beaufort
François Beaufort

Le funzionalità multimediali di Chrome sono state aggiornate nella versione 75. In questo articolo illustrerò le nuove funzionalità, che includono:

  • Prevedere se la riproduzione sarà fluida ed efficiente per i contenuti multimediali criptati.
  • Supporto dell'indicazione dell'attributo playsInline dell'elemento video.

Contenuti multimediali criptati: informazioni sulla decodifica

Da Chrome 66, gli sviluppatori web possono utilizzare Informazioni decodifica per eseguire query sul browser in merito alle capacità di decodifica dei contenuti chiari del dispositivo in base a informazioni quali codec, profilo, risoluzione, velocità in bit e così via. Indica se la riproduzione sarà fluida (tempestiva) e a basso consumo energetico in base alle statistiche di riproduzione precedenti registrate dal browser.

Da allora, la specifica dell'API Media Capabilities, che definisce le informazioni di decodifica, è stata aggiornata per gestire anche le configurazioni dei contenuti multimediali criptati, in modo che i siti web che li utilizzano (EME) possano selezionare gli stream multimediali ottimali.

In breve, ecco come funzionano le informazioni di decodifica per EME. Prova il campione ufficiale.

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

Le riproduzioni EME hanno percorsi di codice di decodifica e rendering specializzati, il che significa che hanno un supporto e un rendimento diversi dei codec rispetto alle riproduzioni chiare. Di conseguenza, è necessario impostare una nuova chiave keySystemConfiguration nell'oggetto di configurazione multimediale passato a navigator.mediaCapabilities.decodingInfo(). Il valore di questa chiave è un dizionario che contiene alcuni tipi di EME ben noti. In questo modo vengono replicati gli input forniti a requestMediaKeySystemAccess() di EME con una differenza sostanziale: le sequenze di input fornite a requestMediaKeySystemAccess() vengono appiattite in un unico valore se l'intento della sequenza era che requestMediaKeySystemAccess() scegliesse un sottoinsieme supportato.

La voce Informazioni decodifica descrive la qualità (fluidità ed efficienza energetica) del supporto di una singola coppia di stream audio e video senza prendere una decisione per chi chiama. Gli utenti che effettuano chiamate devono comunque ordinare le configurazioni multimediali come fanno con requestMediaKeySystemAccess(). Solo che ora eseguono l'elenco autonomamente.

navigator.mediaCapabilities.decodingInfo() restituisce una promessa che si risolve in modo asincrono con un oggetto contenente tre booleani: supported, smooth e powerEfficient. Tuttavia, quando viene impostata una chiave keySystemConfiguration e supported è true, viene restituito anche un altro oggetto MediaKeySystemAccess denominato keySystemAccess. Può essere utilizzato per richiedere alcune chiavi multimediali e configurare la riproduzione di contenuti multimediali criptati. Ecco un esempio:

// 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.
}

Tieni presente che le informazioni di decodifica per i contenuti multimediali criptati richiedono HTTPS.

Inoltre, tieni presente che potrebbe attivare un messaggio per l'utente su Android e ChromeOS allo stesso modo di requestMediaKeySystemAccess(). Tuttavia, non mostrerà più prompt rispetto a requestMediaKeySystemAccess(), nonostante richieda più chiamate per configurare la riproduzione di contenuti multimediali criptati.

ALT_TEXT_HERE
Richiesta relativa ai contenuti protetti

Intent to Experiment | Chromestatus Tracker | Bug di Chromium

HTMLVideoElement.playsInline

Chrome ora supporta l'attributo booleano playsInline. Se presente, indica al browser che il video deve essere visualizzato "in linea" nel documento per impostazione predefinita, vincolato all'area di riproduzione dell'elemento.

Analogamente a Safari, dove gli elementi video su iPhone non attivano automaticamente la modalità a schermo intero all'inizio della riproduzione, questo suggerimento consente ad alcuni inserzionisti di avere un'esperienza di riproduzione video a schermo intero automatico. Gli sviluppatori web possono utilizzarlo per disattivare questa esperienza, se necessario.

<video playsinline></video>

Poiché Chrome su Android e computer non implementa il passaggio automatico in modalità a schermo intero, il suggerimento per l'attributo elemento video playsInline non viene utilizzato.

Intent to Ship | Chromestatus Tracker | Bug di Chromium