Streamování DVB-T v místní síti s MuMuDVB

Přidáno 12. října 2013, 14:53

Nemoc a ležení v pelechu bez TV mi vnuklo myšlenku, že bych TV mohl sledovat na notebooku po domácí síti. Ve skutečnosti mi prvotní myšlenku vnukl článek VLC a streamování DVB-T v domácí síti, nemoc byla až jako důvod proč to zkusit.

Nicméně postup dle článku se mi nezdařil. Ztroskotal jsem na tom, že v LTS verzi Ubuntu (12.04) už je knihovna libdvbpsi7, která se stará nějak o multiplex, nebo streamování či co. Výsledkem bylo, že to prostě nechodilo. Chyba se nevyskytuje v libdvbpsi8, ale ani po ruční kompilaci to nefungovalo. Ruční kompilace VLC taky nepomohla. Ale našel jsem někde v diskuzi odkaz na MuMuDVB.

Bohužel jsem se zbytečně trápil s verzí 1.6 z repozitáře. Bohužel, protože ta nepodporovala nastavení, která jsou vcelku pečlivě zanesena v dokumentaci. Až po stažení zdrojových kódů a kompilaci se stal zázrak. Mimo jiné se zázračně rozjela i autokonfigurace.

Nevím proč, ale nepodařilo se mi rozjet multicast, takže jsem se dal na unicast a nastavil vše ručně, protože automaticky se to sice nastavilo, ale sledování se mi nedařilo. K manuálnímu nastavení bylo třeba znát jen frekvence multiplexů a PID programů. Frekvence se dají zjistit:

w_scan -x > scan.txt

Dostanem něco ve smyslu:
#------------------------------------------------------------------------------
# file automatically generated by w_scan
# (http://wirbel.htpc-forum.de/w_scan/index2.html)
#!  20111203 1 0 OFDM CZ 
#------------------------------------------------------------------------------
# location and provider: 
# date (yyyy-mm-dd)    : 2013-10-12
# provided by (opt)    : 
#
# T[2]         [# comment]
#------------------------------------------------------------------------------
T 474000000 8MHz  7/8 NONE    QAM64   2k 1/32 NONE	# UPC_DVBT
T 482000000 8MHz  7/8 NONE    QAM64   2k 1/32 NONE	# UPC_DVBT
T 490000000 8MHz  7/8 NONE    QAM64   2k 1/32 NONE	# UPC_DVBT
T 498000000 8MHz  7/8 NONE    QAM64   2k 1/32 NONE	# UPC_DVBT
T 506000000 8MHz  7/8 NONE    QAM64   2k 1/32 NONE	# UPC_DVBT
T 514000000 8MHz  7/8 NONE    QAM64   2k 1/32 NONE	# UPC_DVBT

A PID jednotlivých programů už z toho vytluče např:
scan -o pids scan.txt > pids.txt

