diff --git a/trunk/conf/push.gb28181.conf b/trunk/conf/push.gb28181.conf index 0b49b8e77..27b7996ef 100644 --- a/trunk/conf/push.gb28181.conf +++ b/trunk/conf/push.gb28181.conf @@ -90,16 +90,18 @@ stream_caster { # 认为设备离线 keepalive_timeout 120; - # 注册之后是否自动给设备端发送invite # on: 是 off 不是,需要通过api控制 auto_play on; - # 设备将流发送的端口,是否固定 # on 发送流到多路复用端口 如9000 # off 自动从rtp_mix_port - rtp_max_port 之间的值中 # 选一个可以用的端口 invite_port_fixed on; + + # 向设备或下级域查询设备列表的间隔,单位(秒) + # 默认60秒 + query_catalog_interval 60; } } vhost __defaultVhost__ { diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index f63c3a07c..06c311966 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -2152,8 +2152,34 @@ srs_error_t SrsConfig::global_to_json(SrsJsonObject* obj) sobj->set(sdir->name, sdir->dumps_arg0_to_str()); } else if (sdir->name == "auto_create_channel") { sobj->set(sdir->name, sdir->dumps_arg0_to_str()); - } - } + } else if (sdir->name == "sip"){ + SrsJsonObject* ssobj = SrsJsonAny::object(); + sobj->set(sdir->name, ssobj); + + for (int j = 0; j < (int)sdir->directives.size(); j++) { + SrsConfDirective* ssdir = sdir->directives.at(j); + if (ssdir->name == "enabled") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); + } else if (ssdir->name == "listen") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_integer()); + } else if (ssdir->name == "serial") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_str()); + } else if (ssdir->name == "realm") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_str()); + } else if (ssdir->name == "ack_timeout") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_integer()); + } else if (ssdir->name == "keepalive_timeout") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_integer()); + } else if (ssdir->name == "auto_play") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); + } else if (ssdir->name == "invite_port_fixed") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); + } else if (ssdir->name == "query_catalog_interval") { + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_integer()); + } + } + }//end if + }//end for obj->set(dir->name, sobj); } else { continue; @@ -3686,7 +3712,8 @@ srs_error_t SrsConfig::check_normal_config() for (int j = 0; j < (int)conf->directives.size(); j++) { string m = conf->at(j)->name; if (m != "enabled" && m != "listen" && m != "ack_timeout" && m != "keepalive_timeout" - && m != "host" && m != "serial" && m != "realm" && m != "auto_play" && m != "invite_port_fixed") { + && m != "host" && m != "serial" && m != "realm" && m != "auto_play" && m != "invite_port_fixed" + && m != "query_catalog_interval") { return srs_error_new(ERROR_SYSTEM_CONFIG_INVALID, "illegal stream_caster.%s", m.c_str()); } } @@ -4585,6 +4612,28 @@ bool SrsConfig::get_stream_caster_gb28181_auto_create_channel(SrsConfDirective* return SRS_CONF_PERFER_FALSE(conf->arg0()); } +srs_utime_t SrsConfig::get_stream_caster_gb28181_sip_query_catalog_interval(SrsConfDirective* conf) +{ + static srs_utime_t DEFAULT = 60 * SRS_UTIME_SECONDS; + + + if (!conf) { + return DEFAULT; + } + + conf = conf->get("sip"); + if (!conf) { + return DEFAULT; + } + + conf = conf->get("query_catalog_interval"); + if (!conf || conf->arg0().empty()) { + return DEFAULT; + } + + return (srs_utime_t)(::atoi(conf->arg0().c_str()) * SRS_UTIME_SECONDS); +} + int SrsConfig::get_rtc_server_enabled() { SrsConfDirective* conf = root->get("rtc_server"); diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index f7f449b08..bafa7b998 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -515,6 +515,7 @@ public: virtual int get_stream_caster_gb28181_sip_listen(SrsConfDirective* conf); virtual bool get_stream_caster_gb28181_sip_invite_port_fixed(SrsConfDirective* conf); virtual bool get_stream_caster_gb28181_auto_create_channel(SrsConfDirective* conf); + virtual srs_utime_t get_stream_caster_gb28181_sip_query_catalog_interval(SrsConfDirective* conf); // rtc section public: