我一直在用操作系统Raspbian Stretch Lite在Raspberry Pi 3 Model B上构建PJSIP 2.7.1。需要视频,因此V4L2、SDL2和OpenH264都已构建并安装。当我在RPi上运行PJSUA时,打另一部启用视频的软电话,一切都很顺利,音频和视频都能工作。不过,每次挂断时都会出现Segmentation故障。
RPi是在没有UI的情况下使用的,我在所有的构建/运行中都使用它。相机是树莓派相机模块v2。
以下是一段来自"gdb"回溯的信息片段,当停止视频呼叫并出现segfault时。我还尝试了样本"vid_streamtil",在退出时它也给出了segfault。Raspian Jessie Lite上的相同设置没有任何区别。
有人知道可能是什么问题吗?这可能是SDL的问题吗,因为在停止SDL视频流时发生了segfault?经过几天的努力,任何评论都将不胜感激。
21:53:22.897 pjsua_app.c。。。。。。呼叫0已断开[原因=200(正常呼叫清除)]
21:53:22.998 pjsua_app_comm。。。。。。
[DDISCONCTD]收件人:sip:100@10.0.1.16;tag=nSgBRrGkco4MC2Y00HkhCS0M1xWbDNpH
Call time: 00h:00m:08s, 1st res in 1349 ms, conn in 2083ms #0 audio PCMU @8kHz, sendrecv, peer=10.0.1.16:16438 SRTP status: Not active Crypto-suite: RX pt=0, last update:00h:00m:04.400s ago total 201pkt 32.1KB (40.2KB +IP hdr) @avg=27.6Kbps/34.5Kbps pkt loss=0 (0.0%), discrd=0 (0.0%), dup=0 (0.0%), reord=0 (0.0%) (msec) min avg max last dev loss period: 0.000 0.000 0.000 0.000 0.000 jitter : 0.500 14.151 20.000 14.750 4.127 TX pt=0, ptime=20, last update:00h:00m:04.301s ago total 33pkt 5.2KB (6.6KB +IP hdr) @avg=4.5Kbps/5.6Kbps pkt loss=0 (0.0%), dup=0 (0.0%), reorder=0 (0.0%) (msec) min avg max last dev loss period: 0.000 0.000 0.000 0.000 0.000 jitter : 8.875 8.875 8.875 8.875 0.000 RTT msec : 3.143 3.143 3.143 3.143 0.000 #1 video H264, sendrecv, peer=10.0.1.16:11078 SRTP status: Not active Crypto-suite: RX pt=97, size=352x288, fps=15.00, last update:00h:00m:03.933s ago total 151pkt 126.7KB (132.7KB +IP hdr) @avg=109.2Kbps/114.4Kbps pkt loss=0 (0.0%), discrd=0 (0.0%), dup=0 (0.0%), reord=0 (0.0%) (msec) min avg max last dev loss period: 0.000 0.000 0.000 0.000 0.000 jitter : 0.800 18.716 25.311 21.577 4.489 TX pt=97, size=720x480, fps=15.00, last update:00h:00m:04.235s ago total 323pkt 279.3KB (292.2KB +IP hdr) @avg=240.7Kbps/251.8Kbps pkt loss=0 (0.0%), dup=0 (0.0%), reorder=0 (0.0%) (msec) min avg max last dev loss period: 0.000 0.000 0.000 0.000 0.000 jitter : 0.000 0.000 0.000 0.000 0.000 RTT msec : 0.000 0.000 0.000 0.000 0.000
21:53:22.998 pjsua_media.c。。。。。。调用0:正在取消初始化媒体。。
21:53:22.998 pjsua_media.c。。。。。。。。媒体流call00:0是销毁
21:53:22.998 pjsua_vid.c。。。。。。。。正在停止视频流。。
21:53:22.903 v4l2_dev.c。。。。。。。。。正在停止v4l2视频流mmal服务16.1
[线程0x6f2a2450(LWP 2187)退出]
21:53:24.006 pjsua_vid.c。。。。。。。。。窗口1:正在销毁。。
21:53:24.006 v4l2_dev.c。。。。。。。。。。正在停止v4l2视频流mmal服务16.1
21:53:24.006视频端口。。。。。。。。。。关闭mmal服务16.1..
21:53:24.006 v4l2_dev.c。。。。。。。。。。正在停止v4l2视频流mmal服务16.1
21:53:24.006 v4l2_dev.c。。。。。。。。。。破坏v4l2视频流mmal服务16.1
21:53:24.007 sdl_dev.c。。。。。。。。。。正在停止sdl视频流
21:53:24.007视频端口。。。。。。。。。。正在关闭SDL渲染器。。
21:53:24.007 sdl_dev.c。。。。。。。。。。正在停止sdl视频流
21:53:24.068 sdl_dev.c!。。。。。。。。。正在停止sdl视频流
21:53:24.068 pjsua_vid.c。。。。。。。。。窗口0:正在销毁。。
21:53:24.068 sdl_dev.c。。。。。。。。。。正在停止sdl视频流
21:53:24.069视频端口。。。。。。。。。。正在关闭SDL渲染器。。
21:53:24.069 sdl_dev.c。。。。。。。。。。正在停止sdl视频流
[线程0x6fecf450(LWP 2186)退出]
线程4"pjsua-armv7l-un"接收信号SIGSEGV,分段过错
[切换到线程0x757c9450(LWP 2164)]
0x7004bb28英寸??()
(gdb)bt
#0 0x7004bb28英寸??()
#GLES2_DestroyTexture中的1 0x76f2c4e0(渲染器=,纹理=0x74e04098)
在/home/pi/sdl2/sdl2-2.0.7/src/render/opengles2/SDL_render_gles2.c:931
#在/home/pi/sdl2/sdl2-2.0.7/src/render/SDL_render.c:2064 的SDL_DestoryTexture_REAL中的2 0x76f23f3c(纹理=0x74e04098)
#sdl_destroy()中的3 0x000b3778
#sdl_destroy_all()中的4 0x000b37ac
#job_thread()中的5 0x000b3a30
#thread_main()中的6 0x0011fa84
#pthread_create.c:335 的start_thread(arg=0x757c9450)中的7 0x76bd7fc4
#8 0x76a49c68英寸??()在/sysdeps/unix/sysv/linux/arm/clone.S:76来自/lib/arm-linux-gneabihf/libc.so.6
回溯已停止:上一帧与此帧相同(已损坏堆栈?)
(gdb)
终于找到了解决方案!只需将SDL_VIDEODRIVER和SDL_RENDER_DRIVER设置为匹配的设备!
例如,我将SDL_VIDEODRIVER设置为虚拟SDL_RENDER_DRIVER=软件
欢迎光临!