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

2021-03-11  本文已影响0人  T_K_233

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

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)

上一篇下一篇

猜你喜欢

热点阅读