У меня есть некоторые встроенные устройства, которые не имеют аудиоустройства по умолчанию. Они общаются друг с другом через ПЛИС. Итак, мой вопрос, как мне захватить / воспроизвести аудио из pjsip в pcm, чтобы отправить / получить его с FPGA? Я знаю, что есть pjmedia_mem_player_create () и pjmedia_mem_capture_create () , но мне не удается найти какую-либо полезную информацию об использовании этих функций.
Я пробовал следующее фрагмент кода, но утверждение не выполнено, так как один из параметров функции является «пустым».
Ошибка: pjmedia_mem_capture_create: утверждение `pool && buffer && size && clock_rate && channel_count && samples_per_frame && bits_per_sample && p_port ' не удалось.
Примечание. В основном я использую pjsua2 для всего остального, например для регистрации, транспорта и т. д. c. Кроме того, для звука по умолчанию установлено значение null с помощью ep.audDevManager (). SetNullDev (); , поскольку без этого выполнение / получение вызова просто не удастся?!
void MyCall::onCallMediaState(OnCallMediaStateParam &prm){
CallInfo ci = getInfo();
pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0);
pj_pool_t *pool = pj_pool_create(&cp.factory, "POOLNAME", 2000, 2000, NULL);
void *buffer;
pjmedia_port *prt;
#define CLOCK_RATE 8000
#define CHANELS 1
#define SAMPLES_PER_FRAME 480
#define BITS_PER_SAMPLE 16
pjmedia_mem_capture_create( pool, //Pool
buffer, //Buffer
2000, //Buffer Size
CLOCK_RATE,
CHANELS,
SAMPLES_PER_FRAME,
BITS_PER_SAMPLE,
0, //Options
&prt); //The return port}
UPDATE : Утверждение не выполнено, потому что для переменной буфера не выделена память. Выделите вдвое большее количество выборок на кадр, чтобы иметь достаточную память.
buffer = pj_pool_zalloc(pool, 960);
Также необходимо зарегистрировать обратный вызов с pjmedia_mem_capture_set_eof_cb2()
(два в конце необходимы для PJSIP 2.10 или позже) По всей видимости, оттуда можно использовать буфер. Просто моя реализация atm не выполняет обратный вызов.