addStreamPusherProxy接口修改key唯一性规则,新增rtsp推流类型、超时参数
This commit is contained in:
parent
eef0c31d7b
commit
aa39680c69
|
|
@ -249,10 +249,15 @@ static unordered_map<string, RtpServer::Ptr> s_rtpServerMap;
|
||||||
static recursive_mutex s_rtpServerMapMtx;
|
static recursive_mutex s_rtpServerMapMtx;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline string getProxyKey(const string &vhost,const string &app,const string &stream){
|
static inline string getProxyKey(const string &vhost, const string &app, const string &stream) {
|
||||||
return vhost + "/" + app + "/" + stream;
|
return vhost + "/" + app + "/" + stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline string getPusherKey(const string &schema, const string &vhost, const string &app, const string &stream,
|
||||||
|
const string &dst_url) {
|
||||||
|
return schema + "/" + vhost + "/" + app + "/" + stream + "/" + MD5(dst_url).hexdigest();
|
||||||
|
}
|
||||||
|
|
||||||
Value makeMediaSourceJson(MediaSource &media){
|
Value makeMediaSourceJson(MediaSource &media){
|
||||||
Value item;
|
Value item;
|
||||||
item["schema"] = media.getSchema();
|
item["schema"] = media.getSchema();
|
||||||
|
|
@ -606,9 +611,11 @@ void installWebApi() {
|
||||||
const string &app,
|
const string &app,
|
||||||
const string &stream,
|
const string &stream,
|
||||||
const string &url,
|
const string &url,
|
||||||
int retryCount,
|
int retry_count,
|
||||||
|
int rtp_type,
|
||||||
|
float timeout_sec,
|
||||||
const function<void(const SockException &ex, const string &key)> &cb) {
|
const function<void(const SockException &ex, const string &key)> &cb) {
|
||||||
auto key = getProxyKey(vhost, app, stream);
|
auto key = getPusherKey(schema, vhost, app, stream, url);
|
||||||
lock_guard<recursive_mutex> lck(s_proxyPusherMapMtx);
|
lock_guard<recursive_mutex> lck(s_proxyPusherMapMtx);
|
||||||
if (s_proxyPusherMap.find(key) != s_proxyPusherMap.end()) {
|
if (s_proxyPusherMap.find(key) != s_proxyPusherMap.end()) {
|
||||||
//已经在推流了
|
//已经在推流了
|
||||||
|
|
@ -616,14 +623,18 @@ void installWebApi() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto poller = EventPollerPool::Instance().getPoller();
|
|
||||||
int retry_count = 3;
|
|
||||||
if (retryCount != 0) retry_count = retryCount;
|
|
||||||
|
|
||||||
//添加推流代理
|
//添加推流代理
|
||||||
PusherProxy::Ptr pusher(new PusherProxy(schema, vhost, app, stream, retry_count, poller));
|
PusherProxy::Ptr pusher(new PusherProxy(schema, vhost, app, stream, retry_count ? retry_count : -1));
|
||||||
s_proxyPusherMap[key] = pusher;
|
s_proxyPusherMap[key] = pusher;
|
||||||
|
|
||||||
|
//指定RTP over TCP(播放rtsp时有效)
|
||||||
|
(*pusher)[kRtpType] = rtp_type;
|
||||||
|
|
||||||
|
if (timeout_sec > 0.1) {
|
||||||
|
//推流握手超时时间
|
||||||
|
(*pusher)[kTimeoutMS] = timeout_sec * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
//开始推流,如果推流失败或者推流中止,将会自动重试若干次,默认一直重试
|
//开始推流,如果推流失败或者推流中止,将会自动重试若干次,默认一直重试
|
||||||
pusher->setPushCallbackOnce([cb, key, url](const SockException &ex) {
|
pusher->setPushCallbackOnce([cb, key, url](const SockException &ex) {
|
||||||
if (ex) {
|
if (ex) {
|
||||||
|
|
@ -671,6 +682,8 @@ void installWebApi() {
|
||||||
allArgs["stream"],
|
allArgs["stream"],
|
||||||
allArgs["dst_url"],
|
allArgs["dst_url"],
|
||||||
allArgs["retry_count"],
|
allArgs["retry_count"],
|
||||||
|
allArgs["rtp_type"],
|
||||||
|
allArgs["timeout_sec"],
|
||||||
[invoker, val, headerOut, dst_url](const SockException &ex, const string &key) mutable {
|
[invoker, val, headerOut, dst_url](const SockException &ex, const string &key) mutable {
|
||||||
if (ex) {
|
if (ex) {
|
||||||
val["code"] = API::OtherFailed;
|
val["code"] = API::OtherFailed;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue