自由与开源软件的理念,从不解、争议、接受到如今如火如荼,经历了长期的历程。国内开源软件起步较晚,但进展迅速。腾讯经过几年的开源协同运动,也取得了不少成绩。其中,腾讯云音视频在FFmpeg、SRS等重要多媒体开源社区的贡献,颇具代表性。
SRS是开源实时视频服务器、全球流服务器中Star最多也最活跃的开源项目,主要应用在直播、WebRTC、安防和交通等领域,支持常用的流媒体协议和转换,以好用易用赢得了全球开发者的良好口碑。开箱即用的云SRS开源音视频方案赋能众多行业创造了新的可能。同时,SRS由工信部木兰开源社区孵化,是中国主导的开源项目。目前,腾讯云音视频团队是SRS主力维护团队之一,为SRS项目贡献了不少核心功能。
SRS流媒体服务器
SRS的作用是接收流、协议转换和分发流,支持多路流和云原生运维,以及完善的工具链。
SRS的核心能力包括:
SRS不仅仅是具备流媒体能力的服务器,它是一个非常方便和容易使用的一个流服务器,活好不粘人,海内外好评如潮。
SRS与SRT
SRT 是由Havision联合Wowza制定的一个开源、免版权费的基于UDP的传输协议,目的是安全和可靠的解决tcp在长距离链路传输中延迟高、抗抖动性差的问题,并针对直播流媒体场景特别是OTT行业的需求做了优化。
在传输质量指标上,SRT 通过更精准和快速的重传控制,以及针对直播流媒体场景的 Pacing 机制,使得在相同丢包率下,应用层丢包较少。当丢包率在 50%时,SRT 相比 QUIC 仍能保证稳定的传输。
SRS 5.0针对SRT API做了协程化改造, 使SRT更好的适配SRS的协程IO框架, 可以支持HTTP回调,改进了错误机制,提高了稳定性。得益于整个社区的努力,SRT在SRS中的比重越来越高。
腾讯云针对SRT的一些特点和场景, 也做了针对性的优化, 并应用在腾讯云StreamLink和TMIO SDK等产品中。同时,特别针对跨区远程传输的延迟问题,腾讯云媒体传输做了以下优化:
SRS与WebRTC
SRS 4.0支持了WebRTC协议、UDP单端口复用、客户端IP地址切换以及RTMP和WebRTC的转换,开始进入通信和低延迟直播领域,解决了Flash播放器下线后直播通过网页推流的问题。
Unity游戏框架也支持了WebRTC SDK。SRS推出了开源的srs-unity对接实例,支持和Unity的对接,可以实现游戏直播、游戏通话、VR音视频等场景,降低了Unity开发者使用音视频的门槛。同时腾讯云TRTC也支持WHIP协议接入,可以平滑迁移到云服务。
腾讯云在SRS 5.0完善了SRT协议栈,也优化了SRT转WebRTC的链路,除了RTMP转WebRTC之外,还提供了SRT转WebRTC的路径。另外,腾讯云也贡献了WebRTC over TCP协议的实现,在某些网络下无法使用UDP时,可以回退到TCP协议传输。
SRS定位为中小规模WebRTC集群,腾讯云TRTC主要提供大规模的RTC云服务能力,比如WebRTC百万人大房间、跨地域级联和传输、弱网抗性、节点故障迁移和热重启等。TRTC在SRS的集群方案讨论中,也贡献了宝贵的经验。
特别剧透:TRTC已经在和SRS深入探讨将TRTC在行业领先的的弱网抗性算法、针对多场景的适配以及弱网识别与快速适应等能力,从SRS 6.0开始逐步落地到SRS的传输算法中,反馈开源社区造福广大的开发者。
SRS低延迟直播
低延迟直播,一般通过RTMP转HTTP-FLV或者RTMP转WebRTC实现,可以将延迟降低到秒级别。HTTP-FLV在国内应用广泛,WebRTC延迟更低但适配性不如FLV。
腾讯云在SRS支持WebRTC和RTMP转换中是最初的贡献者,后续也贡献了组帧等逻辑,解决了WebRTC转RTMP中的不少问题。
此外,SRT在低延迟直播场景中应用广泛,比如低延迟导播可以做到300到500ms延迟,可以选择FFmpeg/OBS/vMix推SRT流到SRS服务器,然后使用ffplay/vMix拉流或用WebRTC网页观看。
同时腾讯云的云服务和开源对齐,在业务规模扩大时可以平滑迁移到腾讯云快直播,支持更大规模的低延迟直播服务。
SRS与H.265
SRS 6.0支持了H.265。H.265相比H.264可以节省50%带宽。H.265在8K或VR场景下优势明显,H.264无法支持8K高分辨率。
H.265开源全链路逐步完善,Chrome 105已经支持H.265播放,可以使用FFmpeg推SRT流到SRS服务器,将SRT转成HTTP-TS后,直接使用VLC/ffplay或Chrome/mpegts.js播放直播流。
SRS还支持了开源的WordPress SrsPlayer插件以及GB28181安防协议,还有FLV/MP4文件录制,都支持了H.265编解码。
腾讯云在H.265方向,对开源社区贡献也很多,比如FFmpeg H.265移动端硬件编解码加速、透明视频编解码,参与了SRS支持H.265的多个Pull Requests的Codec Review。腾讯云音视频的云服务也支持H.265,可以支持开发者从开源到云服务的无缝切换。
云SRS
针对非音视频的开发者,SRS推出了开源的云SRS,基于鼠标操作就可以搭建出开箱即用的视频云,支持私人直播间、无人直播、多平台推流、低延迟直播、录制等场景。
云SRS是一个开源音视频方案,除了SRS,还使用了FFmpeg、Nginx和Redis等开源产品,是一个开箱即用的单机视频云。
云SRS提供了宝塔插件安装方式,Docker镜像安装,另外,腾讯云Lighthouse提供了云SRS的镜像,一键安装云SRS,让用户使用的门槛更低,计费更简单,受到了开发者的一致好评。
云SRS支持录制,可以将直播流录制为本地文件,针对本地磁盘有限的情况,云SRS支持录制到腾讯云COS和腾讯云点播系统,不用担忧磁盘会写满。
腾讯云和云SRS社区密切配合,实现了多个应用场景,未来还会不断上架新的应用场景。
SRS可观测性
SRS 5.0支持了官方的Prometheus Exporter,云原生强大的可观测性让SRS变成了一个可运维的服务。这点在问题排查中已经发挥了重要的作用。
另外,SRS 5.0也支持了腾讯云APM对接,这点作为彩蛋大家可以自己摸索一下。
腾讯云音视频与SRS社区
SRS的10位TOC(核心维护者)中,腾讯云占据2席,在Codec Review、技术Roadmap等上发挥了很大的作用。腾讯云贡献了SRS 5.0的核心功能之一SRT协程化改造,让SRT具备完善的功能,包括回调和API,改进了底层的SRT IO机制和SRS的协程框架融合,提高了SRT的效率和稳定性,改进了易用性。腾讯云Lighthouse推出了云SRS镜像,一键安装和设置SRS,面向鼠标编程,让更多甚至没有音视频知识的朋友和行业,也可以用音视频赋能自己的业务,在媒体内容制作、自媒体多平台推流、无人直播等领域显著降低了门槛。
在SRS海外社区的建设中,腾讯云拓展了SRS WordPress插件,Unity WebRTC对接等场景,解决了SRT HEVC 8K直播问题,得到了海外社区开发者的众多好评。NextArch基金会组织了香港开源会议,SRS分享了社区建设的经验,扩大了社区的影响力。
如果您对SRS开源项目或我们的产品感兴趣,欢迎扫描下方二维码添加音视频小姐姐微信,与我们的技术团队深入沟通交流。
腾讯云音视频在音视频领域已有超过21年的技术积累,持续支持国内90%的音视频客户实现云上创新,独家具备RT-ONE™全球网络,在此基础上,构建了业界最完整的 PaaS 产品家族,并通过腾讯云视立方 RT-Cube™ 提供All in One 的终端SDK,助力客户一键获取众多腾讯云音视频能力。腾讯云音视频为全真互联时代,提供坚实的数字化助力。