Is there a way to use a specific port so that the user does not have to open all of these ports?
I think you have a misunderstanding. The whole point of STUN and ICE (including its WebRTC derivatives) exists to prevent anyone from opening a port on their NAT. Instead, STUN and ICE dynamically open the port.
Here's how it works (in the shortest description).
A client opens a socket on a random port (e.g. 50001)
Contact a STUN server using this socket to discover an external IP port mapping: for this socket. (e.g. 192.168.1.2►0001 corresponds to 1.2.3.4►0001). Ports do not have to match between internal and external addresses, but they are usually executed, so I will stick to this in this example.
Through an external mechanism (SIP, XMPP, Jingle, cups with strings) the list of addresses of candidates of both nodes is replaced. This includes all known internal and external addresses collected (e.g. 192.168.1.2►0001 and 1.2.3.4►0001).
Using the same socket opened in step 1, both sides send (STUN) messages (UDP packets) directly to each other. The first pair of messages can be blocked by the router / firewall. But since one side initiated the outgoing packet to the remote address, subsequent packets from this address are allowed back. This is called the "hole punching step". Therefore, the port dynamically opens without a router that needs any particular configuration.
Hope this helps.
source share