我正在尝试嵌入一个指向MP3或OGG数据的HTML5音频元素。当我在Safari中查看页面时,控件会出现,但UI显示"Live Broadcast“。当我单击播放时,音频按预期开始播放。但是,一旦结束,我就不能通过单击播放来重新开始播放。即使在音频元素上使用JS并将currentTime设置为0也会失败,并出现索引错误异常。
我怀疑PHP脚本中的头文件才是问题所在,特别是缺少内容长度。但事实并非如此。响应报头包括适当的Content- Length,以指示音频的大小有限。此外,在火狐3.5+中,一切都按预期运行。我可以多次单击audio元素上的play来收听声音回放。
如果我从等式中删除PHP脚本,并提供MP3文件的静态副本,那么在Safari中一切都可以正常工作。
这是否意味着Safari对待带有查询参数的音频src URL的方式不同于没有这些参数的URL?有没有人能让这个工作起来?
我的简单示例页面是:
<!DOCTYPE html>
<html>
<head></head>
<body>
<audio controls autobuffer>
<source src="say.php?text=this%20is%20a%20test&format=.ogg" />
<source src="say.php?text=this%20is%20a%20test&format=.mp3" />
</audio>
</body>
</html>来自PHP脚本的HTTP标头:
HTTP/1.x 200 OK
Date: Sun, 03 Jan 2010 15:39:34 GMT
Server: Apache
X-Powered-By: PHP/5.2.10
Content-Length: 8993
Keep-Alive: timeout=2, max=98
Connection: Keep-Alive
Content-Type: audio/mpeg来自直接文件访问的HTTP标头:
HTTP/1.x 200 OK
Date: Sun, 03 Jan 2010 20:06:59 GMT
Server: Apache
Last-Modified: Sun, 03 Jan 2010 03:20:02 GMT
Etag: "a404b-c3f-47c3a14937c80"
Accept-Ranges: bytes
Content-Length: 8993
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: audio/mpeg我也尝试过将Accept-Ranges头硬编码到脚本中,但没有成功。
发布于 2011-12-12 04:19:03
根据记录,虽然波昌和克里斯都正确地认为你需要内容范围头来解决Safari中的这个问题,但Chrome需要一个额外的头来设置currentTime才能正常工作:
header( 'Accept-Ranges: bytes');请注意,您实际上不必正确响应请求的Range标头,只需在响应中包含此内容即可。
发布于 2019-11-19 18:44:59
老话题,但在2019年仍然有效。我们终于找到了解决方案。下面的PHP脚本示例将考虑Safari的"Range“头请求。
$bytes_total = strlen($data);
if (isset($_SERVER['HTTP_RANGE'])) {
$byte_range = explode('-',trim(str_ireplace('bytes=','',$_SERVER['HTTP_RANGE'])));
$byte_from = $byte_range[0];
$byte_to = ($byte_range[1]+1);
$data = substr($data,$byte_from,$byte_to);
header('HTTP/1.1 206 Partial Content');
}
else {
$byte_from = 0;
$byte_to = $bytes_total;
}
$length = strlen($data);
header('Content-type: '.$content_type);
header('Accept-Ranges: bytes');
header('Content-length: ' . $length);
header('Content-Range: bytes '.$byte_from.'-'.$byte_to.'/'.$bytes_total);
header('Content-Transfer-Encoding: binary');
print($data);发布于 2010-05-15 16:17:06
我也有同样的问题。关键点是Content-Range头。在我把它添加到mp3-output php之后,一切都运行得很好。
https://stackoverflow.com/questions/1995589
复制相似问题