Re: [eside-ghost] Asterisk, detección de llamadas no exitosas con el SPA3102 y transcoding
Saúl Ibarra
saghul en gmail.com
Mar Sep 25 07:58:47 CEST 2007
Joder tio, veo que has empollado bastante :)
Veo que has llegado a la conclusión correcta :) Por norma general, se
utiliza alaw en LAN, y g729 fuera, *si se puede*.
Con *si se puede* me refiero a que el codec es muy bueno y ofrece
mucha calidad de voz con poco ancho de banda, pero tiene un coste
computacional bastante elevado.
Como tu solo vas a tener 1 usuario haciendo transcoding de g729 poco
te importa el coste computacional, así que lo mejor sería que pusieras
alaw en las 2 bocas de SPA y g729 en el PAP2.
Haz unas pruebas con OpenVPN ya que estas, para ahorrarte algún dolor
de cabeza por el NAT y tal.
Keep on hacking!
El 25/09/07, Unai Goikoetxeta <unai en goikoetxeta.com> escribió:
> 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.1
> porque 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
> > >
> >
> >
>
>
> _______________________________________________
> 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/
Más información sobre la lista de distribución eside-ghost