服务器启动流程:
main函数中直接调用do_main函数
do_main函数执行过程如下:
1).解析输入参数 _srs_config->parse_options()
2).初始化log srs_log->initialize()
3).启动服务器 run(SrsServer*)
run函数执行流程如下:
1).初始化SrsServer类 svr->initialize(NULL)2). 判断是否以守护进程启动
// if not deamon, directly run master.
if (!_srs_config->get_deamon()) {
if ((err = run_master(svr)) != srs_success) {
return srs_error_wrap(err, "run master");
}
return srs_success;
}
3).运运行服务器 run_master(SrsServer*)
run_master(SrsServer*)函数执行流程如下:
srs_error_t run_master(SrsServer* svr)
{
srs_error_t err = srs_success;
if ((err = svr->initialize_st()) != srs_success) {
return srs_error_wrap(err, "initialize st");
}
if ((err = svr->initialize_signal()) != srs_success) {
return srs_error_wrap(err, "initialize signal");
}
if ((err = svr->acquire_pid_file()) != srs_success) {
return srs_error_wrap(err, "acquire pid file");
}
//监听连接请求的端口
if ((err = svr->listen()) != srs_success) {
return srs_error_wrap(err, "listen");
}
if ((err = svr->register_signal()) != srs_success) {
return srs_error_wrap(err, "register signal");
}
//注册Http的处理模块
if ((err = svr->http_handle()) != srs_success) {
return srs_error_wrap(err, "http handle");
}
//开启流采集
if ((err = svr->ingest()) != srs_success) {
return srs_error_wrap(err, "ingest");
}
//消息循环处理
if ((err = svr->cycle()) != srs_success) {
return srs_error_wrap(err, "main cycle");
}
return err;
}