У меня есть 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 — проигрыватель должен заблокировать отображение времени изменения.
Как я могу это сделать?
Когда вы нажимаете кнопку ускоренной перемотки вперед с помощью видеопроигрывателя, браузер отменяет существующий запрос и создает новый запрос только для части
файл. Заголовок «Range» присутствует в этом новом запросе. В этом случае сервер должен ответить кодом состояния 206.
(Частичное содержимое) и включает заголовок «Content-Range».
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");
}
Смотрите «14,35 Range» в:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Других решений пока нет …