Four components of Testbed:
Just-DVB Open source software --- used to get DVB-T signal FATCAPS DVB-H IP-Encapsulator --- used to get DVB-H signal based on the DVB-T signal DTA-110T PCI card ---send the DVB-H signal to the target client (Nokia N92) Nokia N92 --- the receiving device
What does FATCPAS do?
Reads IP data from configurable sources via one or more instances of the dataaggregator tool Organizes the data in a MPE-FEC frame as specified in the DVB-H standard and optionally computes the MPE forward error correction (MPE-FEC) Creates a stream of MPEG-2 TS packets of 188B size and outputs them to a configurable output FIFO or a file Outputs timesliced MPEG2 transport stream data All files located under /DVB-H/DVBH_Encapsulator
What does Just-IT do?
JustDVB just replaces nullpackets by configurable PSI/SI which is mandatory for a regular DVB-H stream. All files located under /DVB-H/DVBH_Encapsulator/python-config-dvbh
DTA-110T PCI Card
Start the card: /DVB-H/Dta1xx/Dta1xxInit start Stop the card: /DVB-H/Dta1xx/Dta1xxInit stop
Two Tools from FATCAPS
1) Dataaggregator (Encapsulator + sec2ts ) collects IP packets matching a given filter expression
yliu1@cs-nsl-11:/DVB-H/DVBH_Encapsulator$ ./dataaggregator -h Usage: dataaggregator [-h] capture -o <file> -e <string> [-c <string>] [-s <string>] [-d <string>] -o, --outfile=<file> Filename to write to. -e, --filterexp=<string> Filter expression, libpcap style -c, --capturedevice=<string> Capture device -s, --srcaddr=<string> Source IP address to be set -d, --dstaddr=<string> Destination IP address to be set -h, --help print this help and exit
Sample usage
./dataaggregator capture -e 'port 1110 || port 1120' -o /tmp/capturedpackets &
2) Timeslicer reads the MPE sections and MPE-FEC sections output by the encapsulator and creates corresponding MPEG2 transport stream packets
outputs timesliced MPEG2 transport stream data For the above file run by dataaggregator, it also need to be run by timeslicer
./timeslicer -n 1024 -g 8 -b 8 -d 100 -c 3 -o qpsk -p my_program_name:/tmp/captured/packetѕ > /tmp/myfifo &
Also we need to manually specify several parameters such as delta-T, the number of rows of the MPE-FEC frame and whether to use MPE-FEC or not.
yliu1@cs-nsl-11:/DVB-H/DVBH_Encapsulator$ ./timeslicer -h Usage: timeslicer [-h] [--fec] [-n [256, 512, 768, 1024 (default)]] -g [4, 8, 16, 32] -b [5, 7, 8] -d <int> -c [1, 2, 3, 5, 7] -o [qpsk, 16qam, 64qam] [-r <double>] -p [name:inputfile:PID] [-p [name:inputfile:PID]]... [-f <file>] --fec Use MPE-FEC -n, --numRows=[256, 512, 768, 1024 (default)] define number of rows in MPE-FEC frame -g, --guardInt=[4, 8, 16, 32] OFDM guard interval -b, --bandwidth=[5, 7, 8] OFDM bandwidth -d, --deltat=<int> delta-T value for *all* programs -c, --coderate=[1, 2, 3, 5, 7] coderate -o, --constellation=[qpsk, 16qam, 64qam] constellation -r, --nullrate=<double> the rate at which we insert nullpackets in the Ñtream. Defaults to 0.1. -p, --program=[name:inputfile:PID] add a timesliced program -f, --outfile=<file> the file to write the output to. Defaults to stdout -h, --help print this help and exit
Example:
timeslicer -n 1024 -g 8 -b 8 -d 90 -c 3 -o qpsk -r 0.1 -p myprog:mydir/myinputfile:0x666
This command starts a timeslicer with the following OFDM transmission parameters: guard interval is 1/8, bandwidth is 8 MHz, constellation is qpsk and code rate is 3/4. The DVB-H encapsulator creates MPE-FEC frames with 1024 rows and with a delta-T of 0.9 seconds. For every 10 data packets, 1 nullpacket is inserted (nullrate=0.1). There's one program named myprog. The data for this program is read from /mydir/myinputfile. This program uses PID 0x666.
Configure PSI/SI table
FATCAPS provides some basic code in Python for configuring PSI/SI table. Suppose we want to create a new PSI/SI, we need to do the following:
1) Create a new python file under /DVB-H/DVBH_Encapsulator/python-config-dvbh
Example: Suppose the file is called pat.py
import os from dvbobjects.PSI.PAT import * from dvbobjects.DVB.Descriptors import * import psimain sec = program_association_section( transport_stream_id = psimain.transport_stream1.transport_stream_id, program_loop = [ psimain.program1, psimain.program2, psimain.program3, psimain.program4, psimain.int_program, ], version_number = 1, section_number = 0, last_section_number = 0, elementary_PID = 0, filename = "pat", repeat_time = "40", #milliseconds )
2) Modify /DVB-H/DVBH_Encapsulator/python-config-dvbh/startgenerator.py to process the new python file Add the following code:
import pat UpdateSection(pat.sec) justdvbit.AddTableToNullShaper(pat.sec)
Global variables go to /DVB-H/DVBH_Encapsulator/python-config-dvbh/psimain.py. /DVB-H/DVBH_Encapsulator/python-config-dvbh/justdvbit.py is the central file that determines the order in which the single tools are called, we should normally not need to change this.