Vysílání a přenos audio signálu ve velmi vysoké kvalitě

Technická zpráva CESNETu číslo 28/2005
k dispozici též ve formátech PDF, PostScript a XML.

Miloš Wimmer
prosinec 2005

1   Úvod

Od roku 2003 zajišťujeme živé vysílání programu stanic Českého rozhlasu do sítě Internet ve velmi vysoké kvalitě. K tomu účelu jsme vytvořili experimentální systém využívající technologii vysílání audio signálu v kompresním formátu ogg v šířkách pásma 128 kb/s a 224 kb/s. Technické řešení je rozloženo na stroje pro pořizování ogg streamů a vlastní streamovací server. Na programové úrovni používáme pouze svobodný software - operační systém GNU/Linux, producenta streamů ices a streamovací server icecast.

Na zvyšování zvukové i technické kvality experimentálního systému pracujeme soustavně. Nyní jsme se zaměřili především na zvýšení odolnosti systému proti případným výpadkům a na odstranění nežádoucího zpoždění vznikajícího při streamování vstupního signálu.

2   Zvýšení robustnosti systému a jeho odolnosti proti výpadkům

Provoz systému pro digitální přenos audiosignálu ve vysoké kvalitě představuje nároky nejen na zvukovou kvalitu, ale i na velkou odolnost proti výpadkům. Nejde přitom jen o výpadky způsobené nějakou chybou (těch je minimálně), ale každý server vyžaduje průběžnou údržbu. Zvýšení úrovně odolnosti lze dosáhnout především redundancí a robustností systému a použitím softwarové inteligence.

V původním zapojení jsme měli dva enkódovací servery produkující ogg streamy v rychlostech 128 a 224 kb/s se vzorkovací frekvencí 48 kHz - tun1.cesnet.cz a tun2.cesnet.cz. Server tun2 přijímá vysílání stanic ČRo1, 2, 3, 6 a Region z digitálního satelitního vysílání DVB-S a vysílání ČRO Plzeň z analogového FM tuneru. Server tun1 přijímal vysílání ČRo Regina z analogového FM tuneru. Oba stroje vytvářely ogg streamy a posílaly je na icecast server amp.cesnet.cz, k němuž se pak připojují klienti uživatelů. Server tun2 vysílá kromě toho všechny streamy získávané z DVB-S ve formátu MPEG-TS současně multicastem do sítě CESNETu. Stroje tun1 a amp1 jsou umístěny na serverovně CESNETu v Praze, tun2 na serverovně Západočeské unverzity v Plzni.

Pro zvýšení odolnosti proti výpadkům jsme spustili druhý streamovací server amp2, na který jsou vysílány všechny streamy ČRo stejně jako na amp1. Když se klient připojuje k požadovanému streamu, nejčastěji si nejprve stahuje (aniž by to uživatel registroval) z www serveru definiční soubor, který mimo jiného obsahuje informace o jménu a adrese streamu. V tomto souboru lze definovat více adres, na kterých je stream dostupný. Klient se poté připojí k prvnímu definovanému streamu v pořadí. Dojde-li pak následně během příjmu k výpadku streamu, klient se automaticky přepojí k streamu definovanému jako druhému v pořadí, atd. Této technologie jsme využili ke zvýšení odolnosti celého systému proti výpadku streamovacího icecast serveru.

Výpadek zdrojových ogg streamů generovaných enkódovacím serverem jsme eliminovali jejich zduplikováním. K původním streamům ČRo vytvářených na tun2 jsme na stroji tun1 spustili redundandní sekundární streamování vysílání stanic ČRo1, 2, 3, 6 a Region, které pořizujeme z DVB-S. Sekundární ogg streamy vytváříme v rychlosti 128 kb/s a vysíláme je na oba icecast servery amp1 a amp2. V konfiguraci icecastu jsme přitom sekundární streamy definovali jako záložní (fallback), které server použije s automatickým přepojením klientů v případě, že přišel o streamy primární. Poté, co je příjem primárních streamů obnoven, přepojí icecast server klienty automaticky zase zpět. K tomu, aby mohl icecast server přepojit klienta na jeho původně zvolený stream v situaci, kdy k primárním streamům ogg-224 a ogg-128 kb/s existuje jen jeden záložní stream ogg-128 kb/s, je třeba vytvořit v konfiguraci icecastu kromě definice fallbacku i rozdvojený lokální mount-point pro každý záložní stream. Tuto techniku ukazuje následující část konfigurace:

    <relay>
            <server>127.0.0.1</server>
            <port>8000</port>
            <mount>/z-cro1.ogg</mount>
            <local-mount>/fall-cro1.ogg</local-mount>
    </relay>
    <mount>
            <mount-name>/cro1.ogg</mount-name>
            <fallback-mount>/fall-cro1.ogg</fallback-mount>
            <fallback-override>1</fallback-override>
    </mount>
    <relay>
            <server>127.0.0.1</server>
            <port>8000</port>
            <mount>/z-cro1.ogg</mount>
            <local-mount>/fall-cro1-256.ogg</local-mount>
    </relay>
    <mount>
            <mount-name>/cro1-256.ogg</mount-name>
            <fallback-mount>/fall-cro1-256.ogg</fallback-mount>
            <fallback-override>1</fallback-override>
    </mount>

