欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
《Golang流媒体实战》系列的链接
- 体验开源项目lal
- 回源
- 转推和录制
本篇概览
- 要想深入了解lalserver,除了前面几篇文章的使用,还必须读源码,这里就从最基本的启动开始,再逐步延伸到深入了解各核心功能
- 本次源码阅读对应的lal代码仓库在这里:https://github.com/q191201771/lal
- 分支用的是master,截止目前的commitID是e3995bc
入口
- lalserver的启动代码在lal/app/lalserver/main.go,如下,可见启动很简单,分为三步:拿配置 -> 创建ServerManager -> 执行RunLoop
func main() {
defer nazalog.Sync()
confFilename := parseFlag()
lals := logic.NewLalServer(func(option *logic.Option) {
option.ConfFilename = confFilename
})
err := lals.RunLoop()
nazalog.Infof("server manager done. err=% v", err)
}
创建ServerManager
- 启动后首先做的事情是创建ServerManager对象,代码在server_manager__.go#NewServerManager,里面主要做了这些事情
- 创建ServerManager
- 创建GroupManager(每个流都有自己的group)
- 加载配置文件
- 根据配置文件做各类具体的设置,以及创建对象,主要有以下这些
- 设置hls文件是否用内存存取的标志
- 如果已经开启了flv录制功能,就创建对应的文件存放目录
- 如果已经开始了mpge格式的ts录制,就创建对应的文件存放目录
- 添加各种事件的回调
- 分别检查rtmp、http、rtsp、api等开关是否打开,如果打开了就创建对应的server对象(例如rtmpServer)
- 如果开启性能监控,就创建pprof的server
- 鉴权服务
- NewServerManager完成了,意味着根据配置,该创建的对象已经创建好了,可以执行一些初始化相关的设置了(例如启动rtmp server的监听),这些工作是在server_manager__.go#RunLoop方法中完成的
RunLoop
- 继续看server_manager__.go#RunLoop方法,代码有点多就不贴出来了,简单说下里面会做这些事情
- 接受系统的信号量(进程退出)
- 性能监控pprof
- 启动http、rtsp、rtmp等服务的server
- api的路由配置
- 1秒一次的定时器,负责:检查退出的channel信号,关闭空闲的group(每个app 流名的组合都有自己的group)
- 至此,启动部分就看过了,简单的代码,清晰的逻辑,为咱们的lalserver深入学习之旅开了好头,接下来要看的就是流媒体处理的源码了,从rtmp推流开始
你不孤单,欣宸原创一路相伴
- Java系列
- Spring系列
- Docker系列
- kubernetes系列
- 数据库 中间件系列
- DevOps系列