ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

SRS 开源之夏(GSoC 2022)学生贡献指南:8 个导师项目与参与全流程 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/srsSRS 是一个简单、高性能、实时视频服务器支持 RTMP、WebRTC、HLS、HTTP-FLV、SRT 等主流直播与低延迟传输协议其 C 核心代码位于 trunk/src。本文以 SRS 官方发布的 GSoCGoogle Summer of Code2022 学生招募文档为核心完整介绍学生参与 SRS 社区贡献的入门路径、资格任务Qualification Task要求、开发与提交流程并对当年开放的 8 个导师项目逐一展开包括项目目标、所需技能、工作量评估、难度分级与资格任务同时结合仓库内真实源码与配置验证这些项目在 SRS 中的落地点。读完本文你将掌握如何以学生身份加入 SRS 开源社区、如何完成一个合格补丁并进入导师项目也能对 Prometheus 监控、YAML 配置解析、RISC 适配、DASH、LLHLS、异步 DNS、RIST 推流、官网文档重构等技术方向在 SRS 中的实现现状建立清晰的认知。一、GSoC 项目背景与 SRS 简介GSoCGoogle 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文档对学生提出了四条循序渐进的入门建议了解 SRS加入 SRS 的 Discord 社区频道#general浏览代码库并熟悉开发工作流遇到问题可以随时提问如果知道答案也鼓励帮助其他学生答疑。SRS 的总体架构与功能概览可参考仓库内的 srs-overview.md。选择项目本文第三部分列出了 8 个带导师Mentored的项目以及可能需要自行联系导师的项目想法。导师项目定义清晰、已有导师自愿报名学生也可以提出自己的项目创意前提是更贴合自身兴趣与技能水平。如果项目描述不清楚应直接联系对应导师或在 Discord#general频道咨询。联系我们确定项目后要与社区沟通、告知导师尤其是打算做某个资格任务时要让对应导师知道以避免与其他学生重复劳动每个学生应选择不同的资格任务。提交申请务必在 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 管理员Winlinwinlinvipgmail.com、Devindevinossrs.io、LiuQilqchinaffmpeg.org针对某个具体项目的问题也可以直接联系该项目页面上列出的导师。三、8 个导师项目详解Mentored Project Ideas以下项目均已定义明确且至少有一位可用导师。文档建议如果你是 SRS 新手、多媒体经验相对较少优先从这些导师项目中选择而不是自拟项目。项目 1支持 Prometheus API项目属性内容项目名称SRS 支持 Prometheus API项目描述Prometheus 是系统监控领域的常见组件支持 Prometheus API 后监控系统就能以图表形式展示 SRS 服务的相关属性以及音视频帧率、码率等信息导师Haibo Chennmgchenhaibofoxmail.com备选导师Junqin Zhangchundonglinlin163.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覆盖listenexporter 指标服务的 HTTP 监听端口默认9972Prometheus 官方默认端口分配表中该端口即为 SRS 保留可用SRS_EXPORTER_LISTEN覆盖label用于给集群服务器分类的标签默认空可用SRS_EXPORTER_LABEL覆盖tag用于给集群服务器分类的标签默认空可用SRS_EXPORTER_TAG覆盖。这些配置的解析逻辑位于 srs_app_config.cppSrsConfig::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 Zhangchundonglinlin163.com备选导师Haibo Chennmgchenhaibofoxmail.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 文本到指令树的转换。项目 3CPU 适配RISC 平台移植项目属性内容项目名称SRS 移植到 RISC 平台CPU 适配项目描述SRS 底层使用协程 IO 库目前已适配 Intel、ARM 等多个平台随着 RISC 的逐步发展支持 RISC 可进一步增强 SRS 的多平台支持导师Winlinwinlinvipgmail.com备选导师Zhihong Xiaohondaxiaotencent.com、Feng Yiyifeng1983gmail.com所需技能熟悉 RISC 平台汇编指令集熟悉计算机程序执行原理预计工作量350 小时难度进阶Advanced预期结果能在 RISC 平台运行 SRS并正常运行 4.0 release 的全部功能资格任务实现 st-thread 在 RISC 平台上的栈保存、恢复逻辑仓库落地点验证SRS 的协程底层是 state-threadsST仓库内的trunk/3rdparty/st-srs目录存放了 ST 库源码其中 md_linux.S、md_darwin.S、md_cygwin64.S 等汇编文件正是不同架构/系统下上下文切换栈保存与恢复的实现。资格任务要求的st-thread 栈保存、恢复逻辑就是在这些汇编文件中新增 RISC 指令集对应的上下文切换实现。从源码结构看ST 库通过common.h、sched.c等文件管理线程调度汇编层只负责最底层的寄存器与栈帧操作这是该项目最核心也最需要谨慎的部分。项目 4DASHSegmentTemplate Time 模式项目属性内容项目名称DASH 支持 SegmentTemplate Time 模式项目描述当前 SRS 的 DASH 仅支持 SegmentTemplate 的 Number 模式而主流播放器更推荐 Time 模式导师Zhihong Xiaohondaxiaotencent.com备选导师Winlinwinlinvipgmail.com、Steven Liulqchinaffmpeg.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分片时长秒默认30dash_update_periodMPD 更新周期秒默认150dash_timeshift时移缓冲区深度秒默认300dash_pathDASH 文件的输出根目录默认./objs/nginx/htmldash_mpd_fileMPD 文件路径模板支持[vhost]、[app]、[stream]变量默认[app]/[stream].mpddash_window_sizeDASH 窗口大小秒默认5dash_cleanup是否清理过期分片文件默认ondash_dispose无输入流时清理 DASH 文件的超时秒默认120。该项目的核心工作就是让 MPD 中的SegmentTemplate从当前仅支持的Number模式扩展出Time模式从而更好地兼容 dash.js、VLC、ffplay 等主流播放器。项目 5HLS 的 LLHLS 低延迟模式项目属性内容项目名称HLS 支持 LLHLS 模式项目描述HLS 是 Apple 提出的直播切片方案当前缺点是延迟较长LLHLS 可以大幅降低 HLS 的延迟导师Zhihong Xiaohondaxiaotencent.com备选导师Wei Shishiwei05kuaishou.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 Chenjinxue.cghalibaba-inc.com备选导师Zhihong Xiaohondaxiaotencent.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中的调度实现。项目 7RIST 推流协议支持项目属性内容项目名称RIST 推流协议支持项目描述RIST 是近年来出现的流媒体协议相比传统 RTP 推流有更好的特性如更好的传输控制等导师Zhihong Xiaohondaxiaotencent.com备选导师Xiaojun Zhou279686030qq.com所需技能熟悉 RIST 推流协议熟悉 C 编程预计工作量240 小时难度进阶Advanced预期结果能向 SRS 推送 RIST 流并转换为 RTMP/FLV/WebRTC 等资格任务完成 RIST 协议接收及向其他协议转封装技术背景RISTReliable 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 Meng542638787qq.com备选导师Xiaosong Daikunkkacogmail.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 的完整流程归纳为以下步骤加入社区进入 Discord#general频道浏览代码库与开发流程回答他人问题、提出自己的疑问选题优先从 8 个导师项目中选择新手建议选入门/中等难度项目也可联系导师获取更多想法或自拟项目认领资格任务联系导师确认资格任务避开其他学生正在做的任务资格任务通常要求在 SRS Bug Issue 上提交一个能通过评审并合入代码库的补丁尽早提交申请4 月 19 日前向 Google 提交 GSoC 申请即使资格任务尚未完成申请表可在截止前改进但截止后不可修改开发与提交入选后在第二个工作期结束前 2–3 周将实现以补丁形式提交评审按导师和社区意见迭代改进合入代码库最终成果需要被接受合入 SRS 代码库才算完整交付。五、写在最后如何评判与选择项目从工作量与难度分布看8 个项目的设计意图很清晰入门级BeginnerPrometheus API180 小时、YAML 配置解析175 小时、官网文档重构350 小时——适合 SRS 新手重点考察基本功与学习能力中等IntermediateDASH SegmentTemplate Time 模式280 小时——适合有一定流媒体基础的学生进阶AdvancedRISC CPU 适配350 小时、LLHLS350 小时、异步 DNS180 小时、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),仅供参考
返回列表