1 SRS是什么官方定义:SRS是一个流媒体集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效、稳定、易用,简单而快乐。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部署为例:# conf/rtmp.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
}这里涉及到了端口1935,我们从这里也可以推断出,该配置文件配置了端口1935,那RTMP是要监听该端口。要监听该端口则一定会去读取listen这个字段。比如我们在source insight 搜索"listen"从这里我们可以看到SrsConfig这个类,有去读取"listen"字段,实际上如果我们点开SrsConfig,我们可以很容易的发现所有的配置文件都是由该类去读取。我们再进一步,只关注 get("listen")这样的字段,查找到vector<string> SrsConfig::get_listens()
{
std::vector<string> 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框架分析我这里还录制了一些视频,大家可以关注+后台私信“资料”获取。
本文出自快速备案,转载时请注明出处及相应链接。
本文永久链接: https://www.175ku.com/26893.html