Как Hulu.com может отслеживать вашу позицию в телешоу? - PullRequest
2 голосов
/ 26 марта 2009

Я смотрю телешоу на Hulu.com (кстати, самый лучший сайт с потоковым видео), и закрываю ли я свой браузер, отключаюсь от интернета и даже если я перезагружаю компьютер в середине просмотра шоу, в следующий раз, когда я пойду на их сайт, я смогу возобновить просмотр телевизора с того времени, когда я остановился на шоу.

Мой вопрос с детальной точки зрения веб-программирования, как они могут этого достичь? Я предполагаю, что это не использует сессии, потому что я не думаю, что это будет работать, если я перезагрузил свой компьютер. Если он использует куки, то как они могут постоянно обновлять куки с вашим местоположением в шоу?

Чтобы получить прикрепленную награду, пожалуйста, включите примеры кода предпочтительно в Java / JSP (с PHP тоже хорошо) о том, как создать cookie, и фрагмент кода на стороне сервера, который учитывает обновленную позицию зрителя.

спасибо!

Ответы [ 4 ]

6 голосов
/ 29 марта 2009

Flash имеет собственный механизм, похожий на cookie: Локальный общий объект .

Здесь приведено несколько примеров кода . Я предполагаю, что Хулу просто создает LSO и периодически обновляет его в соответствии с позицией в фильме. Когда фильм загружается в следующий раз, он может получить LSO и восстановить позицию. Кроме того, они могут хранить уникальный идентификатор и сохранять позиции на стороне сервера.

4 голосов
/ 29 марта 2009

Одним простым способом является то, что игрок может обновлять ваши куки-файлы с помощью JavaScript, и эта функция JavaScript может вызываться каждые n секунд с помощью проигрывателя Flash Player:

<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>

В проигрывателе Flash ActionScript может часто вызывать JavaScript, чтобы получить достаточно точное обновление о том, где проигрыватель последний раз устанавливал cookie. Каждый раз, когда он вызывается, он переписывает cookie с обновленными данными:

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

Когда вы снова заходите на страницу, первое, что делает сервер, проверяет, есть ли у вас cookie с именем «hulu {ID of video}», и если да, то значение этого куки - это позиция, установленная в прошлый раз, когда вы были просмотр.

Опять же (как указано в начале) это очень простой способ выполнить то, что вы просите. Я считаю, что лучший способ научиться - это пойти с простой реализацией, а затем добавить сложность, когда простой случай будет хорошо понят. Hulu, вероятно, периодически делает негласные обновления, используя AJAX. (На самом деле, если вы смотрите сетевой трафик во время просмотра видео, используя что-то вроде Firebug , вы увидите случайные звонки на http://t2.hulu.com/v3/playback/position?...).

3 голосов
/ 26 марта 2009

Они могут написать cookie с некоторым идентификатором записи, а затем сохранить, где вы были, когда ваш сеанс ушел на сервер. Они могут знать, где вы находитесь, так как клиент время от времени посылает обратно подтверждение, которое говорит: «Да, я играл до времени Т».

Затем, когда вы вернетесь, они используют идентификатор записи в файле cookie для поиска в своей базе данных, где вы были. Неважно, как вы отключаетесь, они все равно знают, что соединение прервано.

0 голосов
/ 26 марта 2009

Я просто догадываюсь, но они, вероятно, хранят позицию на стороне сервера. Когда вы переходите к просмотру чего-либо, он отправляет последнюю записанную позицию как метку времени возобновления?

Возможно, страница, на которой вы находитесь, иногда отправляет пакеты состояния обратно на сервер, сообщая вам текущую временную метку. Когда соединение разорвано, используется последнее записанное значение.

...