Назад | Перейти на главную страницу

как UAC должен обрабатывать SIP 183 Session Progress

У меня такой сценарий:

2 UAC пытается разговаривать через удаленный SIP-сервер (openSER / Kamailio 3.1.3) = клиентская инфраструктура. Программное обеспечение UAC было разработано в локальной тестовой инфраструктуре с использованием Asterisk, где можно было установить нормальный вызов.

Проблема в том, что при тестировании клиентской инфраструктуры нет звука.

Я не знаю полной клиентской инфраструктуры, но из журналов / ответов сервера (поля Routing Header) можно сделать вывод, что есть прокси-сервер авторизации и CiscoSystem SIP GW, а также PSTN. И что немаловажно, мы за NAT, а клиент также за NAT. AFAIK там не используется STUN-сервер.

Основное различие в потоке вызовов заключается в том, что в тестовой инфраструктуре мы всегда получали 180 сообщений (звонков), а в клиентской инфраструктуре мы получали 183 Session in Progress. В логах видно, что оба устройства начинают отправлять потоки rtp, но звука по-прежнему нет.

Еще у меня есть коммерческое ПО, с которым мы тестировали клиентскую инфраструктуру, и оно работает. Мы сравнили сообщения, отправляемые коммерческим программным обеспечением и нашим клиентом, и почти никакой разницы.

Единственное отличие, которое мне удалось найти, это то, что в сообщениях после цикла inv / 407 / ack:

коммерческий софт:

начать новую новую ветку номер x

наш клиент:

начать новую ветку с номером y

Может ли это быть причиной потери звука? Этот же сценарий нормально работает в Asterisk.

(Я предположил, что вовлеченные объекты являются устройствами RFC 3261 SIP, и проигнорировал взаимодействие с устройствами RFC 2543.)

Если задействованы NAT, самое первое, что вы должны проверить:

  • IP-адреса в вашем c= заголовки в полезных данных SDP
  • IP-адреса в вашем Contact заголовки

В частности, все эти IP-адреса должны быть доступны другой стороне.

В ваших сценариях «после inv / 407 / ack» ACK для ответа, отличного от 2xx, должен иметь такой же branch мне бы. Однако ответ 2xx прекращается транзакции INVITE, поэтому ACK на ответ 2xx будет иметь разные branch к ПРИГЛАШЕНИЮ.

(Хотя конечно RFC 3261 это исчерпывающий ресурс по основам SIP, я считаю RFC 3665 чрезвычайно полезно, чтобы увидеть, как все работает.)