wvp-GB28181-pro API开发指南:从设备接入到媒体流控制的完整解决方案
【免费下载链接】wvp-GB28181-pro项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro
引言:解决安防监控系统的API整合难题
在GB28181设备接入过程中,你是否面临设备管理复杂、媒体流控制混乱、接口文档零散的问题?wvp-GB28181-pro项目提供了完整的API解决方案,覆盖从设备注册到媒体流转发的全流程。本文基于项目实践,重构API文档结构,采用更直观的表达方式,帮助开发者快速掌握核心接口的使用方法。
读完本文你将获得:
- 设备全生命周期管理的完整接口调用链
- 实时流/回放流控制的全流程操作指南
- 10+实战场景的请求示例与响应解析
- API调用权限控制与性能优化建议
一、设备管理API:构建统一接入平台
1.1 设备基础管理接口
核心功能模块:设备注册、状态同步、信息维护
| 接口类型 | 请求方法 | 功能描述 | 权限要求 |
|---|---|---|---|
| 设备列表查询 | GET | 分页查询设备列表 | 管理员/操作员 |
| 设备详情获取 | GET | 获取单个设备完整信息 | 管理员/操作员 |
| 设备添加 | POST | 新增国标设备到系统 | 管理员 |
| 设备更新 | POST | 修改设备配置参数 | 管理员 |
| 设备删除 | DELETE | 从系统中移除设备 | 管理员 |
设备列表查询实战示例:
// 查询在线设备,分页显示 request({ method: 'get', url: '/api/device/query/devices', params: { page: 1, count: 20, status: 'ONLINE', query: '摄像头' } }).then(response => { const deviceList = response.data.list console.log('在线设备数量:', deviceList.length) })标准响应格式:
{ "code": 0, "msg": "success", "data": { "total": 156, "pages": 8, "list": [ { "deviceId": "34020000001380000001", "name": "园区主入口摄像头", "manufacturer": "海康威视", "model": "DS-2CD3T47FWDV2-LS", "status": "ONLINE", "registerTime": "2025-09-01T08:30:00Z", "lastKeepaliveTime": "2025-09-08T10:05:23Z" } ] } }1.2 设备状态同步机制
设备状态同步是确保系统实时性的关键,通过Catalog查询命令实现设备目录信息的实时更新:
关键控制接口:
| 接口路径 | 请求方法 | 功能描述 | 参数说明 |
|---|---|---|---|
/api/device/query/{deviceId}/sync | GET | 手动同步设备信息 | deviceId: 设备国标ID |
/api/device/control/guard | GET | 设备布防状态控制 | deviceId, guardCmd: SetGuard/ResetGuard |
/api/device/query/subscribe/catalog | GET | 订阅设备目录变化 | id:设备ID, cycle:订阅周期 |
/api/device/query/subscribe/mobile-position | GET | 订阅移动位置信息 | id, cycle, interval:上报间隔 |
设备布防控制示例:
// 设置设备进入布防状态 request({ method: 'get', url: '/api/device/control/guard', params: { deviceId: '34020000001380000001', guardCmd: 'SetGuard' } }).then(response => { if (response.code === 0) { console.log('设备布防成功') } })二、媒体流控制API:实现多协议视频流转发
2.1 实时流播放控制
实时流播放状态流转:
核心接口详情:
| 接口类型 | 请求方法 | 功能 | 请求参数 |
|---|---|---|---|
| 实时播放开始 | GET | 启动设备通道实时播放 | deviceId:设备ID, channelId:通道ID |
| 实时播放停止 | GET | 终止设备通道播放 | deviceId, channelId |
| 广播开始 | GET | 启动广播模式 | deviceId, channelId, broadcastMode |
| 广播停止 | GET | 停止广播模式 | deviceId, channelId |
实时播放完整流程:
// 1. 启动实时播放 const playResponse = await request({ method: 'get', url: `/api/play/start/34020000001380000001/3402000000138000000100` }) // 2. 获取播放流地址 if (playResponse.code === 0) { const streamUrl = playResponse.data.streamUrl console.log('播放流地址:', streamUrl) // 3. 初始化播放器 initVideoPlayer(streamUrl) }2.2 回放流控制接口
回放控制功能矩阵:
| 接口类型 | 请求方法 | 功能 | 参数说明 |
|---|---|---|---|
| 回放开始 | GET | 启动录像回放 | startTime, endTime: ISO时间格式 |
| 回放恢复 | GET | 恢复暂停的回放 | streamId: 回放流ID |
| 回放暂停 | GET | 暂停当前回放 | streamId |
| 播放速度调整 | GET | 设置回放速度 | speed: 0.5-4.0 |
| 回放停止 | GET | 终止回放流 | 三个参数组合标识唯一回放流 |
回放控制实战示例:
// 1. 启动录像回放 const playbackRes = await request({ method: 'get', url: '/api/playback/start/34020000001380000001/3402000000138000000100', params: { startTime: '2025-09-07T08:00:00Z', endTime: '2025-09-07T09:00:00Z' } }) const streamId = playbackRes.data.streamId console.log('回放流ID:', streamId) // 2. 设置4倍速播放 await request({ method: 'get', url: `/api/playback/speed/${streamId}/4.0` }) // 3. 停止回放 await request({ method: 'get', url: `/api/playback/stop/34020000001380000001/3402000000138000000100/${streamId}` })三、推拉流代理API:构建媒体流分发网络
3.1 推流代理架构
推流代理核心接口:
| 接口类型 | 请求方法 | 功能 | 请求体参数 |
|---|---|---|---|
| 推流任务添加 | POST | 创建新的推流任务 | name, url, mediaServerId, enabled |
| 推流列表查询 | GET | 获取所有推流任务 | page, count, query, pushing状态 |
| 推流启动 | GET | 激活推流任务 | id:推流任务ID |
| 推流任务删除 | POST | 移除推流任务 | id |
RTMP推流任务创建示例:
request({ method: 'post', url: '/api/push/add', data: { name: '园区东门直播流', url: 'rtmp://live.example.com/live/campus-east', mediaServerId: 'media_server_01', enabled: true, app: 'live', stream: 'campus-east' } }).then(response => { if (response.code === 0) { console.log('推流任务创建成功') } })3.2 拉流代理接口
拉流代理功能列表:
| 接口类型 | 请求方法 | 功能 | 请求参数 |
|---|---|---|---|
| 拉流代理添加 | POST | 创建拉流转发任务 | name, srcUrl, dstUrl, mediaServerId |
| 拉流列表查询 | GET | 获取所有拉流任务 | page, count, pulling状态 |
| 拉流启动 | GET | 开始拉流转发 | id |
| 拉流停止 | GET | 终止拉流任务 | id |
拉流代理配置流程:
// 添加拉流代理任务 const proxyResponse = await request({ method: 'post', url: '/api/proxy/add', data: { name: '园区西门监控', srcUrl: 'rtsp://192.168.1.102:554/stream1', dstUrl: 'rtmp://media.example.com/live/campus-west', mediaServerId: 'media_server_02' } }) if (proxyResponse.code === 0) { console.log('拉流代理配置成功') }四、实战场景:设备接入与媒体流控制完整流程
4.1 设备接入全流程操作
步骤1:设备注册配置
request({ method: 'post', url: '/api/device/query/device/add', data: { deviceId: '34020000001380000002', name: '园区西门摄像头', manufacturer: '大华', model: 'DH-IPC-HFW5249T-ZE', ip: '192.168.1.102', port: 5060, username: 'admin', password: 'password123' } })步骤2:设备通道查询
request({ method: 'get', url: '/api/device/query/devices/34020000001380000002/channels', params: { page: 1, count: 10, online: true } }).then(response => { const channels = response.data.list console.log('设备通道数量:', channels.length) })步骤3:实时预览启动
request({ method: 'get', url: '/api/play/start/34020000001380000002/3402000000138000000200' }).then(response => { if (response.code === 0) { const streamInfo = response.data console.log('播放流信息:', streamInfo) })4.2 错误处理与性能优化
常见错误码解析:
| 错误码 | 含义 | 处理建议 |
|---|---|---|
| 400 | 参数格式错误 | 检查必填参数和格式规范 |
| 401 | 身份认证失败 | 重新获取有效token |
| 403 | 操作权限不足 | 联系管理员分配相应权限 |
| 404 | 资源不存在 | 确认设备ID/通道ID是否正确 |
| 500 | 服务器内部异常 | 查看服务端日志定位问题 |
| 503 | 媒体服务不可用 | 检查ZLM服务运行状态 |
性能优化策略:
- 连接复用机制:对同一设备的连续操作复用HTTP连接,减少握手开销
- 批量查询优化:设备列表分页查询,单次请求限制50条以内
- 状态缓存策略:本地缓存设备在线状态,避免重复查询
- 异步处理模式:订阅操作采用长轮询方式,提升响应效率
- 超时控制设置:实时流操作设置30秒超时,防止无限等待
五、总结:构建高效的安防监控API体系
本文系统重构了wvp-GB28181-pro项目的API文档结构,通过场景化模块设计、流程图可视化展示和实战示例说明,帮助开发者快速掌握:
- 设备统一接入管理:从注册到状态同步的完整生命周期
- 多协议媒体流控制:实时流、回放流、广播流的全流程管理
- 推拉流代理架构:构建灵活的视频流分发网络
- 错误处理与优化:确保系统稳定性和性能表现
通过标准化的API设计和最佳实践指导,开发者可以快速构建稳定可靠的安防监控系统,满足不同场景下的视频监控需求。
【免费下载链接】wvp-GB28181-pro项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考