Python OpenCV通过RTSP读取摄像头触发Segmentation Fault求助
解决OpenCV读取RTSP URL时崩溃的问题
我之前在Ubuntu 16.04搭配OpenCV 3.x环境下,也碰到过类似的RTSP流读取崩溃问题,结合你的环境信息(Python 2.7.12、OpenCV 3.4.0、Ubuntu 16.04.4 LTS)和gdb回溯指向libltdl.so.7的情况,大概率是动态链接库兼容性或者OpenCV的FFmpeg依赖配置问题,给你几个可行的排查和解决步骤:
检查OpenCV的FFmpeg支持状态
OpenCV读取RTSP流完全依赖FFmpeg后端,首先要确认你的OpenCV编译时是否启用了FFmpeg支持。运行以下命令查看编译信息:python -c "import cv2; print(cv2.getBuildInformation())"在输出结果中找到
FFmpeg相关部分,如果显示为NO,说明你的OpenCV没有集成FFmpeg,需要重新编译OpenCV并在编译时启用FFmpeg选项(配置时添加-D WITH_FFMPEG=ON)。修复
libltdl.so.7动态链接问题
回溯信息指向这个库,可能是库文件损坏、版本不兼容或软链接错误:- 先检查库文件是否存在及链接状态:
ls -l /usr/lib/x86_64-linux-gnu/libltdl.so.7 - 如果链接失效,重新建立正确的软链接(根据系统中实际存在的libltdl版本调整,比如
libltdl.so.7.3.0):sudo ln -sf /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.0 /usr/lib/x86_64-linux-gnu/libltdl.so.7 - 或者直接重新安装该库:
sudo apt-get update && sudo apt-get install --reinstall libltdl7
- 先检查库文件是否存在及链接状态:
调整RTSP读取的参数配置
有时候直接使用RTSP URL会因为后端自动选择或网络缓存问题导致崩溃,可以强制指定FFmpeg后端并设置缓存:import cv2 url = "rtsp://admin:admin@192.168.0.1:554" # 强制指定使用FFmpeg后端 vcap = cv2.VideoCapture(url, cv2.CAP_FFMPEG) # 设置缓存大小,缓解网络波动影响 vcap.set(cv2.CAP_PROP_BUFFERSIZE, 3) if vcap.isOpened(): ret, image = vcap.read() if ret: print("成功读取到摄像头帧") else: print("读取帧失败,但流已正常打开") else: print("无法打开RTSP流,请检查URL或网络连接")调整FFmpeg版本兼容性
Ubuntu 16.04默认的FFmpeg版本可能和OpenCV 3.4.0存在兼容性问题,可以尝试安装适配的FFmpeg版本:# 添加FFmpeg 3.x的PPA源 sudo add-apt-repository ppa:jonathonf/ffmpeg-3 sudo apt-get update sudo apt-get install ffmpeg安装完成后,可以尝试重新运行你的程序,或者重新编译OpenCV以确保它链接到新安装的FFmpeg库。
内容的提问来源于stack exchange,提问作者Mr Twix
相关产品推荐
相关产品推荐

