Time slicing in DVB-H

From NMSL

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.