Re: [eside-ghost] Asterisk, detección de llamadas no exitosas con el SPA3102 y transcoding

Unai Goikoetxeta unai en goikoetxeta.com
Mar Sep 25 03:02:38 CEST 2007


Me contesto a mi mismo en alguna cosa... He estado leyendo en la siguiente
página sobre el tema:

http://www.voipforo.com/en/codec/codecs.php

Por lo que, he llegado a las siguiente conclusiones que espero que me
confirméis.

g711a es la versión Europea del estándar de la ITU g711 también conocido
como ALAW, estándar basado en la modulación por código de pulsos o PCM con
una tasa de bits 64kb/s y un muestreo de 8kHz. Si no recuerdo mal lo
estudiado en la universidad, esto es la base de la telefonía básica en la
que un canal de E1 tiene una tasa de 64kb/s.

En base a esto, esta claro que NO debo tener activado ulaw ya que no voy a
darle uso en ningún caso.

Siguiendo con los demás codecs, g723.1 es otro codec de la ITU, con menor
tasa de bits (a elegir entre 5,6 o 6,3 kb/s) que emplea una frecuencia de
muestreo idéntica a la anterior (8kHz). Esto me hace suponer que este codec
muestrea lo mismo, aunque lo comprime en mayor medida, reduciendo el ancho
de banda necesario respecto al g711a en más de una décima parte.

En la página también pone que el g723.1 es la parte del audio en el estándar
H.324 de videoconferencias.

Existe otro codec, soportado por asterisk y por mi SPA3102 (puede que
también por el PAP2) que es el g726. Este es un codec de la ITU que viene a
remplazar g723 (completamente diferente al g723.1) y al g721. Básicamente
emplea la modulación de código de pulsos adaptiva o ADPCM en la que podemos
seleccionar la tasa de bits entre cuatro posibles (16/24/32/40kb/s)
realizando el muestreo también a 8kHz.

El g729 es uno de los codecs más recientes de la ITU, que codifica a 8kb/s
empleando un sistema de codificación conocido como CS-ACELP
(conjugate-structure algebraic-code-excited linear-prediction) con muestreo
de 8kHz. La ventaja es evidentemente su baja tasa de transmisión, aunque a
costa de un pequeño retardo de unos 15ms.

Por último, el codec GSM es el utilizado en la telefonía móvil de segunda
generación estandarizado por el ETSI. Debido a las características
especiales de las tramas GSM, la tasa de transmisión es de tan solo 13kbps,
empleando, lógicamente un muestreo de 8kHz. Desde un punto de vista técnico,
comparándolo con los demás codecs, GSM no ofrece la mejor calidad, pero si
una calidad aceptable para velocidades de transmisión bajas.

Ahora bien, sobre la teoría, debería utilizar g711a en la red local de casa
debido a que no tengo restricciones de ancho de banda, por lo que debería
usar ALAW en los dos puertos (FXS y FXO) del SPA3102.

En cuanto al codec a utilizar en el PAP2 que tendré conectado en cualquier
punto de Internet para acceder al servidor Asterisk de casa, deberé elegirlo
en base a la conexión a Internet que disponga.

Evidentemente, ante una conexión pobre, el codec más apropiado será
g723.1porque puede llegar a funcionar a 5,6kb/s, que si la memoria no
me falla es
la velocidad de transmisión de un simple modem de 56k, aunque seguramente
dispondré de una conexión bastante mejor. En vez de usar g723.1 o g729, ¿no
será mejor utilizar g726 con una tasa de 32 o 40 kb/s ?



PD:

Como curiosidad. El oído humano es capaz de detectar sonidos del rango de
20Hz a 20kHz, aunque la voz humana sólo puede llegar a emitir hasta unos
10kHz en casos muy extremos. Por lo que, si quisiéramos realizar un codec
que registrara la voz humana perfectamente, teniendo en cuenta el teorema de
Nyquist que dice que para muestrear es necesario tomar las muestras al menos
al doble de la máxima, necesitaríamos muestrear a 20kHz o más.