Výsledek:
UPC Express             (0x2712) 01: PCR == V   V 0x0501 A 0x0502       TT 0x0503
CT 1                     (0x2af9) 01: PCR == V   V 0x044d A 0x044e (cze) TT 0x044f
CT 2                     (0x2afa) 01: PCR == V   V 0x04b1 A 0x04b2 (cze) TT 0x04b3
CT 24                    (0x2afb) 01: PCR == V   V 0x0515 A 0x0516 (cze) 0x0517 (cze) TT 0x0518
CT sport                 (0x2afc) 01: PCR == V   V 0x0579 A 0x057a (cze) 0x057b (cze) TT 0x057c
CT D / CT art            (0x2afd) 01: PCR == V   V 0x05dd A 0x05de (cze) 0x05df (cze) TT 0x002a
radio CRo Radiozurnal    (0x2b0d) 02: PCR == A            A 0x0713 (cze)
radio CRo Dvojka         (0x2b0e) 02: PCR == A            A 0x071d (cze)
radio CRo Vltava         (0x2b0f) 02: PCR == A            A 0x0727 (cze)
radio Wave               (0x2b10) 02: PCR == A            A 0x0731 (cze)
radio CRo D-dur          (0x2b11) 02: PCR == A            A 0x073b (cze)
radio Junior             (0x2b12) 02: PCR == A            A 0x0745 (cze)
radio CRo Jazz / Plus    (0x2b13) 02: PCR == A            A 0x074f (cze)
Nova                     (0x2ee1) 01: PCR == V   V 0x00d1 A 0x00d2 (CZE) 0x00d3 (CZE) TT 0x00d4
Nova Cinema              (0x2ee2) 01: PCR == V   V 0x0491 A 0x0492 (cze) TT 0x0493
Prima                    (0x2ee3) 01: PCR == V   V 0x00e1 A 0x00e2 (cze) TT 0x00e3
Prima COOL               (0x2ee4) 01: PCR == V   V 0x04d1 A 0x04d2 (CZE) TT 0x04d3
Barrandov TV             (0x2ee5) 01: PCR == V   V 0x0151 A 0x0152 (CZE) 0x0153 (CZE) TT 0x0154
Ocko                     (0x2ee6) 01: PCR == V   V 0x0161 A 0x0162 (cze)
FANDA                    (0x2ee7) 01: PCR == V   V 0x0481 A 0x0482 (cze) TT 0x0483
CT1 HD                   (0x32c9) 01: PCR == V   V 0x07a1 A 0x07a2 (cze) TT 0x07a4 AC3 0x07a3
Nova HD                  (0x32ca) 01: PCR == V   V 0x0831 A 0x0832 (cze) TT 0x0834 AC3 0x0833
Prima HD                 (0x32cb) 01: PCR == V   V 0x0851 TT 0x0853 AC3 0x0852
CT2 HD                   (0x36b1) 01: PCR == V   V 0x07b1 A 0x07b2 (cze) TT 0x07b3
CT sport HD              (0x36b2) 01: PCR == V   V 0x0791 A 0x0792 (cze) TT 0x0794 AC3 0x0793
HD+                      (0x36b3) 01: PCR == V   V 0x0971 A 0x0972 (CZE)
Telka                    (0x3a99) 01: PCR == V   V 0x0471 A 0x0472 (cze) TT 0x0473
POHODA - RELAX           (0x3a9a) 01: PCR == V   V 0x0981 A 0x0982 (cze)
Slagr TV                 (0x3a9b) 01: PCR == V   V 0x09d1 A 0x09d2 (cze)
Smichov                  (0x3a9c) 01: PCR == V   V 0x04a1 A 0x04a2 (cze) TT 0x04a3
Prima ZOOM               (0x3a9d) 01: PCR == V   V 0x04c1 A 0x04c2 (cze)
regionalni televize.cz   (0x3a9e) 01: PCR == V   V 0x09c1 A 0x09c2 (eng)
Prima love               (0x3a9f) 01: PCR == V   V 0x04b1 A 0x04b2 (cze) TT 0x04b3
Barrandov TV HD          (0x3e81) 01: PCR == V   V 0x0ab1 A 0x0ab2 (cze)
Ocko Gold                (0x3e82) 01: PCR == V   V 0x01c1 A 0x01c2 (cze)
Kino Svet                (0x3e83) 01: PCR == V   V 0x0191 A 0x0192 (cze)
POHODA - REBEL           (0x3e84) 01: PCR == V   V 0x0921 A 0x0922 (cze)
Fajnrock TV              (0x3e85) 01: PCR == V   V 0x0391 A 0x0392      
rezerva                  (0x3e86) 01: PCR == V   V 0x1c85 A 0x1c8f (eng)

Vše je tedy v šestnáctkové soustavě, takže bude nutné si vše přepočítat, nebo lépe to nechat za sebe přepočítat třeba kalkulačku ,)

Ve výsledku pro ČT1 v mém případě budou PID: 1101, 1102, 1103

Jednoznačné přiřazení frekvence ke kanálu ukáže například výsledek:

w_scan -M > channels.conf

Pak už jsem si jen připravil konfigurační soubor pro každý multiplex zvlášť (nebo aspoň to co mne potenciálně zajímá).

Takže nový konfigurační soubor pro frekvenci 474MHz dvb474.mumu má obsah:

freq=474
multicast=0
unicast=1
port_http=1234
ip_http=192.168.1.10
sap=0
card=0

