Я наткнулся на странную проблему в веб-приложении WebRTC. Вот настройки:
Клиент A и клиент B отправляют аудио через соединения WebRTC только для отправки в SFU.
Клиент C принимает через два соединения только для приема к тому же SFU аудиопотоки от клиентов A и B и добавляет их к двум различным «аудио» элементам. Маршрутизация между этими соединениями отправки и получения работает правильно.
Вот проблема:
При обновлении страницы иногда клиент C слышит звук как от клиента A, так и от B. Но большую часть времени клиент C слышит только звук случайным образом от A или B.
Это происходит как в Firefox, так и в Chrome.
Оба соединения получают данные (см. График «bitsReceivedPerSecond»), но только одно соединение выводит звук. Вот пример, где C мог слышать A, но не B:
Клиент подключения A -> C:
Клиент подключения B -> C:
Мое понимание этих графиков состоит в том, что исходное соединение 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];
}
}