Call Timeout after 30 seconds

We are having an issue with calls timing out after 30 seconds.
These are remote extensions and don’t go through the regular trunk.

Behind a NAT Firewall, Using a non standard outside port mapped to 5060 internally.
Phones register fine, Call is initiated fine audio is good back and forth for those 30 seconds and then it acts like a RTP timeout and call is dropped.
My Nat settings are all good. external address is good and internal addresses are all good. TCP Dump on the phone server shows the packet coming direct from remote extensions IP. and thus sending the return packet back to that IP.
I have also verified in the advanced settings SIP NAT = Yes.

We think we narrowed it down to contact port not being changed on the sdp packet. Contact still says XXX.XX.XX.XX:5060 instead of the non standard port that was used to set up the call. I have read a few forum posts that talk about force_rport and rewrite_contact. I have set them both to yes within the extension but that made no change.
Is there something else I should check somewhere?

The nat parameter relates to a deprecated channel driver (and the yes value for that is deprecated). Also, it is intended for cases where the peer is inside a remote NAT, not for your case.

However, as far as I know, both the deprecated driver and chan_pjsip expect a one to one port forwarding for Asterisk’s SIP port number. Whilst best current practice is to make that different from 5060, the expectation is that the special value is use inside and outside.

Using chan_pjsip, it is possible to run transports on 5060, for local use, and on the non-standard value, simultaneously. However most would use the non-standard value for everything.

I setting up the non standard transport a pain? we have a bunch of softphone apps out there that I would hate to track down and reconfigure. I can see the transports in the pjsip tab of the asterisk sip settings but I do not see a wat to add another one in there.

I found a forum post that talks about adding a port number to the External IP address defined in asterisk SIP settings. I tried that but it appears that it kills all audio, and still times out.