1 /* 2 * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved. 3 * 4 * This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit). 5 * 6 * Use of this source code is governed by MIT license that can be found in the 7 * LICENSE file in the root of the source tree. All contributing project authors 8 * may be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef MK_COMMON_H 12 #define MK_COMMON_H 13 14 #include <stdint.h> 15 #include <stddef.h> 16 17 #if defined(GENERATE_EXPORT) 18 #include "mk_export.h" 19 #endif 20 21 #if defined(_WIN32) && defined(_MSC_VER) 22 # define API_CALL __cdecl 23 #else 24 # define API_CALL 25 #endif 26 27 #if defined(_WIN32) && defined(_MSC_VER) 28 # if !defined(GENERATE_EXPORT) 29 # if defined(MediaKitApi_EXPORTS) 30 # define API_EXPORT __declspec(dllexport) 31 # else 32 # define API_EXPORT __declspec(dllimport) 33 # endif 34 # endif 35 #elif !defined(GENERATE_EXPORT) 36 # define API_EXPORT 37 #endif 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 //输出日志到shell 44 #define LOG_CONSOLE (1 << 0) 45 //输出日志到文件 46 #define LOG_FILE (1 << 1) 47 //输出日志到回调函数(mk_events::on_mk_log) 48 #define LOG_CALLBACK (1 << 2) 49 50 typedef struct { 51 // 线程数 52 int thread_num; 53 54 // 日志级别,支持0~4 55 int log_level; 56 //控制日志输出的掩模,请查看LOG_CONSOLE、LOG_FILE、LOG_CALLBACK等宏 57 int log_mask; 58 //文件日志保存路径,路径可以不存在(内部可以创建文件夹),设置为NULL关闭日志输出至文件 59 const char *log_file_path; 60 //文件日志保存天数,设置为0关闭日志文件 61 int log_file_days; 62 63 // 配置文件是内容还是路径 64 int ini_is_path; 65 // 配置文件内容或路径,可以为NULL,如果该文件不存在,那么将导出默认配置至该文件 66 const char *ini; 67 68 // ssl证书是内容还是路径 69 int ssl_is_path; 70 // ssl证书内容或路径,可以为NULL 71 const char *ssl; 72 // 证书密码,可以为NULL 73 const char *ssl_pwd; 74 } mk_config; 75 76 /** 77 * 初始化环境,调用该库前需要先调用此函数 78 * @param cfg 库运行相关参数 79 */ 80 API_EXPORT void API_CALL mk_env_init(const mk_config *cfg); 81 82 /** 83 * 关闭所有服务器,请在main函数退出时调用 84 */ 85 API_EXPORT void API_CALL mk_stop_all_server(); 86 87 /** 88 * 基础类型参数版本的mk_env_init,为了方便其他语言调用 89 * @param thread_num 线程数 90 * @param log_level 日志级别,支持0~4 91 * @param log_mask 日志输出方式掩模,请查看LOG_CONSOLE、LOG_FILE、LOG_CALLBACK等宏 92 * @param log_file_path 文件日志保存路径,路径可以不存在(内部可以创建文件夹),设置为NULL关闭日志输出至文件 93 * @param log_file_days 文件日志保存天数,设置为0关闭日志文件 94 * @param ini_is_path 配置文件是内容还是路径 95 * @param ini 配置文件内容或路径,可以为NULL,如果该文件不存在,那么将导出默认配置至该文件 96 * @param ssl_is_path ssl证书是内容还是路径 97 * @param ssl ssl证书内容或路径,可以为NULL 98 * @param ssl_pwd 证书密码,可以为NULL 99 */ 100 API_EXPORT void API_CALL mk_env_init1(int thread_num, 101 int log_level, 102 int log_mask, 103 const char *log_file_path, 104 int log_file_days, 105 int ini_is_path, 106 const char *ini, 107 int ssl_is_path, 108 const char *ssl, 109 const char *ssl_pwd); 110 111 /** 112 * 设置日志文件 113 * @param file_max_size 单个切片文件大小(MB) 114 * @param file_max_count 切片文件个数 115 */ 116 API_EXPORT void API_CALL mk_set_log(int file_max_size, int file_max_count); 117 118 /** 119 * 设置配置项 120 * @param key 配置项名 121 * @param val 配置项值 122 */ 123 API_EXPORT void API_CALL mk_set_option(const char *key, const char *val); 124 125 /** 126 * 获取配置项的值 127 * @param key 配置项名 128 */ 129 API_EXPORT const char * API_CALL mk_get_option(const char *key); 130 131 132 /** 133 * 创建http[s]服务器 134 * @param port htt监听端口,推荐80,传入0则随机分配 135 * @param ssl 是否为ssl类型服务器 136 * @return 0:失败,非0:端口号 137 */ 138 API_EXPORT uint16_t API_CALL mk_http_server_start(uint16_t port, int ssl); 139 140 /** 141 * 创建rtsp[s]服务器 142 * @param port rtsp监听端口,推荐554,传入0则随机分配 143 * @param ssl 是否为ssl类型服务器 144 * @return 0:失败,非0:端口号 145 */ 146 API_EXPORT uint16_t API_CALL mk_rtsp_server_start(uint16_t port, int ssl); 147 148 /** 149 * 创建rtmp[s]服务器 150 * @param port rtmp监听端口,推荐1935,传入0则随机分配 151 * @param ssl 是否为ssl类型服务器 152 * @return 0:失败,非0:端口号 153 */ 154 API_EXPORT uint16_t API_CALL mk_rtmp_server_start(uint16_t port, int ssl); 155 156 /** 157 * 创建rtp服务器 158 * @param port rtp监听端口(包括udp/tcp) 159 * @return 0:失败,非0:端口号 160 */ 161 API_EXPORT uint16_t API_CALL mk_rtp_server_start(uint16_t port); 162 163 /** 164 * 创建rtc服务器 165 * @param port rtc监听端口 166 * @return 0:失败,非0:端口号 167 */ 168 API_EXPORT uint16_t API_CALL mk_rtc_server_start(uint16_t port); 169 170 //获取webrtc answer sdp回调函数 171 typedef void(API_CALL *on_mk_webrtc_get_answer_sdp)(void *user_data, const char *answer, const char *err); 172 173 /** 174 * webrtc交换sdp,根据offer sdp生成answer sdp 175 * @param user_data 回调用户指针 176 * @param cb 回调函数 177 * @param type webrtc插件类型,支持echo,play,push 178 * @param offer webrtc offer sdp 179 * @param url rtc url, 例如 rtc://__defaultVhost/app/stream?key1=val1&key2=val2 180 */ 181 API_EXPORT void API_CALL mk_webrtc_get_answer_sdp(void *user_data, on_mk_webrtc_get_answer_sdp cb, const char *type, 182 const char *offer, const char *url); 183 184 /** 185 * 创建srt服务器 186 * @param port srt监听端口 187 * @return 0:失败,非0:端口号 188 */ 189 API_EXPORT uint16_t API_CALL mk_srt_server_start(uint16_t port); 190 191 192 /** 193 * 创建shell服务器 194 * @param port shell监听端口 195 * @return 0:失败,非0:端口号 196 */ 197 API_EXPORT uint16_t API_CALL mk_shell_server_start(uint16_t port); 198 199 #ifdef __cplusplus 200 } 201 #endif 202 203 204 #endif /* MK_COMMON_H */ 205