Приложение Iphone Voip - Фоновая обработка и сохранение нат-пинхола в живых - PullRequest
5 голосов
/ 09 января 2012

Я тестирую sip-клиент Voip, написанный разработчиком приложения для iphone, использующим PJSip. Я лично немного занимался разработкой SIP, но не эксперт.

С нашим программным переключателем VOIP (пакет Acme / Broadsoft) он позаботится обо всей обработке Nat, динамически определяя лучшее время перерегистрации, чтобы сохранить точечную пробоину Nat на устройстве nat. Обычно, когда iphone находится за NAT, это время составляет 60-90 секунд.

Приложение Iphone использует TCP и успешно работает с Backgrounding. Очевидно, фоновый режим идеально подходит для экономии заряда батареи. Вызов разбудит телефон, и вы сможете прослушать звонок.

Проблема в том, что когда приложение переходит в фоновый режим, оно не может держать Nat Pinhole открытым. Это означает, что брандмауэр всегда будет отклонять новые входящие вызовы от доступа к приложению Iphone после закрытия отверстия. Это влияет на то, что входящие вызовы работают с приложением в течение нескольких минут, затем не работают в течение определенного периода, а затем, когда приложение выходит из фона и снова регистрируется, входящие вызовы снова работают.

Согласно яблочной документации: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW3

У них есть встроенные специальные исключения для приложений VoIP для фоновой обработки, которые мы можем: 1. Настройте сокеты приложений так, чтобы они могли обрабатывать входящие сообщения. Это не поможет, так как обмен сообщениями никогда не дойдет до приложения, если отверстие nat закрыто. 2. Используйте Keep alive, но минимальное время составляет 600 секунд. Это также означает, что отверстие будет закрыто.

Есть ли какой-нибудь умный способ, которым приложение может отправлять регистрационное сообщение Voip Sip, скажем, каждые 60 секунд или около того, оставаясь в фоновом режиме. Или приложение может просыпаться каждые 60 секунд, выполнять какую-то работу, а затем закрываться.

Я действительно озадачен тем, есть ли на рынке другие sip-приложения, которые обошли эту проблему.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2014

Для решения этой проблемы необходимо, чтобы Acme отправлял TCP keepalive на зарегистрированные на него устройства и устанавливал срок действия не менее 600 с. Вы могли бы хотеть это выше, потому что телефону потребуется некоторое время для перерегистрации, так что что-то вроде 720s будет работать лучше.

Это должно держать отверстие NAT открытым, если вы установите достаточно низкий интервал keepailve, около 30 секунд или около того. NAT должен допускать более высокий интервал, но это может потребовать некоторого тестирования.

Я знаю, что ACME SBC могут справиться с этим.

0 голосов
/ 17 января 2012

Протоколы TCP keep aive разрешены, если интервал не слишком короткий, я думаю, что это должно поддерживать открытый сеанс NAT.Можете ли вы сказать нам, если это помогает или нет?

...