Janus源码分析(2)——主入口main

1. 主入口main位置

主入口main函数位于 janus.c 文件中

特别说明:

  • 通过 Makefile.am 创建依赖文件:cmdline.hcmdline.cversion.c
  • 版本号、编译时间及Git源码版本:janus_versionjanus_version_stringjanus_build_git_timejanus_build_git_sha
    等相关信息是在编译时生成到version.c中的。

Janus源码分析(2)——主入口main_第1张图片

2. Janus启动过程

Created with Raphaël 2.2.0 开始 解析命令行参数 解析配置文件参数 校验命令行参数并覆盖配置参数 获取配置参数 初始化Janus 启动处理线程及初始化线程池 加载所有组件 启动Janus成功 停止Janus? 关闭Janus 结束 等待250s yes no

2.1 校验命令行参数并覆盖配置参数

Created with Raphaël 2.2.0 校验命令行参数并覆盖配置参数 校验命令行参数日志输出到控制台 校验命令行参数日志输出到文件 校验命令行参数后台运行 后台运行处理(守护进程) 初始化日志 校验命令行参数日志级别 校验命令行参数PID文件参数 校验命令行其它参数并覆盖相关配置 后续处理

2.2 获取配置参数

Created with Raphaël 2.2.0 获取配置参数 获取日志或Debug配置参数 获取WebRTC加密配置参数 获取ICE强制列表 获取ICE忽略列表 获取网卡对应的IP地址 获取服务器名称配置参数 获取并校验自定义Session超时时间 获取并校验回收Session超时时间 获取Candidate超时时间 获取API调用密码 获取管理员API调用密码 获取基于认证机制的Token参数并初始化 获取OpaqueID配置参数 获取录像配置参数 获取是否隐藏依赖配置参数 获取IPv6配置参数 获取RTP端口范围配置参数 获取ICE配置参数 获取STUN配置参数 获取NAT配置参数 获取TURN配置参数 获取事件循环配置参数 获取Nice调试参数 若没有STUN或TURN服务器则获取本地IP 获取Nack最大队列数 获取没有媒体定时器参数 获取TWCC间隔参数 获取是否支持RFC4588参数 获取OpenSSL配置参数 获取DTLS-SRTP配置参数 后续处理

2.3 初始化Janus

Created with Raphaël 2.2.0 初始化Janus 初始化ICE 初始化STUN 初始化TURN 初始化SSL并加载所有的算法

2.4 启动处理线程及初始化线程池

Created with Raphaël 2.2.0 启动处理线程及初始化线程池 启动Session处理线程 启动请求处理线程 创建异步请求处理线程池 后续处理

2.5 加载所有组件

Created with Raphaël 2.2.0 加载所有组件 加载所有事件处理器 加载所有插件 加载所有Transport 后续处理

2.6 启动Janus完成

Created with Raphaël 2.2.0 启动Janus完成 Janus启动完成后通知上级应用 启用事件处理机制? 发送Janus启动通知(Janus状态及信息) 后续处理 yes no

2.7 关闭Janus

Created with Raphaël 2.2.0 关闭Janus 启用事件处理机制? 发送Janus关闭通知 关闭所有事件处理器 释放所有加载的Plugin 释放所有加载的Transport 释放其它相关占用资源 后续处理 yes no

3. 参考资料

  • Github源码
    https://github.com/meetecho/janus-gateway/blob/master/janus.c

你可能感兴趣的:(WebRTC)