Skip to main content
版本:7.0 (Unstable) 🚧

Introduction

注意:SRS6属于开发版,不稳定。

SRS是一个开源的(MIT协议)简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpegOBSVLCWebRTC等客户端配合使用,提供流的接收和分发的能力,是一个典型的发布 (推流)和订阅(播放)服务器模型。 SRS支持互联网广泛应用的音视频协议转换,比如可以将RTMPSRT, 转成HLSHTTP-FLVWebRTC等协议。

SRS主要用于直播和WebRTC领域。在直播领域,SRS支持RTMP、HLS、SRT、MPEG-DASH和HTTP-FLV等典型协议。在WebRTC领域,SRS支持WebRTC、 WHIP和WHEP等协议。SRS可以为直播和WebRTC实现协议转换。作为媒体服务器,SRS通常与FFmpeg、OBS和WebRTC等其他开源项目一起工作。 Oryx作为一个开箱即用的媒体解决方案,整合了众多开源项目和工具,更多详细信息,请参考Oryx的 介绍

SRS提供了HTTP API开放接口,可以查询系统的状态和流状态。同时还支持HTTP Callback 支持回调能力,主动通知你的系统,并可以实现流的鉴权能力和业务定制(比如动态DVR)。SRS也支持官方的Prometheus Exporter 对接到云原生的监控系统,具备强大的可观测性。SRS支持会话级别可追踪日志,极大降低了系统维护成本。

若你是新接触音视频和流媒体的朋友,或者新接触SRS的朋友,推荐阅读快速起步学习路径。请花时间 阅读后续的文档,阅读和熟悉文档是社区的基本要求。如果你遇到问题,请先在FAQ中快速查找,然后在IssuesDiscussions中查找,几乎所有问题都可以在这里找到答案。

SRS使用ANSI C++ (98)开发,只使用了基本的C++能力,可以在Linux、Windows、macOS等多个平台运行,推荐使用Ubuntu 20+系统开发和调试, 我们提供的镜像ossrs/srs也是基于Ubuntu 20 (focal)构建的。

Note: 为了解决复杂的流媒体处理中的长连接和复杂的状态机问题,SRS使用了ST(State Threads) 协程技术(类似Goroutine),并在不断增强和维护ST的能力,支持了Linux、Windows、macOS 多个平台,X86_64、ARMv7、AARCH64、M1、RISCV、LOONGARCH和MIPS等多种CPU架构。

Features

功能一般是大家比较关注的点,丰富程度也是选择项目的重要原因, 详细的功能列表可以看 Features 。 我们列出了主要的功能的版本,以及相关的Issue和PR链接。

此外,在 里程碑 的详细描述中,也会介绍这个大的版本,所支持的功能。

Note: 如果希望看每个里程碑的Issues,则可以在 Milestones 中查看。

特别注意的是,尽管不多,但SRS还是会将某些功能设置为 Deprecated , 可以在页面中搜索Deprecated或者Removed。我们也会详细解释为何要移除这个功能。

如果你想知道我们正在做的功能,可以在 微信公众号 中,点菜单的最新版本,比如SRS 5.0或者SRS 6.0。 新的功能完成后,我们也会发布文章到微信公众号,请关注。

Who's using SRS?

SRS的用户遍布全球,欢迎大家在SRS应用案例中展示自己的SRS应用。

Governance

欢迎大家参与SRS的开发和维护,推荐从Contribute解决Issue和 提交PR开始, 所有贡献过的朋友都会在Contributors 中展示。

SRS是一个非商业化的开源社区,活跃的开发者都有自己的工作,会花自己的业余时间推动SRS的发展。

由于SRS整个体系是非常高效的,因此我们可以花很少的时间让SRS不断进步,交付功能丰富且稳定性很高的高质量产品,基于SRS定制也很容易。

我们是全球的开源社区,国内和海外都有开发者社区,我们欢迎开发者加入我们:

  • 巨大的成就感:你的代码可以影响全球的用户,改变音视频行业,并且随着SRS在各行各业的广泛应用,也改变了各行各业。
  • 扎实的技术进步:在这里可以和全球顶尖的音视频开发者交流,掌握高质量软件开发的能力,互相提升技术能力。

