Golang流媒体实战之四:lalserver的启动源码阅读

2023-04-03 08:51:48 浏览数 (1)

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

《Golang流媒体实战》系列的链接

  1. 体验开源项目lal
  2. 回源
  3. 转推和录制

本篇概览

  • 要想深入了解lalserver,除了前面几篇文章的使用,还必须读源码,这里就从最基本的启动开始,再逐步延伸到深入了解各核心功能
  • 本次源码阅读对应的lal代码仓库在这里:https://github.com/q191201771/lal
  • 分支用的是master,截止目前的commitID是e3995bc

入口

  • lalserver的启动代码在lal/app/lalserver/main.go,如下,可见启动很简单,分为三步:拿配置 -> 创建ServerManager -> 执行RunLoop
代码语言:javascript复制
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推流开始

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库 中间件系列
  6. DevOps系列

0 人点赞