WebRTC calls are not reliable in our application. Sometimes we see the black screen, sometimes we don’t see call start at all and sometimes there are seen huge delays or de-sync in audio/video.
Setup:
- Google’s public STUN server
stun:stun.l.google.com:19302
; - TURN server is
Coturn
hosted in azure in docker; - Signaling server is a customized https://github.com/andyet/signalmaster that using express as a web server
- On client JS is used, with
simplewebrtc
as client; - For iOS support used Cordova plugin - https://github.com/eface2face/cordova-plugin-iosrtc
Almost 100% reproduced issue is calling from one client on LTE to another on Wi-Fi. In this case we see black screen on both devices, however, default bg-color is white, so at least something happens on WebRTC side.
What was done to address issues:
- Examined Coturn logs... Sometimes we see "Unauthorized" errors there, but it's hard to say if they affect anything;
- Checked Coturn's traffic: in Wi-Fi to Wi-Fi scenarios it is low, so peer-to-peer connection is really made. If there is LTE, we see around 40–120KiB/sec load (Isn't that too low for audio/video?), so TURN seems to work;
- Checked client app logs, nothing special;
Please, suggest any possible way of research or fix to make WebRTC as much reliable as possible.
The above scheme is from this article I wrote which goes into a lot of detail on this topic.
Shortly, problems can appear in any of the 3 steps:
Here's what I would do:
stun:stun.l.google.com:19302?transport=tcp
) and port 80 (default is UDP port 3478 or 19302 for Google's STUN and they might be blocked by your router/firewall/proxy/mobile network )