Обнаружить поддержку Shoutcast ICY MP3 без navigator.userAgent в Firefox?

Текущая версия Mozilla Firefox — 23.0.1, эта версия не поддерживает воспроизводить потоки Shoutcast MP3 с TCP-порта, отличного от 80 (чаще всего это 8000 для Shoutcast 1.9.8).

Я использую Flash, когда поддержка MP3 недоступна в аудио HTML5, способ обнаружения:

try{
    var a = document.createElement('audio');
    r = !!(a.canPlayType && !!a.canPlayType("audio/mpeg; codecs=mp3").replace(/^no$/,''))
}catch(e){
    r = false;
}

Поддержка потоковых трансляций Mp3 в Firefox будет добавлена ​​в версии 24.

a.canPlayType("audio/mpeg; codecs=mp3") = вероятно, в Chrome и Firefox, Chrome действительно поддерживает, firefox не поддерживает, из-за этого текущий код для обнаружения не работает для Firefox.

Текущая версия jQuery, поддерживающая IE 6, — 1.10.2, в этой версии нет .browser.

Я думаю, что «стилизованный» способ - это тестирование функций, а не запрос браузеров / версий, хотя здесь я вижу, что трудно не нарушить этот «принцип».

Что такое «стилизованный» способ обнаружения поддержки MP3 ICY без navigator.userAgent в Firefox?


person Jose Nobile    schedule 20.08.2013    source источник
comment
Проблема связана не с MP3, а с ICY в строке состояния ответа сервера. Обнаружить это невозможно, так как это не настоящая спецификация, и браузеры поддерживают ее только потому, что в большинстве случаев они следуют подходу «принять что угодно». Обойти проблему можно с помощью чего-то, что возвращает настоящий HTTP-ответ, например Icecast. Если хотите, я тестирую хостинг по адресу audiopump.co и могу ретранслировать ваш поток SHOUTcast. Напишите мне по электронной почте [email protected].   -  person Brad    schedule 20.08.2013


Ответы (1)


Нет сложного способа обнаружить это. Хорошей новостью является то, что последняя стабильная версия Firefox 24.0 поддерживает воспроизведение потоков громкой трансляции в формате MP3 со звуком HTML5. Лучший способ обнаружить поддержку, которую я написал:

function icy(){
    try{
        if(!navigator.userAgent.match(/Trident\/7\./) && $.browser.mozilla && $.browser.version < 24)
            return false;//https://bugzilla.mozilla.org/show_bug.cgi?id=869725
        var a = document.createElement('audio');
        r = !!(a.canPlayType && !!a.canPlayType("audio/mpeg; codecs=mp3").replace(/^no$/,''))
    }catch(e){
        r = false;
    }
    return r;
}

Если вы используете последнюю версию jQuery 1.10.2, вам необходимо включить плагин jQuery Migrate для использования $.browser

person Jose Nobile    schedule 11.10.2013