eti-tools
eti-tools copied to clipboard
ETI conversion software
eti-tools
This is a software collection for converting Ensemble Transport Interface used in terrestrial Digital Audio Broadcasting (DAB/DAB+/T-DMB).
The main purpose of these apps is to convert/manipulate ETI-NA/ETI-NI streams (by using pipelines). With these software tools you can create your own IceCast2 internet-radio server which will use your local DAB/DAB+ transmitter as source for the stations streams. You also can re-multiplex some (needed) stations from one ETI-stream to another by using ZeroMQ feature of the ni2http application and ODR-DabMUX.
This software also allows to receive and convert special formatted Satellite DAB(+) streams (so-called feeds) into regular ETI-NI which then can be used to play in dablin or even feed modulator software/hardware (check local laws!) or to create internet-station from that source.
Table of Content
-
Prerequisitions
-
Installation
-
Tools
- ts2na
- na2ni
- edi2eti
- fedi2eti
- bbfedi2eti
- mpe2ts, mpe2aac, mpe2mpa
- eti2zmq
- ni2out
-
Satellite DAB(+) feeds
-
Guide
- dvbstream
- dvblast
- tune-s2 and dvbstream
- tsduck
- Sat>IP (unmaintained)
Prerequisitions
Additional libraries which are needed:
-
git and g++
For Debian (incl. Ubuntu and derivates)
sudo apt-get install git g++
-
cmake (needed for libfec)
For Debian (incl. Ubuntu and derivates)
sudo apt-get install cmake
-
libfec - for Reed-Solomon FEC, may be enabled/disabled.
git clone https://github.com/Opendigitalradio/ka9q-fec.git cd ka9q-fec/ mkdir build cd build/ cmake .. make sudo make install
To clean the build directory type
rm -rf *
-
libshout - for ni2out converter (included in this package library is modified to support aac and raw streaming).
For Debian (incl. Ubuntu and derivates)
sudo apt-get install icecast2
and follow the instructions
-
libzmq - optional: for ZeroMQ output of ni2out-converter (possible re-mux of ETI-streams containing DAB/DAB+ streams). Uncomment it in
Makefile
if this option is needed (see below).For Debian (incl. Ubuntu and derivates)
sudo apt-get install libzmq3-dev
Installation
git clone https://github.com/piratfm/eti-tools.git
cd eti-tools/
If you need to enable ZeroMQ (see above): Make sure you have installed ZeroMQ and edit Makefile
and uncomment (= remove#
in front of) lines 23 and 24, then
make
sudo make install
In case you get this error
error while loading shared libraries: libfec.so.3
then refresh the library cache:
sudo ldconfig
ts2na
ts2na is an MPEG-TS to ETI-NA converter for satellite DAB(+) feeds.
ts2na_dreambox.c is a special version for Dreambox DM-500S which can be used to tune the frontend to a specific frequency. On a regular PC use dvbstream or MuMuDVB application to dump to ts2na
.
usage: ./ts2na [-p pid] [-s offset] [-i <inputfile>] [-o <outputfile>]
Default for offset
is 12 bytes. If you get
ERROR: Can't find sync
try one of these (currently in Europe used) values for offset
: 0, 12 or -3.
Default for pid
is 1062. Values for pid
can be any other PID carrying an ETI-NA stream (e.g. 1061). In case of negative offset (-s -3
, see above) this pid
argument will be ignored as the DVB-S stream itself is no valid transport stream.
The output stream will be raw PID content = ETI-NA (G.704). The parameter [-s offset] must be seen in an MPEG-TS dump, in most cases that is unused 0xFF at the beginning of the each TS-packet's payload.
ETI na2ni
na2ni is an ETI-NA (G.704) to ETI-NI (G.703) converter. This tool automatically detects E1-sync bits in bitstream and inversion flag. Also it extracts ETI-LI content of the stream and encapsulate it into ETI-NI frames. It is possible to disable Reed-Solomon error correction, then the conversion speed will be dramatically increased.
usage: ./na2ni [--no-fec] [-i <inputfile>] [-o <outputfile>]
The output stream will be 6144-bytes aligned raw ETI-NI stream (G.703)
ETI edi2eti
edi2eti is an EDI-AF or EDI-PF to ETI-NI converter. This tool automatically detects the AF/PF packet type. Maximal deinterleaving depth is set to 192ms in order to prevent high memory usage. It also extracts an ETI-LI content of the stream and encapsulate it into ETI-NI frames.
The tool is able to receive multicast data and save the converted stream into an ETI-file or publish it by ZeroMQ protcol. It is written to convert microwave links (WiFi or raw packet stream) to tcp-ZeroMQ stream useable by EasyDABv2 module. It can also be used for satellite feeds on Eutelsat 7° East.
usage: ./edi2eti [-o <outputfile|zeromq-uri>] [ip:port]
The output stream will be 6144-bytes aligned raw ETI-NI stream or local-port published ZeroMQ packet.
Sample of receiving multicast stream and convert it to ZeroMQ:
./edi2eti -o "zmq+tcp://*:18982" 232.20.10.1:12000
Sample of receiving multicast stream and save it to file:
./edi2eti -o "out.eti" 232.20.10.1:12000
ETI fedi2eti
fedi2eti is similar to edi2eti (see above), but it reads the input from a recorded transport stream file or stream and does not require a dvbnet connection.
usage: [input from file or stream] | ./fedi2eti 101 239.16.242.17 60017 | [output to dablin or ODR-DabMux]
If you want to input from a recorded file (for instance with the PID 101 from the German EDI transponder) use
cat foo.ts
ETI bbfedi2eti
bbfedi2eti is similar to edi2eti (see above), but it reads the input from a recorded baseband stream or stream (each bbframe starting with an added 0xB8 byte) that contain GSE UDP ipv4 data.
usage: [input from file or stream] | ./bbfedi2eti -dst-ip 239.199.2.8 -dst-port 60017 | [output to dablin or ODR-DabMux]
If you want to input from a recorded file use
cat foo.bbf
mpe2ts, mpe2aac, mpe2mpa
These are small tools to extract UDP radio streams via satellite.
usage: [input from file or stream] | ./mpe2aac [PID] [IP] [Port] | [output to e.g. vlc or mplayer]
ETI eti2zmq
eti2zmq is an ETI-NI to ZeroMQ converter. This tool plays a ETI-file and publishes it as server, just like ODR-DabMux. It simulates pseudo-realtime streaming by adding a proper delay between sent frames. It also allows to play files in a loop.
usage: ./eti2zmq [-i <input-file.eti>] -o <zeromq-uri>
The input stream must be 6144-bytes aligned raw ETI-NI.
Sample of playing "foo.eti" file in-a-loop with pseudo-realtime streaming and app's activity indication:
./eti2zmq -i foo.eti -a -l -d -o "zmq+tcp://*:18982"
ETI ni2out
ni2out (formerly called ni2http) is an ETI-NI converter. This tool converts an eti-stream to mp2 resp. AAC.
ETI-NI streams from terrestrial DAB(+) ensembles can also be created by eti-stuff or dabtools. For satellite feeds see above.
usage: ./ni2out [--list] [--delay] [-i <inputfile>] [-s <SID>]
Use --list
option to find SIDs and station names inside the ETI stream. If you wish to write the stream to stdout, then use ni2out --sid <SID>
.
The --delay
option has to be used for offline-relaying (from the file, not from the stream). So in that case the application will wait 24ms after each ETI frame in order to make pseudo-realtime streaming.
To get a list of audio service IDs, use ni2out --list -i <inputfile>
Satellite DAB(+) feeds
This is an exclusive list of satellite feeds that you can use with ts2na
, edi2eti
(both from these eti-tools
) or with tsniv2ni which works for ETI-NA(V.11).
Please note that you need eti-tools
from June 2018 or later for EDI.
DAB-Ensembles working with eti-tools
The format is MPEG-TS, which you have to convert into ETI-NA and then to ETI-NI.
Ensemble | Country | Sat | Freq | SR/FEC | Modulation | PID | SID | Offset |
---|---|---|---|---|---|---|---|---|
BBC DAB | UK | 28.2ºE | 11425H | 27500 2/3 | QPSK/DVB-S | 1061 | 10580 | 12 |
D1 DAB | UK | 28.2ºE | 11425H | 27500 2/3 | QPSK/DVB-S | 1062 | 10585 | 12 |
D1 Scotland | UK | 28.2ºE | 11425H | 27500 2/3 | QPSK/DVB-S | 1065 | 10586 | 12 |
SDL NATL | UK | 28.2ºE | 11425H | 27500 2/3 | QPSK/DVB-S | 1063 | 10590 | 12 |
D1 DAB | UK | 9.0ºE | 12092H | 27500 3/4 | 8PSK/DVB-S2 | 1062 | 1165 | 12 |
D1 Scotland | UK | 9.0ºE | 12092H | 27500 3/4 | 8PSK/DVB-S2 | 1065 | 1166 | 12 |
SDL NATL | UK | 9.0ºE | 12092H | 27500 3/4 | 8PSK/DVB-S2 | 1063 | 1170 | 12 |
RAI DAB+ | Italy | 5.0°W | 12564V | 35291 2/3 | 8PSK/DVB-S2 ACM Multistream 11 PLS: Root/16416 or PLS: Gold/131070 | 1000 | -- | 0 |
Notes:
- The RAI DAB+ only can received with a receiver/DVB card supporting ACM Multistream and higher SR.
- The mentioned transponder on Astra 28.2 East is the UK Spotbeam.
DAB-Ensembles working with eti-tools
The format is EDI.
Germany 7.0°E
7.0°E 12567V, Symbol rate 17015, FEC 2/3 in QPSK/DVB-S2 with PID 101 (which contains 15 ensembles in total).
Ensemble | IP-Address:Port |
---|---|
SWR Baden-Württemberg South (8A & 8D) | 239.132.1.50:5004 |
SWR Baden-Württemberg North (9D) | 239.132.1.51:5004 |
Rheinland-Pfalz (11A) | 239.132.1.52:5004 |
Oberfranken (10B) | 239.16.242.11:60011 |
Unterfranken (10A) | 239.16.242.13:60013 |
Oberpfalz (6C) | 239.16.242.14:60014 |
Niederbayern (7D) | 239.16.242.16:60016 |
Bayern (11D) | 239.16.242.17:60017 |
Oberbayern & Schwaben (10A) | 239.16.242.15:60015 |
hr radio Hessen (7B) | 239.192.254.200:10000 |
NDR Schleswig-Holstein, Kiel (9C) | 239.229.96.33:50000 |
NDR Niedersachsen, Braunschweig (11B) | 239.229.96.42:50000 |
NDR Mecklenburg-Vorpommern, Schwerin (12B) | 239.229.96.43:50000 |
Allgäu-Donau-Iller (8B) | 239.128.57.20:50020 |
Oberbayern South (7A) | 239.128.58.20:50020 |
:information_source: Hint: If you get regular error like that
[date and time] EDI: Unknown TAG Fptt
or
[date and time] EDI: Unknown TAG avtm
on some multiplexes, then you can avoid this by redirecting the output to the null device, for example:
fedi2eti 101 239.128.57.20 50020 2> /dev/null | dablin_gtk
Germany
19.2°E 11604V Symbol rate 2200 FEC 3/4 in QPSK/DVB-S with PID 3000
Ensemble | IP-Address:Port |
---|---|
WDR 11D | 228.10.1.5:10010 |
WDR 9A | 228.10.2.5:10010 |
France
5°W, 11461H Symbol rate 5780 FEC 2/3 in QPSK/DVB-S2 with PID 301
Ensemble | IP-Address:Port |
---|---|
Métropolitain 1 | 239.0.1.11:5001 |
Métropolitain 2 | 239.0.1.12:5002 |
UK
10°E, 11221V Symbol rate 30000 FEC 5/6 in QPSK/DVB-S2 with PID 701
Ensemble | IP-Address:Port |
---|---|
Salisbury | 239.232.1.201:2048 |
DAB-Ensembles in DVB-GSE
The format is EDI, but the reception is limited to very few (professional) equipment containing an STiD135 chip, like TBS 6903-X or Digital Devices Cine S2 V7A (both for PCIe only), as this is DVB-GSE.
Note: For TBS 6903-X you need to tune the signal in Linux as the Windows driver is buggy. And you also need to create the file /etc/modprobe.d/stid135.conf
(as root) with the following content:
added options stid135 bbframe=1
:warning: All other cards using a different chip (including the popular TBS 5927) cannot handle the bbframes at all and will not work for GSE streams. You might only get some fragments, but not a continuous data stream. |
---|
For processing you need pts2bbf from https://github.com/newspaperman/bbframe-tools (see Readme there) and bbfedi2eti from this repository.
Norway
1.0ºW, 10717V, SR 5400, FEC 3/4 in DVB-S2/8PSK, MIS=171 DVB-GSE
Ensemble | IP-Address:Port |
---|---|
NRK Reg1 OsloVik | 239.199.2.1:1234 |
NRK Reg2 VeTeVik | 239.199.2.2:1234 |
NRK Reg3 SørRog | 239.199.2.3:1234 |
NRK Reg4 Vest | 239.199.2.4:1234 |
NRK Reg5 Innland | 239.199.2.5:1234 |
NRK Reg6 TrøMøRo | 239.199.2.6:1234 |
NRK Reg7 NoTrFi | 239.199.2.7:1234 |
Riks (12D) | 239.199.2.8:1234 |
Germany
23.5°E, 12641V, SR 1500, FEC 2/3 in DVB-S2/8PSK, multistream, DVB-GSE
Ensemble | MIS | IP-Address:Port |
---|---|---|
Bundesmux 1 | MIS 1 | 239.128.43.43:50043 |
Bundesmux 2 | MIS 2 | 239.128.72.10:50010 |
:information_source: Hint: If you get regular error like that
[date and time] EDI: Unknown TAG Fptt
on Bundesmux 2, then you can avoid this by redirecting the output to the null device:
bbfedi2eti -dst-ip 239.128.72.10 -dst-port 50010 2> /dev/null | dablin_gtk
Ensembles working with tsniv2ni
The format is ETI-NA(V.11)
Ensemble | Country | Sat | Freq | SR/FEC | Modulation | PID |
---|---|---|---|---|---|---|
ERT DAB | Greece | 39ºE | 12242H | 13380 3/4 | QPSK/DVB-S2 | 1010 |
DAB Italia | Italy | 9ºE | 11727V | 30000 3/4 | 8PSK/DVB-S2 | 7031 |
EuroDAB Italia | Italy | 9ºE | 11727V | 30000 3/4 | 8PSK/DVB-S2 | 7131 |
Guide
If you want to listen to one of these feeds, here's a guide how to do it (see below for some examples):
dvbstream
dvbstream -f 12092000 -s 27500 1063 -p H -o | ts2na -s 12 -p 1063 | na2ni | ni2out --list
for UK's SDL National Mux on 9°E or
dvbstream -f 12242000 -s 13380 1010 -p H -o | tsniv2ni 1010 | ni2out --list
for the Greek Mux on 39°E.
Please consider to add -D x
(which stands for DiSEqC) if you have more than one LNB.
You can hear the German EDI streams even without setting up a DVB network connection with fedi2eti
:
dvbstream -f 12567000 -s 17015 101 -p V -o | fedi2eti 101 239.16.242.17 60017 | dablin_gtk
for the Bayern Mux and output it to dablin_gtk.
dvblast
dvblast -s 5400000 -v 13 -f 10720000 -m psk_8 -3 -a 0 -1 171 -u > /tmp/nrk.ts
for the NRK Transponder using a suitable card (like Cine V7A or TBS6903x) and save the output into a file.
dvblast -s 35291000 -v 13 -f 12564000 -m psk_8 -3 -a 0 --multistream-id-is-id 11 -u --multistream-id-pls-mode GOLD --multistream-id-pls-code 131070 | dd if=/dev/stdin skip=188 | ts2na -p 1000 -s 0 | na2ni | dablin_gtk -L
for the multistream transponder of RAI using Adapter 0 and piping to dablin_gtk
with option -L
.
Remark: The first TS frame (188 bytes) is skipped in this example as the header might be corrupt otherwise.
tune-s2 and dvbstream
tune-s2 10717 V 5400 -system DVB-S2 -modulation 8PSK -fec 3/4 -lnb UNIVERSAL -mis 171
and in a second console
dvbstream -o 8192 > /tmp/nrk.ts
for the NRK transponder and save its output to a file.
tune-s2 11461 H 5780 -fec 2/3 -modulation QPSK S2 -lnb UNIVERSAL
and in a second console
dvbstream -o 301 | fedi2eti 301 239.0.1.11 5001 | dablin_gtk
to tune to the French transponder on 5°W, then stream PID 301, extract one DAB mux (which is in UDP) with fedi2eti
and listen to it in dablin_gtk
.
tsduck
tsp -I dvb -a 2 --delivery-system DVB-S2 --fec-inner 2/3 --frequency 12564000000 --isi 11 --modulation 8-PSK --pls-code 131070 --pls-mode GOLD --polarity vertical --symbol-rate 35291000 | dd if=/dev/stdin skip=188 | ts2na -p 1000 -s 0 | na2ni | dablin_gtk
for the multistream transponder of RAI on 5°W using Adapter 2 and listen in dablin_gtk
.
Remark: The first TS frame (188 bytes) is skipped in this example as the header might be corrupt otherwise.
Alternative
SAT>IP
You need to capture the feed with a SAT tuner. Our recommendation is to use one of them to stream the feed to a multicast address. Then you can use this stream from any computer in your network (not only the one with the SAT tuner).
If your SAT tuner is a SAT>IP server, then use this URI for getting an MPEG-TS with the three DAB bitstreams present on 9ºE:
satip://server:554/?src=1&freq=12092&pol=h&msys=dvbs&mtype=8psk&sr=27500&fec=34 &pids=0,1,16,17,18,20,1061,1062,1063,5060,5070,5080"
Here an "all-in-one" example:
Server
Using the DVBlast tool in a computer with a DVB-S2 tuner, for streaming all three DAB ensembles from 9ºE in 12303-H, to the multicast address udp://@239.1.1.10:1234 from the source address 192.168.1.33 (IP of this computer):
dvblast -f 12092000 -s 27500000 -v 18 -5 DVBS2 -S 1 -m psk_8 -d "239.1.1.10:[email protected]/udp 1 0 0,1,16,17,18,20,1062,1063,1065,5060,5070,5080"
Client
Use DABlin to consume the MPEG-TS from udp://@239.1.1.10:1234 and tune the ensemble "D1 DAB" at pid 1062:
socat UDP4-RECV:5018,bind=239.1.1.10,ip-add-membership=239.1.1.10:eth0,reuseaddr - | ts2na -p 1062 -s 12 | na2ni | dablin_gtk