Я наткнулся на странную проблему в веб-приложении WebRTC. Вот настройка: клиент A и клиент B отправляют аудио через соединения WebRTC только для отправки в SFU. Клиент C получает через два соединения только для приема с одним и тем же SFU аудиопотоки от клиентов A и B и добавляет их к двум различным «аудио» элементам. Маршрутизация между этими отправляющими и получающими соединениями работает правильно.
Вот проблема: при обновлении страницы иногда клиент C слышит звук как от клиента A, так и от клиента B. Но большую часть времени клиент C слышит звук только от случайного A или B. Это происходит как в firefox, так и в chrome.
Оба соединения получают данные (см. График bitsReceivedPerSecond), но только одно соединение выводит звук. Вот пример, когда C мог слышать A, но не B:
Насколько я понимаю, эти графики заключаются в том, что необработанное соединение WebRTC работает нормально (данные отправляются и принимаются), но каким-то образом соединение не выводит звук случайным образом.
Кто-нибудь знает, как это может случиться?
Вот обратный вызов «ontrack» для добавления потоков к аудиоэлементам. Журналы отображаются правильно для каждого подключения.
gotRemoteStream(e) {
Logger.log("Remote Streams: #"+e.streams.length);
if (this.audioElement.srcObject !== e.streams[0]) {
Logger.log("Received remote Stream with tracks to audio: " + this.audioElement.id);
this.audioElement.srcObject = e.streams[0];
}
}
this
, потому что это объясняет симптом. В коде, который вы показываете, нет ничего, что указывало бы на то, что задействованы различные элементы. Как определить, какой из них получает A против B? 07.11.2018