我们使用PJSIP创建了一个VOIP应用程序并实现了后台运行,可以正常运行几个小时 . 之后它停止工作(它不再接听电话) .

其他人遇到过这个问题吗?我相信它只在ios7中

PJSIP TCP套接字标记为VOIP

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.


    [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
    [application setKeepAliveTimeout:600 handler: ^{
        [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
    }];

}

- (void)keepAlive {
    int i, timeout = KEEP_ALIVE_INTERVAL;

    if (!pj_thread_is_registered())
    {
        pj_thread_register("ipjsua", a_thread_desc, &a_thread);
    }

    for (i = 0; i < (int)pjsua_acc_get_count(); ++i) {
        if (pjsua_acc_is_valid(i)) {
            pjsua_acc_config acc_cfg;

            pjsua_acc_get_config(i, &acc_cfg);
            if (!acc_cfg.reg_uri.slen)
                continue;
            if (acc_cfg.reg_timeout < timeout) {
                acc_cfg.reg_timeout = timeout;
                pjsua_acc_modify(i, &acc_cfg);
            } else {
                pjsua_acc_set_registration(i, PJ_TRUE);
            }
        }
    }
}