1 回答
TA贡献1865条经验 获得超7个赞
正如我猜测的,我缺少一个 php 标头。
需要添加以下标题:
header('Accept-Ranges: bytes');
添加Accept-Ranges
标头修复了 Chrome 的问题。但对于 safari,您需要检查HTTP_RANGE
并添加Content-Range
标头。
这是我的实现,它在所有主要浏览器中都能正常工作。
$content_length = strlen($media_total);
$total_bytes = $content_length;
$content_length_1 = $content_length - 1;
if (isset($_SERVER['HTTP_RANGE'])) {
$byte_range = explode('-',trim(str_ireplace('bytes=','',$_SERVER['HTTP_RANGE'])));
$byte_from = $byte_range[0];
$byte_to = intval($byte_range[1]);
$byte_to = $byte_to == 0 ? $content_length_1 : $byte_to;
$media_total = substr($media_total,$byte_from,$byte_to);
$content_length = strlen($media_total);
header('HTTP/1.1 206 Partial Content');
}
else {
$byte_from = 0;
$byte_to = $content_length_1;
}
$content_range = 'bytes '.$byte_from.'-' . $byte_to . '/' . $total_bytes;
header('Accept-Ranges: bytes');
header("Content-Range: ".$content_range);
header("Content-type: ".$type);
header("Content-length: ".$content_length);
header('Content-Transfer-Encoding: binary');
echo $media_total;
exit;
- 1 回答
- 0 关注
- 128 浏览
添加回答
举报