本文主要是介绍SRS4.0源码分析-推流总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SRS 的社群来了,想加入微信社群的朋友请购买《SRS原理》电子书,里有更高级的内容与答疑服务。
本文采用的 SRS 版本是 4.0-b8 , 下载地址:github
本文主要对前面的文章做下总结。
《SRS4.0源码分析-main》,《SRS4.0源码分析-RTMP入口》,《SRS4.0源码分析-创建RTMP协程》,《SRS4.0源码分析-SrsRtmpConn::cycle》,《SRS4.0源码分析-SrsRtmpConn::stream_service_cycle》,《SRS4.0源码分析-SrsRecvThread::cycle》。
上面 7 篇 文章从 RTMP 入口,一直追踪到 推流数据保存,已经把推流大部分的逻辑 跑完了,所以需要画一张整体的流程图,协程函数 用颜色标注起来了,如下:
对上面的流程做下简单的总结。
1,SRS 服务器启动之后,会开启一个协程 (SrsTcpListener::cycle
) 来 监听 1935 的RTMP端口,不断 accept 客户端请求。
2,始祖协程 利用 wg.wait()
等等其他的服务结束,其他服务是指 RTMP服务,SRT服务,RTC 服务。
3,有RTMP推流客户端请求来了,新开一个协程D(SrsRtmpConn::cycle
) 来处理 请求,包括RTMP握手,传输音视频数据前的交互。处理完前期的交互工作之后,发现客户端是一个推流客户端,就会再开一个协程 E (SrsRecvThread::cycle
)来处理推过来的音视频数据流。之前的协程D 会阻塞不断循环统计一些信息。
由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。
这篇关于SRS4.0源码分析-推流总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!