Skip to main content

GSoC

· 8 min read

Project Description​

SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT.

Information for Students​

Getting Started​

  1. Get to know SRS. If you are a student interested in contributing to SRS, it is recommended to start by join to the SRS Discord and exploring both the codebase and the development workflow. Feel free to contact us if you have any questions. Also do not hesitate to answer questions from other students on our Discord channel if you know the answer to something.
  2. Find a project. Listed on this page are mentored and un-mentored projects. Mentored projects are well-defined and mentor(s) have already volunteered. Un-mentored projects are additional ideas you may want to consider, but you will have to contact us to find a mentor. You can also propose your own project, if you can think of one that better fits your interest and skill level. If a project description is unclear or you have any questions, please get in touch with its mentor and/or join our Discord channel at #general.
  3. Contact us. If you decide on a project, get in touch with the community and let us know. If you want to work on a qualification task, let the respective mentor know so we can avoid duplicated efforts.
  4. Apply. Students should apply definitely before deadline on April 19th. The "work" period begins on June 13th and ends in September. Take a look at ​GSoC timeline for additional information. Note, make sure you apply to Google before April 19th, even if you have not yet finished your qualification task. Please apply as soon as possible: Applications can be improved until the 19th but not afterwards!

Note: A friendly reminder that while the application to GSoC is important for you and GSoC, SRS mentors will not base their decision solely on the GSoC application. We will judge applicants based on their qualification tasks to understand their abilities in coding, learning the tools, communication skills etc. So please do not worry about your application being perfect for us. Although it is very important to follow GSoC's application rules so they can pay you.

Qualification Tasks​

In order to get accepted you have to complete a small qualification task which in all cases include sending a patch to the development mailing list. SRS development can be quite challenging and the qualification task helps us figure out whether you are motivated enough and have the potential to deliver successfully.

The qualification tasks are usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. You can also browse the SRS Bug Issue for qualification task ideas. In general qualification tasks should include submitting a patch to the SRS Bug Issue which passes review and is accepted into the SRS codebase. It will be common for such patches to need multiple iterations of submissions and reviews, so don't wait too long with the first submission! Note, please avoid picking a qualification task which another student is already working on, each student should work on a different qualification task.

Development​

If you are selected for a particular project then you are not only expected to present a working implementation but you should also submit your work for inclusion for the SRS codebase. This should be done at least 2-3 weeks before the end of the second work period by sending patches to the SRS Bug Issue&Discord where the SRS community and your mentor will review your work. You will likely be asked to make some changes and resend improved versions. If you feel that no consensus is reached about how something should be done then follow the advice of your mentor.

In order to create good quality patches make sure to read the Developer Documentation.

Contacting SRS​

