我正在使用 jPlayer 播放媒体,我还使用 PHP 下载脚本将内容传送到 jPlayer。
我在使用 Safari 时遇到问题,音频无法正确缓冲。最初认为这是一个 Accept-Ranges 问题,我确保传递了正确的标题。
在 Firefox 中,如下面的屏幕截图所示,标头可以正常通过,并且一切正常。
但是,在 Safari 中,当我单击播放时会发生以下情况:
如您所见,它称为下载脚本,但状态仍处于挂起状态且不会更改。奇怪的是,音频播放正常。
在查看收到的标头时,它让我更加困惑,因为似乎没有发送标头:
这些是我从下载脚本发送的标头,省略了位:
...
header("Content-Type: ".$mimeTypes[$ext]);
header('Content-Disposition: attachment; filename="Test - '.$_GET[title].'.mp3"');
header('Accept-Ranges: bytes');
$begin = 0;
$end = $fsize - 1;
if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
{
$begin = intval($matches[1]);
if (!empty($matches[2]))
{
$end = intval($matches[2]);
}
}
header('Content-Length:' . (($end - $begin) + 1));
header("Content-Range: bytes $begin-$end/$fsize");
我将文件发送到 jPlayer 的 javascript 是:
$("#jquery_jplayer_1").jPlayer("setMedia", { mp3: "/download.php?track=" + id });
$("#jquery_jplayer_1").jPlayer("play");
如果有人能指出我正确的方向,我是否错过了 Safari 需要的一些关键标题信息 - 或者......?
非常感谢。