1. 为什么需要GB28181视频监控网关现在很多园区、工厂都装了监控摄像头但你会发现一个头疼的问题不同品牌的摄像头协议五花八门特别是老设备用的都是私有协议。就像我们公司去年改造旧厂房时发现海康、大华、宇视的摄像头混着用后台管理平台根本没法统一查看。这时候GB28181国标协议就派上用场了——它相当于给所有摄像头定了普通话标准。但新的问题来了浏览器不认识GB28181的流啊我们试过直接对接结果Chrome连画面都出不来。传统做法是搞个FFmpeg转码Nginx分发的组合拳光是维护这套东西就得专门配个人。后来发现SRS这个神器它就像个万能转换插头能把GB28181的流自动转成Web能吃的HTTP-FLV或WebRTC格式延时能压到500毫秒以内。上次消防演练时安保人员用手机看实时画面基本感觉不到延迟。2. 环境准备与SRS部署2.1 硬件配置建议我们给本地连锁超市部署时用的是一台戴尔R740xd其实二手服务器也够用重点注意这几点网卡必须千兆以上摄像头多的话建议做bonding。有次某商场活动时20路摄像头同时推流百兆网卡直接崩了CPU至少4核转码需求大的选至强银牌起步。实测i7-9700能稳定带30路1080P内存每路摄像头预留100MB50路配置就要8GB打底2.2 安装依赖项在CentOS 7上先装这些基础包Ubuntu用户把yum换成aptyum install -y gcc-c make openssl-devel wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.bz2 tar -jxvf gmp-6.2.1.tar.bz2 cd gmp-6.2.1 ./configure make make install2.3 编译带GB28181的SRS重点来了一定要用gb28181分支git clone -b feature/gb28181 https://gitee.com/ossrs/srs.git cd srs/trunk ./configure --gb28181on --with-ssl --with-hls --with-http-callback make -j$(nproc)遇到过编译报错的同学注意如果提示GMP缺失记得装完执行ldconfig刷新库链接。3. 关键配置详解3.1 SIP信令服务配置在conf/push.gb28181.conf里找到sip段这几个参数最容易踩坑sip { enabled on; listen 5060; # 记得开防火墙 serial 34020000002000000001; # 必须与摄像头配置一致 realm 3402000000; # 相当于租户ID auto_play on; # 自动拉流省去手动invite }有个冷知识serial的第10-13位代表厂商代码比如海康是2000大华是2001。上次配置时写错了一位摄像头死活不注册。3.2 流媒体参数优化这段配置直接影响播放流畅度stream_caster { rtp_port_min 58200; # 端口范围要够大 rtp_port_max 58300; wait_keyframe on; # 必须开启否则花屏 audio_enable off; # 除非需要语音对讲 host $CANDIDATE; # 云服务器要设公网IP }实测发现UDP模式下端口范围小于50路时可能出现端口耗尽。后来我们改成rtp_port_min 30000和rtp_port_max 40000才稳定。4. 摄像头对接实战4.1 海康摄像头配置登录摄像头Web界面默认IP通常是192.168.1.64重点看这几个地方网络-高级配置-平台接入启用GB28181填写SRS服务器IPSIP服务器ID必须与配置文件里的serial完全一致媒体传输协议选UDPTCP模式延迟高200ms有个坑要注意海康新版固件默认开启了加密注册要在安全服务-安全配置里关掉否则SRS收不到流。4.2 大华摄像头特殊配置大华设备有个隐藏参数要改# 在高级配置里添加自定义参数 SIP.TransportUDP Media.TransportUDP/RTP/AVP去年某项目因为没配这个画面总是3秒卡一次。后来抓包发现大华默认用了TCP传输PS流。5. 监控大屏与移动端适配5.1 低延迟方案对比协议类型延迟兼容性适用场景HTTP-FLV1-2秒所有浏览器监控大屏WebRTC300-500msChrome/Firefox移动巡检HLS10秒所有设备录像回放我们给物流仓库做的方案大屏用flv.js延迟可接受叉车PAD上用WebRTC需要实时性。5.2 前端代码示例用flv.js播放的典型代码import flvjs from flv.js; const player flvjs.createPlayer({ type: flv, url: http://srs_server:8080/live/34020000001320000001.flv }); player.attachMediaElement(videoElement); player.load(); player.play();遇到过的问题iOS Safari需要添加crossoriginanonymous属性否则报CORS错误。6. 运维监控与故障排查6.1 关键指标监控用这个API获取实时状态curl http://localhost:1985/api/v1/streams/重点关注clients: 当前播放人数frames: 帧率是否正常低于15fps要报警kbps: 码流是否异常比如突然降为0我们写了个Python脚本定时检查发现异常自动重启服务。6.2 常见问题处理摄像头离线怎么办先查SRS日志grep BYE objs/srs.log检查摄像头网络ping 192.168.1.64确认SIP心跳tcpdump -i eth0 port 5060 -w sip.pcap上个月有次大规模掉线后来发现是交换机STP协议阻塞端口改成快速端口后解决。7. 高可用架构设计对于连锁门店这类场景我们推荐双机热备方案------------- | Keepalived | ------------ | ------------------------------ | | ------------------ ------------------ | SRS Master | | SRS Backup | | (192.168.1.100) | | (192.168.1.101) | ------------------- -------------------配置要点摄像头配置主备两个SIP服务器地址用vrrp_script检测SRS进程共享存储放录像文件去年双十一某电商仓库就用这套架构主节点宕机时切换耗时不到20秒。