diff --git a/docs/html/config_misc.html b/docs/html/config_misc.html index 9e81c243..6d3b37b2 100644 --- a/docs/html/config_misc.html +++ b/docs/html/config_misc.html @@ -169,6 +169,14 @@
Exported DVB-C tuners - streaming instances. +
Muxes Handling +
+ When SAT>IP client requests new mux configuration, tvheadend can handle it + in three ways. The auto (0) configuration means that if the mux does not exists, + a temporary mux is created and removed when the client closes the + connection. The keep (1) configuration will remember all successfuly scanned muxes. + The reject (2) configuration will reject unknown muxes. + diff --git a/src/satip/rtsp.c b/src/satip/rtsp.c index 87ffa638..ffd62d58 100644 --- a/src/satip/rtsp.c +++ b/src/satip/rtsp.c @@ -29,6 +29,10 @@ #define RTP_BUFSIZE (256*1024) #define RTCP_BUFSIZE (16*1024) +#define MUXCNF_AUTO 0 +#define MUXCNF_KEEP 1 +#define MUXCNF_REJECT 2 + typedef struct slave_subscription { LIST_ENTRY(slave_subscription) link; mpegts_service_t *service; @@ -64,6 +68,7 @@ static uint16_t stream_id; static char *rtsp_ip = NULL; static int rtsp_port = -1; static int rtsp_descramble = 1; +static int rtsp_muxcnf = MUXCNF_AUTO; static void *rtsp_server = NULL; static TAILQ_HEAD(,session) rtsp_sessions; static pthread_mutex_t rtsp_lock; @@ -313,7 +318,8 @@ rtsp_clean(session_t *rs) } if (rs->prch.prch_id) profile_chain_close(&rs->prch); - if (rs->mux && rs->mux_created) + if (rs->mux && rs->mux_created && + (rtsp_muxcnf != MUXCNF_KEEP || LIST_EMPTY(&rs->mux->mm_services))) rs->mux->mm_delete((mpegts_mux_t *)rs->mux, 1); rs->mux = NULL; rs->mux_created = 0; @@ -430,7 +436,8 @@ rtsp_start if (mux) break; } } - if (mux == NULL && mn2) { + if (mux == NULL && mn2 && + (rtsp_muxcnf == MUXCNF_AUTO || rtsp_muxcnf == MUXCNF_KEEP)) { dvb_mux_conf_str(&rs->dmc, buf, sizeof(buf)); tvhwarn("satips", "%i/%s/%i: create mux %s", rs->frontend, rs->session, rs->stream, buf); @@ -443,8 +450,9 @@ rtsp_start } if (mux == NULL) { dvb_mux_conf_str(&rs->dmc, buf, sizeof(buf)); - tvhwarn("satips", "%i/%s/%i: unable to create mux %s", - rs->frontend, rs->session, rs->stream, buf); + tvhwarn("satips", "%i/%s/%i: unable to create mux %s%s", + rs->frontend, rs->session, rs->stream, buf, + rtsp_muxcnf == MUXCNF_REJECT ? " (configuration)" : ""); goto endclean; } if (rs->mux == mux) @@ -1314,7 +1322,8 @@ rtsp_close_sessions(void) /* * */ -void satip_server_rtsp_init(const char *bindaddr, int port, int descramble) +void satip_server_rtsp_init + (const char *bindaddr, int port, int descramble, int muxcnf) { static tcp_server_ops_t ops = { .start = rtsp_serve, @@ -1340,6 +1349,7 @@ void satip_server_rtsp_init(const char *bindaddr, int port, int descramble) rtsp_ip = strdup(bindaddr); rtsp_port = port; rtsp_descramble = descramble; + rtsp_muxcnf = muxcnf; if (!rtsp_server) rtsp_server = tcp_server_create(bindaddr, port, &ops, NULL); if (reg) diff --git a/src/satip/server.c b/src/satip/server.c index afb8c8c3..47ec23fc 100644 --- a/src/satip/server.c +++ b/src/satip/server.c @@ -491,15 +491,15 @@ static void satips_rtsp_port(int def) * */ -static void satip_server_info(const char *prefix, int descramble) +static void satip_server_info(const char *prefix, int descramble, int muxcnf) { tvhinfo("satips", "SAT>IP Server %sinitialized " "(HTTP %s:%d, RTSP %s:%d, " - "descramble %d, DVB-T %d, DVB-S2 %d, DVB-C %d)", + "descramble %d, muxcnf %d, DVB-T %d, DVB-S2 %d, DVB-C %d)", prefix, http_server_ip, http_server_port, http_server_ip, satip_server_rtsp_port, - descramble, + descramble, muxcnf, config_get_int("satip_dvbt", 0), config_get_int("satip_dvbs", 0), config_get_int("satip_dvbc", 0)); @@ -510,15 +510,16 @@ static void satip_server_info(const char *prefix, int descramble) */ void satip_server_config_changed(void) { - int descramble; + int descramble, muxcnf; if (!satip_server_rtsp_port_locked) { satips_rtsp_port(0); if (satip_server_rtsp_port > 0) { descramble = config_get_int("satip_descramble", 1); + muxcnf = config_get_int("satip_muxcnf", 0); pthread_mutex_unlock(&global_lock); - satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble); - satip_server_info("re", descramble); + satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble, muxcnf); + satip_server_info("re", descramble, muxcnf); satips_upnp_send_announce(); pthread_mutex_lock(&global_lock); } else { @@ -539,7 +540,7 @@ void satip_server_init(int rtsp_port) { struct sockaddr_storage http; char http_ip[128]; - int descramble; + int descramble, muxcnf; http_server_ip = NULL; satip_server_bootid = time(NULL); @@ -562,10 +563,11 @@ void satip_server_init(int rtsp_port) return; descramble = config_get_int("satip_descramble", 1); + muxcnf = config_get_int("satip_muxcnf", 0); - satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble); + satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble, muxcnf); - satip_server_info("", descramble); + satip_server_info("", descramble, muxcnf); } void satip_server_register(void) diff --git a/src/satip/server.h b/src/satip/server.h index 94569d59..dedce9ad 100644 --- a/src/satip/server.h +++ b/src/satip/server.h @@ -48,7 +48,8 @@ void satip_rtp_close(void *id); void satip_rtp_init(void); void satip_rtp_done(void); -void satip_server_rtsp_init(const char *bindaddr, int port, int descramble); +void satip_server_rtsp_init(const char *bindaddr, int port, + int descramble, int muxcnf); void satip_server_rtsp_register(void); void satip_server_rtsp_done(void); diff --git a/src/webui/extjs.c b/src/webui/extjs.c index 61bb20ff..b99b976c 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -537,6 +537,8 @@ extjs_config(http_connection_t *hc, const char *remain, void *opaque) ssave |= config_set_int("satip_dvbs", atoi(str)); if ((str = http_arg_get(&hc->hc_req_args, "satip_dvbc"))) ssave |= config_set_int("satip_dvbc", atoi(str)); + if ((str = http_arg_get(&hc->hc_req_args, "satip_muxcnf"))) + ssave |= config_set_int("satip_muxcnf", atoi(str)); if (save | ssave) config_save(); if (ssave) diff --git a/src/webui/static/app/config.js b/src/webui/static/app/config.js index 14d78779..ee88e117 100644 --- a/src/webui/static/app/config.js +++ b/src/webui/static/app/config.js @@ -246,13 +246,18 @@ tvheadend.miscconf = function(panel, index) { name: 'satip_dvbc', fieldLabel: 'Exported DVB-C Tuners' }); + var muxcnf = new Ext.form.NumberField({ + name: 'satip_muxcnf', + fieldLabel: 'Muxes Handling (0 = auto, 1 = keep, 2 = reject)' + }); + satipPanel = new Ext.form.FieldSet({ title: 'SAT>IP Server', width: 700, autoHeight: true, collapsible: true, animCollapse: true, - items: [rtsp, weight, descramble, dvbt, dvbs, dvbc] + items: [rtsp, weight, descramble, dvbt, dvbs, dvbc, muxcnf] }); }