Nyní tedy provozujeme systém s dvojím zálohováním. Dva nezávislé enkódovací servery posílají stejné streamy ČRo na dva nezávislé streamovací servery. Celý systém je tak odolný proti současnému výpadku jednoho enkódovacího a jednoho streamovacího serveru.

3   Odstranění zpoždění při streamování živého vysílání

Vnitřní architektura producentů streamů (aplikací, které vytvářejí digitální stream a vysílají jej na streamovací server) bývá navržena tak, aby co nejlépe eliminovala potíže vzniké případnými výpadky ve vstupním signálu, krátkodobým nedostatkem výpočetní kapacity potřebné pro enkódování nebo transkódování vstupního signálu a výpadky v transportu výstupního streamu na streamovací server. Architektura tak odpovídá požadavkům dnes významně převažujícího streamování z již předem enkódovaných audio dat (tzv. playlistu), jak ho používají internetová rádia.

V reálném provozu to znamená, že je producent vybaven velkým vstupním a výstupním zásobníkem, do kterého ukládá vstupní a výstupní data streamu. V situaci, kdy se aplikaci producenta nedostává dostatek strojového času procesoru potřebného pro enkódování vstupního signálu, začne stream zpožďovat a data vstupního signálu začíná hromadit ve vstupním zásobníku. V případě výpadku spojení na streamovací server zase začíná hromadit výstupní enkódovaná data ve výstupním zásobníku. V obou případech je cílem, aby posluchač (jeho klient) dostal data pokud možno kompletní a to za cenu zpoždění přijímaného výsledného streamu oproti času, kdy vstoupil do procesu enkódování. To nepředstavuje problém při vysílání ze záznamu/playlistu. Ovšem při streamingu živého vysílání rozhlasových stanic je to nepříjemné, protože při dlouhodobém běhu aplikace producenta může docházet k postupnému narůstání doby zpoždění (2 sekundy za den znamenají již 1 minutu za měsíc), které může způsobovat nežádoucí opoždění přijímaného programu oproti jeho časovému schématu. Citelně to vadí např. při posunu vysílaného časového znamení, opoždění začátků programů apod. Existence krátkodobého výpadku (který ostatně nemusí být ani slyšitelný) ve streamu živého vysílání, by přitom byla akceptovatelná.

Tento problém se obvykle řeší nočním restartem aplikace producenta, takže zpoždění nemůže narůstat déle, než v rámci jednoho dne. To však není elegantní řešení a navíc způsobuje odpojení všech klientů, kteří daný stream přijímají (neuvažujeme-li redundandní systém streamování).

Navrhli jsme proto řešení, které vznik časového zpoždění ve streamech živého vysílání eliminuje. Jeho podstata je založena na vyloučení procesu enkódování vstupního signálu z aplikace producenta (ices), kde ke zpoždění dochází a jeho přesun do předřazené aplikace enkodéru oggenc. Enkodér pracuje s minimálním vstupním bufferem, takže v případě silně zvýšené zátěže enkódovacího serveru se data vstupního signálu začnou zahazovat. To je však přijatelné a v běžném provozu jsou tyto výpadky téměř neslyšitelné. Na vstup aplikace producenta jsou pak přiváděna data již enkódovaná do finálního ogg streamu, s nimiž producent neprovádí žádné transkódování a přímo je vysílá na cílový streamovací icecast server.

Celý řetězec pořízení enkódovaného streamu znázorňuje následující obrázek.

[Obrázek]

Obrázek 1: Schéma procesu enkódování

Zdrojový signál je pořízen buď aplikací vlc z dat MPEG-TS streamu anebo programem arecord, který čte data ze zvukové karty. Obě aplikace převádí vstupní signál na čistá PCM data, která jsou přiváděna na vstup oggenc enkodéru. Abychom se vyhnuli následnému transkódování vytvářeného ogg streamu z rychlosti 224 kb/s na 128 kb/s, které by bylo doprovázeno snížením kvality, rozdvojujeme tok PCM dat do dvou proudů, které přivádíme na dvojici oggenc enkodérů. První provádí enkódování dat do streamu 128 kb/s a druhý generuje nezávislý ogg stream 224 kb/s. Oba streamy jsou pak přiváděny na vstupy aplikací producentů ices, kteří je beze změny transportují na icecast server(y). Data jsou mezi jednotlivými aplikacemi posílána uvnitř pojmenovaných rour. Tímto způsobem lze zpracovávat zdrojový signál z libovolné aplikace, která jej může převádět do PCM dat.

Uvedenou kompozici producenta ogg streamů používáme na enkódovacích serverech Cesnetu tun1.cesnet.cz a tun2.cesnet.cz již několik měsíců. Nežádoucí zpoždění ostraňuje a pracuje spolehlivě.

4   Systém pro souběžný záznam a opětovné vysílání streamu

