音视频开发为什么要学SRS流媒体服务器
ahcoder 2025-06-10 12:24 4 浏览
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框架分析我这里还录制了一些视频,大家可以关注+后台私信“资料”获取。
相关推荐
- Linux 5.17网络子系统方面的变化相当令人兴奋
-
正在开发的5.17内核的Linux网络子系统的更新是相当令人兴奋的,因为Linux在云中的大型服务器和企业网络设备上的运行以及小型物联网硬件上的Linux都是如此多产。新版不仅像往常一样有大量的硬件驱...
- 12 个流行的 Linux 网络命令及其使用方法
-
在Linux系统中,网络管理是系统管理员和开发者的核心技能之一。无论是排查网络问题、监控流量,还是配置网络接口,Linux提供了众多强大的命令行工具。这些工具功能强大且灵活,能够帮助用户高效地完成网络...
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统Cacti特点:将监控到的数据,绘制成各种图形基于SNMP协议(网络管理协议)的监控软件,强大的绘图能力Nagios特点:状态检查和报警机制(例如:内存不足或CPU负载高时,及时的...
- Linux超简单入门开箱篇(linux怎么入门)
-
此篇文章主要会带你介绍Linux操作系统,包括Linux本身、Linux如何使用、以及系统调用和Linux是如何工作的。Linux简介UNIX是一个交互式系统,用于同时处理多进程和多...
- 新手教程,Linux系统下MySQL的安装
-
看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...
- Windows 11 + WSL2 打造轻量级 Linux 本地开发环境实战教程
-
一、前言在2025年,越来越多开发者希望在不安装双系统的前提下体验Linux开发的强大能力,而微软的WSL2(WindowsSubsystemforLinux2)正好提供了这一可能。...
- linux系统奔溃之vmcore:kdump 的亲密战友 crash
-
转自https://blog.csdn.net/yuanfang_way/article/details/77987399crash是目前广泛使用的linux内核崩溃转储文件的分析工具,掌握c...
- 音视频开发为什么要学SRS流媒体服务器
-
1SRS是什么官方定义:SRS是一个流媒体集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效、稳定、易用,简单而快乐。2SRS能够解决什么...
- 77% 的 Linux 运维都不懂的内核问题,这篇全告诉你了
-
前言之前在实习时,听了OOM的分享之后,就对Linux内核内存管理充满兴趣,但是这块知识非常庞大,没有一定积累,不敢写下,担心误人子弟,所以经过一个一段时间的积累,对内核内存有一定了解之后,今...
- Linux 上利用Nginx代理uWSGI处理Flask web应用
-
一、介绍最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask的一个结构。下面是一些记录,在Centos系统上使用Flask架构部署一个简单的Python应用。然后使用Nginx作...
- C++ TinyWebserver 部署到Linux下,并运行
-
C++TinyWebserver部署到Linux下,并运行(使用的是Vmware的虚拟机运行Ubuntu20.04)环境:Vmware+Ubuntu20.041.Tinywebserver项目...
- SUSE Linux方案已在Amazon Web Services发布
-
近日,SUSE宣布已在亚马逊云服务(AWS)上发布SUSELinuxEnterpriseServerforSAPApplications。通过SUSE的“bring-your-own-s...
- 遨游于Linux的“老鸟想要一份学习pdf:鸟哥的Linux私房菜学习篇
-
您是准备学习Linux的“小菜鸟”,却不知道该如何下手?您是遨游于Linux的“老鸟想要一本案头必备的工具书?《鸟哥的Linux私房菜基础学习篇(第四版)》是您绝佳的选择!全新改版,提供您更新的技术...
- Mdserver-web|一款简单Linux面板服务
-
可以说是宝塔面板的精简版,界面很相似,只是更加简洁些,没有那么臃肿官网:https://www.midoks.icu/项目开源地址:https://github.com/midoks/mdserver...
- 国内外比较知名常见的6个可视化WEB管理面板
-
Linux服务器的管理对于新手用户来说是一个挺头疼的问题,由于用作服务器的Linux主机通常都没有图形化界面(节省资源),与日常使用的Windows有着很大的差别,一些必备组件的安装或更新就...
- 一周热门
- 最近发表
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- 查看linux 系统 (32)
- linux 防火墙 (33)
- linux 手机 (32)
- linux 镜像 (34)
- linux ip地址 (34)
- linux 用户查看 (33)