如何使用OpenCV对IP摄像机进行身份验证

3
我正在尝试使用OpenCV和Python使用RTSP URI连接IP摄像机(Dahua)。我在下面添加了一个示例代码(使用单独的变量提供用户名,密码和IP),结果为[rtsp @ 0x55cc3715c600] method OPTIONS failed: 401 Unauthorized。使用VLC,我能够连接,但是只有在单独的对话框中输入密码后才能连接,即使密码已经在URI中提供了。我应该如何继续?
address = f'rtsp://{username}:{password}@{ip}'
cap = cv2.VideoCapture(address)

从我的IP摄像头,我只需将RTSP URI格式化为这样,并将其放入cv2.VideoCapture()中。我也在使用大华摄像头,但是RTSP链接会因摄像头而异。这是我的一个例子rtsp://username:password@192.168.1.25/axis-media/media.amp。如果链接在VLC中有效,那么在OpenCV中也应该有效。 - nathancy
在VLC中,只有在收到的密码不正确时,我才会在单独的对话框中提示输入密码。尝试将地址硬编码为应该是的值,看看是否仍然出现问题。 - shortcipher3
如果您使用gstreamer编译opencv,您可以使用任何gstreamer管道,这是我使用的一个示例:vc = cv2.VideoCapture('rtspsrc location=rtsp://user:password@192.168.1.25:8554/play1.sdp ! decodebin ! videoconvert ! appsink')。您应该能够在opencv之外使用gst-launch测试此管道是否正常工作,命令如下:gst-launch-1.0 rtspsrc location=rtsp://user:password@192.168.1.25:8554/play1.sdp ! decodebin ! videoconvert ! autovideosink - shortcipher3
rtsp://username:password@192.168.1.25 是我使用的格式,但它会导致在VLC中出现提示,需要再次输入密码。也许这与密码中的特殊字符 % 有关? - sPY4CN
δΫΩγî®gst-launch-1.0εëΫδΜΛδΙüδΦöε·Φη΅¥φ€ΣφéàφùÉ (401)ιîôη··ψIJ - sPY4CN
2个回答

3
发现问题所在,与密码中的特殊字符有关(%),应该进行百分号编码(%25)。

0

如果您的密码包含像!"#$%&'()*+,-./:;<=>?@[\]^_{|}~这样的字符,则问题可能出在cv2.VideoCapture()上。

您可以尝试使用imutils库来解决此问题。这对我很有效。

from imutils.video import VideoStream
cap = VideoStream(video_src).start()
frame = cap.read()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接