Aggiornamenti di contenuti multimediali in Chrome 63/64

François Beaufort
François Beaufort

Media Capabilities - API Decoding Info

Oggi gli sviluppatori web si affidano vagamente a isTypeSupported() o canPlayType() sapere se alcuni contenuti multimediali possono essere decodificati o meno. La vera domanda però dovrebbe essere: "che rendimento avrebbe su questo dispositivo?"

Questa è esattamente una delle cose che le Funzionalità multimediali proposte vogliono risolvere: un'API per interrogare il browser sulle capacità di decodifica del dispositivo in base a informazioni quali codec, profilo, risoluzione, velocità in bit ecc. potrebbero compromettere alcune informazioni, ad esempio se la riproduzione deve essere fluida il consumo energetico in base alle precedenti statistiche di riproduzione registrate dal browser.

In breve, ecco come funziona attualmente l'API Decoding Info. Consulta le campione ufficiale.

const mediaConfig = {
  type: 'media-source', // or 'file'
  audio: {
    contentType: 'audio/webm; codecs=opus',
    channels: '2', // audio channels used by the track
    bitrate: 132266, // number of bits used to encode a second of audio
    samplerate: 48000 // number of samples of audio carried per second
  },
  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
  }
};

navigator.mediaCapabilities.decodingInfo(mediaConfig).then(result => {
  console.log('This configuration is' +
      (result.supported ? '' : ' NOT') + ' supported,' +
      (result.smooth ? '' : ' NOT') + ' smooth and' +
      (result.powerEfficient ? '' : ' NOT') + ' power efficient.');
});

Puoi provare diverse configurazioni multimediali fino a trovare quella migliore (smooth e powerEfficient) e usalo per riprodurre i contenuti multimediali appropriati flusso di dati. A proposito, l'attuale implementazione di Chrome si basa sulla configurazione le informazioni di riproduzione registrate. Definisce smooth come true quando la percentuale di frame interrotti è inferiore al 10%, mentre powerEfficient è true quando più oltre il 50% dei frame viene decodificato dall'hardware. I fotogrammi piccoli sono sempre considerata efficiente dal punto di vista energetico.

Ti consiglio di utilizzare uno snippet simile a quello riportato di seguito per rilevare la disponibilità e fai riferimento alla tua attuale implementazione per i browser non supportano questa API.

function isMediaConfigSupported(mediaConfig) {

  const promise = new Promise((resolve, reject) => {
    if (!('mediaCapabilities' in navigator)) {
      return reject('MediaCapabilities API not available');
    }
    if (!('decodingInfo' in navigator.mediaCapabilities)) {
      return reject('Decoding Info not available');
    }
    return resolve(navigator.mediaCapabilities.decodingInfo(mediaConfig));
  });

  return promise.catch(_ => {
    let fallbackResult = {
      supported: false,
      smooth: false, // always false
      powerEfficient: false // always false
    };
    if ('video' in mediaConfig) {
      fallbackResult.supported = MediaSource.isTypeSupported(mediaConfig.video.contentType);
      if (!fallbackResult.supported) {
        return fallbackResult;
      }
    }
    if ('audio' in mediaConfig) {
      fallbackResult.supported = MediaSource.isTypeSupported(mediaConfig.audio.contentType);
    }
    return fallbackResult;
  });
}

Disponibile per le prove dell'origine

Per ottenere il maggior numero possibile di feedback dagli sviluppatori che utilizzano la funzionalità l'API Info (parte di Media Capabilities) nel campo, già presente in precedenza di Chrome 64 come prova dell'origine.

Il periodo di prova è terminato ad aprile 2018.

Intenzione di sperimentare | Intenzione di spedizione | Tracker dello stato di Chrome | Bug di Chromium

Riproduzione di video HDR su Windows 10

I video HDR (High Dynamic Range) hanno un contrasto più elevato, rivelando contenuti precisi, ombre dettagliate e alte luci straordinarie con una nitidezza mai vista prima. Inoltre il supporto di un'ampia gamma di colori rende i colori più vivaci.

