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

Roo*_*h15 5 php safari mp3 html5-audio

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

无论如何,这就是我从PHP发送标题的方式.

我已经尝试过了内容范围.这没有用.

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";
}
Run Code Online (Sandbox Code Playgroud)

小智 5

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

 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);
Run Code Online (Sandbox Code Playgroud)

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