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)
}
Другие вопросы по тегам