From eab1dbc60641bd648f49511d3d957580561285e4 Mon Sep 17 00:00:00 2001 From: baiyfcu Date: Sun, 7 Apr 2024 14:08:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E6=8F=90rtp=20app=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=9B=B8=E5=85=B3=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/include/mk_rtp_server.h | 3 ++- api/source/mk_rtp_server.cpp | 4 ++-- server/WebApi.cpp | 18 +++++++++++------- server/WebApi.h | 4 +++- src/Common/config.cpp | 2 ++ 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/api/include/mk_rtp_server.h b/api/include/mk_rtp_server.h index 60cdb43d..f4d96e25 100644 --- a/api/include/mk_rtp_server.h +++ b/api/include/mk_rtp_server.h @@ -20,10 +20,11 @@ typedef struct mk_rtp_server_t *mk_rtp_server; * 创建GB28181 RTP 服务器 * @param port 监听端口,0则为随机 * @param tcp_mode tcp模式(0: 不监听端口 1: 监听端口 2: 主动连接到服务端) + * @param app_name 该端口绑定的app名称,为""使用默认配置 rtp * @param stream_id 该端口绑定的流id * @return */ -API_EXPORT mk_rtp_server API_CALL mk_rtp_server_create(uint16_t port, int tcp_mode, const char *stream_id); +API_EXPORT mk_rtp_server API_CALL mk_rtp_server_create(uint16_t port, int tcp_mode, const char *app_name, const char *stream_id); /** * TCP 主动模式时连接到服务器是否成功的回调 diff --git a/api/source/mk_rtp_server.cpp b/api/source/mk_rtp_server.cpp index 6d2228d2..6bf236e2 100644 --- a/api/source/mk_rtp_server.cpp +++ b/api/source/mk_rtp_server.cpp @@ -16,9 +16,9 @@ using namespace toolkit; #include "Rtp/RtpServer.h" using namespace mediakit; -API_EXPORT mk_rtp_server API_CALL mk_rtp_server_create(uint16_t port, int tcp_mode, const char *stream_id) { +API_EXPORT mk_rtp_server API_CALL mk_rtp_server_create(uint16_t port, int tcp_mode, const char *app_name, const char *stream_id) { RtpServer::Ptr *server = new RtpServer::Ptr(new RtpServer); - (*server)->start(port, stream_id, (RtpServer::TcpMode)tcp_mode); + (*server)->start(port, app_name, stream_id, (RtpServer::TcpMode)tcp_mode); return (mk_rtp_server)server; } diff --git a/server/WebApi.cpp b/server/WebApi.cpp index a1ef1f65..f2b7ce91 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -469,14 +469,14 @@ Value makeMediaSourceJson(MediaSource &media){ } #if defined(ENABLE_RTPPROXY) -uint16_t openRtpServer(uint16_t local_port, const string &stream_id, int tcp_mode, const string &local_ip, bool re_use_port, uint32_t ssrc, int only_track, bool multiplex) { +uint16_t openRtpServer(uint16_t local_port, const string &app_name, const string &stream_id, int tcp_mode, const string &local_ip, bool re_use_port, uint32_t ssrc, int only_track, bool multiplex) { if (s_rtp_server.find(stream_id)) { //为了防止RtpProcess所有权限混乱的问题,不允许重复添加相同的stream_id return 0; } auto server = s_rtp_server.makeWithAction(stream_id, [&](RtpServer::Ptr server) { - server->start(local_port, stream_id, (RtpServer::TcpMode)tcp_mode, local_ip.c_str(), re_use_port, ssrc, only_track, multiplex); + server->start(local_port, app_name, stream_id, (RtpServer::TcpMode)tcp_mode, local_ip.c_str(), re_use_port, ssrc, only_track, multiplex); }); server->setOnDetach([stream_id]() { //设置rtp超时移除事件 @@ -1192,7 +1192,7 @@ void installWebApi() { CHECK_SECRET(); CHECK_ARGS("stream_id"); - auto process = RtpSelector::Instance().getProcess(allArgs["stream_id"], false); + auto process = RtpSelector::Instance().getProcess(allArgs["app_name"], allArgs["stream_id"], false); if (!process) { val["exist"] = false; return; @@ -1204,6 +1204,7 @@ void installWebApi() { api_regist("/index/api/openRtpServer",[](API_ARGS_MAP){ CHECK_SECRET(); CHECK_ARGS("port", "stream_id"); + auto app_name = allArgs["app_name"]; // 默认rtp auto stream_id = allArgs["stream_id"]; auto tcp_mode = allArgs["tcp_mode"].as(); if (allArgs["enable_tcp"].as() && !tcp_mode) { @@ -1219,7 +1220,8 @@ void installWebApi() { if (!allArgs["local_ip"].empty()) { local_ip = allArgs["local_ip"]; } - auto port = openRtpServer(allArgs["port"], stream_id, tcp_mode, local_ip, allArgs["re_use_port"].as(), + auto port = openRtpServer( + allArgs["port"], app_name, stream_id, tcp_mode, local_ip, allArgs["re_use_port"].as(), allArgs["ssrc"].as(), only_track); if (port == 0) { throw InvalidArgsException("该stream_id已存在"); @@ -1231,6 +1233,7 @@ void installWebApi() { api_regist("/index/api/openRtpServerMultiplex", [](API_ARGS_MAP) { CHECK_SECRET(); CHECK_ARGS("port", "stream_id"); + auto app_name = allArgs["app_name"]; auto stream_id = allArgs["stream_id"]; auto tcp_mode = allArgs["tcp_mode"].as(); if (allArgs["enable_tcp"].as() && !tcp_mode) { @@ -1246,7 +1249,7 @@ void installWebApi() { if (!allArgs["local_ip"].empty()) { local_ip = allArgs["local_ip"]; } - auto port = openRtpServer(allArgs["port"], stream_id, tcp_mode, local_ip, true, 0, only_track,true); + auto port = openRtpServer(allArgs["port"], app_name, stream_id, tcp_mode, local_ip, true, 0, only_track, true); if (port == 0) { throw InvalidArgsException("该stream_id已存在"); } @@ -1303,6 +1306,7 @@ void installWebApi() { Value obj; obj["stream_id"] = pr.first; obj["port"] = pr.second->getPort(); + obj["app_name"] = pr.second->getAppName(); val["data"].append(obj); } }); @@ -1411,7 +1415,7 @@ void installWebApi() { CHECK_SECRET(); CHECK_ARGS("stream_id"); //只是暂停流的检查,流媒体服务器做为流负载服务,收流就转发,RTSP/RTMP有自己暂停协议 - auto rtp_process = RtpSelector::Instance().getProcess(allArgs["stream_id"], false); + auto rtp_process = RtpSelector::Instance().getProcess(allArgs["app"], allArgs["stream_id"], false); if (rtp_process) { rtp_process->setStopCheckRtp(true); } else { @@ -1422,7 +1426,7 @@ void installWebApi() { api_regist("/index/api/resumeRtpCheck", [](API_ARGS_MAP) { CHECK_SECRET(); CHECK_ARGS("stream_id"); - auto rtp_process = RtpSelector::Instance().getProcess(allArgs["stream_id"], false); + auto rtp_process = RtpSelector::Instance().getProcess(allArgs["app"], allArgs["stream_id"], false); if (rtp_process) { rtp_process->setStopCheckRtp(false); } else { diff --git a/server/WebApi.h b/server/WebApi.h index 95562bbf..89907d28 100755 --- a/server/WebApi.h +++ b/server/WebApi.h @@ -202,7 +202,9 @@ void installWebApi(); void unInstallWebApi(); #if defined(ENABLE_RTPPROXY) -uint16_t openRtpServer(uint16_t local_port, const std::string &stream_id, int tcp_mode, const std::string &local_ip, bool re_use_port, uint32_t ssrc, int only_track, bool multiplex=false); +uint16_t openRtpServer(uint16_t local_port, const std::string &app_name, const std::string &stream_id, int tcp_mode, const std::string &local_ip, bool re_use_port, uint32_t ssrc, int only_track, bool multiplex=false); +//void connectRtpServer(const std::string &stream_id, const std::string &dst_url, uint16_t dst_port, const std::function &cb); +//bool closeRtpServer(const std::string &stream_id); #endif Json::Value makeMediaSourceJson(mediakit::MediaSource &media); diff --git a/src/Common/config.cpp b/src/Common/config.cpp index a34ee84f..ca2a6bd2 100644 --- a/src/Common/config.cpp +++ b/src/Common/config.cpp @@ -262,6 +262,7 @@ const string kAudioMtuSize = RTP_FIELD "audioMtuSize"; const string kRtpMaxSize = RTP_FIELD "rtpMaxSize"; const string kLowLatency = RTP_FIELD "lowLatency"; const string kH264StapA = RTP_FIELD "h264_stap_a"; +const string kRtpAppName = RTP_FIELD "rtpAppName"; static onceToken token([]() { mINI::Instance()[kVideoMtuSize] = 1400; @@ -269,6 +270,7 @@ static onceToken token([]() { mINI::Instance()[kRtpMaxSize] = 10; mINI::Instance()[kLowLatency] = 0; mINI::Instance()[kH264StapA] = 1; + mINI::Instance()[kRtpAppName] = "rtp"; }); } // namespace Rtp