1 SRS是什么

官方定义:SRS是一个流媒体集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效、稳定、易用,简单而快乐。有将近10k star(包括https://github.com/ossrs/srs链接)

官网稳定版:https://github.com/ossrs/srs (建议大家学习使用该版本)

开发版本:https://github.com/winlinvip/srs (该版本供开发者使用,不建议小白用该版本)

SRS基本资料: Wiki地址,里面有上百篇详细文档,第一入手资料:https://github.com/ossrs/srs/wiki Git分支,可以看源码:https://github.com/winlinvip/srs 官网,有安装包,客户端供大家测试体验:http://www.ossrs.net/srs.release/releases/

2 SRS能够解决什么问题

2.1 工程案例

SRS支持的特性非常多,传统的RTMP直播应用不用多说,我们这里说一些新的趋势。

案例1:传统的视频监控客户端都是Windows pc桌面客户端,现在较多的公司都需要实现通过web去查看远程的视频监控,此时可以通过RTSP/GB28181推流推送到SRS流媒体服务器,然后通过RTMP或者HTTP-FLV协议进行拉流查看远程的摄像头。

案例2:传统的推流端都需要安装应用软件才能实现推流,但是目前也是有web化的趋势,需要通过浏览器网页将音视频画面推送给听众,此时就可以通过WebRTC推流到SRS流媒体服务器,然后观众通过RTMP、HTTP-FLV等方式观看直播。

2.2 技术储备

作为一个流媒体人,需要精通RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC等协议,怎么精通呢?

  • 光看协议手册是没有用的,一定要结合代码
  • 光百度找文章也是没有用的,一定要自己去实践

建议大家深入分析SRS源码:

  • SRS的源码逻辑非常清晰
  • 官网github也提供了详细的wiki文档资料和大量的issue
  • 大量的issue都是工程化中遇到的问题,以及如何解决,对于我们面试和工作开发都非常有帮助
  • 支持forward模式小规模集群和edge模式大规模集群

大家需要特别注意的一个点是,在学习SRS源码的时候,百度找SRS文章绝对只是辅助,并不能实际解决我们怎么学习SRS,我是建议大家:(1)阅读srs官方的wiki;(2)使用gdb等调试工具跟踪代码。 具体的学习方法可以参考 4节 SRS如何学习。

3 SRS是否有商业应用

有些朋友担心SRS能否在商业项目中应用,有没有商业用,去招聘网站搜一搜,看看大公司在招聘的时候是否需要掌握该服务器就知道了,比如在boss直聘输入SRS,我这里只列了3家公司的招聘需求。

从招聘结果可以看出来,当我们如果应聘的是流媒体相关岗位时,掌握SRS流媒体是一个必须项或者加分项目。这也说明SRS流媒体服务器在实际开发中的需求。

4 SRS如何学习

学习SRS流媒体服务器,建议少百度,多看官方wiki和自己动手实践:

  1. 看wiki
  2. 通过gdb跟踪代码
  3. 结合gdb分析srs框架
  4. 结合流媒体协议分析RTMP/HLS/HTTP-FLV/RTSP/WebRTC等的具体实现

以官方的RTMP部署为例:https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP

CSDN站内私信我,或文末加入免费领取最新最全C++/音视频开发学习提升资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

conf/rtmp.conf

listen 1935;

max_connections 1000;

vhost defaultVhost {

}

这里涉及到了端口1935,我们从这里也可以推断出,该配置文件配置了端口1935,那RTMP是要监听该端口。 要监听该端口则一定会去读取listen这个字段。比如我们在source insight 搜索"listen"

从这里我们可以看到SrsConfig这个类,有去读取"listen"字段,实际上如果我们点开SrsConfig,我们可以很容易的发现所有的配置文件都是由该类去读取。 我们再进一步,只关注 get("listen")这样的字段,查找到 vector SrsConfig::get_listens() { std::vector ports; SrsConfDirective* conf = root->get("listen"); // 从配置文件也可以出来,listen字段是在root if (!conf) { return ports; } for (int i = 0; i < (int)conf->args.size(); i++) { ports.push_back(conf->args.at(i)); } return ports; } 我们在就可以通过gdb在SrsConfig::get_listens打断点

  1. 使用gdb启动:gdb ./objs/srs
  2. 设置参数:set args -c ./conf/rtmp.conf
  3. 打断点:建议先在main函数打断点,然后run到main函数等so加载后再在SrsConfig::get_listens打断点,否则出现下面红色框的问题

  1. 在main打断点后,run起来停在main函数

  1. 然后停在了main函数,此时可以断点

  1. 还是报出来红色框的问题,那我们可以按代码位置下断点,在srs_app_config.cpp:3983下断点

然后输入r重启程序,按c直到进入rs_app_config.cpp:3983断点,再按bt可以看到我们读取配置文件,监听rtmp port的调用栈。

但此时如果我们去看调用栈,发现它只是检测配置文件是否正确,我们可以再继续输入c,然后输入bt看调用栈,直到我们看到在调用看到一些listen的字眼。

此时可以根据调用栈分析srs监听端口的框架流程

可以定位到src/app/srs_app_server.cpp:1246去查看

此时可以找到rtmp的监听流程。

以上只是小试牛刀,对于srs框架分析我这里还录制了一些视频,大家可以下方加入获取。

音视频开发为什么要学SRS流媒体服务器相关推荐

  1. 【音视频开发系列】srs-webrtc-janus开源流媒体服务器分析

    全球最牛开源流媒体服务器源码分析 1.如何学习流媒体服务器 2.全球最牛流媒体服务器架构分析 3.我们能从全球最牛流媒体服务器得到什么 [音视频开发系列]srs-webrtc-janus流媒体服务器分 ...

  2. 未来十年的音视频,教科书级别的Android音视频开发教程,学完我成功“挤进”了抖音音视频开发岗

    未来的趋势 现在客户端卷的风起云涌,很多安卓开发者都是抱怨连天,上有闭灯苦读,下有图书馆黑丝诱惑.内卷之下,相比本来就堪忧的发量,前途未卜的迷茫带来的精神折磨更是雪上加霜 ,在这脉脉上的一位朋友给出了 ...

  3. C/C++程序员是什么让你有如此优势?音视频开发该怎么学?

    前言:随着时代的进步,科技不断更迭,各行各业都正在或即将发生翻天覆地的变化.C/C++程序员这行就更不用说了,开发技术的迭代更是日新月异. 5G时代下的音视频开发 回看2020,在疫情的重创之下,各个 ...

  4. 音视频开发(1)---Red5流服务器搭建

    Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunroyi666/articl ...

  5. 多媒体视频开发_(6) EasyDarwin开源流媒体服务器程序搭建

    EasyDarwin开源流媒体服务器程序搭建 https://winqi.cn/120.html

  6. 音视频开发(10)---nginx-rtmp视频流服务器搭建

    nginx-rtmp视频流服务器搭建 系统 centOS7 系统   用root用户登录 将目录文件拷贝到 /root 目录下 1.开放iptables  1935  1936 80 端口      ...

  7. 【音视频开发技术概要】技术背景、学习路线、业界大拿、岗位行业分析

    音视频的知识纷繁复杂,自学非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验:本文就从音视频开发,开源框架,视频,业界大神,书籍推荐,就业方向分析,为广大开发者学习音视频技术提供便利. 首先我 ...

  8. 一文搞懂音视频开发技术点及职业发展方向

    音视频的知识纷繁复杂,自学非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验:本文就从音视频开发,开源框架,视频,业界大神,书籍推荐,就业方向分析,为广大开发者学习音视频技术提供便利. 首先我 ...

  9. C++音视频开发从放弃到入门(基于FFmpeg+OpenCV)

    前言 音视频开发一定要学C++吗?答案是肯定的.虽然其它语言也能搞音视频开发,甚至使用起来更简单,但"语言越高级,离真相就越远",当你的功能需求日益增多,程序的性能需求越来越迫切, ...

最新文章

  1. 风变编程python网址_风变编程Python:如何打造职场差异化竞争优势
  2. [leetcode] Palindrome Number
  3. Ranking第7名,2020 CrowdHuman大赛Baseline发布
  4. 解决:请购买WinRAR许可,您注册还剩下40天(WinRAR老是弹出烦人的对话框)
  5. 小米宣布加入鸿蒙,中兴和OPPO抵制后,第一个宣布加入鸿蒙阵营的果然是魅族...
  6. python爬虫案例-python爬虫案例
  7. android音频调制通讯,android音频口通信(一)——2FSK信号调制
  8. 牛顿如果穿越到现在,能看懂相对论和量子力学吗?
  9. 狂赌智能手机 中国互联网巨头深陷零利润困局
  10. java中Date和DateFormat、SimpleDateFormat类
  11. 通用apdu指令_8086微处理器中的通用指令格式
  12. 服务器系统2022安装wsl2,手把手教你踩坑:老白的Docker for Windows安装初探WSL 2 backend...
  13. Solr学习总结(五)SolrNet的基本用法及CURD
  14. java 常用汉字_中国常用汉字有多少
  15. MATLAB与DPS做Mann-Kendall显著性检验
  16. 力扣第 295 场周赛:6080. 使数组按非递减顺序排列
  17. VMware Funsion 8.5.1破解版
  18. ltm是什么门的缩写_ltm的含义,ltm是什么的缩写,ltm的词语,ltm代表的意思
  19. traffic control 之 egress 队列
  20. windows服务器无法安装net3.5 提示:无法通过windows功能控制面板自动安装或卸载windows server角色和功能服务器

热门文章

  1. 适合自学单片机c语言教材,单片机编程入门看什么书 盘点单片机初学者适合看的书...
  2. 我看 - 《梦断紫禁城》 的一些感想
  3. 【推荐系统】POLY2、FM、FFM模型的进化之路
  4. 剑网3手游怎么在电脑上玩 剑网3手游电脑版玩法教程
  5. 基于单片机的血压计c语言,基于单片机血压计的设计
  6. 从Bold手环来谈谈无袖带血压计的技术
  7. shader 处理cad线型 其中一小段的思路
  8. php会员生日祝福,药店会员积分卡 vip客户生日祝福短信
  9. mysql instr locate_mysql函数之一:INSTR、LOCATE、POSITION VS LIKE
  10. 【编译原理】词法分析(正规式与自动机)