ZLMediaKit源码分析(一)启动

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

启动位置

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->
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值