【问题标题】:How to fix opencv python cv2.VideoCapture rtsp onvif "nonmatching transport in server reply" error?如何修复opencv python cv2.VideoCapture rtsp onvif“服务器回复中的传输不匹配”错误?
【发布时间】:2018-07-15 19:12:01
【问题描述】:

我在 Windows 上使用 python 3.6.4,通过 pip 安装了 opencv (3.4)。这是我正在使用的代码:

import numpy as np
import cv2

cap = cv2.VideoCapture('rtsp://192.168.15.116:554/onvif1')

while(cap.isOpened()):
    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

我收到以下错误:

[rtsp @ 03858a40] Nonmatching transport in server reply
warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:808)
warning: rtsp://192.168.15.116:554/onvif1 (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:809)

我可以转到 cmd 并键入“ffplay rtsp://192.168.15.116/onvif1”,视频将使用相同的 rtsp 地址在 VLC 中运行。使用 cv2.VideoCapture(0) 也适用于我的网络摄像头。

尝试将文件 opencv_ffmpeg340.dll 复制到所有路径文件夹中,但仍然无济于事。还检查了构建,所有视频 I/O 都显示为“是”,但 gstreamer 除外。我没有想法。

【问题讨论】:

  • 在这个问题上有什么进展吗?我也面临同样的问题。
  • @nttrung143 也许this 可能会有所帮助

标签: python opencv ffmpeg rtsp onvif


【解决方案1】:

我刚刚遇到这个问题,在挖掘之后看起来 OPENCV 3.1+ 默认使用 TCP 进行 RTSP 传输(我的 ESCAM QF600 仅支持 RTSP over UDP)。您可以通过将环境变量 OPENCV_FFMPEG_CAPTURE_OPTIONS 设置为某个值(例如 dummy)来防止这种情况发生。

为了完整性;有关可以设置的所有选项,请参阅https://ffmpeg.org/ffmpeg-protocols.html。键和值用';'分隔和对通过“|”分隔。

违规代码从 cap_ffmpeg_impl.hpp 的第 809 行开始 (https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_ffmpeg_impl.hpp)

以下帖子的道具,以正确的方向发送我:

ffmpeg rtsp error: Nonmatching transport in server reply

Cant get RTSP stream - nonmatching

【讨论】:

  • 您能给我一些关于如何设置该环境变量的指导吗?是在代码中、程序运行时的参数、操作系统吗?
  • 嗨,我只是在 Windows 上尝试使用 node+opencv,所以我只需要在运行我的 node 应用程序之前在命令行上执行set OPENCV_FFMPEG_CAPTURE_OPTIONS=dummy 即可。如果你在 python 中运行服务器应用程序/服务,你可以查看 python os 模块中的 os.environ 以在你的程序中设置它,如果它是你的操作系统中的问题设置。
  • 我想知道这是否可以在调用 cv.VideoCapture 之前在 python 脚本中实现
【解决方案2】:

我使用 Microsoft 的 VCPKG 将 OPENCV 安装到 Windows 10 上。之后,OPENCV 工作正常 - 除了它不会打开视频文件。

没有成功,我尝试了很多建议。最后,对我有用的东西非常简单。我将 opencv 的 BIN 文件夹作为 PATH 包含在 Windows 环境系统变量中。而已。现在,视频文件打开并播放得很好。

【讨论】:

  • 当您说“视频文件”时,它是否包括(或者更好,如果完全是)onvif rtsp 视频?
  • @ProjetosPrinceTower - 谢谢你给我打电话。我应该更具体。我的 MP4、AVI 和 RSTP 测试成功。我使用以下 URL 测试了 RSTP 视频,它可以正常播放。 capVideo.open("rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov");
  • 我明白了,不幸的是,我也可以使用这样指定的视频文件运行 rtsp 协议。我的问题特别与我的 onvif 网络摄像头有关。不过还是谢谢你,我相信它会对某人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多