You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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动态链接问题
    回溯信息指向这个库,可能是库文件损坏、版本不兼容或软链接错误:

    1. 先检查库文件是否存在及链接状态:
      ls -l /usr/lib/x86_64-linux-gnu/libltdl.so.7
      
    2. 如果链接失效,重新建立正确的软链接(根据系统中实际存在的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
      
    3. 或者直接重新安装该库:
      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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:26:50