WVPPro+ZLMediaKit+FFMPEG视频监控平台搭建,(包括 OBS/VLC推流 +GB28181模拟客户端 调试测试)
文章目录
一,WVP Pro系统简介
WVP-PRO基于GB/T 28181-2016标准实现的流媒体平台,依托优秀的开源流媒体服务ZLMediaKit ,提供完善丰富的功能。
GB/T 28181-2016 中文标准名称是《公共安全视频监控联网系统信息传输、交换、控制技术要求》是监控领域的国家标准。大量应用于政府视频平台。
通过28181协议你可以将IPC摄像头接入平台,可以观看也可以使用28181/rtsp/rtmp/flv等协议将视频流分发到其他平台。
二, 部署WVP Pro项目
1,源码下载
项目源码下载地址 gitee 或者 项目源码下载地址 github
ZLMediaKit 源码下载
打开官网克隆下载或下载zip即可,如下图:
下载完成工程代码结构如下图
2,端口开放
3,搭建ZLMediaKit
方式一:直接下载二进制文件
zlmediakit采用 github action 持续集成自动编译打包上传编译产出包,issue列表下载最新sdk库文件以及可执行文件。
方式二: docker 搭建
#拉取镜像
docker pull zlmediakit/zlmediakit:master
#容器运行
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
方式三:重新编译
请参考 快速开始
4,编译前端代码
cd wvp-GB28181-pro/web_src/
npm --registry=https://registry.npmmirror.com install
npm run build
编译完成样子如下图(编译完成后在src/main/resources下出现static目录,至此前端已部署springboot 中后端启动即可访问,并非前后端分离项目那样单独部署)
5,运行后端代码及打包
数据库创建(mysql为例):使用navcat工具创建wvp2的数据 (编码utf-8)运行 初始化-mysql-2.7.3.sql 创建表导入数据。创建好的数据库如下图:
修改配置文件:
打包及运行
查看ZLMediaKit 的 config.ini 文件
其他的使用端口不冲突的可以使用默认值
6,运行测试
运行 zlmediakit 媒体服务
运行结果如图:
运行wvp-pro成功如下图:
请求http://127.0.0.1:18080/ 用户名密码默认均为admin
OBS Studio rtmp推流测试
wvp 推流列表添加通道如下图
播放成功如下图
接入GB28181
查看平台接入信息
登录海康设置页面-平台接入-根据自己平台接入信息填写即可接入
接入成功后–点击通道–在点击播放即可看到摄像头实时画面
三,gb28181-client(模拟终端)源码配置与调试
为深入洞悉 GB28181 核心流程,我们将借助 gb28181-client 模拟终端,以此阐释程序的具体流转情形 。
GB28181 是中国国家标准《安全防范视频监控联网系统信息传输、交换、控制技术要求》,主要用于规范视频监控系统的联网与信息交互。其主要流程包括注册、注销、实时视频点播、云台控制等,以下是具体介绍:
-
注册流程
设备向平台注册:设备(如摄像头、DVR 等)启动后,会按照配置的平台信息,向 GB28181 平台发送注册请求消息,消息中包含设备的唯一标识、设备信息、位置信息等。
平台响应:平台接收到注册请求后,对设备信息进行验证和处理。如果信息合法有效,平台会向设备发送注册响应消息,告知设备注册成功,并分配相应的资源和权限。 -
注销流程
设备主动注销:当设备需要停止使用或进行维护等操作时,设备会向平台发送注销请求消息,请求从平台注销。
平台处理:平台收到注销请求后,会释放与该设备相关的资源,如通道资源、存储资源等,并向设备发送注销响应消息,确认注销操作。 -
实时视频点播流程
客户端请求:用户通过客户端软件(如监控客户端、手机 APP 等)向平台发送实时视频点播请求,请求中包含要观看的设备 ID、通道号等信息。
平台调度:平台接收到请求后,根据设备的在线状态和网络情况,向相应的设备发送视频流请求命令。
设备响应:设备收到视频流请求命令后,将实时视频数据按照 GB28181 规定的格式进行编码和封装,然后通过网络发送给平台。
平台转发:平台接收到设备发送的视频流后,对视频流进行处理和转发,将其发送给请求的客户端,客户端接收到视频流后进行解码和播放,实现实时视频观看。 -
云台控制流程
客户端操作:用户在客户端界面上对云台进行操作,如上下左右转动、缩放镜头等,客户端会将这些操作指令按照 GB28181 协议进行封装,并发送给平台。
平台转发:平台接收到云台控制指令后,根据指令中的设备 ID 和通道号,将指令转发给对应的设备。设备执行:设备接收到云台控制指令后,解析指令并控制云台设备执行相应的操作,如转动云台、调整镜头焦距等。 -
录像回放流程
客户端请求:用户在客户端上选择要回放的录像时间段和设备通道等信息,向平台发送录像回放请求。
平台查询:平台接收到请求后,根据设备 ID 和时间范围等信息,在存储系统中查询相应的录像文件。
平台推送:找到录像文件后,平台将录像文件按照 GB28181 协议进行处理和封装,然后发送给客户端。
客户端播放:客户端接收到录像数据后,进行解码和播放,用户即可查看历史录像。 -
报警联动流程
设备报警:当设备(如摄像头检测到移动目标、门禁系统检测到非法开门等)触发报警事件时,设备会向平台发送报警信息,包括报警类型、报警时间、设备位置等。
平台处理:平台接收到报警信息后,根据预设的报警联动策略,进行相应的处理,如启动录像、弹出报警窗口、发送短信或邮件通知等。
客户端响应:客户端如果处于登录状态且订阅了相关报警信息,平台会将报警信息推送给客户端,客户端会以声音、弹窗等方式提醒用户。
源码结构
配置
catalog.xml 设置模拟设备信息下载安装ffmpegffmpeg下载地址
配置环境变量
找到ffmpeg的bin目录添加至系统path即可
运行程序成功如图
调试流程
- 注册流程
打开postman 调用注册接口
http://127.0.0.1:8888/gb28181/register
gb28181-client 发起的注册信息
2025-01-21 14:57:48.422|INFO|15868|http-nio-8888-exec-1|gb28181-client|o.a.c.c.C.[.[.[/].log-173|Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-01-21 14:57:48.423|INFO|15868|http-nio-8888-exec-1|gb28181-client|o.s.w.s.DispatcherServlet.initServletBean-525|Initializing Servlet 'dispatcherServlet'
2025-01-21 14:57:48.423|INFO|15868|http-nio-8888-exec-1|gb28181-client|o.s.w.s.DispatcherServlet.initServletBean-547|Completed initialization in 0 ms
2025-01-21 14:57:48.472|INFO|15868|http-nio-8888-exec-1|gb28181-client|c.w.g.c.SIPCommander.register-79|要发送的注册消息:
REGISTER sip:41010500002000000001@192.168.2.19:8116 SIP/2.0
Call-ID: 3a2d57b33bd6c7d12f85560315b21790@0:0:0:0:0:0:0:0
CSeq: 1 REGISTER
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=FromRegister1737442668438
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;rport
Max-Forwards: 70
Contact: <sip:1000000000000000001@192.168.2.19:15080>
Expires: 3600
User-Agent: wydpp
Content-Length: 0
2025-01-21 14:57:48.497|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processResponse-100|收到401回复,来源:192.168.2.19:8116,
SIP/2.0 401 Unauthorized
CSeq: 1 REGISTER
Call-ID: 3a2d57b33bd6c7d12f85560315b21790@0:0:0:0:0:0:0:0
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=FromRegister1737442668438
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;rport=15080;branch=fromregister1737442668438-3a2d57b33bd6c7d12f85560315b21790-0-0-0-0-0-0-0-0-1-register-192.168.2.19-8116323830;received=192.168.2.19
WWW-Authenticate: Digest realm="4101050000",qop="auth",nonce="2aa47480c6ea0ccfaed97bebe0133d4d",algorithm=MD5
User-Agent: WVP-Pro v2.7.3.20250112
Content-Length: 0
2025-01-21 14:57:48.497|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.RegisterResponseProcessor.process-67|向平台:192.168.2.19:8116 发送带认证信息的注册消息!
2025-01-21 14:57:48.498|INFO|15868|EventScannerThread|gb28181-client|c.w.g.c.SIPCommander.register-79|要发送的注册消息:
REGISTER sip:41010500002000000001@192.168.2.19:8116 SIP/2.0
Call-ID: 3a2d57b33bd6c7d12f85560315b21790@0:0:0:0:0:0:0:0
CSeq: 2 REGISTER
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=FromRegister1737442668497
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;rport
Max-Forwards: 70
Contact: <sip:1000000000000000001@192.168.2.19:15080>
Expires: 3600
User-Agent: wydpp
Authorization: Digest username="1000000000000000001",realm="4101050000",nonce="2aa47480c6ea0ccfaed97bebe0133d4d",uri="sip:[email protected]:8116",response="4c623877ee1765cd2313976b47f2f050",algorithm=MD5,qop=auth,cnonce="fbb8cfa8-b509-4f14-b3c6-d2b5aa330815",nc=00000001
Content-Length: 0
2025-01-21 14:57:48.508|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processResponse-102|收到200回复,来源:192.168.2.19:8116
2025-01-21 14:57:48.509|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.RegisterResponseProcessor.process-75|设备向平台:192.168.2.19:8116 注册成功!
2025-01-21 14:57:48.523|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processRequest-77|收到请求:
MESSAGE sip:1000000000000000001@192.168.2.19:15080 SIP/2.0
Call-ID: 5a74024970abcadc837981c7b880344a@192.168.2.19
CSeq: 8 MESSAGE
From: <sip:41010500002000000001@4101050000>;tag=31ace9db261441a182368d88acc9e5a9
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;branch=z9hG4bK6500993257;rport=8116;received=192.168.2.19
Max-Forwards: 70
User-Agent: WVP-Pro v2.7.3.20250112
Content-Type: Application/MANSCDP+xml
Content-Length: 150
<?xml version="1.0" encoding="GB2312"?>
<Query>
<CmdType>DeviceInfo</CmdType>
<SN>685176</SN>
<DeviceID>1000000000000000001</DeviceID>
</Query>
2025-01-21 14:57:48.624|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.m.q.c.DeviceInfoQueryMessageHandler.handForPlatform-47|接收到DeviceInfo查询消息
2025-01-21 14:57:48.625|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.SIPRequestProcessorParent.responseAck-128|回复200 ok消息:SIP/2.0 200 OK
CSeq: 8 MESSAGE
Call-ID: 5a74024970abcadc837981c7b880344a@192.168.2.19
From: <sip:41010500002000000001@4101050000>;tag=31ace9db261441a182368d88acc9e5a9
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;branch=z9hG4bK6500993257;rport=8116;received=192.168.2.19
Content-Length: 0
2025-01-21 14:57:48.627|INFO|15868|EventScannerThread|gb28181-client|c.w.g.c.SIPCommander.deviceInfoResponse-211|要发送的deviceInfo消息:
MESSAGE sip:41010500002000000001@192.168.2.19:8116 SIP/2.0
Call-ID: f5c9324b1ca3cbd51718e11fbe859229@0:0:0:0:0:0:0:0
CSeq: 1 MESSAGE
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=31ace9db261441a182368d88acc9e5a9
To: <sip:41010500002000000001@4101050000>
Via: SIP/2.0/UDP 41010500002000000001:8116;rport
Max-Forwards: 70
User-Agent: wydpp
Content-Type: APPLICATION/MANSCDP+xml
Content-Length: 486
<?xml version="1.0"?>
<Response>
<CmdType>DeviceInfo</CmdType>
<SN>685176</SN>
<DeviceName>gb28181-client</DeviceName>
<DeviceID>1000000000000000001</DeviceID>
<Result>OK</Result>
<!-- 设备生产商 -->
<Manufacturer>海康威视</Manufacturer>
<!-- 设备型号(可选)-->
<Model>TC-2808AN-HD</Model>
<!-- 设备固件版本(可选)-->
<Firmware>V2.1,build091111</Firmware>
<!-- 视频输入通道数(可选)-->
<Channel>1</Channel>/>
</Response>
2025-01-21 14:57:48.628|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processRequest-77|收到请求:
MESSAGE sip:1000000000000000001@192.168.2.19:15080 SIP/2.0
Call-ID: d4a607acb2eb5b87d4372751ba9132eb@192.168.2.19
CSeq: 9 MESSAGE
From: <sip:41010500002000000001@4101050000>;tag=d2ddd2d241134cea823042941db95b6d
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;branch=z9hG4bK9594365548;rport=8116;received=192.168.2.19
Max-Forwards: 70
User-Agent: WVP-Pro v2.7.3.20250112
Content-Type: Application/MANSCDP+xml
Content-Length: 153
<?xml version="1.0" encoding="GB2312"?>
<Query>
<CmdType>Catalog</CmdType>
<SN>272913</SN>
<DeviceID>1000000000000000001</DeviceID>
</Query>
2025-01-21 14:57:48.629|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.SIPRequestProcessorParent.responseAck-128|回复200 ok消息:SIP/2.0 200 OK
CSeq: 9 MESSAGE
Call-ID: d4a607acb2eb5b87d4372751ba9132eb@192.168.2.19
From: <sip:41010500002000000001@4101050000>;tag=d2ddd2d241134cea823042941db95b6d
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;branch=z9hG4bK9594365548;rport=8116;received=192.168.2.19
Content-Length: 0
2025-01-21 14:57:48.631|INFO|15868|EventScannerThread|gb28181-client|c.w.g.c.SIPCommander.catalogResponse-185|要发送的catalog消息:
MESSAGE sip:41010500002000000001@192.168.2.19:8116 SIP/2.0
Call-ID: 18acb8c02d8a15e0152a56b1bb436d63@0:0:0:0:0:0:0:0
CSeq: 1 MESSAGE
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=d2ddd2d241134cea823042941db95b6d
To: <sip:41010500002000000001@4101050000>
Via: SIP/2.0/UDP 41010500002000000001:8116;rport
Max-Forwards: 70
User-Agent: wydpp
Content-Type: APPLICATION/MANSCDP+xml
Content-Length: 2442
<?xml version="1.0"?>
<Response>
<CmdType>Catalog</CmdType>
<SN>272913</SN>
<DeviceID>1000000000000000001</DeviceID>
<SumNum>100</SumNum>
<DeviceList>
<Item>
<!-- 设备/区域/系统编码(必选)-->
<DeviceID>1000000000000000001</DeviceID>
<!-- 设备/区域/系统名称(必选)-->
<Name>Camera</Name>
<!-- 当为设备时,设备厂商(必选)-->
<Manufacturer>海康</Manufacturer>
<!-- 当为设备时,设备型号(必选)-->
<Model>Model</Model>
<!-- 当为设备时,设备归属(必选)-->
<Owner>Owner</Owner>
<!-- 行政区域(必选)-->
<CivilCode>CivilCode</CivilCode>
<!-- 警区(可选)-->
<Block>Block</Block>
<!-- 当为设备时,安装地址(必选)-->
<Address>呼和浩特市</Address>
<!-- 当为设备时,是否有子设备(必选)1有,0没有-->
<Parental>0</Parental>
<!-- 父设备/区域/系统ID(必选)-->
<ParentID>1000000000000000001</ParentID>
<!-- 信令安全模式(可选)缺省为0; 0:不采用;2:S/MIME 签名方式;3:S/ MIME加密签名同时采用方式;4:数字摘要方式-->
<SafetyWay>0</SafetyWay>
<!-- 注册方式(必选)缺省为1;1:符合IETFRFC3261标准的认证注册模 式;2:基于口令的双向认证注册模式;3:基于数字证书的双向认证注册模式-->
<RegisterWay>1</RegisterWay>
<!-- 证书序列号(有证书的设备必选)-->
<CertNum>CertNum1</CertNum>
<!-- 证书有效标识(有证书的设备必选)缺省为0;证书有效标识:0:无效 1: 有效-->
<Certifiable>0</Certifiable>
<!-- 无效原因码(有证书且证书无效的设备必选)-->
<ErrCode>400</ErrCode>
<!-- 证书终止有效期(有证书的设备必选)-->
<EndTime>2010-11-11T19:46:17</EndTime>
<!-- 保密属性(必选)缺省为0;0:不涉密,1:涉密-->
<Secrecy>0</Secrecy>
<!-- 设备/区域/系统IP地址(可选)-->
<IPAddress>192.168.2.19</IPAddress>
<!-- 设备/区域/系统端口(可选)-->
<Port>15060</Port>
<!-- 设备口令(可选)-->
<Password>12345678</Password>
<!-- 设备状态(必选)-->
<Status>Status1</Status>
<!-- 经度(可选)-->
<Longitude>171.4</Longitude>
<!-- 纬度(可选)-->
<Latitude>34.2</Latitude>
</Item>
</DeviceList>
</Response>
2025-01-21 14:57:48.645|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processResponse-102|收到200回复,来源:41010500002000000001:8116
2025-01-21 14:57:48.645|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processResponse-102|收到200回复,来源:41010500002000000001:8116
wvp输出的消息
2025-01-21 14:57:48.480 [async-31] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 99 [注册请求]设备:1000000000000000001, 开始处理: 192.168.2.19:15080
2025-01-21 14:57:48.480 [async-31] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 128 [注册请求] 设备:1000000000000000001, 回复401: 192.168.2.19:15080
2025-01-21 14:57:48.503 [async-32] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 99 [注册请求]设备:1000000000000000001, 开始处理: 192.168.2.19:15080
2025-01-21 14:57:48.503 [async-32] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 208 [注册成功] deviceId: 1000000000000000001->192.168.2.19:15080
2025-01-21 14:57:48.503 [async-32] INFO --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 102 [设备上线] deviceId:1000000000000000001->192.168.2.19:15080
2025-01-21 14:57:48.506 [async-32] INFO --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 130 [设备上线,首次注册]: 1000000000000000001,查询设备信息以及通道信息
2025-01-21 14:57:48.655 [schedule] INFO --- c.g.i.v.g.t.e.r.i.m.r.c.CatalogResponseMessageHandler: 166 [收到通道]设备: 1000000000000000001 -> 1个,1/100
在国标接入列表中自动出现模拟设备信息则成功注册
2. 点播流程
点播流从wvp页面发起
clinet端发起信息
2025-01-21 15:05:41.329|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processRequest-77|收到请求:
INVITE sip:1000000000000000001@192.168.2.19:15080 SIP/2.0
Call-ID: 3325eba58941f74022edb973476b0d5f@192.168.2.19
CSeq: 10 INVITE
From: <sip:41010500002000000001@4101050000>;tag=060b3b6d30454cc89b3ad4b8dc67b4bf
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;branch=z9hG4bK7761385039;rport=8116;received=192.168.2.19
Max-Forwards: 70
User-Agent: WVP-Pro v2.7.3.20250112
Contact: <sip:41010500002000000001@192.168.2.19:8116>
Subject: 1000000000000000001:0105009233,41010500002000000001:0
Content-Type: APPLICATION/SDP
Content-Length: 285
v=0
o=1000000000000000001 0 0 IN IP4 192.168.2.19
s=Play
c=IN IP4 192.168.2.19
t=0 0
m=video 40832 TCP/RTP/AVP 96 97 98 99
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:99 H265/90000
a=setup:passive
a=connection:new
y=0105009233
2025-01-21 15:05:41.329|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.InviteRequestProcessor.process-109|收到平台41010500002000000001的实时视频Invite请求
2025-01-21 15:05:41.341|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.InviteRequestProcessor.process-160|设备1000000000000000001请求语音流,地址:192.168.2.19:40832,ssrc:0105009233
2025-01-21 15:05:41.342|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.SIPRequestProcessorParent.responseAck-167|回复ack消息:/nSIP/2.0 200 OK
CSeq: 10 INVITE
Call-ID: 3325eba58941f74022edb973476b0d5f@192.168.2.19
From: <sip:41010500002000000001@4101050000>;tag=060b3b6d30454cc89b3ad4b8dc67b4bf
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;branch=z9hG4bK7761385039;rport=8116;received=192.168.2.19
Content-Type: APPLICATION/SDP
Contact: <sip:1000000000000000001@192.168.2.19:15080>
Content-Length: 178
v=0
o=1000000000000000001 0 0 IN IP4 192.168.2.19
s=gb28181-client
c=IN IP4 192.168.2.19
t=0 0
m=video 40832 RTP/AVP 96
a=sendonly
a=rtpmap:96 PS/90000
y=0105009233
f=
2025-01-21 15:05:41.348|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processRequest-77|收到请求:
ACK sip:1000000000000000001@192.168.2.19:15080 SIP/2.0
Call-ID: 3325eba58941f74022edb973476b0d5f@192.168.2.19
CSeq: 10 ACK
From: <sip:41010500002000000001@4101050000>;tag=060b3b6d30454cc89b3ad4b8dc67b4bf
To: <sip:1000000000000000001@192.168.2.19:15080>;tag=76cef353
Via: SIP/2.0/UDP 192.168.2.19:8116;branch=z9hG4bK9791036275
Max-Forwards: 70
User-Agent: WVP-Pro v2.7.3.20250112
Contact: <sip:41010500002000000001@192.168.2.19:8116>
Content-Length: 0
2025-01-21 15:05:41.348|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.InviteRequestProcessor.lambda$process$0-166|开始推流
2025-01-21 15:05:41.348|INFO|15868|EventScannerThread|gb28181-client|c.w.g.c.FfmpegCommander.closeAllStream-71|关闭所有推流
2025-01-21 15:05:41.349|INFO|15868|EventScannerThread|gb28181-client|c.w.g.c.FfmpegCommander.pushStream-29|callId=3325eba58941f74022edb973476b0d5f@192.168.2.19,
推流命令=E:\ffmpeg-7.1\bin\ffmpeg.exe -re -i D:\temp\video\222.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://192.168.2.19:40832
2025-01-21 15:05:49.846|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processTransactionTerminated-152|processTransactionTerminated
2025-01-21 15:05:50.692|INFO|15868|ThreadPoolTaskScheduler2|gb28181-client|c.w.g.c.SIPCommander.keepalive-157|发送心跳消息
2025-01-21 15:05:50.785|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processResponse-102|收到200回复,来源:192.168.2.19:15080
wvp端消息
2025-01-21 15:05:41.315 [http-nio-18080-exec-1] INFO --- c.g.iot.vmp.gb28181.controller.PlayController: 86 [开始点播] deviceId:1000000000000000001, channelId:1000000000000000001,
2025-01-21 15:05:41.326 [http-nio-18080-exec-1] INFO --- c.g.iot.vmp.gb28181.service.impl.PlayServiceImpl: 428 [点播开始] deviceId: 1000000000000000001, channelId(1000000000000000001): 26,码流类型:null, 收流端口: 40832, 码流:1000000000000000001_1000000000000000001, 收流模式:TCP-PASSIVE, SSRC: 0105009233, SSRC校验:false
2025-01-21 15:05:41.347 [async-20] INFO --- c.g.i.v.g.t.e.r.impl.InviteResponseProcessor: 81 [回复ack] 1000000000000000001-> 192.168.2.19:15080
2025-01-21 15:05:45.863 [http-nio-18080-exec-9] INFO --- c.genersoft.iot.vmp.media.zlm.ZLMHttpHookListener: 100 [ZLM HOOK]推流鉴权:mcew0j9xR24sd2jQ->OnPublishHookParam{
id='1000000000000000001_1000000000000000001', app='rtp', stream='1000000000000000001_1000000000000000001', ip='192.168.2.19', params='', port=59878, schema='rtp', vhost='__defaultVhost__'}
2025-01-21 15:06:11.355 [http-nio-18080-exec-8] INFO --- c.genersoft.iot.vmp.media.zlm.ZLMHttpHookListener: 171 [ZLM HOOK]流无人观看:mcew0j9xR24sd2jQ->hls->rtp/1000000000000000001_1000000000000000001
媒体服务器消息
3 ,停止推送注销
cliient信息
2025-01-21 15:11:09.869|INFO|15868|http-nio-8888-exec-4|gb28181-client|c.w.g.c.FfmpegCommander.closeStream-60|关闭推流:null
2025-01-21 15:11:09.870|INFO|15868|http-nio-8888-exec-4|gb28181-client|c.w.g.c.FfmpegCommander.closeAllStream-71|关闭所有推流
2025-01-21 15:11:13.924|INFO|15868|http-nio-8888-exec-5|gb28181-client|c.w.g.c.SIPCommander.unRegister-102|要发送的注销消息:
REGISTER sip:41010500002000000001@192.168.2.19:8116 SIP/2.0
Call-ID: 2c689414c58d454cb973e820f12b06d8@0:0:0:0:0:0:0:0
CSeq: 1 REGISTER
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=FromRegister1737443473921
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;rport
Max-Forwards: 70
Contact: <sip:1000000000000000001@192.168.2.19:15080>
Expires: 0
User-Agent: wydpp
Content-Length: 0
2025-01-21 15:11:13.936|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processResponse-100|收到401回复,来源:192.168.2.19:8116,
SIP/2.0 401 Unauthorized
CSeq: 1 REGISTER
Call-ID: 2c689414c58d454cb973e820f12b06d8@0:0:0:0:0:0:0:0
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=FromRegister1737443473921
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;rport=15080;branch=fromregister1737443473921-2c689414c58d454cb973e820f12b06d8-0-0-0-0-0-0-0-0-1-register-192.168.2.19-8116323830;received=192.168.2.19
WWW-Authenticate: Digest realm="4101050000",qop="auth",nonce="017952f1d78c267250f40f24f48a3967",algorithm=MD5
User-Agent: WVP-Pro v2.7.3.20250112
Content-Length: 0
2025-01-21 15:11:13.936|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.RegisterResponseProcessor.process-70|向平台:192.168.2.19:8116 发送带认证信息的注销消息!
2025-01-21 15:11:13.936|INFO|15868|EventScannerThread|gb28181-client|c.w.g.c.SIPCommander.unRegister-126|要发送的注销消息:
REGISTER sip:41010500002000000001@192.168.2.19:8116 SIP/2.0
Call-ID: 2c689414c58d454cb973e820f12b06d8@0:0:0:0:0:0:0:0
CSeq: 2 REGISTER
From: <sip:1000000000000000001@192.168.2.19:15080>;tag=FromRegister1737443473936
To: <sip:1000000000000000001@192.168.2.19:15080>
Via: SIP/2.0/UDP 192.168.2.19:8116;rport
Max-Forwards: 70
Contact: <sip:1000000000000000001@192.168.2.19:15080>
Expires: 0
User-Agent: wydpp
Authorization: Digest username="1000000000000000001",realm="4101050000",nonce="017952f1d78c267250f40f24f48a3967",uri="sip:[email protected]:8116",response="abc7ce55535919e0f5d116848e2bbd90",algorithm=MD5,qop=auth,cnonce="161e5038-209d-4aee-a2d0-df48a7d3bd91",nc=00000001
Content-Length: 0
2025-01-21 15:11:13.939|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.SIPProcessorObserver.processResponse-102|收到200回复,来源:192.168.2.19:8116
2025-01-21 15:11:13.939|INFO|15868|EventScannerThread|gb28181-client|c.w.g.p.r.i.RegisterResponseProcessor.process-77|设备向平台:192.168.2.19:8116 注销成功!
2025-01-21 15:11:13.939|INFO|15868|EventScannerThread|gb28181-client|c.w.g.c.FfmpegCommander.closeAllStream-71|关闭所有推流
wvp的信息
2025-01-21 15:11:13.935 [async-3] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 99 [注销请求]设备:1000000000000000001, 开始处理: 192.168.2.19:15080
2025-01-21 15:11:13.935 [async-3] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 128 [注销请求] 设备:1000000000000000001, 回复401: 192.168.2.19:15080
2025-01-21 15:11:13.938 [async-5] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 99 [注销请求]设备:1000000000000000001, 开始处理: 192.168.2.19:15080
2025-01-21 15:11:13.938 [async-5] INFO --- c.g.i.v.g.t.e.r.impl.RegisterRequestProcessor: 213 [注销成功] deviceId: 1000000000000000001->192.168.2.19:15080
2025-01-21 15:11:13.938 [async-5] WARN --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 198 [设备离线],主动注销, device:1000000000000000001
2025-01-21 15:11:13.940 [async-5] INFO --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 204 [设备离线] device:1000000000000000001, 当前心跳间隔: 0, 上次心跳时间:2025-01-21 15:10:52, 上次注册时间: 2025-01-21 14:57:48
2025-01-21 15:11:13.940 [async-5] INFO --- c.g.iot.vmp.storager.impl.RedisCatchStorageImpl: 436 [redis通知] 推送设备/通道状态-> 1000000000000000001 OFF
2025-01-21 15:11:13.944 [async-5] INFO --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 274 [移除目录订阅]: 1000000000000000001
2025-01-21 15:11:13.944 [async-5] INFO --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 288 [移除移动位置订阅]失败,设备已经离线 : 1000000000000000001
2025-01-21 15:11:13.945 [async-5] INFO --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 321 [移除移动位置订阅]: 1000000000000000001
2025-01-21 15:11:13.945 [async-5] INFO --- c.g.iot.vmp.gb28181.service.impl.DeviceServiceImpl: 335 [移除移动位置订阅]失败,设备已经离线 : 1000000000000000001
媒体服务的注销信息
四,简单性能测试
测试环境:
使用 2 路国标模拟器进行接入,其中一路由 OBS 软件推流,另一路由笔记本电脑推流。值得注意的是,除笔记本外,其他设备均部署于同一台机器上 。pc机配置为如下图:
第一路模拟器:
第二路模拟器:
第三路OBS:
第四路OBS:
测试均为同时播放四路的情况下进行:
- 视频延时情况
2 cpu使用情况
3 . 内存情况
- 网络使用情况
五 ,相关源码及工具打包下载
六,总结
在实践过程中,我们通过搭建并细致配置 WVP 平台,对视频监控平台的运行机制有了全面且深入的理解。从平台架构到数据流转,每一个环节都让我们更清晰地认识到视频监控平台如何实现高效运作。
同时,通过深入学习与反复调试 GB28181 的基本流程,我们逐步掌握了 GB28181 标准的核心要点。从设备注册、实时视频点播到云台控制等,每一项操作都让我们对 GB28181 的应用有了更熟练的掌握,积累了丰富的实践经验。