SRS目前使用了以下的技术和规则,保证项目的高质量和高效率:

  • 长时间的架构和方案探讨,对于大的功能和方案,需要得到长时间探讨,比如 HEVC/H.265 的支持,我们讨论了7年。
  • 仔细认真的CodeReview,每个PullRequest至少2个TOC和Developer通过,并且Actions全部通过,才能合并。
  • 完善的单元测试(500多个)、覆盖率(60%左右)、黑盒测试等,保持一年开发一年测试的充足测试时间。
  • 全流水线,每个PullRequest会有流水线,每次发布由流水线自动完成。

欢迎加入我们,具体请访问 Contribute 按要求提交PullRequest。

Milestone

SRS大概是两年发布一个大版本,一年时间开发,一年时间提升稳定性,详细请参考Milestone

如果你想在线上使用SRS,推荐使用稳定版本。如果你想用新功能,就用开发版本。

SRS的分支规则,是按版本的分支,比如:

  • develop SRS 6.0,开发分支,不稳定,但是新功能最多。
  • 5.0release SRS 5.0,目前已经稳定,具体要看分支的状态。
  • 4.0release SRS 4.0,目前是稳定分支,而且会越来越稳定。

具体分支是否稳定,要看Releases的标记,比如 SRS 4.0

  • 2022-06-11, Release v4.0-r0,这个是稳定的发布版本。
  • 2021-12-01, Release v4.0-b0,这个是相对比较稳定的beta版本,也就是公测版本。
  • 2021-11-15, Release v4.0.198,这个版本就是不稳定的开发版。

Note: 除了beta版本,还有alpha版本,比如v5.0-a0,是比beta更不稳定的内测版本。

Note:每个alpha、beta、release版本,都会对应具体的版本号,比如v5.0-a0,对应的就是v5.0.98

对于SRS来说,一般达到beta版本,就可以在线上使用了。

Strategy

SRS不做客户端,因为无论是FFmpeg,还是OBS,还是VLC,还是WebRTC,都是非常成熟和庞大的开源社区,我们和这些社区合作,使用这些社区的产品。

除了SRS服务器,我们还在做Oryx,还有WordPress插件等等,主要的目标还是根据不同行业,做出更简单的应用方式,包括:

  • Oryx Oryx(SRS Stack),是一个开箱即用的单机的视频云,里面有FFmpeg和SRS等,主要是方便不会命令行的用户,直接通过腾讯云镜像或者宝塔,鼠标操作,就可以把音视频的应用搭起来。
  • WordPress-Plugin-SrsPlayer 出版领域,比如个人博客、网站传媒等,方便用户可以使用音视频的能力。
  • srs-unity 游戏领域,对接Unity的WebRTC SDK,使用音视频的能力。

SRS还会在工具链上不断完善,开发者可能不用SRS,但可能用过SB压测工具:

  • srs-bench 音视频压测工具,包括RTMP/FLV/WebRTC/GB28181等,未来还会完善。
  • state-threads C的协程库,可以认为是C版本的Go,很小巧但很强大的服务器库,我们也会不断完善它。
  • tea 这是eBPF方向的探索,网络的弱网模拟,以及LB负载均衡。

通过不断完善音视频的工具链、解决方案、场景化的能力,让各行各业都可以应用音视频的能力。

Sponsors

SRS致力于构建一个非盈利性的开源项目和社区,我们对赞助SRS朋友提供专门的社区支持,请看Sponsor

音视频开发者,几乎必然碰到问题,估计大家比较习惯云厂商的贴身服务,来到开源社区就非常不习惯。

其实遇到问题不要慌张,大部分问题都是已经有的,可以在 FAQ 中找到答案,或者在文档 Docs 中找到答案。

也可以在 支持 中加微信群,和其他开发者交流,不过请遵守社区规范,否则也得不到支持的。

作为开发者,我们必须学会看文档,调查问题,然后再在社区中交流。

值得澄清的是,中国开发者的素质也越来越高了,深度开发者我们建议加付费星球,参考 Support

SRS没有商业化的计划,我们目前正在努力建设全球的活跃的开发者社区,开源的价值会越来越大,社区彼此的支持也会越来越多。

About Oryx

Oryx是一个基于Go、Reactjs、SRS、FFmpeg、WebRTC等的轻量级、开源的视频云解决方案。 详细请参考Oryx