Atualizações de mídia no Chrome 62

François Beaufort
François Beaufort

Licenças persistentes para Android

Uma licença persistente em Extensões de mídia criptografada (EME) significa que a licença 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 para o servidor. É assim que a reprodução off-line tem suporte no EME.

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

Para testar as licenças persistentes, confira a PWA de mídia de exemplo e siga 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 de segurança 3 do Widevine (Widevine L3). No entanto, há muitos dispositivos que também oferecem suporte ao nível de segurança mais alto: nível 1 de segurança do Widevine, em que todo o processamento de conteúdo, criptografia e controle é realizado 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. 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. Escolha "Angel One (multicodec, multilingual, Widevine)".
  3. Insira HW_SECURE_ALL no campo "Resistência do vídeo" da seção "Configuração".
  4. Clique no botão "Carregar" e aproveite o vídeo.

Otimizações de faixas 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 é uma exceção.

O Chrome agora desativa as faixas de vídeo quando o conteúdo é reproduzido em segundo plano (por exemplo, em uma guia não visível) se o vídeo usa Extensões de origem de mídia (MSE). Confira nosso artigo anterior para saber mais.

Personalizar o intervalo de busca em transmissões MSE ao vivo

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. No entanto, se a duração não estiver disponível, como em uma transmissão ao vivo, o período poderá mudar continuamente.

A boa notícia é que agora você pode personalizar melhor a lógica de intervalo seekable com as Extensões de origem de mídia (MSEs, na sigla em inglês), fornecendo ou removendo um único intervalo pesquisável que é unido aos intervalos em buffer atuais. Isso resulta em um único intervalo de busca que se encaixa em ambos, quando a duração da fonte de mídia é +Infinity.

No código abaixo, a origem de mídia já foi anexada a um elemento de mídia e contém apenas o segmento de inicialização:

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 abordamos acima. Por isso, sugerimos que você teste o exemplo oficial para ver como os períodos de tempo com buffer e pesquisáveis reagem a diferentes eventos de MSE.

Intent to Ship | Rastreador do Chromestatus | Bug do Chromium

FLAC em MP4 para MSE

O formato de codificação de áudio sem perdas FLAC tem suporte para reprodução de mídia regular desde o Chrome 56. O suporte ao FLAC no ISO-BMFF (também conhecido como FLAC no MP4) foi adicionado logo depois. Agora o FLAC em MP4 está disponível no Chrome 62 para extensões de fonte de mídia (MSE).

Para informações, as pessoas do Firefox são as que desenvolveram e implementaram o suporte para uma especificação de encapsulamento de FLAC em MP4, e a BBC tem experimentado usar isso com MSE. Leia a postagem "Delivering Radio 3 Concert Sound" da BBC para saber mais.

Veja como detectar se o FLAC em MP4 tem suporte para MSE:

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

Para conferir um exemplo completo, consulte nosso exemplo oficial.

Intent to Ship | 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 está sendo reproduzido na janela de visualização, a reprodução vai mudar automaticamente para o modo de tela cheia. Girar o dispositivo para o modo retrato coloca o vídeo de volta no modo de janela. Confira nosso artigo anterior para mais detalhes.