Como pode Hulu.com manter o controle de sua posição em um programa de TV?
-
22-08-2019 - |
Pergunta
Eu estou assistindo a um programa de TV no Hulu.com (que é btw, o best-streaming de vídeo site em torno absoluto) e se fechar o navegador, se desconectar da internet, e mesmo se eu reiniciar o meu computador no meio de assistir a um show, na próxima vez que eu vá para o seu site, eu posso retomar a tv a partir exatamente o tempo onde parei no show.
A minha pergunta é a partir de uma perspectiva detalhada de programação web, como eles podem conseguir isso? Presumo que não está usando sessões, porque eu não acho que isso iria funcionar se eu reiniciado o meu computador. Se ele está usando cookies, então como podem atualizar constantemente o cookie com a sua localização em um show?
Para receber a recompensa ligada, por favor inclua exemplos de código de preferência Java / JSP (PHP é ok também) de como criar o cookie e um trecho de código do lado do servidor que permitiria a posição do espectador atualizado.
Obrigado!
Solução
Uma maneira simples é que o jogador pode atualizar seu cookie (s) via JavaScript, e que a função JavaScript pode ser chamado a cada n segundos pelo jogador de inflamação:
<script type="text/javascript">
function UpdateViewData(videoId, time)
{
//for a video with id 12345, sets a cookie called:
//hulu12345 with a value of the position
var cookieData = 'hulu' + videoId + '=' + time + '; expires=' + getDate() + ';path=/';
document.cookie = cookieData;
}
</script>
No leitor de Flash, ActionScript pode chamar o JavaScript freqüência para obter uma atualização bastante precisa de onde o jogador foi a última vez que o cookie foi definido. Cada vez que ele é chamado, ele substitui o cookie com dados atualizados:
import flash.external.ExternalInterface;
//in flash video player code,
//have variables for video ID and current player position
//every 5 seconds, call:
ExternalInterface.call("UpdateViewData", videoId, currentPlayerPosition);
//this will invoke a JS function on the host page named "UpdateViewData"
//and pass in the provided arguments
Quando você revisitar a página, a primeira coisa que o servidor faz é verificar para ver se você tem um cookie chamado "Hulu {ID de vídeo}" e em caso afirmativo, o valor desse cookie é a posição definida última vez que esteve visualizá-lo.
Mais uma vez (como indicado no início) esta é uma maneira muito simples de realizar o que você está pedindo. Acho que a melhor maneira de aprender é ir com uma implementação simples e, em seguida, adicionar complexidade uma vez que o caso mais simples é bem compreendido. Hulu provável faz atualizações periódicas por trás das cenas usando AJAX. (Na verdade, se você prestar atenção ao tráfego net enquanto assiste a um vídeo usando algo como Firebug , você verá chamadas ocasionais para http://t2.hulu.com/v3/playback/position?...
).
Outras dicas
Flash tem o seu próprio bolinho-como mecanismo:. local Shared
Há alguns href="http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_16194" rel="noreferrer"> exemplos de código . Imagino Hulu apenas cria um LSO e atualiza periodicamente com a posição no filme. Quando o filme é próxima carregado, ele pode obter o LSO e restaurar a posição. Alternativamente, eles poderiam armazenar uma identificação única e salvar as posições do lado do servidor.
Eles podem escrever um cookie com algumas id registro, em seguida, armazenar onde você estava quando a sessão foi embora no servidor. Eles podem saber onde você está tendo a enviar cliente de volta um ACK a cada tantas vezes que diz: "sim, eu joguei até o tempo T".
Então, quando você voltar eles usam o ID de registro no cookie para pesquisa em seu banco de dados onde você estava. Não importa como você se desconectar, eles ainda sabem a conexão foi embora.
Eu estou apenas supondo, mas eles provavelmente armazenar a posição na extremidade do servidor. Quando você vai para retomar assistindo algo, ele envia a última posição gravada como um currículo-de timestamp?
A página que você está provavelmente ocasionalmente envia pacotes de status de volta para o servidor, dizendo que o seu timestamp atual. Quando a ligação é cortada, é usado o último valor gravado.