Chi smanetta con quel simpaticissimo PBX software dal nome altrettanto simpatico come Asterisk, prima o poi, si scontra con la questione dei codec audio da utilizzare sui canali SIP.
Durante la fase di startup di una chiamata, Astersik fa una “negoziazione” dei codec con la controparte (#), in modo da trovare una “lingua comune” con cui parlare:
- *: Io ciò A, C ed F. Tu che ciai?
- #: Io t’offro B, C e K. Che famo?
- *: Proviamo C?
- #: Vabbene C
- *: Ok!
E la chiamata si avvia utilizzando il codec denominato C.
Nel caso non ci siano codec in comune la chiamata… cade, ovviamente.
Nel caso ci sia invece più di un codec in comune, viene selezionato quello con priorità più alta (vedremo come definire le priorità).
A questo punto, viene spontaneo chiedersi quali codec attivare per far funzionare il nostro PBX sia lato trunk con i principali provider SIP, sia lato interni con i più comuni terminali SIP hardware.
Tra i tanti codec disponibili, quale dobbiamo preferire? Semplice: quello che consuma meno banda, in modo da poter effettuare più chiamate contemporaneamente possibili.
Consultando questa ottima tabella la scelta cadrebbe subito sul codec G.723 oppure G.729 oppure anche iLBC.
Ma va considerato un aspetto importantissimo: dobbiamo selezionare un codec che sia presente nella lista dei codec supportati dalla controparte coinvolta nella chiamata: un telefono oppure un provider SIP, altrimenti la chiamata… cade, ovviamente.
Bene, i codec universalmente adottati dai terminali di classe business (cioè tutti) e/o dai provider sono principalmente questi: G.711 (detto anche alaw, oppure ulaw), GSM e G.729.
Il G.711 è in pratica un codec-non-codec, nel senso che non comprime: corrisponde ad un canale fonia standard da 64kbps, e cioè un campionamento della voce a 8khz per 8 bit di ampiezza. Consuma molta banda, circa 90kbps… su “strada”.
Il codec GSM è poco usato lato terminali, lo è molto di più lato provider.
Il G.729 sembra fare al caso nostro: consuma poco e, tra l’altro, ha una qualità audio ottima, paragonabile al non-compresso G.711.
E qui casca l’americano. Il codec in questione è coperto da brevetto. Non lo si può usare se non dopo aver pagato delle “royalties” al legittimo proprietario (brevetto US#5664055 della Lucent).
Si devono pagare circa 9 dollari per canale contemporaneo utilizzato. Non è una spesa eccessiva.
Ma, ammettendo di aver acquistato una licenza per 4 chiamate contemporanee, cosa succede alla quinta? Usa un altro codec? No, cade.
Per fortuna qualcuno ha tirato fuori dal capello una implementazione Open Source del codec. Cosa ce ne facciamo? Nulla, il brevetto rimane sull’algoritmo ma… solo negli U.S.A: per adesso infatti, la Comunità Europea non ha accettato il concetto di brevetto sul software (è una cosa assurda, teoricamente si potrebbe brevettare il doppio-click!!!) e possiamo liberamente installare il codec G.729-OPEN sulle nostre installazioni di Asterisk.
Un bravo ragazzo ha anche compilato il codec in versione Open Source ottimizzandolo per i vari tipi di CPU presenti in giro: scarichiamo quindi la versione giusta per la nostra cpu da questo repository.
Per un comune Pentium4, da root, sulla nostra Debian luccicante pestiamo i seguenti comandi:
quack:~# wget 'http://asterisk.hosting.lv/bin/codec_g729-ast14-gcc4-glibc-pentium4.so'
quack:~# asterisk -rx 'stop now'
quack:~# mv codec_g729-ast14-gcc4-glibc-pentium4.so /usr/lib/asterisk/modules/codec_g729.so
quack:~# /etc/init.d/asterisk start
Se Asterisk non dovesse più ripartire dopo questo trattamento… avete sbagliato CPU nel download.
Ora possiamo “offrire” il codec G.729 ai nostri peer, definendolo per primo in modo da dargli priorità massima:
[InternoPippo]
....
....
....
disallow=all
allow=g729
allow=gsm
allow=alaw ; sarebbe G.711 europeo
allow=ulaw ; sarebbe G.711 americano
Stessa operazione lato trunk, dove è definito un provider SIP:
[ProviderFigo]
...
...
...
disallow=all
allow=g729
allow=gsm
allow=alaw ; sarebbe G.711 europeo
allow=ulaw ; sarebbe G.711 americano
Restart del chan SIP in Asterisk (ci si dimentica sempre eh?) e tutto dovrebbe filare liscio con 32kbps di banda per chiamata.
Ci sarebbero altri aspetti da considerare sull’argomento, come il fatto che se non c’è transcoding, il codec non viene utilizzato e il fatto che i softphone (specie se free e/o americani) non hanno di solito il G.729 ma… sono stanco di scrivere, ne riparlerò… forse.
Faccio notare che lo stack SIP dei Nokia con Symbian S60 3rd supporta egregiamente il codec G.729 con una qualità davvero ottima ma… per “prioritizzarlo” va usato un trucco.
PS: se invece non ti importa un fico secco di sta roba e sei incazzato come una iena perchè ti hanno cambiato orari e fermate del bus 729 Cinisello/Cusano ecco i nuovi percorsi.

Se ne sentiva la mancanza: la chat AJAX di Facebook fuori dal browser. Non so se gli ottimi sviluppatori di
Ultime chiacchiere