问题
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.
回答1:
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:
- signaling
- discovery using STUN/TURN
- p2p connection
Here's what I would do:
- Use a low minimum resolution in constraints like 320x240, this will make sure there are no simple to avoid getUserMedia() errors
- Make sure signaling is done over port 80 or 443
- In many cases a peer can not communicate with the STUN/TURN servers so try communicating with STUN/TURN using TCP (
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 ) - Use TrickleICE (with your own STUN/TURN) and the WebRTC Troubleshooter on the LTE/WiFi devices and you'll learn a lot about how they can be connected to
来源:https://stackoverflow.com/questions/42836729/how-to-fix-unreliable-webrtc-calling