Comment peut Hulu.com gardez une trace de votre position dans une émission de télévision?


Je regarde une émission de télévision sur Hulu.com (qui est btw, le meilleur site de streaming vidéo absolu autour) et si je ferme mon navigateur, déconnectez-vous d'Internet, et même si je redémarre mon ordinateur au milieu de regarder une émission, la prochaine fois que je vais sur leur site, je peux reprendre le téléviseur exactement à l'heure où je me suis arrêté dans l'émission.

Ma question est d'un point de vue détaillé de la programmation Web, comment peuvent-ils y parvenir? Je suppose que ce n'est pas en utilisant des sessions parce que je ne pense pas cela fonctionnerait si je redémarrais mon ordinateur. S'il utilise des cookies, comment peuvent-ils constamment mettre à jour le cookie avec votre position dans un spectacle?

Afin de recevoir la prime jointe, veuillez inclure des exemples de code en Java/JSP de préférence (PHP est ok aussi) sur la façon de créer le cookie et un extrait de code côté serveur qui permettrait la position de la visionneuse mise à jour.

Merci!

Author: Esteban Küber, 2009-03-26

4 answers

Un moyen simple est que le lecteur peut mettre à jour vos cookies via JavaScript, et que la fonction JavaScript peut être appelée toutes les n secondes par le lecteur Flash:

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

Dans Flash player, ActionScript peut invoquer fréquemment le JavaScript pour obtenir une mise à jour assez précise de l'endroit où se trouvait le lecteur la dernière fois que le cookie a été défini. Chaque fois qu'il est appelé, il écrase le cookie avec des données mises à jour:

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

Lorsque vous revisitez la page, la première chose que le serveur fait est vérifiez si vous avez un cookie appelé "hulu {ID of video}" et si oui, la valeur de ce cookie est la position définie la dernière fois que vous l'avez visionné.

Encore une fois (comme indiqué au début) c'est un moyen très simple d'accomplir ce que vous demandez. Je trouve que la meilleure façon d'apprendre est d'aller avec une implémentation simple, puis d'ajouter de la complexité une fois que le cas le plus simple est bien compris. Hulu fait probablement des mises à jour périodiques dans les coulisses en utilisant AJAX. (En fait, si vous regardez le trafic net pendant en regardant une vidéo en utilisant quelque chose comme Firebug , vous verrez des appels occasionnels à http://t2.hulu.com/v3/playback/position?...).

 4
Author: Rex M, 2009-03-29 16:07:14

Flash a son propre mécanisme de type cookie: Objet partagé local .

Il y a quelques exemples de code ici. J'imagine que Hulu crée simplement un LSO et le met à jour périodiquement avec la position dans le film. Lorsque le film est ensuite chargé, il peut obtenir le LSO et restaurer la position. Alternativement, ils pourraient stocker un ID unique et enregistrer les positions côté serveur.

 6
Author: Paul, 2009-03-29 16:14:39

Ils peuvent écrire un cookie avec un identifiant d'enregistrement, puis stocker où vous étiez lorsque votre session a disparu sur le serveur. Ils peuvent savoir où vous êtes en demandant au client de renvoyer un ack de temps en temps qui dit: "Oui, j'ai joué jusqu'au temps T."

Ensuite, lorsque vous revenez, ils utilisent l'id d'enregistrement dans le cookie pour rechercher dans leur base de données où vous étiez. Peu importe comment vous vous déconnectez, ils savent toujours que la connexion a disparu.

 3
Author: i_am_jorf, 2009-03-26 07:09:43

Je devine juste, mais ils stockent probablement la position à l'extrémité du serveur. Lorsque vous allez reprendre à regarder quelque chose, il envoie la dernière position enregistrée comme un CV - à partir de l'horodatage?

La page sur laquelle vous êtes envoie probablement occasionnellement des paquets d'état au serveur, lui indiquant votre horodatage actuel. Lorsque la connexion est coupée, la dernière valeur enregistrée est utilisée.

 0
Author: lc., 2009-03-26 07:09:48