☰
SRS 开源之夏(GSoC 2022)学生贡献指南:8 个导师项目与参与全流程
2026/10/12 11:36:40 网站建设 项目流程

SRS 开源之夏(GSoC 2022)学生贡献指南:8 个导师项目与参与全流程

【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs

SRS 是一个简单、高性能、实时视频服务器,支持 RTMP、WebRTC、HLS、HTTP-FLV、SRT 等主流直播与低延迟传输协议,其 C++ 核心代码位于 trunk/src。本文以 SRS 官方发布的 GSoC(Google Summer of Code)2022 学生招募文档为核心,完整介绍学生参与 SRS 社区贡献的入门路径、资格任务(Qualification Task)要求、开发与提交流程,并对当年开放的 8 个导师项目逐一展开:包括项目目标、所需技能、工作量评估、难度分级与资格任务,同时结合仓库内真实源码与配置,验证这些项目在 SRS 中的落地点。读完本文,你将掌握如何以学生身份加入 SRS 开源社区、如何完成一个合格补丁并进入导师项目,也能对 Prometheus 监控、YAML 配置解析、RISC 适配、DASH、LLHLS、异步 DNS、RIST 推流、官网文档重构等技术方向在 SRS 中的实现现状建立清晰的认知。

一、GSoC 项目背景与 SRS 简介

GSoC(Google Summer of Code)是 Google 发起的开源软件暑期编程项目,SRS 社区每年都会以导师身份参与,面向全球学生开放一系列定义良好的开发任务。本次文档对应的是GSoC 2022 周期,其关键时间节点为:

  • 申请截止:4 月 19 日前必须向 Google 提交申请(即使资格任务尚未完成也要先提交,申请可以在 4 月 19 日之前持续改进,但之后不可再修改);
  • 正式工作期:6 月 13 日开始,持续到 9 月结束;
  • 具体官方时间表以 GSoC 官方时间线为准,本文不再赘述。

SRS 官方对自身的一句话描述是:"SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT."。从当前仓库看,SRS 的功能面已远不止于此:trunk/conf目录下存放着 full.conf、dash.conf、srt.conf、gb28181.conf 等大量配置示例,覆盖 RTMP、WebRTC、HLS、HTTP-FLV、HTTP-TS、SRT、MPEG-DASH、GB28181 等协议,以及 H.264/H.265/AV1/VP9/AAC/Opus/G.711 等编解码支持。这为 GSoC 学生提供了非常广阔的选题空间。

二、给学生的基础入门信息(Getting Started)

