There are a lot of variables here, so I'm not surprised that different people get different results. Obi devices are not designed for direct ip to ip calling. However, it works for me nine times out of ten.
Quote( My port forwarding is done correctly. Otherwise, the registered Linphone softphone app won't be able to call my OBI SP2. )
Yes, I agree. However, you are controlling the SIP signalling. The RTP port numbers will be different from the SIP "listening" ports. Some voip providers will use totally different servers for RTP and will put the relevant RTP ip address and ports in their "contact" header details.
I know it's frustrating, but the two devices need to know each others "contact" addresses for RTP. The ip address is the same for direct ip calling, but the ports will not be the same. So it's the devices that need to tell each other where to send the RTP streams.
If you have a static public ip address for your OBi, then its easier. Otherwise, I suggest using the "keep-alive with STUN" method to make sure the unregistered spX sends its public ip address in its "contact" header. I also recommend use of STUN in the caller (Linphone in this case or any other softphone calling into the OBI) to try to resolve routing problems.
I'm with you Joe - I wish it was easy
Also, I'm not a world expert on this stuff, just an amateur really, so it might be worth searching on the web for a better written explanation of how voip calls work.
Anyhow its getting late in my time zone, but I'm back tomorrow for more judgements on SIP and RTP protocols and how they work together, or not