Я пытаюсь сделать sip-видеовызов с помощью Pjsip / Pjsua на моем Raspberry Pi 3. Перед написанием кода я использую основной пример приложения для тестирования различных вариантов. Кажется, все работает (регистрация, аудиовызов, ..), но когда я пытаюсь начать видеовызов, программы останавливаются со следующим сообщением:
pjsua-armv7l-unknown- linux -gnueabihf: ../src/pjmedia-videodev/v4l2_dev.c:737: vid4lin_stream_get_frame_mmap: Буфер кадра подтверждения "!" Слишком мал для v4l2 ". * Я много искал, включая исходный код:
/* get frame from mmap */
static pj_status_t vid4lin_stream_get_frame_mmap(vid4lin_stream *stream, pjmedia_frame *frame)
{
struct v4l2_buffer buf;
pj_time_val time;
pj_status_t status = PJ_SUCCESS;
pj_bzero(&buf, sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
status = xioctl(stream->fd, VIDIOC_DQBUF, &buf);
if (status != PJ_SUCCESS)
return status;
if (frame->size < buf.bytesused) {
/* supplied buffer is too small */
pj_assert(!"frame buffer is too small for v4l2");
status = PJ_ETOOSMALL;
goto on_return;
}
Так что я понимаю, что pjmedia_frame имеет размер меньше, чем буфер v4l2, что привело к моей ошибке. Мой вопрос прост: как я могу изменить эту настройку? Я попробовал все в образце приложения: изменение разрешения, битрейта, fps, .. Я нашел несколько ресурсов, говорящих об изменении уровня профиля h264 ... хорошо, но где мне его установить? Это внутри менеджера v4l2? или прямо в приложении? Как мне это сделать ? Я играл с различными опциями в v4l2 до , чтобы уменьшить битрейт / разрешение, чтобы иметь небольшой буфер, но все равно получал ту же ошибку.
На данный момент я совершенно не в курсе.
Для информации, я скомпилировал PJsip, используя openh264 (без libx264), как предложено PjSip.
Спасибо за вашу помощь / идеи;)