我有一个php文件,我在那里下载各方的flv文件,如:
header('Accept-Ranges: bytes');
header('Content-Type: '.$mime_type);
header('Connection: keep-alive');
header ("Content-Length: " . $length);
header('Content-Transfer-Encoding: binary');
header ("Content-Disposition: attachment; filename=file.flv");
$fd = fopen($url, "r");
while(!feof($fd))
{
echo fread($fd, 4096);
ob_flush();
}
然后使用videoJS在我的网页上播放此视频:
<body>
<video id="video1" class="video-js vjs-default-skin" poster="http://video-js.zencoder.com/oceans-clip.png" width="640" height="480"
data-setup='{"loadingSpinner": false, "controls" : true, "autoplay" : true, "preload" : "auto"}'>
<source src="videos.php" type="video/x-flv">
</video>
</body>
但是当我滚动时间显示视频:1:12:14时,时间计数器停止,视频显示在00:03:14(但指针仍在1:12:14)。
我想修复此错误 - 如果文件未加载到1:12:14 - 播放器应阻止更改时间显示。
我怎么做?
答案 0 :(得分:1)
当您使用视频播放器快速点击时,浏览器将取消现有请求,并仅对部分 文件。 &#34;范围&#34;标头出现在这个新请求中。在这种情况下,服务器必须使用状态代码206进行响应 (部分内容)并包含&#34;内容范围&#34;报头中。
if (isset($_SERVER['HTTP_RANGE']))
{
// extract the range string
list ($units, $range) = explode ("=", $_SERVER['HTTP_RANGE']);
list ($firstByte, $lastByte) = explode ("-", $range);
$length = $lastByte - $firstByte + 1; // Calculate a new content length
// seek forward on the file
fseek ($fd, $firstByte);
// headers to return for partial content
header ("HTTP/1.1 206 Partial Content");
header ("Content-Range: bytes $firstByte-$lastByte/$size");
header ("Content-Length: $length");
}
参见&#34; 14.35范围&#34;在: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html