【流媒体视频监控平台开发wvp-GB28181-pro】

wvp与GB28181介绍

学习原因:需要开发一款视频监控集中平台,兼容海康、大华等视频厂家NVR和摄像头,共几百套设备,但是不需要每天实时监控,基本上每个NVR和摄像头每天观看1次左右,同时可以控制云台和回放,需要兼容大部分浏览器,可节约服务器资源。
海康、大华WEB控件开发问题很多,谷歌不能装插件,型号有些不兼容,插件卡死,视频预览回放无进度条,十分不方便。(主要是客户不太满意,又不多给点钱买服务器)

1.原有视频监控,基于海康、大华web控件和SDK
在这里插入图片描述
2.开源wvp-GB28181-pro
gitee仓库
gitee地址:https://gitee.com/pan648540858/wvp-GB28181-pro.git
B站大佬北小菜:https://space.bilibili.com/487906612

ZLMediaKit简单介绍
在这里插入图片描述

视频监控平台工作流程

  1. 登陆
  2. 点击对应监控通道
  3. 访问ZLMediaKit,进行拉流推流
  4. 无人访问时ZLMediaKit断开拉流推流
  5. 心跳检测,检测SIP信令服务是否可用

1.流媒体服务器视频协议介绍

  1. RTSP 自行百度
  2. RTMP 自行百度
  3. WEBRTC 自行百度
  4. FLV 自行百度
  5. HLS 自行百度
  6. GB28181 自行百度
  7. SIP 自行百度
  8. ONVIF 自行百度
  9. h264 自行百度
  10. 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
Java开发工具
3.Redis
redis服务端
4.mysql数据库
Navicat连接客户端
5.ZLMediaKit流媒体框架
Ubuntu访问

项目整合和配置

1.打开IDEA,通过git导入wvp-GB28181-pro项目
默认application.yml配置文件,需要将application-dev.yml的内容修改并复制到application.yml
application.yml文件内容

    # REDIS数据库配置
    redis:
      # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
      host: 127.0.0.1
      # [必须修改] 端口号
      port: 6379
      # [可选] 数据库 DB
      database: 1
      # [可选] 超时时间
      timeout: 10000
  # mysql数据源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
    username: root
    password: root
    druid:
      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:log4j
      useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
  port: 18080
# 作为28181服务器的配置
sip:
  # [必须修改] 本机的IP
  ip: 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服务器的内网IP
  ip: 192.168.1.3
  # [必须修改] zlm服务器的http.port
  http-port: 8080
  # [可选] zlm服务器的hook.admin_params=secret
  secret: 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.摄像头配置

扫描二维码关注公众号,回复: 15200146 查看本文章

在这里插入图片描述

4.登陆界面
用户admin
密码admin
在这里插入图片描述
5.预览界面
在这里插入图片描述
6.云台控制
在这里插入图片描述
7.ZLMediaKit推流成功界面
在这里插入图片描述

注意事项
ZLMediaKit配置文件config.ini和 wvp-GB28181-pro的配置应该一致

media:
  id: your_server_id
  # [必须修改] zlm服务器的内网IP
  ip: 192.168.1.3
  # [必须修改] zlm服务器的http.port
  http-port: 8080
  # [可选] zlm服务器的hook.admin_params=secret
  secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc

后续准备进行现场并发测试和进行二次开发以适应客户的业务系统

猜你喜欢

转载自blog.csdn.net/m0_38110240/article/details/129957044