2

我正在 Hulu.com(顺便说一句,绝对最好的流媒体视频网站)上观看电视节目,以及是否关闭浏览器、断开互联网连接,甚至在观看过程中重新启动计算机节目,下次我去他们的网站时,我可以从节目中中断的时间恢复电视。

我的问题是从详细的 Web 编程角度来看,他们如何实现这一点?我认为它没有使用会话,因为如果我重新启动计算机,我认为这不会起作用。如果它使用 cookie,那么他们如何在节目中不断更新 cookie 与您的位置?

为了获得附加的赏金,请在最好的 Java/JSP(PHP 也可以)中包含代码示例,说明如何创建 cookie 和允许更新查看者位置的服务器端代码片段。

谢谢!

4

4 回答 4

6

Flash 有它自己的类似 cookie 的机制:本地共享对象

这里有一些代码示例。我想 Hulu 只是创建了一个 LSO 并定期用电影中的位置更新它。下次加载影片时,它可以获取 LSO 并恢复位置。或者,他们可以存储一个唯一的 ID 并在服务器端保存职位。

于 2009-03-29T16:14:39.657 回答
4

一种简单的方法是播放器可以通过 JavaScript 更新您的 cookie,并且Flash 播放器可以每n秒调用一次 JavaScript 函数:

<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

当您重新访问该页面时,服务器首先会检查您是否有一个名为“hulu{ID of video}”的 cookie,如果有,该 cookie 的值就是您上次查看时设置的位置。

再次(如开头所述)这是完成您所要求的非常简单的方法。我发现最好的学习方法是使用简单的实现,然后在更简单的情况被充分理解后增加复杂性。Hulu 可能会使用 AJAX 在幕后进行定期更新。(事实上​​,如果您在使用Firebug之类的工具观看视频的同时观看网络流量,您会偶尔看到对 的调用http://t2.hulu.com/v3/playback/position?...)。

于 2009-03-29T05:01:17.263 回答
3

他们可以编写一个带有一些记录 ID 的 cookie,然后在服务器上存储会话结束时您所在的位置。他们可以通过让客户每隔一段时间发回一个 ack 来知道你在哪里,上面写着“是的,我已经玩到 T 时间了”。

然后,当您回来时,他们使用 cookie 中的记录 ID 在他们的数据库中查找您所在的位置。无论您如何断开连接,他们仍然知道连接消失了。

于 2009-03-26T07:09:43.250 回答
0

我只是在猜测,但他们可能会将位置存储在服务器端。当您继续观看某些内容时,它会将最后记录的位置作为 resume-from 时间戳发送?

您所在的页面可能偶尔会将状态数据包发送回服务器,告诉它您当前的时间戳。当连接断开时,使用最后记录的值。

于 2009-03-26T07:09:48.320 回答