首页 > 解决方案 > 如果由于 RTSP 摄像头问题导致执行停止,如何终止 cv2.VideoCapture(rtsp_url) 调用?

问题描述

我有 80 个摄像头的 RTSP URL。我正在尝试使用cv2.VideoCapture(rtsp_url). 我正在对从每个相机捕获的屏幕截图进行一些图像处理操作。每台相机我总共有 80 个这样的 URL。示例 RTSP URL 是:

rtsp://192.168.0.101:554/user=admin_password=oyXv12aW_channel=1_stream=0.sdp?real_stream

现在,有时由于网络或其他技术问题,某些摄像头暂时无法正常工作。在这种情况下cv2.VideoCapture(rtsp_url)需要超过 30 秒才能返回。在正常情况下,通常需要 2-3 秒才能返回屏幕截图。但是,如果相机停机,则需要花费太多时间。由于我的应用程序for在许多相机上循环运行,我不能等待。有时,不活动的相机数量很高,执行循环需要很长时间。可以做些什么来减少等待时间cv2.VideoCapture

如果进程超过给定的时间阈值,我也使用multiprocessing并尝试终止进程。我不想使用它,multiprocessing虽然它工作得很好。我想找到一个解决方案只使用opencv

标签: pythonmultithreadingperformanceopencvimage-processing

解决方案


多处理版本可能真的是你想要的

  • 可以简化并行读取所有相机
  • 可以处理各种与超时相关的问题

然而,一点阅读表明 OpenCV RTSP 处理是由ffmpeg内部完成的,其行为部分由名为的环境变量控制OPENCV_FFMPEG_CAPTURE_OPTIONS

来自 ffmpeg http://ffmpeg.org/ffmpeg-protocols.html#rtsp上的文档

timeout  
  Set socket TCP I/O timeout in microseconds.

我没有实用的方法来尝试这个,但也许在你的程序中设置它或先导出它就是你所需要的

os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "timeout;5000"
cam = cv2.VideoCapture("rtsp://YOUR_STREAMING_IP_ADDRESS:PORT/foo.sdp", cv2.CAP_FFMPEG)

请参阅选择的 RTSP 流和 OpenCV (Python) 答案


推荐阅读