У меня есть базовый аудиоплеер:
<audio controls="controls" autoplay="true" loop="loop"> <source src="song.php" type="audio/mpeg" /> </audio>
И вместо источника, указывающего непосредственно на MP3-файл, я указал на файл PHP, который затем указывает на MP3-файл, который работает. Но, когда текущая дорожка заканчивается, файл PHP указывает на новый файл MP3. Итак, проблема в том, что когда плеер переходит в цикл, с новым файлом MP3, он полностью перестает работать. Есть ли способ обойти это? Есть ли способ сделать это с помощью плейлиста или любых других игроков?
Скопировано из вашего дублированного вопроса :
Во-первых, вы прикрепляете новый обработчик событий каждый раз, когда элемент кликается. Если кто-то часто останавливает музыку, у них будут проблемы.
Intead, попробуйте следующее:
<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
запроса nocache
гарантирует, что файл фактически вызывается каждый раз.
Я думаю, проблема заключается в том, что вам нужно сделать запрос после завершения текущей песни, вы можете добиться этого, добавив слушателя с ended
событием к элементу аудио:
<audio id="player" controls="controls" autoplay="true" loop="loop"> <source src="song.php" type="audio/mpeg" /> </audio>
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-файл получает правильный заголовок
Нужно ли случайный выбор делать php?
Если нет, возможно, будет проще сказать javascript для выбора случайного идентификатора в диапазоне. Затем передайте его вашему скрипту php в качестве параметра GET.
В php-стороне сделайте сопоставление идентификаторов> MP3-файлов, чтобы один и тот же идентификатор всегда соответствовал тому же MP3. Вы можете использовать все, что хотите: простой ассоциативный массив, базу данных и т. Д. На самом деле идентификаторы даже не должны быть цифрами.
ЕСЛИ вы не хотите, чтобы кто-то обнаружил ваше сопоставление и сказал, вызовите непосредственно wscript с ID X для загрузки вашего MP3, вы можете изменить свое сопоставление на каждом сеансе, например … важно то, что данный идентификатор всегда ссылается в тот же MP3, по крайней мере, в течение разумного периода времени.
Я также могу сказать, что выполнение перенаправления в файл MP3 с php может вызвать проблемы для некоторых браузеров. Возможно, лучше отправить правильные заголовки HTTP и фактически вернуть содержимое файла напрямую без перенаправления. Быстрый пример:
<?php $file = "something.mp3"; header("Content-Type:audio/mpeg"); header("Content-LEngth:".filesize($file)); readfile($file); ?>
Дополнительная информация о файлах readfile и заголовках
Возможно, лучший способ – иметь уникальную переменную Request ID
запроса в строке запроса. Затем с каждым запросом вы можете определить, является ли это запросом цикла или новым запросом или новым запросом для рандомизации.
Вы знаете, как это сделать? Если нет, я буду включать код.