wvp-GB28181-pro学习心得
- wvp与GB28181介绍
- 1.流媒体服务器视频协议介绍
- 2.市面上的流媒体服务器
- 3.wvp-GB28181-pro框架需要学习的框架和工具
- 4.工具准备
- 项目整合和配置
wvp与GB28181介绍
学习原因:需要开发一款视频监控集中平台,兼容海康、大华等视频厂家NVR和摄像头,共几百套设备,但是不需要每天实时监控,基本上每个NVR和摄像头每天观看1次左右,同时可以控制云台和回放,需要兼容大部分浏览器,可节约服务器资源。
海康、大华WEB控件开发问题很多,谷歌不能装插件,型号有些不兼容,插件卡死,视频预览回放无进度条,十分不方便。(主要是客户不太满意,又不多给点钱买服务器)
1.原有视频监控,基于海康、大华web控件和SDK
2.开源wvp-GB28181-pro
gitee地址:https://gitee.com/pan648540858/wvp-GB28181-pro.git
B站大佬北小菜:https://space.bilibili.com/487906612
ZLMediaKit简单介绍
视频监控平台工作流程
- 登陆
- 点击对应监控通道
- 访问ZLMediaKit,进行拉流推流
- 无人访问时ZLMediaKit断开拉流推流
- 心跳检测,检测SIP信令服务是否可用
1.流媒体服务器视频协议介绍
- RTSP 自行百度
- RTMP 自行百度
- WEBRTC 自行百度
- FLV 自行百度
- HLS 自行百度
- GB28181 自行百度
- SIP 自行百度
- ONVIF 自行百度
- h264 自行百度
- h265 自行百度
2.市面上的流媒体服务器
青柿:收费,可以在浏览器播放
LiveNVR:收费,可以在浏览器播放
ZLMediaKit:免费,针对安防GB28181,无人观看可以自行断流,需要额外开发web服务器
SRS:免费,主要针对互联网
webrtc-streamer:免费,主要针对互联网
其他就不多做介绍
3.wvp-GB28181-pro框架需要学习的框架和工具
3.1 其他工具
VLC:桌面播放器,可以播放rtsp
FFmpeg:强大的编解码器,自带播放器,学习其基本的编解码命令运用
mediaInfo:媒体文件格式解析
wireshark抓包工具
3.2 wvp-GB28181-pro框架
springBoot Java开发框架
mysql关系数据库
redis非关系数据库
ZLMediaKit框架
SIP信令服务的使用
4.工具准备
1.Windows用户需要安装Ubuntu
需要具备基本的linux开发命令基础
2.IDEA
3.Redis
4.mysql数据库
5.ZLMediaKit流媒体框架
项目整合和配置
1.打开IDEA,通过git导入wvp-GB28181-pro项目
# REDIS数据库配置redis:# [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1host: 127.0.0.1# [必须修改] 端口号port: 6379# [可选] 数据库 DBdatabase: 1# [可选] 超时时间timeout: 10000# mysql数据源datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=trueusername: rootpassword: rootdruid:initialSize: 10 # 连接池初始化连接数maxActive: 200 # 连接池最大连接数minIdle: 5 # 连接池最小空闲连接数maxWait: 60000 # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。keepAlive: true # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。validationQuery: select 1 # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。testWhileIdle: true # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。testOnBorrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。testOnReturn: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。poolPreparedStatements: false # 是否開啟PSCache,並且指定每個連線上PSCache的大小timeBetweenEvictionRunsMillis: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒minEvictableIdleTimeMillis: 300000 # 配置一個連線在池中最小生存的時間,單位是毫秒filters: stat,slf4j # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4juseGlobalDataSourceStat: true # 合并多个DruidDataSource的监控数据# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:port: 18080
# 作为28181服务器的配置
sip:# [必须修改] 本机的IPip: 192.168.1.3# [可选] 28181服务监听的端口port: 15060# 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)# 后两位为行业编码,定义参照附录D.3# 3701020049标识山东济南历下区 信息行业接入# [可选]domain: 3402000000# [可选]id: 34020000002000000001# [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验password: 123456789#zlm 默认服务器配置
media:id: your_server_id# [必须修改] zlm服务器的内网IPip: 192.168.1.3# [必须修改] zlm服务器的http.porthttp-port: 8080# [可选] zlm服务器的hook.admin_params=secretsecret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc# 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试rtp:# [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输enable: true# [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功port-range: 30000,30500 # 端口范围# [可选] 国标级联在此范围内选择端口发送媒体流,send-port-range: 30000,30500 # 端口范围# 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用record-assist-port: 0
# [可选] 日志配置, 一般不需要改
logging:config: classpath:logback-spring-local.xml
2.项目启动
idea启动Java项目,打开redis,编译并打开ZLMediaKit的MediaServer,编译wvp-GB28181-pro的web_src模块打开MySQL服务;
3.摄像头配置
4.登陆界面
用户admin
密码admin
5.预览界面
6.云台控制
7.ZLMediaKit推流成功界面
注意事项
ZLMediaKit配置文件config.ini和 wvp-GB28181-pro的配置应该一致
media:id: your_server_id# [必须修改] zlm服务器的内网IPip: 192.168.1.3# [必须修改] zlm服务器的http.porthttp-port: 8080# [可选] zlm服务器的hook.admin_params=secretsecret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
后续准备进行现场并发测试和进行二次开发以适应客户的业务系统