iOS 使用 SIP 呼叫的 baresip
iOS baresip with SIP Calling
我正在尝试开发一个提供 Audio
和 Video
调用的应用程序,现在我正在关注 baresip
库。
然后我在点击按钮上写了下面的代码:
@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)
}
现在,我正在接到从一台设备到另一台设备的呼叫,但它挂起了我的视图,为什么它是挂起视图?我花了很多时间,有人可以帮助我吗?
我认为真正的问题是函数最后一行的 re_main()
函数。它正在启动线程的循环执行。因此,除非您调用 re_cancel()
函数,否则您的进程执行将保留在线程中。
解法:
将您的 re_main()
函数放在用户启动的全局线程上将解决您的问题。它将在用户启动的全局队列上启动所有其他进程,并且主线程将免费用于您的 UI 交互目的。
DispatchQueue.global(qos: .userInitiated).async {
re_main(nil)
}
我正在尝试开发一个提供 Audio
和 Video
调用的应用程序,现在我正在关注 baresip
库。
然后我在点击按钮上写了下面的代码:
@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)
}
现在,我正在接到从一台设备到另一台设备的呼叫,但它挂起了我的视图,为什么它是挂起视图?我花了很多时间,有人可以帮助我吗?
我认为真正的问题是函数最后一行的 re_main()
函数。它正在启动线程的循环执行。因此,除非您调用 re_cancel()
函数,否则您的进程执行将保留在线程中。
解法:
将您的 re_main()
函数放在用户启动的全局线程上将解决您的问题。它将在用户启动的全局队列上启动所有其他进程,并且主线程将免费用于您的 UI 交互目的。
DispatchQueue.global(qos: .userInitiated).async {
re_main(nil)
}