首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于SIP调用的iOS裸SIP

基于SIP调用的iOS裸SIP
EN

Stack Overflow用户
提问于 2019-04-24 13:34:10
回答 1查看 830关注 0票数 1

我正在尝试开发一个提供AudioVideo调用的应用程序,现在我也在跟踪baresip库。

我在按钮点击上写了下面的代码:

代码语言:javascript
运行
复制
@IBAction func btnCallClick(_ sender: Any) {
    guard libre_init() == 0 else { return }

    // Initialize dynamic modules.
    mod_init()

    // Make configure file.
    if let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
        conf_path_set(path)
    }
    guard conf_configure() == 0 else { return }

    // Initialize the SIP stack.
    guard baresip_init(conf_config(), 0) == 0 else { return }
    guard ua_init("SIP", 1, 1, 1, 0) == 0 else { return }

    // Load modules.
    guard conf_modules() == 0 else { return }

    let addr = "sip:101@xxx.xxx.com:port;auth_pass=aaaa;transport=udp;answermode=auto"

    // Start user agent.
    guard ua_alloc(&agent, addr) == 0 else { return }

    // Make an outgoing call.
    guard ua_connect(agent, nil, nil, "sip:100@xxx.xxx.com", VIDMODE_OFF) == 0 else { return }

    // Start the main loop.
    re_main(nil)
}

现在,我接到一个从一个设备到另一个设备的电话,但是它挂起了我的视图,为什么是挂起的视图?我花了很多时间,有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-30 09:33:57

我认为真正的问题是函数最后一行的re_main()函数。它正在启动线程的循环执行。因此,除非调用re_cancel()函数,否则进程的执行将保持在线程中。

解决方案:将您的re_main()函数放在用户启动的全局线程上,将解决您的问题。它将启动用户发起的全局队列上的所有其他进程,并且主线程将为您的UI交互目的免费。

代码语言:javascript
运行
复制
DispatchQueue.global(qos: .userInitiated).async {
        re_main(nil)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55831363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档