2

私は 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 のファイル ストリーミングの問題のようです。

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

4

1 に答える 1

5

バイト範囲リクエストをサポートする必要があります。この件については、SoundManager2 のテクニカル ノートを参照してください。

リクエストの例:

GET some.ogg HTTP/1.1
Range: bytes=5210604-5275910

予想される応答:

HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-length: 65307
Content-Range: bytes 5210604-5275910/5275911
Content-Type: audio/ogg
于 2013-08-05T20:38:19.970 に答える