Hlavní navigace

Asterisk 10: důraz na wideband

13. 12. 2011
Doba čtení: 7 minut

Sdílet

Opět je tu nový Asterisk, označený kulatým číslem 10. Tentokrát přicházíme s várkou nových funkcí v projektu Asterisk o něco dříve, než vyjde stabilní verze. Důvodem je, že nová verze už je ve finální fázi a žádné nové funkce se již nepřidávají. Máme tak konečnou představu o tom, co bude nová verze obsahovat.

Nejdříve bych chtěl vyzvat ty, které některá z nových funkcí zaujme, aby novou verzi vyzkoušeli a případné nalezené chyby reportovali vývojářům, online dotazy je možné pokládat přes IRC #asterisk-testing.

Pár poznámek k nové verzi

Některé z vás jistě zarazilo, že s číslováním je něco v nepořádku. Ano, je to tak. Asterisk vypustil úvodní „1.“, stejně jako např. Firefox, a verzuje už pouze celým začátečním číslem. Na tuto změnu sám nemám dostatečně vyhraněný názor, takže pro zájemce jen připojím odkaz na úvodní oznámení. Trochu podivná se mi ta změna zdá v kontextu toho, že vydávané verze mají stejně minor čísla – 10.0.0.

Asterisk 10 bude vydán jako verze se standardní podporou, tedy stejně jako například Asterisk 1.6.2 má podporu 1,5 roku.

Kdy tedy Asterisk 10 nasadit?

  • Pokud si můžeme dovolit menší výpadek a můžeme lehce downgradovat na 1.8
  • Pokud chceme vyzkoušet některou z nových funkcí
  • Pokud ho provozujeme v privátní síti bez možnosti ohrožení z internetu
  • a jistě se najdou další důvody

Naopak nedoporučuji nasazovat Asterisk 10, pokud vytváříte produkt, který chcete dlouhodobě (více než dva roky) podporovat a nasazujete ho jako blackbox u zákazníka.

Dlouhodobým nešvarem projektu Asterisk byla dokumentace. V současné době je dostupných několik aktuálních knih a wiki přímo na stránkách projektu.

Hlavní novinky

Modul konference

Protože tentokrát je nových velkých funkcí méně, dovolím si modul konference rozepsat. Asterisk již od počátku podporoval konference pomocí modulu zvaného MeetMe.

MeetMe bylo založeno na mixování audia pomocí DAHDI (dříve Zaptel) rozhraní. To vyžadovalo od systému nějakou podporu časování např. hlasovou kartu. Později se objevily i sw časovače, ale byly s nimi vždy nějaké problémy. Navíc byl problém je provozovat ve virtualizovaných systémech. Dalším problémem byla pouze podpora frekvence do 8khz.

Z těchto a dalších důvodů byl konferenční modul napsán znovu na zelené louce. Modul konference ConfBridge byl přepsán a umožňuje mixovat audio různých frekvencí. Není už problém mít konferenční hovor se zákazníkem z mobilu a používat SIP telefon s HDSP (www.hdsp.cz) kodeky např. G722.

Přibyla i základní podpora pro video. Mód follow_talker umožňuje přepínat zdroj videa podle toho kdo mluví nejhlasitěji. Všichni účastníci musejí mít stejný videokodek.

Konference je definována čtyřmi základními koncepty

  1. číslo konference (Conference Number)

  2. profil konference (Bridge Profile)

  3. profil uživatele (User Profile)

  4. konferenční menu (Conference Menu)

Číslo konference – je číselná reprezentace instance dané konference. Volající, kteří se připojí do konference se stejným číslem budou ve stejné konferenci. Účastníci konference volající na různé telefonní číslo nemusí být ve stejné konferenci. Logické párování, která konference je na kterém telefonním čísle, se nastavuje v dialplánu ústředny.

Profil konference – je nastavení parametrů dané konference. Jedna konference nemůže mít více profilů.

Profil uživatele – je nastavení parametrů, které ovlivňují možnosti účastníka v konferenci. Každý účastník může mít svůj profil.

Konferenční menu – je nastavení funkcí, které má uživatel k dispozici pomocí DTMF volby pokud je připojený do konference např. vykopnutí jiného účastníka z konference, jeho ztlumení atp.

Každý účastník může mít svůj profil.

T.38 gateway

Pro milovníky faxů (soukromě spíš používán výraz masochisty) Asterisk nyní podporuje kromě T.38 passthrough i gateway funkcionalitu. Pokud tedy máte v Asterisk serveru FXO, BRI, PRI kartu a faxový přístroj připojen přes protokol SIP, bude vám T.38 protokol fungovat. Zají­mavostí může být, že na vzniku této funkcionality se podílely i české a slovenské firmy (IPEX, Nethemba a další).

Funkce se zapíná v dialplánu pomocí FAXOPT(gateway)=yes . To samé platí i pro res_fax (fax do mailu). Pro res_fax byly také upraveny AMI eventy ReceiveFAXStatus a SendFAXStatus na jeden event FAXStatus, který obsahuje stavy ‚send‘, ‚receive‘ nebo ‚gateway‘.

V SIP kanálu byla přidána podpora pro stav REJECTED pro případ, kdy je T.38 odmítnuto.

Podpora textových zpráv

Pro někoho určitě velkou funkcí podpora XMPP a SIP SIMPLE textových zpráv nezávislých na aktivním hovoru. To znamená, že pokud na Asterisk pošlete textovou zprávu, tak s ní můžete pomocí pravidel v „dialplánu“ dělat různé věci. Například gateway mezi SIP a XMPP světem.

Jakpak na to?

Pro SIP je k dispozici několik parametrů v sip.conf

accept_outofcall_message  – obecně zapínáme/vypínáme podporu přijímání textových zpráv

outofcall_message_context  – tímto parametrem říkáme, do jakého kontextu nám zprávy budou padat k dalšímu zpracování. Pokud je budeme chtít zpracovávat odlišně například dle odesilatele, musíme si to již vyřešit v rámci tohoto obecného kontextu.

Pro XMPP(Jabber) jsou v jabber.conf  dva parametry, které mají stejné funkce jako výše uvedené parametry pro SIP.

Sendtodialplan  – pošle zprávu do dialplánu ke zpracování

context  – zpráva se objeví v contextu definovaném tímto parametrem

Takže teď už nám Asterisk zprávy přijímá. Jak je tedy zpracovat? K dis­pozici je funkce MESSAGE() a aplikace  MessageSend().

Kompletní možnosti zjistíte pomoci core show function MESSAGE a core show application  MessageSend().

Příklad použití:

exten => test,1,Answer()
same => n,Set(MESSAGE(body)=Ahoj, zavolej. Styska se mi. Tvuj Asterisk)
same => n,MessageSend(sip:spravce_v_hospode@nekde.cz,asterisk@tady.cz)

Pro případné zájemce přidávám link na schvalovací proceduru této funkce.

SQLite nasazeno pro AstDB

Funkce, která není příliš viditelná pro uživatele, ale programátoři po ní dlouho volali. Asterisk používá databázi AstDB jako interní úložiště dat například sip registrace, blacklist, nastavení přesměrování a podobně.

Ve starších verzích byla použita Berkeley DB 1.86 s kterou bylo obtížné pracovat externě. Ve verzi 10 byla tato DB nahrazena ligtweight databází SQLite 3, která je velmi oblíbená.

Stávající Berkeley AstDB je možné překonvertovat pomocí utility astdb2sqlite3, která je dostupná v sekci UTILS při kompilaci. Tato utilita se kompiluje vždy a Asterisk ji sám použije při konverzi při prvním spuštění.

SILK kodek

Asterisk 10 poskytuje podporu kodeku SILK, který je použit ve Skype síti. SILK je velmi kvalitní kodek, který funguje dobře jak v narrow-band, tak ve wide-band modech. Jeho nároky na výkon jsou zhruba třikrát vyšší než pro kodek G729a.

