信创:SRS流媒体服务器的联通最佳实践

一、概述

联通(上海)产业互联网有限公司为打造一体化和定制化的系统解决方案、软硬件适配、国密一体化输出和定制化系统的PaaS能力适配研究,形成全流程标准化的定制化系统适配流程,专门成立了相关的科创实验室,对涉及定制化系统开发和部署的应用项目进行详细的理论指导和实践指南。

本文基于上海联通在某城市运营平台和某机场安检平台的实际项目,在项目的开发和落地过程中,通过该实验室的软硬件资源加持,将重要开源项目SRS音视频流媒体服务器在安防监控场景下的鉴权和视频流协议转换、转发应用在上海联通产互的视频平台中,并对包括SRS在内的视频平台的多个服务和组件进行了定制化系统适配和改造,实现了项目在指定芯片和操作系统上的顺利部署和稳定运行,既满足了客户指定的云网部署环境的要求,也证明了SRS流媒体软件在定制化系统下大流量和高路数的规模应用可行性。

近些年,国家大力倡导推进智慧城市建设,推动城市公共基础设施数字转型,上海联通主动服务政府数字化、智能化运行,根据智慧城市类项目的业务特点,构建了自有的视频平台,统筹规划其在安防监控领域的视频业务。为构建完整可靠的视频服务框架,打造稳定的流媒体处理和转发能力,我们调研了包括SRS在内主流的流媒体服务器,其中SRS作为一个实时音视频服务器,经过多年的社区开源和版本迭代,支持了RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181等多种协议,应用在包含直播和WebRTC的多种场景下,尤其在教育直播和安防监控等场景下的应用很广泛,同时SRS也一直在积极适配指定芯片和操作系统,这些特性都给我们留下了很深刻的印象。

二、技术调研

我们对比了主流的几款流媒体服务器,从支持协议、稳定性、是否开源、定制化系统适配支持度以及平台维护等多个维度进行分析,选择合适的流媒体服务器支撑视频业务的开展。

图片

表1 对比不同视频流服务器的简化列表(2022年)

对比以上四种服务器,SRS以其完全开源、上手快速、支持多种主流协议、能够满足多样性的需求,性能上也达到商用要求,由国内团队提供稳定的版本升级和社区维护,也能看到其主动持续的定制化系统适配的支持,在国内应用优势明显。同时,SRS很早就支持源站集群(Origin Cluster),适用于高并发的场景,非常符合安防摄像头的推流应用。综上,我们最终选择SRS作为流媒体服务器来支撑视频业务的开展。

根据SRS官方的定义,SRS(Simple Realtime Server)简单实时服务器,是国内一款完全开源的流媒体服务器,SRS支持以下丰富的特性:

(1)SRS提供了丰富的接入方案,包括推送RTMP/HTTP-FLV到SRS、拉取流到SRS。 

(2)SRS支持将接入的视频流进行各种转换,例如将RTMP流转码,转封装成HTTP-FLV/HLS/HDS、转发给其他服务器。

(3)SRS支持大规模集群如CDN业务, 例如RTMP多级集群、源站集群、VHOST虚拟服务器 、无中断服务Reload、HTTP-FLV集群等。

(4)SRS提供丰富的应用接口,包括HTTP回调、安全策略、HTTP API接口、RTMP测速等。

并且在实际的开发应用过程中,我们也论证了SRS具有简单、实时、高效的特点:

(1)简单:SRS最大的特点是简单,主要表现在代码架构简单,实现简单,部署简单,运维简单。SRS降低了音视频开发的门槛,即使对音视频较为陌生的程序员也能较快地熟悉SRS,部署相关服务。同时,SRS提供了丰富便捷的日志功能,方便后续维护。

(2)实时:SRS能够实现实时流媒体协议如RTMP、HLS、WebRTC、HTTP-FLV和SRT的接入和互相转换转发。

(3)高效:SRS是高性能流媒体服务器,与同类服务器相比,性能是它们的2~3倍。

SRS支持多种关键特性以及简单实时高效的特点使其具有较大应用价值。在不同规模的项目中,SRS也有对应的多种应用方式:

(1)对于大型业务,搭建大规模CDN集群,在CDN内部的源站和边缘部署SRS。

(2)小型业务快速搭建几台流媒体集群,例如学校、企业等,需要分发的流不多,可以用SRS搭建自己的小集群。

(3)SRS作为源站,CDN作为加速边缘集群。

(4)编码器可以集成SRS支持拉多种流。

(5)协议转换网关,SRS能够对输入流进行协议转换,输出其他协议流。

从2013年起,SRS经过多年迭代,不断发展成熟。当前,SRS4.0能够应用在多种业务场景,支持多种协议,提供稳定的流媒体服务。近期,SRS也完成了定制化系统适配龙芯、麒麟、统信UOS和中科方德等多个操作系统,同时SRS5.0也已经封版,在WebRTC over TCP、支持GB28181协议、SRT支持协程原生架构、支持amd/armv7/aarch64/M1/RISC/loongarch/MIPS等CPU体系架构,而且支持Prometheus Exporter,极大的提升了SRS的可观测性。

