Voice Over IP

Obsah

  1. Obsah
  2. Úvod
  3. VoIP
    1. Důvod
    2. Výhody a nevýhody
    3. Princip
    4. Komprese
    5. Protokoly
      1. RTP
      2. H.323
      3. SIP
    6. Hardware
  4. Aplikace
    1. Speak Freely
    2. Etherphone
    3. Další programy
  5. Odkazy

Úvod

Tohle je wordová stránka k referátu o VoIP na Linuxový seminář. Pokud nevíte, co to je wordová stránka, zeptejte se PerMa ;-).

Referát je, jak už název napovídá, o telefonování po internetu a o linuxových programech k tomuto určeným.

VoIP

Důvod

Každý si asi bude klást otázku, proč telefonovat přes internet. VoIP bylo vymyšleno jako standard, aby se mohly používat jednotné kabely pro přenos dat i pro telefonování. V druhé řadě také, aby uživatelé internetu mohli spolu snadno telefonovat, pořádat různé konference, videokonference a podobně.

Výhody a nevýhody

Jaké jsou výhody VoIP oproti klasickým telefonním sítím? Dají se přenášet současně data a hlas. V klasických sítích je k tomuto potřeba ISDN linka. Dále na telefonních sítích se platí za čas, kdežto na datových sítích se platí buď paušál, nebo za přenesená data. V obou případech se ale dá navázat hlasové spojení a mluvit neomezenou dobu. Další nespornou výhodou je možnost telefonování s více lidmi nebo přenášení videa, to klasické telefonní sítě neumožňují.

Samozřejmě jsou zde také nevýhody. Hlavní nevýhoda spočívá v tom, že telefonování má charakter spojované služby, ale datové sítě (TCP/IP) mají charakter přenosu paketů. Tudíž je potřeba nějakým způsobem na síti zaručit kvalitu služeb (vyhradit přenosové pásmo atd.). S tím se ale při návrhu TCP/IP příliš nepočítalo.

Princip

Princip je jednoduchý. Mluvčí mluví do mikrofonu, z mikrofonu jde signál do A/D převodníku, z něj vycházejí digitální data, ta se zakomprimují, pošlou po síti, přijmou, dekomprimují, převedou D/A převodníkem zpět na analogový signál a pustí do reproduktoru.

Komprese

Klasické telefonní sítě mají šířku pásma 4kHz. Tudíž musíme samplovat frekvencí 8kHz, což při 8 bitech a navíc mono vyžaduje přenosovou kapacitu 64kbps. Což je přesně kapacita jednoho digitálního okruhu.

Pokud potřebujeme menší přenosovou kapacitu, tak nemusíme data přenášet, jak je dostaneme z A/D převodníku, ale můžeme je zakomprimovat. Ke kompresi se používají buď roztodivné lineární predikce nebo GSM komprese. Komprese na rychlých sítích nemá smysl, neboť zabraná přenosová kapacita je zanedbatelná. Využije se na pomalejších linkách, například když je někdo připojen přes 128kbps linku, tak mu telefon s kompresí zabírá devítinu kapacity namísto poloviny. Většina programů umí komprese, ale málokterý umí například telefonování v CD kvalitě (44kHz, 16bitů, stereo). Což by jistě někteří lidé, kteří jsou například propojeni s kamarádem přes ethernet, uvítali raději než "záchodovou kvalitu" 64kbps.

V praxi se tedy používají tyto kompresní metody (pro přehled):

GSM komprese se v praxi používá asi nejvíce. Důvodem je, že lineární predikce přináší při nízkých bitových rychlostech přílišné zkreslení signálu. GSM komprese byla vyvinuta specielně pro kompresi hlasu (v debilních telefonech). Klasické kompresní metody zvuku fungují tak, že vezmou několik vzorků a na základě nich se snaží vyjádřit hodnotu následujícího vzorku. Přitom nijak nehledí na to, o jaký signál se jedná.

GSM komprese má odlišný přístup. Snaží se simulovat lidský hlas. Pracuje se s (ideálním) modelem lidského hlasu. Zvuk který vychází z lidských hlasivek se totiž dá rozložit na tón a šum. Například hláska "á" je tón a hláska "š" je šum. V GSM kompresi tedy máme matematický model hlasu, který je popsán několika parametry: dvojice (tón, šum) a osmice filtrů. Kódování spočívá v nalezení parametrů tohoto modelu (celkem to je asi 112 koeficientů). Dekódování znamená nastavení těchto parametrů v modelu na přijímajíci straně a následné "spuštění" modelu s tímto nastavením. To vše se opakuje v intervalech cca 20ms.

Výsledná potřebná šířka pásma je cca 12kbps (liší se pro různé kvality přenosu). Hlas se přenáší v porovnání s ostatními kompresemi nejsrozumitelněji (při dané šířce pásma). Ovšem neslyšíme toho na druhé straně, ale hlasový syntezátor v našem telefonu, někomu tedy může přijít zvuk jako "jistou částí těla přes hrnec". Přenos je optimalizován pro hlas, tudíž například hudba se přenese špatně. Velkou nevýhodou je ale to, že například hluk v pozadí mluvčího způsobuje naprostou nesrozumitelnost na straně přijímající. Proto je potřeba v hlučném prostředí používat například směrový mikrofon a podobně.

Navíc se velice často objevuje tzv. detekce ticha. Při telefonování se totiž nemluví stále, ale dělají se pauzy mezi jednotlivými slovy nebo větami. Toho se využívá při kompresi a jednoduše se v těchto okamžicích žádný zvuk nepřenáší.

Protokoly

Při telefonování po internetu potřebujeme nejen přenášet vlastní audio data, ale také potřebujeme navazovat spojení a přenášet další řídící informace. Vlastní data se většinou přenášejí přes protokol RTP. Řídící protokoly se v zásadě používají dva. Jednak protokol H.323 od standardizační organizace ITU-T a pak protokol SIP definovaný organizací IETF.

RTP

RTP je zkratka slov Real Time Protocol. Původní standard TCP/IP měl pouze dva transportní protokoly: TCP a UDP. S příchodem multimédií se ukázalo, že tyto dva nestačí, a proto byl vytvořen protokol pro přenos v reálném čase RTP a k němu řídící RTCP protokol. RTP je vlastně jakási nadstavba nad UDP. Oproti UDP zajišťuje navíc doručování paketů ve správném pořadí, toho se dosahuje pomocí číslování paketů nebo časových razítek. RTCP slouží pro synchronizaci audia a videa.

H.323

Protokol H.323 není vlastně samostatný protokol ale zastřešuje množinu protokolů pro přenos VoIP. Patří do rodiny protokolů H.32x, kde například H.320 řeší přenos přes ISDN, H.324 popisuje přenos v sítích s přepínanými okruhy a podobně. H.323 popisuje nejen přenos audia, ale obecně přenos multimedií - tedy i videa.

Protokol definuje 4 základní komponenty: terminal, gateway, gatekeeper a multipoint control unit (MCU).

H.323 používá protokoly H.245 pro vytvoření přenosového kanálu, H.255 pro signalizaci, RAS pro komunikaci s gatekeeperem, RTP/RTCP pro přenos dat, protokol RSVP pro řízení pásma.

Session Initiate Protocol

Protokol SIP je novější než H.323 a je docela podobný protokolu HTTP. Vlastní komunikace probíhá formou výměny textových zpráv (řádků oddělených CR-LF) jako v protokolu HTTP. Též se k identifikaci uzlů používá URL ve formě sip:user@machine:port. Narozdíl od HTTP může SIP běžet jak nad TCP, tak i nad UDP.

Oproti H.323 má mnoho výhod. Protokol je celkově jednodušší a navazování spojení je velmi rychlé. Narozdíl od H.323 se dá adresovat nejen vzdálený počítač, ale i konkrétní uživatel na něm. Protokol H.323 umí adresovat jen počítač, umí i aliasy, ale ty se musí překládat přes gatekeepera. Díky možnosti běžet nad UDP podporuje SIP multicast. Porovnání obou protokolů se dá nalézt na této adrese.

Hardware

