笔者用的srs源码版本为:srs-server-4.0-r4。
listen_rtmp 函数的调用堆栈如下:
accept_client 函数的调用栈如下,注意该调用是通过协程调用,这里需要仔细观察协程调用方式。
在srs中所有应用处理都采用协程,可以根据上面accept_client函数及源码中很多地方,协程调用流程总结如下:
srs源码中从main函数开始至rtmp服务启动、监听、及accept接受新连接都在协程中处理的,具体流程大致如下:
通过解析rtmp协议,主要确定客户端是推流(publish)还是拉流(play),创建不同的处理协程回调函数,具体如下:
由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。