音视频开发为什么要学SRS流媒体服务器
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和自己动手实践:
- 看wiki
- 通过gdb跟踪代码
- 结合gdb分析srs框架
- 结合流媒体协议分析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打断点
- 使用gdb启动:gdb ./objs/srs
- 设置参数:set args -c ./conf/rtmp.conf
- 打断点:建议先在main函数打断点,然后run到main函数等so加载后再在SrsConfig::get_listens打断点,否则出现下面红色框的问题
- 在main打断点后,run起来停在main函数
- 然后停在了main函数,此时可以断点
- 还是报出来红色框的问题,那我们可以按代码位置下断点,在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流媒体服务器相关推荐
- 【音视频开发系列】srs-webrtc-janus开源流媒体服务器分析
全球最牛开源流媒体服务器源码分析 1.如何学习流媒体服务器 2.全球最牛流媒体服务器架构分析 3.我们能从全球最牛流媒体服务器得到什么 [音视频开发系列]srs-webrtc-janus流媒体服务器分 ...
- 未来十年的音视频,教科书级别的Android音视频开发教程,学完我成功“挤进”了抖音音视频开发岗
未来的趋势 现在客户端卷的风起云涌,很多安卓开发者都是抱怨连天,上有闭灯苦读,下有图书馆黑丝诱惑.内卷之下,相比本来就堪忧的发量,前途未卜的迷茫带来的精神折磨更是雪上加霜 ,在这脉脉上的一位朋友给出了 ...
- C/C++程序员是什么让你有如此优势?音视频开发该怎么学?
前言:随着时代的进步,科技不断更迭,各行各业都正在或即将发生翻天覆地的变化.C/C++程序员这行就更不用说了,开发技术的迭代更是日新月异. 5G时代下的音视频开发 回看2020,在疫情的重创之下,各个 ...
- 音视频开发(1)---Red5流服务器搭建
Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunroyi666/articl ...
- 多媒体视频开发_(6) EasyDarwin开源流媒体服务器程序搭建
EasyDarwin开源流媒体服务器程序搭建 https://winqi.cn/120.html
- 音视频开发(10)---nginx-rtmp视频流服务器搭建
nginx-rtmp视频流服务器搭建 系统 centOS7 系统 用root用户登录 将目录文件拷贝到 /root 目录下 1.开放iptables 1935 1936 80 端口 ...
- 【音视频开发技术概要】技术背景、学习路线、业界大拿、岗位行业分析
音视频的知识纷繁复杂,自学非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验:本文就从音视频开发,开源框架,视频,业界大神,书籍推荐,就业方向分析,为广大开发者学习音视频技术提供便利. 首先我 ...
- 一文搞懂音视频开发技术点及职业发展方向
音视频的知识纷繁复杂,自学非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验:本文就从音视频开发,开源框架,视频,业界大神,书籍推荐,就业方向分析,为广大开发者学习音视频技术提供便利. 首先我 ...
- C++音视频开发从放弃到入门(基于FFmpeg+OpenCV)
前言 音视频开发一定要学C++吗?答案是肯定的.虽然其它语言也能搞音视频开发,甚至使用起来更简单,但"语言越高级,离真相就越远",当你的功能需求日益增多,程序的性能需求越来越迫切, ...
最新文章
- 风变编程python网址_风变编程Python:如何打造职场差异化竞争优势
- [leetcode] Palindrome Number
- Ranking第7名,2020 CrowdHuman大赛Baseline发布
- 解决:请购买WinRAR许可,您注册还剩下40天(WinRAR老是弹出烦人的对话框)
- 小米宣布加入鸿蒙,中兴和OPPO抵制后,第一个宣布加入鸿蒙阵营的果然是魅族...
- python爬虫案例-python爬虫案例
- android音频调制通讯,android音频口通信(一)——2FSK信号调制
- 牛顿如果穿越到现在,能看懂相对论和量子力学吗?
- 狂赌智能手机 中国互联网巨头深陷零利润困局
- java中Date和DateFormat、SimpleDateFormat类
- 通用apdu指令_8086微处理器中的通用指令格式
- 服务器系统2022安装wsl2,手把手教你踩坑:老白的Docker for Windows安装初探WSL 2 backend...
- Solr学习总结(五)SolrNet的基本用法及CURD
- java 常用汉字_中国常用汉字有多少
- MATLAB与DPS做Mann-Kendall显著性检验
- 力扣第 295 场周赛:6080. 使数组按非递减顺序排列
- VMware Funsion 8.5.1破解版
- ltm是什么门的缩写_ltm的含义,ltm是什么的缩写,ltm的词语,ltm代表的意思
- traffic control 之 egress 队列
- windows服务器无法安装net3.5 提示:无法通过windows功能控制面板自动安装或卸载windows server角色和功能服务器
热门文章
- 适合自学单片机c语言教材,单片机编程入门看什么书 盘点单片机初学者适合看的书...
- 我看 - 《梦断紫禁城》 的一些感想
- 【推荐系统】POLY2、FM、FFM模型的进化之路
- 剑网3手游怎么在电脑上玩 剑网3手游电脑版玩法教程
- 基于单片机的血压计c语言,基于单片机血压计的设计
- 从Bold手环来谈谈无袖带血压计的技术
- shader 处理cad线型 其中一小段的思路
- php会员生日祝福,药店会员积分卡 vip客户生日祝福短信
- mysql instr locate_mysql函数之一:INSTR、LOCATE、POSITION VS LIKE
- 【编译原理】词法分析(正规式与自动机)