Skip to content
在线演示下载安装包

没有摄像头,怎么把国标平台联调跑通 ​

平台刚部署完,会议室里没有摄像头,对接的硬件还在路上,但联调得今天做——这是国标项目里最常见的开场。

好消息是:国标联调真正要验证的是信令和媒体链路,不是那颗镜头。 平台关心三件事:有没有一台编码正确的设备注册上来、目录对不对、点播能不能出流。这三件事都不需要真实摄像机。

下面这套流程,我们在 UVP、LiveGBS、EasyGBS 上都重复走过,一台电脑加一部手机就能跑完。

一、先拆开看:联调到底缺什么 ​

一条完整的国标接入只有四个环节:

环节发生了什么缺了会怎样
注册设备向平台 SIP 服务发 REGISTER,带设备编码与认证信息平台看不到设备,后面都不用谈
心跳设备周期性发 MESSAGE(Keepalive)设备上线几分钟后掉线
目录平台发 Catalog 查询,设备回 Catalog 应答列出通道设备在线,但一个通道也没有
点播平台发 INVITE,双方协商 SDP,设备推流通道点开是黑屏或超时

真正需要摄像头的只有最后一步的画面内容。前三个环节全是报文,任何能发 SIP 的东西都能做。

二、三条路,按你要验证的东西选 ​

路线做法能验证到哪一步成本
手机模拟器手机装模拟器应用,填平台参数注册、心跳、目录、点播、云台、订阅全覆盖半小时
桌面端批量模拟一台机器起上百条虚拟设备加上平台并发与转发容量一小时
自己写协议桩用 Python 拼 UDP 包发 REGISTER只能验证注册这一步半天起

只想确认「平台 SIP 端口通不通」,第三条路够了。但要验证目录和点播,写协议桩的成本远高于装一个模拟器——这也是为什么绝大多数团队最后都走第一条。

两条模拟器路线怎么取舍,见国标28181 设备模拟器怎么选;要用虚拟设备压平台的接入容量,见国标28181 平台压测怎么做。

顺带一句:多数人卡住的原因不是「没有设备」,而是参数填错。模拟器最大的价值是把参数问题在十分钟内暴露出来。

三、跑通一轮:七步 ​

1. 参数从平台抄,不要猜 ​

联调的第一原则:所有参数以平台配置为准,不要按记忆填。 五个参数错了任何一个,表现都是「注册失败」,看不出区别。

参数从哪拿填错的典型表现
平台 SIP 地址 / 端口平台配置文件里的 SIP 监听地址,注意有些产品默认用 5060 以外的端口一直超时,平台日志一行都没有
服务器编码(服务器 ID)平台配置里的 SIP ID,20 位注册成功,但平台后续查询全部无响应
SIP 域通常是服务器编码的前 10 位注册直接被拒(401/403)
注册密码平台侧设备接入密码,不是网页登录密码401 反复重试
设备编码你自己编,见下一步目录里出现重复或非法编码

⛔ 最容易被忽略的是第二行。 服务器编码不是「协议里的可选项」,它是设备判断「这条消息是不是发给我上级的」依据。填错的表现极具迷惑性:设备显示注册成功,平台也显示设备在线,但平台发出的每一条查询设备都静默丢弃,最后平台报「目录查询超时」。

2. 编一个合法的 20 位编码 ​

设备编码和通道编码都是 20 位,结构一样,只有类型段不同:

段位数位置示例说明
中心编码81–834020000行政区划代码,跟平台保持同一体系即可
行业编码29–1000社会资源接入
类型编码311–13132设备填设备类型;通道必须是 132 / 134
网络标识1147设备走 IP 网络接入常用 7
序号615–20000001同一前缀内唯一

举例,设备编码 34020000001320000001 对应的两条视频通道:

  • 后置:34020000001321000001
  • 前置:34020000001322000001

⛔ 这里有一个真实的坑。 通道编码不是「把设备编码原样抄一遍改最后几位」,第 11–13 位必须换成通道类型段。我们早期把设备的类型段原样带进通道编码,结果在 EasyGBS 上表现为「设备收到 N 个通道,列表里只有 1 条」——平台按这三位判断「这是不是一个通道」,类型段不对就直接忽略。

第 14 位同理,设备固定一个值、通道用另一个值,否则设备根节点会和某个通道撞成同一个编码,目录里出现两条一样的 ID,点播会串到错的通道。

3. 发起注册 ​

手机模拟器填完参数点注册,用抓包或平台日志确认拿到了 200 OK。

如果只看到 401,说明认证没通过——密码错,或者平台要求的认证用户名不是设备编码。如果一直是重传没有响应,先确认网络可达:nc -vz <平台IP> <端口>,再看平台是不是只监听了 TCP 而你用了 UDP。

4. 看目录 ​

设备上线后,平台会主动发 Catalog 查询(有些平台要先手动点一次「刷新目录」)。设备回的应答里应该带上全部通道。

判据:平台侧设备详情里的通道数,等于你配置的通道数。多一条、少一条都不算通过——多出来的那条通常是「设备自身」被当成了通道,成因见本文第四节的第 1、2 条。

