From adb3be70d06265fbf693b133624d03be5c21e785 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sun, 20 Sep 2020 21:23:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0GB28181=E7=9B=B8=E5=85=B3c=20?= =?UTF-8?q?api:=20#491?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/include/mk_mediakit.h | 1 + api/include/mk_rtp_server.h | 58 ++++++++++++++++++++++++++++++++++++ api/source/mk_rtp_server.cpp | 40 +++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 api/include/mk_rtp_server.h create mode 100644 api/source/mk_rtp_server.cpp diff --git a/api/include/mk_mediakit.h b/api/include/mk_mediakit.h index dc7c07c7..18cfd589 100755 --- a/api/include/mk_mediakit.h +++ b/api/include/mk_mediakit.h @@ -22,5 +22,6 @@ #include "mk_tcp.h" #include "mk_util.h" #include "mk_thread.h" +#include "mk_rtp_server.h" #endif /* MK_API_H_ */ diff --git a/api/include/mk_rtp_server.h b/api/include/mk_rtp_server.h new file mode 100644 index 00000000..451cf766 --- /dev/null +++ b/api/include/mk_rtp_server.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved. + * + * This file is part of ZLMediaKit(https://github.com/xiongziliang/ZLMediaKit). + * + * Use of this source code is governed by MIT license that can be found in the + * LICENSE file in the root of the source tree. All contributing project authors + * may be found in the AUTHORS file in the root of the source tree. + */ + +#include "mk_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void* mk_rtp_server; + +/** + * 创建GB28181 RTP 服务器 + * @param port 监听端口,0则为随机 + * @param enable_tcp 创建udp端口时是否同时监听tcp端口 + * @param stream_id 该端口绑定的流id + * @return + */ +API_EXPORT mk_rtp_server API_CALL mk_rtp_server_create(uint16_t port, int enable_tcp, const char *stream_id); + +/** + * 销毁GB28181 RTP 服务器 + * @param ctx 服务器对象 + */ +API_EXPORT void API_CALL mk_rtp_server_release(mk_rtp_server ctx); + +/** + * 获取本地监听的端口号 + * @param ctx 服务器对象 + * @return 端口号 + */ +API_EXPORT uint16_t API_CALL mk_rtp_server_port(mk_rtp_server ctx); + +/** + * GB28181 RTP 服务器接收流超时时触发 + * @param user_data 用户数据指针 + */ +typedef void(API_CALL *on_mk_rtp_server_detach)(void *user_data); + +/** + * 监听B28181 RTP 服务器接收流超时事件 + * @param ctx 服务器对象 + * @param cb 回调函数 + * @param user_data 回调函数用户数据指针 + */ +API_EXPORT void API_CALL mk_rtp_server_set_on_detach(mk_rtp_server ctx, on_mk_rtp_server_detach cb, void *user_data); + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/api/source/mk_rtp_server.cpp b/api/source/mk_rtp_server.cpp new file mode 100644 index 00000000..a36b9363 --- /dev/null +++ b/api/source/mk_rtp_server.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved. + * + * This file is part of ZLMediaKit(https://github.com/xiongziliang/ZLMediaKit). + * + * Use of this source code is governed by MIT license that can be found in the + * LICENSE file in the root of the source tree. All contributing project authors + * may be found in the AUTHORS file in the root of the source tree. + */ + +#include "mk_rtp_server.h" +#include "Rtp/RtpServer.h" +using namespace mediakit; + +API_EXPORT mk_rtp_server API_CALL mk_rtp_server_create(uint16_t port, int enable_tcp, const char *stream_id){ + RtpServer::Ptr *server = new RtpServer::Ptr(new RtpServer); + (*server)->start(port, stream_id, enable_tcp); + return server; +} + +API_EXPORT void API_CALL mk_rtp_server_release(mk_rtp_server ctx){ + RtpServer::Ptr *server = (RtpServer::Ptr *)ctx; + delete server; +} + +API_EXPORT uint16_t API_CALL mk_rtp_server_port(mk_rtp_server ctx){ + RtpServer::Ptr *server = (RtpServer::Ptr *)ctx; + return (*server)->getPort(); +} + +API_EXPORT void API_CALL mk_rtp_server_set_on_detach(mk_rtp_server ctx, on_mk_rtp_server_detach cb, void *user_data){ + RtpServer::Ptr *server = (RtpServer::Ptr *) ctx; + if (cb) { + (*server)->setOnDetach([cb, user_data]() { + cb(user_data); + }); + } else { + (*server)->setOnDetach(nullptr); + } +}