在问这个问题之前,我在过去的两天里在网站上搜索了类似的问题,但是找不到适合我的问题。
我有一个IP摄像机,其IP地址,用户名等已被授予完全访问权限。通过将IP写入VLC Player >> Open Network Stream >> Network
,我实际上可以打开流并观看直播。
但是我想要的是能够使用python观看相同的实时流。这是我的代码:
import urllib.request
import cv2
import numpy
url = 'rtsp://10.10.111.200/profile2/media.smp'
while True:
resp = urllib.request.urlopen(url)
b_array = bytearray(resp.read())
img_np = numpy.array(b_array, dtype=numpy.uint8)
img = cv2.imdecode(img_np, -1)
cv2.imshow('test', img)
if cv2.waitkey(10) == ord('q'):
exit(0)
运行此代码时,它给我以下错误:
urllib.error.URLError:。
然后我想也许应该将URL中的rtsp
更改为http
,但是当我这样做时,它给了我以下错误,
cv2.error:OpenCV(3.4.3) D:\ Build \ OpenCV \ opencv-3.4.3 \ modules \ imgcodecs \ src \ loadsave.cpp:737: 错误:(-215:断言失败)!buf.empty()&& buf.isContinuous()在 img = cv2.imdecode(img_np,行中的函数'cv :: imdecode_' -1)
我认为这是因为没有数据来自(自从我更改为http以来,很可能是错误的)源。
我在Windows 10 64位系统上。
答案 0 :(得分:1)
您用于读取数据流的库不支持rtsp协议,因此它将永远无法工作,也许您可以改用以下代码:
import cv2
capture_video = cv2.VideoCapture('rtsp://10.10.111.200/profile2/media.smp')
while(True):
ret, img = capture_video.read()
cv2.imshow('Test', img)
if cv2.waitKey(10) == ord('q'):
exit(0)