9

私は基本的なオーディオプレーヤーを持っています:

<audio controls="controls" autoplay="true" loop="loop">
<source src="song.php" type="audio/mpeg" />
</audio>

そして、ソースがMP3ファイルを直接指す代わりに、PHPファイルを指すようにしました。PHPファイルは、MP3ファイルを指します。これは機能します。しかし、現在のトラックが終わっているとき、PHPファイルは新しいMP3ファイルを指しています。だから、私が抱えている問題は、プレーヤーが新しいMP3ファイルでループに入ると、完全に機能しなくなることです。これを回避する方法はありますか?プレイリストや他のプレーヤーでこれを行う方法はありますか?

4

4 に答える 4

12

重複した質問からコピー:


まず、要素がクリックされるたびに新しいイベント ハンドラーをアタッチします。頻繁に音楽を一時停止すると、問題が発生します。

代わりに、これを試してください:

<audio id="audio" autoplay controls src="song.php" type="audio/mpeg"></audio>
<script type="text/javascript">
    document.getElementById('audio').addEventListener("ended",function() {
        this.src = "song.php?nocache="+new Date().getTime();
        this.play();
    });
</script>

song.phpこれは、オーディオ データを返す PHP ファイルであると想定しています。クエリ パラメータはnocache、ファイルが実際に毎回呼び出されることを保証します。

于 2013-01-11T03:25:28.407 に答える
1

問題は、現在の曲が終了したらリクエストを行う必要があることだと思います。endedイベントリスナーをオーディオ要素に追加すると、これを実現できます。

HTML

<audio id="player" controls="controls" autoplay="true" loop="loop">
<source src="song.php" type="audio/mpeg" />
</audio>

Javascript

var audio = $("#player");
audio.addEventListener("ended", function(){
    $.post("song.php", function(result){
        audio.src = result;
        audio.pause();
        audio.load();//suspends and restores all audio element
        audio.play();
    });
});

注:それでも問題が解決しない場合は、質問に PHP コードを含めて、PHP ファイルが適切なヘッダーを取得しているかどうかを確認してください。

于 2013-01-07T06:37:22.067 に答える
1

ランダムな選択は必然的に php によって行われますか?

そうでない場合は、範囲内のランダムな ID を選択するように JavaScript に指示する方がおそらく簡単です。次に、それを GET パラメータとして php スクリプトに渡します。

PHP 側で、ID > MP3 ファイルのマッピングを行い、同じ ID が常に同じ MP3 に対応するようにします。単純な連想配列、データベースなど、何でも好きなものを使用できます。実際、ID は数字である必要さえありません。

誰かがあなたのマッピングを発見したくないと言って、ID X で wscript を直接呼び出して MP3 をダウンロードする場合は、たとえばセッションごとにマッピングを変更することができます...重要なことは、特定の ID が常に参照することです。少なくとも妥当な期間、同じ MP3 に。

また、php から MP3 ファイルへのリダイレクトを行うと、一部のブラウザーで問題が発生する可能性があることも指摘しておきます。おそらく、正しい HTTP ヘッダーを送信し、リダイレクトせずにファイルの内容を直接返す方がよいでしょう。簡単な例:

<?php
$file = "something.mp3";
header("Content-Type:audio/mpeg");
header("Content-LEngth:".filesize($file));
readfile($file);
?>

readfileヘッダー関数の詳細

于 2013-01-16T14:58:27.787 に答える
0

おそらく最善の方法はRequest ID、クエリ文字列に一意の変数を含めることです。次に、各リクエストで、それがループしたリクエストなのか、新しいリクエストなのか、ランダム化のための新しいリクエストなのかを判断できます。

これを行う方法を知っていますか?そうでない場合は、コードを含めます。

于 2013-01-07T05:22:22.163 に答える