环境:
1 海康威视USB摄像头,型号DS-E11
2 python 3.7.10
3 opencv 4.5.1
RTSP的失败过程复现:
1 摄像头插电脑上
2 用VLC播放器生成RTSP视频流,配置文件就用默认的H264。再开一个VLC播放器表明RTSP流能被解析成画面。
3 用如下代码(去掉while not success就会报错,不去掉就一直没反应)无法打开RTSP,报错 error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘imshow’
import cv2
import time
cap = cv2.VideoCapture("rtsp://127.0.0.1:8554/123")
#cap = cv2.VideoCapture("http://127.0.0.1:8080/123")
print("cap.isOpened(): ", cap.isOpened())
# key = cv2.waitKey(2000)
# time.sleep(20)
while cap.isOpened():
success,frame = cap.read()
while not success:
success, frame = cap.read()
# print("sucess : ", success)
success, frame = cap.read()
# frame = cv2.resize(frame, (720, 720)) # 控制输出窗口的大小,这一行应该可有可无因为cv2.VideoCapture(0)无论这一行有没有都可以捕获
cv2.imshow("myframe",frame)
key = cv2.waitKey(1)
if key == 27: # 按ESC键退出
break
cap.release() #释放摄像头
cv2.destroyAllWindows() #关闭窗口
查了些稍微相关的资料
http://www.voidcn.com/article/p-wjlemizn-bpc.html
http://www.javashuo.com/article/p-wbwhdzye-mh.html
反正是没解决,最终选择了用VLC播放器用HTTP协议传输视频,成功用opencv打开了视频流。另外转码选项不能用默认的h264 +mp3(mp4),得用这个
要不然似乎也打不开(等了一两分钟没反应),这个的话啪的一下就打开了,很快啊。