所以这是我遇到的一个奇怪的问题。我仅在Mac上以及在这些浏览器之间测试过Chrome和Safari,问题仅在Chrome上显示。
我有一个非常基本的HTML5视频元素,该元素从服务器上加载视频,并且用户在屏幕上有几个按钮可以跳转到视频中的特定时间。
当视频文件被引用为直接链接时,例如:
<video id="thevideo" width="720" height="480">
<source type="video/webm" src="videos/vid102.webm" />
<source type="video/mp4" src="videos/vid102.mp4" />
<p>Your browser does not support this video.</p>
</video>
...效果很好。
但是,我已经对其进行了设置,以便可以通过PHP fpassthru加载视频,例如:
<video id="thevideo" width="720" height="480">
<source type="video/webm" src="getvideo.php?t=webm&v=166" />
<source type="video/mp4" src="getvideo.php?t=mp4&v=166" />
<p>Your browser does not support this video.</p>
</video>
这里getvideo.php
看起来是这样的:
<?php
$videoID = $_REQUEST["v"];
$videoType = $_REQUEST["t"];
$vidPath = "videos/video$vidFile.$videoType";
$fp = fopen($vidPath, 'rb');
header("Content-Type: video/$videoType");
header("Content-Length: " . filesize($vidPath));
fpassthru($fp);
?>
奇怪的行为是这样的:在两种浏览器上,视频都可以加载并正常播放。但是,在Chrome上,使用fpassthru PHP脚本的版本破坏了设置播放器的“ currentTime”属性的能力,从而跳至视频中的某个位置。如果我打电话给我document.getElementById('thevideo').currentTime = 50
,而不是跳到50秒大关,它只会停留在原处。
知道为什么会这样吗?
更新:我已经看到一些迹象表明,这与Chrome有关,特别是要求在响应中提供“ Accept-Ranges”标头。我在.php脚本的输出中添加了标头“ Accept-Ranges:bytes”,并确保Web服务器允许字节范围请求,但仍无法正常工作。
关于要求“接受范围”标头作为HTTP字节服务的一部分,您是正确的。我建议阅读这个答案以解决类似的问题:
添加响应标头是不够的。您还必须使用“ 206部分内容”状态代码进行响应,并仅返回请求的字节范围。听起来您仍在返回整个文件。fpassthru
将从头到尾读回文件,因此您似乎需要寻找另一种读取文件的方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句