mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-22 00:42:22 +08:00
整理webrtc c接口
This commit is contained in:
@@ -122,6 +122,72 @@ void API_CALL on_mk_media_no_reader(const mk_media_source sender) {
|
||||
mk_media_source_get_stream(sender));
|
||||
}
|
||||
|
||||
//按照json转义规则转义webrtc answer sdp
|
||||
static char *escape_string(const char *ptr){
|
||||
char *escaped = malloc(2 * strlen(ptr));
|
||||
char *ptr_escaped = escaped;
|
||||
while (1) {
|
||||
switch (*ptr) {
|
||||
case '\r': {
|
||||
*(ptr_escaped++) = '\\';
|
||||
*(ptr_escaped++) = 'r';
|
||||
break;
|
||||
}
|
||||
case '\n': {
|
||||
*(ptr_escaped++) = '\\';
|
||||
*(ptr_escaped++) = 'n';
|
||||
break;
|
||||
}
|
||||
case '\t': {
|
||||
*(ptr_escaped++) = '\\';
|
||||
*(ptr_escaped++) = 't';
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
*(ptr_escaped++) = *ptr;
|
||||
if (!*ptr) {
|
||||
return escaped;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
++ptr;
|
||||
}
|
||||
}
|
||||
|
||||
static void on_mk_webrtc_get_answer_sdp_func(void *user_data, const char *answer, const char *err) {
|
||||
const char *response_header[] = { "Content-Type", "application/json", "Access-Control-Allow-Origin", "*" , NULL};
|
||||
if (answer) {
|
||||
answer = escape_string(answer);
|
||||
}
|
||||
size_t len = answer ? 2 * strlen(answer) : 1024;
|
||||
char *response_content = (char *)malloc(len);
|
||||
|
||||
if (answer) {
|
||||
snprintf(response_content, len,
|
||||
"{"
|
||||
"\"sdp\":\"%s\","
|
||||
"\"type\":\"answer\","
|
||||
"\"code\":0"
|
||||
"}",
|
||||
answer);
|
||||
} else {
|
||||
snprintf(response_content, len,
|
||||
"{"
|
||||
"\"msg\":\"%s\","
|
||||
"\"code\":-1"
|
||||
"}",
|
||||
err);
|
||||
}
|
||||
|
||||
mk_http_response_invoker_do_string(user_data, 200, response_header, response_content);
|
||||
mk_http_response_invoker_clone_release(user_data);
|
||||
free(response_content);
|
||||
if (answer) {
|
||||
free(answer);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 收到http api请求广播(包括GET/POST)
|
||||
* @param parser http请求内容对象
|
||||
@@ -156,7 +222,7 @@ void API_CALL on_mk_http_request(const mk_parser parser,
|
||||
*consumed = 1;
|
||||
|
||||
//拦截api: /api/test
|
||||
if(strcmp(url,"/api/test") == 0) {
|
||||
if (strcmp(url, "/api/test") == 0) {
|
||||
const char *response_header[] = { "Content-Type", "text/html", NULL };
|
||||
const char *content = "<html>"
|
||||
"<head>"
|
||||
@@ -171,12 +237,16 @@ void API_CALL on_mk_http_request(const mk_parser parser,
|
||||
mk_http_body body = mk_http_body_from_string(content, 0);
|
||||
mk_http_response_invoker_do(invoker, 200, response_header, body);
|
||||
mk_http_body_release(body);
|
||||
}
|
||||
//拦截api: /index/api/webrtc
|
||||
else if(strcmp(url,"/index/api/webrtc") == 0){
|
||||
mk_webrtc_http_response_invoker_do(invoker,parser,sender);
|
||||
}
|
||||
else{
|
||||
} else if (strcmp(url, "/index/api/webrtc") == 0) {
|
||||
//拦截api: /index/api/webrtc
|
||||
char rtc_url[1024];
|
||||
snprintf(rtc_url, sizeof(rtc_url), "rtc://%s/%s/%s?%s", mk_parser_get_header(parser, "Host"),
|
||||
mk_parser_get_url_param(parser, "app"), mk_parser_get_url_param(parser, "stream"),
|
||||
mk_parser_get_url_params(parser));
|
||||
|
||||
mk_webrtc_get_answer_sdp(mk_http_response_invoker_clone(invoker), on_mk_webrtc_get_answer_sdp_func,
|
||||
mk_parser_get_url_param(parser, "type"), mk_parser_get_content(parser, NULL), rtc_url);
|
||||
} else {
|
||||
*consumed = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user