百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

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

csdh11 2025-04-09 15:17 13 浏览

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和自己动手实践:

  1. 看wiki
  2. 通过gdb跟踪代码
  3. 结合gdb分析srs框架
  4. 结合流媒体协议分析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 SrsConfig::get_listens()
{
   std::vector ports;
 
   SrsConfDirective* conf = root->get("listen"); // 从配置文件也可以出来,listen字段是在root
   if (!conf) {
       return ports;
   }
 
   for (int i = 0; i < intconf->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打断点,否则出现下面红色框的问题
  4. 在main打断点后,run起来停在main函数
  5. 然后停在了main函数,此时可以断点
  6. 还是报出来红色框的问题,那我们可以按代码位置下断点,在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框架分析我这里还录制了一些视频,大家可以关注+后台私信“资料”获取。

相关推荐

NUS邵林团队发布DexSinGrasp基于强化学习实现物体分离与抓取统一

本文的作者均来自新加坡国立大学LinSLab。本文的共同第一作者为新加坡国立大学实习生许立昕和博士生刘子轩,主要研究方向为机器人学习和灵巧操纵,其余作者分别为硕士生桂哲玮、实习生郭京翔、江泽宇以及...

「PLC进阶」如何通过编写SCL语言程序实现物料分拣?

01、前言SCL作为IEC61131-3编程语言的一种,由于其高级语言的特性,特别适合复杂运算、复杂数学函数应用的场合。本文以FactoryIO软件中的物料分拣案例作为硬件基础,介绍如何通过SCL来实...

zk源码—5.请求的处理过程一(http1.1请求方法)

大纲1.服务器的请求处理链...

自己动手从0开始实现一个分布式 RPC 框架

前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异...

MLSys’25 | 极低内存消耗:用SGD的内存成本实现AdamW的优化性能

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,...

线程池误用导致系统假死(线程池会自动销毁吗)

背景介绍在项目中,为了提高系统性能使用了RxJava实现异步方案,其中异步线程池是自建的。但是当QPS稍微增大之后却发现系统假死、无响应和返回,调用方出现大量超时现象。但是通过监控发现,系统线程数正常...

大型乘用车工厂布局规划(六大乘用车基地)

乘用车工厂的布局规划直接影响生产效率、物流成本、安全性和未来扩展能力。合理的布局应确保生产流程顺畅、物流高效、资源优化,并符合现代化智能制造和绿色工厂的要求。以下是详细的工厂布局规划要点:1.工厂布...

西门子 S7-200 SMART PLC 连接Factory IO的方法

有很多同学不清楚如何西门子200smart如何连接FactoryIO,本教程为您提供了如何使用西门子S7-200SMARTPLC连接FactoryIO的说明。设置PC和PLC之间的...

西门子博图高级仿真软件的应用(西门子博途软件仿真)

1.博图高级仿真软件(S7-PLCSIMAdvancedV2.0)S7-PLCSIMAdvancedV2.0包含大量仿真功能,通过创建虚拟控制器对S7-1500和ET200SP控制器进行仿真...

PLC编程必踩的6大坑——请对号入座,评论区见

一、缺乏整体规划:面条式代码问题实例:某快递分拣线项目初期未做流程图设计,工程师直接开始编写传送带控制程序。后期增加质检模块时发现I/O地址冲突,电机启停逻辑与传感器信号出现3处死循环,导致项目延期2...

统信UOS无需开发者模式安装软件包
统信UOS无需开发者模式安装软件包

原文链接:统信UOS无需开发者模式安装软件包...

2025-05-05 14:55 csdh11

100个Java工具类之76:数据指纹DigestUtils

为了提高数据安全性,保证数据的完整性和真实性,DigestUtils应运而生。正确恰当地使用DigestUtils的加密算法,可以实现数据的脱敏,防止数据泄露或篡改。...

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

#秋日生活打卡季#原文链接:...

Java常用工具类技术文档(java中工具类的作用)

一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...

软路由的用法(自动追剧配置)(软路由教学)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:值友98958248861环境和需求...