IOS Baresip с SIP Calling
Я пытаюсь разработать приложение, которое обеспечивает Audio
а также Video
звоню, сейчас слежу baresip
Библиотека для того же.
и я написал следующий код на кнопку Click:
@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)
}
Теперь я получаю вызов с одного устройства на другое, но он зависает, почему он зависает? Я провел много времени, кто-нибудь может мне помочь?
1 ответ
Я думаю, что настоящая проблема заключается в вашем re_main()
функция в последней строке функции. Он запускает выполнение цикла в потоке. так до тех пор, пока вы не позвоните re_cancel()
Функция вашего выполнения процесса останется в потоке.
Решение: положить ваш re_main()
Функция на глобальном потоке, инициированном пользователем, решит вашу проблему. он запустит все другие процессы в глобальной очереди, инициированной пользователем, и основной поток будет свободен для вашей цели взаимодействия с пользовательским интерфейсом.
DispatchQueue.global(qos: .userInitiated).async {
re_main(nil)
}