Media-updates in Chrome 62

François Beaufort
François Beaufort

Permanente licenties voor Android

Permanente licentie in Encrypted Media Extensions (EME) betekent dat de licentie op het apparaat kan worden gehandhaafd, zodat toepassingen de licentie in het geheugen kunnen laden zonder nog een licentieaanvraag naar de server te sturen. Dit is hoe offline afspelen wordt ondersteund in EME.

Tot nu toe was ChromeOS het enige platform dat permanente licenties ondersteunde. Het is niet meer waar. Het afspelen van beveiligde inhoud via EME terwijl het apparaat offline is, is nu ook mogelijk op 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.
});

U kunt zelf permanente licenties proberen door de Sample Media PWA te bekijken en deze stappen te volgen:

  1. Ga naar https://biograf-155113.appspot.com/ttt/episode-2/
  2. Klik op 'Offline beschikbaar maken' en wacht tot de video is gedownload.
  3. Schakel de vliegtuigmodus in.
  4. Klik op de knop "Afspelen" en geniet van de video!

Widevine L1 voor Android

Zoals u wellicht al weet, moeten alle Android-apparaten Widevine Security Level 3 (Widevine L3) ondersteunen. Er zijn echter veel apparaten die ook het hoogste beveiligingsniveau ondersteunen: Widevine Security Level 1 , waarbij alle inhoudsverwerking, cryptografie en controle wordt uitgevoerd binnen de Trusted Execution Environment (TEE).

Goed nieuws! Widevine L1 wordt nu ondersteund in Chrome voor Android zodat media op de meest veilige manier kunnen worden afgespeeld. Houd er rekening mee dat het al werd ondersteund in Chrome OS.

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 , de JavaScript-bibliotheek voor adaptieve mediaformaten (zoals DASH en HLS) heeft een demo waarmee u Widevine L1 kunt uitproberen:

  1. Ga naar https://shaka-player-demo.appspot.com/demo/ en klik op "Toestaan" wanneer daarom wordt gevraagd.
  2. Kies "Angel One (multicodec, meertalig, Widevine)".
  3. Voer HW_SECURE_ALL in het veld "Videorobuustheid" van de sectie "Configuratie" in.
  4. Klik op de knop "Laden" en geniet van de video!

Optimalisaties van achtergrondvideotracks (alleen MSE)

Het Chrome-team probeert altijd nieuwe manieren te vinden om de levensduur van de batterij te verbeteren en Chrome 62 is daarop geen uitzondering.

Chrome schakelt nu videotracks uit wanneer de video op de achtergrond wordt afgespeeld (bijvoorbeeld op een niet-zichtbaar tabblad) als de video Media Source Extensions (MSE) gebruikt. Bekijk ons ​​vorige artikel voor meer informatie.

Pas het zoekbare bereik aan op live MSE-streams

Zoals u wellicht al weet, bevat het seekable attribuut het bereik van de mediabron waarnaar de browser kan zoeken. Normaal gesproken bevat het een enkel tijdsbereik dat begint bij 0 en eindigt bij de duur van de mediabron. Als de duur echter niet beschikbaar is, zoals bij een livestream, kan het tijdsbereik voortdurend veranderen.

Het goede nieuws is dat u de seekable bereiklogica nu effectiever kunt aanpassen met Media Source Extensions (MSE) door een enkel zoekbaar bereik aan te bieden of te verwijderen dat is samengevoegd met de huidige gebufferde bereiken. Het resulteert in één zoekbaar bereik dat bij beide past, wanneer de duur van de mediabron +Infinity is.

In de onderstaande code is de mediabron al aan een media-element gekoppeld en bevat deze alleen het init-segment:

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

Er zijn veel gevallen die ik hierboven niet heb behandeld, dus ik raad u aan het officiële voorbeeld te proberen om te zien hoe gebufferde en doorzoekbare tijdsbereiken reageren op verschillende MSE-gebeurtenissen.

Intentie om te verzenden | Chromestatustracker | Chroombug

FLAC in MP4 voor MSE

Het verliesvrije audiocoderingsformaat FLAC wordt sinds Chrome 56 ondersteund bij het normaal afspelen van media. Kort daarna werd FLAC in ISO-BMFF-ondersteuning (ook bekend als FLAC in MP4) toegevoegd. En nu is FLAC in MP4 beschikbaar in Chrome 62 voor Media Source Extensions (MSE) .

Ter informatie: Firefox-mensen zijn degenen die ondersteuning voor een FLAC in MP4-inkapselingsspecificatie hebben ontwikkeld en geïmplementeerd, en de BBC heeft geëxperimenteerd met het gebruik daarvan met MSE. Je kunt het BBC-bericht 'Delivering Radio 3 Concert Sound' lezen voor meer informatie.

Zo kunt u detecteren of FLAC in MP4 wordt ondersteund voor MSE:

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

Als je een volledig voorbeeld wilt zien, bekijk dan ons officiële voorbeeld .

Intentie om te verzenden | Chromestatustracker | Chroombug

Automatische video gaat naar volledig scherm wanneer het apparaat wordt gedraaid

Als u een apparaat naar liggend draait terwijl een video in de viewport wordt afgespeeld, wordt het afspelen automatisch overgeschakeld naar de modus Volledig scherm. Als u het apparaat naar portret draait, wordt de video teruggezet naar de venstermodus. Bekijk ons ​​vorige artikel voor meer details.