I think I finally understood the issue/solution, but I’d like to make sure I’m correct:
In Diana Cionoiu’s famous article on Freshmeat, regardless of whether SIP end-points use a public IP or are behind a NAT, RTP packets flow directly between the two SIP end-points because the SIP server only acts… as an SIP server, meaning it only acts as a registrar (for SIP end-points to make themselves know with an IP + RTP ports), and then as a Central office (to ring the other SIP end-point, and close the connection when an SIP end-point decides to hangup)
OTOH, for IP PBX’s like Asterisk to provide PBX services (eg. call transfer, call parking, etc.), it must remain in the loop, and hence, by default (canreinvite=no), all RTP packets always go through Asterisk, even if both SIP end-points live in the same network as the Asterisk server (and hence, since NAT is not involved, there’s no need for any kung-fu with rewriting information in SDP packets and asking the NAT box to open the relevant ports for RTP)
Is this correct?