2

(Safariの場合)などのjavascriptプレーヤーにオーディオを提供しています:

new Audio('give_audio.php?n='+name+'&t=mp3');

彼がオーディオの長さを取得できるように、Safariの正しいヘッダーを設定しようとしていました。mp3 が PHP から提供されると、audio.duration が Safari で Infinity を返すというトピックが 役に立ちました。

私のPHPスクリプト「give_audio.php」は次のとおりです。

if (isset($_GET['n']) && isset($_GET['t'])) {

  $n = htmlspecialchars($_GET['n']);
  $t = htmlspecialchars($_GET['t']);
  $filename = $n.'.'.$t;
  $path = 'Audio/'.$filename;
  $fsize = filesize($path);
  $shortlen = $fsize - 1;

  $fp = fopen($path, 'r');
  $etag = md5(serialize(fstat($fp)));
  fclose($fp);

  if ($t == 'mp3') $t = 'mpeg';

  header("Pragma: public");
  header("Expires: 0");
  header('Cache-Control: no-cache, no-store');
  header('Content-Transfer-Encoding: binary');
  header('Content-Disposition: inline; filename="'.$filename.'"');      
  header('Content-Length: '.$fsize);
  header('Content-Type: audio/'.$t);
  header('Accept-Ranges: bytes');
  header('Connection: Keep-Alive');
  header('Content-Range: bytes 0-'.$shortlen.'/'.$fsize); 
  header('X-Pad: avoid browser bug');
  header('Etag: '.$etag);

  readfile($path);

} else {   
  header('HTTP/1.0 404 Not Found');
  echo 'Error';    
}

Safari は音声の長さを検出するようになりましたが、これは偽物です。長すぎるため、最後にデータのない数秒があり、プレイヤーを文字通りブロックします...

さらに、これは Opera では機能しません。

これを修正するアイデアはありますか?

4

0 に答える 0