SRS流媒体框架分析(1)( 二 )
在trd->start():启动协程 , 如果协程要回调 , 可以通过this指针找到对象 。 启动协程后 , 就好会调用SrsSTCoroutine::cycle() , 然后调用handler->cycle() , 再调用SrsTcpListener::cycle() 。
文章插图
更加细致的流程如下:
文章插图
调用cycle的源码 , 如下所示:
文章插图
fd和connection的绑定 , SrsServer::fd2conn , 调用的是new SrsRtmpConn(this , stfd , ip) , 通过server服务(还可以管理其它事情)去管理所有连接 。 源码如下:
文章插图
文章插图
把所有的连接管理起来 。
文章插图
连接上之后 , 会启动协程 。 每个SrsRtmpConn都有1:1对应的协程 , 同时该连接 , 一定也对应一个cycle 。 只要某个类有start , 那基本上意味着绑定了一个协程的循坏 , 肯定是调用该类的cycle去实现了 。
文章插图
服务端 , 具体的循环操作 , 源码如下:
设置窗口大小 , 带宽等 。
文章插图
真正循环体的实现 。
文章插图
SrsRtmpConn::stream_service_cycle() , 一个直播对应一个source , 一个推流 , 对应0-n个拉流 。 source的消费者 , 每个拉流都会绑定一个SrsConsumer 。 具体工作 ,
文章插图
SrsSource对应客户端的consumers 。
文章插图
在这个循环里面 , 如果有播放或推流 , 它们对应的线程是不一样 。
do_playing(source , consumer ,--tt-darkmode-color: #999999;">后期关于项目的知识 , 会在微信公众号上更新 , 如果想要学习项目 , 可以关注微信公众号“记录世界 from antonio”
- 框架|三种数据分析思维框架的构建方法
- 正式|虾米音乐或将关停,音乐流媒体正式步入两极时代?
- 整理:常见的Java开发框架有哪些,看过,就赶紧收藏吧
- Martian框架发布 3.0.3 版本,Redis分布式锁
- 在Linux系统中安装深度学习框架Pytorch
- 案例:如何使用接口测试框架Karate创建一个API测试?
- 流媒体时代,为什么我买了一台黑胶机?_ 索尼黑胶机HX500
- 常用的NIO框架-Netty
- Python|TensorFlow 、Caffe等9大主流人工智能框架优劣势分析
- 点云分类的自动放大框架 PointAugment