#ios #swift #baresip
#iOS #swift #baresip
Вопрос:
Я пытаюсь разработать приложение, которое обеспечивает вызов 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(amp;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. Ответить на это непросто, это может быть что угодно … замораживание пользовательского интерфейса часто связано с проблемами очереди
2. @ 3000 Я не писал никакого кода, я просто пишу только нажатие кнопки.
3. Поиск пользовательского интерфейса, основного потока, очереди отправки и т.д.
Ответ №1:
Я думаю, что настоящая проблема заключается в вашей re_main()
функции в последней строке функции. Это запускает выполнение цикла потока. таким образом, до тех пор, пока вы не вызовете re_cancel()
функцию, ваше выполнение процесса будет оставаться в потоке.
Решение: Включение вашей re_main()
функции в инициируемый пользователем глобальный поток решит вашу проблему. это запустит все другие процессы в глобальной очереди, инициированной пользователем, и основной поток будет свободен для целей взаимодействия с вашим пользовательским интерфейсом.
DispatchQueue.global(qos: .userInitiated).async {
re_main(nil)
}