首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
SRS原理
Loken1
创建于2023-11-15
订阅专栏
如果你想了解 协程的实现原理,那你可以看这本书;如果你想学习 RTMP,WebRTC 流媒体,你也可以看这本书;如果你想二次开发 SRS,那你一定要看这本书。
等 7 人订阅
共36篇文章
创建于2023-11-15
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
SRS的混合服务SrsHybridServer—SRS源码分析
SrsHybridServer 顾名思义,就是混合服务,目前他里面有 3 个 Server 服务,分别是 Server,SrtServer,RtcServer,如下: 全局变量 _srs_hybrid
SRS的定时器模块SrsFastTimer—SRS源码分析
SRS 的定时器是 SrsFastTimer,它跟 SrsSignalManager 类似,也是继承的 ISrsCoroutineHandler,所以他也是一个 Handler。 SrsFastTim
SRS的信号处理模块SrsSignalManager—SRS源码分析
SrsSignalManager 就是 SRS 的信号处理模块,他的主要逻辑是把 信号事件 转换成 IO 事件,这样就能用协程来处理了。关于 信号 转 IO 可以阅读之前的文章《HTTP服务器serv
SRS的线程池介绍SrsThreadPool—SRS源码分析
SRS 里面跟线程池相关的数据结构是 SrsThreadPool、SrsThreadEntry,他们的关系如下: 刚开始看这个这个结构的时候,我以为 SRS 的线程池的设计是,预先创建一堆线程,然后把
SRS的协程ID-SrsContextId—SRS源码分析
SRS 给每个协程都赋予了一个 ID(SrsContextId),由于 SRS 每处理一个 RTMP 客户端连接,都使用一个协程,所以这个 ID 也可以理解为 连接ID,连接ID 就是 SrsRtmp
SRS对StateThreads的封装—SRS源码分析
SRS 对 StateThreads 的封装都在 srs_app_st.hpp、srs_app_st.cpp 里面,这个文件里面的 class 类结构之间的关系如下: SrsSTCoroutine 可
SRS的错误处理SrsCplxError—SRS源码分析
SrsCplxError 是 SRS 的错误处理类,可以发现,大部分函数,它的返回值都是 SrsCplxError 结构的,如下: srs_error_t 是 SrsCplxError* 的别名。 S
SRS的日志文件模块SrsFileLog—SRS源码分析
关于 SRS 日志的基本介绍以及 切割等功能,请阅读 SRS 官方文档《日志》与《日志切割》。本文主要讲解 SRS 日志模块的代码实现。 SRS 日志模块的实现类是 SrsFileLog,如下: 可以
SRS的配置文件模块SrsConfig—SRS源码分析
SrsConfig 不只是解析配置文件,同时负责解析命令行的参数。解析命令行参数的函数是 parse_options() 与 parse_argv(),如下: 命令行参数的解析逻辑比较简单,这里就不说
SRS的启动过程main—SRS源码分析
阅读开源项目的代码,有一些技巧与经验分享给大家。 1,首先不要从头文件一个一个看,想一下子把所有变量的含义都搞明白。我以前也用这个方式,后来发现效率太低。变量的含义跟作用应该是要从代码逻辑里面一点点调
SRS的编译过程分析configure—SRS源码分析
SRS 的 configure 只有 800 行,相对于 FFmpeg 的 8000 行 configure,还是比较简单的,他的主要流程如下: 本文主要提取一些重点来讲解一下。 1,解析参数,创建目
SRS对StateThreads的多线程改造—SRS对StateThreads的改进与完善
在前面《StateThread为什么不支持多线程》一文中,讲解了为什么 StateThreads 不支持多线程,要利用 CPU 多核,只能用 fork 开多进程。 实际上就是全局变量的问题,不过 SR
使用Valgrind检查StateThreads内存泄漏—SRS对StateThreads的改进与完善
这个 patch 其实是 toffaletti 贡献的,SRS 把他合并过来了,整个 commit 其实很小,我们可以直接手动把它复制过 st-1.9 项目里面的。 复制完成之后,然后只需要在编译的时
srs.py调试脚本介绍—SRS对StateThreads的改进与完善
前面《如何查看协程相关信息》,已经介绍了如何查看协程数量,遍历协程,通过 EBP 寄存器去查看协程的函数调用层级。不过这样手敲命令,还是比较麻烦。有没一种更自动化一点的方法呢? 答:有,就是 srs.
StateThreads对RISCV、龙芯等CPU架构的支持—SRS对StateThreads的改进与完善
让 StateThreads 支持新的 CPU 架构,只需要实现下面 3 个函数就行了。 MD_SETJMP,保存函数上下文 MD_GET_SP,获取函数的 SP 寄存器,主要是为了进行修改。 MD_
自定义jmpbuf结构—SRS对StateThreads的改进与完善
jmpbuf 的全称其实是 jump buffer,存储的是 longjump 函数所需要的信息。也就是协程的上下文。由于 jmpbuf 在不同的平台内部实现不一样,而且如果 glibc 后面版本如果
ST协程切换回调介绍—StateThreads协程源码分析
StateThreads 提供了一个协程切换回调功能,当切走 协程的时候 会执行 _st_this_vp.switch_out_cb() 函数,到恢复协程的时候 会执行 _st_this_vp.swi
st_thread_join协程间通信介绍—StateThreads基础函数介绍
在进行多线程编程的时候,我们通常会使用 pthread_join() 函数来等待一个线程的结束。StateThread 也为我们提供了一个 st_thread_join() 函数来等待某个协程的结束。
st_thread_interrupt中断协程介绍—StateThreads协程源码分析
st_thread_interrupt() 函数用于中断一个正在阻塞的协程,例如 协程A 阻塞在 st_cond_wait() 里等待条件变量的通知,或者 阻塞在 st_read() 里面等待网络数据
st_cond_wait协程间通信介绍—StateThreads基础函数介绍
我们在进行多线程编程的时候,有时候我们需要设计一个 生产者线程 跟 消费者线程,然后他们之间通过 pthread_cond_signal() 跟 pthread_cond_wait() 进行通信。 提
下一页