Астериск за натом. Есть несколько учётных записей. Одна для входящего вызова и пара для исходящих. На одну из исходящих подключается linphone для теста, на другую - мобильное приложение (далее МП), использующее библиотеки liblibphone.
При вызове на linphone всё прекрасно и астер отправляет все RTP потоки на белый адрес маршрутизатора, за которым находится сип клиент. Всё работает без проблем.
В случае с МП два пакета RTP трафика со звуком уходят на серый адрес устройства, на котором запущено МП (10.11.11.116), а потом появляется новый RTP со звуком и уже уходит куда нужно - на адрес хоста маршрутизатора. RTP c видеопотоком как начинает пытаться так и продолжает идти на серый адрес вникуда.
Обе учётных записи отнаследованы от одного шаблона, находятся в одном контексте и т.п..
Слева - вызов на linphone, справа - на МП. С одной стороны можно было бы сказать, что проблема в МП, но узнать о портах/адресах, на которые должны прийти RTP потоки астер может либо из инвайта, либо из SDP. И то и другое при двух вызовах идентично за исключением ID сессий, номера вызова и конкретных портов. А RTP в сторону как linphone, так и МП отправляет именно астериск.
Вот пример 200 OK (SDP) от линфона (в белых адресах заменил октеты X.X.0.130 - адрес маршрутизатора, за которым астер, Y.Y.178.38 - адрес маршрутизатора, за которым linphone и МП):
Код: Выделить всё
2022/10/05 16:39:36.665042 X.X.0.130:43535 -> 10.6.0.49:5060
SIP/2.0 200 Ok
Via: SIP/2.0/UDP Y.Y.178.38:5060;branch=z9hG4bK3f2cff47;rport=55067
From: "11173" <sip:11173@Y.Y.178.38>;tag=as525610e7
To: <sip:11173@X.X.0.130:43535;transport=udp>;tag=vObDmIU
Call-ID: 0192902a0a3666f8283577f12c41a307@Y.Y.178.38:5060
CSeq: 102 INVITE
User-Agent: LinphoneAndroid/4.6.12 (ONEPLUS A5010) LinphoneSDK/5.1.51 (tags/5.1.51^0)
Supported: replaces, outbound, gruu
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO, PRACK, UPDATE
Contact: <sip:11173@X.X.0.130:43535;transport=udp>;expires=3600;+sip.instance="<urn:uuid:b6d0079f-308c-00fe-ba39-a0a69f7143cc>"
Content-Type: application/sdp
Content-Length: 230
v=0
o=11173 991 3834 IN IP4 10.11.11.116
s=Talk
c=IN IP4 10.11.11.116
t=0 0
m=audio 7078 RTP/AVP 8 0 101
a=rtpmap:101 telephone-event/8000
m=video 9078 RTP/AVP 99
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42801F
Код: Выделить всё
2022/10/05 16:40:57.221551 X.X.0.130:55067 -> 10.6.0.49:5060
SIP/2.0 200 Ok
Via: SIP/2.0/UDP Y.Y.178.38:5060;branch=z9hG4bK5801ac5f;rport=55067
From: "11171" <sip:11171@Y.Y.178.38>;tag=as32faddfd
To: <sip:11171@X.X.0.130:55067;transport=udp>;tag=ohbHMWk
Call-ID: 50890fd45ee9254a1bb80ac95d75e5c7@Y.Y.178.38:5060
CSeq: 102 INVITE
User-Agent: LinphoneAndroid/2.4.9 (belle-sip/1.6.3)
Supported: replaces, outbound
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO, UPDATE
Contact: <sip:11171@X.X.0.130:55067;transport=udp>;+sip.instance="<urn:uuid:180a3b1e-5714-4c13-9e57-69adc7a53887>"
Content-Type: application/sdp
Content-Length: 231
v=0
o=11171 3374 2716 IN IP4 10.11.11.116
s=Talk
c=IN IP4 10.11.11.116
t=0 0
m=audio 7076 RTP/AVP 8 0 101
a=rtpmap:101 telephone-event/8000
m=video 9078 RTP/AVP 99
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42801F
Код: Выделить всё
[general]
context=cnt1
allowoverlap=no
allowguest=yes
udpbindaddr=0.0.0.0
tcpenable=no
transport=udp
srvlookup=no
externaddr=Y.Y.178.38
localnet=192.168.0.0/255.255.0.0 ; RFC 1918 addresses
localnet=10.0.0.0/255.0.0.0 ; Also RFC1918
localnet=172.16.0.0/12 ; Another RFC1918 with CIDR notation
localnet=169.254.0.0/255.255.0.0 ; Zero conf local network
videosupport=yes
disallow=all
allow=alaw
allow=ulaw
allow=h264
nat=no
canreinvite=no
directmedia=no
[remote](!)
type=friend
host=dynamic
nat=force_rport,comedia
canreinvite=yes
qualify=yes
context=cnt1
Подскажите пожалуйста, в какую сторону копать?