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