SAT>IP server: add mux handling configuration option
This commit is contained in:
parent
e424493113
commit
e1a14dff0e
6 changed files with 44 additions and 16 deletions
|
@ -169,6 +169,14 @@
|
||||||
<dd>
|
<dd>
|
||||||
Exported DVB-C tuners - streaming instances.
|
Exported DVB-C tuners - streaming instances.
|
||||||
|
|
||||||
|
<dt>Muxes Handling
|
||||||
|
<dd>
|
||||||
|
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.
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
#define RTP_BUFSIZE (256*1024)
|
#define RTP_BUFSIZE (256*1024)
|
||||||
#define RTCP_BUFSIZE (16*1024)
|
#define RTCP_BUFSIZE (16*1024)
|
||||||
|
|
||||||
|
#define MUXCNF_AUTO 0
|
||||||
|
#define MUXCNF_KEEP 1
|
||||||
|
#define MUXCNF_REJECT 2
|
||||||
|
|
||||||
typedef struct slave_subscription {
|
typedef struct slave_subscription {
|
||||||
LIST_ENTRY(slave_subscription) link;
|
LIST_ENTRY(slave_subscription) link;
|
||||||
mpegts_service_t *service;
|
mpegts_service_t *service;
|
||||||
|
@ -64,6 +68,7 @@ static uint16_t stream_id;
|
||||||
static char *rtsp_ip = NULL;
|
static char *rtsp_ip = NULL;
|
||||||
static int rtsp_port = -1;
|
static int rtsp_port = -1;
|
||||||
static int rtsp_descramble = 1;
|
static int rtsp_descramble = 1;
|
||||||
|
static int rtsp_muxcnf = MUXCNF_AUTO;
|
||||||
static void *rtsp_server = NULL;
|
static void *rtsp_server = NULL;
|
||||||
static TAILQ_HEAD(,session) rtsp_sessions;
|
static TAILQ_HEAD(,session) rtsp_sessions;
|
||||||
static pthread_mutex_t rtsp_lock;
|
static pthread_mutex_t rtsp_lock;
|
||||||
|
@ -313,7 +318,8 @@ rtsp_clean(session_t *rs)
|
||||||
}
|
}
|
||||||
if (rs->prch.prch_id)
|
if (rs->prch.prch_id)
|
||||||
profile_chain_close(&rs->prch);
|
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->mm_delete((mpegts_mux_t *)rs->mux, 1);
|
||||||
rs->mux = NULL;
|
rs->mux = NULL;
|
||||||
rs->mux_created = 0;
|
rs->mux_created = 0;
|
||||||
|
@ -430,7 +436,8 @@ rtsp_start
|
||||||
if (mux) break;
|
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));
|
dvb_mux_conf_str(&rs->dmc, buf, sizeof(buf));
|
||||||
tvhwarn("satips", "%i/%s/%i: create mux %s",
|
tvhwarn("satips", "%i/%s/%i: create mux %s",
|
||||||
rs->frontend, rs->session, rs->stream, buf);
|
rs->frontend, rs->session, rs->stream, buf);
|
||||||
|
@ -443,8 +450,9 @@ rtsp_start
|
||||||
}
|
}
|
||||||
if (mux == NULL) {
|
if (mux == NULL) {
|
||||||
dvb_mux_conf_str(&rs->dmc, buf, sizeof(buf));
|
dvb_mux_conf_str(&rs->dmc, buf, sizeof(buf));
|
||||||
tvhwarn("satips", "%i/%s/%i: unable to create mux %s",
|
tvhwarn("satips", "%i/%s/%i: unable to create mux %s%s",
|
||||||
rs->frontend, rs->session, rs->stream, buf);
|
rs->frontend, rs->session, rs->stream, buf,
|
||||||
|
rtsp_muxcnf == MUXCNF_REJECT ? " (configuration)" : "");
|
||||||
goto endclean;
|
goto endclean;
|
||||||
}
|
}
|
||||||
if (rs->mux == mux)
|
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 = {
|
static tcp_server_ops_t ops = {
|
||||||
.start = rtsp_serve,
|
.start = rtsp_serve,
|
||||||
|
@ -1340,6 +1349,7 @@ void satip_server_rtsp_init(const char *bindaddr, int port, int descramble)
|
||||||
rtsp_ip = strdup(bindaddr);
|
rtsp_ip = strdup(bindaddr);
|
||||||
rtsp_port = port;
|
rtsp_port = port;
|
||||||
rtsp_descramble = descramble;
|
rtsp_descramble = descramble;
|
||||||
|
rtsp_muxcnf = muxcnf;
|
||||||
if (!rtsp_server)
|
if (!rtsp_server)
|
||||||
rtsp_server = tcp_server_create(bindaddr, port, &ops, NULL);
|
rtsp_server = tcp_server_create(bindaddr, port, &ops, NULL);
|
||||||
if (reg)
|
if (reg)
|
||||||
|
|
|
@ -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 "
|
tvhinfo("satips", "SAT>IP Server %sinitialized "
|
||||||
"(HTTP %s:%d, RTSP %s:%d, "
|
"(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,
|
prefix,
|
||||||
http_server_ip, http_server_port,
|
http_server_ip, http_server_port,
|
||||||
http_server_ip, satip_server_rtsp_port,
|
http_server_ip, satip_server_rtsp_port,
|
||||||
descramble,
|
descramble, muxcnf,
|
||||||
config_get_int("satip_dvbt", 0),
|
config_get_int("satip_dvbt", 0),
|
||||||
config_get_int("satip_dvbs", 0),
|
config_get_int("satip_dvbs", 0),
|
||||||
config_get_int("satip_dvbc", 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)
|
void satip_server_config_changed(void)
|
||||||
{
|
{
|
||||||
int descramble;
|
int descramble, muxcnf;
|
||||||
|
|
||||||
if (!satip_server_rtsp_port_locked) {
|
if (!satip_server_rtsp_port_locked) {
|
||||||
satips_rtsp_port(0);
|
satips_rtsp_port(0);
|
||||||
if (satip_server_rtsp_port > 0) {
|
if (satip_server_rtsp_port > 0) {
|
||||||
descramble = config_get_int("satip_descramble", 1);
|
descramble = config_get_int("satip_descramble", 1);
|
||||||
|
muxcnf = config_get_int("satip_muxcnf", 0);
|
||||||
pthread_mutex_unlock(&global_lock);
|
pthread_mutex_unlock(&global_lock);
|
||||||
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("re", descramble);
|
satip_server_info("re", descramble, muxcnf);
|
||||||
satips_upnp_send_announce();
|
satips_upnp_send_announce();
|
||||||
pthread_mutex_lock(&global_lock);
|
pthread_mutex_lock(&global_lock);
|
||||||
} else {
|
} else {
|
||||||
|
@ -539,7 +540,7 @@ void satip_server_init(int rtsp_port)
|
||||||
{
|
{
|
||||||
struct sockaddr_storage http;
|
struct sockaddr_storage http;
|
||||||
char http_ip[128];
|
char http_ip[128];
|
||||||
int descramble;
|
int descramble, muxcnf;
|
||||||
|
|
||||||
http_server_ip = NULL;
|
http_server_ip = NULL;
|
||||||
satip_server_bootid = time(NULL);
|
satip_server_bootid = time(NULL);
|
||||||
|
@ -562,10 +563,11 @@ void satip_server_init(int rtsp_port)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
descramble = config_get_int("satip_descramble", 1);
|
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)
|
void satip_server_register(void)
|
||||||
|
|
|
@ -48,7 +48,8 @@ void satip_rtp_close(void *id);
|
||||||
void satip_rtp_init(void);
|
void satip_rtp_init(void);
|
||||||
void satip_rtp_done(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_register(void);
|
||||||
void satip_server_rtsp_done(void);
|
void satip_server_rtsp_done(void);
|
||||||
|
|
||||||
|
|
|
@ -537,6 +537,8 @@ extjs_config(http_connection_t *hc, const char *remain, void *opaque)
|
||||||
ssave |= config_set_int("satip_dvbs", atoi(str));
|
ssave |= config_set_int("satip_dvbs", atoi(str));
|
||||||
if ((str = http_arg_get(&hc->hc_req_args, "satip_dvbc")))
|
if ((str = http_arg_get(&hc->hc_req_args, "satip_dvbc")))
|
||||||
ssave |= config_set_int("satip_dvbc", atoi(str));
|
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)
|
if (save | ssave)
|
||||||
config_save();
|
config_save();
|
||||||
if (ssave)
|
if (ssave)
|
||||||
|
|
|
@ -246,13 +246,18 @@ tvheadend.miscconf = function(panel, index) {
|
||||||
name: 'satip_dvbc',
|
name: 'satip_dvbc',
|
||||||
fieldLabel: 'Exported DVB-C Tuners'
|
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({
|
satipPanel = new Ext.form.FieldSet({
|
||||||
title: 'SAT>IP Server',
|
title: 'SAT>IP Server',
|
||||||
width: 700,
|
width: 700,
|
||||||
autoHeight: true,
|
autoHeight: true,
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
animCollapse: true,
|
animCollapse: true,
|
||||||
items: [rtsp, weight, descramble, dvbt, dvbs, dvbc]
|
items: [rtsp, weight, descramble, dvbt, dvbs, dvbc, muxcnf]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue