He escrito un post que considero importante en el hilo de la VoIP. Lo pongo aquí porque sé que este hilo lo lee más gente que podría verse beneficiada de ello. Aquí esta:
Hola a todos.
Ya he solucionado todos los problemas que tenía con Asterisk cuando usaba los teléfonos tradicionales. Todos los problemas los originaba el paquete “asterisk18-chan-lantiq”. Dicho paquete se genera a partir del fichero “chan_lantiq.c” que se encuentra en las siguientes rutas:
- En Attitude Adjustment está en la ruta "feeds/packages/net/asterisk-1.8.x/src-lantiq/channels/chan_lantiq.c"
- En Barrier Breaker y en trunk está en la ruta "feeds/telephony/net/asterisk-1.8.x/src-lantiq/channels/chan_lantiq.c"
El contenido del fichero no ha variado desde Attitude Adjustment, así que todos los problemas se presentan tanto en AA, como en BB, como en trunk. El contenido del fichero también es el mismo tanto si compilamos para el router 4518 como para el 7518.
Hace tiempo que envié los primeros parches a un mantenedor de OpenWRT, pero todavía no los ha probado porque está muy liado con otros temas (y tiene pinta de que tardará todavía muchísimo). Así que, si queréis corregir los problemas, tenéis que modificar el contenido del citado fichero vosotros mismos antes de compilar. Para que os sea más fácil, os paso el fichero chan_lantiq.c que yo uso. Podéis descargarlo de aquí:
http://www.mediafire.com/download/5cz1qa1xl3b702d/chan_lantiq.zipDespués de ejecutar el comando ./scripts/feeds/update –a, se os habrá creado el fichero en la ruta que os he indicado arriba. Lo sustituís por el mío y proseguís con el proceso de compilación.
Estos son los problemas que corrigen mis parches:
1. Cuando estamos en conversación con alguien, si una tercera persona nos llama, se corta la conversación que estábamos manteniendo.
2. Cuando llamamos a alguien, internamente Asterisk le asigna siempre el identificador "TAPI/1" a esa llamada, no teniendo en cuenta que podemos tener dos teléfonos conectados al router, por lo que se dificulta muchísimo la diagnosis de problemas y el seguimiento de las llamadas en la consola y en el fichero de log. Modifico el código fuente para que asigne el identificador TAPI/1 cuando iniciemos conversación en el puerto FXS 0 del router, y TAPI/2 cuando iniciemos conversación en el puerto FXS 1. Este el comportamiento que ya venía predefinido cuando en vez de hacer nosotros las llamadas somos los que las recibimos.
3.Cuando somos nosotros los que finalizamos una llamada, no se da orden al driver VoIP para que se quede en stand-by, por lo que sigue intentando codificar tráfico de voz y enviarlo después de finalizada la llamada, cargando a la CPU permanente de forma innecesaria. Si tenemos en cuenta que podemos tener dos teléfonos conectados al router, la carga de CPU desperdiciada se multiplica por dos, produciendo cortes de voz en el tráfico de subida que impiden que el otro participante de la conversación nos oiga bien. Si ves una traza en dmesg que dice "Upstream packet fifo full[ch(0)]!", incluso en horas en las que nos estabas usando el teléfono, es un síntoma inequívoco de que estás sufriendo el problema.
4.En el log de Asterisk a veces aparece la traza "IFX_TAPI_TONE_LOCAL_PLAY ioctl failed". Esto se debe a que en ocasiones se da orden al driver de emitir un tono que ya está siendo reproducido, y el driver se queja de ello.
5.He incluido otras mejoras, como por ejemplo que tengamos un límite de 4 segundos por cada dígito que marcamos al llamar. Por defecto este límite está fijado en dos segundos y a veces, cuando no te sabes el teléfono de memoria y estás leyéndolo de otro sitio, no te da tiempo a marcar el siguiente dígito y tienes que volver a empezar desde el principio.
Espero que os sirva de ayuda.
Un saludo.