我尝试在我的树莓派 3 上使用 Pjsip/Pjsua 进行 sip 视频通话。在编码之前,我使用主示例应用程序来测试不同的选项。一切似乎都正常(注册,音频通话,..)但是当我尝试开始视频通话时,程序停止并显示以下消息:
pjsua-armv7l-unknown-linux-gnueabihf: ../src/pjmedia-videodev/v4l2_dev.c:737: vid4lin_stream_get_frame_mmap: Assertion `!"frame buffer is too small for v4l2"' failed.
我搜索了很多,包括源代码:
/* 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 缓冲区,导致我失败。我的问题很简单:如何更改此设置?我在示例应用程序中尝试了 evetything:更改分辨率、比特率、fps,.. 我发现一些资源说要更改h264 配置文件级别.. 好的,但是我在哪里设置呢?它在 v4l2 管理器中吗?或直接在应用程序中?我该怎么做 ?我在 v4l2 中使用了不同的选项来降低比特率/分辨率,以便有一个小的缓冲区,但仍然得到相同的错误。
在这一点上,我完全无能为力。
有关信息,我按照 PjSip 的建议使用 openh264(无 libx264)编译了 PJsip。
感谢您的帮助/想法;)