ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

百万路视频监控高并发承载:LiveGBS国标流媒体平台架构解析

百万路视频监控高并发承载:LiveGBS国标流媒体平台架构解析 接到一个百路、千路视频监控项目的时候很多人的第一反应是“搞定接入协议、能出画面就行”。但真正做过大型视频监控汇聚项目的人都知道当路数往上冲到十万、百万这个量级“接入”只是入场券后面的高并发承载才是真正决定项目成败的关卡。我这次要聊的 LiveGBS就是专门为这种“百万路监控视频接入高并发承载”场景而生的国标流媒体平台。它不是那种只能在小项目里跑通的玩具级方案而是从 GB28181 信令接入、到流媒体分发、再到多节点横向扩展整套链路都冲着大规模并发去设计的东西。这篇文章我会结合自己做安防平台集成的实际经验把 LiveGBS 在大型视频监控汇聚项目里怎么用、为什么能扛住高并发、部署时要调哪些参数、踩过哪些坑一次性说清楚。1. 百万路规模下的真实痛点为什么传统架构撑不住1.1 大项目里“接入”这件事远不止调通协议先说一个最常见的技术误区。很多做监控集成的工程师平时在小项目里用海康 SDK、大华 SDK 或者 ONVIF 协议能拉几百路视频到自己的平台里就觉得“视频接入我有经验”。但一旦面对百万路规模这套经验立刻失灵。为什么核心原因是协议栈和工作模式的差异。百万路级别的项目几乎不会让你用 SDK 一路一路去拉流。一方面厂商 SDK 在大规模并发下会有授权限制和性能瓶颈另一方面SDK 拉流是主动从设备端取流视频流经过平台中转带宽和计算压力全部集中在平台侧路数一多平台先被压垮。大型项目几乎统一走 GB/T 28181 国标协议。这个协议的特点是“设备主动注册、平台被动接收”设备端通过 SIP 信令注册到平台平台下发指令让设备把视频流推上来。这样一个平台可以对接不同厂商、不同型号、不同网络位置的设备而且设备能够分层级联市平台汇聚区县平台区县平台汇聚乡镇平台逐级向上才能撑起百万路的接入规模。LiveGBS 在国标接入这一块做得特别彻底。它本身就是以 GB28181 协议为底座设计的流媒体服务支持设备主动注册、支持级联对接上级国标平台、支持 SIP 信令的分布式处理。换句话说它不是“能接国标”而是从底层架构上就是为国标的大规模组网设计的。1.2 并发播放才是流媒体真正的命门如果说“接入”考验的是协议能力那么“并发播放”考验的就是流媒体服务器的硬功夫。很多项目前期接入很顺利几万路设备全部上线结果领导一发话“把全部画面调上大屏”平台当场卡死就是典型的接入有余、并发不足。这里要分清两个概念接入并发和播放并发。接入并发是指每秒有多少设备向平台发起注册、心跳、推流这个数据决定了平台的信令处理能力播放并发是指有多少客户端同时向平台请求拉流这个数据决定了流媒体服务的数据吞吐能力。大型项目里两者往往是数量级的差距。我见过一个比较典型的场景10 万路设备接入平时只需要 500 路实时预览平台很轻松。但遇到重大保障任务领导要求把核心区域的 5000 路画面同时调出来上墙这时候流媒体服务器要同时从设备端拉取 5000 路视频流再转码、转发给 5000 个显示窗口。如果流媒体模块是单节点带宽跑满、CPU 打满、内存吃紧系统瞬间崩溃。LiveGBS 的设计思路就是把这个并发瓶颈拆掉。它把 SIP 信令服务和流媒体转发服务做了分离流媒体转发部分支持部署多个节点通过负载均衡把播放请求分散到不同的流媒体服务器上。单台机器扛不住的并发用多台机器分摊这是百万路并发承载的必经之路。1.3 云台控制、录像回放、设备状态这些“隐形并发”实时预览只是视频监控最基础的功能。真正到了实战环节云台控制、录像回放、设备在线状态刷新、告警联动这些功能会同时涌向平台形成“隐形并发”。举个具体的例子。一个平安城市项目指挥中心的大屏上开着 200 个实时画面窗口操作员会频繁用云台控制某个球机转动、变焦。每一次云台操作在国标协议里都是一条 SIP 信令指令平台要转发给对应的设备。如果同一时刻有 50 个操作员在操作云台平台的 SIP 信令处理瞬间就有 50 路并发。这还没完操作员的客户端还要实时刷新设备树看哪些设备离线、哪些设备在线每次刷新就要从平台拉取几万路设备的状态数据。录像回放也是个吃并发的大户。当一个案件发生后几十个民警同时调看不同时间段、不同摄像头的录像平台需要同时从存储中拉取几十路历史码流再转发给不同的客户端。这些“隐形并发”虽然不如实时预览那么显眼但叠加起来对平台的消耗非常可观。LiveGBS 提供 RESTful API把设备树、实时预览、云台控制、录像回放、语音对讲这些能力都封装成标准接口方便上层业务平台调用。这意味着不是所有压力都堆在流媒体服务器上业务层做了大量分流底层流媒体只专注做它最擅长的事——转码和分发。2. LiveGBS 核心架构拆解高并发承载的技术底座2.1 GB28181 国标接入是怎么工作的深入拆解 LiveGBS 之前有必要先讲清楚 GB28181 的基本工作流程这样后面看架构设计才不会一头雾水。GB28181 的核心是 SIP 信令 RTP 媒体流。设备启动后会向平台配置的 SIP 服务器地址发送注册请求平台回复 200 OK设备就处于在线状态。之后设备会周期性发送心跳消息告诉平台我还活着。这个流程大家都很熟悉但大规模并发时难点就出来了几万路设备同时开机注册SIP 服务器能不能在短时间内处理完这么多注册请求几万路设备每隔 60 秒发一次心跳每秒就有几百上千条心跳消息涌入SIP 服务器能不能扛住再看实时预览的流程客户端向平台请求某路视频平台通过 SIP 信令向设备发送“INVITE”请求携带媒体协商参数告诉设备把视频流传到哪个 IP 的哪个端口。设备收到指令后开始向指定地址推送 RTP 流。平台收到 RTP 流之后再转发给请求的客户端。这里有一个关键设计平台不仅要接收设备的推流还要把流转发给多个客户端。假设一个枪机正在被 10 个用户同时观看如果平台做的是“透传”每来一个用户就从设备拉一路流那么 10 个用户就要设备推 10 路流设备端网络和编码能力都会被拖垮。正确的做法是平台“单拉多分发”——只从设备拉取一路流然后在流媒体服务器内部复制分发到 10 个客户端。这就是流媒体网关的核心价值。LiveGBS 在这条链路上的实现非常成熟。它的流媒体服务基于高性能的 C 语言组件开发专门处理 RTP 收流、协议转换、流复制和分发单路输入可以支撑几十路甚至上百路输出。这种“入口收敛、出口发散”的模式正是百万路接入下仍然能保证稳定预览的关键。2.2 SIP 信令、媒体流、流媒体转发三层的分工从整体架构上看LiveGBS 可以拆成三个逻辑层SIP 信令层、流媒体网关层、业务 API 层。SIP 信令层负责所有设备和平台之间的信令交互包括注册、心跳、实时预览请求、云台控制指令、录像回放请求等。这一层对实时性要求高需要快速响应同时要有足够的并发处理能力来支撑大规模设备的信令风暴。LiveGBS 的信令服务基于 Go 语言实现Go 的 goroutine 并发模型天然适合做高并发的信令处理这一点选型非常准。Go 处理十万路设备的心跳完全不费劲而且内存占用比 Java 那一套省太多。流媒体网关层是整个平台的性能核心负责接收设备推上来的 RTP 流做协议转换然后进行流分发。这一层的特点是纯数据搬运大量的内存拷贝和网络 IO 操作对性能要求极高。LiveGBS 采用 C 组件来做这一层是因为 C 语言在内存管理和网络 IO 上能达到极致的性能一个流媒体网关进程支撑几千路流的转发是常态。这里有个细节LiveGBS 把流媒体网关设计成独立模块可以部署多套每一套只管一部分设备的流当某一路网关出问题时只影响落在该网关上的那部分视频流不会拖垮整个平台。业务 API 层是给上层业务平台用的提供设备管理、实时预览地址生成、录像检索、云台控制、平台级联等 RESTful 接口。这一层把底层的信令和流媒体细节完全屏蔽业务平台只需要调用 HTTP 接口就能实现所有视频监控业务。对于做集成开发的人来说这意味着不需要懂 GB28181 协议的每一个字段只需要按 API 文档调接口开发效率提升巨大。2.3 为什么选 LiveGBS 而不是自己用开源组件拼很多技术团队遇到大型视频监控项目会有一种“自己拼一套”的冲动。毕竟开源社区里有现成的 SIP 协议栈、有流媒体服务器比如 SRS、ZLMediaKit、Janus 这些拼一拼似乎也能跑起来。我在早期项目里也干过这种事实话实说拿开源组件拼一个“能跑通流程”的 demo 不难但是要拼出一个能在生产环境稳定承载高并发的平台工作量远超想象。你要自己解决设备兼容性问题——不同厂商对 GB28181 协议的实现细节存在偏差有的厂商在 INVITE 请求里不带媒体描述有的一直不回复 200 OK这些都需要在信令层做容错处理。你要自己解决流媒体分发效率问题——SRS 这类通用流媒体服务器更多面向直播场景对 GB28181 的 RTP over TCP/UDP 收流、H.264/H.265 的 PS 封装解析做得不够深入遇到不规范的码流直接挂掉。另外还有国标平台特有的难题设备目录的级联上报。GB28181 要求平台之间级联时下级平台要把自己的设备目录树通过 SIP 信令逐级上报给上级平台几万路设备的目录信息要拆分成一条条 XML 消息上报这个过程的自动化和稳定性极其考验平台功底。自己拼的组件在这个环节大概率会翻车。LiveGBS 的价值在于它把这些坑全部填平了。设备兼容性、流媒体收发、目录级联上报、录像检索回放、云台控制、语音对讲这些都是成熟实现拿来就能用。更关键的是它有开源版本技术团队可以自己部署、二次开发、深度定制不会像商业闭源平台那样只能按厂商的玩法来。3. 高并发承载的关键设计从单机到集群的演进路径3.1 单台服务器的承载上限怎么算聊高并发之前先把“多少路并发算高”这件事量化清楚。百万路接入是指平台总共纳管的设备数量而不是同时播放的并发路数。实际项目中同时播放的并发数通常是总路数的 1% 到 5%也就是十万路设备规模下同时播放并发在 1000 到 5000 路左右。但实时预览并发 5000 路不等于流媒体服务器只需要处理 5000 路。每路视频码流按主流 1080P 计算H.264 编码下码率大约 2Mbps 到 4Mbps取中间值 3Mbps。5000 路同时转发出口带宽需求是5000路 × 3Mbps 15000Mbps ≈ 15Gbps这个数字意味着即使服务器有万兆网卡单台也无法承载。所以单台服务器能扛多少路先看网络带宽瓶颈。再看服务器性能。如果流媒体网关只做“纯转发”——设备推上来 RTP 流服务器直接复制分发不转码那么 CPU 的消耗主要在内存拷贝和网络收发上单台高性能服务器32 核、64GB 内存可以支撑 2000 到 3000 路的实时转发。但如果涉及转码把 H.265 转成 H.264 或者降低分辨率一路转码就要占用一个 CPU 核心左右的算力5000 路转码需要几千核 CPU几乎不可能在一台机器上完成。所以单台服务器的实用承载上限在网络带宽充足、不做转码的前提下大约是 2000 到 3000 路并发预览。超过这个量就必须上集群。3.2 流媒体网关的横向扩展与负载均衡LiveGBS 的集群设计思路是“按设备分片信令全局统一”。也就是说SIP 信令服务可以部署一套或几套负责所有设备的注册和信令交互流媒体网关则部署多套每套网关负责一部分设备的流媒体转发。具体怎么做在 LiveGBS 的配置里每个流媒体网关有独立的 ID 和 IP 端口设备注册时平台通过哈希算法或者手动分组把不同的设备分配到不同的流媒体网关。客户端请求播放时平台返回对应网关的拉流地址客户端直接从那台网关取流。这种设计的好处很明显流媒体压力被平均分摊到多台机器上任何一台网关宕机只影响那台机器负责的设备。超大项目中可以按区域来规划A 区的设备全部走网关 AB 区的设备全部走网关 B不仅性能有保障运维排障时也能快速锁定范围。负载均衡层面LiveGBS 支持在海思、瑞芯微这些硬件平台之外部署在 x86 服务器上前面加一层负载均衡器比如 Nginx 或 LVS把 API 请求均匀分发到多套 LiveGBS 实例上。对于纯流媒体分发也可以利用流媒体网关的 IP 分片策略来实现负载均衡不依赖额外的 LB 组件减少单点故障。3.3 带宽规划高并发项目里最容易被低估的环节高并发承载还有一个必须提前计算的资源——带宽。这里的带宽分为两部分设备接入侧带宽和客户端分发侧带宽。设备接入侧带宽取决于设备推流总量。10 万路设备如果同时推流每路按 2Mbps 算总接入带宽就是 200Gbps。现实中不可能所有设备同时推流因为 GB28181 的机制是“按需推流”设备平时只发心跳不推视频流只有被请求播放时才推流。但这不代表接入侧带宽不重要一旦大规模并发播放设备侧网络瞬间会被打满。做项目时一定要给设备接入侧预留足够的带宽冗余。客户端分发侧带宽取决于播放并发数。按 5000 路 3Mbps 算分发侧带宽需要 15Gbps。这个带宽要分摊到不同区域的流媒体网关避免某一台网关出口带宽成为瓶颈。一个实操建议做项目方案时把并发播放路数分成几个档位来规划。日常预览并发、应急指挥峰值并发、重大保障特高并发每个档位对应不同的带宽和服务器资源需求。LiveGBS 的集群架构支持随时扩充流媒体网关节点重大保障前临时加机器保障结束后下线弹性伸缩。4. 实操部署与参数调优从零搭建一套高并发承载环境4.1 部署架构与基础环境准备我这里以一套中型规模的部署为例给大家演示 LiveGBS 的部署和调优过程。假设项目规模是 5 万路设备接入目标并发预览 2000 路。推荐的部署架构是数据库服务器一台MySQL 8.0存设备信息、录像索引等SIP 信令服务器一台32 核 64GB16 核给信令16 核给 API 服务流媒体网关三台每台 32 核 64GB万兆网卡负载均衡一台Nginx分发 API 请求。如果预算有限SIP 信令和 API 可以先合到一台机器上流媒体网关单独部署。基础环境方面LiveGBS 支持 CentOS 7/8、Ubuntu 18.04/20.04、Windows Server 2016。生产环境建议用 Linux原因很简单Linux 的网络协议栈性能更好而且长时间运行不容易产生内存碎片。部署时先用脚本安装依赖MySQL 数据库建议单独部署不要和流媒体服务抢 CPU 和内存资源。4.2 关键配置参数详解LiveGBS 的核心配置文件里有几个参数直接影响高并发承载能力逐个说明。第一个是 SIP 服务的监听地址和端口默认监听 5060。这里有个经验之谈生产环境务必同时监听 TCP 和 UDP因为部分老款设备只支持 UDP 注册而 UDP 在大规模并发下容易出现丢包。建议在 SIP 服务前面加一层 UDP 代理或者直接用 Linux 内核参数调优增大 UDP 接收缓冲区。内核参数调整可以参考下面的配置# /etc/sysctl.conf 追加以下内容 net.core.rmem_max 67108864 net.core.wmem_max 67108864 net.core.rmem_default 26214400 net.core.wmem_default 26214400 net.ipv4.ip_local_port_range 1024 65535 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_fin_timeout 5这些参数的作用是扩大网络收发缓冲区、增加可用端口范围、加快 TCP 连接回收对大规模并发场景非常关键。配置完成后执行sysctl -p生效。第二个关键参数是流媒体网关的端口范围。GB28181 拉流时设备会把 RTP 流传到平台指定的端口这个端口范围如果设置得太小高并发时端口不够用会导致拉流失败。我的建议是把 RTP 收流端口范围设置成 10000 到 40000三万多个端口足够支撑几千路并发收流。第三个关键参数是录像存储路径和并发写盘能力。如果开启录像功能高并发时的磁盘 IO 会成为新的瓶颈。LiveGBS 支持把录像文件写到多块磁盘上通过配置多个存储路径来分摊写盘压力。实测下来机械硬盘阵列 RAID10 能支撑约 200 路并发录像写入SSD 可以支撑 500 路以上要根据并发录像路数提前规划。4.3 级联对接与设备目录上报配置大型项目基本都有“市-区-县”多级平台级联的需求。LiveGBS 作为下级平台需要向上级国标平台注册并上报自己的设备目录。级联配置里有个难点设备目录上报。上级平台会向下级平台发送“目录查询”请求下级平台需要把本区域内的所有设备信息逐条上报。几万路设备的目录信息量非常大如果上报逻辑没有做好容易造成上级平台长时间收不到完整目录。LiveGBS 在目录上报上做了分页拉取机制每次上报一定数量的设备避免一次性上报海量数据导致信令超时。配置时需要注意设备目录的层级结构LiveGBS 支持按行政区划或按组织机构建立虚拟组织树设备挂在对应的组织节点下上级平台看到的就是一个清晰的树形结构。我自己调级联时踩过一个坑设备在线状态在上级平台不刷新。排查发现是下级平台的 SIP 服务器地址配置成了内网 IP上级平台根本访问不到。解决办法是使用公网 IP 或做好端口映射并且确保 SIP 端口在防火墙上放通。5. 落地过程中的常见问题与排查实录5.1 设备注册不上线信令看得到回包看不到这是 GB28181 项目里频率最高的问题。设备配置好 SIP 地址和端口却一直显示离线抓包能看到设备一直在发注册请求但平台没有响应。排查思路分三步走。第一步确认 SIP 服务监听正常netstat -lunp | grep 5060检查端口是否在监听。第二步确认设备的 SIP 用户 ID、密码和平台侧配置一致GB28181 注册时设备 ID 一般是 20 位数字编码很多设备默认带 VLAN ID 或者其他前缀如果设备 ID 不匹配平台直接拒绝。第三步检查防火墙和安全组策略UDP 5060 端口有没有被防火墙拦截。我自己遇到最多的情况就是第三步特别是云服务器环境安全组只放通了 TCP 端口UDP 端口没放设备全部注册不上来。5.2 拉流卡顿、黑屏并发一上来就出问题并发播放时出现卡顿和黑屏通常不是平台代码的问题而是资源瓶颈。常见原因有三个带宽不足、服务器 CPU 过高、流媒体网关 TCP 连接数超限。带宽不足的排查方法是看流媒体网关的iftop实时流量。如果出口带宽已经打满那就是带宽问题需要扩容或者压缩码流。CPU 过高的排查方法是看流媒体网关进程的 CPU 使用率如果长时间超过 80%说明这台网关需要拆分流量。TCP 连接数超限的排查方法是查看/etc/security/limits.conf如果系统限制单进程文件描述符为 1024并发拉流稍微一大就不够用了必须调大。这里给一个参考资料# /etc/security/limits.conf * soft nofile 655350 * hard nofile 655350 * soft nproc 655350 * hard nproc 655350配置完重启后查看ulimit -n确认已经从默认的 1024 变成 655350。文件描述符不够导致的“Too many open files”错误在高并发流媒体服务器里特别常见。5.3 H.265 编码设备在部分浏览器播放不了现在的视频监控项目里新装的摄像头基本都是 H.265 编码。H.265 在同等画质下码率只有 H.264 的一半对于节省带宽非常友好但在浏览器端播放会遇到兼容性问题——大部分浏览器原生不支持 H.265 解码。实验项目里这个矛盾特别突出前端想看高清晰度的画面但浏览器放不了 H.265。LiveGBS 的解决方式是转码方案流媒体网关内置转码功能把 H.265 流转成 H.264 流再分发到浏览器端。但转码是有代价的CPU 消耗大幅上升一路 1080P 的 H.265 转 H.264 大约需要占用一个 CPU 核心的 70% 到 100%。我的建议是不要全量转码而是针对特定场景转码预览墙上墙的画面如果用原生播放器可以直接拉 H.265 流如果客户端是浏览器再启用转码。LiveGBS 的接口层面可以选择返回原始流还是转码流灵活处理避免不必要的 CPU 开销。5.4 录像回放时间轴对不上、黑屏录像回放问题在高并发项目里也很常见。表象是回放时时间轴显示有录像但点击播放黑屏或者回放的画面时间和实际时间不一致。排查方向有三第一确认设备的时间是否准确。GB28181 录像检索和回放是依赖设备端的时间戳的如果设备时间不准回放的时间轴就会错乱。第二确认录像存储的空间是否足够如果磁盘写满了录像文件只有索引没有数据回放自然黑屏。第三确认平台和设备的录像编码格式是否兼容个别设备在录像流里带有额外的私有数据会影响平台解析。LiveGBS 在录像这一块比较贴心它支持本地录像和中心录像两种模式。本地录像就是设备 SD 卡录像平台通过 GB28181 远程调取中心录像就是平台主动拉流存储在服务器上。大型项目我建议用中心录像虽然占用存储空间但是录像的准确性和可靠性完全由平台控制排查问题也容易得多。5.5 常见问题速查表为了方便现场排查我把上述问题整理成一张速查表也便于直接作为项目交付文档的一部分。问题现象可能原因排查步骤解决方案设备注册不上线SIP ID 不匹配 / UDP 端口被防火墙拦截抓包看有没有 200 OK 回包核对设备 ID 和密码放通 UDP 5060拉流黑屏卡顿带宽打满 / 文件描述符不够iftop 看流量ulimit -n 看连接数扩容带宽调大文件描述符限制H.265 浏览器播放不了浏览器不支持 H.265 解码换原生播放器测试能否播放启用按需转码流媒体网关转 H.264并发一高就崩溃单节点流媒体吞吐不够查看网关 CPU、内存、带宽增加流媒体网关节点负载均衡分发录像回放黑屏设备时间不准 / 磁盘写满检查设备时间检查磁盘空间校正设备时间扩容清理存储上级平台看不到目录级联地址配置错误检查级联 SIP 地址和端口映射改用公网 IP 或正确做端口映射6. 运维监控与联动扩展高并发项目的长期主义6.1 大项目里的流媒体集群监控体系部署完 LiveGBS 并不代表万事大吉百万路规模的项目里运维监控是重中之重。我见过太多项目上线时跑得很顺运行三个月后各种小问题堆积最终导致平台不稳定。这里关键是要建立一套流媒体服务的立体监控体系。监控分三个维度。第一个维度是服务器资源监控CPU、内存、磁盘、网络带宽这是最基础的用 Prometheus 加 node_exporter 就能实现重点是设置合理的告警阈值。CPU 使用率持续超过 85% 要告警内存使用率超过 90% 要告警磁盘剩余空间低于 20% 要告警网络带宽使用率超过 70% 要告警。这些阈值都是我在实战中总结出来的比默认阈值更贴近流媒体场景。第二个维度是流媒体服务监控LiveGBS 提供了运行状态接口可以查询当前在线设备数、实时并发路数、流媒体网关节点状态。我建议写一个定时脚本每隔 30 秒拉取一次这些数据写入时序数据库这样就能看到并发趋势曲线。如果某个时间段的并发突然掉下去说明可能有网关节点挂了如果并发持续走高就要留意是否临近承载上限。第三个维度是业务质量监控重点监控设备在线率、拉流成功率、播放卡顿率。这几个指标直接决定项目交付验收是否通过。设备在线率低于 95% 就需要关注拉流成功率低于 98% 就要排查信令链路播放卡顿率高于 2% 就要检查流媒体网络。6.2 与警务实战平台、政数局平台的对接经验大型视频监控项目最终都要对接业务平台比如警务实战平台、综治信息平台、政数局的视频共享平台。这些对接看起来都是调 API实际上应用场景差异巨大。公安场景的对接重心是“快速调阅”和“实时指挥”。要求平台提供尽可能短的拉流延迟从请求到出画面最好控制在 1 秒以内。LiveGBS 的流媒体转发设计对低延迟支持得不错启用 TCP 流分发后端到端延迟可以控制在 300 到 500 毫秒。政数局共享平台的对接重心是“标准化输出”。他们要求视频平台按国标向上级平台推送目录、实时流、录像流数据格式必须规范。LiveGBS 在国标级联这一块做得足够标准我们对接过省级平台目录上报、实时流推送、录像检索回放全部一次通过。还有一个常被忽略的对接点视频标签和地理信息。大型项目里每路视频要挂接经纬度、所属网格、设备类型、责任单位这些属性。LiveGBS 的标准数据模型支持自定义设备属性可以通过 API 批量导入这样上级平台在做地图联动时能直接拿到地理位置信息。6.3 语音对讲和广播联动在高并发场景下的落地除了常规的视频预览和录像大型项目现在越来越强调语音能力。比如在交通枢纽、学校、园区等场景中心平台需要喊话、对讲、广播。国标 GB28181 里有语音广播和对讲的协议流程基本原理也是基于 SIP 信令建立媒体会话然后用 RTP 传输音频流。这个功能在单路场景下实现简单但在高并发场景下有一个独有的难题广播通路的信令并发。设想一个应急广播场景指挥中心要同时向 50 个广播点发起喊话意味着同一瞬间要有 50 路语音 RTP 流从平台发往不同的设备端。如果平台的 SIP 信令处理和 RTP 发送没有做并发优化很容易丢包或者延迟。LiveGBS 对语音对讲的支持比较完整支持双向对讲和单向广播而且音频格式兼容 G.711A、G.711U、AAC 这些主流编码。我在项目中用它的广播功能做过 30 路同时喊话的压测听感上基本感觉不到延迟。要注意的是语音对讲和广播对网络的要求比视频更敏感建议优先保证音频流的 QoS 优先级避免因为和其他业务抢带宽导致语音断续。6.4 弹性扩容的实操节奏最后聊一聊高并发场景下最实用的一个能力弹性扩容。LiveGBS 的流媒体网关支持动态增加节点而且整个流程非常轻量不需要重启主服务。我的实操节奏是新增一台服务器部署 LiveGBS 流媒体网关组件配置好数据库和信令服务的连接信息启动后在管理界面添加网关节点。新设备注册时平台会自动把一部分设备分配到新网关。已经在线运行的设备不受影响它们还继续走原来的网关。这里要提醒一个容易忽略的点新增网关后要给客户端刷新播放地址。如果客户端已经缓存的播放地址指向旧网关而设备已经迁移到新网关播放就会失败。解决办法是在业务平台上做一个播放地址的自动重定向逻辑客户端拉流失败时自动回到平台获取最新的节点地址。再有就是升级注意事项。LiveGBS 版本升级时需要先备份数据库和配置文件避免升级过程出现问题无法回滚。我在内网项目里踩过一次坑升级后部分老版本设备的目录上报格式变了上级平台收不到新设备。后来的做法都是先在测试环境完整验证包括旧设备的兼容性回归测试再安排生产环境的维护窗口。做大型视频监控项目技术方案选对了项目交付就是稳步推进方案选错了后期运维会陷入无休止的“救火”。从我的实战经验来看LiveGBS 在高并发承载这条赛道上确实找到了一套行之有效的解法——国标信令和流媒体转发的解耦、多节点横向扩展、低延迟分发这些都是大型项目真正需要的能力。如果你正在规划百万路级别的视频汇聚平台不妨按我上面说的思路先做个小规模验证再逐步铺开集群节点这条路是走得通的。
返回列表