Чтобы получить доступ к проекту с домашней страницы, вам нужно сначала создать Virtual Host .
Самый простой способ сделать это - использовать Wamp's Add a Virtual Узел хоста.
blockquote>Просто выполните следующие действия:
- Создайте папку внутри каталога «C: \ wamp \ www \» и дайте ей имя, которое вы хотите дать на свой сайт, например. ' MySite . Таким образом, путь будет «C: \ wamp \ www \ mysite».
- Теперь откройте домашнюю страницу localhost в своем браузере, в меню «Сервис» нажмите «Добавить ссылку виртуального хоста».
- Введите имя виртуального хоста , это имя должно быть именем папки, которую мы создали внутри каталога www , т.е. « mysite ».
- Введите абсолютный путь виртуального хоста, то есть «C: \ wamp \ www \ mysite \» без кавычек, и нажмите кнопку ниже: «Запустите создание VirtualHost».
- Создан виртуальный хост, теперь вам просто нужно «Перезапустить DNS». Для этого щелкните правой кнопкой мыши значок меню лотка сервера wamp, выберите «Сервис»> «Перезапустить DNS» и снова щелкните значок меню в лотке.
- Все настройки! Теперь просто создайте страницу index.php внутри каталога «C: \ wamp \ www \ mysite \». Добавьте код в файл index.php, например
<?php echo "<h1>Hello World</h1>"; ?>
Теперь вы можете получить доступ к проектам с домашней страницы localhost. Просто нажмите ссылку на проект, и на экране появится «Hello World».
Ожидается, что вы вызываете логику ответа в этом обратном вызове делегата.
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
// configure audio session
// Performing call answering logic
// Call action to fulfill after answering logic is finished
action.fulfill()
}
Я использую PJSIP для вызовов VoIP, и вот так выглядит моя логика ответа
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
guard let call = CallList.sharedInstance().call(withUUID: action.callUUID.uuidString) else {
action.fail()
return
}
CallAudio.configureAudioSession()
// Answer call (signal Pjsua)
Pjsua2Wrapper.sharedInstance()?.answerCall(withCallUUID: call.callUUID, completion: { error in
if error != nil {
// we have error on answer call
action.fail()
} else {
action.fulfill()
}
})
}
[1112 ] Обработчик завершения ответа на вызов вызывается после завершения ответа, поэтому таймер запускается при подключении к вызову.
Проблемы со звуком в PJSIP
Если вы используете PJSIP, вам нужно остановить аудио ввод / вывод при инициализации PJSIP, например (C ++ ):
enableSoundDevice( false );
А когда ответит на вызов, CallKit
ответит функцией provider(_:didActivate:)
. Вот где вам нужно активировать звуковое устройство PJSIP, чтобы получить звук.
Это пример из моего кода:
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
// Start call audio I/O once CallKit activates AVAudioSession
Pjsua2Wrapper.sharedInstance()?.enableSoundDevice(true)
}
И, разумеется, когда вызов завершен или установлен на удержание, когда CallKit
отвечает provider(_:didDeactivate:)
, вы снова отключаете звуковое устройство PJSIP и вот и все
func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {
// Stop call audio IO
Pjsua2Wrapper.sharedInstance()?.enableSoundDevice(false)
}