Воспроизведение mp3 Shoutcast потоков с HTML5 аудио в Firefox?

Я пытаюсь воспроизвести радиостанции с радиосигналом mp3 с текстом 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 играть поток крика с аудио 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.