Aún así, en la telefonía, se tiene en cuenta que tomando sólo los valores
comprendidos entre 20Hz y 4kHz de los emitidos por cualquier voz humana es
posible comprender el mensaje sin deteriorar totalmente el contenido
frecuencial. Es por esto, que la tasa de muestreo en la telefonía y en la
mayoría de los codecs es de 8Khz (2*4kHz).

Si os fijáis, al hablar por teléfono la voz de la otra persona nunca suena
igual que en la realidad debido a la ecualización que se realiza durante el
muestreo. Esta diferencia suele ser más evidente en las chicas debido a que
su registro es más elevado. Por este motivo, si la otra persona es un chico
con voz muy grave, pocas veces notaremos diferencia entre su voz real y la
que escuchamos por el teléfono.

Teniendo en cuenta esto, si buscásemos la mayor calidad posible en cuanto al
muestreo para escuchar la voz de forma más real en una comunicación, el
codec a elegir sería el g722 ya que muestrea a 16kHz (filtra las frecuencias
de 0 a 8kHz en vez e 0 a 4kHz), con lo que lograríamos captar a la
perfección a la gran mayoría de las voces humanas. Este codec emplea una
tasa de bit de 64kbps, y la pena es no está soportado por los ATA ni por
Asterisk por defecto.