模拟器的目录管理页:一个设备节点下挂两路视频通道和一个报警通道,每条右侧显示 20 位编码
图 1 设备侧目录树。三个节点右侧的 20 位编码,第 11–13 位分别是 131(设备)、132(视频通道)、134(报警通道)——平台就是靠这三位区分节点类型。

5. 点播 ​

从平台点开一路视频。这一步验证的是媒体链路,和信令是两回事:信令跑通不代表能出流。

常见失败分三类:

  • INVITE 发出去了设备没回 → 通道编码对不上,或设备侧的媒体端口被占用
  • 回了 200 OK 但平台收不到流 → SDP 里的 IP 是内网地址,平台在另一个网段
  • 有流但黑屏 → 编码格式(H.264/H.265)或分辨率不被平台接受

6. 盯信令日志,不要猜 ​

联调效率的分水岭就在这里。只看界面状态,你永远不知道是「没发出去」「发出去了被拒」还是「回了但平台没认」。

好的模拟器会给你结构化的报文日志,能看到完整的方法、CSeq、From/To、Body。把它和平台侧的日志按时序对齐,问题基本一次定位。

模拟器的 SIP 日志页:按 REGISTER、INVITE、MESSAGE、BYE 分类过滤,逐条显示收发方向与响应码,可切换列表和时序图
图 2 SIP 日志按方法过滤,左箭头是收到、右箭头是发出。200 OK · 注册成功 expires=3600s 这类中文注解比裸响应码好读得多;真正卡住的时候,把列表切成时序图再和平台侧对齐。

7. 顺手把控制和订阅也跑一遍 ​

注册和点播通了,别急着收工。云台控制(DeviceControl)和订阅(SUBSCRIBE)是国标里最容易各家实现不一致的部分,趁环境还在,一起验掉。

模拟器的能力页:目录管理显示 4 节点、录像列表 2 文件、报警事件 0 次,状态分别标注为未订阅、待机、未订阅
图 3 能力页的「未订阅」状态是个好用的判据:平台发起 SUBSCRIBE 之后这里会实时变成已订阅,没变就是平台压根没发出来,或者订阅被设备拒了。

四、五个最容易卡住的地方 ​

这五条都是我们在真实平台上踩过的,按出现频率排序:

  1. 服务器编码不一致 —— 注册成功但查不到任何通道。最隐蔽,因为前面每一步看起来都正常。
  2. 设备被平台拉黑 —— 注册直接返回 400,而平台日志一行都不打。没有日志不等于没收到消息,先查平台的黑名单表。
  3. UDP 大报文发不出去 —— 目录通道多的时候,一个 Catalog 应答可能有两三 KB,超过 MTU 被 IP 分片,平台侧一个分片都收不到,同一时刻的小报文却正常。表现是「通道少于 N 个就正常,多了就超时」。
  4. 通道编码类型段不对 —— 见上面第 2 步。
  5. 防火墙只放了 5060 —— 信令通了,媒体端口(通常是 30000 以上的大范围 UDP)没放行,于是能点播但永远黑屏。

五、验收清单 ​

联调做完,按这张表逐项确认,别凭感觉「应该没问题了」:

  • [ ] 设备注册成功,平台显示在线,状态持续超过 10 分钟(心跳正常)
  • [ ] 平台看到的设备编码与你配置的完全一致,20 位
  • [ ] 通道数量与配置一致,没有多出来的「设备自身」条目
  • [ ] 每个通道点播都能出画面,播放地址带正确的通道编码
  • [ ] 云台控制有响应(哪怕只是模拟的转动)
  • [ ] 报警或订阅能收到设备的主动通知
  • [ ] 平台与设备两侧的日志时间能对齐,报文能一一对应

六、什么时候必须上真机 ​

模拟设备能覆盖 90% 的联调场景,但有三件事它替代不了:

  • 真实的图像质量与编码参数:码率、分辨率、关键帧间隔对平台转码策略的影响
  • 厂商私有的扩展字段:很多 IPC 在国标基础上加了自定义 XML 节点,模拟器不会发
  • 弱网与丢包下的表现:真实摄像头所在网络往往比办公室恶劣得多

所以合理的做法是:用模拟器把平台侧的功能和信令全部验完,再用一两台真机验图像和兼容性。 这样现场那几天就不用一边调平台一边等硬件。

如果项目要跨 2016 / 2022 两个版本,真机验证之前先看一遍两个版本的差异对照,能省掉一轮「以为是设备不支持、其实是没开兼容模式」的往返。


需要一台现成的模拟设备,可以看 UVP-28181-SIM(Android 手机端)或 UVP-28181-SIM-DESKTOP(Windows / macOS 桌面端,可批量拉起虚拟设备):把 Android 手机变成国标前端设备,注册、点播、云台、订阅都能验,带结构化 SIP 报文日志和时序图。平台参数按目标平台控制台的 SIP 配置填写。

只把测试设备接入你拥有或获得授权测试的平台。