Aggiornamenti di contenuti multimediali in Chrome 62

François Beaufort
François Beaufort

Licenze permanenti per Android

La licenza persistente in Encrypted Media Extensions (EME) indica che la licenza può essere memorizzata sul dispositivo in modo che le applicazioni possano caricarla nella memoria senza inviare un'altra richiesta di licenza al server. In questo modo, la riproduzione offline è supportata in EME.

Fino a oggi, ChromeOS era l'unica piattaforma a supportare le licenze permanenti. Non è più vero. La riproduzione di contenuti protetti tramite EME quando il dispositivo è offline è ora possibile anche su Android.

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

// Chrome will prompt user if website is allowed to uniquely identify
// user's device to play protected content.
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 le licenze permanenti consultando la PWA Media di esempio e seguendo questi passaggi:

  1. Vai alla pagina https://biograf-155113.appspot.com/ttt/episode-2/
  2. Fai clic su "Rendi disponibile offline" e attendi che il video venga scaricato.
  3. Attiva la modalità aereo.
  4. Fai clic sul pulsante "Riproduci" e goditi il video.

Widevine L1 per Android

Come forse già saprai, tutti i dispositivi Android devono supportare il livello di sicurezza Widevine 3 (Widevine L3). Tuttavia, esistono molti dispositivi che supportano anche il massimo livello di sicurezza: Widevine Security Level 1, in cui l'elaborazione, la crittografia e il controllo dei contenuti vengono eseguiti all'interno del Trusted Execution Environment (TEE).

Buone notizie. Widevine L1 è ora supportato in Chrome per Android, in modo che i contenuti multimediali possano essere riprodotti nel modo più sicuro. Tieni presente che era già supportato su ChromeOS.

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

// Chrome will prompt user if website is allowed to uniquely identify
// user's device to play protected content.
navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(access => {
  // User will be able to watch encrypted content in the most secure way.
})
.catch(error => {
  // Widevine L1 is not supported on this platform yet.
});

Shaka Player, la libreria JavaScript per i formati multimediali adattivi (come DASH e HLS), offre una demo per provare Widevine L1:

  1. Vai alla pagina https://shaka-player-demo.appspot.com/demo/ e fai clic su "Consenti" quando richiesto.
  2. Scegli "Angel One (multicodec, multilingue, Widevine)".
  3. Inserisci HW_SECURE_ALL nel campo "Robustezza video" della sezione "Configurazione".
  4. Fai clic sul pulsante "Carica" e guarda il video.

Ottimizzazioni della traccia video in background (solo MSE)

Il team di Chrome cerca sempre di trovare nuovi modi per migliorare la durata della batteria e Chrome 62 non fa eccezione.

Ora Chrome disattiva le tracce video quando il video viene riprodotto in background (ad es. in una scheda non visibile) se il video utilizza le Estensioni Media Source (MSE). Per saperne di più, consulta il nostro articolo precedente.

Personalizzare l'intervallo di ricerca negli stream MSE in diretta

Come forse già saprai, l'attributo seekable contiene gli intervalli della risorsa multimediale che il browser può cercare. In genere, contiene un singolo intervallo di tempo che inizia da 0 e termina con la durata della risorsa multimediale. Tuttavia, se la durata non è disponibile, ad esempio in caso di live streaming, l'intervallo di tempo potrebbe cambiare continuamente.

La buona notizia è che ora puoi personalizzare in modo più efficace la logica di intervallo seekable con le Estensioni di origine media (MSE) fornendo o rimuovendo un singolo intervallo di ricerca unito agli intervalli attuali memorizzati nella cache. Il risultato è un singolo intervallo di ricerca che si adatta a entrambi, quando la durata dell'origine multimediale è +Infinity.

Nel codice seguente, l'origine media è già stata collegata a un elemento media e contiene solo il relativo segmento di inizializzazione:

const mediaSource = new MediaSource();
...

mediaSource.duration = +Infinity;
// Seekable time ranges: { }
// Buffered time ranges: { }

mediaSource.setLiveSeekableRange(1 /* start */, 4 /* end */);
// Seekable time ranges: { [1.000, 4.000) }
// Buffered time ranges: { }

// Let's append a media segment that starts at 3 seconds and ends at 6.
mediaSource.sourceBuffers[0].appendBuffer(someData);
// Seekable time ranges: { [1.000, 6.000) }
// Buffered time ranges: { [3.000, 6.000) }

mediaSource.clearLiveSeekableRange();
// Seekable time ranges: { [0.000, 6.000) }
// Buffered time ranges: { [3.000, 6.000) }

Esistono molti casi che non ho trattato sopra, quindi ti consiglio di provare il Sample ufficiale per vedere come gli intervalli di tempo con buffering e con possibilità di ricerca reagiscono a diversi eventi MSE.

Intent to Ship | Chromestatus Tracker | Bug di Chromium

FLAC in MP4 per MSE

Il formato di codifica audio senza perdita di dati FLAC è supportato nella riproduzione media normale da Chrome 56. Poco dopo è stato aggiunto il supporto di FLAC in ISO-BMFF (noto anche come FLAC in MP4). Ora FLAC in MP4 è disponibile in Chrome 62 per le Estensioni Media Source (MSE).

A titolo informativo, il team di Firefox ha sviluppato e implementato il supporto per una specifica di incapsulamento FLAC in MP4 e la BBC sta sperimentando il suo utilizzo con MSE. Per saperne di più, puoi leggere il post della BBC "Delivering Radio 3 Concert Sound".

Ecco come puoi rilevare se FLAC in MP4 è supportato per MSE:

if (MediaSource.isTypeSupported('audio/mp4; codecs="flac"')) {
  // TODO: Fetch data and feed it to a media source.
}

Per un esempio completo, dai un'occhiata al nostro sample ufficiale.

Intent to Ship | Chromestatus Tracker | Bug di Chromium

Il video automatico passa a schermo intero quando il dispositivo viene ruotato

Se ruoti un dispositivo in modalità Orizzontale mentre un video è in riproduzione nell'area visibile, la riproduzione passerà automaticamente alla modalità a schermo intero. Se ruoti il dispositivo in verticale, il video torna alla modalità finestra. Per ulteriori dettagli, consulta il nostro articolo precedente.