[AsteriskBrasil] RES: Codec G729 Free?!

Bernardo Vieira bernardo.vieira em terra.com.br
Quinta Março 29 11:31:30 BRT 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Sadi,

O Asterisk, por padrão, vem com o codec g729 em modo passthru, isso quer
dizer, em termos práticos, que o codec está lá só para "cumprir tabela".
Esse codec serve para que se, por exemplo, duas extensões rodando g729
usam seu * para estabelecer uma ligação a ligação é estabelecida
normalmente porque ambas as extensões estão usando o mesmo codec e o *
"conhece" este codec. Este codec no entanto não está fazendo nada, ou
seja, ele não está nem codificando nem decodificando nada, apenas os
codecs das extensões estão trabalhando, daí o termo "passthru". O codec
g729 em modo passthru permite a ligação desde que seja possível
estabelecer a conexão RTP diretamente entre os clientes, pois somente
desta forma não é necessário que ele codifique/decodifique o stream.
Existem vários cenários em que o * é forçado a ficar no meio do tráfego
RTP, ou em uma das pontas da ligação, alguns exemplos:
1) Ponte IP/PSTN -> PSTN/IP, o mais óbvio de todos, a ligação
termina/origina no *
2) Voicemail, URA, transfências assistidas, fax, MOH, filas, conferências
3) Trascodificação (este é o caso que você apresentou entre seu ATA e o
X-Lite): as duas extensões não suportam os mesmos codecs e o asterisk
tem que traduzir os codecs usados (teoricamente o caso 1 também
enquadra nessa categoria)
4) Tradução de protocolos: as duas extensões usam protocolos diferentes
IAX, SIP, H323, Zap, etc (teoricamente o caso 1 também  enquadra nessa
categoria)
5) Transversão de NAT: a opção canreinvite pode forçar que o * fique no
meio do caminho da ligação se os clientes não conseguirem estabelecer
uma rota direta entre eles
Existem outros casos menos óbvios também, no voip-info tem um longo
artigo a respeito, mas os óbvios cobrem 90% das ocorrências.
Nos casos em que o * tem que ficar no meio do tráfego você precisa de
usar uma versão do g729 capaz de codificar/decodificar o stream, e é aí
que entra o g729 licenciado. Cada licença do g729 te permite 1
transcodificação, i.e. ele é capaz de codificar 1 canal e decodificar 1
canal. No final das contas você tem que estimar quantas ligações
simultâneas você vai ter usando o g729 e comprar as licenças de acordo
com esta estimativa.

SOLUÇÕES POSSÍVEIS:
1) Comprar o número de licenças da Digium, ao custo de $10 cada (bem
razoável), necessárias em função do seu volume de ligações. O problema
com esta solução não é tanto o custo da licença mas sim a demanda no
processador do seu servidor. É claro que se você usa seu * para terminar
ligações na PSTN via uma interface pri ou tdm você não tem como fugir
deste processamento.

2) Ignorar copyright e patentes, abdicar do direito ao suporte e
prosseguir com g729 "free"*, para isso você tem que baixar o g729 que
tem no site da intel, aplicar o patch para ele ter a interface dos
codecs do * e compilar você mesmo o resultado.

* na verdade o codec não é free, o que a Intel oferece é uma
implementação em código aberto do codec como exemplo de utilização das
bibliotecas IPP que ela fornece, no entanto, para utilizar este codec
você têm que obter a licença da Sipro (http://www.sipro.com/), e, mesmo
que você tenha dinheiro para comprar a licença, você provavelmente não
irá conseguir porque eles só vendem para desenvolvedores de produtos e
equipamentos. Além da questão legal da coisa, você também está sujeito à
questão do processamento, que pode até ser menor que o processamento dos
codecs compilados pela digium, se você fizer tudo direitinhoe otimizado
para o seu processador, mas eu não contaria com isso.

3) Configurar seus atas para usarem o g711 como fallback, nesse caso o
que ocorreria no caso da ligação que você descreveu é que o asterisk
tenta estabelecer a ligação da seguinte forma (supondo que a ligação
originou no X-Lite):

3.1 O X-lite requere o início da ligação ao asterisk, e informa via SIP
suas capacidades ao asterisk:

    m=audio 19064 RTP/AVP 2 0 <- Prioridade dos codecs (gsm é preferido)
    a=rtpmap:0 PCMU/8000 <- g711 ulaw com sample de 20ms
    a=rtpmap:2 G726-32/8000 <- gsm com sample de 20ms
    (...)

3.2 O asterisk chama o ata

3.3 O Ata responde e informa ao asterisk suas capacidades:

    m=audio 19064 RTP/AVP 18 0 <- g729 é preferido
    a=rtpmap:0 PCMU/8000
    a=rtpmap:18 G729/8000
    (...)

3.4 O asterisk determina que a ligação pode ser estabelecida em g711
porque as duas pontas têm este codec.

O problema com esta solução é que nem todo ATA te permite definir um
codec de fallback, e além do mais, sua banda vai embora (10.45 KBps por
canal, 20.90 KBps por ligação)

4) Finalmente você pode estabelecer que suas pontas sempre usarão g729,
isto implica que você teria que trocar seu X-Lite pelo Eyebeam, que tem
suporte a g729. Se você tem um volume grande de extensões SIP e não usa
seu * para terminar na PSTN (ou usa gateways para fazer isso) esta pode
ser uma ótima opção já que consome pouca banda, o processamento é
distribuído para os clientes, e os custos dos eyebeam e dos gateways
acabam sendo compensados pela redução no custo do hardware do servidor.
Nessa modalidade, você tem que converter os prompts do * para g729.

Sadi Nogueira escreveu:
> Pessoal, observando as mensagens sobre esse assunto, percebi que tenho mais
> dúvidas sobre codecs/ASTERISK do que imaginava. Bom, se eu não estiver
> errado, quando agente instala o ASTERISK, via ports, via apt-get ou baixa do
> site, ele já vem com g729 além de outros codecs. Aqui no meu server de
> teste, eu deixei de usar o g729 por que o ASTERISK não consegue fazer uma
> ligação usando 2 codecs diferentes, dá erro. Eu tive que deixar liberado
> somente o g711u. Por exemplo, meu ATA estava configurado com g729 nas 2
> portas FXS, e minha máquina com o X-lite. Se eu tento ligar de um para o
> outro, nem chega a completar a ligação, de cara já aparece na CLI:
>  
> "WARNING[5930]: channel.c:2347 set_format: Unable to find a codec
> translation path from g729 to ulaw".
> 
>  Isso é uma falha do meu server, eu não tenho o g729, é uma limitação do
> ASTERISK ou preciso voltar pra escolinha e aprender tudo de novo? Não sei se
> fui claro.
> 
> Abraços a todos da lista.
> 
> 
> 
> 


- --
"What most profoundly divides two men is a different sense and degree of
cleanliness. What help is all honesty and mutual utility, what help is
all the good will for each other: in the end the fact remains-they can't
stand each other?s smell!"

- - Nietzsche
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFGC83C2QVs8jsa1mQRAmUPAJ4un92fjLWUTMlxn2TBMEw5ZCp0fQCdF7Zc
tdqe8nTiR8Vb2tmTMtLtDcM=
=Vmlb
-----END PGP SIGNATURE-----


Mais detalhes sobre a lista de discussão AsteriskBrasil