ip=192.168.1.10
channel_next
name=CT1
unicast_port=8001
pids=1101, 1102, 1103

ip=192.168.1.10	
channel_next
name=CT2
unicast_port=8002
pids=1201, 1202, 1203

ip=192.168.1.10	
channel_next
name=CT 24
unicast_port=8003
pids=1301, 1302, 1303, 1304

ip=192.168.1.10	
channel_next
name=CT sport
unicast_port=8004
pids=1401, 1402, 1403, 1404

ip=192.168.1.10	
channel_next
name=CT D / CT art
unicast_port=8005
pids=1501, 1502, 1503, 42

A ještě dvb482.mumu:
freq=482
multicast=0
unicast=1
port_http=1234
ip_http=192.168.1.10
sap=0
card=0

channel_next
name=NOVA
unicast_port=8001
pids=209, 210, 211, 212

channel_next
name=NOVA CINEMA
unicast_port=8002
pids=1169, 1170, 1171

channel_next
name=Prima
unicast_port=8003
pids=225, 226, 227

channel_next
name=Prima COOL
unicast_port=8004
pids=1233, 1234, 1235

channel_next
name=Barandov TV
unicast_port=8005
pids=337, 338, 339, 340

channel_next
name=Ocko
unicast_port=8006
pids=353, 354

channel_next
name=FANDA
unicast_port=8007
pids=1153, 1154, 1155

První část jsem někde obšlehl a funguje, tak jsem jí radši moc neměnil. Každopádně řešení je funkční a šlape relativně dobře i přes wifi, což je právě úzké hrdlo. Závisí na signálu. Ale vzhledem k tomu, že to mám spíš k tomu, aby mi tu něco běželo, když nevím, jestli se mi chce nebo nechce spát, tak mi to stačí ,) A tímhle zápiskem jsem si pojistil ztrátu konfiguračních souborů pro případ náhlé reinstalace systému, či jiných pohrom :) Nakonec vše vypadá nějak takhle:

xxxx@xxxxxxx ~ $ /usr/local/bin/mumudvb -d -c dvb474.mumu
MuMuDVB Version 1.7.1
 --- Build information ---
