Howto receive DVB-H in Vienna

At the time of writing there was an ongoing DVB-H trial in Vienna on UHF channel 36 (center frequency 594 MHz).

DVB-H screenshot
DVB-H is just a variant of DVB-T, so my idea was to use a DVB-T USB stick to receive DVB-H on my Linux-PC.

(1)
The first thing to do is get a working DVB-T configuration. This is rather straight forward as long as a device driver for Linux available. The biggest problem is get a working firmware. In my case I needed dvb-usb-wt220u-zl0353-01.fw for a Wideview stick (bought as “dnt Eurostick”).

(2)

Tune to the correct frequency. This is channel 36 (equivalent to a center frequency of 594 MHz). You can find a frequency table at
http://www.zlabinger.at/tech/dvb/dvbchannels.html

dvbtune -f 594000
Using DVB card “WideView USB DVB-T”
tuning DVB-T (in United Kingdom) to 594000000 Hz
polling….
Getting frontend event
FE_STATUS:
polling….
Getting frontend event
FE_STATUS: FE_HAS_SIGNAL FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_VITERBI FE_HAS_SYNC
Bit error rate: 0
Signal strength: 13878
SNR: 58082
FE_STATUS: FE_HAS_SIGNAL FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_VITERBI FE_HAS_SYNC

(3)

Next is to scan for interesting PIDs:
# scan -c
using ‘/dev/dvb/adapter0/frontend0′ and ‘/dev/dvb/adapter0/demux0′
0×0000 0×2bbb: pmt_pid 0×00c8 OpenMux — Int Table (running)
0×0000 0×2b8e: pmt_pid 0×00b4 OpenMux IP Gateway — ORF1 (running)
0×0000 0×2b8f: pmt_pid 0×00b5 OpenMux IP Gateway — ORF2 (running)
0×0000 0×2b90: pmt_pid 0×00b6 OpenMux IP Gateway — ATV (running)
0×0000 0×2b91: pmt_pid 0×00b7 OpenMux IP Gateway — MTV-Mobilkom1 (running)
0×0000 0×2b95: pmt_pid 0×00bd OpenMux IP Gateway — OE3 (running)
0×0000 0×2b96: pmt_pid 0×00bf OpenMux IP Gateway — OE2W (running)
0×0000 0×2b93: pmt_pid 0×00b9 OpenMux IP Gateway — H3G1 (running)
0×0000 0×2b94: pmt_pid 0×00ba OpenMux IP Gateway — H3G2 (running)
0×0000 0×2bbc: pmt_pid 0×00c4 OpenMux IP Gateway — ESG ORS (running)
0×0000 0×2b97: pmt_pid 0×00c0 OpenMux IP Gateway — FM4 (running)
0×0000 0×2ba2: pmt_pid 0×00b8 OpenMux IP Gateway — ORF Mobil (running)
dumping lists (12 services)
Int Table (0×2bbb) 80:
ORF1 (0×2b8e) 0c:
ORF2 (0×2b8f) 0c:
ATV (0×2b90) 0c:
MTV-Mobilkom1 (0×2b91) 0c:
OE3 (0×2b95) 0c:
OE2W (0×2b96) 0c:
H3G1 (0×2b93) 0c:
H3G2 (0×2b94) 0c:
ESG ORS (0×2bbc) 0c:
FM4 (0×2b97) 0c:
ORF Mobil (0×2ba2) 0c:
Done.
#

(4)

The same can be achieved with “dvbsnoop”:

dvbsnoop -s pidscan
dvbsnoop V1.4.00 — http://dvbsnoop.sourceforge.net/

———————————————————
Transponder PID-Scan…
———————————————————
PID found: 0 (0×0000) [SECTION: Program Association Table (PAT)]
PID found: 16 (0×0010) [SECTION: Network Information Table (NIT) - actual network]
PID found: 17 (0×0011) [SECTION: Service Description Table (SDT) - actual transport stream]
PID found: 20 (0×0014) [SECTION: Time Date Table (TDT)]
PID found: 21 (0×0015) [SECTION: ITU-T Rec. H.222.0|ISO/IEC13818 reserved]
PID found: 181 (0×00b5) [SECTION: Program Map Table (PMT)]
PID found: 182 (0×00b6) [SECTION: Program Map Table (PMT)]
PID found: 183 (0×00b7) [SECTION: Program Map Table (PMT)]
PID found: 184 (0×00b8) [SECTION: Program Map Table (PMT)]
PID found: 185 (0×00b9) [SECTION: Program Map Table (PMT)]
PID found: 186 (0×00ba) [SECTION: Program Map Table (PMT)]
PID found: 196 (0×00c4) [SECTION: Program Map Table (PMT)]
PID found: 1200 (0×04b0) [SECTION: IP/MAC Notification Table (INT) [EN 301 192]]
PID found: 8191 (0×1fff)

