Peer 2 Peer call using PJSIP and PJSUA

2020-07-30 03:11发布

问题:

I am still learning about SIP and all its protocols, specifically trying to integrate PJSIP into an iPhone application to make p2p calls. I have a question about a peer 2 peer connection using PJSUA. I am able to make calls perfectly to other clients on my local network by calling directly using the URI:

  • sip:192...*:5060

I am curious if this will work for making direct calls to other SIP URIs that are not on the local network without using server configuration - if not this way, is there another way of making p2p calls without server configuration?

thanks in advance,

回答1:

You can make calls without server configuration, as a general principle, but something needs configuring. As mattjgalloway points out in the comments below your question, the most robust solution is a can of worms involving ICE which provides a kind of "umbrella" protocol for things like STUN.

Last time I touched this issue, I had the requirement that I couldn't use internet-based SIP servers to help. I came up with the idea of a registry of sorts: your client can define a bunch of "address spaces" with particular routing requirements. For SIP URIs in your LAN, you define no routing; for URIs in your company's VPN-accessed network, you define a route passing through your VPN connection; for everything else you define a route through your internet router.

By "define a route", I mean that when you place a call to a URI in some particular address space, you store what IP will go into a Contact header, what Route headers you might need, and so on.

Thus, the process of making a call becomes:

  1. Look up in the set of address spaces for a match.
  2. Ask that address space for the suitable bits needed to make a workable INVITE (appropriate Contact header details, Route headers, etc.)
  3. Construct a normal INVITE, mutating as necessary for the previous step.
  4. Send the INVITE as normal.

This essentially reproduces half of what ICE would give you, in a manually administrated form. "Half", because this ensures that one SIP agent can make calls such that the SIP routing all works. The missing half is you still need some kind of registrar somewhere, and each agent in your contact list needs to have the necessary setup to receive incoming calls. (If an agent's behind a NATting internet router, the router would need to either run a SIP proxy, or forward ports 5060, 5061 to a particular machine (which might be an agent, or a proxy serving the LAN's agents).

It is, indeed, a large can of worms.



回答2:

The basic issue is to solve the problem of getting transport ports anywhere on the internet for multimedia traffic. Many companies/experts have tried to solve this situation. A possible way out of is to buy a domain and setup a basic registrar using YATE or Asterisk on an address accessible from the internet and configure it to also use ICE as needed. Your iphone application at both ends could register automatically to it upon start. Then make P2P calls.