海康摄像机/录像机对接方式记录
Author: OwnDing
Date: 2025-01-02
最近有在做海康摄像机/录像机对接方面的工作,之前也做过类似的工作,但都比较定制化,这次趁着自己有些空做些对接实践。
本次对接海康摄像头/录像机是使用IP直接读取摄像头的数据,并没有用到海康的平台。
本次测试的对接方式有2种:
1)使用海康的SDK进行对接,需要登入到海康官网下载对应的SDK。
2)使用ZLMediaKit 直接拉取摄像头的 rtsp流,然后进行转换后,使用其它软件可以直接播视频监控。
总体来说,第二种方案简单快速无需自己编程。
1、SDK对接
SDK对接,需要自己进行程序编写。此处给出一个Spring Boot程序集成海康SDK的例子。
代码Demo链接:
https://github.com/OwnDing/hkdemo.git
此种方法比较简单,无需自己编写代码即可提供可供VLC软件或前端播放的监控视频。
建议使用Docker进行部署ZLMediaKit。
1)确定摄像头rtsp地址
使用浏览器访问摄像头的控制台,比如摄像头的IP是192.168.88.88,那么在浏览器中输入:http://192.168.88.88 即可访问摄像头的控制台,输入账号密码即可登入。
确定好rtsp的端口:

端口查看rtsp流地址示例:
规则:rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
实例:rtsp://admin:hik12345@192.168.88.88:554/h266/ch1/main/av_stream
说明:
username: 用户名。例如admin。
password: 密码。例如12345。
ip: 为设备IP。
port: 端口号默认为554。
codec:有h264、MPEG-4、mpeg、h266这几种。
channel: 通道号,起始为1。
subtype: 码流类型,主码流为main,辅码流为sub。
例如,请求海康摄像机通道1的主码流,Url如下
主码流:rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream
你可以下载一个VLC播放器,然后把rtsp地址复制到VLC播放器里进行播放测试(菜单:媒体–>流–>网络),能正常播放说明地址正确。

2)部署ZLMediaKit
使用Docker进行部署:
docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp zlmediakit/zlmediakit:master
ZLMediaKit 启动后,配置文件在容器中 /opt/media/conf/config.ini (这是容器中的文件), 里面有 secret 密钥。我们访问ZLMediaKit控制台需要这个密钥。
3)访问ZLMediaKit控制台。
访问ZlMediaKit控制台,访问形式需要带上密钥:
http://192.168.88.10:8080/webassist/?secret=p7ApNF5w0AmnPHConD7NKV4TBrNnKyow
其中secret在容器中config.ini文件中。

ZLMediaKit控制台4)添加rtsp流
添加rtsp流有两种方法:
第一种:此处可以在ZLMediaKit的控制台操作完成,点击”拉流代理”

拉流代理第二种:使用API工具

API添加代理使用GET方法,访问ZLMediaKit所在服务器/电脑的 IP:PORT/index/api/addStreamProxy
填入:secret、url、stream、app、vhost 5个参数。
secret:zlmediakit的secret
url:是摄像头rtsp流地址
stream:可自行填写
app:可填 live
vhost:填 ZLMediaKit所在服务器/电脑的 IP
当返回如上图数据时即表示成功,在ZLMediaKit控制台”拉流代理”菜单中可以看到我们刚添加的代理。
使用API生成的URL,注意需要加上端口,因为容器部署后端口有映射。
使用VLC打开 流:http://192.168.83.10:8080/live/zt/hls.m3u8 即可看到监控视频
其中 http://192.168.83.10:8080/live/zt 是返回的数据加上端口,然后 hls.m3u8 是固定的路径。
如果你不想使用VLC打开 http://192.168.83.10:8080/live/zt/hls.m3u8 可以自己创建一个 html 页面,然后使用浏览器打开这个 html 即可看到监控视频。
html示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <!DOCTYPE html> <html> <head> <title>[HLS](https://zhida.zhihu.com/search?content_id=252193051&content_type=Article&match_order=1&q=HLS&zhida_source=entity) Stream Player</title> </head> <body> <h1>Live Stream</h1> <video id="video" controls autoplay></video> <script src="https://cdn.jsdelivr.net/hls.js/latest/hls.min.js"></script> <!-- <script src="./dist/hls.js.d.ts"></script> --> <script> if(Hls.isSupported()) { var video = document.getElementById('video'); var hls = new Hls(); hls.loadSource('http://192.168.83.10:8080/live/zt/hls.m3u8'); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED,function() { video.play(); }); } else if (video.canPlayType('application/vnd.apple.mpegurl')) { // 如果浏览器原生支持 HLS,则直接设置 video.src video.src = 'http://192.168.83.10:8080/live/zt/hls.fmp4.m3u8'; video.addEventListener('loadedmetadata',function() { video.play(); }); } </script> </body> </html>
|
3、异常问题记录
1)使用VLC能够打开 http://192.168.83.10:8080/live/zt/hls.m3u8 链接,但是使用浏览器一直无法播放HLS
问题原因:摄像头的编码格式是 H.265
解决方法:在摄像头控制台将编码格式改成 H.264

视频编码
4、家用视频方案
现在市面上有很多家用摄像头,用户可以在家里安装摄像头,然后通过厂商的APP实时查看摄像头内容。但是市面上的方案都有一个问题,就是摄像头的资料会存储到厂商的服务器里,并且需要每年付费使用。摄像头内容比较隐私,我不想将内容直接存储在厂家那,最重要的是每年还需要付费使用云资源。
我自己长期有一台云服务器,我就在想是不是可以将视频内容直接存到我云服务器上,这样我也可以实时查看摄像头的内容。
实际上使用ZLMediaKit可以自己搭建视频监控平台,将数据存储到自己的云服务器或者百度网盘之类的工具上。