ZLMediaKit + wvp-GB28181-pro部署(windows64位)
一、参考链接(多看wiki)
1.1. ZLMediaKit
1.2. wvp-GB28181-pro
1.3. 参考
- ZLMediaKit在Windows下启用WebRtc编译(64位)
- ZLMediaKit webRTC编译与测试
- JAVA-WVP+ZLMediaKit+MediaServerUI实现摄像头 GB28181推流播放录制
二 、在windwos环境下部署ZLMediaKit
2.1. 准备
software | version |
---|---|
cmake | 3.20.5 |
Microsoft Visual Studio | 2017 |
openssl | 1.1.1m |
libsrtp | 2.4.0 |
2.2. 编译libsrtp(webrtc需要)
- 需要将openssl添加到环境变量:
- 解压并新建build文件夹:
- 新建文件夹用于存放make install后的文件,如:D:\DevelopTools\libsrtp\srtp2。
- 打开cmake-gui,设置源代码和build路径,点击Configure设置生成器:
- 配置cmake选项:
- 勾选BUILD_SHARED_LIBS,生成srtp2.dll
- 填写CMAKE_INSTALL_PREFIX,用于存放make install后的include和lib
- 勾选ENABLE_OPENSSL,已经将openssl放入环境变量,会自动加载openssl的库文件路径
- 点击Configure后,如下图所示,然后点击Generate,在build文件夹中生成libsrtp的solution:
- 在build文件夹中双击打开libsrtp2.sln,在vs2017中生成解决方案,再右键INSTALL点击生成:
- 在CMAKE_INSTALL_PREFIX配置的路径下生成以下文件:
- 最后,添加libsrtp的环境变量:
2.3. 编译ZLMediaKit
- 下载源代码:
# 国内用户推荐从同步镜像网站gitee下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
# 千万不要忘记执行这句命令
git submodule update --init
- 打开cmake-gui,设置源代码和新建的build文件夹路径,点击Configure配置vs2017、x64。然后填写CMAKE_INSTALL_PREFIX路径(D:\ZLMediaKit),勾选ENABLE_WEBRTC,同样会自动加载openssl的相关配置。最后点击Generate,在build文件夹中生成ZLMediaKit.sln:
- 双击打开ZLMediaKit.sln,生成解决方案,再右键INSTALL点击生成:
- 最后会在D:\DevelopTools\zlm\ZLMediaKit\release\windows64\Debug\Debug路径下生成以下文件:
2.4. 运行
- 由于没有webrtc测试前端文件,所以需要将ZLMediaKit根目录下的www文件夹,拷贝到MediaServer.exe同级目录,然后在当前目录cmd中执行MediaServer.exe,或直接双击它:
Remark:启动MediaServer.exe时端口号被占用:1. 更改config.ini配置文件;2. 结束相关进程。
# 查询占用554端口号的进程(如:PID为17928)
netstat -ano|findsrt 554
# 查询PID为17928的进程名称(如:MediaServer.exe)
tasklist|find 17928
# 结束进程(可以通过命令行结束进程,也可以在任务管理器的服务中根据PID结束进程)
taskkill /pid 17928 -t -f
- 在MediaServer.exe的同级目录中配置config.ini。我这里先没配置,直接运行后打开网页,会有webrtc。
不过我点进去后是乱码。
三、在windows环境下部署wvp-GB28181-pro
3.1. 准备
项目运行依赖redis、jdk1.8,打包依赖git、maven、nodejs、npm。
software | version |
---|---|
redis:参考链接 | win-3.2.100 |
maven | 3.6.3 |
node/npm | 14.19.0/6.14.16 |
3.2. 编译WVP-PRO
- 下载源代码:
git clone https://gitee.com/pan648540858/wvp-GB28181-pro
- 编译静态页面:
cd wvp-GB28181-pro/web_src/
# 配置仓库,不然可能会出现网络问题导致编译报错
npm --registry=https://registry.npm.taobao.org
npm install
npm run build
编译如果报错, 一般都是网络问题, 导致的依赖包下载失败
编译完成后在src/main/resources下出现static目录
- 打包项目, 生成可执行jar
cd wvp-GB28181-pro
mvn package
编译如果报错, 一般都是网络问题, 导致的依赖包下载失败
编译完成后在target目录下出现wvp-pro-x.x-xxxxxxxx.jar,比如我的是wvp-pro-2.2.1-05201142.jar
3.3. 配置
- 配置application-dev.yml(在src/main/resources目录下),新生成的内容如下所示:
spring:
# [可选]上传文件大小限制
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
# REDIS数据库配置
redis:
# [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
host: 127.0.0.1
# [必须修改] 端口号
port: 6379
# [可选] 数据库 DB
database: 6
# [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
password: xxxx
# [可选] 超时时间
timeout: 10000
# [可选] jdbc数据库配置, 项目使用sqlite作为数据库,一般不需要配置
# mysql数据源
datasource:
type: com.alibaba.druid.pool.DruidDataSource
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
username: xxxx
password: xxxx
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,wall,slf4j # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall
useGlobalDataSourceStat: true # 合并多个DruidDataSource的监控数据
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
#stat-view-servlet.url-pattern: /admin/druid/*
#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
port: 18080
# 作为28181服务器的配置
sip:
# [必须修改] 本机的IP
ip: 10.16.xxx.xxx
# [可选] 28181服务监听的端口
port: 5060
# 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
# 后两位为行业编码,定义参照附录D.3
# 3701020049标识山东济南历下区 信息行业接入
# [可选]
domain: 4401020049
# [可选]
id: 44010200492000000001
# [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
password: admin123
#zlm 默认服务器配置
media:
id: j6i8Pv5SnnLyuoib
# [必须修改] zlm服务器的内网IP
ip: 10.16.xxx.xxx
# [必须修改] zlm服务器的http.port
http-port: xxxx
# [可选] 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: 18081
# [可选] 日志配置, 一般不需要改
logging:
config: classpath:logback-spring-local.xml
# 版本信息, 不需修改
version:
version: "@project.version@"
description: "@project.description@"
artifact-id: "@project.artifactId@"
Remark:
- 记得开启redis服务。
- 先在mysql中新建wvp数据库,然后建表:1. 运行sql目录下的mysql.sql(可能会报错);2. 或复制mysql.sql中的内容,在wvp数据库中以查询的方式建表:
- media.id要与zlm的config.ini中[general]下的mediaServerId一致,比如我的是j9awLgYX8c7TpGN1。
3.4. 运行
- 启动ZLM
- 运行WVP:1. cd cd wvp-GB28181-pro/target; java -jar wvp-pro-*.jar;2. 直接用idea运行
- 访问web:http://ip:port
比如我部署的服务ip为10.16.31.250, server.port为18080, 那么访问地址为http://10.16.31.250:108080, 会自动跳转到登陆页,默认用户名:admin, 密码:admin。
- 首页
3.5. 添加摄像头
-
配置海康IPC GB28181协议传输
-
注册成功
-
实时监控
-
拉流代理