Built with CAM support.
Built without transcoding support.
Built with ATSC support.
Built with ATSC long channel names support.
Built with support for DVB API Version 5.
---------
Originally based on dvbstream 0.6 by (C) Dave Chapman 2001-2004
Released under the GPL.
Latest version available from http://mumudvb.braice.net/
Project from the cr@ns (http://www.crans.org)
by Brice DUBOST (mumudvb@braice.net)

WARN:  Unicast :  You have enabled the support for HTTP Unicast. This feature is quite youg, please report any bug/comment
Info:  Main:  channel next
Info:  Main:  channel next
Info:  Main:  channel next
Info:  Main:  channel next
Info:  Main:  channel next
Info:  Main:  ========== End of configuration, MuMuDVB version 1.7.1 is starting ==========
WARN:  Main:  Can't create /var/run/mumudvb/channels_streamed_adapter0_tuner0: No such file or directory
WARN:  Main:  Can't create /var/run/mumudvb/channels_unstreamed_adapter0_tuner0: No such file or directory
Info:  Main:  Streaming. Freq 474000
Info:  Tune:  Using DVB card "Afatech AF9013 DVB-T" tuner 0
Info:  Tune:  Tuning DVB-T to 474000000 Hz, Bandwidth: 8000000
Info:  Tune:  FE_STATUS:
Info:  Tune:  FE_STATUS:
Info:  Tune:       FE_HAS_SIGNAL : found something above the noise level
Info:  Tune:       FE_HAS_CARRIER : found a DVB signal
Info:  Tune:       FE_HAS_VITERBI : FEC is stable
Info:  Tune:       FE_HAS_SYNC : found sync bytes
Info:  Tune:       FE_HAS_LOCK : everything's working... 
Info:  Tune:  Event:  Frequency: 474000000
Info:  Tune:  Bit error rate: 0
Info:  Tune:  Signal strength: 32175
Info:  Tune:  SNR: 120
Info:  Tune:  FE_STATUS:
Info:  Tune:       FE_HAS_SIGNAL : found something above the noise level
Info:  Tune:       FE_HAS_CARRIER : found a DVB signal
Info:  Tune:       FE_HAS_VITERBI : FEC is stable
Info:  Tune:       FE_HAS_SYNC : found sync bytes
Info:  Tune:       FE_HAS_LOCK : everything's working... 
Info:  Main:  Card 0, tuner 0 tuned
Info:  Unicast:  We open the Master http socket for address 192.168.1.10:1234
Info:  Unicast:  We open the channel 0 http socket address 192.168.1.10:8001
Info:  Unicast:  We open the channel 1 http socket address 192.168.1.10:8002
Info:  Unicast:  We open the channel 2 http socket address 192.168.1.10:8003
Info:  Unicast:  We open the channel 3 http socket address 192.168.1.10:8004
Info:  Unicast:  We open the channel 4 http socket address 192.168.1.10:8005
Info:  Main:  Diffusion 5 channels
Info:  Main:  Channel number :   0, name : "CT1"  service id 0 
Info:  Main:  	Multicast4 ip : :1234
Info:  Main:  	Unicast : Channel accessible via the master connection, 192.168.1.10:1234
Info:  Main:  	Unicast : Channel accessible directly via 192.168.1.10:8001
Info:  Main:  Channel number :   1, name : "CT2"  service id 0 
Info:  Main:  	Multicast4 ip : :1234
Info:  Main:  	Unicast : Channel accessible via the master connection, 192.168.1.10:1234
Info:  Main:  	Unicast : Channel accessible directly via 192.168.1.10:8002
Info:  Main:  Channel number :   2, name : "CT 24"  service id 0 
Info:  Main:  	Multicast4 ip : :1234
Info:  Main:  	Unicast : Channel accessible via the master connection, 192.168.1.10:1234
Info:  Main:  	Unicast : Channel accessible directly via 192.168.1.10:8003
Info:  Main:  Channel number :   3, name : "CT sport"  service id 0 
Info:  Main:  	Multicast4 ip : :1234
Info:  Main:  	Unicast : Channel accessible via the master connection, 192.168.1.10:1234
Info:  Main:  	Unicast : Channel accessible directly via 192.168.1.10:8004
Info:  Main:  Channel number :   4, name : "CT D / CT art"  service id 0 
Info:  Main:  	Multicast4 ip : :1234
Info:  Main:  	Unicast : Channel accessible via the master connection, 192.168.1.10:1234
Info:  Main:  	Unicast : Channel accessible directly via 192.168.1.10:8005

Přehrávání jednotlivých programů je možné třeba MPlayerem:

mplayer -cache 8192 http://192.168.1.10:8001

Přidání vzkazu
* Tyto údaje je nutné vyplnit.

jfila   email
2014-06-29 19:57:05

VLC can't read the stream but it is fine with xine or mplayer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * For VLC, you must specify the PMT PID besides audio and video PIDs. It's a frequent issue. To solve it you can use the verbose mode of VLC ('vlc -v') and you'll see a ligne like: '[00000269] ts demuxer debug: * number=1025 pid=110' you'll have the PMT PID associated with your program number, you can also use dvbsnoop, or see how to get pids in 'doc/README_CONF.txt' (link:README_CONF.html[HTML version]). Another solution is to use full autoconfiguration. Ale také jsme příliš nezmoudřel, s autoconfiguration=full VLC funguje normálně.

Odpovědět

Shadowman
2013-10-31 20:34:06

Nepřemejšlel jsi o tom použít jako stream server třeba Raspberry Pi?

Odpovědět

Honza
2013-11-04 16:11:35

Ale je fakt, ze uz jsem v nastaveni nasel nezaskrtle zaskrtavatko multicast a malinu smysluplne vyuzitou stale nemam. Ale to by se muselo nejak poresit prepinani multiplexu, protoze mam jen jednu DVB kartu a dalsi porizovat nechci :)

Odpovědět

Honza
2013-11-04 16:04:53

Popravde nenapadlo :) Ale to by zas muselo byt dost robustni reseni, aby to mohla pustit i holka ,-) A na to jsem nemel ani cas, ani chut, musel jsem se lecit... A ted uz me to nepali :)

Odpovědět