Intereting Posts
Как удалить строку из файла с помощью php? Хранение значений $ _POST в массиве для сохранения их в текстовый файл Доступ к переменной JavaScript из PHP выполнение нескольких preg_replace с различным поиском и заменой каждый раз Создайте механизм для передачи положительного целого числа и отобразите все значения серии Фибоначчи до и включите указанное значение Найти, если значение существует в JSONArray в php Функция PHP для перечисления всех атрибутов объектов Один SQL-запрос или многие в цикле? Как сделать раздел DIV доступным? Может ли встроенный PHP-файл узнать, откуда он был включен? сообщение на стене страницы поклонника как страница с другого сайта PHP php – regex – как извлечь число с десятичной точкой (точка и запятая) из строки (например, 1,120.01)? PHP завиток, возвращающий странные символы php echo результат при повторении через цикл Странная 5-секундная пауза с интерфейсом командной строки PHP (связанная с расширением mysql / mysqli)

Аудио-элемент HTML5 с динамическим источником

У меня есть базовый аудиоплеер:

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

И вместо источника, указывающего непосредственно на MP3-файл, я указал на файл PHP, который затем указывает на MP3-файл, который работает. Но, когда текущая дорожка заканчивается, файл PHP указывает на новый файл MP3. Итак, проблема в том, что когда плеер переходит в цикл, с новым файлом MP3, он полностью перестает работать. Есть ли способ обойти это? Есть ли способ сделать это с помощью плейлиста или любых других игроков?

Solutions Collecting From Web of "Аудио-элемент HTML5 с динамическим источником"

Скопировано из вашего дублированного вопроса :


Во-первых, вы прикрепляете новый обработчик событий каждый раз, когда элемент кликается. Если кто-то часто останавливает музыку, у них будут проблемы.

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 событием к элементу аудио:

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-файл получает правильный заголовок

Нужно ли случайный выбор делать 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 запроса в строке запроса. Затем с каждым запросом вы можете определить, является ли это запросом цикла или новым запросом или новым запросом для рандомизации.

Вы знаете, как это сделать? Если нет, я буду включать код.