mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 10:40:05 +08:00
封装rtp server创建和关闭
This commit is contained in:
parent
9030547583
commit
fde6b436cc
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#else
|
#else
|
||||||
|
@ -368,6 +368,38 @@ Value makeMediaSourceJson(MediaSource &media){
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t openRtpServer(uint16_t local_port, const string &stream_id, bool enable_tcp, const string &local_ip, bool re_use_port, uint32_t ssrc) {
|
||||||
|
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
||||||
|
if (s_rtpServerMap.find(stream_id) != s_rtpServerMap.end()) {
|
||||||
|
//为了防止RtpProcess所有权限混乱的问题,不允许重复添加相同的stream_id
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RtpServer::Ptr server = std::make_shared<RtpServer>();
|
||||||
|
server->start(local_port, stream_id, enable_tcp, local_ip.c_str(), re_use_port, ssrc);
|
||||||
|
server->setOnDetach([stream_id]() {
|
||||||
|
//设置rtp超时移除事件
|
||||||
|
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
||||||
|
s_rtpServerMap.erase(stream_id);
|
||||||
|
});
|
||||||
|
|
||||||
|
//保存对象
|
||||||
|
s_rtpServerMap.emplace(stream_id, server);
|
||||||
|
//回复json
|
||||||
|
return server->getPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool closeRtpServer(const string &stream_id) {
|
||||||
|
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
||||||
|
auto it = s_rtpServerMap.find(stream_id);
|
||||||
|
if (it == s_rtpServerMap.end()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
auto server = it->second;
|
||||||
|
s_rtpServerMap.erase(it);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void getStatisticJson(const function<void(Value &val)> &cb) {
|
void getStatisticJson(const function<void(Value &val)> &cb) {
|
||||||
auto obj = std::make_shared<Value>(objectValue);
|
auto obj = std::make_shared<Value>(objectValue);
|
||||||
auto &val = *obj;
|
auto &val = *obj;
|
||||||
@ -1056,40 +1088,23 @@ void installWebApi() {
|
|||||||
CHECK_SECRET();
|
CHECK_SECRET();
|
||||||
CHECK_ARGS("port", "enable_tcp", "stream_id");
|
CHECK_ARGS("port", "enable_tcp", "stream_id");
|
||||||
auto stream_id = allArgs["stream_id"];
|
auto stream_id = allArgs["stream_id"];
|
||||||
|
auto port = openRtpServer(allArgs["port"], stream_id, allArgs["enable_tcp"].as<bool>(), "::",
|
||||||
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
allArgs["re_use_port"].as<bool>(), allArgs["ssrc"].as<uint32_t>());
|
||||||
if (s_rtpServerMap.find(stream_id) != s_rtpServerMap.end()) {
|
if(port == 0) {
|
||||||
//为了防止RtpProcess所有权限混乱的问题,不允许重复添加相同的stream_id
|
|
||||||
throw InvalidArgsException("该stream_id已存在");
|
throw InvalidArgsException("该stream_id已存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
RtpServer::Ptr server = std::make_shared<RtpServer>();
|
|
||||||
server->start(allArgs["port"], stream_id, allArgs["enable_tcp"].as<bool>(), "::",
|
|
||||||
allArgs["re_use_port"].as<bool>(), allArgs["ssrc"].as<uint32_t>());
|
|
||||||
server->setOnDetach([stream_id]() {
|
|
||||||
//设置rtp超时移除事件
|
|
||||||
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
|
||||||
s_rtpServerMap.erase(stream_id);
|
|
||||||
});
|
|
||||||
|
|
||||||
//保存对象
|
|
||||||
s_rtpServerMap.emplace(stream_id, server);
|
|
||||||
//回复json
|
//回复json
|
||||||
val["port"] = server->getPort();
|
val["port"] = port;
|
||||||
});
|
});
|
||||||
|
|
||||||
api_regist("/index/api/closeRtpServer",[](API_ARGS_MAP){
|
api_regist("/index/api/closeRtpServer",[](API_ARGS_MAP){
|
||||||
CHECK_SECRET();
|
CHECK_SECRET();
|
||||||
CHECK_ARGS("stream_id");
|
CHECK_ARGS("stream_id");
|
||||||
|
|
||||||
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
if(!closeRtpServer(allArgs["stream_id"])){
|
||||||
auto it = s_rtpServerMap.find(allArgs["stream_id"]);
|
|
||||||
if(it == s_rtpServerMap.end()){
|
|
||||||
val["hit"] = 0;
|
val["hit"] = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto server = it->second;
|
|
||||||
s_rtpServerMap.erase(it);
|
|
||||||
val["hit"] = 1;
|
val["hit"] = 1;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -230,6 +230,9 @@ bool checkArgs(Args &args, const First &first, const KeyTypes &...keys) {
|
|||||||
|
|
||||||
void installWebApi();
|
void installWebApi();
|
||||||
void unInstallWebApi();
|
void unInstallWebApi();
|
||||||
|
|
||||||
|
uint16_t openRtpServer(uint16_t local_port, const std::string &stream_id, bool enable_tcp, const std::string &local_ip, bool re_use_port, uint32_t ssrc);
|
||||||
|
bool closeRtpServer(const std::string &stream_id);
|
||||||
Json::Value makeMediaSourceJson(mediakit::MediaSource &media);
|
Json::Value makeMediaSourceJson(mediakit::MediaSource &media);
|
||||||
void getStatisticJson(const std::function<void(Json::Value &val)> &cb);
|
void getStatisticJson(const std::function<void(Json::Value &val)> &cb);
|
||||||
void addStreamProxy(const std::string &vhost, const std::string &app, const std::string &stream, const std::string &url, int retry_count,
|
void addStreamProxy(const std::string &vhost, const std::string &app, const std::string &stream, const std::string &url, int retry_count,
|
||||||
|
Loading…
Reference in New Issue
Block a user