Commit 486ca354 authored by Georgi Chorbadzhiyski's avatar Georgi Chorbadzhiyski Committed by Christophe Massiot

* Add support for EMM and ECM pass-through

parent 342c4f9f
This diff is collapsed.
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
DVBlast \- Simple and powerful dvb streaming application DVBlast \- Simple and powerful dvb streaming application
.SH SYNOPSIS .SH SYNOPSIS
.B dvblast .B dvblast
[\fI-q\fR] \fI-c <config_file>\fR [\fI-r <remote_socket>\fR] [\fI-t <ttl>\fR] [\fI-o <SSRC_IP>\fR] [\fI-i <RT_priority>\fR] [\fI-a <adapter>\fR] [\fI-n <frontend number>\fR] [\fI-S <diseqc>\fR] \fI-f <frequency>\fR [\fI-F <fec inner>\fR] [\fI-R <rolloff>\fR] ] [\fI-s <symbol_rate>\fR] [\fI-v <0|13|18>\fR] [\fI-p\fR] [\fI-b <bandwidth>\fR] [\fI-m <modulation\fR] [\fI-u\fR] [\fI-W\fR] [\fI-U\fR] [\fI-d <dest_IP:port>\fR] [\fI-e\fR] [\fI-T\fR] [\fI-l\fR] [\fI-q\fR] \fI-c <config_file>\fR [\fI-r <remote_socket>\fR] [\fI-t <ttl>\fR] [\fI-o <SSRC_IP>\fR] [\fI-i <RT_priority>\fR] [\fI-a <adapter>\fR] [\fI-n <frontend number>\fR] [\fI-S <diseqc>\fR] \fI-f <frequency>\fR [\fI-F <fec inner>\fR] [\fI-R <rolloff>\fR] ] [\fI-s <symbol_rate>\fR] [\fI-v <0|13|18>\fR] [\fI-p\fR] [\fI-b <bandwidth>\fR] [\fI-m <modulation\fR] [\fI-u\fR] [\fI-W\fR] [\fI-U\fR] [\fI-d <dest_IP:port>\fR] [\fI-W\fR] [\fI-Y\fR] [\fI-e\fR] [\fI-T\fR] [\fI-l\fR]
.SH DESCRIPTION .SH DESCRIPTION
DVBlast is a simple and powerful streaming application based on the linux-dvb API. DVBlast is a simple and powerful streaming application based on the linux-dvb API.
It opens a DVB device, tunes it, places PID filters, configures a CAM module, and demultiplexes the packets to several RTP outputs. It opens a DVB device, tunes it, places PID filters, configures a CAM module, and demultiplexes the packets to several RTP outputs.
...@@ -35,6 +35,12 @@ Duplicate all received packets to a given destination ...@@ -35,6 +35,12 @@ Duplicate all received packets to a given destination
\fB\-D\fR, \fB\-\-rtp\-input\fR \fB\-D\fR, \fB\-\-rtp\-input\fR
Read packets from a multicast address instead of a DVB card Read packets from a multicast address instead of a DVB card
.TP .TP
\fB\-W\fR, \fB\-\-emm\-passthrough\fR
Enable EMM pass through (CA system data)
.TP
\fB\-Y\fR, \fB\-\-ecm\-passthrough\fR
Enable ECM pass through (CA program data)
.TP
\fB\-e\fR, \fB\-\-epg\-passthrough\fR \fB\-e\fR, \fB\-\-epg\-passthrough\fR
Enable EPG pass through (EIT data) Enable EPG pass through (EIT data)
.TP .TP
......
...@@ -95,6 +95,9 @@ volatile sig_atomic_t b_hup_received = 0; ...@@ -95,6 +95,9 @@ volatile sig_atomic_t b_hup_received = 0;
int i_verbose = DEFAULT_VERBOSITY; int i_verbose = DEFAULT_VERBOSITY;
int i_syslog = 0; int i_syslog = 0;
bool b_enable_emm = false;
bool b_enable_ecm = false;
uint8_t pi_ssrc_global[4] = { 0, 0, 0, 0 }; uint8_t pi_ssrc_global[4] = { 0, 0, 0, 0 };
static int b_udp_global = 0; static int b_udp_global = 0;
static int b_dvb_global = 0; static int b_dvb_global = 0;
...@@ -138,7 +141,9 @@ static void config_Defaults( output_config_t *p_config ) ...@@ -138,7 +141,9 @@ static void config_Defaults( output_config_t *p_config )
p_config->i_config = (b_udp_global ? OUTPUT_UDP : 0) | p_config->i_config = (b_udp_global ? OUTPUT_UDP : 0) |
(b_dvb_global ? OUTPUT_DVB : 0) | (b_dvb_global ? OUTPUT_DVB : 0) |
(b_epg_global ? OUTPUT_EPG : 0); (b_epg_global ? OUTPUT_EPG : 0) |
(b_enable_emm ? OUTPUT_EMM : 0) |
(b_enable_ecm ? OUTPUT_ECM : 0);
p_config->i_max_retention = i_retention_global; p_config->i_max_retention = i_retention_global;
p_config->i_output_latency = i_latency_global; p_config->i_output_latency = i_latency_global;
p_config->i_tsid = -1; p_config->i_tsid = -1;
...@@ -187,6 +192,14 @@ bool config_ParseHost( output_config_t *p_config, char *psz_string ) ...@@ -187,6 +192,14 @@ bool config_ParseHost( output_config_t *p_config, char *psz_string )
p_config->i_config |= OUTPUT_DVB; p_config->i_config |= OUTPUT_DVB;
else if ( IS_OPTION("epg") ) else if ( IS_OPTION("epg") )
p_config->i_config |= OUTPUT_EPG; p_config->i_config |= OUTPUT_EPG;
else if ( IS_OPTION("emm") )
p_config->i_config |= OUTPUT_EMM;
else if ( IS_OPTION("noemm") )
p_config->i_config &= ~OUTPUT_EMM;
else if ( IS_OPTION("ecm") )
p_config->i_config |= OUTPUT_ECM;
else if ( IS_OPTION("noecm") )
p_config->i_config &= ~OUTPUT_ECM;
else if ( IS_OPTION("tsid=") ) else if ( IS_OPTION("tsid=") )
p_config->i_tsid = strtol( ARG_OPTION("tsid="), NULL, 0 ); p_config->i_tsid = strtol( ARG_OPTION("tsid="), NULL, 0 );
else if ( IS_OPTION("retention=") ) else if ( IS_OPTION("retention=") )
...@@ -418,6 +431,8 @@ void usage() ...@@ -418,6 +431,8 @@ void usage()
msg_Raw( NULL, " -c --config-file <config file>" ); msg_Raw( NULL, " -c --config-file <config file>" );
msg_Raw( NULL, " -C --dvb-compliance pass through or build the mandatory DVB tables" ); msg_Raw( NULL, " -C --dvb-compliance pass through or build the mandatory DVB tables" );
msg_Raw( NULL, " -d --duplicate duplicate all received packets to a given destination" ); msg_Raw( NULL, " -d --duplicate duplicate all received packets to a given destination" );
msg_Raw( NULL, " -W --emm-passthrough pass through EMM data (CA system data)" );
msg_Raw( NULL, " -Y --ecm-passthrough pass through ECM data (CA program data)" );
msg_Raw( NULL, " -e --epg-passthrough pass through DVB EIT schedule tables" ); msg_Raw( NULL, " -e --epg-passthrough pass through DVB EIT schedule tables" );
msg_Raw( NULL, " -E --retention maximum retention allowed between input and output (default: 40 ms)" ); msg_Raw( NULL, " -E --retention maximum retention allowed between input and output (default: 40 ms)" );
msg_Raw( NULL, " -L --latency maximum latency allowed between input and output (default: 100 ms)" ); msg_Raw( NULL, " -L --latency maximum latency allowed between input and output (default: 100 ms)" );
...@@ -497,6 +512,8 @@ int main( int i_argc, char **pp_argv ) ...@@ -497,6 +512,8 @@ int main( int i_argc, char **pp_argv )
{ "asi-adapter", required_argument, NULL, 'A' }, { "asi-adapter", required_argument, NULL, 'A' },
{ "any-type", no_argument, NULL, 'z' }, { "any-type", no_argument, NULL, 'z' },
{ "dvb-compliance", no_argument, NULL, 'C' }, { "dvb-compliance", no_argument, NULL, 'C' },
{ "emm-passthrough", no_argument, NULL, 'W' },
{ "ecm-passthrough", no_argument, NULL, 'Y' },
{ "epg-passthrough", no_argument, NULL, 'e' }, { "epg-passthrough", no_argument, NULL, 'e' },
{ "network-name", no_argument, NULL, 'M' }, { "network-name", no_argument, NULL, 'M' },
{ "network-id", no_argument, NULL, 'N' }, { "network-id", no_argument, NULL, 'N' },
...@@ -511,7 +528,7 @@ int main( int i_argc, char **pp_argv ) ...@@ -511,7 +528,7 @@ int main( int i_argc, char **pp_argv )
{ 0, 0, 0, 0 } { 0, 0, 0, 0 }
}; };
while ( (c = getopt_long(i_argc, pp_argv, "q::c:r:t:o:i:a:n:f:F:R:s:S:v:pb:I:m:P:K:G:H:X:O:uwUTL:E:d:D:A:lzCeM:N:j:J:x:Q:hV", long_options, NULL)) != -1 ) while ( (c = getopt_long(i_argc, pp_argv, "q::c:r:t:o:i:a:n:f:F:R:s:S:v:pb:I:m:P:K:G:H:X:O:uwUTL:E:d:D:A:lzCWYeM:N:j:J:x:Q:hV", long_options, NULL)) != -1 )
{ {
switch ( c ) switch ( c )
{ {
...@@ -711,6 +728,14 @@ int main( int i_argc, char **pp_argv ) ...@@ -711,6 +728,14 @@ int main( int i_argc, char **pp_argv )
b_dvb_global = 1; b_dvb_global = 1;
break; break;
case 'W':
b_enable_emm = true;
break;
case 'Y':
b_enable_ecm = true;
break;
case 'e': case 'e':
b_epg_global = 1; b_epg_global = 1;
break; break;
......
...@@ -52,6 +52,8 @@ ...@@ -52,6 +52,8 @@
* Bit 4 : Set for file / FIFO output, unset for network (future use) * Bit 4 : Set for file / FIFO output, unset for network (future use)
* Bit 5 : Set if DVB conformance tables are inserted * Bit 5 : Set if DVB conformance tables are inserted
* Bit 6 : Set if DVB EIT schedule tables are forwarded * Bit 6 : Set if DVB EIT schedule tables are forwarded
* Bit 7 : Set if EMM pids and CAT are forwarded
* Bit 8 : Set if ECM pids are forwarded
*****************************************************************************/ *****************************************************************************/
#define OUTPUT_WATCH 0x01 #define OUTPUT_WATCH 0x01
...@@ -61,6 +63,8 @@ ...@@ -61,6 +63,8 @@
#define OUTPUT_FILE 0x10 #define OUTPUT_FILE 0x10
#define OUTPUT_DVB 0x20 #define OUTPUT_DVB 0x20
#define OUTPUT_EPG 0x40 #define OUTPUT_EPG 0x40
#define OUTPUT_EMM (1 << 7)
#define OUTPUT_ECM (1 << 8)
typedef int64_t mtime_t; typedef int64_t mtime_t;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment