Armazenando vídeos do YouTube em cache em carregamentos

3

Existe uma maneira de forçar o navegador a armazenar vídeos YouTube carregados em carregamentos de páginas?

Em outras palavras, se você atualizar alguma página de vídeo em que o vídeo já começou a ser carregado (ou está totalmente carregado), o player / navegador começa a baixar novamente o vídeo, mesmo ao usar o mesmo resolução, em vez de usar a versão já em cache. Existe uma maneira de mudar esse comportamento?

Os itens acima são observados ao usar o Flash player e o player experimental HTML5 .

    
por Chris 06.10.2012 / 18:35

1 resposta

1

Editar : as coisas que escrevi abaixo contêm para a versão HTML5 (na qual o navegador controla tudo), na versão Flash, as configurações do Flash também podem ser importantes.

Infelizmente, em relação ao YouTube, o caso é muito complicado (talvez seja mais simples em outros sites de vídeo).

Primeiro, os arquivos de áudio / vídeo do cache do Firefox do Firefox, essa configuração about:config pode afetar as coisas:

browser.cache.disk.enable
browser.cache.memory.enable
browser.cache.disk.capacity
browser.cache.disk.max_entry_size
browser.cache.memory.max_entry_size

Você precisa ter pelo menos um dos dois tipos de caches ativados, e o tamanho apropriado do cache definido, além do alto max_entry_size . Inicialmente, max_entry_size não é muito alto, isso faz sentido, já que você não quer geralmente limpar metade do seu cache para armazenar um vídeo HD VEVO.

Ok, então o lado do navegador está bem. O próximo passo é as restrições de cache do lado do servidor. Eu abri um vídeo aleatório do YouTube (o usuário fez upload, não é protegido por direitos autorais, pode ser diferente, mas não foi verificado), e aqui estão os cabeçalhos de resposta do arquivo FLV (tirado com o Fiddler):

  • Cache-control:privatesignificaqueoarquivopodeserarmazenadoemcachenoseunavegador,masnãoporqualquercachêintermediário(porexemplo,cachedoISP)
  • SeExpiresemax-ageforemespecificados, max-age wins :

    14.9.3 Modificações do mecanismo básico de expiração

    If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, even if the Expires header is more restrictive

Até aqui tudo bem, max-age significa que podemos armazenar em cache localmente no navegador por ~ 6 horas.

Mas vamos atualizar a página ou carregá-la na nova guia e comparar a lista de solicitações HTTP:

http://o-o---preferred---sn-vg5obx-hgnl---v12---lscache5.c.youtube.com/videoplayback?upn=mY2b-T1WqcI&...
http://o-o---preferred---sn-vg5obx-hgnl---v12---lscache5.c.youtube.com/videoplayback?upn=U175csZ9oyw&...

Parece que o YouTube adiciona parâmetros para rastrear o número de reproduções, para combater o abuso (para ter URLs de vídeo não previsíveis) ou o que for.

Ao abrir em uma nova guia, às vezes eu vejo diferentes servidores segmentados (balanceador de carga no trabalho):

http://o-o---preferred---sn-vg5obx-hgnl---v12---lscache5.c.youtube.com/videoplayback?..
http://o-o---preferred---sn-25g7rn7s---v12---nonxt5.c.youtube.com/videoplayback?..

É o mesmo com a exibição de vídeos com base em Flash e HTML5.

Como os URLs são diferentes (mesmo que seja por um caractere), o navegador precisa baixar novamente o vídeo inteiro.

Por que URLs de vídeo diferentes estão sendo segmentados a cada vez? Isso ocorre porque os URLs dos quais os vídeos são solicitados, como esses:

http://www.youtube.com/watch?v=[[videoid]]
http://youtube.googleapis.com/v/[[videoid]]

tem um cabeçalho de resposta

Cache-Control: no-cache

o que significa que o navegador não tem permissão para armazenar em cache esta página, toda vez que houver uma solicitação ao servidor necessária, o servidor responderá com 200 novas respostas OK e parâmetros diferentes para serem usados para consultar o vídeo.

Outros sites de vídeo podem não ser tão restritivos e, portanto, você pode colocar o vídeo em cache entre as cargas.

-

Eu notei algo ainda mais interessante ao abrir um vídeo (era ~ 5 MB) no IE8. No Firefox, todo o vídeo é carregado como um fluxo único. No IE8, ele é enviado como três pedaços de 1,7 MB. Talvez alguma coisa interna do IE que não consegue lidar muito bem com arquivos grandes.

-

Como habilitar o cache?

Pode-se escrever um addon para o Firefox ou um script do Fiddler, que tira ou substitui os cabeçalhos apropriados relacionados ao cache das respostas HTTP do YouTube, para enganar o navegador sobre o que é permitido fazer. Em seguida, o navegador armazenará em cache de forma mais agressiva e manterá o vídeo entre as cargas, considerando que todos os outros requisitos estejam satisfeitos.

    
por 01.11.2012 / 15:28