php - 当从 PHP 提供 mp3 时,audio.duration 在 Safari 上返回 Infinity

标签 php safari mp3 html5-audio

因此,我有一个 php 脚本可以将我的 mp3 文件发送到 html5 的音频标签。问题是在 Safari 中,audio.duration 标签不起作用并返回无穷大。如果我将音频的 src 直接设置为文件,一切正常。但我不希望我的用户看到文件的路径。

无论如何,这就是我从 PHP 发送 header 的方式。

我已经尝试过内容范围。这没有帮助。

if (file_exists($filename)) {
  $fp = fopen($filename, 'r');
  $etag = md5(serialize(fstat($fp)));
  fclose($fp);
  header("Content-Transfer-Encoding: binary"); 
  header("Content-Type: audio/mpeg");
  header('Content-Length: ' . (string)(filesize($filename)));
  header('Content-Disposition: inline; filename="' . $filename . '"');
  header('X-Pad: avoid browser bug');
  header('Cache-Control: no-cache');
  header('Etag: ' . $etag);

  //GetContentRange($filelength);

  readfile($filename);
  exit;
}
else {
  header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
  echo "no file";
}

最佳答案

我遇到了同样的问题并添加了几个标题。似乎对我有用 -

 header("Pragma: public");
 header("Expires: 0"); 
 header("Content-Type: audio/mpeg");
 header('Content-Length: ' . $fsize);
 header('Content-Disposition: inline; filename="' . $track2play . '"');
 header( 'Content-Range: bytes 0-'.$shortlen.'/'.$fsize); 
 header( 'Accept-Ranges: bytes');
 header('X-Pad: avoid browser bug');
 header('Cache-Control: no-cache');
 header('Etag: ' . $etag);

$fsize 是文件大小,$shortlen =$filesize-1...在 Safari 5.1.4 和新 iPad 上测试...

关于php - 当从 PHP 提供 mp3 时,audio.duration 在 Safari 上返回 Infinity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629223/

相关文章:

c# - 使用MediaElement C#asp.net网站播放mp3文件

php - 写入多维数组的位置

php - 如何在 MySQL 中编写 IF ELSE 语句

svg - %tagElement% 上的 href 的命名空间前缀 NS1 未定义,setAttributeNS

firefox - 比例图像缩放在 Firefox 和 Chrome 中有效,但在 Safari 中无效

JavaFX MediaPlayer - 音乐在 10 秒后停止

ubuntu - 通过本地计算机的扬声器在远程计算机上播放声音文件

php - 将表单结果发送到另一个页面 php mysql

php - 使用 session

javascript - 移动 safari - 防止 body 滚动(不使用固定位置)