三、定制化系统实践

定制化系统实践是目前我们在各项目应用领域致力推进的重点工作,现阶段视频平台采用分布式架构,提供稳定、高性能、端到端一站式的流媒体服务集成解决方案,该方案支持GB28181协议接入、上/下国标平台级联、RTMP/HTTP-FLV/HLS等多种协议流输出、设备/服务器对外HTTP API接口封装和云上部署服务。目前视频平台已经应用到了很多垂直行业的政企类项目中,正因此,我们围绕包含SRS流媒体服务器的视频平台在智慧城市各项目上的实践,打造定制化系统的适配和迁移应用研究体系。

下图是视频平台的业务流程通用解决方案:图片图1 视频平台业务流程通用解决方案

业务流程中包含的多个服务平台含义如下:

GMS,统一管理服务/中心管理服务,负责从客户端接收请求,将请求解析后,发送命令给GBS,SDS;

GBS,国标接入服务,负责处理GMS的指令,开放相机端口;

SDS,流媒体处理服务,负责处理GMS的指令,开放端口,接收相机推送的视频流,经处理后推送至SRS或进行录像;

SRS,简单实时流媒体服务,对视频流进行推拉转存操作。

方案流程包括:

(1)客户端发送请求信息到GMS统一管理服务器;

(2)GMS服务器向SDS服务器发送开放端口指令;

(3)SDS服务器向GMS反馈端口开放信息;

(4)GMS向GBS国标接入服务器发送端口开放指令;

(5)GBS服务器向相机发送端口开放指令;

(6)相机向GBS服务器反馈端口开放成功信息;

(7)GBS服务器向GMS服务器反馈相机端口开放成功信息;

(8)GMS服务器向客户端反馈请求处理成功信息。

(9)SDS服务器从相机拉取视频流,发送RTMP流到SRS服务器,SRS将RTMP流转换为WebRTC、HTTP-FLV、HLS等格式推送给客户端。

目前视频平台业务集中在安防监控领域,视频平台在该领域针对实际项目运用SRS流媒体服务器提供业务解决方案的能力较为成熟,下面以某A城市运营平台和某B机场安检平台两个项目为例,来介绍视频平台的定制化系统实践。

(1)某A城市运营平台

该城市运营平台是配合疫情防控场所码的相关政策,对该地区下辖的所有商铺和相关风险点进行统一管控。利用摄像头实时监控入店人数,上传至当地大数据平台,与实际扫码人数进行比对,监督商家提醒顾客扫码,同时对扫码情况不合格的商家进行通报和提醒,用以解决门店顾客不配合进场扫码且商家疏于防范的问题,积极配合城市治理和疫情防控。

该项目中的多路摄像机直连本地视频平台,同时视频平台对接下级国标视频平台,通过SRS流媒体服务器将RTMP流转换为WebRTC、HTTP-FLV、HLS等格式,对接AI算法服务识别出镜人数,将信息上传到当地大数据平台进行核对,再处理比对结果进行统计分析和监控提醒。

主要实现流程如下图2所示:图片图2 某A城市运营平台实现流程

(2)某B机场安检平台

该项目是为某B机场提供视频监控公有云服务,帮助机场管理部门构建统一视频监控综合管理体系,在复杂网络环境下,兼容机场现有的视频监控设备及系统,并将视频数据持久化到行业云存储,系统支持与国标第三方平台的灵活对接,实现对各类视频资源的统一接入、统一管理、统一服务,打造系统高效的视综平台。 

业务初期共接入1000多路高清摄像机,同时对接下级国标视频平台,和包含了SRS流媒体服务器将RTMP流转换成WebRTC、HTTP-FLV、HLS等格式并转发到的第三方平台,同时将视频流存入本地云或公有云,提供不低于90天的本地视频流上云存储及管理调度服务。

主要实现流程如下图3所示:图片图3 某B机场安检平台实现流程

在实际的包含SRS模块的项目开发落地过程中,我们也遇到了一些SRS相关问题,有些通过SRS社区文档或技术调研解决,有些通过版本升级实现,但仍然有一些限制如H.265视频编码支持方案目前只能通过其他组件替代,也期望SRS在后续版本完善。

①在项目的开发过程中,我们发现SRS的HTTP-FLV开流方式使得CPU达到100%,经过排查是因为srs.conf中混合写的延迟为0导致(mw_latency=0),修改配置即可解决;

②在测试流媒体播放时发现获取视频流存在延迟,通过分析日志发现相关的配置问题,设置开启最小延迟模式(min_latency)为on,同时根据不同项目,修改队列大小(queue_length)、两个IDR帧间的数据缓存(gop_cache)、混合写的延迟(mw_latency)等参数,来优化延迟;

③某些视频流的httpflv格式播放存在视频卡顿现象,经过SRS社区支持和开发测试调试,发现流中存在音频,音视频无法同步,造成延迟卡顿。去掉流中的音频后,播放变得流畅;

