Obecně o Asterisku
Na úvod krátce o Asterisku pro neznalé: Asterisk je open-source framework pro budování komunikačních systémů a aplikací. Asterisk pohání různé pobočkové ústředny, konferenční servery, VoIP Gatewaye a další speciální aplikace. Projekt je sponzorován firmou Digium, která prodává support a komerční produkty.
První verzi dal k dispozici Mark Spencer v roce 1999. Mark Spencer je mimo jiné také původním autorem programu dnes známého pod jménem Pidgin.
V České republice existují firmy, které poskytují komerční support nebo produkty nad Asteriskem postavené. Jsou to například Canistec, www.ipex.cz a další.
Používáte ve firmě nějakou variantu Asterisku?
Asterisk 15 je Standard Support verze. Tzn. není dlouhodobě podporovaná a tudíž se nehodí pro projekty, u kterých je třeba zajistit dlouhodobou podporu. K tomuto účelu slouží tzv. LTS verze. Standardní verze je určena na projekty kde je možné dělat jednoduše upgrady, na testování, na ověřování nových funkcí atp.
Dle vývojářů by verze 16 již měla být určitě LTS. Zaměřena bude hlavně na doladění podpory videa.
Release Series | Release Type | Release Date | Security Fix Only | EOL |
11.x | LTS | 25.10.2012 | 25.10.2016 | 25.10.2017 |
12.x | Standard | 20.12.2013 | 20.12.2014 | 20.12.2015 |
13.x | LTS | 24.10.2014 | 24.10.2020 | 24.10.2021 |
14.x | Standard | 26.9.2016 | 26.9.2017 | 26.9.2018 |
15.x | Standard | 10. 2017 (tentative) | 10. 2018 (tentative) | 10. 2019 (tentative) |
Hlavní novinky verze 15
Streams
Hlavní a v podstatě jedinou velkou novinkou verze 15 je přidání podpory videokonference typu SFU. To znamená, že se Asterisk přidal do rodiny projektů, které SFU implementují např. mediasoup, kurento, Janus, Jitsi Videobridge a další.
Aby bylo možné tuto velkou novinku přidat, bylo potřeba upravit architekturu. Byl přidán koncept streamů, které můžou být jak jednosměrné, tak obousměrné. V oblasti videokonferencí je běžné mít 8 příchozích streamů od 8 účastníků a jeden odchozí stream.
Do verze 15 se používal koncept, kdy se přímo manipulovalo s jednotlivými kanály a tento přístup příliš nevyhovoval trendu multi-party audio/video konferencí.
Jak prakticky tedy novou architekturu použít? Stáhnout, zkompilovat a nainstalovat Asterisk 15. Poté je potřeba připravit certifikát pro doménu. Stačí certifikát zdarma od Let's Encrypt.
Zprovoznit HTTP server pro SIP over Websockets. Konfigurace /etc/asterisk/http.conf
bude vypadat přibližně takto:
[general] enabled=yes bindaddr=0.0.0.0 bindport=8088 tlsenable=yes tlsbindaddr=0.0.0.0:8089 tlscertfile=/etc/asterisk/keys/asterisk.pem
Vytvořit konfiguraci SIP zařízení „guest“, pomocí kterého se připojíme z prohlížeče
[transport_wss] type=transport bind=0.0.0.0 protocol=wss [guest] type=aor max_contacts=5 [guest] type=endpoint context=default direct_media=no allow=!all,alaw,vp8,h264 aors=guest max_audio_streams=10 max_video_streams=10 webrtc=yes dtls_cert_file=/etc/asterisk/keys/asterisk.pem dtls_ca_file=/etc/asterisk/keys/ca.crt
Nyní je potřeba nakonfigurovat konferenční modul v režimu SFU
[general] [default_bridge] type=bridge video_mode=sfu [default_user] type=user music_on_hold_when_empty=yes music_on_hold_class=default
Dále připravíme dialplán, abychom se do konference mohli přihlásit
[default] exten => video-conference,1,Answer() same => n,ConfBridge(guest) same => n,Hangup()
Nakonec umístíme na server webovou aplikaci, která nám obstará základní grafické rozhraní. Aplikace je na GitHubu a slouží pro demonstrační účely. Do adresáře, kde běží webový server, proveďte git clone
.
Například pro RedHat/Fedora systémy s Apachem:
# cd /var/www/html # git clone https://github.com/asterisk/cyber_mega_phone_2k.git
V prohlížeči pak stačí zadat https://muj.test.cz/cyber_mega_phone_2k
Demo aplikace vypadá například takto
Pokud si chcete video pouze vyzkoušet, můžete použít testovací instanci na adrese -democonf.slu.cz/demo. Demo je provozováno ve spolupráci s Centrem informačních technologií na Slezské univerzitě v Opavě."
WebRTC
Další důležité úpravy, které mají souvislost s výše uvedeným, jsou na poli podpory WebRTC. Pro PJSIP přibylo zjednodušení, jak nakonfigurovat PJSIP endpoint, a to pomocí parametru webrtc=yes
.
Místo této definice:
rtcp_mux=yes use_avpf=yes ice_support=yes use_received_transport=yes media_encryption=dtls dtls_verify=fingerprint dtls_setup=actpass
Stačí tato:
webrtc=yes
Dále byla přidána podpora režimu BUNDLE, která umožňuje mixovat více streamů na jednom portu. Tzn. bez BUNDLE by komunikační porty vypadaly např. takto:
- UDP/10000 audio (kodek OPUS)
- UDP/10001 video (kodek VP9)
Pomocí BUNDLE bude použit pouze jeden port, což je lepší v sítích, kde je použit NAT.
- UDP/10000 audio+ video (kodek OPUS, kodek VP9)
V SDP se tento parametr zobrazuje jako a:group=BUNDLE
Podobná metoda se používá i pro protokol RTCP a jmenuje se RTCP-MUX. V SDP se uvádí jako a=rtcp-mux
:
- UDP/10000 RTP audio + RTCP audio+ RTP video + RTCP video
Další příjemnou věcí z pohledu podpory WebRTC je pass-through podpora video kodeku VP9.
3D audio konference
Za zmínku stojí ještě zajímavost v modulu Confbridge. V rámci akademického projektu STEAK byla do Asterisku přidána funkcionalita, která umožňuje lépe rozeznat, kdo právě mluví v audio konferenci.
Konferenční modul vytvoří virtuální model místnosti, do které umístí účastníky. Pomocí simulace toho, že účastník mluví z nějaké části místnosti, se zlepšuje a zjednodušuje identifikace řečníka.
Pokud jste se někdy audio konference účastnili, tak víte, jak chybí vizuální kontakt s tím, kdo mluví, a dochází ke skákání do řeči.
Tento projekt se tento problém snaží řešit pomocí tzv. Binaural synthesis . Více v samostatném vědeckém článku. Podmínkou je použití stereo sluchátek a kodeku(doporučený je kodek OPUS), který podporuje stereo zvuk.
Tuto výhodu tedy nevyužijí volající z klasické mobilní nebo pevné sítě. Podívat se můžete na příklad konfigurace.
Další funkcionalita
Do dialplánové funkce CHANNEL přibyla možnost vytažení ID hovoru, které je používáno pro textové logy Asterisku. Tato funkce je výborná pro diagnostiku, kdy si k danému hovoru do CDR toto ID uložím a poté můžu problémové hovory jednoduše v textovém logu filtrovat.
Funkce se používá např. takto:
exten => _X.,n, set(CDR(userfield)=${CHANNEL(callid)})
Lorenzo Miniero, který je aktuálně známý především vývojem Janus WebRTC gatewaye a audio/video přenosy z IETF meetingů st,ojí za experimentálním patchem, který umožňuje informovat kodeky o kvalitě aktuální hovoru z RTCP dat. V praxi funkcionalita zatím bohužel není příliš využitelná.