树莓派使用GStreamer推流至RTMP服务器出现未知Segmentation fault如何解决
GStreamer RTMP推流段错误问题解决方案
根因说明
你使用的GStreamer 1.19.0属于开发迭代版本,rtmp2sink 插件在该版本存在未修复的野指针内存访问漏洞,在接收 flvmux 输出的流媒体数据时会触发内存越界,最终导致段错误,该问题仅在RTMP推流场景触发,所以替换为 fakesink、hlssink 时运行正常。
可行解决方法
- 优先替换为稳定版本GStreamer
1.19.x为非稳定开发版,建议降级到1.18.x稳定版或者升级到1.20.3及以上的后续稳定版,rtmp2sink 的段错误漏洞在1.20.3版本已被正式修复,直接安装对应稳定版即可解决问题。 - 调整管道参数临时规避
如果暂时不能更换GStreamer版本,可以通过修改管道配置解决问题:- 将 rtmp2sink 替换为兼容性更好的旧版 rtmpsink 插件,同时调整x264编码参数适配RTMP协议要求,修改后的管道如下:
gst-launch-1.0 --no-fault -v \ rpicamsrc ! queue \ ! x264enc bitrate=1000 byte-stream=true ! video/x-h264,profile=baseline ! queue \ ! h264parse ! video/x-h264 ! queue \ ! flvmux streamable=true name=mux ! queue \ ! rtmpsink location=rtmp://my-cool-server.com/live/key sync=true- 如果坚持使用 rtmp2sink,可以将
async-connect=true修改为async-connect=false,1.19.0版本中该插件的异步连接逻辑存在内存泄漏问题,关闭异步连接即可规避崩溃。
- 修复编译依赖问题
源码编译GStreamer前先安装librtmp-dev依赖包,之后重新编译 gst-plugins-bad 组件,确保RTMP相关插件完整编译,避免依赖缺失导致的运行异常。
内容的提问来源于stack exchange,提问作者acsmith
相关产品推荐
相关产品推荐

