前阵子接了一个园区视频监控联网项目,前端三百多路摄像机,牌子很杂——海康、大华、天地伟业都有,还有一些老设备只有ONVIF接口、固件里压根没有GB/T28181选项。平台侧倒是干脆,只认国标,要求所有点位按GB28181注册上报。这就逼着我把GB/T28181和ONVIF两套协议凑到同一个方案里处理。折腾了几天,把信令、媒体、网关、各种坑摸了个遍,这里把完整的集成思路和实操记录整理出来,给同样在做视频接入、平台对接的兄弟们一个参考。
这篇内容主要围绕协议集成方案展开,重点讲清楚GB28181与ONVIF各自的角色定位、两者协议栈差异带来的转换逻辑、三种主流集成模式怎么选,以及从ONVIF设备发现、RTSP拉流到国标SIP注册、推流上线的完整配置方法和排错链路。适合正在做视频监控平台对接、国标联网改造、或准备自己搭协议网关的开发和运维朋友。
1. 我为什么要同时搞定两套协议:一个真实项目暴露的矛盾
1.1 项目背景:平台只认国标,设备却不全都支持
这个园区项目最初的诉求很简单:把各厂家的摄像机统一接入到一套综合管理平台,平台再按GB/T28181向上一级监管平台推送视频资源。第一轮对接时我就发现一个很现实的问题——管理平台侧的GB28181服务端很成熟,但前端设备的能力参差不齐:
- 新采购的摄像机基本都内置了GB28181注册功能,填上SIP服务器地址和国标编号就能上线;
- 一部分前几年采购的设备固件不支持国标,但能通过ONVIF协议被第三方平台发现和管理,也能正常拉流;
- 还有极少数老设备连ONVIF都不完整,只能靠厂家私有SDK对接。
如果所有设备都换新,预算不现实;如果全部走厂家SDK定制,开发周期又太长。所以整个方案必须做“协议集成”——让不同能力的设备都能以一种统一的方式接入国标平台。
1.2 两个协议各自解决什么问题
先花点时间把两个协议的家底理清楚,很多同事容易把它们搞混。
GB/T28181,全称《安全防范视频监控联网系统信息传输、交换、控制技术要求》,2011年发布,2016年推出修订版,也就是常说的GB/T 28181-2016。它解决的是监控系统之间的联网问题,规范了SIP信令的交互过程、SDP媒体协商方式、RTP承载PS流的媒体格式、设备目录信息、录像检索回放、云台控制等。简单说,它让不同厂商的管理平台、不同级别的监控中心能够互相注册、互相调流,形成一个整体的一张网。
ONVIF,全称Open Network Video Interface Forum,是由安讯士、博世、索尼等厂家发起的开放接口标准。它解决的是设备侧互操作问题,定义了一套基于Web Services的接口,包括WS-Discovery设备发现、设备信息管理、媒体配置、RTSP流地址获取、事件订阅、PTZ控制等。它的核心价值在于:一个支持ONVIF的NVR或VMS,可以不依赖厂家私有SDK,直接管理另一个厂家的摄像机。
这两者的关系不是替代,而是分层:ONVIF管的是“设备怎么被人管理”,GB28181管的是“视频资源怎么在平台之间共享”。
1.3 项目里的分工定位
在实际项目里,我把它们定位得很清楚:
- ONVIF负责接入层:发现设备、验证ONVIF账号、拿到RTSP拉流地址、配置摄像机参数、订阅报警事件;
- GB28181负责联网层:让设备或网关作为SIP客户端注册到平台,按国标格式上报通道目录,响应平台的实时预览、录像回放调用。
当设备原生支持GB28181时,它直接扮演SIP UA的角色;当设备只有ONVIF能力时,就需要一个“翻译官”把两套机制串起来,这就是后面要展开的协议网关。
2. 协议栈差异拆解:为什么ONVIF拉到的流不能直接送进国标平台
曾经有个刚入行的同事问我:“既然ONVIF能拿到RTSP地址,那平台直接把RTSP拉流看不就行了,为什么还要转成GB28181?”这个问题问到了协议集成的本质。答案很简单——平台之间的资源共享不认RTSP,国标平台接收视频流的信令流程和媒体封装有自己的一套规矩。
2.1 信令面:SIP打电话与Web Service调接口的巨大差异
GB28181的信令建立在SIP(Session Initiation Protocol)之上。你可以把它理解成给摄像机“打电话”:设备向平台的SIP服务器发起REGISTER注册,平台回200 OK;要预览视频时,平台用INVITE发起媒体协商,设备用SDP描述自己准备发送的媒体格式,协商通过后RTP流就发过来。整个过程有明确的状态机:注册、心跳、目录订阅、通知、实时音视频、录像查询、云台控制,全是SIP方法定义好的。
ONVIF则完全走另一条路线。它基于Web Services,设备端跑着一个HTTP服务,管理端通过SOAP/XML消息调用设备的各种接口。设备发现用的是WS-Discovery多播协议,管理端往局域网发探测消息,支持ONVIF的设备就会返回自己的接口地址。之后的操作,比如“GetDeviceInformation”“GetProfiles”“GetStreamUri”,本质上都是往设备的HTTP端口发POST请求。
这两者的风格差异很大:SIP更像“建立会话、维护通话状态”的通信协议,Web Service更像是“调用API获取结果”的管理接口。所以你不能指望ONVIF的接口消息能被国标平台识别,平台侧根本不监听这个。
2.2 媒体面:PS流与RTSP裸流不是一回事
媒体层面差异更大。
ONVIF协议本身不直接传输视频码流,它只负责告知客户端“视频流在哪个RTSP地址”。真正取流时,播放器或NVR会向设备发起RTSP会话,经过OPTIONS、DESCRIBE、SETUP、PLAY等步骤,然后接收RTP包。RTP包里封装的具体媒体格式由设备决定,可能是H.264、H.265或者MJPEG,封装方式一般遵循RTP/AVP或RTP/AVPF,直接就是单帧的分包传输。
而GB28181规定的实时视音频传输,是把音视频数据封装成PS流(Program Stream,节目流),再用RTP承载发送。PS流是从MPEG-2标准里来的封装格式,可以理解为把视频帧、音频帧按一定的系统层规则打包成连续的数据单元,包里有PS头、系统头、节目流映射(PSM)等结构。国标要求设备把编码后的数据封装成PS包,然后按负载类型96或97之类的动态PT值通过RTP发给接收端。
这意味着,RTSP取到的裸RTP流和国标要求的PS-over-RTP流,在封装层面完全对不上。平台端收到RTP包后,需要解析PS封装,再从中提取视频帧解码。如果直接塞一个RTSP的H.264裸流过去,平台根本解析不出图像。
2.3 网关为什么要做“剥壳再包壳”
明白了差异,你就能理解协议网关的核心工作:
- 用ONVIF与设备握手,获取RTSP地址和凭据;
- 向设备发起RTSP会话,接收视频帧和音频帧;
- 把接收到的裸流重新封装成GB28181要求的PS流;
- 以SIP UA的身份向国标平台注册,响应平台的INVITE请求,把封装好的PS-over-RTP推送到平台指定的地址和端口。
如果设备编码格式平台能接受,这一步只做“转封装”,不涉及转码,CPU占用很低。如果设备只输出MJPEG而平台要求H.264,或者平台只收H.264但设备只支持H.265,网关就必须做真正的转码,这时的计算开销和延迟会明显上升。
3. 集成方案选型:设备原生国标、协议网关与双协议并存的取舍
协议集成方案不是只有一种,根据项目现场设备的实际能力,我一般分三种情况处理。选错模式,轻则多花钱买性能过剩的服务器,重则根本接不通。
3.1 模式A:设备原生支持GB28181,直接开国标配置
这是最省事的路径。新一点的摄像机,无论是海康、大华还是天地伟业,基本都内置了GB28181功能,只是菜单位置不同。做法就是在设备Web界面里找到“GB28181”或“SIP”配置项,填入平台侧分配的SIP服务器IP、端口、设备国标ID、密码等信息,保存后设备会主动注册。
这种模式的优点是链路最短,不经过中间服务,稳定性和实时性都最好。缺点也很明显——它只适用于原生支持国标的设备。如果设备固件版本太老,或者产品线压根没做国标功能,你怎么填配置都白搭。
需要留意的是,有些设备虽然有GB28181菜单,但实现得很粗糙,可能不支持目录订阅上报,或者对平台下发的某些MESSAGE消息不响应。这种“半残”国标设备,反而比完全没国标的设备更浪费时间。
3.2 模式B:设备只有ONVIF能力,用协议网关做转换接入
这是本次项目的主力模式。架构很简单:
IPC(ONVIF) -> RTSP拉流域 -> 协议网关(转封装/转码 + SIP注册) -> 国标平台
网关可以是软件方案,部署在一台Linux服务器上,也可以是一台硬件接入网关。软件网关目前可选的开源项目不少,比较成熟的方案有基于ZLMediaKit扩展的wvp-GB28181-pro,它自带SIP信令服务、媒体服务、通道管理,能通过RTSP接入设备,再以GB28181标准向上级平台注册,支持级联,项目活跃度也还可以。商用的也有不少厂家做,买来即用,适合不想折腾的场景。
软件网关的部署逻辑基本是:
- 安装SIP服务组件(监听5060端口,处理注册和设备目录);
- 安装流媒体服务组件(接收RTSP拉流,完成PS封装与RTP推送);
- 配置设备接入列表,填入每台摄像机的RTSP地址、ONVIF账号密码;
- 在网关上为每一路通道分配一个国标编码;
- 配置平台侧SIP参数,网关向平台发起注册。
3.3 模式C:平台侧双协议并存
还有一种常见场景,综合安防管理平台本身支持ONVIF和GB28181两种接入方式。我一般建议这样分工:
- 用ONVIF做设备管理:平台主动发现设备、批量添加摄像机、获取设备能力集、订阅设备的移动侦测和遮挡报警事件、下发云台控制指令。这些操作用ONVIF非常顺手,因为它是为“管理设备”设计的;
- 用GB28181做平台互联:与上级监管平台、公安视频专网平台对接时,统一走国标。平台作为国标信令服务和媒体服务端,接收下级设备或下级平台的注册和级联。
这种双协议并存的模式,在本级平台内部是最舒服的——设备管理体验好,上级联网又合规。难点在于平台的内部实现要预留两套协议的通道绑定关系,比如ONVIF添加的通道与国标目录里的通道要能一一映射。
3.4 选型决策与成本对比
我习惯用一个简单的决策逻辑:
- 设备支持GB28181且实现稳定,优先模式A;
- 设备不支持国标但支持ONVIF,走模式B,网关按点位数量评估服务器性能;
- 设备连ONVIF都不完整,只能走厂家SDK定制接入,或者直接建议项目方更换前端设备;
- 本级平台还需要管理大量异构设备、同时要跟上级互联,就采用模式C。
三种模式对比起来:
| 模式 | 适用设备 | 部署成本 | 链路长度 | 典型场景 |
|---|---|---|---|---|
| A 设备原生国标 | 新固件、支持国标的IPC | 最低,零额外硬件 | 最短 | 新改扩建项目、前端设备统一 |
| B ONVIF+协议网关 | 仅支持ONVIF的老设备 | 中等,需要服务器或硬件网关 | 较长,有转换环节 | 存量设备利旧、混合品牌接入 |
| C 平台双协议并存 | 任意ONVIF设备和国标下级 | 较高,平台需成熟 | 按需选择 | 综合安防平台+上级联网 |
4. 设备接入侧实操:批量摸清ONVIF家底的工具与方法
接下来是干货部分。无论选哪种模式,第一步永远是搞清楚前端设备到底支持什么、RTSP地址是什么、ONVIF账号密码对不对。这一步做扎实,后面接入能少踩一半坑。
4.1 ODM工具:先用它把局域网设备扫一遍
现场排查设备能力时,我最常用的工具是ONVIF Device Manager,简称ODM。这是个开源小工具,在SourceForge等渠道可以搜索“ONVIF Device Manager”下载安装。它体积小、免安装版也有,跑在Windows机器上就能用。
ODM的核心能力包括:
- WS-Discovery设备发现:点一下Discover,自动扫描同网段支持ONVIF的设备,列出IP、厂商、型号、固件版本;
- ONVIF账号认证:输入设备的ONVIF用户名密码,管理设备;
- RTSP地址获取:通过Media服务拿到设备各视频通道、各Profile的RTSP流地址,不用再猜URL格式;
- 实时预览:内置播放器,直接预览ONVIF拉取的视频流,验证账号权限和码流是否正常;
- PTZ与事件测试:有些版本还能调试云台、查看报警事件。
进行批量接入前,我会拿一台笔记本电脑接到监控网交换机,用ODM扫一遍整个网段,导出设备清单,一个个标记哪些设备能通过ONVIF访问、哪些设备弹认证失败、哪些设备根本不响应发现消息。这个清单直接决定了后续走模式A、模式B还是SDK定制。
4.2 用ODM确认设备能力与RTSP地址
ODM使用起来不复杂,但有几个细节要注意:
- 电脑要和摄像机在同一网段,或者路由可达。不同VLAN的话,WS-Discovery多播可能过不去,这时只能按IP手动添加ONVIF设备;
- 部分设备默认禁用ONVIF服务,ODM发现了设备但无法获取视频,需要先到设备Web端开启ONVIF;
- ONVIF账号密码不一定等于Web登录的admin密码。很多厂家为了安全,要求单独在“ONVIF设置”里创建账号并分配权限,ODM认证时要用这个专用账号;
- 成功认证后,ODM的Live Video页签里能预览视频,Media页签能看到Profile列表和对应的RTSP流地址。
以海康设备为例,认证成功后可看到类似rtsp://user:pass@192.168.1.64:554/Streaming/Channels/101的主码流地址,101代表通道1的主码流,102是通道1的子码流。大华设备则是rtsp://user:pass@ip:554/cam/realmonitor?channel=1&subtype=0这种带参数的形式。天地伟业设备的RTSP路径不同型号略有差异,常见的是rtsp://ip:554/stream1或带session参数的形式,最好通过ODM的GetStreamUri接口拿到准确地址,不要凭印象硬写。
需要特别提醒,如果RTSP地址里的密码包含@、:、/、?等特殊字符,需要做URL编码,否则拉流时密码解析会出错,会一直报401。
4.3 天地伟业摄像机是否支持ONVIF:怎么开、怎么配
热搜词里有人专门问天地伟业摄像机是否支持ONVIF,我直接说结论:天地伟业近年出厂的摄像机基本都支持ONVIF,新固件大部分也支持GB28181,但需要手动开启并配置账号。
天地伟业摄像机的ONVIF开启步骤大致如下(不同型号菜单名称略有差异):
- 用浏览器登录摄像机Web管理页面(默认IP需要看机身标签或通过搜不到时用ONVIF发现);
- 找到“配置-网络-高级设置”或“设置-网络服务”下的ONVIF菜单;
- 打开ONVIF启用开关;
- 在ONVIF用户管理里添加一个专用账号,输入用户密码,权限选择管理员或媒体操作权限;
- 保存后,用这个账号在ODM或第三方平台里添加设备。
如果登录设备后发现根本没有ONVIF菜单,通常意味着固件版本过老。部分旧机型可以通过官网下载升级固件获得ONVIF支持,但要有“升级完功能缺失或变砖”的心理预期,最好先在备机上验证。
4.4 拿不到RTSP地址时的备用排查手段
ODM失效的情况主要有两种:一是设备ONVIF服务未开启或实现存在Bug,二是设备根本不支持ONVIF。
第一种情况,先到设备Web界面开启ONVIF再重试。第二种情况比较麻烦,但也不是没有出路:可以用设备自带SDK开发包做二次开发,拉流方式参考厂家文档;或者直接在设备Web预览页面右键查看源码定位到播放器地址,再用VLC等工具验证能否播放;实在不行,还可以咨询厂家技术支持,确认该型号是否有支持国标的固件版本可以刷。
做这一步的核心目标只有一个:把每路视频的稳定拉流地址和对应编码格式记录下来,这份资产在后面的网关配置里直接复用。
5. 国标侧对接配置:SIP注册、通道编码与推流调优
设备侧摸透了,接下来就是国标侧的事。这部分的配置项其实不多,但每个参数的含义必须吃透,不然注册失败/注册成功但不上线/上线但不出图,排查起来会很痛苦。
5.1 先把几个核心概念弄清楚
先说编码规则。GB28181要求每个设备、每个通道都有一个20位的数字ID,这也是大家最容易搞混的地方。20位数字一般包含:
- 前8位通常是行政区划编码或平台中心编码;
- 中间几位是行业编码、类型编码;
- 后面是设备序号或通道序号,可能包含校验位。
不同平台对位的定义会有细微差异,所以我通常不自己拍脑袋编,而是直接找平台方要“国标编码规范文档”,照着模板生成设备编码和通道编码。一般来说,设备编码和通道编码要有清晰的对应关系,比如设备编码的最后几位加通道号就能得到通道编码,这样在平台里维护起来比较清晰。
再说SIP服务器。国标平台侧会启动一个SIP服务端,监听默认5060端口,有些平台为了安全会改成其他端口比如15060。设备或网关侧配置的SIP服务器地址就是这个服务端的IP和端口。
最后说信令用户。设备注册到平台时,需要携带SIP用户名、认证密码。平台会提前为下级设备分配好这些凭据,同时绑定一个国标设备编码。设备编码、用户名、密码三者必须和平台侧录入的信息完全一致。
5.2 设备或网关端的SIP配置清单
以网关为例,完整的配置项一般如下:
| 配置项 | 推荐值/说明 |
|---|---|
| SIP服务器IP | 平台国标服务端地址,必须路由可达 |
| SIP服务器端口 | 默认5060,平台侧自定义时按实际填 |
| SIP用户名 | 平台分配的国标设备ID或对应用户名 |
| SIP密码 | 平台侧设置的认证密码 |
| 设备国标编码 | 20位数字,按平台规范生成 |
| 通道国标编码 | 每路通道一个,建议与设备编码关联 |
| 注册有效期 | 默认3600秒,部分平台要求较短 |
| 心跳周期 | 默认120秒,平台要求不符时改为60秒 |
| 信令传输模式 | TCP或UDP,按平台能力选择 |
| 媒体传输模式 | TCP被动/主动或UDP,需和平台协商 |
| 通道码流 | 可选主码流/子码流,建议先用子码流联调 |
填写完毕后,在网关日志里应该能看到REGISTER请求发出,平台回复401质询,设备带认证信息再次REGISTER,平台回复200 OK,这一条完整的SIP注册链路就算通了。
需要特别说明的是“注册有效期”和“心跳周期”。有些平台把有效期设置得很短,频繁要求设备重新注册,如果设备不响应就会标记为离线。心跳的作用是保活,平台在几个心跳周期内收不到设备消息,就会把设备置为离线。所以这两个参数建议严格按照平台要求配置,不要想当然用默认值。
5.3 平台发起预览时发生了什么
设备注册成功只是第一步,平台点开预览时,会走这样一条链路:
- 平台向设备的SIP地址发送INVITE请求,携带SDP,说明自己要接收的媒体类型、RTP接收IP和端口;
- 网关解析SDP,向平台回复200 OK,携带自己这端的SDP描述,包括PS封装格式、负载类型PT、传输模式等;
- 网关向摄像机发起RTSP拉流,拿到视频帧;
- 网关把视频帧封装成PS包,按平台SDP指定的目标IP和端口发送UDP(或按TCP模式建立socket)推送RTP数据;
- 平台收到PS流,解析出视频帧并解码显示。
这期间任何一步不对,现象都可能是“预览失败”或“黑屏”。我在实际排查中见过最多的问题是第2步的SDP协商不一致,比如平台要求UDP传输,网关却回复TCP被动模式,双方各说各话,媒体包永远发不到平台。
5.4 推流模式与编码参数调优
关于TCP和UDP的选择,我的建议是:
- 公网跨网段传输、防火墙环境复杂时,优先TCP被动模式,出流更稳定;
- 局域网内部、平台要求低延迟时,UDP更合适,节省TCP拆包组包开销;
- 国标平台同时支持TCP/UDP时,需要确认平台对“TCP主动”“TCP被动”的具体定义,不同平台实现有差异,容易踩坑。
编码参数方面,GB28181-2016已经支持H.265,但很多老平台还是只能稳定解析H.264,所以联调前要先问平台支持什么编码。接入调试阶段,我习惯让网关把通道码流配置为子码流,分辨率720P以下,帧率15到25,关键帧间隔推荐2秒(也就是I帧间隔50帧@25fps),先把链路跑通,再逐步切换到主码流或更高分辨率,这样能大大减少定位问题的难度。
如果摄像机编码是H.265而平台只收H.264,网关必须转码。转码参数建议:视频编码H.264 High Profile,分辨率按平台要求,码率根据画质需求设置,音频按平台要求设为G.711A或G.711U,如果平台不支持音频要不就关闭音频通道,要不就做音频转码,否则预览有画面无声倒是小事,有些平台遇到不认识的音频编码会直接导致拉流失败。
5.5 网关转码的资源规划
为转码场景单独提醒一句。一台8路网关服务器如果全部走H.265转H.264软件转码,8核16G的机器压力会非常大,实测码流稍高就会出现帧率下降、花屏、卡顿。规划网关服务器时按这个经验来:
- 纯转封装(同编码:H.264转H.264封装,或H.265转H.265封装),一路约占用CPU 5%-10%,内存占用很低;
- H.265转H.264软件转码,一路1080P大约需要2-4个CPU核心,8路至少要24核以上才稳;
- 要考虑显卡硬件转码或采购硬件网关,否则高峰期必然扛不住。
6. 上线后最常见的四类故障排查链路
协议集成方案上线后,故障率最高的不是配置阶段,而是并发场景下暴露出来的各种兼容性问题。这里记录几类我踩过的坑和对应的排查链路,你可以直接照着查。
6.1 设备注册不上:先画一条信令链路图
现象:网关或设备配置了SIP参数,但平台“在线状态”一直离线,或者日志里看不到REGISTER请求。
我的排查步骤:
- 先在网关所在服务器上
ping平台IP,确认网络连通性; - 用
telnet 平台IP 5060(TCP模式时)确认端口通不通,UDP模式下用抓包确认收发包; - 看网关日志里有没有发出REGISTER,如果压根没发,检查SIP服务器IP和端口配置;
- 如果发了REGISTER但没收到平台的401或200,多半是防火墙拦了UDP 5060端口,或者平台SIP服务没起来;
- 如果收到了401但后续REGISTER带认证信息后仍然401,检查SIP密码是否与平台录入一致,注意有些平台的密码是只对设备编码生效,不要填错。
有个很容易被忽视的问题:网关服务器上如果同时跑着多个SIP服务,或者系统自带其他SIP组件占用了5060端口,注册请求会发到错误的进程,平台自然收不到。我踩过一次,Docker容器里映射了5060端口,宿主机又装了一个网关,两个服务抢端口,注册时好时坏。
6.2 注册成功但平台看不到通道:目录订阅与MESSAGE的坑
现象:设备在线,但平台资源列表里没有这台设备,或者有设备但没有通道。
这种情况通常是“目录”环节出了问题。设备注册成功后,平台会通过MESSAGE消息向设备发送目录查询请求,或者订阅设备的目录变化通知。设备收到后要返回带通道信息的XML,包括每个通道的国标编码、名称、状态。
排查点:
- 看设备日志是否收到平台的MESSAGE(目录请求),如果没收到,说明平台没有主动查目录,而设备又没在REGISTER时带目录信息,通道自然为空;
- 如果收到但平台仍无通道,重点检查返回的XML格式是否正确、通道编码是否符合平台规范,很多平台对通道编码的校验非常严格,格式稍有不对就丢弃;
- 部分老设备对“目录订阅”支持不好,设备只回了一次目录就不再推送更新,平台侧要关闭订阅模式,改成周期性目录查询,两边节奏才能对上。
6.3 拉流黑屏:PS封装与SDP协商是重点
现象:设备在线、通道在线,平台点预览能调起,但画面黑屏或者一直转圈。
黑屏问题我把90%的精力放在两条线索上:
线索一:SDP协商不一致。抓包看INVITE消息和200 OK的SDP内容,确认媒体描述里封装的类型是否是PS格式,视频负载类型PT值是否双方一致,传输地址和端口是不是平台可访问的。最常见的坑是网关回复的媒体IP是内网IP,平台在另一个网段收不到RTP包。解决方法是设置SDP中媒体IP为平台可达的地址,必要时做端口映射。
线索二:PS封装错误。网关把收到的裸流切成PS包时,PS头、PSM、PES包的语法必须严格遵循国标。如果PS封装不完整,比如缺少系统头或PSM,很多平台的解析库会直接丢包。判断方法是在网关服务器上抓包,用Wireshark打开RTP流,看能否正常解析出PS结构,如果显示“PS”信息不完整,基本就是封装实现的问题,需要换网关或升级版本。
6.4 出图花屏、卡顿、声音异常:从编码参数到负载排查
现象:画面能出来,但不稳定,花屏、马赛克、周期性卡顿,或者预览时有画面无声音。
我的排查顺序:
- 先确认摄像机码流本身是否稳定。直接拿VLC拉RTSP流对比,如果RTSP直稳定,再查转换环节;
- 花屏多是丢包引起,UDP模式下跨网段容易出这个问题,优先切TCP模式或加码流带宽限制;
- 卡顿经常是链路里某个节点性能不够。CPU占用高时,优先把子码流方案补上,让预览默认走子码流,点大画面再切主码流;
- 无声音先确认摄像机的音频编码,GB28181平台普遍只认G.711A/G.711U,如果设备是AAC,必须转码;还有一部分设备默认关闭了音频输出,ONVIF配置里要开启音频通道;
- 如果使用的是廉价网关或OpenSource方案,还需要检查是否支持音频封装进PS流,不支持的话看到“视频正常、音频缺失”就不奇怪了。
整个项目做下来,我的体会是协议集成方案的复杂度不在某一个点,而在两个协议间的衔接段。把ONVIF设备发现、RTSP拉流、PS封装、SIP注册这几个环节逐一看明白,每个环节用什么工具验证、抓什么包、看什么日志都养成固定套路,问题基本都能在半小时内定位。最后分享一个个人经验:新项目开局不要急着大规模接入,先拿一台设备走通“ODM摸能力 -> 网关拉流 -> 国标注册 -> 平台预览 -> 录像检索”完整链路,确认各环节稳定后再批量铺开,能省下大量返工时间。