Portál AbcLinuxu, 30. dubna 2025 10:40
Když jsem nedávno psal zápisek o prvních zkušenostech s DVB-T, netušil jsem, jaké možnosti poskytuje program dvbstreamer. V diskuzi mne jam001 nakopnul, tak jsem se na něj podíval znovu, lépe a radostněji
Zopakuji, že první inicializace se dělá příkazem
$ setupdvbstreamer -t ~/.mplayer/channels.confa program se spouští jednoduše
$ dvbstreamerMůžeme ho spouštět rovnou s parametrem -o, kterým definujeme, kam nasměrujeme primární výstup. Například takto:
$ dvbstreamer -o udp://localhost:1234
Service filters
Při používání dvbstreameru používáme takzvané service filters. Na každý televizní kanál a na každé jeho směrování potřebujeme jeden filtr. Defaultně máme jeden primární – nazývá se <Primary>
a součástí jeho názvu jsou i uvedené závorky. Další filtry si musíme sami vytvořit. To se dělá příkazem
addsf <NázevFiltru> <CílovýMRL>Cílovým MRL mohou být udp (
udp://<IP adresa>:<port>
), rtp (rtp://<IP adresa>:<port>
), soubor, do něhož se bude vysílaná stanice ukládat (file:///cesta/k/souboru
), nebo null, který to bude zahazovat (null://
)
Volba televizního kanálu
Takže filtry bychom měli (pokud jsme nespustili program s parametrem -o
, nemáme nikam nasměrován primární filtr – jak na to, popíšu o něco níže). Teď do nich ještě musíme nějak poslat kanály, jejichž seznam získáme příkazem
lsservicesProvádí se to pro primární filtr příkazem:
select <channel>(zároveň tím omezíme provoz na multiplex, ve kterém tento kanál je - teda vlastně neomezíte, ale pokud se o to pokusíte, zhroutí se s neoprávněným přístupem do paměti)
Pro další filtry se používá příkaz:
setsf <NázevFiltru> <channel>Pokud chceme některý kanál změnit, uděláme to opětovným zadáním příkazu s názvem jiného kanálu.
Nastavení/změna cílového MRL
Cílový MRL jsme zadávali již při tvorbě filtrů. Ale vynechal jsem ten hlavní, primární, kanál.
Obecně se MRL nastavuje a mění takto:
setsfmrl <NázevServiceFiltru> <CílovýMRL>Primární kanál má ještě i svou zjednodušenou verzi, a to
setmrl <CílovýMRL>Pár příkladů:
setsfmrl <Primary> udp://localhost:2222 který odvede stejnou práci jako jednodušší setmrl udp://localhost:2222 setsfmrl sfNovaCinema-1 udp://localhost:2223 setsfmrl sfNovaCinema-2 file:///home/ota/zaznam.mpg setsfmrl sfPrima null://Ohledně null: Proč vůbec posílat stream do nikam? Může se to hodit, když například nahráváme program, chceme to ukončit, ale ponechat si filtr. Přesměrujeme tok dat do null, filtr zůstane, soubor se uzavře a je spokojenost
Analogicky k setsfmrl můžeme pro zjištění MRL některého filtru využít příkaz
getsfmrl <NázevFiltru>nebo pro primární zjednodušeně
getmrl
Likvidace filtru
Když se nám filtr omrzí, zlikvidujeme ho (kupodivu) příkazem
rmsf <NázevServiceFiltru>
Další užitečné příkazy:
help [command]
– zobrazí nápovědufestatus
– zobrazí informace o tuneru, sílu signálu…lssfs
– zobrazí všechny nastavené filtry včetně informací o nich ve formátu NázevFiltru : MRL (channel)
muxinfo <frekvence multiplexu>
– zobrazí detailní informace o multiplexuserviceinfo <název kanálu>
– informace o televizním kanálulsmuxes
– zobrazí seznam všech multiplexů, o nichž program vídumpxmltv
– zobrazí databázi EPG ve formátu XMLTV. Ale nedokázal jsem to odsud přesměrovat do souboru.quit
– konecDVBStreamer umí i nějaké další kejkle, jako třeba odfiltrování části streamu na různé MRL. Podařilo se mi to udělat jen se signálem z primárního filtru. Popíšu na konkrétním příkladu:
# naladím Primu:
DVBStreamer>select PRIMA
20cb.0202.0301 : "PRIMA"
# nechám si zobrazit všechny její PIDy:
DVBStreamer>lspids PRIMA
3 PIDs for "PRIMA" (Cached)
201 ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream
211 ISO/IEC 11172 Audio
221 ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data
# vytvořím manuální filtry pro zvuk a obraz:
DVBStreamer>addmf mfobraz file:///home/ota/test.m2v
DVBStreamer>addmf mfzvuk file:///home/ota/test.m2a
# a těmto filtrům přidělím PIDy, které jsem získal příkazem lspids:
DVBStreamer>addmfpid mfobraz 201
DVBStreamer>addmfpid mfzvuk 211
# V tuto chvíli se začnou na uvedená MRL cpát data. Pokud chci, aby se
# začaly soubory plnit současně (takhle to začne vždy ve chvíli odeslání
# příkazu addmfpid), zadám příkaz select PRIMA
až jako poslední.
# Odesílání dat potom začne až po jeho zadání. Když chci plnění souborů
# přerušit, odeberu PIDy:
DVBStreamer>rmmfpid mfobraz 201
DVBStreamer>rmmfpid mfzvuk 211
Jinak celkově – dokumentace na webu vůbec neodpovídá realitě, program obsahuje úplně jiné příkazy, než jaké jsou tam uvedeny. Příkazy na webu se slovním kořenem output
mají v reálu kořen mf
- tedy manuální filtr, o němž jsem se zmínil. Dále jsou tam příkazy s kořenem xpes
, s nimiž jsem úspěšného výsledku nedosáhnul. I interní nápověda je velmi odfláknutá, help vám nevypíše parametry, ale příkaz řve, že jich má málo. Je to velká škoda, protože jinak tento program vypadá velmi použitelně a schopně.
A ještě jedna drobnost, se kterou si nevím rady: jak naladit Novu. Její název je totiž " NOVA" (bez těch uvozovek, ovšem včetně té mezery na začátku) – vyřešeno, děkuji Limotovi
Tiskni
Sdílej:
UPDATE services SET name = 'NOVA' WHERE id =513
DVBStreamer>lsservices NOVA NOVA CINEMA PRIMA Prima COOL BARRANDOV TV CT1 (MPEG-4 HD) Nova (MPEG-4 HD) O2 Info (MPEG-2) Ocko TV (MPEG-2) CT 1 JM CT 2 CT 24 CT 4 TV Public Z1 CRo1-Radiozurnal CRo2-Praha CRo3-Vltava CRo Radio Wave CRo D-dur CRo Leonardo CRo Radio Cesko Proglas DVBStreamer>select NOVA 20cb.0202.0201 : "NOVA" DVBStreamer>lsservices NOVA NOVA CINEMA PRIMA Prima COOL BARRANDOV TV CT1 (MPEG-4 HD) Nova (MPEG-4 HD) O2 Info (MPEG-2) Ocko TV (MPEG-2) CT 1 JM CT 2 CT 24 CT 4 TV Public Z1 CRo1-Radiozurnal CRo2-Praha CRo3-Vltava CRo Radio Wave CRo D-dur CRo Leonardo CRo Radio Cesko Proglas DVBStreamer>A při tom opětovném měnění jsem se to tedy snažil naklikat, ale po 10 minutách jsem to vzdal a lupnul tam příkaz UPDATE
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.