Pokud chceme telefonovat po internetu, potřebujeme přinejmenším 2 počítače se zvukovými kartami (nejlépe full duplex), mikrofonem a reproduktorem. To ovšem není jediná možná konfigurace. Místo zvukových karet se dá k telefonování teoreticky použít i modem. Modemy mají v dnešní době vstup pro mikrofon a výstup na sluchátka, umí fungovat jako záznamník, proč by tedy nemohly fungovat i jako telefon. Já jsem tuto možnost ještě nezkoušel, tudíž nevím, jak moc je v praxi možné modem "přemluvit", aby samploval zvuk z mikrofonu a přehrával data z počítače. Nicméně alespoň teoreticky tu tato možnost je.

Pro internetovou telefonii se vyrábějí i speciální hardwarové karty. Tyto karty mají vstup pro mikrofon, výstup pro sluchátka a umí hardwarovou kompresi (například Truespeech). Některé karty mají navíc telefonní RJ konektor pro připojení části klasické telefonní sítě (například podnikové telefonní sítě). Tyto karty pak fungují jako brána do VoIP a dá se skrz ně telefonovat přes VoIP síť, aniž by o tom telefonující musel vědět.

Nejznámější výrobci těchto HW karet jsou firmy Quicknet (karty PhoneJack a LineJack) a Voicetronix (karty V4PCI, VPB4, VPB8L). V Linuxu jsou podporovány karty Quicknet. Jejich podpora se zapne v kernelu v menu "Telephony support". Více se dá dočíst v /usr/src/linux/Documentation/telephony/ixj.txt nebo u výrobce Quicknet.

Aplikace

Speak Freely

Tento program patří asi k nejznámějším. Napsal ho zakladatel firmy Autodesk, John Walker (nevím, zda má něco společného s proslulým alkoholem). Je šířen jako freeware a chodí na mnoha platformách: Linux, Irix, SunOS, Solaris, FreeBSD, HPUX, Windows. Umožňuje tedy telefonovat velmi široké skupině uživatelů. Pod Unixem je to command-line program, ale existuje mnoho různých GUI frontendů pro Xwindow: jsf, xsf (gnome), xspeakfree (tcl/tk) atd.

Program umožňuje telefonování mezi 2 a více lidmi (bez použití multicastu). Pokud hardware i ovladač podporují full-duplex, program umožňuje full-duplexní komunikaci. Podporované komprese jsou GSM, ADPCM, LPC a LPC-10. Spojení je možno i šifrovat algoritmy: IDEA, DES, Blowfish, PGP nebo pomocí souboru s klíčem.

Instalace je velice jednoduchá. Stačí si stahnout archiv se zdrojáky, nastavit několik parametrů v Makefile a zkompilovat. Není potřeba stahovat žádné další knihovny, což je velice příjemné.

Zkompilováním dostaneme tři programy: sfmike, sfspeaker a sflaunch.

Program lze stahnout na těchto adresách:

Etherphone

Etherphone je telefonní program pro Linux a Windows, který umí half duplexní point-to-point komunikaci. Program má pod Linuxem Tcl/Tk GUI pro Xwindow.

Data se přenáší přes protokol UDP, zvuk je samplován 16 bitově na frekvenci 8kHz. Data jsou komprimována buď ADPCM kompresí s poměrem 1:4, nebo GSM kompresí, v obou případech se navíc používá metoda vypínání ticha.

Program sestává z tří částí: ckient, server a démon. Server se pustí na přijímající straně a čeká na hovor. Klient zahajuje spojení ("vytáčí hovor"). Pošle démonu žádost o spojení se serverem. Démon zjistí, zda server příjímá spojení (je puštěný). Pokud ano, řekne klientu, že se může spojit se serverem. V opačném případě řekne klientu, ať čeká, než uživatel pustí server.

Další programy

Voicechat - jednoduchý telefon s GSM kompresí a detekcí ticha. Navíc umí jednoduchý textový talk.

Nautilus - point-to-point telefonní program, v dokumentaci se píše, že je zaměřený na kryptografii, ale umí jen Blowfish, IDEA a DES.

Linphone - telefonní program pro linux, používá protokol SIP a RTP, potřebuje knihovnu libosip. Měl by být kompatibilní s ostatními SIP telefony. Má gnome GUI.

Gnophone - potřebuje knihovnu libiax pro GSM kompresi.

Robust Audio Tool - internetový konferenční program. Umožňuje point-to-point i skupinovou komunikaci. Přenos je podle IETF standardu a používá RTP protokol.

A hromady dalších...

Odkazy