1) Создать объект PJSIP_CALL, который будет использоваться для установления вызова и передачи видео
2) Установить параметры вызова, такие как номер телефона, имя контакта
3) Вызвать метод PJSIP_CALL_Create, чтобы создать вызов
4) Вызвать метод PJSIP_Audio_SendFrame для отправки аудиоданных в вызов
5) Вызывать методы PJSIP_Media_SetSource и PJSIP_Media_GetOutput, чтобы установить источник аудио и получить выходной поток
6) Вызывать PJSIP_Play для воспроизведения аудио
7) После окончания вызова вызвать PJSIP_Release для освобождения ресурсов
Для буферизации звука в PJSIP(PJSUA) необходимо использовать класс AudioDevice. Этот класс позволяет получать звуковой буфер и сохранять его в памяти для дальнейшей обработки и воспроизведения .
const audioDevice = pjsuaX.createAudioDevice()
audioDevice.bufferSize = 2048
audioDevice.sampleRate = 16000
audioDevice.playback = false
audioDevice.stop()
let buf = audioDevice.readAudioBuffer(10)
for(i = 0 ; i <buf.legth; ++i){
if (buf[i] =!0){
("audio:", buf[i])
}
}
Для тестирования корректности работы протокола PJSIP существую различные наборы тестов. Один из наиболее популярных наборов тестовназывается PJSIP Test Suite, PJSIP MWI Test Suite. Каждый из этих наборов тестов предназначен для проверки определенных функций PJSIP. Для запуска тестов можно использовать утилиту PJSIP Tools, которая постовляется вместе с пакетом PJSIP.
Для запуска PJSIP Test Suite можно выполнить следующую команду
sudo apt install libpjsip-dev libpjsipua2-dev
./pjsip_sip_testsuite -s localhost:5060 -u admin -p admin --test_only --output=json
После установление конечной точки в PJSIP можно использовать функцию
pjsua_set_endpoint_state(). Функция позволяет установить состояние конечной точки, включая ее сброс
Настройка регистров в pjsip
создать регистры для хранения информации о вызовах
зарегистрировать регистры в pjsip - pjsua_register_registar()
обработать вызовы с помощью регистров, например проверять наличие свободных номеров
Нулевая конечная точка (0.0.0.0) используется для приема входящих вызовов и отправки исходящих вызовов. Не имеет состояния данных. Состояние данных хранят конечные точки хранения настроек вызова и конечные точки для записи аудио
Конечная точка для хранения настроек вызовов представляет способ хранения настроек, связанных с вызовами, таких как настройки кодеков и настройки маршрутизации вызовов. Для создания конечной точки для хранения настроек необходимо:
Определить структуру данных для хранения настроек. Например, это может быть струтура, содержащая поля для настройки кодеков, маршрутизации и других параметров вызова
Создать объект типа "pjsip-endpoint" и установить его свойства (имя и IP адрес)
Зарегистрировать конечную точку с помощью функции pjsua-registrar-register()
Обрабатывать вызовы, используя настройки, хранящиеся в конечной точке
При необходимости можно обновлять настройки вызова в конечной точке, используя соответвующие функции PJSIP
Конечная точка для записи аудио исползуется для зааписи голосового трафика, который происходит между двумя абонентами. Она позволяет записывать аудио-файлы, которые могут быть использованы для анализа и обработки голосового трафика
Создать структуру данных для записи аудио-файлов. Это может быть, например, структура, которая содержит информацию о времени записи, уровне громкости и других параметрах.
Создать объект типа "pjsip-endpoint" и установить его свойства (имя и IP адрес)
Зарегистрировать конечную точку с помощью функции pjsua-registrar-register()
Использовать функции записи аудио, такие как pjsip_record_start() и остановить запись аудио-файлов соответственно
При необходимости, можно обновлять параметры записи аудио, используя функции "pjsip_record_start()" и "pjsip_record_stop()"
При необходимости, можно обновлять параметры записи аудио, используя функции "pjsip_record_param_set()" и pjsip_record_param_get()
В PJSIP существуют несколько уровней буферизации, каждый из которых выполняет определенную функцию
Буферизация формата - это буфер, который хранит данные, поступающие в виде медиафайлов, например аудио или видео. Эти данные сохраняются в буфере до тех пор, пока не будет достигнут определенный размер буфера или не будет завершена передача данных
Буферизация потока - это буфер для потоков данных, которые передаются между PJSIP и приложением, которое использует PJSIP. (буфер для медиаданных, которые )
Буфер событий - это буфер, в котором храняться события, происходящие во время вызова, такие как уведомления о состояниивызова или сообщения о завершении вызова.
Буфер состояния - это буфер, который содержит информацию о состоянии вызова, такую как идентификатор вызова, идентификатор участника, статус вызова