(5)
By scanning an arbitrary service the Elementary PID (the one the actual IP traffic is on) can be found:

– dvbsnoop -spiderpid 183
dvbsnoop V1.4.00 — http://dvbsnoop.sourceforge.net/

————————————————————
SECT-Packet: 00000001 PID: 183 (0×00b7), Length: 28 (0×001c)
Time received: Fri 2007-03-30 00:14:18.451
————————————————————
0000: 02 b0 19 2b 91 c1 00 00 ff ff f0 00 90 e4 74 f0 …+……….t.
0010: 07 52 01 01 66 02 00 05 69 53 80 20 .R..f…iS.

PID: 183 (0×00b7)
Guess table from table id…
PMT-decoding….
Table_ID: 2 (0×02) [= Program Map Table (PMT)]
section_syntax_indicator: 1 (0×01)
(fixed ‘0′): 0 (0×00)
reserved_1: 3 (0×03)
Section_length: 25 (0×0019)
Program_number: 11153 (0×2b91)
reserved_2: 3 (0×03)
Version_number: 0 (0×00)
current_next_indicator: 1 (0×01) [= valid now]
Section_number: 0 (0×00)
Last_Section_number: 0 (0×00)
reserved_3: 7 (0×07)
PCR PID: 8191 (0×1fff)
reserved_4: 15 (0×0f)
Program_info_length: 0 (0×0000)

Stream_type loop:

Stream_type: 144 (0×90) [= User private]
reserved_1: 7 (0×07)
Elementary_PID: 1140 (0×0474)
reserved_2: 15 (0×0f)
ES_info_length: 7 (0×0007)

DVB-DescriptorTag: 82 (0×52) [= stream_identifier_descriptor]
Descriptor_length: 1 (0×01)
component_tag: 1 (0×01)

DVB-DescriptorTag: 102 (0×66) [= data_broadcast_id_descriptor]
Descriptor_length: 2 (0×02)
Data_broadcast_ID: 5 (0×0005) [= Multi protocol encapsulation]

CRC: 1767079968 (0×69538020)
==========================================================

#

(6)

Now let us perform a test to see if that PID is actually present:

dvbsnoop -spiderpid 1140
dvbsnoop V1.4.00 — http://dvbsnoop.sourceforge.net/

————————————————————
SECT-Packet: 00000001 PID: 1140 (0×0474), Length: 996 (0×03e4)
Time received: Fri 2007-03-30 00:15:34.630
————————————————————
0000: 3e b3 e1 0d e1 c1 00 00 0c 80 00 00 45 00 03 d4 >………..E…
0010: 68 70 00 00 07 11 d3 96 ac 16 05 0d e1 e1 e1 0d hp…………..
0020: c0 12 04 4c 03 c0 dd f5 80 e0 5a 1e fa b3 d3 8d …L……Z…..
(…) 03d0: 8e 91 da df 06 f9 42 54 2c 90 bf 5e 2a 7f f7 c0 ……BT,..^*…
03e0: 9c ee 8a fd ….