④使用RTMP依托Flash播放器播放视频时,近年来部分浏览器不支持Flash播放,会存在客户端无法播放,经过技术调研,发现SRS新版本支持WebRTC,通过版本迭代更新,使用WebRTC推流和播放解决了问题;

⑤项目中需要对接多种规格摄像头,但是各厂商生产的摄像头规格存在的差异较大,支持的协议也有差别,从摄像机拉流会涉及如国标GB28181、RTMP协议,还会涉及ONVIF等各种SRS无法支持的协议,因此SRS不能直接从摄像头拉流;经过方案论证和架构更新,最终我们构建了另外的SDS模块对接摄像头,将从摄像头的拉流处理转换成RTMP+FLV发送给SRS服务器,完美解决了拉流处理的问题。

⑥初期项目方案中计划采用websocket+flv和websocket+fmp4打包传输和播放方案,但是由于SRS不支持该方式,最终我们改用其他协议传输实现了功能。

⑦我们使用的SRS版本主要是3.0和4.0,在定制化系统适配和迁移的过程中,遇到了一些指定芯片例如龙芯和指定操作系统例如统信UOS上不适配导致SRS无法编译安装的问题,在经过对项目当前版本开源代码分析以及操作系统环境依赖要素比对,进行了项目的定制化系统适配改造并成功编译部署运行。

⑧目前很多浏览器已经支持H.265格式解码播放,了解到SRS会在6.0中支持H.265输入与输出方案,拭目以待。

四、规划展望

在成文之际,关注到SRS5.0已经有开发分支并且已经完成代码封版,相比于之前的版本,SRS 5.0增加了很多新的特性,部分新特性对于视频业务的后续开拓发展很有意义。

(1)支持Prometheus Exporter

Prometheus是一个开源的系统监控和报警系统,有丰富的数据指标支持,能提供多维度数据模型,采用灵活的查询语言,不依赖分布式部署,可以直接在本地部署,通过HTTP-pull模型收集时间序列数据,通过中间网关支持推送时间序列,能通过服务发现或静态配置发现目标,支持多种图形化和仪表板支持模式,且性能足够支撑大规模的集群。在5.0版本中,SRS支持Prometheus Exporter,Prometheus可以直接从SRS拉取监控数据,而不依赖外部第三方服务。

(2)支持Windows平台和安装

SRS对Windows平台的支持减少了对SRS使用的平台限制。对于开发者来说,可以在Windows系统上使用SRS功能,或者对SRS进行修改打包。对于新学者来说,可以不用寻找另外的虚拟机或者服务器进行SRS的学习,同时Windows友好的图形界面方便操作,使SRS的入门更为简单,也能保持学习者学习的热情。

(3)完善WebRTC功能

SRS 5.0版本对原先的WebRTC功能进行了改善,主要解决了端口复用、支持直接UDP/TCP传输、方便集群实现负载均衡或扩容(该功能未实现)等。这些功能的完善利于WebRTC传输,降低传输延迟,节省端口资源,提升系统资源利用率。

(4)实现SRT协程

SRT协议是在逐渐取代RTMP推流的直播协议,降低直播延迟,这一点对于安防行业的业务有一定积极作用,但作用较为有限。

综合以上几点新特性,视频平台计划后续基于Windows平台部署SRS进行技术预研,开发出更多功能或进行更多定制化开发。同时,视频平台与客户端交互的方式包括将RTMP流通过SRS转换成WebRTC协议传送到客户端,SRS对WebRTC功能的完善有利于加快系统反应速度、提升传输速度,有效减少客户端卡顿的问题。最后计划在已有的视频业务系统架构中增加SRS的Prometheus Exporter方便监控,提升整个视频平台的可观测性,统一管理GMS、SDS、SRS等平台。

五、总结

本文分析了上海联通产互的视频平台技术在应用SRS进行定制化系统落地方面的实践和总结,分析了SRS流媒体服务器支持的关键特性、主要特点、应用方式和发展历程,分析了视频平台流媒体服务中SRS的关键作用,对SRS在未来视频业务中的定位进行了展望。

信息化安全是国之大事,上海联通近些年在定制化系统领域进行了大量的探索,目前已与客户完成了多起落地项目,从办公自动化系统开始,逐步演进到云基础平台和业务平台。在今后的工作规划中,实验室会重点推进包括获取定制化系统认证资质和CNAS软件测试项认证在内的能力共享建设,向社会开放实验室的科创能力,为加速定制化系统的数字化成果转化贡献力量。


供稿:联通(上海)产业互联网有限公司

编辑:石文奇

审校:王志鹏

本文来源于木兰开源社区:

“木兰开源社区”建立于2019年8月,是国家重点研发计划重点专项“云计算和大数据开源社区生态系统”的核心成果。旨在促进产学研用各方开源领域的交流,推动国家科技创新成果开源,加强企业、科教研单位和行业用户之间的沟通,推动开源成果转化落地,同时为各类开源项目提供中立托管,保证开源项目的持续发展不受第三方影响,通过更加开放的方式来打造和完善开源社区生态。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(1)

相关推荐

发表回复

登录后才能评论