Я использую Icecast для потоковой передачи живого звука с внутренних микрофонов и хочу, чтобы у слушателя была минимальная задержка.
Наивным решением было бы просто получить доступ к http://myhostname:8000/my_mountpoint
для получения потока, но тег <audio>
выполняет внутреннюю буферизацию перед воспроизведением и приводит к довольно высокой задержке.
Текущее решение: Я использовал ReadableStreams
API для декодирования (используя decodeAudioData
API Web Audio) и воспроизведения фрагментов данных путем маршрутизации декодированных данных в Audio Контекст назначения (внутренние колонки). Это работает и значительно снижает задержку.
Проблема: Этот потоковый API, хотя и экспериментальный, должен технически работать на последних версиях Chrome, Safari, Opera, FF (после установки определенного флага). Однако у меня проблемы с decodeAudioData
во всех других браузерах, кроме Chrome и Opera. Я считаю, что FF и Safari не могут декодировать частичные данные MP3, потому что я обычно слышу короткую активацию динамиков, когда начинаю потоковую передачу. В Safari обратный вызов на успешном decodeAudioData
никогда не вызывается, а FF просто говорит EncodingError: The given encoding is not supported.
Есть ли какие-нибудь обходные пути, если я хочу хотя бы заставить его работать на Safari и FF? Отличается ли реализация decodeAudioData
в Chrome и Safari так, что одна работает с частичным MP3, а другая нет?