#yyds干货盘点#

赋料扬雄敌,诗看子建亲。这篇文章主要讲述#yyds干货盘点#相关的知识,希望能为你提供帮助。
宇视科技RTSP
rtsp://{用户名}:{xx}@{ip}:{port}/video1/2/3,分别对应主/辅/三码流;
比如:
rtsp://admin:admin@10.11.3.11:554/video1,就表示主码流;
rtsp://admin:admin@192.168.8.8:554/video2,表示子码流;
【#yyds干货盘点#】rtsp://admin:admin@192.168.8.8:554/video3,表示3码流;
opencv获取IP摄像头(IP-camera)实时视频流
如何通过网络摄像头(web camera)获取实时视频流,但是这种方法的缺陷就是摄像头和主机必须连在一起,那这种在室外部署的时候就会非常麻烦并且不安全,所以后来找了下用海康威视或者大华的监控摄像头,然后通过IP地址可以无线获取视频流,这样就实现了主机和摄像头分开,方便部署。
1.设备
这里用的是海康的鱼眼摄像头,型号是DS-2CD3955FWD-IWS,其实基本上能支持sdk二次开发的IP摄像头都可以。鱼眼摄像头相比普通的摄像头经过扭曲,因此在应用的时候一般需要进行反扭曲,这一步会造成比较大的延迟,因此没有不是特定需求的话尽量使用普通的就可以。
注:海康的萤石系列貌似并不能通过RTSP地址获取,而这里的方法需要用RTSP进行视频流获取,所以无法萤石系列就不在此列。
2.通过RTSP地址获取视频流
首先需要知道海康设备的RTSP地址,可以通过??这里??进行查看。
import cv2source =""rtsp://admin:12345@192.168.1.64/Streaming/Channels/1"
注: admin和12345分别是ip camera的用户名和xx,在浏览器上第一次登录摄像头的时候会进行设置;
192.168.1.64是摄像头的默认IP,在浏览器中输入即可进入登录页面(如下);

#yyds干货盘点#

文章图片
< /body>
< /html>
"""


class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = io.BytesIO()
self.condition = Condition()

def write(self, buf):
if buf.startswith(b\\xff\\xd8):
self.buffer.truncate()
with self.condition:
self.frame = self.buffer.getvalue()
self.condition.notify_all()
self.buffer.seek(0)
return self.buffer.write(buf)


class StreamingHandler(server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == /:
self.send_response(301)
self.send_header(Location, /index.html)
self.end_headers()
elif self.path == /index.html:
content = PAGE.encode(utf-8)
self.send_response(200)
self.send_header(Content-Type, text/html)
self.send_header(Content-Length, len(content))
self.end_headers()
self.wfile.write(content)
elif self.path == /stream.mjpg:
self.send_response(200)
self.send_header(Age, 0)
self.send_header(Cache-Control, no-cache, private)
self.send_header(Pragma, no-cache)
self.send_header(Content-Type, multipart/x-mixed-replace; boundary=FRAME)
self.end_headers()
try:
while True:
#获得图片长度
image_len = struct.unpack(< L, connection.read(struct.calcsize(< L)))[0]
print(image_len)
if not image_len:
break

image_stream = io.BytesIO()
#读取图片
image_stream.write(connection.read(image_len))

image_stream.seek(0)
image = Image.open(image_stream)
cv2img = numpy.array(image, dtype=numpy.uint8)
imgbuffer = image_stream.getvalue()
#写入http响应
self.wfile.write(b--FRAME\\r\\n)
self.send_header(Content-Type, image/jpeg)
self.send_header(Content-Length, len(imgbuffer))
self.end_headers()
self.wfile.write(imgbuffer)
self.wfile.write(b\\r\\n)


except Exception as e:
logging.warning(
errror streaming client %s: %s,
self.client_address, str(e))

else:
self.send_error(404)
self.end_headers()


class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
allow_reuse_address = True
daemon_threads = True


output = StreamingOutput()

try:
address = (127.0.0.1, 8000)
server = StreamingServer(address, StreamingHandler)
server.serve_forever()
except Exception as e:
print(e)





    推荐阅读