Atualizações de mídia no Chrome 62

Francisco Beaufort
François Beaufort

Licenças persistentes para Android

Licença persistente em Encrypted Media Extensions (EME) significa que ela pode ser mantida no dispositivo para que os aplicativos possam carregar a licença na memória sem enviar outra solicitação de licença ao servidor. É assim que o EME oferece suporte à reprodução off-line.

Até agora, o ChromeOS era a única plataforma compatível com licenças permanentes. Isso não é mais verdade. A reprodução de conteúdo protegido pelo EME enquanto o dispositivo está off-line também é possível no 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.
});

Você pode testar licenças persistentes por conta própria verificando o Sample Media PWA e seguindo estas etapas:

  1. Acesse https://biograf-155113.appspot.com/ttt/episode-2/
  2. Clique em "Tornar disponível off-line" e aguarde o download do vídeo.
  3. Ative o modo avião.
  4. Clique no botão "Reproduzir" e aproveite o vídeo!

Widevine L1 para Android

Como você já deve saber, todos os dispositivos Android precisam oferecer suporte ao nível 3 de segurança Widevine (Widevine L3). No entanto, há muitos dispositivos que também oferecem suporte ao mais alto nível de segurança: o Wirevine Security Level 1, em que todo o processamento, criptografia e controle de conteúdo são realizados no Ambiente de execução confiável (TEE).

Boas notícias! O Widevine L1 agora tem suporte no Chrome para Android para que a mídia possa ser reproduzida da maneira mais segura. Observe que ele já era compatível com o 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.
});

O Shaka Player, a biblioteca JavaScript para formatos de mídia adaptáveis, como DASH e HLS, tem uma demonstração para você testar o Widevine L1:

  1. Acesse https://shaka-player-demo.appspot.com/demo/ e clique em "Permitir" quando solicitado.
  2. Selecione "Angel One (multicodec, multilíngue, Widevine)".
  3. Insira HW_SECURE_ALL no campo "Robustez de vídeo" da seção "Configuração".
  4. Clique no botão "Carregar" e aproveite o vídeo!

Otimizações de faixa de vídeo em segundo plano (somente MSE)

A equipe do Chrome está sempre tentando encontrar novas maneiras de melhorar a duração da bateria, e o Chrome 62 não é exceção.

O Chrome agora desativa faixas de vídeo quando o vídeo é reproduzido em segundo plano (por exemplo, em uma guia não visível) se o vídeo usa Media Source Extensions (MSE). Confira nosso artigo anterior para saber mais.

Personalizar o intervalo pesquisável em transmissões ao vivo do MSE

Como você já deve saber, o atributo seekable contém os intervalos do recurso de mídia que o navegador pode buscar. Normalmente, ele contém um único período que começa em 0 e termina na duração do recurso de mídia. Se a duração não estiver disponível, como uma transmissão ao vivo, o período poderá mudar continuamente.

A boa notícia é que agora é possível personalizar de forma mais eficaz a lógica de intervalo seekable com Media Source Extensions (MSE), fornecendo ou removendo um único intervalo pesquisável que é unido aos intervalos atuais em buffer. Isso resulta em um único intervalo pesquisável que se ajusta a ambos, quando a duração da fonte de mídia é +Infinity.

No código abaixo, a fonte de mídia já foi anexada a um elemento de mídia e contém apenas o 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) }

Há muitos casos que não foram abordados acima, então recomendo que você teste a amostra oficial para ver como os períodos em buffer e pesquisável reagem a diferentes eventos de MSE.

Intent de envio | Rastreador do Chromestatus | Bug do Chromium

FLAC em MP4 para MSE

O formato de codificação de áudio sem perda FLAC é compatível com a reprodução de mídia normal desde o Chrome 56. O FLAC no suporte a ISO-BMFF (também conhecido como FLAC em MP4) foi adicionado logo depois. Agora, o FLAC em MP4 está disponível no Chrome 62 para Media Source Extensions (MSE).

Para mais informações, o pessoal do Firefox é quem desenvolveu e implementou suporte para uma especificação de encapsulamento de MP4 (link em inglês), e a BBC está testando isso com o MSE. Para saber mais, leia a postagem "Delivering Radio 3 Concert Sound" da BBC.

Veja como detectar se o FLAC em MP4 é compatível com o MSE:

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

Se você quiser ver um exemplo completo, confira nossa amostra oficial (link em inglês).

Intent de envio | Rastreador do Chromestatus | Bug do Chromium

O vídeo automático vai para tela cheia quando o dispositivo é girado

Se você girar um dispositivo para o modo paisagem enquanto um vídeo estiver sendo reproduzido na janela de visualização, a reprodução vai mudar automaticamente para o modo de tela cheia. Girar o dispositivo para retrato coloca o vídeo de volta no modo de janela. Confira nosso artigo anterior para mais detalhes.