PID: 1140 (0×0474)
Guess table from table id…
DSM-CC DATAGRAM-decoding….
Table_ID: 62 (0×3e) [= DSM-CC - private data section // DVB datagram]
section_syntax_indicator: 1 (0×01)
private_indicator: 0 (0×00)
reserved_1: 3 (0×03)
Section_length: 993 (0×03e1)
MACaddrbyte/DevicdID 6: 13 (0×0d)
MACaddrbyte/DeviceID 5: 225 (0xe1)
reserved_2: 3 (0×03)
payload_scrambling_control: 0 (0×00) [= unscrambled]
address_scrambling_control: 0 (0×00) [= unscrambled]
LLC_SNAP_flag: 0 (0×00)
current_next_indicator: 1 (0×01) [= valid now]
Section_number: 0 (0×00)
Last_Section_number: 0 (0×00)
MACaddrbyte/DeviceID 4: 12 (0×0c)
MACaddrbyte/DeviceID 3: 128 (0×80)
MACaddrbyte/DeviceID 2: 0 (0×00)
MACaddrbyte/DeviceID 1: 0 (0×00) => MAC-Address/DeviceID: 00:00:80:0c:e1:0d
IP_datagram_bytes
0000: 45 00 03 d4 68 70 00 00 07 11 d3 96 ac 16 05 0d E…hp……….
0010: e1 e1 e1 0d c0 12 04 4c 03 c0 dd f5 80 e0 5a 1e …….L……Z.
(…)

(7)

Before we can create a network interface using this PID (to listen to FM4) we have get a description of the service, the so called SDP-file. This file can be found on PID 1200 [I forgot how I found this PID, possibly by guessing..]

dvbsnoop -b 1201 > pid1201.txt

In this file some XML structure can be found, somewhere in the middle there is the SDP for FM4:

v=0
o=- 1284305069 1139040522 IN IP4 192.168.250.2
s=realtimeaudio
c=IN IP4 226.226.0.2
a=control:*
a=range:npt=0.0-
a=ISMA-compliance:1,1.0,1
a=mpeg4-iod: “data:application/mpeg4-iod;base64,AoEHAA///w///wN+AAFAYGRhdGE6YXBwbGljYXRpb24vbXBlZzQtb2QtYXU7YmFzZTY0LEFTb0JLQUtmQXlRRDZBVUVEVUFWQUFZQUFBZ1RNQUFCdFlBR0VBQkVBQUNzUkFBQXJFUWdJQUFBQUFNPQQNAgUAAQAAAAAAAAAAAAYJAQAAAAAAAAAA”
m=audio 9030 RTP/AVP 101
b=AS:112
a=rtpmap:101 mpeg4-generic/44100/2
a=control:trackID=1000
a=fmtp:101 streamtype=5; profile-level-id=15; bitrate=112000; config=1210; sizelength=13; indexlength=3; indexdeltalength=3; profile=1; mode=AAC-hbr
a=mpeg4-esid:1000

(8)

So now it is time to create a network interface using this PID:

dvbnet -p 1175

(9)

Next is to configure the network interface to promiscous mode (the destionation MAC should be ff:ff:.. but is “abused” by the DVB-H standard to carry time-slicing information.
ifconfig dvb0_0 10.11.12.13 promisc up

The IP address is without any meaning (to me), but it is mandatory for the next command to succeed.

(10)

route add -net 224.0.0.0/4 dev dvb0_0

This sets the default route for multicast traffic.
(11)

vlc -vvv myservice.sdp

Not you should be able to listen. If not – maybe you need a different kernel. I succeded with Fedora core 6 and failed with Knoppix.

(12)

The default buffer value of 300ms in vlc is too short for the time slicing used in DVB-H. A value of 3000ms or more (10s) is suggested.

With Input/Codecs -> Access modules -> UDP/RTP -> Caching value set to 3000 ms, the errors you will notice otherwise will be gone.
(13)

Good luck!

Update March 2008: In February 2008 the DVB-H trial ended. Soon after new 10-year-licenses were issued to a consortium around Media Broadcast. It is intended to start commercial operation in June (in time for the euro-2008 soccer-championships). But the new programming will probably be encrypted.

4 Responses to “Howto receive DVB-H in Vienna”

  1. wdragon says:

    Hi !.
    I am studying about DVB-H.
    Can’you send me the DVB-H Transport Stream by Email ?
    Thanks in advance for your reply,

    wdragon

  2. Francesc Pinyol Margalef says:

    Hi!
    In (10), shouldn’t it be?:

    route add -net 224.0.0.0/4 dev dvb0_0

    (or route add -net 224.0.0.0 netmask 240.0.0.0 dev dvb0_0)

    According to IANA (http://www.iana.org/assignments/multicast-addresses/dvb),
    multicast addresses are in the range from 224.0.0.0 through 239.255.255.255.

    [Dietmar: Thank you, there was a typo in the article, now I have fixed this.]

  3. ernst says:

    is this still possible? imho pids have changed, and i don’t know where to get sdps from…

  4. dietmar says:

    Re: ernst:
    No, I don’t think so, but I did not try it again. IMHO the service is encrypted, so there is no point in receiving it with a DVB-T stick.

Leave a Reply

IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)

What is 7 x 10 ?
Please leave these two fields as-is: