Difference between revisions of "Time slicing in DVB-H"
Line 108: | Line 108: | ||
/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 |
Revision as of 10:49, 26 May 2008
Four components:
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.
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