ThingsBoard3.9.1集成视频摄像头wvp-pro+ZLMediaKit

        最近在整理thingsboard课程,基于最新thingsboard版本3.9.1/4.0,欢迎大家点赞,收藏关注我提问在评论区留言,我争取把最新、最准、最好的课程,呈现在各位亦师亦友的csdn广大读者面前。

目录

ThingsBoard集成摄像头播放视频+wvp-pro+ZLMedia

背景及准备

架构

摄像头

媒体服务器

视频推流/拉流

GB28181协议基础

GB28181关键组成

wvp和ZLMediaKit之间的通信和定位

ThingsBoar集成摄像头方法

应用场景测试

摄像头

ZLMediaKit

wvp-pro

查看wvp-pro

ThingsBoard播放


ThingsBoard集成摄像头播放视频+wvp-pro+ZLMedia

背景及准备

架构

本章节讲述ThingsBoard集成摄像头并实时播放视频技术架构图,如下:

官网参考文档:

wv-gb28181-pro使用文档 https://doc.wvp-pro.cn
ZLMediaKit使用文档 https://github.com/ZLMediaKit/ZLMediaKit

摄像头

目前摄像头品牌和规格都很成熟,大类分为枪机/球机/筒机/半球/云台机等。一般摄像头都有网口或串口/IO或wifi/4G通信接口或USB/音频口。

摄像头视频编码主流支持H.264。

媒体服务器

ZLMediaKit 是一款开源的轻量级流媒体服务器框架,由国内开发者开发并维护,专注于高效、稳定、易扩展的流媒体服务。它支持多种协议(RTSP、RTMP、HLS、HTTP-FLV、WebRTC等),适用于直播、点播、视频监控、视频会议等场景,如下:

(1) 互联网直播

方案:OBS推流(RTMP)→ ZLMediaKit → 转HLS/HTTP-FLV → 观众播放。

(2) 安防监控

方案:摄像头(RTSP/GB28181)→ ZLMediaKit → 存储/NVR → 网页端查看。

(3) 视频会议

方案:WebRTC推流 → ZLMediaKit → SFU转发 → 参会者。

(4) 教育/远程医疗

方案:屏幕共享(RTMP)→ 录制为MP4 → 点播回放。

ZLMediaKit功能架构图如下:

        ZLMediaKit推流和拉流示意图如下:

       

视频推流/拉流

视频推流(Stream Pushing)是指将视频数据从采集端(如摄像头、屏幕、文件)实时传输到流媒体服务器或对等节点的过程,广泛应用于直播、视频会议、监控等场景。

推流是摄像头-->服务器(RTMP/WebRTC)。

开源服务器:

SRS(Simple RTMP Server):支持RTMP/WebRTC/HLS,低配置部署。

Nginx-RTMP模块:轻量级,适合基础RTMP推拉流。

ZLM(ZLMediaKit):支持RTSP/RTMP/WebRTC,国产开源方案。

视频拉流(Pulling Stream)是指客户端从流媒体服务器或源主动获取视频流数据并播放等场景。

拉流是服务器-->客户端(RTMP/WebRTC)。

拉流协议:

协议

延迟

兼容性

适用场景

特点

HLS

10-30s

所有浏览器、移动端

直播、点播

基于HTTPTS切片,高兼容性但延迟高

DASH

10-30s

现代浏览器、移动端

点播、自适应码率

类似HLS,支持多编码格式

RTMP

1-3s

Flash或专用播放器

传统直播(逐渐淘汰)

低延迟,但安全性差,需转协议分发

WebRTC

<1s

浏览器/原生应用

视频会议、实时监控

点对点传输,超低延迟

RTSP

1-5s

专用播放器/VLC

监控摄像头、IPCAM

需配合RTP/RTCP传输,原生浏览器不支持

FLV

1-3s

JS解封装

低延迟直播(HTTP-FLV

基于HTTP长连接,兼容性优于RTMP

GB28181协议基础

GB28181是中国国家标准,用于规范视频监控系统的互联互通,解决跨区域、跨部门、跨层级的视频资源共享问题,基于SIP(会话初始协议)和RTP/RTCP(媒体传输),分别为会话通道(控制信令)和媒体流通道(视音频数据)。

GB28181关键组成

SIP 服务器:处理注册、邀请、控制信令(如摄像头与平台间的会话建立)。

媒体服务器(如 ZLMediaKit):接收、转封装、分发媒体流。

摄像头(IPC):作为SIP终端,推送流到媒体服务器。

GB28181规范版本:

​​2011版​​:首次发布,奠定基础框架。

​​2016版​​:细化通信协议,当前主流版本。

2022​​版:支持H.265\ACC,抓拍。

wvp和ZLMediaKit之间的通信和定位

(1)WVP的定位

    作为GB28181国标协议的SIP服务端,接收来自前端摄像头(或平台)的注册、心跳、目录、设备信息、视频预览/回放请求等。

与后端媒体服务器(ZLMediaKit)配合使用,实现实际的视频流播放和分发。

(2)ZLMediaKit的定位

作为强大的 媒体流服务器,支持多协议(RTMP、RTSP、HLS、GB28181 RTP)。实际负责拉流、转码、分发视频数据。

(3)二者之间的通信方式

核心是RTP over UDP(PS封装):

国标前端设备推送RTP视频流到WVP。

WVP转发/重定向该RTP流到ZLMediaKit的RTP接口(如UDP端口30000+)。

ZLMediaKit解析PS流并生成多协议媒体服务(如RTMP/RTSP/HLS)供外部访问。

控制协议通过HTTP/HOOK接口:

WVP利用ZLMediaKit提供的RESTful API和WebHook回调机制,完成媒体注册、流状态监听、流播放地址获取等。

ThingsBoar集成摄像头方法

ThingsBoard默认情况下不支持视频播放/摄像头接入,要想自己开发视频接入功能,需要有以下步骤:

(1)把视频摄像头做为设备增加在系统中;

(2)搭建流媒体服务器环境并与系统对接;

(3)自定义视频播放部件,并加入仪表板库;

(4)在部件上展示播放实时视频流。

应用场景测试

摄像头

海康摄像头:ip= 192.168.1.64

ZLMediaKit

wvp+ZLMediaKit:ip= 192.168.1.107

在windows环境下,ZLMediaKit运行文件如下:

MediaServer.exe

鼠标双击MediaServer.exe可以启动ZLMediaKit服务,如下:

ZLMediaKit的config.ini文件配置如下

[general]
broadcast_player_count_changed=0
check_nvidia_dev=1
enableVhost=0
enable_ffmpeg_log=0
flowThreshold=1024
listen_ip=::
maxStreamWaitMS=15000
mediaServerId=1237788 // 重要Id
mergeWriteMS=0
resetWhenRePlay=1
streamNoneReaderDelayMS=20000
unready_frame_cache=100
wait_add_track_ms=3000
wait_audio_track_data_ms=1000
wait_track_ready_ms=10000


[http]
allow_cross_domains=1
allow_ip_range=::1,127.0.0.1,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255
charSet=utf-8
dirMenu=1
forbidCacheSuffix=
forwarded_ip_header=
keepAliveSecond=15
maxReqSize=40960
notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:Git_Unkown_commit/Git_Unkown_time,branch:Git_Unkown_branch,build time:2024-10-20T14:19:48)</center></body></html>
port=9000 // 重要port
rootPath=./www
sendBufSize=65536
sslport=443
virtualPath=

wvp-pro

在windows环境下,wvp-gb28181-pro运行文件如下:

wvp-GB28181-pro-2.7.2.jar

wvp-gb28181-pro的application.yml文件配置如下

# REDIS数据库配置
  redis:
    # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
    host: 127.0.0.1
    # [必须修改] 端口号
    port: 6379
    # [可选] 数据库 DB
    database: 1
    # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
    password: 123456
    # [可选] 超时时间
    timeout: 10000
  # mysql数据源
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          type: com.zaxxer.hikari.HikariDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
          username: root
          password: 123456
          hikari:
            connection-timeout: 20000             # 是客户端等待连接池连接的最大毫秒数
            initialSize: 50                       # 连接池初始化连接数
            maximum-pool-size: 200                # 连接池最大连接数
            minimum-idle: 10                       # 连接池最小空闲连接数
            idle-timeout: 300000                  # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
            max-lifetime: 1200000                 # 是池中连接关闭后的最长生命周期(以毫秒为单位)

#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
  port: 18080
  # [可选] HTTPS配置, 默认不开启
  # ssl:
    # [可选] 是否开启HTTPS访问
    # enabled: false
    # [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名
    # key-store: classpath:test.monitor.89iot.cn.jks
    # [可选] 证书密码
    # key-store-password: gpf64qmw
    # [可选] 证书类型, 默认为jks,根据实际修改
    # key-store-type: JKS

# 作为28181服务器的配置
sip:
  # [必须修改] 本机的IP,对应你的网卡,监听什么ip就是使用什么网卡,
  # 如果要监听多张网卡,可以使用逗号分隔多个IP, 例如: 192.168.1.4,10.0.0.4
  # 如果不明白,就使用0.0.0.0,大部分情况都是可以的
  # 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。
  ip: 192.168.1.107
  # [可选] 28181服务监听的端口
  port: 5060
  # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
  # 后两位为行业编码,定义参照附录D.3
  # 3701020049标识山东济南历下区 信息行业接入
  # [可选]
  domain: 4101050000
  # [可选]
  id: 41010500002000000001
  # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
  password: 123456
  # 是否存储alarm信息
  alarm: true

#zlm 默认服务器配置
media:
  id: 1237788
  # [必须修改] zlm服务器的内网IP
  ip: 192.168.1.107
  # [必须修改] zlm服务器的http.port
  http-port: 9000
  # [可选] 返回流地址时的ip,置空使用 media.ip
  stream-ip: 192.168.1.107
  # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
  sdp-ip: 192.168.1.107
  # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
  hook-ip: 192.168.1.107
  # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置
  http-ssl-port: 1443
  # [可选] zlm服务器的hook.admin_params=secret
  secret: JvVotkdN01y4qZHlrJsdq4gD7n9rK6wV
  # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
  rtp:
    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
    enable: true
    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
    port-range: 50000,50300 # 端口范围
    # [可选] 国标级联在此范围内选择端口发送媒体流,
    send-port-range: 50000,50300 # 端口范围
  # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
  record-assist-port: 18081

启动wvp-gb28181-pro,如下:

查看wvp-pro

浏览器打开wvp管理系统,如下:

ThingsBoard播放

ThingsBoard:ip= 192.168.1.38

HTML Card代码说明:

html代码如下:

<div class='card iframe-wrapper'>Camera1<br>
<iframe src="http://192.168.1.107:18080/#/play/wasm/ws%3A%2F%2F192.168.1.107%3A9000%2Frtp%2F34020000001320000064_34020000001320000001.live.flv"></iframe>
</div>

样式代码如下:

.card { /* thingsboard默认的card */
    font-weight: bold;
    font-size: 32px;
    color: #999;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.iframe-wrapper { /* 我新增的 */
  position: relative;
  width: 100%;
  padding-top: 56.25%; /* 16:9宽高比 (计算方式:9/16=0.5625) */
  overflow: hidden;
}

.iframe-wrapper iframe { /* 我新增的 */
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值