Я тестирую 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-приложения, которые обошли эту проблему.