腾讯云音视频与SRS开源生态

自由与开源软件的理念,从不解、争议、接受到如今如火如荼,经历了长期的历程。国内开源软件起步较晚,但进展迅速。腾讯经过几年的开源协同运动,也取得了不少成绩。其中,腾讯云音视频在FFmpeg、SRS等重要多媒体开源社区的贡献,颇具代表性。

SRS是开源实时视频服务器、全球流服务器中Star最多也最活跃的开源项目,主要应用在直播、WebRTC、安防和交通等领域,支持常用的流媒体协议和转换,以好用易用赢得了全球开发者的良好口碑。开箱即用的云SRS开源音视频方案赋能众多行业创造了新的可能。同时,SRS由工信部木兰开源社区孵化,是中国主导的开源项目。目前,腾讯云音视频团队是SRS主力维护团队之一,为SRS项目贡献了不少核心功能。图片

SRS流媒体服务器

SRS的作用是接收流、协议转换和分发流,支持多路流和云原生运维,以及完善的工具链。

图片SRS的核心能力包括:

  • 配置能力:支持NGINX格式的conf文件配置、Reload以及K8s ConfigMap的变更侦听。SRS 5.0支持了环境变量配置,更方便云原生环境部署。
  • OpenAPI开放接口:支持HTTP API和Callback回调,支持各种协议的统计包括WebRTC和HLS。SRS 5.0支持了Prometheus Exporter,云原生的可观测系统。
  • Cluster集群:直播支持Origin源站集群和Edge边缘集群。SRS 6.0正在开发Proxy集群,支持WebRTC和SRT等协议在K8s中更方便的部署。
  • 日志和错误:基于Context的日志,是SRS轻量线程技术的优势,可以快速找到某个连接的上下文日志。带堆栈的错误让问题排查更方便。SRS 5.0在崩溃时会将堆栈打印到日志。
  • 工具链:UTest大概560个,覆盖率60%左右,全流水线测试和发布,基于FFprobe的黑盒测试,SB(srs-bench)直播和RTC压测工具链。SRS 5.0支持了Asan,SRS 6.0正在开发tea使用eBPF做网络模拟和负载均衡。
  • 核心协议:支持RTMP、HLS、HTTP-FLV、HTTP-TS、HLS、WebRTC、SRT、MPEG-DASH、GB28181等协议以及互相转换。SRS 5.0支持了WHIP和WordPress/Unity WebRTC对接。
  • 编码:音频支持AAC和Opus,以及音频转码;视频支持H.264和AV1。SRS 5.0全面支持了HEVC以及8K直播。
  • 平台:支持Linux、macOS、Windows等常见OS,支持x86、armv7、aarch64、m1、RISCV、loongarch、MIPS等常见CPU,并且适配各种常见的国产信创系统。
  • 性能和延迟:单核支持3K直播和1K RTC流,可用集群架构发挥多核能力。SRS 5.0改进了底层,具备多线程能力(目前依然是单进程)。RTMP或FLV的延迟在3秒左右,HLS或DASH在5秒左右,SRT和GB在500ms左右,WebRTC延迟在150ms左右。

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等产品中。同时,特别针对跨区远程传输的延迟问题,腾讯云媒体传输做了以下优化:

  • 连接机制优化:支持了0RTT/1RTT,优化连接耗时
  • 重传机制优化:通过对参数优化和乱序度控制等策略,优化重传率。
  • 拥塞控制优化:在TMIO上支持BBR、GCC等拥塞控制算法,适应不同网络场景的需求。
  • 多链路传输,支持带宽聚合模式:原生SRT只有backup,broadcast两种多链路传输模式,我们针对直播场景增加了auto自适应模式,能够做到将多个网卡的带宽聚合后进行直播,并智能动态选择链路。

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分享了社区建设的经验,扩大了社区的影响力。

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

(0)

相关推荐

发表回复

登录后才能评论