Codec G729, Asterisk e i brevetti sul software

Autobus 729Chi 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.

10 pensieri su “Codec G729, Asterisk e i brevetti sul software

  1. Beh.. Direi che in poche righe HAI indicato, e risolto, quello che forse è il problema che ci affligge di più. LA QUALITA DELLE CHIAMATE!!
    Ottimo davvero. Certo non era difficile intuire la procedura, ma tra il dire e il fare…. Adesso forse non sentiremo più dire dalla collega dell’ufficio accanto: “ho chiamato adesso e lo sai che si sentiva proprio maleee…” Ecco, stai zitta!

  2. bella siegazione, ho cambiato qualcosa e sgrufolato sull’1.6….
    ma tu parli del codec g729, e poi lo inserisci come 279???? :)))

    ciao

  3. Complimenti per la pagina. Avrei bisogno di capire meglio come installare il codec. Io per telefonare uso il computer che è collegato a internet e le cuffie. Ho installato un programma voip e utilizzando il softphone riesco a telefonare. Pultroppo, spesso i miei interlocutori si lamentano che la voce si sente a tratti. Io non sono un’esperto di voip, anzi, ed è per questo che Vi chiedo gentilmente se potete aiutarmi. Graz

  4. veramente un bel articolo complimenti ma avrei una domanda da fare forse banale ho un centralino virtualizzato su proxmox vorrei montare il codec open 729 ma eesendo virtualizzato in base a cosa scelgo ovvero per il processore realmente installato sulla macchina?

  5. In base alla CPU emulata dal software di virtualizzazione. Non conosco proxmox ma, di solito, si virtualizza una CPU della stessa famiglia di quella fisica.

  6. Ho installato con successo il codec in questione, ma accade che quando chiamo i file wav che prima funzionavano, adesso non funzionano più. se disabilito il codec g729 allora riprendono a funzionare.

    Non sono riuscito a trovare una risposta in merito.

  7. o risolto, nel senso che mi sono sbagliato io, non era nella posizione giusta. ora e tutto OK.

    ULTIMA DOMANDA:
    Ipoteticamente posso ricevere chiamate illimitate su questo codec open source ?

  8. sto testando il codec g729 open source su un asterisk 11, però a volte l’audio non si sente!!! non capisco per quale motivo! qualcuno sa darmi qualche dritta?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *