Desenvolvimento

27 dez, 2013

Pré-carregamento de vídeo em HTML5 – #Melhores2013

Publicidade

Na Conferência de Desenvolvedores de HTML5, que aconteceu em abril deste ano, eu assisti à sessão de Philippe Le Hegaret em “Vídeo na Plataforma Web Aberta”. Como a quantidade de vídeo na Web está crescendo, eu sempre quis saber se o comportamento de pré-carregamento da tag VIDEO poderia ser responsável por isso. Talvez o seu comportamento padrão seja pré-carregar agressivamente.

O atributo VIDEO PRELOAD tem os seguintes estados possíveis:

nenhum atributo preload
Preload não é especificado.

preload=’none’

A partir do spec, “Dicas para o navegador que o usuário não devera precisar do vídeo, ou que minimiza o trafego desnecessário é desejável”.

preload=’metadata’

“Dicas para o navegador que não é esperado que o usuário precise do vídeo, mas que busque seus metadados (dimensões, primeiro quadro, lista de faixas, duração e assim por diante) é desejável”.

preload=’auto’

“Dicas para o navegador que otimiza o download do vídeo inteiro é considerado desejável”.

preload or preload=”

” O atributo preload é especificado, mas nenhum valor é dado. Especificar a string vazia é o mesmo que especificar “auto”.

Eu criei uma página de teste de vídeo em HTML5 baseada na página de teste de Philippe. A página de teste inclui uma tag VIDEO. Clicar sobre os vários links de teste altera o estado do atributo PRELOAD. O JavaScript mede quanto do vídeo é bufferizado. O vídeo inteiro tem 52,2 segundos. O resultado final é o número de segundos bufferizados (pré-carregados).

A fim de reunir os resultados em vários navegadores, conectei a página de teste para um teste de usuário Browserscope e tuitei pedindo as pessoas para executarem a página de teste. (Havia algumas falhas na página de teste que resolvi depois de um tempo real incrível, sessão de anti-bug levado pelo twitter com testadores voluntários. Foi muito legal.) Um subconjunto dos principais navegadores é mostrado na Tabela 1. Você pode ver os resultados completos em Browserscope.

Table 1. Seconds of Video Preloaded
browser no preload attr preload ='none' preload= 'metadata' preload ='auto' preload ='' autoplay
Android 4 0 s 0 s 0 s 0 s 0 s 0 s
Chrome 26 25 s 0 s 25 s 25 s 25 s 52 s
Firefox 19 0 s 0 s 0 s 53 s 53 s 53 s
IE 9 2 s 0 s 2 s 52 s 52 s 52 s
IE 10 0 s 0 s 0 s 52 s 52 s 52 s
iPhone iOS6 0 s 0 s 0 s 0 s 0 s 0 s
Opera 12 10 s 0 s 10 s 53 s 53 s 53 s
Safari 6 52 s 0 s 0 s 52 s 52 s 52 s

Observação 1: Os dispositivos moveis não fazem pré-carregamento de nada. As especificações da tag VIDEO chamam os valores pré-carregados de “dicas”, por isso faz sentido que os navegadores móveis escolham não preload qualquer coisa, a fim de economizar custos de dados. Em vez disso, o vídeo não começa a baixar até que o usuário inicie a reprodução. Quando eu vi isso, decidi adicionar um teste para o atributo AUTOPLAY. Como mostrado, isso também não gera qualquer download de vídeo em dispositivo móveis.

Observação 2: A quantidade de vídeo pré-carregado varia entre os principais navegadores desktop. Felizmente, preload=’none’ tem um comportamento consistente em todos os navegadores: não é feito buffer. Mas todos os outros valores de PRELOAD variam na quantidade de dados de vídeo que é baixada. O Chrome é agressivo em relação a pré-carregamento, indo tão longe como buffer 25 segundos de vídeo no preload=’metadata’. No entanto, ele é menos agressivo para preload = ‘auto’, parando em 25 segundos, enquanto os outros browsers baixam todos os 52 segundos. O Firefox 19 e o IE 10 geralmente são menos agressivos, fazendo buffer zero segundos para três dos cinco estados preload.

Observação 3: Browsers pré-carregam demais por padrão. Os desenvolvedores provavelmente não vão especificar qualquer valor para PRELOAD. Conforme demonstrado na Tabela 1, essa situação resulta no IE fazendo buffer em 2 segundos de vídeo, Opera 12 em 10 segundos, Chrome 26 em 25 segundos, e Safari 6 buffers durante todo o tempo (52 segundos). O vídeo inteiro tem 4.2MB, então a quantidade de dados transferida é de 0.2MB para IE9, 0.8 para Opera 12, 2.0MB para Chrome 26, e todos os 4.2MB para Safari 6.

Olhando para as top 1000 URLs em todo o mundo, apenas um punhado usa a tag VIDEO. A maioria dos sites ainda está usando Flash Player, que tem o seu próprio comportamento de pré-carregamento. Mas conforme o uso da tag VIDEO aumenta, seria bom determinar quanto de vídeo deve ser bufferizado para vários valores de pré-carregamento, especialmente para o caso padrão de nenhum atributo PRELOAD. Sugiro ser dada uma orientação para conduzir a um número menor, possivelmente de 5 a 10 segundos. Se um desenvolvedor quer ter o pré-carregamento de um vídeo, especificar PRELOAD está apenas a um atributo de distância.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em  http://www.stevesouders.com/blog/2013/04/12/html5-video-preload/