建议大家深入分析SRS源码:
在学习SRS源码的过程中,我们必须特别留意一点,那就是仅仅通过网上搜寻SRS相关文章,并不能真正帮助我们掌握如何学习SRS。因此,我建议采取以下步骤:(1)首先,仔细阅读SRS官方的wiki;(2)其次,利用gdb等调试工具对代码进行跟踪分析。
具体的学习方法可以参考 4节 SRS如何学习。
3 SRS是否有商业应用
一些朋友对SRS在商业领域的应用抱有疑虑,他们想知道它是否具有商业价值。只需浏览招聘网站,观察大型企业在招聘时是否要求掌握该服务器,便可一目了然。以boss直聘为例,输入SRS后,我仅列举了三家公司发布的招聘信息。
招聘结果直观地反映出,若我们申请的是与流媒体相关的职位,精通SRS流媒体技术将是一项基本要求,甚至可能成为加分项。这一现象亦充分揭示了在软件开发过程中对SRS流媒体服务器的迫切需求。
如需获取流媒体服务器实战训练营的具体位置信息,请通过后台私信发送“流媒体”进行咨询。
4 SRS如何学习
学习SRS流媒体服务器,建议减少对百度的依赖,转而多浏览官方的wiki资料,并且亲自动手进行实践操作。
查阅维基百科,利用gdb进行代码调试,结合gdb的功能对srs框架进行深入分析,同时针对流媒体协议,对RTMP、HLS、HTTP-FLV、RTSP以及WebRTC等技术的具体实现细节进行剖析。
以官方的RTMP部署为例:
# conf/rtmp.conf
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
}
该问题关联到端口号1935,由此我们可以推知,此配置文件已设定了该端口号,进而表明RTMP服务需要监听此端口。
若需对该端口进行监听,必然需要查阅“listen”这一字段。举例来说,我们可以在source insight中执行对“listen”的搜索操作。
观察SrsConfig这个类,我们发现它负责读取"listen"字段;实际上,若深入查看SrsConfig,我们会发现所有配置文件均由该类负责读取。
我们继续深入,仅聚焦于"listen"等类似字段,进行搜索定位。
vector SrsConfig::get_listens()
{
std::vector ports;
配置文件中提取的,名为"listen"的字段,被赋值给了SrsConfDirective类型的指针conf。
if (!conf) {
return ports;
}
for (int i = 0; i args.size(); i++) {
ports数组新增了conf结构体中args数组第i个元素的值。
}
return ports;
}
一旦到达此处,我们便能够利用gdb在SrsConfig类的get_listens方法上设置断点。
启动gdb进行调试:执行gdb ./objs/srs命令,配置参数为set args -c ./conf/rtmp.conf,设置断点:推荐首先在main函数处设置断点,随后运行程序至main函数并等待so模块加载完成,再在SrsConfig::get_listens函数处设置断点。若在main函数处设置断点后直接运行程序,程序会停留在main函数,此时即使设置断点仍会显示红色框的问题。此时,我们可以在srs_app_config.cpp文件的第3983行代码处设置断点。
接着输入“r”键以重启程序,连续按下“c”键直至达到“rs_app_config.cpp:3983”的断点位置,随后按下“bt”键,便能够观察到我们正在读取配置文件,并监听RTMP端口的调用栈。
然而,此刻若我们审视调用栈,会发现它仅仅是检查配置文件的准确性;随后,我们可继续输入字符“c”,紧接着输入“bt”来查看调用栈;如此反复,直至在调用栈中观察到“listen”这一关键词出现。
此时可以根据调用栈分析srs监听端口的框架流程
可以定位到
请查阅src/app/srs_app_server.cpp文件中的第1246行。
此时可以找到rtmp的监听流程。
这只是初露锋芒,关于SRS框架的分析,我已录制了若干视频,大家可通过关注并私信后台“资料”来获取观看。
本网站每日更新互联网创业教程,一年会员只需98,全站资源免费下载点击查看会员权益