Wav文件没有在mac上的safari中加载


Wav file not getting loaded in safari on mac

我正在尝试使用PHP提供WAV文件,我希望它能播放而不是下载。我正在设置这样的标题:

$path = "wav.wav";
header('Accept-Ranges: bytes');
header('Connection: keep-alive');
header('Content-Length: ' . filesize($path));
header("Content-Type: audio/wav");
header("Content-Duration: 00:00:22.046");
readfile($path);
exit();

这在chrome、IE、firefox上运行得很好,但在mac上的safari 9上则不然(safari 8确实运行了)。当我测试时,我根本没有得到响应标头!

这是一个测试链接,您可以亲自查看:http://staging-new-play.idomoo.com/couchbase_test/t3.php

有什么想法吗?

您需要发送部分内容

$file = "wav.wav";
$bufferSize = 2097152;
$filesize = filesize($file);
$offset = 0;
$length = $filesize;
if (isset($_SERVER["HTTP_RANGE"])) {
    preg_match("/bytes=('d+)-('d+)?/", $_SERVER["HTTP_RANGE"], $matches);
    $offset = intval($matches[1]);
    $end = $matches[2] || $matches[2] === "0" ? intval($matches[2]) : $filesize - 1;
    $length = $end + 1 - $offset;
    header("HTTP/1.1 206 Partial Content");
    header("Content-Range: bytes $offset-$end/$filesize");
}
header("Content-Type: " . mime_content_type($file));
header("Content-Length: $filesize");
header("Accept-Ranges: bytes");
$file = fopen($file, "r");
fseek($file, $offset);
ini_set("memory_limit", "-1");
while ($length >= $bufferSize)
{
    print(fread($file, $bufferSize));
    $length -= $bufferSize;
}
if ($length) print(fread($file, $length));
fclose($file);

Safari需要Content-Range:才能播放wav文件。

添加此行:

header("Content-Range: something");

我会尝试删除一些不必要的标头(Accept-RangesConnection),并添加一个Content-Transfer-Encoding标头:

header("Content-Length: " . filesize($path));
header("Content-Type: audio/wav");
header("Content-Duration: 00:00:22.046");
header("Content-Transfer-Encoding: binary");