美文网首页
海康网络摄像头配置 Python + HTML 显示 rtsp

海康网络摄像头配置 Python + HTML 显示 rtsp

作者: T_K_233 | 来源:发表于2021-03-11 12:08 被阅读0次

    买的这个摄像头,应该不是海康本家的,但协议通用

    https://item.taobao.com/item.htm?_u=b2020hgjkb441f&id=635662827249

    上来先把电源线剪了改安德森口,正极剪开后有两根线,粗的那个是夜视的红外 LED 灯的供电,细的是摄像头本身的,可以把两根线搓到一起都接到 12V 上

    通电后刚开始不知道摄像头 IP,也没有说明书啥的

    后来发现可以用海康的 SADP 软件找到局域网中的所有摄像头

    软件下载在这里 https://www.hikvision.com/cn/download_more_393.html

    摄像头通电后应该会有咔嚓的一声,是摄像头模组的光学滤镜初始化的声音,网线接到局域网中用 SADP 搜索就能找到摄像头,改成局域网下的 IP 地址

    最新版 Chrome 访问会提示不支持,只能用 IE 来访问,是个特别老旧的页面,但能看到图像

    摄像头使用的是 rtsp 视频串流,地址格式如下:

    rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

    username: 用户名,初始admin。
    password: 密码,初始admin。
    ip: 为设备IP,例如 192.168.1.103。
    port: 端口号,初始/默认554,若为默认可不填写。
    codec:h264、MPEG-4、mpeg4
    channel: 通道号,起始为1。例如通道1,则为ch1。
    subtype: 码流类型,主码流为main,辅码流为sub(主码流清晰用于本地,子码流用于网络传输)。

    For example:
    rtsp://admin:admin@192.168.1.103:554/h264/ch1/main/av_stream

    https://blog.csdn.net/patrick_starrr/article/details/93858412

    用 VLC 软件,在媒体 -> 网络流媒体下面输入 rtsp 的地址就可以看到画面

    下面是用 Python 显示,

    import cv2
    
    url = "rtsp://admin:admin@192.168.1.37:554/h264/ch1/main/av_stream"
    
    vcap = cv2.VideoCapture(url)
    
    while(1):
    
        ret, frame = vcap.read()
        cv2.imshow('VIDEO', frame)
        cv2.waitKey(1)
    

    就可以用 opencv 读到画面

    接下来用 Flask 串流画面到浏览器上,用的网上的案例程序,语法比较神奇:

    (https://medium.datadriveninvestor.com/video-streaming-using-flask-and-opencv-c464bf8473d6)

    import cv2
    
    class VideoCamera(object):
        url = "rtsp://admin:admin@192.168.1.37:554/h264/ch1/main/av_stream"
        def __init__(self):
           #capturing video
           self.video = cv2.VideoCapture(self.url)
        
        def __del__(self):
            #releasing camera
            self.video.release()
            
        def get_frame(self):
           #extracting frames
            ret, frame = self.video.read()
            
            # encode OpenCV raw frame to jpg and displaying it
            ret, jpeg = cv2.imencode('.jpg', frame)
            return jpeg.tobytes()
    
    
    
    #!/usr/bin/env python
    from flask import Flask, render_template, Response, url_for
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return '''<html>
      <head>
        <title>Video Streaming Demonstration</title>
      </head>
      <body>
        <h1>Video Streaming Demonstration</h1>
        <img src="'''+url_for('video_feed')+'''">
      </body>
    </html>
    '''
    
    def gen(camera):
        while True:
            frame = camera.get_frame()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
    
    @app.route('/video_feed')
    def video_feed():
        return Response(gen(VideoCamera()),
                        mimetype='multipart/x-mixed-replace; boundary=frame')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True)
    
    

    相关文章

      网友评论

          本文标题:海康网络摄像头配置 Python + HTML 显示 rtsp

          本文链接:https://www.haomeiwen.com/subject/fgbnqltx.html