wvp-GB28181-pro 实战指南:GB28181 摄像头接入与取流一步到位
【免费下载链接】wvp-GB28181-pro基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将普通摄像机/直播流/直播推流转国标共享到国标平台。项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro
本文写给负责对接监控摄像头的后端与集成工程师。读完你能独立完成 wvp-GB28181-pro 的部署、GB28181 设备接入并保活、实时取流、录像回放倍速,以及把流 RTMP 推给第三方平台。全文按"部署 → 接设备 → 取流 → 回放 → 推流 → 保活 → 速查表"七步展开,每步给可执行的接口与验证方法。
把 wvp-GB28181-pro 平台跑起来
本节完成后你能得到一套可登录、可调接口的运行实例,并核对好四个关键端口。
目标:得到运行中的 wvp 服务 + 可访问的管理页前置:已安装 Docker 与 docker compose关键接口:登录GET /api/user/login(后续请求带请求头access-token)步骤:
cd docker docker compose up -d验证:浏览器访问http://<host>:8080能看到管理页;接口层直接监听18978,可用登录接口取 token。注意docker/.env里要配SIP_Domain、SIP_Id、SIP_Password、Stream_IP、SDP_IP,这些值会联动到 SIP 与媒体服务器。
端口速记:管理页与代理8080(nginx)、wvp API18978、SIP 信令8116、媒体收流 RTMP10935。
GB28181 设备接入与 SIP 注册保活
本节完成后你能把一台摄像头加进平台、触发通道同步,并确认它在线。
目标:设备注册上线、通道同步完成前置:设备侧已按本平台填好 SIP 域(SIP_Domain)、SIP 端口8116与认证口令关键接口:添加POST /api/device/query/device/add、同步GET /api/device/query/devices/{deviceId}/sync步骤:先登录拿 token,再预录设备
curl -X POST http://127.0.0.1:18978/api/user/login \ -d "username=admin&password=admin" curl -X POST http://127.0.0.1:18978/api/device/query/device/add \ -H "access-token: $TOKEN" -H "Content-Type: application/json" \ -d '{"deviceId":"33010400001320000001","name":"东门卡口","manufacturer":"宇视","ip":"172.16.5.21","port":5060}'验证:GET /api/device/query/devices/33010400001320000001返回的status为在线;GET /api/device/query/sync_status?deviceId=33010400001320000001返回code=0。若 sync 提示"设备尚未注册过",说明设备还没 REGISTER 上来,属正常,等注册后再触发同步。
实时播放接口:从点播开始到拿到流地址
本节完成后你能对任意在线通道发起点播,拿到 flv / rtmp / hls 多种格式地址。
目标:拿到一路可播放的实时流地址前置:设备在线,通道已同步(设备详情status为在线)关键接口:开始GET /api/play/start/{deviceId}/{channelId}、停止GET /api/play/stop/{deviceId}/{channelId}步骤:
curl -H "access-token: $TOKEN" \ "http://127.0.0.1:18978/api/play/start/33010400001320000001/3301040000132000000101"验证:返回code=0,data内含flv、rtmp、hls等字段,flv地址可被播放器直接打开。点播默认等待30秒(user-settings.play-timeout),超时返回"点播超时"。看完务必调 stop 接口释放 RTP 会话,否则通道会一直被占用。
录像回放倍速:开始、拖动、调速与停止
本节完成后你能调取指定时段录像,并在播放中做倍速与拖动。
目标:对某通道指定时段发起回放,并支持倍速 / 暂停 / 拖动前置:该时段设备确有录像关键接口:
- 开始
GET /api/playback/start/{deviceId}/{channelId},参数startTime、endTime(格式yyyy-MM-dd HH:mm:ss) - 倍速
GET /api/playback/speed/{streamId}/{speed},speed取 0.25 / 0.5 / 1 / 2 / 4 / 8 - 拖动
GET /api/playback/seek/{streamId}/{seekTime}(偏移秒) - 暂停 / 恢复
GET /api/playback/pause/{streamId}、GET /api/playback/resume/{streamId} - 停止
GET /api/playback/stop/{deviceId}/{channelId}/{stream}
步骤:先 start 拿到回放流,再用返回的stream作为streamId调 speed / seek。验证:start 返回code=0且带流地址;调 4 倍速后画面按 4 倍推进;停止后通道不再有回放会话。可用GET /api/gb_record/query/{deviceId}/{channelId}先确认该时段有录像文件再回放。
RTMP 推流:把国标流分发到第三方平台
本节完成后你能把已取到的流推到第三方 RTMP 平台,或用国标级联把流共享给上级平台。
目标:把一路国标流持续推送到外部 RTMP 地址前置:目标 RTMP 地址网络可达、app 与 stream 名确定关键接口:
- 添加任务
POST /api/push/add(url、app、stream、mediaServerId、enabled) - 启动
GET /api/push/start?id={推流ID} - 列表
GET /api/push/list、强制停止GET /api/push/forceClose?app=&stream=步骤:
curl -X POST http://127.0.0.1:18978/api/push/add \ -H "access-token: $TOKEN" -H "Content-Type: application/json" \ -d '{"name":"东门卡口直播","url":"rtmp://live.example.com/live/gate-east","mediaServerId":"polaris","enabled":true,"app":"live","stream":"gate-east"}'验证:GET /api/push/list能看到该任务且状态为已启动;目标平台收到gate-east一路流。若对接的是上级国标平台而非普通 RTMP,改走国标级联,在 doc/ 的级联文档里配置对端平台与共享通道。
设备在线监控:心跳统计与目录订阅
本节完成后你能判断设备何时在线 / 掉线,并在通道增删时自动同步,不用人工盯。
目标:拿到设备在线时间点,并让通道变更自动重新同步前置:设备已接入关键接口:
- 目录订阅
GET /api/device/query/subscribe/catalog?id={设备数据库ID}&cycle={秒} - 心跳统计
GET /api/device/query/statistics/keepalive?deviceId=&count= - 注册统计
GET /api/device/query/statistics/register?deviceId=&count= - 主动状态
GET /api/device/query/devices/{deviceId}/status步骤:对关注保活的设备开启目录订阅(cycle即订阅周期),通道变化时平台自动重新同步目录。验证:keepalive 按时间正序返回最近 N 条在线记录;掉线时最新记录的时间戳会停更;重新注册后 status 接口恢复在线。
两张速查表
API 速查表
| 功能 | 方法与路径 | 关键参数 | 一句话用途 |
|---|---|---|---|
| 登录取 token | GET/POST /api/user/login | username、password | 后续请求带 access-token |
| 分页查设备 | GET /api/device/query/devices | page、count、status | 列设备并过滤在线 |
| 查设备详情 | GET /api/device/query/devices/{deviceId} | deviceId | 看单台设备状态 |
| 添加设备 | POST /api/device/query/device/add | deviceId、ip、port | 预录入国标设备 |
| 同步通道 | GET /api/device/query/devices/{deviceId}/sync | deviceId | 触发目录同步 |
| 查同步进度 | GET /api/device/query/sync_status | deviceId | 看通道同步是否完成 |
| 查通道 | GET /api/device/query/devices/{deviceId}/channels | page、count、online | 列出设备下通道 |
| 开始点播 | GET /api/play/start/{deviceId}/{channelId} | deviceId、channelId | 拿实时流地址 |
| 停止点播 | GET /api/play/stop/{deviceId}/{channelId} | deviceId、channelId | 结束实时流 |
| 开始回放 | GET /api/playback/start/{deviceId}/{channelId} | startTime、endTime | 拿录像流地址 |
| 回放倍速 | GET /api/playback/speed/{streamId}/{speed} | speed | 0.25~8 倍速 |
| 录像查询 | GET /api/gb_record/query/{deviceId}/{channelId} | 时间范围 | 查有哪些录像文件 |
| 添加推流 | POST /api/push/add | url、app、stream | 把流推到第三方 |
| 开始推流 | GET /api/push/start | id | 启动推流任务 |
| 目录订阅 | GET /api/device/query/subscribe/catalog | id、cycle | 通道变更自动同步 |
| 心跳统计 | GET /api/device/query/statistics/keepalive | deviceId、count | 看设备在线时间点 |
故障速查表
| 现象 | 最可能原因 | 验证方式 | 处理动作 |
|---|---|---|---|
| 设备一直 OFFLINE | SIP 域 / 端口 / 口令不匹配 | 设备侧抓 REGISTER;查/api/device/query/devices/{deviceId}的 status | 核对SIP_Domain、端口8116与SIP_Password一致 |
| 添加后通道为空 | 设备尚未注册或同步未触发 | sync 返回"设备尚未注册过" | 等设备 REGISTER 后再调 sync,看 sync_status |
| 点播返回"点播超时" | RTP 端口不可达 / 传输模式不对 | 查媒体10000端口与 device 的 streamMode | 调/api/device/query/transport/{deviceId}/{UDP\|TCP-ACTIVE},检查防火墙 |
| 回放无流 | 该时段无录像 | /api/gb_record/query/{deviceId}/{channelId}返回空 | 改startTime/endTime到有录像的时段 |
| 推流第三方收不到 | 目标 RTMP 不可达 / app-stream 错 | 目标服务器收流日志;/api/push/list任务状态 | 核对url/app/stream,换内网可达地址 |
下一步清单
- 想弄懂 SIP 注册、级联广播的协议细节,读 doc/(
doc/_content/theory/register.md、broadcast_cascade.md)。 - 要改端口、SIP 域或媒体地址,看 docker/ 里的
docker-compose.yml与docker/wvp/wvp/application-docker.yml。 - 自建库而非用容器,执行 数据库/ 下的
数据库/2.7.4/初始化-mysql-2.7.4.sql完成建表。
【免费下载链接】wvp-GB28181-pro基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将普通摄像机/直播流/直播推流转国标共享到国标平台。项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考