私は soundmanager2 を使用していますが、Safari に問題があります。
次のようなものを使用して、保護されたファイル (webroot の外部) を PHP から Soundmanager2 に正常にストリーミングしています。
//check if user is logged in and has rights on $file
//if yes stream file
if (file_exists($file)) {
$filepath = $file;
$filesize = filesize($filepath);
header("Pragma: no-cache");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Disposition: attachment;filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");
header('Content-Type: audio/mpeg');
header('Content-Length: '.$filesize);
@readfile($filepath);
exit(0);
}
これは Firefox と Chrome では正常に動作し、mp3 ファイルは再生されますが、Safari では次のようになります。
soundmanager2.js:1190basicMP3Sound0: Using HTML5
soundmanager2.js:1190basicMP3Sound0: play(): Attempting to load
soundmanager2.js:1190basicMP3Sound0: load (/privateaccess/index/1415)
soundmanager2.js:1190basicMP3Sound0: waiting
soundmanager2.js:1190basicMP3Sound0: loadstart
soundmanager2.js:1190basicMP3Sound0: loadedmetadata
soundmanager2.js:1190basicMP3Sound0: HTML5 error, code 3
soundmanager2.js:1188basicMP3Sound0: Failed to load / invalid sound? Zero-length duration reported. (/privateaccess/index/1415)
このエラーは、PHP からファイルをストリーミングするときにのみ発生します。Webroot にあるファイル (PHP ではなく apache によって配信されます) で動作しています。
www.myurl.com/privateaccess/index/1415 を直接叩くとファイルがダウンロードされるので、どうやら Safari と Soundmanager2 と PHP のファイル ストリーミングの問題のようです。
誰?これを修正/回避するアイデアはありますか?