Confronto tra SDR simulato e HDR (per vedere l'HDR reale è necessario un display HDR)
. Confronto tra SDR simulato e HDR (per vedere l'HDR reale è necessario un display HDR)

Come VP9 Profile 2, la riproduzione a 10 bit è ora supportata in Chrome per Windows 10 Fall Creator Update, Chrome supporta anche la riproduzione di video HDR quando Windows 10 sia in modalità HDR. Una nota tecnica, Chrome 64 ora supporta il colore scRGB. che a sua volta consente la riproduzione dei contenuti multimediali in HDR.

Puoi provare guardando Il mondo in HDR in 4K (ULTRA HD) su YouTube e controlla che riproduca l'HDR controllando l'impostazione della qualità del player di YouTube.

Impostazione della qualità del player di YouTube con HDR
. Impostazione della qualità del player di YouTube con HDR

Tutto ciò che ti serve per ora è Windows 10 Fall Creator Update, un programma compatibile con HDR scheda grafica e display (ad es. scheda NVIDIA serie 10, TV o monitor LG HDR), e attivare la modalità HDR nelle impostazioni di visualizzazione di Windows.

Gli sviluppatori web possono rilevare la gamma di colori approssimativa supportata dall'output. dispositivo con la recente query multimediale con gamma di colori e il numero di bit utilizzati per mostra un colore sullo schermo con screen.colorDepth. Ecco un modo di utilizzare quelli per rilevare se VP9 HDR è supportato, ad esempio:

// Detect if display is in HDR mode and if browser supports VP9 HDR.
function canPlayVp9Hdr() {

  // TODO: Adjust VP9 codec string based on your video encoding properties.
  return (window.matchMedia('(color-gamut: p3)').matches &&
      screen.colorDepth >= 48 &&
      MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.09.01"'))
}

La stringa del codec VP9 con Profilo 2 passata a isTypeSupported() nel campo esempio precedente deve essere aggiornato in base alle tue proprietà di codifica video.

Tieni presente che non è ancora possibile definire i colori HDR in CSS, canvas, immagini e contenuti protetti. Il team di Chrome ci sta lavorando. Continua a seguirci.

Licenze permanenti per Windows e Mac

Una licenza permanente in Encrypted Media Extensions (EME) indica che può permanente sul dispositivo in modo che le applicazioni possano caricare la licenza memoria senza inviare un'altra richiesta di licenza al server. Ecco come la riproduzione offline è supportata in EME.

Finora, ChromeOS e Android erano le uniche piattaforme a supportare licenze. Non è più vero. Riproduzione di contenuti protetti tramite EME durante il dispositivo è offline ora è possibile anche in Chrome 64 su Windows e Mac.

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

navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(access => {
  // User will be able to watch encrypted content while being offline when
  // license is stored locally on device and loaded later.
})
.catch(error => {
  // Persistent licenses are not supported on this platform yet.
});

Puoi provare personalmente le licenze permanenti consultando la PWA Sample Media seguendo questi passaggi:

  1. Vai a https://biograf-155113.appspot.com/ttt/episode-2/.
  2. Fai clic su "Rendi disponibile offline" e attendi che il video venga scaricato.
  3. Disattiva la connessione a internet.
  4. Fai clic sul pulsante "Riproduci" e goditi il video!

Il precaricamento dei contenuti multimediali viene impostato in modo predefinito su "metadata"

Altri browser corrispondenti implementazioni, Chrome Desktop ora imposta l'impostazione predefinita precarica il valore degli elementi <video> e <audio> in "metadata" al fine di e ridurre la larghezza di banda e l'utilizzo delle risorse. A partire da Chrome 64, questo nuovo comportamento viene applicato solo nei casi in cui non è impostato un valore di precaricamento. Tieni presente che l'attributo di precaricamento Il hint viene ignorato quando un MediaSource viene associato all'elemento multimediale come gestisce il proprio precaricamento.

In altre parole, il valore di precaricamento <video> ora è "metadata", mentre il valore di precaricamento <video preload="auto"> rimane "auto". Prova l'anteprima ufficiale.

Intenzione di spedizione | Tracker dello stato di Chrome | Bug di Chromium

La frequenza di riproduzione non supportata genera un'eccezione

A seguito di una modifica di specifica HTML, quando gli elementi multimediali playbackRate sia impostato su un valore non supportato da Chrome (ad es. un valore negativo), un "NotSupportedError" DOMException viene inserito in Chrome 63.

const audio = document.querySelector('audio');
try {
  audio.playbackRate = -1;
} catch(error) {
  console.log(error.message); // Failed to set the playbackRate property
}

A proposito, l'attuale implementazione di Chrome solleva questa eccezione quando playbackRate è negativo, è inferiore a 0, 0625 o maggiore di 16. Prova al campione ufficiale per vedere come funziona.

Intenzione di spedizione | Tracker dello stato di Chrome | Bug di Chromium

Ottimizzazioni delle tracce video in background

Il team di Chrome è sempre alla ricerca di nuovi modi per migliorare la durata della batteria e Chrome 63 non ha fatto eccezione.

Se il video non contiene tracce audio, viene automaticamente vengono messi in pausa durante la riproduzione in background (ad es. in una scheda non visibile) in Chrome computer desktop (Windows, Mac, Linux e ChromeOS). Questo è il follow-up di un una modifica simile applicabile solo ai video MSE in Chrome 62.

Bug di Chromium

Rimuovi la disattivazione dell'audio per frequenze di riproduzione estreme

Prima di Chrome 64, l'audio veniva disattivato quando il valore di playbackRate era inferiore a 0,5 o superiore a 4 perché la qualità peggiorava in modo significativo. Poiché Chrome è passato a l'approccio WSOLA (forma d'onda-simile-sovrapposizione-aggiunta) per deterioramento della qualità, audio non deve più essere disattivato. Significa che puoi riprodurre l'audio super lento e superveloce adesso.

Bug di Chromium