xref: /OK3568_Linux_fs/external/rknpu2/examples/3rdparty/zlmediakit/include/mk_common.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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