文档对学生提出了四条循序渐进的入门建议:

  1. 了解 SRS:加入 SRS 的 Discord 社区(频道#general),浏览代码库并熟悉开发工作流;遇到问题可以随时提问,如果知道答案也鼓励帮助其他学生答疑。SRS 的总体架构与功能概览可参考仓库内的 srs-overview.md。
  2. 选择项目:本文第三部分列出了 8 个带导师(Mentored)的项目,以及可能需要自行联系导师的项目想法。导师项目定义清晰、已有导师自愿报名;学生也可以提出自己的项目创意,前提是更贴合自身兴趣与技能水平。如果项目描述不清楚,应直接联系对应导师,或在 Discord#general频道咨询。
  3. 联系我们:确定项目后要与社区沟通、告知导师,尤其是打算做某个资格任务时,要让对应导师知道,以避免与其他学生重复劳动(每个学生应选择不同的资格任务)。
  4. 提交申请:务必在 4 月 19 日截止前向 Google 提交申请。

重要提示:文档明确强调,虽然 GSoC 申请对 Google 官方发放津贴很重要,但SRS 导师不会仅凭 GSoC 申请表做决定。导师评判学生的依据是资格任务的完成情况,从中考察编码能力、工具学习能力和沟通能力等。因此,学生不必过度担心申请表是否完美,但必须严格遵守 GSoC 的申请规则(这关系到能否拿到 Google 的报酬)。

资格任务(Qualification Task)

被 SRS 录取的前提是完成一个小型资格任务,所有资格任务都包含向开发邮件列表发送补丁这一环节。SRS 的开发门槛不低,资格任务正是用来判断学生是否足够有动力、是否有能力按期交付的手段:

  • 资格任务通常写在各项目描述中,也可以联系对应导师获取,或参考 SRS 的 Bug Issue 寻找任务灵感;
  • 一般情况下,资格任务应包含向 SRS Bug Issue 提交一个通过评审并被合入 SRS 代码库的补丁;
  • 这类补丁往往需要多轮提交与评审迭代,所以第一版提交不要拖得太晚;
  • 提交前请避开其他学生正在做的资格任务。

开发与提交要求(Development)

一旦入选某个项目,学生不仅需要交付可运行的实现,还必须将工作成果提交合入 SRS 代码库。提交时机应在第二个工作期结束前至少 2–3 周,通过 Bug Issue 和 Discord 交由社区与导师评审;评审后大概率会被要求修改并重新提交改进版本。如果对实现方式无法达成共识,应听从导师的建议。为了产出高质量补丁,文档要求先阅读开发者文档(原文档指向官方 v5 开发文档,仓库内的skills/srs-develop技能目录提供了更贴近当前仓库的开发指引,例如 develop-code.md 介绍了代码开发规范,fix-a-bug.md 介绍了修复 Bug 的流程,可作为替代参考)。

联系方式

  • Discord:#general频道;
  • SRS GSoC 管理员:Winlin(winlinvip@gmail.com)、Devin(devin@ossrs.io)、LiuQi(lq@chinaffmpeg.org);
  • 针对某个具体项目的问题,也可以直接联系该项目页面上列出的导师。

三、8 个导师项目详解(Mentored Project Ideas)

以下项目均已定义明确且至少有一位可用导师。文档建议:如果你是 SRS 新手、多媒体经验相对较少,优先从这些导师项目中选择,而不是自拟项目。

项目 1:支持 Prometheus API

项目属性内容
项目名称SRS 支持 Prometheus API
项目描述Prometheus 是系统监控领域的常见组件,支持 Prometheus API 后,监控系统就能以图表形式展示 SRS 服务的相关属性,以及音视频帧率、码率等信息
导师Haibo Chen(nmgchenhaibo@foxmail.com)
备选导师Junqin Zhang(chundonglinlin@163.com)
所需技能熟悉 HTTP 协议,理解 HTTP 服务端-客户端交互过程
预计工作量180 小时
难度入门(Beginner)
预期结果使用 Prometheus client 能够访问并获取预期结果
资格任务完成 Prometheus API 的编写与测试

仓库落地点验证:该项目的成果在 SRS 中已作为exporter配置段落地。在 full.conf 中可以看到完整的 Prometheus exporter 配置:

exporter { # Whether exporter is enabled. # Overwrite by env SRS_EXPORTER_ENABLED # Default: off enabled off; # The http api listen port for exporter metrics. # Overwrite by env SRS_EXPORTER_LISTEN # Default: 9972 listen 9972; # The logging label to category the cluster servers. # Overwrite by env SRS_EXPORTER_LABEL label cn-beijing; # The logging tag to category the cluster servers. # Overwrite by env SRS_EXPORTER_TAG tag cn-edge; }

各参数含义与默认值如下:

  • enabled:是否启用 exporter,默认off,可用环境变量SRS_EXPORTER_ENABLED覆盖;
  • listen:exporter 指标服务的 HTTP 监听端口,默认9972(Prometheus 官方默认端口分配表中该端口即为 SRS 保留),可用SRS_EXPORTER_LISTEN覆盖;
  • label:用于给集群服务器分类的标签,默认空,可用SRS_EXPORTER_LABEL覆盖;
  • tag:用于给集群服务器分类的标签,默认空,可用SRS_EXPORTER_TAG覆盖。

这些配置的解析逻辑位于 srs_app_config.cpp,SrsConfig::get_exporter_enabled/listen/label/tag四个方法分别对应读取上述配置,且均支持SRS_OVERWRITE_BY_ENV_*环境变量覆盖机制。服务端监听器在 srs_app_server.cpp 中创建:

// Create exporter server listener. if (config_->get_exporter_enabled()) { exporter_listener_->set_endpoint(config_->get_exporter_listen()); exporter_listener_->set_label("Exporter-Server"); if ((err = exporter_listener_->listen()) != srs_success) { return srs_error_wrap(err, "exporter server listen"); } ... }

指标数据的聚合则由统计模块完成,例如 srs_app_http_api.cpp 中调用stat_->dumps_metrics(send_bytes, recv_bytes, nstreams, nclients, total_nclients, nerrs)来输出发送字节、接收字节、流数、客户端数等指标。仓库还提供了一键启用的 prometheus.conf,其中exporter段直接开启:

exporter { enabled on; listen 9972; label cn-beijing; tag cn-edge; }

这意味着学生完成该项目后,可以./objs/srs -c conf/prometheus.conf启动 SRS,然后在http://localhost:9972/metrics拉取 Prometheus 格式的监控指标。

项目 2:配置文件 YAML 解析

项目属性内容
项目名称配置文件支持 YAML 解析
项目描述SRS 当前配置文件是私有格式(类似 nginx),而 YAML 是常见的配置文件格式,熟悉其用法的人更多
导师Junqin Zhang(chundonglinlin@163.com)
备选导师Haibo Chen(nmgchenhaibo@foxmail.com)
所需技能熟悉 YAML 文件格式及其解析方法,熟练使用 C++ 编程
预计工作量175 小时
难度入门(Beginner)
预期结果SRS 现有配置文件可以转换为 YAML 解析并执行
资格任务实现 YAML 文件的解析

仓库现状验证:截至当前仓库,SRS 的配置文件仍为类 nginx 的私有指令格式。以 full.conf 为例,配置由listen、vhost { ... }、exporter { ... }等指令块组成,解析入口由 srs_app_config.cpp 中的SrsConfig类实现,每个配置项对应一个get_xxx()方法。这一项目正是把该私有格式的解析扩展为兼容 YAML 输入,属于典型的入门级 C++ 工程任务——学生需要先理解SrsConfig的指令树(SrsConfDirective)模型,再实现 YAML 文本到指令树的转换。

项目 3:CPU 适配(RISC 平台移植)

项目属性内容
项目名称SRS 移植到 RISC 平台,CPU 适配
项目描述SRS 底层使用协程 IO 库,目前已适配 Intel、ARM 等多个平台;随着 RISC 的逐步发展,支持 RISC 可进一步增强 SRS 的多平台支持
导师Winlin(winlinvip@gmail.com)
备选导师Zhihong Xiao(hondaxiao@tencent.com)、Feng Yi(yifeng1983@gmail.com)
所需技能熟悉 RISC 平台汇编指令集,熟悉计算机程序执行原理
预计工作量350 小时
难度进阶(Advanced)
预期结果能在 RISC 平台运行 SRS,并正常运行 4.0 release 的全部功能
资格任务实现 st-thread 在 RISC 平台上的栈保存、恢复逻辑

仓库落地点验证:SRS 的协程底层是 state-threads(ST),仓库内的trunk/3rdparty/st-srs目录存放了 ST 库源码,其中 md_linux.S、md_darwin.S、md_cygwin64.S 等汇编文件正是不同架构/系统下上下文切换(栈保存与恢复)的实现。资格任务要求的"st-thread 栈保存、恢复逻辑",就是在这些汇编文件中新增 RISC 指令集对应的上下文切换实现。从源码结构看,ST 库通过common.h、sched.c等文件管理线程调度,汇编层只负责最底层的寄存器与栈帧操作,这是该项目最核心也最需要谨慎的部分。

项目 4:DASH(SegmentTemplate Time 模式)

项目属性内容
项目名称DASH 支持 SegmentTemplate Time 模式
项目描述当前 SRS 的 DASH 仅支持 SegmentTemplate 的 Number 模式,而主流播放器更推荐 Time 模式
导师Zhihong Xiao(hondaxiao@tencent.com)
备选导师Winlin(winlinvip@gmail.com)、Steven Liu(lq@chinaffmpeg.org)
所需技能熟悉 DASH 协议,理解视频封装,熟悉使用 C++ 编程
预计工作量280 小时
难度中等(Intermediate)
预期结果能使用 dash.js、VLC、ffplay 等常见播放器进行播放
资格任务实现 DASH SegmentTemplate Time 模式

仓库落地点验证:SRS 的 DASH 功能由 srs_app_dash.cpp 与 srs_app_dash.hpp 实现,对应的 vhost 配置模板在 full.conf 的vhost dash.srs.com段,关键参数包括:

  • enabled:是否开启 DASH(默认off,用SRS_VHOST_DASH_ENABLED覆盖);
  • dash_fragment:分片时长(秒),默认30;
  • dash_update_period:MPD 更新周期(秒),默认150;
  • dash_timeshift:时移缓冲区深度(秒),默认300;
  • dash_path:DASH 文件的输出根目录,默认./objs/nginx/html;
  • dash_mpd_file:MPD 文件路径模板,支持[vhost]、[app]、[stream]变量,默认[app]/[stream].mpd;
  • dash_window_size:DASH 窗口大小(秒),默认5;
  • dash_cleanup:是否清理过期分片文件,默认on;
  • dash_dispose:无输入流时清理 DASH 文件的超时(秒),默认120。

该项目的核心工作就是让 MPD 中的SegmentTemplate从当前仅支持的Number模式扩展出Time模式,从而更好地兼容 dash.js、VLC、ffplay 等主流播放器。

项目 5:HLS 的 LLHLS 低延迟模式

项目属性内容
项目名称HLS 支持 LLHLS 模式
项目描述HLS 是 Apple 提出的直播切片方案,当前缺点是延迟较长;LLHLS 可以大幅降低 HLS 的延迟
导师Zhihong Xiao(hondaxiao@tencent.com)
备选导师Wei Shi(shiwei05@kuaishou.com)
所需技能熟悉 HLS、LLHLS,良好的标准文档阅读能力,熟悉 C++ 编程
预计工作量350 小时
难度进阶(Advanced)
预期结果能在支持 LLHLS 的播放器上播放,且延迟达到预期
资格任务LLHLS 编码、封装、manifest 文件生成

仓库落地点验证:SRS 的 HLS 功能位于 srs_app_hls.cpp 与 srs_app_hls.hpp,配置模板在 full.conf 的vhost hls.srs.com段,其中hls_fragment(分片时长,默认 10 秒)直接决定切片粒度,hls_use_fmp4可选择使用 fmp4 容器,hls_fragments_per_key(默认 5)控制加密场景下的密钥切换频率。LLHLS 的核心目标就是通过更精细的分片与 manifest 更新策略,把 HLS 从秒级延迟压缩到接近低延迟直播的水平。实现 LLHLS 需要深入理解 srs_app_hls.cpp 中的切片与 m3u8 生成链路,这正是资格任务"LLHLS 编码、封装、manifest 文件生成"要考察的能力。

项目 6:异步 DNS 解析

项目属性内容
项目名称异步 DNS 解析
项目描述SRS 使用的 IO 是协程 IO,但当前 DNS 解析仍是同步解析;异步 DNS 解析能更好地利用协程资源,避免 DNS 阻塞影响其他 IO
导师Guanghua Chen(jinxue.cgh@alibaba-inc.com)
备选导师Zhihong Xiao(hondaxiao@tencent.com)
所需技能熟悉 DNS 解析过程,熟悉 C++ 编程
预计工作量180 小时
难度进阶(Advanced)
预期结果能够执行异步 DNS 解析并通过测试
资格任务完成 DNS 异步解析与协程封装

技术背景:SRS 的网络 IO 全部构建在 state-threads 协程之上,同步 DNS 解析(即调用系统getaddrinfo)会阻塞整个线程,导致同一线程上的其他协程 IO 被卡住。该项目要求把 DNS 解析封装进协程模型,使其在等待 DNS 响应时让出 CPU,从而不阻塞其他连接。协程基础可参考 srs_app_st.cpp 与trunk/3rdparty/st-srs中的调度实现。

项目 7:RIST 推流协议支持

项目属性内容
项目名称RIST 推流协议支持
项目描述RIST 是近年来出现的流媒体协议,相比传统 RTP 推流有更好的特性,如更好的传输控制等
导师Zhihong Xiao(hondaxiao@tencent.com)
备选导师Xiaojun Zhou(279686030@qq.com)
所需技能熟悉 RIST 推流协议,熟悉 C++ 编程
预计工作量240 小时
难度进阶(Advanced)
预期结果能向 SRS 推送 RIST 流,并转换为 RTMP/FLV/WebRTC 等
资格任务完成 RIST 协议接收及向其他协议转封装

技术背景:RIST(Reliable Internet Stream Transport)面向互联网传输设计了丢包重传与拥塞控制机制,可靠性优于裸 RTP。该项目需要在 SRS 中新增 RIST 接收端,并将接收到的媒体流接入 SRS 现有的统一流转发/转封装链路(RTMP → FLV / WebRTC / HLS / DASH 等)。从仓库结构看,类似的"协议接入 + 转封装"模式已有先例:例如 srs_app_rtsp_conn.cpp、srs_app_srt_conn.cpp 分别完成了 RTSP、SRT 的接入,RIST 项目可复用这套"新协议连接处理器 + 复用器"的架构模式。

项目 8:官网文档内容重构

项目属性内容
项目名称官网文档内容重构
项目描述梳理 SRS 现有的 wikis、文章、视频等资源,并整合到官方网站
导师Xiaowei Meng(542638787@qq.com)
备选导师Xiaosong Dai(kunkkaco@gmail.com)
所需技能熟悉 JavaScript,熟练使用 SRS 服务器,英语良好
预计工作量350 小时
难度入门(Beginner)
预期结果通过阅读文档能轻松上手 SRS
资格任务完成官网文档、案例、博客以及社区各子模块的展示

仓库落地点验证:SRS 的文档体系在仓库中有非常丰富的素材:trunk/3rdparty/srs-docs/doc/下存放着 54 篇 Markdown 文档,trunk/3rdparty/srs-docs/blog/下存放着 35 篇博客文章(本文档即其中之一),trunk/3rdparty/srs-docs/pages/还有 3 个页面文件。此外skills/目录下的internal-docs-for-srs(含 cpp-docs 等 34 篇 C++ 文档)、srs-develop、srs-support等技能文档,都是该重构项目可直接整合的内容源。这个项目门槛最低但工作量不小,适合对 JavaScript、文档工程和 SRS 使用都比较熟悉的学生。

四、参与 SRS GSoC 的完整行动清单

综合文档内容,可以将学生参与 SRS GSoC 2022 的完整流程归纳为以下步骤:

  1. 加入社区:进入 Discord#general频道,浏览代码库与开发流程,回答他人问题、提出自己的疑问;
  2. 选题:优先从 8 个导师项目中选择(新手建议选入门/中等难度项目);也可联系导师获取更多想法或自拟项目;
  3. 认领资格任务:联系导师确认资格任务,避开其他学生正在做的任务;资格任务通常要求在 SRS Bug Issue 上提交一个能通过评审并合入代码库的补丁;
  4. 尽早提交申请:4 月 19 日前向 Google 提交 GSoC 申请,即使资格任务尚未完成(申请表可在截止前改进,但截止后不可修改);
  5. 开发与提交:入选后,在第二个工作期结束前 2–3 周将实现以补丁形式提交评审,按导师和社区意见迭代改进;
  6. 合入代码库:最终成果需要被接受合入 SRS 代码库,才算完整交付。

五、写在最后:如何评判与选择项目

从工作量与难度分布看,8 个项目的设计意图很清晰:

  • 入门级(Beginner):Prometheus API(180 小时)、YAML 配置解析(175 小时)、官网文档重构(350 小时)——适合 SRS 新手,重点考察基本功与学习能力;
  • 中等(Intermediate):DASH SegmentTemplate Time 模式(280 小时)——适合有一定流媒体基础的学生;
  • 进阶(Advanced):RISC CPU 适配(350 小时)、LLHLS(350 小时)、异步 DNS(180 小时)、RIST 推流(240 小时)——需要扎实的底层知识与协议理解。

SRS 社区对学生的核心要求始终一致:不只是写代码,而是要能产出高质量、可合入、经得起多轮评审的补丁。因此,无论选择哪个项目,认真完成资格任务、熟悉 SRS 的配置体系(如 full.conf)与核心模块(如 srs_app_config.cpp、srs_app_hls.cpp、srs_app_dash.cpp)的代码风格,都是成功入选并完成项目的关键。

【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询