If you have questions or comments feel free to contact us via our mail, Discord one of the SRS GSoC admins:

  • Discord: #general
  • SRS GSoC Admins: Winlin (winlin in #general on Discord, winlinvip at gmail dot com ), Devin (Devin in #general on Discord, devin at ossrs dot io), LiuQi (Steven in #general on Discord, lq at chinaffmpeg dot org) You may also contact a mentor directly if you have questions specifically related to one of the projects listed on this page.

Mentored Project Ideas​

This section lists well-defined projects that have one or more available mentors. If you are new to SRS, and have relatively little experience with multimedia, you should favor one of these ideas rather than propose your own. Contact the respective mentor(s) to get more information about the project and the requested qualification task.

1. Support Prometheus API​

Name of projectSRS support Prometheus API
Project DescriptionPrometheus is a common component of system monitoring, support Prometheus API, so that the monitoring system can display SRS service related properties in the form of charts, or audio and video frame rate, bit rate and other information.
MentorHaibo Chen(nmgchenhaibo@foxmail.com)
Backup MentorJunqin Zhang(chundonglinlin@163.com)
Skills neededFamiliar with HTTP protocol, understand HTTP server-client interaction process.
Expected size of project180 hours
DifficultyBeginner
Expected resultsUse Prometheus client to be able to access and get the expected results.
Qualification TaskComplete the Prometheus API writing and testing.

2. Configuration file yaml parsing​

Name of projectConfiguration file support yaml parsing
Project DescriptionSRS current configuration file format is a private format, similar to nginx, yaml is a common way of configuration file, there are more people familiar with the use of.
MentorJunqin Zhang(chundonglinlin@163.com)
Backup MentorHaibo Chen(nmgchenhaibo@foxmail.com)
Skills neededFamiliar with yaml file format and its parsing method, skilled in C++ programming.
Expected size of project175 hours
DifficultyBeginner
Expected resultsSRS existing configuration file can be converted to yaml parsing and execution.
Qualification TaskImplement the parsing of yaml files.

3. CPU adaptation​

Name of projectSRS ported to RISC platform, CPU adaptation
Project DescriptionSRS underlying use of IO libraries, currently has been adapted to Intel, ARM and many other platforms. With the gradual development of RISC, the support for RISC can further enhance the support of SRS for multiple platforms.
MentorWinlin(winlinvip@gmail.com)
Backup MentorZhihong Xiao(hondaxiao@tencent.com), Feng Yi(yifeng1983@gmail.com)
Skills neededFamiliar with RISC platform assembly instruction set, familiar with the principle of computer program execution.
Expected size of project350 hours
DifficultyAdvanced
Expected resultsBe able to run SRS on the RIST platform, and run all the functions of 4.0release normally.
Qualification TaskImplement st-thread stack saving on RISC platform, restore logic.

4. DASH​

Name of projectDASH support SegmentTemplate Time mode
Project DescriptionThe current SRS DASH only supports SegmentTemplate's Number mode, while the mainstream players are more recommended Time mode.
MentorZhihong Xiao(hondaxiao@tencent.com)
Backup MentorWinlin(winlinvip@gmail.com), Steven Liu(lq@chinaffmpeg.org)
Skills neededFamiliar with DASH protocol, understand video to encapsulation, familiar with using C++ programming.
Expected size of project280 hours
DifficultyIntermediate
Expected resultsBe able to use dash.js, VLC, ffplay and other common players for playback.
Qualification TaskImplement DASH SegmentTemplate Time mode.

5. HLS LLHLS mode​

Name of projectHLS support LLHLS mode
Project DescriptionHLS is a live file slicing method proposed by APPLE, the current drawback is the long delay, LLHLS can greatly reduce the delay of HLS.
MentorZhihong Xiao(hondaxiao@tencent.com)
Backup MentorWei Shi(shiwei05@kuaishou.com)
Skills neededFamiliar with HLS, LLHLS, good ability to read standard documents, familiar with programming in C++.
Expected size of project350 hours
DifficultyAdvanced
Expected resultsBe able to play on a player that supports LLHLS and achieve latency within expectations.
Qualification TaskLLHLS coding, encapsulation, manifest file generation.

6. Asynchronous DNS Resolution​

Name of projectAsynchronous DNS Resolution
Project DescriptionThe IO used by SRS is coroutine IO, but the current DNS resolution is still synchronous resolution. Asynchronous DNS resolution can make better use of coroutine resources and avoid affecting other IO due to DNS blocking.
MentorGuanghua Chen(jinxue.cgh@alibaba-inc.com)
Backup MentorZhihong Xiao (hondaxiao@tencent.com)
Skills neededFamiliar with DNS resolution process, familiar with programming in C++
Expected size of project180 hours
DifficultyAdvanced
Expected resultsAbility to perform asynchronous DNS resolution and pass the test.
Qualification Taskcomplete DNS asynchronous resolution and coroutine encapsulation.

7. RIST push streaming protocol support​

Name of projectRIST push streaming protocol support
Project DescriptionRIST is a streaming protocol that has emerged in recent years. It has better features than traditional RTP streaming, such as better transmission control, etc.
MentorZhihong Xiao (hondaxiao@tencent.com)
Backup MentorXiaojun Zhou (279686030@qq.com)
Skills neededFamiliar with RIST push protocol, familiar with C++ programming.
Expected size of project240 hours
DifficultyAdvanced
Expected resultsAble to push RIST stream to SRS, and convert to RTMP/FLV/WebRTC etc.
Qualification TaskCompletion of RIST protocol reception and trans-packaging into other protocols.

8. Refactoring of official website document content​

Name of projectRefactoring of official website document content
Project DescriptionSort out the existing wikis, articles, videos and other resources of SRS, and integrate them into the official website.
MentorXiaowei Meng (542638787@qq.com)
Backup MentorXiaosong Dai (kunkkaco@gmail.com)
Skills neededFamiliar with javascript, proficient in using SRS server, good in English.
Expected size of project350 hours
DifficultyBeginner
Expected resultsBe able to easily get started with SRS by reading the documentation.
Qualification TaskComplete the display of official website documents, cases, blogs, and various sub-modules of the community.