Воспроизведение mp3 потоковой передачи Shoutcast со звуком HTML5 в Firefox?
Я пытаюсь проигрывать mp3 радиостанции в формате shoutcast со звуком HTML5.
Я не думаю, что это будет актуально, но вот код в любом случае:
var player = new Audio();
player.autobuffer = true;
player.src = "http://173.192.48.71:9048/;";
player.volume = 1;
player.play();
Shoutcast обнаруживает, что запрос поступает из браузера, и возвращает страницу состояния радио, поэтому я поставил ";" в конце потока, который заставляет сервер возвращать аудиопоток вместо страницы состояния. Это прекрасно работает в Chrome и Safari, но не в Firefox.
Firefox по какой-то причине обнаруживает это как текстовое / простое содержимое и отказывается воспроизводить его с этой ошибкой:
HTTP "Content-Type" of "text/plain" is not supported.
Load of media resource http://173.192.48.71:9048/; failed.
Я использовал Fiddler для проверки того, что отправляется с сервера shoutcast, и в нем четко указано "content-type: audio/mpeg". Есть ли способ заставить Firefox воспроизводить поток shoutcast со звуком HTML5?
1 ответ
Поддержка Adobe Flash Player для Shoutcast дважды прерывалась (см. Здесь и здесь) за последний год, поэтому это действительно важный вопрос для меня.
Я решил исследовать.
Вместо стандартного HTTP Shoutcast использует протокол ICY, который примерно такой же, как HTTP/1.0.
Строка состояния, которую отправляет Shoutcast:
ICY 200 OK
но Mozilla не понимает часть ICY этой строки состояния, поэтому предполагает, что ответом является HTTP/0.9 (у которого нет типа содержимого / заголовков). Результатом этого является то, что тело потока включает строку состояния ICY и заголовки (то есть заголовки не анализируются Mozilla). Поскольку нет никакого типа контента, Mozilla делает небольшой "анализ информации" и обнаруживает допустимые кадры MP3 с небольшим смещением в контент и <audio>
тег функционирует правильно, используя этот сниффинг-тип контента.
Теперь возникает проблема, которая устраняется путем принудительного размещения всего содержимого HTTP / 0.9, поступающего через нестандартные порты (т. Е. Не порт 80/443), к типу содержимого: text/plain
, Теперь, когда тело контента передается в HTML <audio>
тег уже имеет тип содержимого text/plain
Таким образом, он больше не прослушивается, как это было до этой проблемы, и вместо этого Mozilla не позволяет его воспроизводить.
Хорошей новостью является то, что я исправил это раздражение, и теперь Mozilla рассматривает протокол ICY как эквивалент HTTP/1.0. Это, в свою очередь, означает, что Mozilla может декодировать заголовки и читать правильный тип контента audio/mpeg
и воспроизведение восстановлено.
Мое исправление должно появиться в Mozilla24 в конце этого года.
В то же время, если вы хотите играть в Shoutcast в Mozilla, вам нужно будет транслировать через порт 80.