php - Wav 文件未在 mac 上的 safari 中加载

标签 php audio safari

我正在尝试使用 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 可以运行)。当我测试时,我根本没有收到任何响应 header !

这是您可以自己查看的测试链接: 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);

关于php - Wav 文件未在 mac 上的 safari 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718064/

相关文章:

php - 静态方法在 PHP 中的 Web 服务器上不起作用

audio - 录制时的RTC文件大小

php - 5.3.9之前的版本有没有像max_input_vars这样的限制?

php - 从 while 循环创建单个变量

javascript - Gamedesign "group"用于静音和取消静音的 html5 音频元素

html - 使用 -webkit-... 创建自定义文本颜色在 Safari 中创建边框

javascript - 消极的向后看。如何修复正则表达式以在 IE11、Safary 中使用它?

JavaScript 在 Firefox 和 Safari 中有效,但在 Internet Explorer 或 Chrome 中无效

php - 将 "id' s"分配给 mysql 行以与关联数组一起使用

c++ - 通过socket接收音频文件