启动位置
server/main.c -> start_main
解析命令行
daemon :守护进程
level:日志级别
config:配置文件路径
ssl:ssl密钥路径
threads: 线程锁数量
max_day :日志最多保存天数
CMD_main cmd_main;
try {
cmd_main.operator()(argc, argv);
} catch (ExitException &) {
return 0;
} catch (std::exception &ex) {
cout << ex.what() << endl;
return -1;
}
bool bDaemon = cmd_main.hasKey("daemon");
LogLevel logLevel = (LogLevel) cmd_main["level"].as<int>();
logLevel = MIN(MAX(logLevel, LTrace), LError);
g_ini_file = cmd_main["config"];
string ssl_file = cmd_main["ssl"];
int threads = cmd_main["threads"];
//.....
fileChannel->setMaxDay(cmd_main["max_day"]);
启动流媒体服务
首先会设置线程池的大小,线程池大小默认是std::thread::hardware_concurrency() cup最大的数量*2,接着调用TcpServer或者UdpServer的start方法。
EventPollerPool::setPoolSize(threads);
//.....
try {
//rtsp服务器,端口默认554
if (rtspPort) {
rtspSrv->start<RtspSession>(rtspPort); }
//rtsps服务器,端口默认322
if (rtspsPort) {
rtspSSLSrv->start<RtspSessionWithSSL>(rtspsPort); }
//rtmp服务器,端口默认1935
if (rtmpPort) {
rtmpSrv->start<RtmpSession>(rtmpPort); }
//rtmps服务器,端口默认19350
if (rtmpsPort) {
rtmpsSrv->start<RtmpSessionWithSSL>(rtmpsPort); }
//http服务器,端口默认80
if (httpPort) {
httpSrv->

本文详细介绍了流媒体服务启动过程,包括命令行参数解析、线程池配置、TCP及UDP服务器启动、各种协议的支持(如RTSP、RTMP、HTTP等)、会话管理和定时器实现。同时探讨了线程池的初始化、子线程级别的设定以及为每个Event Loop设置epoll_ctl的具体步骤。
最低0.47元/天 解锁文章
1872

被折叠的 条评论
为什么被折叠?



