{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
srs(simple-rtmp-server)流媒体服务器源码分析--系统启动一、前言小卒最近看srs源码,随手写下博客,其一为了整理思路,其二也是为日后翻看方便。如果不足之处,请指教!
首先总结一下srs源码的优点:
1、轻量级,代码结构清楚,目前srs3.0代码8万行左右,但几乎满足直播业务的所有要求。
2、srs采用statethreads,支持高并发量,高性能。
3、srs支持rtmp和hls,满足pc和移动直播要求。
4、srs支持集群部署。小集群forward,大集群edge。
代码分析可分为两个阶段:一:分析代码框架,理清楚组织流程二:分析代码细节,熟悉srs工作原理
相关srs源码其他总结:
srs(simple-rtmp-server)流媒体服务器源码分析--系统启动srs(simple-rtmp-server)流媒体服务器源码分析--rtmp消息play
srs(simple-rtmp-server)流媒体服务器源码分析--rtmp信息publish
srs(simple-rtmp-server)流媒体服务器源码分析--hls切片
现阶段,我主要以代码框架梳理为主。srs源码框架如下图:
进入客户监听
1、首先分析rtmp连接
来到了st_thread_create,这里要注意,这是srs开源项目具有高并发,高性能的重要一步。这里创建的是协程,不是线程。协程是有别于进程和线程的一种组件,具有进程的独立性和线程的轻量级,听说微信能够支持8亿用户量,也是采用协程这种网络服务框架:http://www.infoq.com/cn/articles/cplusstylecorourtine-at-wechat。
从这里可以看出,srs是一个单线程的服务器,采用协程,主持高并发,高性能。
创建协程,协程函数为:thread_fun()
2、再分析http-api连接,回到intsrsserver::listen()函数中,梳理http-api链接
3、httpapi回调注册
回到run_master()函数中,从_srs_server->http_handle()看起。
该函数注册了http-api回调接口。可以参考:https://github.com/ossrs/srs/wiki/v2_cn_httpapi
比如我们可以访问http://ip:1985/api/v1其中ip为srs服务器地址,就可以看到从该接口返回srs服务器参数。
4、ingest(拉流,srs主动去拉流,和推流相反)处理
5、srs自服务