config.h 8.2 KB
Newer Older
xiongziliang committed
1
/*
xiongziliang committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 * MIT License
 *
 * Copyright (c) 2016 xiongziliang <771730766@qq.com>
 *
 * This file is part of ZLMediaKit(https://github.com/xiongziliang/ZLMediaKit).
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

xzl committed
27

28 29
#ifndef COMMON_CONFIG_H
#define COMMON_CONFIG_H
xzl committed
30

31
#include <functional>
xiongzilaing committed
32
#include "Util/mini.h"
33
#include "Util/onceToken.h"
34 35
#include "Util/NoticeCenter.h"

36
using namespace std;
xzl committed
37 38 39
using namespace ZL::Util;

namespace Config {
xiongziliang committed
40

41 42 43 44 45 46
//加载配置文件,如果配置文件不存在,那么会导出默认配置并生成配置文件
//加载配置文件成功后会触发kBroadcastUpdateConfig广播
//如果指定的文件名(ini_path)为空,那么会加载默认配置文件
//默认配置文件名为 /path/to/your/exe.ini
//加载配置文件成功后返回true,否则返回false
bool loadIniConfig(const char *ini_path = nullptr);
xzl committed
47 48 49 50 51 52 53 54 55 56 57 58 59
////////////其他宏定义///////////
#ifndef MAX
#define MAX(a,b) ((a) > (b) ? (a) : (b) )
#endif //MAX

#ifndef MIN
#define MIN(a,b) ((a) < (b) ? (a) : (b) )
#endif //MIN

#ifndef CLEAR_ARR
#define CLEAR_ARR(arr) for(auto &item : arr){ item = 0;}
#endif //CLEAR_ARR

60 61
#define SERVER_NAME "ZLMediaKit"
#define VHOST_KEY "vhost"
62
#define HTTP_SCHEMA "http"
63 64 65 66 67
#define RTSP_SCHEMA "rtsp"
#define RTMP_SCHEMA "rtmp"
#define DEFAULT_VHOST "__defaultVhost__"
#define RTSP_VERSION 1.30
#define RTSP_BUILDTIME __DATE__" CST"
xzl committed
68 69 70

////////////广播名称///////////
namespace Broadcast {
71

72
//注册或反注册MediaSource事件广播
73
extern const char kBroadcastMediaChanged[];
74
#define BroadcastMediaChangedArgs const bool &bRegist, const string &schema,const string &vhost,const string &app,const string &stream,MediaSource &sender
75

76
//录制mp4文件成功后广播
xzl committed
77
extern const char kBroadcastRecordMP4[];
78
#define BroadcastRecordMP4Args const Mp4Info &info,Mp4Maker &sender
79

80
//收到http api请求广播
xzl committed
81
extern const char kBroadcastHttpRequest[];
82
#define BroadcastHttpRequestArgs const Parser &parser,const HttpSession::HttpResponseInvoker &invoker,bool &consumed,TcpSession &sender
83

84 85
//该流是否需要认证?是的话调用invoker并传入realm,否则传入空的realm.如果该事件不监听则不认证
extern const char kBroadcastOnGetRtspRealm[];
xiongziliang committed
86
#define BroadcastOnGetRtspRealmArgs const MediaInfo &args,const RtspSession::onGetRealm &invoker,TcpSession &sender
87 88 89 90

//请求认证用户密码事件,user_name为用户名,must_no_encrypt如果为true,则必须提供明文密码(因为此时是base64认证方式),否则会导致认证失败
//获取到密码后请调用invoker并输入对应类型的密码和密码类型,invoker执行时会匹配密码
extern const char kBroadcastOnRtspAuth[];
xiongziliang committed
91
#define BroadcastOnRtspAuthArgs const MediaInfo &args,const string &user_name,const bool &must_no_encrypt,const RtspSession::onAuth &invoker,TcpSession &sender
92 93

//鉴权结果回调对象
94 95
//如果errMessage为空则代表鉴权成功
typedef std::function<void(const string &errMessage)> AuthInvoker;
96 97 98

//收到rtmp推流事件广播,通过该事件控制推流鉴权
extern const char kBroadcastRtmpPublish[];
99
#define BroadcastRtmpPublishArgs const MediaInfo &args,const Broadcast::AuthInvoker &invoker,TcpSession &sender
100

101
//播放rtsp/rtmp/http-flv事件广播,通过该事件控制播放鉴权
102
extern const char kBroadcastMediaPlayed[];
103
#define BroadcastMediaPlayedArgs const MediaInfo &args,const Broadcast::AuthInvoker &invoker,TcpSession &sender
104

105 106
//shell登录鉴权
extern const char kBroadcastShellLogin[];
107
#define BroadcastShellLoginArgs const string &user_name,const string &passwd,const Broadcast::AuthInvoker &invoker,TcpSession &sender
108

109 110
//停止rtsp/rtmp/http-flv会话后流量汇报事件广播
extern const char kBroadcastFlowReport[];
111
#define BroadcastFlowReportArgs const MediaInfo &args,const uint64_t &totalBytes,TcpSession &sender
112 113 114

//流量汇报事件流量阈值,单位KB,默认1MB
extern const char kFlowThreshold[];
115 116

//更新配置文件事件广播,执行loadIniConfig函数加载配置文件成功后会触发该广播
117 118
extern const char kBroadcastReloadConfig[];
#define BroadcastReloadConfigArgs void
119 120
#define ReloadConfigTag  ((void *)(0xFF))

121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
#define RELOAD_KEY(arg,key) \
    do{ \
        decltype(arg) arg##tmp = mINI::Instance()[key]; \
        if(arg != arg##tmp ) { \
            arg = arg##tmp; \
            InfoL << "reload config:" << key << "=" <<  arg; \
        } \
    }while(0);

//监听某个配置发送变更
#define RELOAD_KEY_REGISTER(arg,key) \
    do{ \
        static onceToken s_token([](){ \
            NoticeCenter::Instance().addListener(ReloadConfigTag,Config::Broadcast::kBroadcastReloadConfig,[](BroadcastReloadConfigArgs){ \
                RELOAD_KEY(arg,key); \
            }); \
        }); \
    }while(0);

#define GET_CONFIG_AND_REGISTER(type,arg,key) \
        static type arg = mINI::Instance()[key]; \
        RELOAD_KEY_REGISTER(arg,key);

xzl committed
144 145 146 147 148
} //namespace Broadcast

////////////HTTP配置///////////
namespace Http {
extern const char kPort[];
xzl committed
149
extern const char kSSLPort[];
xzl committed
150 151 152 153 154 155 156 157 158 159 160 161 162 163
//http 文件发送缓存大小
extern const char kSendBufSize[];
//http 最大请求字节数
extern const char kMaxReqSize[];
//http keep-alive秒数
extern const char kKeepAliveSecond[];
//http keep-alive最大请求数
extern const char kMaxReqCount[];
//http 字符编码
extern const char kCharSet[];
//http 服务器根目录
extern const char kRootPath[];
//http 404错误提示内容
extern const char kNotFound[];
164

xzl committed
165 166 167 168 169 170 171 172 173 174 175 176
}//namespace Http

////////////SHELL配置///////////
namespace Shell {
extern const char kMaxReqSize[];
extern const char kPort[];
} //namespace Shell

////////////RTSP服务器配置///////////
namespace Rtsp {

extern const char kPort[];
177 178
//是否优先base64方式认证?默认Md5方式认证
extern const char kAuthBasic[];
xzl committed
179 180 181 182 183
} //namespace Rtsp

////////////RTMP服务器配置///////////
namespace Rtmp {
extern const char kPort[];
184 185
extern const char kModifyStamp[];

xzl committed
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
} //namespace RTMP


////////////RTP配置///////////
namespace Rtp {
//RTP打包最大MTU,公网情况下更小
extern const char kVideoMtuSize[];
//RTP打包最大MTU,公网情况下更小
extern const char kAudioMtuSize[];
//RTP排序缓存最大个数
extern const char kMaxRtpCount[];
//如果RTP序列正确次数累计达到该数字就启动清空排序缓存
extern const char kClearCount[];
//最大RTP时间为13个小时,每13小时回环一次
extern const char kCycleMS[];
} //namespace Rtsp

////////////组播配置///////////
namespace MultiCast {
//组播分配起始地址
extern const char kAddrMin[];
//组播分配截止地址
extern const char kAddrMax[];
//组播TTL
extern const char kUdpTTL[];
} //namespace MultiCast

////////////录像配置///////////
namespace Record {
//查看录像的应用名称
extern const char kAppName[];
//每次流化MP4文件的时长,单位毫秒
extern const char kSampleMS[];
//MP4文件录制大小,不能太大,否则MP4Close函数执行事件太长
extern const char kFileSecond[];
//录制文件路径
extern const char kFilePath[];
} //namespace Record

////////////HLS相关配置///////////
namespace Hls {
//HLS切片时长,单位秒
extern const char kSegmentDuration[];
//HLS切片个数
extern const char kSegmentNum[];
//HLS文件写缓存大小
extern const char kFileBufSize[];
//录制文件路径
extern const char kFilePath[];
} //namespace Hls

}  // namespace Config

239
#endif /* COMMON_CONFIG_H */