у нас возникли проблемы с воспроизведением потокового аудио в браузере (используя Chrome).
У нас есть процесс, который передает аудио (например, интернет-радио) по udp на какой-то порт. Это avconv (avconv -y -i SOMEURL -f alaw udp://localhost:PORT
). У нас есть сервер NodeJs, который получает этот аудиопоток и перенаправляет его нескольким клиентам, подключенным через веб-сокеты. Аудиопоток, который получает NodeJs, помещается в буфер, который представляет собой массив с числами от 0 до 255. Данные отправляются в браузер без каких-либо проблем, а затем мы используем AudioContext для воспроизведения аудиопотока в браузере (наш код основан на AudioStreamer — https://github.com/agektmr/AudioStreamer).
Поначалу все, что мы получили на данный момент, было статичным. Изучив код AudioStreamer, мы поняли, что данные аудиопотока должны находиться в диапазоне от -1 до 1. Зная это, мы попытались изменить каждое значение в буфере с помощью этой формулы x = (x/128) - 1
. Мы сделали это просто для того, чтобы посмотреть, что произойдет, и на удивление помехи стали немного менее ужасными — вы могли даже разобрать мелодии песен или слов, если звук был речью. Но это все еще очень-очень плохо, много статики, так что это, очевидно, не решение, но оно показывает, что мы действительно получаем аудиопоток через веб-сокеты, а не просто какие-то случайные данные.
Так вот вопрос - что мы делаем не так? Есть ли кодек/формат, который мы должны использовать? Конечно, весь код (avconv, NodeJs и клиентская часть) может быть изменен по желанию. Мы также могли бы использовать другой браузер, если это необходимо, хотя я предполагаю, что здесь проблема не в этом. Единственное, что мы знаем, это то, что нам действительно нужно это для работы через веб-сокеты.
ОС, на которой работают avconv и NodeJs, — Ubuntu (различные версии 10-13).
Любые идеи? Вся помощь будет оценена.
Спасибо! Томас