Aggiornamenti di contenuti multimediali in Chrome 62

Francesco Beaufort
François Beaufort

Licenze permanenti per Android

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

Finora, ChromeOS era l'unica piattaforma a supportare le licenze permanenti. Non è più vero. Ora è possibile riprodurre contenuti protetti tramite EME mentre il dispositivo è offline 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 autonomamente controllando la PWA Sample Media 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 di riproduzione e goditi il video!

Widevine L1 per Android

Come forse già saprai, tutti i dispositivi Android devono supportare il livello di sicurezza 3 (Widevine L3) di Widevine. Tuttavia, esistono molti dispositivi che supportano anche il livello di sicurezza più elevato: il livello di sicurezza Widevine 1, in cui tutte le operazioni di elaborazione, crittografia e controllo dei contenuti vengono eseguite 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 a https://shaka-player-demo.appspot.com/demo/ e fai clic su "Consenti" quando richiesto.
  2. Seleziona "Angel One (multicodec, multilingue, Widevine)".
  3. Inserisci HW_SECURE_ALL nel campo "Robustezza video" della sezione "Configurazione".
  4. Fai clic sul pulsante "Carica" e goditi il video!

Ottimizzazioni della traccia video in background (solo MSE)

Il team di Chrome è sempre alla ricerca di 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 esempio in una scheda non visibile) se il video utilizza Media Source Extensions (MSE). Consulta l'articolo precedente per saperne di più.

Personalizza l'intervallo ricercabile negli stream MSE dal vivo

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

La buona notizia è che ora puoi personalizzare in modo più efficace la logica dell'intervallo seekable con Media Source Extensions (MSE) fornendo o rimuovendo un singolo intervallo disponibile per la ricerca che è unito agli intervalli attuali nel buffer. Ne risulta un singolo intervallo cercabile che si adatta a entrambi, quando la durata dell'origine multimediale è +Infinity.

Nel codice seguente, l'origine multimediale è già stata associata a un elemento multimediale e contiene solo il relativo segmento init:

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

Ci sono molti casi che non ho trattato sopra, quindi ti suggerisco di provare a consultare l'esempio ufficiale per vedere come gli intervalli di tempo inclusi nel buffer e nella ricerca reagiscono a diversi eventi MSE.

Intenzione di spedizione | Tracker di Chromestatus | Bug di Chromium

FLAC in MP4 per MSE

Il formato di codifica audio senza perdita di dati FLAC è supportato per la normale riproduzione di contenuti multimediali a partire da Chrome 56. Poco dopo è stato aggiunto il supporto di FLAC nel formato ISO-BMFF (ovvero FLAC in MP4). Ora il formato FLAC in MP4 è disponibile in Chrome 62 per Media Source Extensions (MSE).

Per informazioni, gli utenti di Firefox sono quelli che hanno sviluppato e implementato il supporto per una specifica di incapsulamento FLAC in MP4, mentre la BBC sta sperimentando questa funzionalità con MSE. Per saperne di più, puoi leggere il post della BBC "Delivering Radio 3 Concert Sound".

Per rilevare se FLAC in MP4 è supportato per MSE, procedi nel seguente modo:

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

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

Intenzione di spedizione | Tracker di Chromestatus | Bug di Chromium

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

Se ruoti un dispositivo in orizzontale durante la riproduzione di un video nell'area visibile, la riproduzione passerà automaticamente alla modalità a schermo intero. Se ruoti il dispositivo in verticale, il video torna alla modalità a finestre. Consulta il nostro articolo precedente per ulteriori dettagli.