On 9/25/07, Unai Goikoetxeta <unai en goikoetxeta.com> wrote:
>
> Saúl,
>
> Yo entendí que me dijiste que como tenía un servidor potente podía hacer
> transcoding :S Bueno.. he instalado los codecs de g729 y g723.1 de esa
> página en mi Asterisk tal y como me has dicho. Lo que no entiendo bien es la
> recomendación que me has dado respecto a que codecs utilizar en cada ata.
>
> Te comento, ahora mismo, en el PAP2 tengo configurado el codec g729a y se
> conecta a un usuario SIP con las siguientes características:
>
> [unai]
> type=friend
> secret=secret
> host=dynamic
> canreinvite=no
> disallow=all
> allow=alaw
> allow=ulaw
> ;allow=g729
> ;allow=g723.1
> ;allow=gsm
> context=etxea
> dtmfmode=rfc2833
> callerid=666666666
> language=es
> qualify=yes
> mailbox=666666666 en buzondevoz
>
>
> Por otro lado, en el SPA, para el puerto FXS tengo el codec g729a con la
> siguiente configuración en el asterisk para su usuario SIP:
>
> [etxea]
> type=friend
> secret=secret
> host=dynamic
> canreinvite=no
> disallow=all
> allow=alaw
> allow=ulaw
> ;allow=g729
> ;allow=g723.1
> context=etxea
> dtmfmode=rfc2833
> outgoinglimit=1
> callerid=999999999
> qualify=yes
> language=es
> mailbox=999999999 en buzondevoz
>
>
> Y en el puerto FXO el codec g729a con:
>
> [rtb]
> type=friend
> secret=secret
> host=dynamic
> canreinvite=no
> disallow=all
> allow=alaw
> allow=ulaw
> ;allow=g729
> ;allow=g723.1
> ;allow=gsm
> context=etxea
> cancallforward=yes
> dtmfmode=rfc2833
> outgoinglimit=1
> language=es
> qualify=yes
>
> Me imagino, que el tema de los codecs permitidos en cada uno de los casos
> tengo que cambiarlo. Tengo cinco preguntas:
> 1. ¿Debería permitir el uso de alaw, ulaw, g729, gsm y g723.1 en los tres
> casos?
> 2. ¿alaw es g711a en los atas?
> 3. ¿Cúal de los codecs tiene mejor calidad de audio?
> 4. En caso de que desee un compromiso entre la calidad del audio y ancho
> de banda consumido, ¿qué codec sería mejor?
> 5. El motivo por el cual me dices que utilice el g729 en el PAP2 supongo
> que me lo recomiendas debido a que el PAP2 lo utilizaré fuera de la red
> local en la que se encuentra Asterisk por lo que me vendrá mejor un codec
> que chupe menos BW, ¿no?
>
> Muchas gracias por todo!!!
>
> Unai
>
>
> On 9/20/07, Saúl Ibarra <saghul en gmail.com> wrote:
> >
> > El 20/09/07, Unai Goikoetxeta <unai en goikoetxeta.com > escribió:
> > > Aupa Jon,
> > >
> > > Muchas gracias por responder. No tenía muy claro como hacer el
> > dialplan, y
> > > me lo saqué de la chistera xD Pero ahora que me has dicho eso, lo he
> > > restructurado para dejarlo así:
> > >
> > > [etxea]
> > >
> > > exten => _XXX,Dial( SIP/${EXTEN}@rtb,30)
> > > exten => _112,Dial(SIP/112 en rtb,30)
> > >
> > > exten => _XXXX, Dial(SIP/${EXTEN}@rtb,30)
> > >
> > > exten => _XXXXX, Dial( SIP/${EXTEN}@rtb,30)
> > >
> > > exten => _656008062,1,Goto(1,1)
> > > exten => _944763299,n,Goto(2,1)
> > > exten => _XXXXXXXXX,n,Dial(SIP/${EXTEN}@rtb,30)
> > > exten => _XXXXXXXXX,n,Congestion
> > >
> > > exten => 1,1,Dial(SIP/unai,30)
> > > exten => 1,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?4)
> > > exten => 1,n,Dial( SIP/6561111111 en rtb,30)
> > > exten => 1,n,Goto(6,1)
> > > exten => 1,n,PlayBack(vm-goodbye)
> > > exten => 1,n,Hangup
> > >
> > > exten => 2,1,Dial(SIP/etxea,30)
> > > exten => 2,n,Goto(7,1)
> > > exten => 2,n,PlayBack(vm-goodbye)
> > > exten => 2,n,Hangup
> > >
> > > exten => 5,1,VoicemailMain(${CALLERID(num)}@buzondevoz)
> > > exten => 5,n,Hangup
> > >
> > > exten => 6,1,Voicemail(656111111 en buzondevoz)
> > > exten => 6,n,Hangup
> > >
> > > exten => 7,1,Voicemail(944761111 en buzondevoz)
> > > exten => 7,n,Hangup
> > >
> > > Sobre la variable ${DIALSTATUS}, probé a ponerlo ayer detrás de la
> > directiva
> > > (1,3) pero no me detectaba ni busy ni congestion.... Si tenéis alguna
> > > sugerencia sobre como ponerlo me haríais un gran favor :)
> > >
> >
> > Para las llamadas a los dispositivos SIP y tal, una macro (normalita
> > jeje):
> >
> > [macro-llamar]
> > exten => s,1,Dial(${ARG1},30,Tt)
> > exten => s,n,Goto(s-${DIALSTATUS})
> >
> > exten => s-BUSY,1,Voicemail(${MACRO_EXTEN}|b)
> > exten => s-NOANSWER,1,Voicemail(${MACRO_EXTEN}|u)
> >
> > exten => _s-.,1,Goto(s-NOANSWER,1)
> >
> > Y en el dialplan pones:
> >
> > exten => 2,1,Macro(llamar,SIP/etxea)
> >
> > > En cuanto al transcoding, lo preguntaba porque Saúl ayer me recomendó
> > > hacerlo. Según te he entendido, tengo que poner en cada usuario el
> > tipo de
> > > codec preferido para él, ¿no? ¿De esta manera, si tengo un codec para
> > el
> > > usuario a y otro distinto para el b, las comunicaciones del a al
> > asterisk
> > > serán empleando el primer codec y las del b al asterisk serán con el
> > > segundo? Quisiera preguntaros sobre qué codec debería utilizar... en
> > el
> > > SPA3102 utilizo el g729a, que me he fijado que no lo tengo soportado
> > por
> > > asterisk....
> > >
> >
> > Umm, yo te recomendé lo contrario :) que no hagas transcodign, para no
> > cargar la máquina... Asterisk de serie no soporta transcoding de g729,
> > pero todo se puede arreglar :) puedes bajarte el codec para fines
> > educativos de http://asterisk.hosting.lv y así podrás transcodificar
> > :)
> >
> > Por otro lado, vas a utilizar softphones y tal, pero con g729 no los
> > hay ni libres ni gratis, así que lo suyo es usar Zoiper y el codec GSM
> > por ejemplo. Entonces, lo mejor será que configures el SPA en alaw,
> > porque el transcoding tiene menor coste. No obstante, en el PAP2
> > tendrás que configurar el g729 para que no te consuma mucho ancho de
> > banda, así que instalate el codec del link que te he puesto.
> >
> > Happy Asterisk hacking!
> >
> > > Muchas gracias!!
> > >
> > > Unai
> > >
> > > PD:
> > >
> > > Me piro a Galicia en dos horas y puede que no pueda contestaros con
> > rapidez.
> > > Pero en cuanto tenga un momento, chequearé el correo :)
> > >
> > >
> > >
> > >  On 9/20/07, Manwe Jon Bonilla <manwe en aholab.ehu.es> wrote:
> > > >
> > > > El Thu, 20 Sep 2007 03:31:26 +0200
> > > > "Unai Goikoetxeta" < unai en goikoetxeta.com> escribió:
> > > >
> > > > > Bueno, ya he configurado el PAPT y el SPA3102 y he de decir que
> > funciona
> > > > > todo de maravilla. Quisiera consultaros un par de dudas en base a
> > mi
> > > > > dialplan en Asterisk:
> > > > >
> > > > > [etxea]
> > > > >
> > > > > exten => _XXXXXXXXX,1,GotoIf($["${EXTEN}" =
> > > "656111111"]?5)
> > > > > exten => _XXXXXXXXX,2,GotoIf($["${EXTEN}" =
> > > "944761111"]?6)
> > > > > exten => _XXXXXXXXX,3,Dial(SIP/${EXTEN}@rtb,30)
> > > > > exten => _XXXXXXXXX,4,Congestion
> > > > > exten => _XXXXXXXXX,5,Goto(1,1)
> > > > > exten => _XXXXXXXXX,6,Goto(2,1)
> > > > >
> > > > > exten => 1,1,Dial(SIP/unai,30)
> > > > > exten => 1,2,GotoIf($["${DIALSTATUS}" = "BUSY"]?4)
> > > > > exten => 1,3,Dial(SIP/6561111111 en rtb ,30)
> > > > > exten => 1,4,Goto(6,1)
> > > > > exten => 1,5,PlayBack(vm-goodbye)
> > > > > exten => 1,6,Hangup
> > > > >
> > > > > exten => 2,1,Dial(SIP/etxea,30)
> > > > > exten => 2,2,Goto(7,1)
> > > > > exten => 2,3,PlayBack(vm-goodbye)
> > > > > exten => 2,4,Hangup
> > > > >
> > > > > exten => 5,1,VoicemailMain(${CALLERID(num)}@buzondevoz)
> > > > >
> > > > > exten => 6,1,Voicemail( 656111111 en buzondevoz)
> > > > > exten => 6,2,Hangup
> > > > >
> > > > > exten => 7,1,Voicemail( 944761111 en buzondevoz)
> > > > > exten => 7,2,Hangup
> > > > >
> > > > > Como veis, he hecho una regla general para todos los teléfonos de
> > 9
> > > cifras,
> > > > > sobre los que filtro mi numero de teléfono y el de casa, para los
> > que
> > > hago
> > > > > un tratamiento especial. En el caso de mi número, primero intento
> > > contactar
> > > > > vía SIP con mi usuario durante 30 segundos, y de no poder hacerlo
> > llamo
> > > a mi
> > > > > teléfono móvil. Si el usuario sip rechaza la llamada, se salta el
> > > > > contestador... pero si no la rechaza, se realiza la llamada al
> > móvil, y
> > > > > aunque esta no sea exitosa, no salta el contestador. ¿Hay alguna
> > manera
> > > de
> > > > > hacer que Asterisk detecte una llamada fallida en este caso?
> > > >
> > > > Vamos por partes:
> > > >
> > > > Las dos primeras líneas que has puesto son imaginativas pero no son
> > la
> > > manera
> > > > correcta de filtrar números. Cuando tienes varias plantillas dentro
> > de una
> > > > extensión, asterisk usa siempre la menos ambigua que coincida con la
> >
> > > extensión
> > > > que marcas. Ejemplo:
> > > >
> > > > exten => _XXX,NoOp(Llamada de 3 cifras)
> > > > exten => _1XX,NoOp(Llamada al ciento algo)
> > > > exten => _112,NoOp(Emergencias)
> > > >
> > > > Si marcas el 300 solo el primer patrón coincide y esta claro que ese
> > se
> > > usa.
> > > > Si llamases al 150 los dos primeros patrones son válidos pero se usa
> > el
> > > > segundo por ser menos ambiguo. Y en el caso de llamar al 112 se
> > usaría el
> > > > tercero por la misma razón.
> > > >
> > > > exten => 656111111,1,
> > > > ...
> > > > exten => 944761111,1,
> > > > ...
> > > > exten => _XXXXXXXXX,1
> > > > ...
> > > >
> > > > Otra cosa: Las prioridades las marcas 1,2,3,... y es correcto pero
> > poco
> > > > flexible ya que si quieres meter cosas en medio tienes que
> > renombrarlas
> > > todas.
> > > > Se usa 1,n,n,n,n,... que es mucho más cómodo.
> > > >
> > > >
> > > > Respecto a lo de detectar las llamadas fallidas y tal te puedo decir
> > cómo
> > > lo
> > > > trataría yo pero cuando Saul se despierte va a mandar seguro una
> > macro
> > > enorme
> > > > que contemple todas las posibilidades :)
> > > >
> > > > Si quieres algo refinado lo mejor es que uses una macro que
> > contemple las
> > > > posibilidades en función de la variable ${DIALSTATUS} y te permitirá
> >
> > > > diferenciar entre noanswer, busy...etc
> > > >
> > > >
> > > >
> > > > > Por otro lado, quería preguntaros alguna sugerencia para mejorar
> > el
> > > dialplan
> > > > > y sobre como puedo realizar transcoding para lograr mejor calidad
> > en la
> > > > > conversación.
> > > > >
> > > >
> > > > algunas mejoras ya te las he sugerido. En cuanto al trascoding,
> > asterisk
> > > lo
> > > > realiza para poder comunicar los canales si usan diferentes codecs.
> > Para
> > > > mejorar la calidad de audio solo tienes que decir al uusario que use
> > > mejores
> > > > codecs. Puede que no hay entendido esta parte...
> > > >
> > > >
> > > >
> > > > Un saludo
> > > >
> > > >
> > > >
> > > > _______________________________________________
> > > > eside-ghost mailing list
> > > > eside-ghost en deusto.es
> > > > https://listas.deusto.es/mailman/listinfo/eside-ghost
> > > >
> > >
> > >
> > > _______________________________________________
> > > eside-ghost mailing list
> > > eside-ghost en deusto.es
> > > https://listas.deusto.es/mailman/listinfo/eside-ghost
> > >
> >
> >
> > --
> > Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de
> > disketes."
> > ----------------------------------------------------------------
> > http://www.saghul.net/
> >
> > _______________________________________________
> > eside-ghost mailing list
> > eside-ghost en deusto.es
> > https://listas.deusto.es/mailman/listinfo/eside-ghost
> >
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: https://listas.deusto.es/mailman/private/eside-ghost/attachments/20070925/b2b2e81d/attachment-0001.htm


Más información sobre la lista de distribución eside-ghost