当前位置: 首页 > article >正文

SRS实战-构建GB28181视频监控网关

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秒。

相关文章:

SRS实战-构建GB28181视频监控网关

1. 为什么需要GB28181视频监控网关 现在很多园区、工厂都装了监控摄像头,但你会发现一个头疼的问题:不同品牌的摄像头协议五花八门,特别是老设备用的都是私有协议。就像我们公司去年改造旧厂房时,发现海康、大华、宇视的摄像头混着…...

Windows串口通信API实战:从CreateFile到异步I/O操作

1. Windows串口通信基础入门 第一次接触Windows串口通信时,我完全被那些晦涩的API函数吓到了。CreateFile、ReadFile、WriteFile这些名字看起来跟串口毫无关联,为什么用文件操作函数来处理串口?后来才明白,这正是Windows设计的巧妙…...

Linux数据恢复实战:当extundelete失效后,我们还能用testdisk和dd做什么?

Linux数据恢复高阶指南:当extundelete失效时的专业抢救方案 误删重要数据是每位Linux运维人员都可能遭遇的噩梦。当常规恢复工具失效时,如何从底层进行专业级数据抢救?本文将带你深入探索ext4/XFS文件系统下的高阶恢复技巧,从原理…...

MySQL 分区表设计的常见错误

MySQL分区表设计的常见错误及规避策略 分区表是MySQL中用于优化大表查询性能的重要技术,但设计不当反而会引发性能下降、维护困难等问题。许多开发者因缺乏经验而陷入常见误区,导致分区效果适得其反。本文将剖析分区表设计的典型错误,帮助开…...

PS3游戏更新下载器:让经典游戏重获新生的智能工具 [特殊字符]

PS3游戏更新下载器:让经典游戏重获新生的智能工具 🎮 【免费下载链接】PS3GameUpdateDownloader downloader for ps3 game updates (.pkg files) from official sony servers written in python 项目地址: https://gitcode.com/gh_mirrors/ps/PS3GameU…...

AndLua逆向实战:从混淆字节码到源码还原的完整解析

1. AndLua逆向工程入门:从加密原理到实战准备 第一次接触AndLua逆向时,我被那些看似乱码的加密字符串搞得一头雾水。后来才发现,这就像玩解谜游戏,只要掌握关键线索就能层层突破。AndLua作为Android平台上的Lua实现,其…...

Maven工程中protobuf-maven-plugin的配置详解与实战

1. 为什么选择protobuf-maven-plugin 在Java项目中使用Protocol Buffers(简称protobuf)作为数据交换格式已经成为微服务架构中的常见做法。相比JSON和XML,protobuf具有更小的数据体积和更快的编解码速度,特别适合高并发场景。但在…...

台指期实时行情 API 对接实战|股指期货行情接口开发指南

在股指期货量化交易、行情展示、风控监控等开发场景里,低延迟、高稳定的实时行情接口是必不可少的基础组件。本文基于脉动数据行情平台接口规范,以台指期为核心,搭配恒指、小恒指、富时 A50、德指、日经 225 等品种,完整演示一套可…...

Android Studio中文界面配置:从语言障碍到母语开发体验的转变

Android Studio中文界面配置:从语言障碍到母语开发体验的转变 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 在Andro…...

为什么你的AI产品明年可能被禁售?——2026奇点大会AGI治理框架中的6项硬性准入红线

第一章:2026奇点智能技术大会:AGI的治理框架 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将通用人工智能(AGI)的全球治理框架设为战略议程核心,聚焦于技术主权、跨司法管辖区对齐机制与自主系统问责路…...

EPLAN实战技巧精讲:高效绘图与标准化设置(基础篇)

1. 从零搭建EPLAN标准化绘图环境 刚接触EPLAN时,我最头疼的就是每次新建项目都要重复调整各种参数。后来发现,提前做好标准化设置能节省50%以上的绘图时间。就像装修房子前要先规划水电布局一样,电气设计也需要在绘图前做好这些基础配置&…...

AGI伦理不是选择题,而是生存题:从欧盟AI Act到中国《生成式AI服务管理办法》,9类高危应用场景避坑指南

