RTSP 流不适用于 python,但适用于 VLC。为什么?

RTSP stream doesn't work on python, But does on VLC. why?

我正在尝试让我的 PTZ 摄像机使用 python 3 和 openCV 进行流式传输。 我在代码中使用的 URL 适用于 VLC 流,但不适用于代码。

import cv2
import numpy as np

cap = cv2.VideoCapture(src="rtsp://USER:PASS@XX.XXX.XXX.XXX:XXX/Streaming/Channels/101/")
FRAME_WIDTH = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
FRAME_HIGTH = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print('Frame Size: ', FRAME_WIDTH, 'x', FRAME_HIGTH)

if cap.isOpened():
    ret, frame = cap.read()
else:
    ret = False

while ret:
    ret, frame = cap.read()
    cv2.imshow('Camera', frame)

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

cap.release()
cv2.destroyAllWindows()

当我 运行 它时,我得到下一个错误:

Traceback (most recent call last):   File "C:/Users/.../CameraTest/TEST.py", line 4, in <module>
    cap = cv2.VideoCapture(src="rtsp://.../Streaming/Channels/101/") TypeError: Required argument 'index' (pos 1) not found

这是和海康云台摄像机。 我可以得到任何关于如何让她直播的提示吗?

提前TNX。

一个小改动,从 cv2.VideoCapture() 方法中删除 src=。 它应该看起来像,

cap = cv2.VideoCapture("rtsp://USER:PASS@XX.XXX.XXX.XXX:XXX/Streaming/Channels/101/")

这在海康威视相机中对我有用。避免在密码中使用特殊字母。

import cv2
cap = cv2.VideoCapture('rtsp://username:password@10.199.27.123:554')
while True:
    ret, img = cap.read()
    cv2.imshow('video output', img)
    k = cv2.waitKey(10)& 0xff
    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()