Difference between revisions of "Time slicing in DVB-H"

From NMSL
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
== Four components: ==
+
== Four components of Testbed: ==
  
 
Just-DVB Open source software --- used to get DVB-T signal
 
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
 
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)
 
DTA-110T PCI card ---send the DVB-H signal to the target client (Nokia N92)
 +
 
Nokia N92 --- the receiving device  
 
Nokia N92 --- the receiving device  
  
Line 108: Line 111:
 
/DVB-H/DVBH_Encapsulator/python-config-dvbh/justdvbit.py is the central file that determines the order in which the
 
/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.
 
single tools are called, we should normally not need to change this.
 
 
== PSI/SI and DVB network ==
 
A DVB network is uniquely identified by a network_id. A DVB network consist of one or more Transport Streams
 
(TS), each carrying a multiplex and being transmitted by one or more DVB signals. Information about a DVB network
 
is available within the NIT sub_table (identified by network_id). The NIT lists all multiplexes and DVB signals
 
available within the DVB network. The NIT is carried within each DVB network.
 
 
PSI contains the following tables:
 
PAT(Program Association Table):The PAT lists PIDs for all PMTs in the stream. TS Packets containing PAT information always have PID 0x0.
 
 
PMT(Program Map Table):contain information about programs. For each program, there is a PMT.
 
 
NIT(Network Information Table): provides information about the multiplexes and transport streams on a given network. Information about the current network uses table_id of 0x40, that about other networks uses table_id of 0x41
 
 
CAT(Conditional Access Table):This table is used for conditional access to the streams. This table provides association with EMM stream.
 
 
 
== How a mobile TV receiver using PSI/SI table to find the first time-slicing bursts ==
 
more detail will be added
 
 
 
== How a mobile TV receiver switch channels ==
 
channel switch request is initiated via a user interface. This causes a mobile broadcast receiver to switch from the first channel to the second channel.
 
more detail will be added,  e.g how PSI/SI control this
 

Latest revision as of 23:45, 1 June 2008

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.