Mezi známé SIP klienty podporující SILK patří CSIPSimple, Counterpath Bria, Jitsi (build 3648) a další. Bohužel SILK licence vyžaduje ke svému chodu binární modul. Pro Asterisk 10 si tento modul musíte stáhnout.

Soubor s příponou .so je pak třeba umístit do adresáře /usr/lib/asterisk/modules a provést restart Asteriska.

CELT kodek pass-through

Asterisk 10 podporuje kodek CELT v režimu pass-through (nepodporuje transkódování na jiné kodeky). CELT poskytuje přenos hlasu ve vysoké kvalitě s nízkým zpožděním. Kodek lze velmi dobře použít jak pro přenos hlasu, tak pro přenos hudby.

Protože kodek CELT spolu s kodekem SILK bude použit pro otevřený kodek OPUS pod křídly IETF a protože návrh bitstreamu kodeku CELT nemusí být finální, není k dispozici podpora pro transkódování kodeku CELT.

Další menší novinky

Nativní HTTP server je nyní možné provozovat na IPv6.

V Asterisk CLI je nyní dostupný příkaz ‚gtalk show settings‘, který zobrazí aktivní konfiguraci dle  gtalk.conf.

Přibyla podpora vysokých frekvencí u nativních formátů (wideband audio). Rozsah je nyní od 8 kHz do 192 kHz. Nové přípony těchto souborů jsou .sln12, .sln24, .sln32, .sln44, .sln48, .sln96, .sln192.

Příkazy ‚sip show peers‘, ‚iax show peers‘, and ‚dahdi show peers‘ nyní obsahují pole description, které obsahuje data z parametru description definovaného v sip.conf, iax2.conf, nebo  chan_dahdi.conf.

Podpora kodeku speex ve variantě 32 kHz.

Dialplán funkce JITTERBUFFER umožňuje jitterbuffering na straně ústředny. Pomocí této funkce je tedy možné použít jitterbuffer (zlepšení kvality hlasu při zhoršené kvalitě sítě) i pro aplikace na ústředně jako je konference.

Funkce CHANNEL(pickupgroup) umožňuje čtení a manipulaci s pickup group u aktivního hovoru.

V CLI přibyl příkaz „calendar show types“ na vypsání přihlášených kalendářů.

MixMonitor – přidány dvě nové možnosti nahrávání. Parametr r nahrává pouze příchozí stream, parametr t nahrává pouze odchozí stream.

Přidán parametr encryption_taglen v SIP protokolu k nastavování „auth taglen“ hlavičky u SRTP. Toto vzniklo z důvodu toho, že některé telefony bez explicitního nastavení nefungovaly. Podporovány jsou pouze hodnoty 32 a 80.

SIP kanál nyní generuje security eventy pomocí Security Events Frameworku pro REGISTER a INVITE pakety.

Kompletní přehled novinek je k nalezení na webu, stejně jako detailní changelog.

Do manager API byla přidána akce FilterAdd, která umožňuje filtrovat eventy, které generuje Asterisk tak, aby datový tok byl v „únosné“ míře.

Na co si dát pozor při upgrade

ConfBridge – parametry aplikace ConfBridge v dialplánu byly změněny a nejsou zpětně kompatibilní. 

AstDB – interní databáze AstDB nyní standardně používá SQLite 3 databázi.

Asterisk Manager Interface – Verze AMI protokolu byla povýšena na 1.2 z důvodu změny eventu Unlink na Bridge. 

root_podpora

Kompilace modulů – všechny moduly nyní obsahují parametr MODULEINFO, který může nabývat hodnot core, extended nebo deprecated. Moduly s hodnotou deprecated nejsou standardně kompilovány.

Týká se upgrade z verze 1.8. Pro kompletní výčet všech upozornění a pro nižší verze se podívejte na web.

Byl pro vás článek přínosný?

Autor článku

Autor pracuje ve společnosti IPEX a.s. a ve volném čase se zabývá podporou open-source komunikačních projektů.