我正在看Hulu.com上的电视节目(这是btw,绝对最好的流媒体视频网站)以及我是否关闭浏览器,断开互联网连接,即使我在中间重新启动计算机观看节目,下次我去他们的网站时,我可以从我在节目中离开的时间恢复电视。
我的问题是从详细的网络编程角度来看,他们如何实现这一目标?我假设它不使用会话,因为如果我重新启动计算机,我认为这不会起作用。如果它正在使用cookie,那么他们如何在节目中不断更新您的位置?
为了获得附加的赏金,请在Java / JSP(PHP也可以)中包含代码示例,其中包括如何创建cookie以及允许更新的查看者位置的服务器端代码片段。 / p>
谢谢!
答案 0 :(得分:6)
Flash拥有类似Cookie的机制:Local Shared Object。
有一些code examples here。我想Hulu只是创建一个LSO并定期用电影中的位置更新它。下次加载电影时,它可以获得LSO并恢复位置。或者,他们可以存储唯一的ID并保存服务器端的位置。
答案 1 :(得分: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}”的cookie,如果是,则该cookie的值是您上次设置的位置查看它。
再次(如开头所述)这是一种非常简单的方法来完成你所要求的。我发现最好的学习方法是使用简单的实现,然后在简单易懂的情况下添加复杂性。 Hulu可能会使用AJAX在幕后定期更新。 (事实上,如果您在使用Firebug之类的内容观看视频时观看网络流量,您会偶尔看到http://t2.hulu.com/v3/playback/position?...
的来电。
答案 2 :(得分:3)
他们可以写一个带有一些记录ID的cookie,然后存储你的会话在服务器上消失时的位置。他们可以通过让客户经常发回一个可以知道“是的,我已经玩过时间T”来知道你在哪里。
然后当你回来时,他们使用cookie中的记录id在他们的数据库中查找你所在的位置。无论你如何断开连接,他们仍然知道连接已经消失。
答案 3 :(得分:0)
我只是猜测,但他们可能会在服务器端存储位置。当你继续观看某些内容时,它会将最后记录的位置作为简历发送 - 从时间戳开始?
您所在的页面可能偶尔会将状态数据包发送回服务器,告诉您当前的时间戳。切断连接后,将使用最后记录的值。