Na základě námětu Českého rozhlasu jsme vytvořili a do experimentálního provozu uvedli automatický systém pro zaznamenávání vysílaného streamu, jeho ukládání a následné opětovné vysílání. Tento systém měl být použit pro vysílání programu stanice ČRo 6, která produkuje živý program v době od 18 do 24 hodin a v ostatních hodinách přebírá vysílání stanice ČRo 2. Systém dovoluje vysílat živý stream v době 18-24 hod, přitom jej současně zaznamenávat do MPEG-PS streamu a v době 0-18 hod jej pak vysílat ve smyčce ze záznamu.

Před oficiálním uvedením do provozu však Český rozhlas z důvodu licencí a honorářů za pořady, které by byly takto vysílány nejen živě, ale i ze záznamu, od svého původního záměru ustoupil.

5   Systém pro oznamování vysílaných MPEG-TS streamů

Do provozu jsme uvedli sapserver, který do multicastové adresářové služby SAP/SDP propaguje programové informace o multicastově vysílaných MPEG-TS streamech, které pořizujeme z DVB-S. Pro inzerované informace jsme v globální hierarchii programové nabídky zřídili novou skupinu pojmenovanou Cesnet. Názvy dostupných programů jsou zobrazovány v okně klienta vlc.

Aplikace sapserveru běží na stroji tun2.cesnet.cz.

[Obrázek]

Obrázek 2: Nabídka inzerovaných programů v prostředí klienta vlc

6   Streamování nových stanic

Ve spolupráci s kolegy z Českého rozhlasu jsme se podíleli na návrhu a realizaci systému pro vysílání nových stanic Českého rozhlasu D-dur, Rádio Česko a Leonardo. Vysílání těchto stanic bylo spuštěno v internetové podobě ještě před jejich zařazením do vysílání v rámci multiplexu DVB-T. Stanice Český rozhlas D-dur vysílá 24 hodin denně klasickou hudbu od renesance až po tvorbu 21. století, nízkorozpočtový program Rádio Česko je obsahově i formátem založen čistě na zpravodajství a na aktuální publicistice a stanice Český rozhlas Leonardo se zaměřuje na popularizaci vědy, techniky, přírody, historie a medicíny.

Vysílání stanice D-dur se odbavuje pomocí vysílací stanice systému DALET z playlistu, který se sestavuje ve speciálním interním systému ČRo. Systém DALET používá interní zvukový formát MP2, 48kHz, 256kbps. Vysílání stanic Rádio Česko a Leonardo je kombinací vysílání živého a záznamů z playlistu. Audio signál je na sál přiveden přes hlavní přepojovač ve formátu MADI a tam se pomocí speciálního zařízení převádí na formát ADAT. Signál v ADAT formátu je přiveden na počítač/enkodér (PC, Pentium 4, 3.0 GHz, Debian, jádro 2.6.8, ices-2.0-kh60, alsa, jack audio server 0.99), který je vybaven 8-mi kanálovou ADAT zvukovou kartou. Tento stroj vytváří ogg streamy v různých rychlostech a ty se distribuují na vysílací servery. Použitý JACK audio server umožňuje zpracování každého kanálu vstupního signálu ADAT odděleně.

Streamy s nižšími rychlostmi 22 a 48 kb/s jsou posílány na streamovací server Českého rozhlasu stream.rozhlas.cz, streamy 128 a 224 kb/s jsou posílány na streamovací server Cesnetu amp.cesnet.cz.

Nabídku streamovaných stanic jsme dále rozšířili o české vysílání rozhlasové stanice BBC a vysílání stanice Radio Student 107. Ogg streamy BBC pořizujeme v rychlostech 128 kb/s a 224 kb/s na enkódovacím stroji tun2 z MPEG-TS streamu přebíraného z DVB-S. Ogg stream Radia Student v rychlosti 128 kb/s přebíráme od dodavatele obsahu.

Kompletní seznam streamů vysílaných našim systémem je uveden na adrese http://radio.cesnet.cz/ .

7   Závěr

Ze statistik streamovacího serveru amp.cesnet.cz je vidět zřetelný trend rostoucího zájmu o nejkvalitnější streamy enkódované v rychlosti 224 kb/s. Zatímco před rokem byl poměr posluchačů streamů 128 kb/s vůči 224 kb/s přibližně 2:1, dnes je už téměř vyrovnaný. To potvrzuje oprávněnost našeho záměru soustředit se právě na přenosy audia ve velmi vysoké kvalitě.

[Obrázek]

Obrázek 3: Kumulovaný graf počtu klientů současně připojených k ogg streamům 128 a 224 kb/s ČRo1

Použitá literatura

[1] http://www.cesnet.cz/doc/techzpravy/2004/audio/
[2] http://radio.cesnet.cz/
[3] http://www.rozhlas.cz/
[4] http://www.icecast.org/
[5] http://www.videolan.org/
[6] http://www.debian.org/
další weby:fond rozvojemetacentrumCzechLightpřenosyvideoservereduroameduID.cz