0.引言
在前面的文章已经讲述了怎么搭建srs流媒体服务器,演示了流媒体服务器成功的运行。读者,可以参考前面的文章,自行学习。文章列表如下:
手把手搭建流媒体服务器详细步骤
简述SRS流媒体服务器相关技术
手把手配置HLS流媒体服务器
流媒体服务器架构与应用分析
1.SRS框架认识
关于SRS框架的初步认识,如下图所示。首先是通过main,到run_master,run_master主要是负责监听以及svr->cycle主要做的工作。svr->listen可以监听多种协议,如rtmp,http等。这里就以监听rtmp协议为例子,listen_rtmp通过层层调用,一直到tcp的调用,最后会启动协程,也就是一个连接,会对应一个协程。SrsTcpListener::cycle()主要的功过就是读取协程是否结束,通过srs_accept检查是否有新的连接,用on_tcp_client(stfd)处理新的连接。在fd2conn()中,绑定了fd和连接,并选定了一个协程,也就是一个协程绑定一个连接。绑定连接后,就启动连接对应的协程,协程执行的主要工作是在一个cycle里面执行,就是这个SrsRtmpConn:service_cycle,调用stream_service_cycle(),继续发布和推流不同分支查找或创建一个source,这里就分出了2个分支,就是推流和拉流的动作。更为具体的工作,下面会有源码分析。

2.源码调试
gdb 调试srs源码
gdb ./objs/srs

调试界面如下:

设置参数:
set args -c ./conf/srs.conf