- Agora os desenvolvedores da Web podem prever se a reprodução será fluida e eficiente em termos de energia.
- Agora o Chrome é compatível com a reprodução de vídeo HDR no Windows 10.
- A reprodução off-line com licenças persistentes agora é compatível com Windows e Mac.
- O valor de pré-carregamento padrão para elementos
<video>e<audio>agora é"metadata". - Um erro agora é gerado quando a taxa de reprodução de mídia não é compatível.
- Agora o Chrome pausa toda a mídia em segundo plano que é apenas de vídeo.
- O áudio não é mais silenciado para playbackRate extremo.
API Media Capabilities - Decoding Info
Hoje, os desenvolvedores da Web usam isTypeSupported() ou canPlayType() para saber vagamente se alguma mídia pode ser decodificada ou não. A pergunta real, no entanto, deve ser:
"Qual seria o desempenho dele neste dispositivo?"
Esse é exatamente um dos problemas que a Media Capabilities proposta quer resolver: uma API para consultar o navegador sobre as capacidades de decodificação do dispositivo com base em informações como codecs, perfil, resolução, taxas de bits etc. Ela exporia informações como se a reprodução seria suave e eficiente em termos de energia com base em estatísticas de reprodução anteriores registradas pelo navegador.
Em resumo, veja como a API Decoding Info funciona por enquanto. Confira a amostra oficial.
const mediaConfig = {
type: 'media-source', // or 'file'
audio: {
contentType: 'audio/webm; codecs=opus',
channels: '2', // audio channels used by the track
bitrate: 132266, // number of bits used to encode a second of audio
samplerate: 48000 // number of samples of audio carried per second
},
video: {
contentType: 'video/webm; codecs="vp09.00.10.08"',
width: 1920,
height: 1080,
bitrate: 2646242, // number of bits used to encode a second of video
framerate: '25' // number of frames used in one second
}
};
navigator.mediaCapabilities.decodingInfo(mediaConfig).then(result => {
console.log('This configuration is' +
(result.supported ? '' : ' NOT') + ' supported,' +
(result.smooth ? '' : ' NOT') + ' smooth and' +
(result.powerEfficient ? '' : ' NOT') + ' power efficient.');
});
Você pode testar diferentes configurações de mídia até encontrar a melhor (smooth e powerEfficient) e usá-la para reproduzir o stream de mídia adequado. A propósito, a implementação atual do Chrome é baseada em informações de reprodução gravadas anteriormente. Ele define smooth como verdadeiro quando a porcentagem de frames descartados é inferior a 10%, enquanto powerEfficient é verdadeiro quando mais de 50% dos frames são decodificados pelo hardware. Frames pequenos são sempre considerados eficientes em termos de energia.
Recomendo usar um snippet semelhante ao abaixo para detectar a disponibilidade e voltar à sua implementação atual para navegadores que não oferecem suporte a essa API.
function isMediaConfigSupported(mediaConfig) {
const promise = new Promise((resolve, reject) => {
if (!('mediaCapabilities' in navigator)) {
return reject('MediaCapabilities API not available');
}
if (!('decodingInfo' in navigator.mediaCapabilities)) {
return reject('Decoding Info not available');
}
return resolve(navigator.mediaCapabilities.decodingInfo(mediaConfig));
});
return promise.catch(_ => {
let fallbackResult = {
supported: false,
smooth: false, // always false
powerEfficient: false // always false
};
if ('video' in mediaConfig) {
fallbackResult.supported = MediaSource.isTypeSupported(mediaConfig.video.contentType);
if (!fallbackResult.supported) {
return fallbackResult;
}
}
if ('audio' in mediaConfig) {
fallbackResult.supported = MediaSource.isTypeSupported(mediaConfig.audio.contentType);
}
return fallbackResult;
});
}
Disponível para testes de origem
Para receber o máximo de feedback possível dos desenvolvedores que usam a API Decoding Info (parte das Capacidades de mídia) no campo, adicionamos esse recurso no Chrome 64 como um teste de origem.
O teste foi concluído em abril de 2018.
Intenção de testar | Intenção de lançar | Rastreador do Chromestatus | Bug do Chromium
Reprodução de vídeo HDR no Windows 10
Os vídeos em alto alcance dinâmico (HDR) têm maior contraste, revelando sombras precisas e detalhadas e destaques impressionantes com mais clareza do que nunca. Além disso, o suporte à ampla gama de cores significa que as cores são mais vibrantes.
Como a reprodução de 10 bits do VP9 Profile 2 agora é compatível com o Chrome para a atualização do Windows 10 Fall Creator, o Chrome também oferece suporte à reprodução de vídeo HDR quando o Windows 10 está no modo HDR. Em uma observação técnica, o Chrome 64 agora oferece suporte ao perfil de cor scRGB, que permite a reprodução de mídia em HDR.
Para testar, assista The World in HDR in 4K (ULTRA HD) no YouTube e verifique se o vídeo está sendo reproduzido em HDR na configuração de qualidade do player do YouTube.
Por enquanto, você só precisa do Windows 10 Fall Creator Update, uma placa de vídeo e uma tela compatíveis com HDR (por exemplo, placa NVIDIA série 10, TV ou monitor HDR LG) e ativar o modo HDR nas configurações de exibição do Windows.
Os desenvolvedores da Web podem detectar a gama de cores aproximada compatível com o dispositivo de saída usando a consulta de mídia color-gamut e o número de bits usados para mostrar uma cor na tela com screen.colorDepth. Veja uma maneira de usar esses recursos para detectar se o VP9 HDR é compatível, por exemplo:
// Detect if display is in HDR mode and if browser supports VP9 HDR.
function canPlayVp9Hdr() {
// TODO: Adjust VP9 codec string based on your video encoding properties.
return (window.matchMedia('(color-gamut: p3)').matches &&
screen.colorDepth >= 48 &&
MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.09.01"'))
}
A string de codec VP9 com perfil 2 transmitida para isTypeSupported() no exemplo acima precisa ser atualizada com base nas propriedades de codificação de vídeo.
Ainda não é possível definir cores HDR em CSS, canvas, imagens e conteúdo protegido. A equipe do Chrome está trabalhando nisso. Não perca!
Licenças permanentes para Windows e Mac
A 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 a reprodução off-line é compatível com EME.
Até agora, o ChromeOS e o Android eram as únicas plataformas compatíveis com licenças permanentes. Isso não é mais verdade. Agora também é possível reproduzir conteúdo protegido usando EME enquanto o dispositivo está off-line no Chrome 64 para Windows e Mac.
const config = [{
sessionTypes: ['persistent-license'],
videoCapabilities: [{
contentType: 'video/webm; codecs="vp09.00.10.08"',
robustness: 'SW_SECURE_DECODE' // Widevine L3
}]
}];
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 as licenças persistentes conferindo o PWA de mídia de amostra e seguindo estas etapas:
- Acesse https://biograf-155113.appspot.com/ttt/episode-2/
- Clique em "Disponibilizar off-line" e aguarde o download do vídeo.
- Desative sua conexão de Internet.
- Clique no botão "Reproduzir" e aproveite o vídeo!
O pré-carregamento de mídia usa "metadata" como padrão
Assim como outros navegadores, o Chrome para computador agora define o valor de pré-carregamento padrão para elementos <video> e <audio> como "metadata" para reduzir o uso de largura de banda e recursos. A partir do Chrome 64, esse novo comportamento só se aplica a casos em que nenhum valor de pré-carregamento está definido. A dica do atributo de pré-carregamento é descartada quando um MediaSource é anexado ao elemento de mídia, já que o site processa o próprio pré-carregamento.
Em outras palavras, o valor de pré-carga <video> agora é "metadata", enquanto o valor de pré-carga <video
preload="auto"> permanece "auto". Teste a amostra oficial.
Intenção de envio | Rastreador do Chromestatus | Bug do Chromium
Unsupported playbackRate raises an exception
Após uma mudança na especificação HTML, quando o playbackRate
dos elementos de mídia é definido como um valor não compatível com o Chrome (por exemplo, um valor negativo), um
"NotSupportedError" DOMException é gerado no Chrome 63.
const audio = document.querySelector('audio');
try {
audio.playbackRate = -1;
} catch(error) {
console.log(error.message); // Failed to set the playbackRate property
}
A propósito, a implementação atual do Chrome gera essa exceção quando playbackRate é negativo, menor que 0, 0625 ou maior que 16. Confira a amostra oficial para ver isso em ação.
Intenção de envio | Rastreador do Chromestatus | Bug do Chromium
Otimizações de faixas de vídeo em segundo plano
A equipe do Chrome sempre tenta encontrar novas maneiras de melhorar a duração da bateria, e o Chrome 63 não foi uma exceção.
Se o vídeo não tiver faixas de áudio, ele será pausado automaticamente quando for reproduzido em segundo plano (por exemplo, em uma guia não visível) no Chrome para computador (Windows, Mac, Linux e ChromeOS). Essa é uma continuação de uma mudança semelhante que era aplicada apenas a vídeos MSE no Chrome 62.
Remover o silenciamento para playbackRates extremos
Antes do Chrome 64, o som era silenciado quando playbackRate ficava abaixo de 0,5 ou acima de 4, já que a qualidade diminuía significativamente. Como o Chrome mudou para uma abordagem de Waveform-Similarity-Overlap-Add (WSOLA) para degradação da qualidade, não é mais necessário silenciar o som. Isso significa que agora você pode tocar o som super lento e
super rápido.