Попытка решить запутанную проблему с потоковой передачей звука через веб-сокеты. Мы используем Nexmo (конкурент Twilio), который обеспечивает двунаправленную потоковую передачу звука вызова через веб-сокеты. Nexmo подключается к нашему серверу websocket и начинает отправлять дискретизированные аудиокадры 16 кГц длиной 640 байт каждый.
Все работало отлично до недавнего времени, когда звук через веб-сокет внезапно начинал сбрасывать группы кадров, что приводило к пропускам звука.
Но самое интересное следующее:
Любые идеи о том, где искать реальное решение, были бы потрясающими.





Убедитесь, что процесс, который получает трафик веб-сокета, имеет отдельный поток только для обработки этого трафика ... любая система будет отбрасывать трафик, если она слишком занята другими задачами ... если на принимающей стороне есть некоторый цикл событий, который он поддерживает при вытеснении по входящим прерываниям веб-сокета вы будете сбрасывать пакеты
Я сделал проект, в котором принимающей стороной был браузер, который запускал цикл событий для выполнения аудио рендеринга и одновременно обрабатывал трафик веб-сокета - не лучшая идея, так как критические части этого цикла событий не должны быть вытеснены. . Мне пришлось создать процесс веб-работника на стороне браузера, чтобы обрабатывать весь трафик веб-сокета, чтобы затем заполнить кольцевой аудиобуфер ... этот веб-работник рассматривался как клиент в цикле событий браузера, который рендерил звук, но теперь ему было разрешено никогда быть вытесненным входящим трафиком ... только когда цикл событий браузера достиг своего периода ожидания, он затем запросил получение еще одного глотка данных, буферизованных очередью аудиобуфера веб-работника
ты решил проблему? Я не могу придумать никакого решения. У меня нет высокой загрузки ЦП или памяти, но Nexmo внезапно перестал работать, поэтому я больше не слышу вызова моего веб-приложения Azure ... ngrok иногда работает, иногда нет