SITS2026分享:AGI的伦理与社会影响 第一章:AGI伦理的范式跃迁:从技术合规到文明存续 2026奇点智能技术大会(https://ml-summit.org) 当AGI系统首次在无监督条件下完成跨模态文明推演、自主重构全球气候治理协议并反向优化人类制度熵值时&a…...

Rust的#[repr(C)]跨平台开发

Rust的#[repr(C)]跨平台开发:打破语言边界的利器 在当今多语言协作的软件开发环境中,Rust凭借其安全性和性能优势逐渐成为系统级编程的首选。当需要与其他语言(如C/C)交互时,内存布局的兼容性成为关键挑战。这时&…...

用TLE5012磁编码器DIY一个高精度旋转测量模块:硬件连接与Arduino测试

用TLE5012磁编码器打造高精度旋转测量模块:从硬件连接到Arduino实战 磁编码器在工业自动化、机器人关节控制和DIY项目中扮演着关键角色,而英飞凌的TLE5012以其高精度和SPI接口的便利性成为创客们的热门选择。本文将带你从零开始,用Arduino和T…...

电机减重一半,续航多半小时?拆解轴向磁通刷盘电机的省电逻辑

拿到这台YS-AFBL-120-20-24轴向磁通无刷刷盘电机,第一反应是:230W,5.8kg。同功率等级的传统径向电机方案,算上减速箱和皮带轮,整套驱动单元奔着10公斤往上去了。轴向方案等于直接砍掉了近一半的重量。重量减下去&#…...

告别纯理论:手把手教你用PyQt5给ROS机器人做个带地图交互的GUI控制界面

告别纯理论:手把手教你用PyQt5给ROS机器人做个带地图交互的GUI控制界面 在机器人开发领域,算法实现往往只是第一步。真正让项目从实验室走向实际应用的关键,是如何将复杂的底层逻辑转化为直观、易用的交互界面。想象一下,当你的机…...

从社交网络到推荐系统:拆解GNN在工业界的三种落地姿势与避坑指南

工业级图神经网络实战:从社交关系到电商推荐的三大落地范式 社交平台的好友推荐、电商网站的"猜你喜欢"、金融风控中的异常交易识别——这些看似不相关的场景背后,都藏着图神经网络(GNN)的身影。作为算法工程师,我们常常陷入两难&a…...

从零上手wandb:核心API详解与实战配置指南

1. 认识wandb:为什么它是机器学习工程师的必备工具 第一次接触wandb是在三年前的一个图像分割项目。当时团队里有5个人同时跑实验,每个人的模型参数、训练曲线都分散在不同机器的TensorBoard里。每次开会对比结果时,总要花半小时收集各种log文…...

用global关键字解决UnboundLocalError?先别急,这里有更Pythonic的3种写法

告别global关键字:3种更优雅的Python变量作用域解决方案 在Python开发中,遇到UnboundLocalError时,很多开发者会条件反射地使用global关键字解决问题。虽然这种方法确实能让代码运行起来,但它往往带来更多隐患——命名空间污染、难…...

用AT89C51单片机DIY一个可调速的步进电机小平台(附Proteus 8.10仿真文件)

用AT89C51单片机打造智能步进电机控制平台:从仿真到实物的全流程解析 在电子制作领域,步进电机因其精准的位置控制和简单的驱动方式,成为许多自动化项目的核心组件。而51单片机作为经久不衰的微控制器,依然是初学者入门嵌入式开发…...

26HVV行动 初 中 高 级人员招聘

一、HW人员要求及详细介绍 原文地址:https://mp.weixin.qq.com/s/vzRwUhtWj8tfibZFS7YfoA HW介绍 HW(网络安全护网行动)是国家关键信息基础设施安全攻防演练行动,旨在通过实战化攻防对抗提升行业网络安全防护能力。 城市&…...

电力-DTU实战配置:从组态王到花生壳的组网与调试

1. DTU在电力行业的实战价值 DTU(数据终端设备)在电力自动化系统中扮演着神经末梢的角色。我参与过多个变电站监控项目,发现很多新手工程师容易把DTU和普通无线模块混淆。实际上,DTU是自带完整协议栈的智能终端,它能将…...

连号区间数 暴力

连号区间数 题目描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 111 ~ NNN 的某个全排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区间 [L,R][L, R][L,R] 里的所有元素(即此排列的第 LLL 个到第 RRR…...

避坑指南:昆仑通态屏幕制作中常见的串口通信问题与解决方案

昆仑通态屏幕串口通信实战:从数据延迟到校验错误的系统化解决方案 1. 串口通信基础与常见故障图谱 在工业自动化领域,昆仑通态人机界面(HMI)作为关键的人机交互设备,其串口通信稳定性直接影响整个控制系统的可靠性。根据实际工程统计&#xf…...

2025年英雄联盟国服换肤终极指南:R3nzSkin国服特供版完整使用教程

2025年英雄联盟国服换肤终极指南:R3nzSkin国服特供版完整使用教程 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server R3nzSkin国服特供版是一款…...

如何优雅地完成项目数据库的初始化

简介 当项目在一个新的环境启动或部署时,必不可少的步骤是完成数据库的初始化 将所需要的数据库表,可能还有一些初始的配置数据一次性写入到数据库中 常规的做法,是将初始化脚本整理到项目的资源目录中,提醒开发程序员或者运维人员…...

Proteus 8.13 保姆级教程:从零开始用Arduino UNO模板创建你的第一个仿真项目

Proteus 8.13 零基础实战指南:Arduino UNO仿真项目全流程解析 引言:为什么选择Proteus进行Arduino仿真? 对于电子设计爱好者而言,硬件投入成本常常成为学习路上的第一道门槛。一块Arduino UNO开发板虽然价格亲民,但当需…...

eNSP 启动 AR1 失败,错误代码 40 解决总结

eNSP及其配套程序下载地址: eNSP Download 演示系统版本 Windows11专业工作站版 版本号 24H2 操作系统版本 26100.7623 第一类现象 打开 eNSP 后,在拓扑图中添加路由器 AR1 启动设备时持续提示: 启动设备 AR1 失败错误代码:40详细&#x…...

基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割

基于 DAViD 算法的前景分割效果展示 项目简介 本项目是一个基于 DAViD (Denoising Aggregation for Vision and Depth) 算法的图像前景分割工具,使用 ONNX 模型进行推理,支持 CPU 和 CUDA 加速。项目采用 C# WinForms 开发,提供友好的图形界…...

告别Keil:基于VSCode+ARM-GCC+OpenOCD的STM32一站式开发环境实战

1. 为什么选择VSCodeARM-GCCOpenOCD开发STM32? 作为一名在嵌入式领域摸爬滚打多年的老鸟,我深知Keil MDK这类传统IDE的痛点:商业授权费用高、界面老旧、扩展性差。记得去年接手一个开源项目时,团队里有小伙伴用Keil,有…...