(4 months ago I had a demo working using ROAP and STUN before they switched to JSEP. I'm literally in the middle of upgrading it to the new API.)
The "setup" for the connections in the central server is trivial with a tiny websockets server and a few messages shuttled back and forth.
NAT (Network Address Traversal): exposing only your router's ip address and hiding your own to outside traffic [https://en.wikipedia.org/wiki/Network_address_translation]
ROAP (RTCWeb Offer/Answer Protocol): main voice protocol [https://en.wikipedia.org/wiki/RTCWeb_Offer/Answer_Protocol]
JSEP (JavaScript Session Establishment Protocol): protocol for setting up P2P connection [https://en.wikipedia.org/wiki/JavaScript_Session_Establishme...]
Following are all technologies for punching through NAT...
ICE (Interactive Connectivity Establishment): [https://en.wikipedia.org/wiki/Interactive_Connectivity_Estab...]
STUN (Session Traversal Utilities for NAT): [https://en.wikipedia.org/wiki/STUN]
TURN (Traversal Using Relays around NAT): [https://en.wikipedia.org/wiki/Traversal_Using_Relay_NAT]
(Disclaimer: I know nothing of these technologies, I just looked them up on wikipedia myself)
(4 months ago I had a demo working using ROAP and STUN before they switched to JSEP. I'm literally in the middle of upgrading it to the new API.)
The "setup" for the connections in the central server is trivial with a tiny websockets server and a few messages shuttled back and forth.