本文采用的 SRS 版本是 4.0-b8 , 下载地址:github


由于 SRS 主要使用的 是 state-thread 协程库,这个库是 8年前的, 《state-thread 官网文档》。

从 git 记录看出来,杨成立 对这个库做了一些改进。如下:

1,支持 龙芯 架构。

2,ST 最后的版本 1.9 ,使用的是 glibc 的结构体 jmpbuf,这需要知道这个结构体的布局。glibc 后面版本如果改变了布局,就不能用了。所以杨成立直接修改了 ST 的 _st_md_cxt_save 跟 _st_md_cxt_restore 函数,不使用 glibc 的 jmpbuf,自己定义 jmpbuf 来保存寄存器。

推荐阅读《掀起你的汇编来:如何移植ST协程到其他系统或CPU?》

所以,如果要深入 理解 SRS,必须先掌握 ST 源码的原理,ST 的代码量相对较少,可以很容易理解逻辑。如果直接看SRS的代码,协程的原理会被大量的业务逻辑干扰,不利于新人学习协程。

state-thread 的代码分析请看专栏《state-thread源码分析》


杨成立 对于 GO 语言的研究。

https://github.com/ossrs/srs/wiki/GoDevGuide


相关阅读:

  1. 《state-thread 官网文档》

杨成立 在 issue 里面放了几篇 st-thread 库的分析 文章

  1. 《state-threads代码分析》
  2. 《MSG_ZEROCOPY 在 st 上的应用》
  3. 《如何让 st 支持多线程》
  4. 《协程原理:函数调用过程、参数和寄存器》

由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。

SRS4.0源码分析-state-thread相关推荐

  1. SRS4.0源码分析-序言

    <SRS4.0源码分析>专栏,会从 configure(配置),makefile(编译规则),main (入口函数), 带你一步一步了解 SRS 的主干代码逻辑. 这里分享一个本人阅读开源 ...

  2. SRS4.0源码分析-CMake

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github <SRS4.0源码分析-调试环境搭建> 讲了 SRS 在 Clion 里面的调试,本文主要讲解 srs-4.0-b8\ ...

  3. SRS4.0源码分析-main

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 本文开始讲解 SRS 的入口文件.SRS 源码里 其实有 3 个 main() 函数,分别在 srs_main_ingest_hl ...

  4. SRS4.0源码分析-SrsRecvThread::cycle

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 从<SRS4.0源码分析-SrsRtmpConn::stream_service_cycle> 得知 ,真正接受客户端 ...

  5. SRS4.0源码分析-RTMP入口

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 上篇文章 <SRS4.0源码分析-main> 讲解了 SRS main 函数的基本流程,但是可能有些朋友还是比较懵逼. ...

  6. SRS4.0源码分析-推流总结

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 本文主要对前面的文章做下总结. <SRS4.0源码分析-main>,<SRS4.0源码分析-RTMP入口> ...

  7. SRS4.0源码分析-调试环境搭建

    本本文采用的 SRS 版本是 4.0-b8 , 下载地址:github SRS4.0 可以很方便地在 clion 软件下面断点调试,查看函数调用,堆栈. SRS的作者杨成立很贴心,在源码里放置了一个 ...

  8. SRS4.0源码分析-RTMP延迟

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 本文主要对 SRS RTMP 直播做延迟测试,然后介绍如何优化 RTMP 的延迟.为了不嵌套界面,介绍一下 ffmpeg 如何抓取 ...

  9. android6.0源码分析之Camera API2.0下的初始化流程分析

    1.Camera2初始化的应用层流程分析 Camera2的初始化流程与Camera1.0有所区别,本文将就Camera2的内置应用来分析Camera2.0的初始化过程.Camera2.0首先启动的是C ...

最新文章

  1. 海军工程大学学生电子课程-DIY Final预验收
  2. Spring Boot 项目实现热部署
  3. 看懂堆排序——堆与堆排序(三)
  4. 七十五、SpringBoot 的数据缓存cache(二)
  5. 推荐:Dapper扩展-Dapper.SimpleCRUD
  6. Codeforces 295A. Greg and Array
  7. Git 仓库中文件名大小写问题
  8. 树莓派智能小车python论文_基于树莓派循迹小车设计概述
  9. 随笔 | 读《写给年轻程序员的思考书》ii
  10. OverflowError: Python int too large to convert to C long 在Windows环境下Python报错
  11. KETTLE的文本文件输出
  12. kubernetes配置kubeconfig访问集群
  13. 手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz * 0 #
  14. 【转】为什么需要异步
  15. Tablestore结合Spark的流批一体SQL实战
  16. 解决idea中每次创建项目都要重复配置maven,全网几步配置
  17. python提取txt关键内容_python爬取关键字所在行并输出到txt
  18. linux kernal pwn STARCTF 2019 hackme(三)userfaultfd机制修改cred
  19. 用python编写缠论中枢_【缠论】python 实现
  20. 患上散光后,应当如何治疗?

热门文章

  1. php面包屑导航实现思路,WordPress实现面包屑导航的方法
  2. 立交匝道中边桩坐标放样正反算程序RAMP
  3. Django - Celery使用及介绍
  4. 漫谈测试成长之探索——测试排期
  5. 电子工程可以报考二建_我是电子信息工程专业,可以报考二级建造师吗?要..._二建考试_帮考网...
  6. app毕业设计 基于uni-app框架 在线外卖点餐app毕设题目课题选题作品源码(1)app功能和界面
  7. 基于大数据的线上线下电商用户数据挖掘研究
  8. hadoop3.X 和 Hadoop 2.X的web端口号访问
  9. python爬取碧蓝航线所有战舰头像
  10. 【caffe2从头学】:3.3.Brewing Models(快速构建模型)