En estos momentos he retomado el blog luego de una larga ausencia, también lo he migrado a http://voipensando.blogspot.com/ espero poder seguir contando con su audiencia y ayudando en lo que me sea posible.
At the moment I picked up the blog after a long absence, so I have migrated to http://voipensando.blogspot.com/ hope I can continue with your interst.
martes, 5 de octubre de 2010
jueves, 13 de mayo de 2010
Archivos de audio en español
Según el más reciente anuncio de la liberación de FreeSWITCH de la versión 1.0.6 ya se tienen los archivos de sonido en español, aunque todavía no se han publicado ya que están en revisión pronto los tendremos disponibles. El español es latinoamericano.
miércoles, 7 de abril de 2010
Medir Tonos en líneas análogas
Cuando se trabaja con líneas análogas ya sea de la red pública o de una extensión de una PBX es muy importante conocer la frecuencia de los tonos para realizar una buena detección del tono de marcado (dialtone), del tono de desconección (disconect tone) para terminar la llamada, y del tono de ocupado (busy).
Normalmente cuando no se configuran adecuadamente los tonos se presentan problemas por ejemplo al finalizar la llamada, el puerto puede seguir ocupado cuando ya nadie está hablando sobre la línea.
Existen varias formas de medir la frecuencia ya sea simple o compuesta de cada tono, entre ellas desde las mas complejas usando un osciloscopio, con algún software que escucha sobre la línea, o una forma bastante simple pero muy efectiva usando Audacity.
La idea es grabar en un archivo de audio por ejemplo .wav lo que sucede en la línea, y posteriormente abrir el archivo con Audacity y analizar su espectro con lo cual se pueden hallar las frecuencias con buena exactitud. Para un mayor detalle sobre el procedimiento pueden ver este buen artículo en el blog de Asterisk Medellín.
La idea es grabar en un archivo de audio por ejemplo .wav lo que sucede en la línea, y posteriormente abrir el archivo con Audacity y analizar su espectro con lo cual se pueden hallar las frecuencias con buena exactitud. Para un mayor detalle sobre el procedimiento pueden ver este buen artículo en el blog de Asterisk Medellín.
martes, 6 de abril de 2010
Welltech Gateway
Entre los Gateway con soporte para puertos FXO y FXS que son económicos y usan UDP para el transporte se encuentran los Welltech (http://www.welltech.com) yo los he usado y se portan bien ademas de mencionar la operabilidad que tienen con FreeSWITCH.
Hasta ahora el único detalle que he tenido que solucionar es el tema del manejo del flash-hook para los puertos FXO, si es necesario, no basta solo con enviar <action application="send_dtmf" data="F"/> ya que esto solo se interpreta del lado del Gateway como un tomo mas. Para conseguir que pueda propagar el flash-hook desde la señalización IP es necesario hacerlo con SIP INFO incluyendo en el body \n\r. Esto me valio para solicitar soporte a la gente de Welltech por el link de Support de su página y la verdad me ayudaron bastante con el tema y la atención fue rapida y efectiva.
Hasta ahora el único detalle que he tenido que solucionar es el tema del manejo del flash-hook para los puertos FXO, si es necesario, no basta solo con enviar <action application="send_dtmf" data="F"/> ya que esto solo se interpreta del lado del Gateway como un tomo mas. Para conseguir que pueda propagar el flash-hook desde la señalización IP es necesario hacerlo con SIP INFO incluyendo en el body \n\r. Esto me valio para solicitar soporte a la gente de Welltech por el link de Support de su página y la verdad me ayudaron bastante con el tema y la atención fue rapida y efectiva.
lunes, 22 de febrero de 2010
Mod event socket en modo inbound
“inbound” modo significa que usando ESL la aplicación se conecta como cliente a FreeSWITCH (FS) para el envío y recepción de eventos y comandos. (http://wiki.freeswitch.org/wiki/Mod_event_socket)
Ejemplo usando managed ESL
El siguiente fragmento de código establece una conexión con FS, subscribe a todos los eventos en formato de texto plano, y entra en un bucle esperando por un evento e imprimiéndole en pantalla cuando llega.
//Initializes a new instance of ESLconnection, and connects to the host $host on the port $port, and supplies $password to freeswitch
ESLconnection eslConnection = new ESLconnection("localhost", "8021", "ClueCon");
if (eslConnection.Connected() != ESL_SUCCESS)
{
Console.WriteLine("Error connecting to FreeSwitch");
return;
}
//Set log level
//ESL.eslSetLogLevel((int)enLogLevel.DEBUG);
// Subscribe to all events
ESLevent eslEvent = eslConnection.SendRecv("event plain ALL");
if (eslEvent == null)
{
Console.WriteLine("Error subscribing to all events");
return;
}
//Turns an event into colon-separated 'name: value' pairs. The format parameter isn't used
Console.WriteLine(eslEvent.Serialize(String.Empty));
// Grab Events until process is killed
while (eslConnection.Connected() == ESL_SUCCESS)
{
eslEvent = eslConnection.RecvEvent();
Console.WriteLine(eslEvent.Serialize(String.Empty));
}
Ejemplo usando managed ESL
El siguiente fragmento de código establece una conexión con FS, subscribe a todos los eventos en formato de texto plano, y entra en un bucle esperando por un evento e imprimiéndole en pantalla cuando llega.
//Initializes a new instance of ESLconnection, and connects to the host $host on the port $port, and supplies $password to freeswitch
ESLconnection eslConnection = new ESLconnection("localhost", "8021", "ClueCon");
if (eslConnection.Connected() != ESL_SUCCESS)
{
Console.WriteLine("Error connecting to FreeSwitch");
return;
}
//Set log level
//ESL.eslSetLogLevel((int)enLogLevel.DEBUG);
// Subscribe to all events
ESLevent eslEvent = eslConnection.SendRecv("event plain ALL");
if (eslEvent == null)
{
Console.WriteLine("Error subscribing to all events");
return;
}
//Turns an event into colon-separated 'name: value' pairs. The format parameter isn't used
Console.WriteLine(eslEvent.Serialize(String.Empty));
// Grab Events until process is killed
while (eslConnection.Connected() == ESL_SUCCESS)
{
eslEvent = eslConnection.RecvEvent();
Console.WriteLine(eslEvent.Serialize(String.Empty));
}
domingo, 21 de febrero de 2010
managed ESL
¿Qué es managed ESL ?
Es la librería que permite desde un lenguaje de .Net usar la Event Socket Library (ESL) de FreeSWITCH (FS).
Managed ESL establece comunicación con FreeSWITCH (FS) a través de socket encapsulando todo el manejo del socket y exponiendo los servicios suministrados por FS como clases manejadas en C#.
Managed ESL son clases que encapsulan los servicios de mod_event_socket (http://wiki.freeswitch.org/wiki/Mod_event_socket) expuestos con la estandarización obtenida de SWIG. Con SWIG se consigue una interfaz nativa en C++ y wrappers en C# que usan la interfaz de C++.
¿Qué se puede hacer?
Con managed ESL se puede conseguir control de la llamada, envío y recepción de eventos y comandos.
Como managed ESL se ejecuta fuera del contexto de ejecución de los procesos de FS, la aplicación que usa managed ESL puede ser publicada en una maquina remota o expuesta como un servicio simpre que se tenga conexión con FS a través un socket.
Construyendo managed ESL
En este momento solo se ha probado usando VisualStudio 2008 sobre Windows con Framework 2.0. Pronto se estará liberando para mono.
Pre-requisitos
VisualStudio 2008 (soporte para C y C#)
Framework 2.0
Windows
La solución de VS2008 para compilar managed ESL se encuentra en libs/esl/managed, es necesario que se tenga compilada la librería esl.lib que se construye con FreeSWITCH.
Es la librería que permite desde un lenguaje de .Net usar la Event Socket Library (ESL) de FreeSWITCH (FS).
Managed ESL establece comunicación con FreeSWITCH (FS) a través de socket encapsulando todo el manejo del socket y exponiendo los servicios suministrados por FS como clases manejadas en C#.
Managed ESL son clases que encapsulan los servicios de mod_event_socket (http://wiki.freeswitch.org/wiki/Mod_event_socket) expuestos con la estandarización obtenida de SWIG. Con SWIG se consigue una interfaz nativa en C++ y wrappers en C# que usan la interfaz de C++.
¿Qué se puede hacer?
Con managed ESL se puede conseguir control de la llamada, envío y recepción de eventos y comandos.
Como managed ESL se ejecuta fuera del contexto de ejecución de los procesos de FS, la aplicación que usa managed ESL puede ser publicada en una maquina remota o expuesta como un servicio simpre que se tenga conexión con FS a través un socket.
Construyendo managed ESL
En este momento solo se ha probado usando VisualStudio 2008 sobre Windows con Framework 2.0. Pronto se estará liberando para mono.
Pre-requisitos
VisualStudio 2008 (soporte para C y C#)
Framework 2.0
Windows
La solución de VS2008 para compilar managed ESL se encuentra en libs/esl/managed, es necesario que se tenga compilada la librería esl.lib que se construye con FreeSWITCH.
sábado, 23 de enero de 2010
ESL, Manejo de eventos en FreeSwitch
Si buscan manejar eventos sin depender del core de FreeSwitch o mejor sin necesitar que se ejecute, recomiendo que le den una revisada a ESL (Event Socket Library).
Con ESL se pueden recibir eventos y enviar comandos a FreeSwitch.
http://wiki.freeswitch.org/wiki/Event_Socket_Library
Suscribirse a:
Entradas (Atom)