0

私の質問は簡単です: シーク可能な PHP で mp3 を出力するにはどうすればよいですか? 適切なヘッダーが設定されていると信じており、readfile() と fopen() の両方を試してみました。これは、調査の結果、readfile() はバイト範囲をサポートせず、fopen() はサポートしていると思われるためです。ただし、明らかに必要なだけで、バイト範囲の操作方法や設定方法が本当にわかりません。jPlayer で曲を再生していますが、曲は正常に再生されますが、シークできません。つまり、シーク バーの別の場所をクリックして曲をスキップすることはできません。

mp3 ファイルを出力するコードは次のとおりです。

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false); // required for certain browsers 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header("Content-Disposition: inline; filename=" . $file . ";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($path));
//readfile("$path");
$music = fopen($path, 'r');
fseek($music, 0);
fpassthru($music);
exit();

Range ヘッダーを読み取る必要がある場合、どうすればよいですか?

4

1 に答える 1

1

私は同じことを解決しようと何日も費やしました。私はまだそれを解読していませんが、これに気づきました。

MP3 は先にスキップしません (quicktime が最初のバイトを取得してから残りのバイトに戻るため) ただし、soundcloud ストリーム (これは mp3) では先にスキップできます (同じプレーヤーで再生した場合)

サウンドクラウドのヘッダーで解決策を見つけることができるのではないかと思います (なぜなら、彼らはそれをクラックしたからです)。

于 2014-10-11T02:34:10.427 に答える