Я работаю над некоторым приложением для программного телефона на основе PJSIP и столкнулся с такой проблемой: когда приложение работает через VPN, адрес моего интерфейса LAN встречается в атрибутах сеанса SDP, а не в адресе интерфейса VPN, который используется SIP для установки sh подключение. В результате после того, как соединение установлено, сторона B пытается передать RTP-пакеты по неизвестному адресу. Конечно, я могу настроить PBX для обработки моего приложения, как если бы оно находилось за NAT, чтобы решить эту проблему. Но что я хочу знать: есть ли какой-нибудь чистый способ (не как изменить текст SDP перед отправкой) для установки адреса RTP-соединения на стороне приложения? Поэтому, когда приложение регистрируется через VPN, оно будет использовать адрес, полученный сетью VPN.
Это часть INVITE:
INVITE sip:someoneB@10.125.1.150:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.125.1.79:61589;rport;branch=z9hG4bKPja32fd2e9e5cc426cb0b44c973b620d8b
Max-Forwards: 70
From: sip:someoneA@10.125.1.150;tag=ca6940355e7f42f29afd2aa86add5c6f
To: sip:someoneB@10.125.1.150
Contact: <sip:someoneA@10.125.1.79:61589;ob>
...
Content-Type: application/sdp
Content-Length: 432
...
m=audio 4000 RTP/AVP 0 9 96
c=IN IP4 192.168.1.107
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.107
...
Моя цель в этом примере - установить 10.125.1.79 адрес в части SDP.
Как PJSIP выбирает интерфейс для медиапотока? Как изменить атрибуты SDP, соответствующие потоку RTP, во время сеанса? Есть ли какая-то конфигурация или функции, предоставляемые библиотекой для достижения этой цели?