Este documento presenta una introducción a FreeSWITCH, un software de telefonía de código abierto que ofrece alternativas a Asterisk. Explica brevemente conceptos básicos de telefonía, luego describe las características clave de FreeSWITCH como su arquitectura modular, soporte para múltiples protocolos de voz y PSTN, y capacidad de escalabilidad. Finalmente, compara la arquitectura de FreeSWITCH con Asterisk y concluye que la competencia entre ambos proyectos los ha llevado a mejorar continuamente.
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
FreeSWITCH: Asterisk con Esteroides
1. FreeSWITCH – Asterisk con
esteroides (Avoiding Deadlock)
Moises Silva <moy@sangoma.com>
Manager de software
Sangoma Technologies
2. Agenda
• Breve introducción a la telefonía
• Telefonía de software libre
• Qué es FreeSWITCH?
• Aplicaciones para FreeSWITCH
• El core de FreeSWITCH
3. Breve Introducción a la Telefonía
• Todos la hemos usado
• Que pasa cuando levantas el teléfono?
• Como se encuentran unos a otros?
• Que hay con la red celular?
• Que es un PBX? Para que sirve?
9. Telefonía con software libre?
• Computadoras mas poderosas pueden procesar audio
• DSPs especializados no son estrictamente necesarios
• Hardware simple, software complejo
• Asterisk, FreeSWITCH, Kamailio, OpenSIPS, Yate …
• Una nueva era!
11. Telefonía con software libre
• Solo necesitas una computadora
• Si necesitas acceso a la PSTN, una tarjeta PCI/PCIe
12. FreeSWITCH
• No siempre uso switches, pero cuando lo hago, prefiero
FreeSWITCH
13. Qué es FreeSWITCH
• Solución en software de telefonía
• Auspiciado por el Open Source Telephony Advancement
Group (OSTAG)
• Licencia MPL
• Escala desde soft-phone hasta softswitch clase 5
• Maneja audio, video, texto
• Corre en Linux, BSD, MacOS, Windows y iOS!
14. Qué es FreeSWITCH
• Poderosa habilidad de ruteo usando expresiones regulares
• No es un SIP proxy, sino un B2BUA
15. Qué es FreeSWITCH
• Surge con la idea de tener una mejor plataforma que
Asterisk
• Su author, Anthony Minessale, fué el mayor contribuyente a
Asterisk por muchos años
• Diseñado desde el principio para escalar
• Altamente multi-thread
• Reuso de muchos componentes (no reinventar la rueda)
• Avoiding the deadlock!
19. Aplicaciones Nativas
• Voicemail
• Colas para call centers
• Conferencias en alta definición
• Text to Speech y reconocimiento de voz
• FAX, T.30 y T.38
20. Codecs
• Banda angosta, banda ancha y ultra banda ancha
• CELT (32kHz y 48kHz)
• G.722.1C (HD Siren)
• G.729
• SILK (El codec de Skype)
21. Eventos en FreeSWITCH
• API completamente abstracta
• El core y las aplicaciones disparan eventos
• Los modulos pueden reservar tipos de eventos
• mod_event_socket es el módulo equivalente al manager de Asterisk
• Diferentes prioridades:
– SWITCH_PRIORITY_NORMAL
– SWITCH_PRIORITY_LOW
– SWITCH_PRIORITY_HIGH
22. Ejecución de comandos
• Cada módulo registra comandos de administración
• Todos los comandos pueden ser ejecutados via mod_event_socket
• Puedes ejecutar comandos inclusive via HTTP
mod_event_socket
switch_api_execute() Módulo
FreeSWITCH CLI
23. Aplicaciones para FreeSWITCH
• Softphone
• VoIP gateway
• PBX
• Servidor de registros
• Servidor de ruteo de llamadas
• Servidor de transcoding
• Session border controller
• Servidor de conferencias
• Marcador predictivo
• Servidor de fax
29. Por qué modular?
• Componentes de construcción
• Capacidad de extender el core
• Sencilla solución de defectos
30. Ejemplos de arquitecturas modulares
• Kernel de Linux (character devices, block devices, filesystems etc)
• Interpretes de PHP, Python y PERL (soportan extensiones)
• Apache (loggers, generators, filters, mappers)
• FreeSWITCH y Asterisk
31. Arquitectura Modular
• Registrar interfaces con el core
• El core provee APIs a los escritores de módulos
• El core usa las interfaces registrada para solicitar servicios
APIs del core
Aplicación Módulo
Interfaces de los
módulos
32. Abstracción de una llamada
• Como hacemos una abstracción de una llamada?
Asterisk
Incoming call
FreeSWITCH
34. Arquitectura Básica
• Pierna de una llamada en FreeSWITCH
switch_core_session_t
- Memory pool
- Owner thread
FreeSWITCH - I/O event hooks
- Endpoint interface
- Event and message queues
- Codec preferences
- Channel
- Direction
- Event hooks
- DTMF queue
- Private hash
- State and state handlers
- Caller profile
35. Arquitectura Básica
• Pierna de una llamada en Asterisk
struct ast_channel
- No memory pool
Asterisk - No owner thread
- Just audio hooks
- Tech interface
- No event or message queues
- Codec preferences
- Direction as flag AST_FLAG_OUTGOING
- No DTMF queue (generic frame queue)
- Data stores instead of private hash
- No generic state handlers
- Extension, context and ast_callerid
instead of caller profile.
36. Arquitectura Básica
• Qué hace struct ast_frame?
• Representa todo tipo de “media” y señalización
• Audio y Video
• DTMF
• Y mas …
Entran paquetes Asterisk Salen paquetes
Asterisk frames (signaling, audio, dtmf, video, fax)
37. Arquitectura Básica
• FreeSWITCH tiene switch_frame_t.
• switch_frame_t unicamente representa “media”.
• La señalización es manejada con switch_core_session_message_t
• El DTMF es manejado a través de una cola
Audio entrante Audio saliente
DTMF entrante DTMF saliente
FreeSWITCH
Señalización entrante Señalización saliente
Clara separación de señalización, audio, dtmf etc.
38. Arquitectura Básica
• Como se maneja una llamada de 2 piernas?
Llamada entrante Ruteo Llamada saliente
39. Arquitectura Básica
• Asterisk haciendo una llamada entre SIP y PRI.
(monitor thread)
SIP: Invite
chan_sip
- Allocate ast_channel
- Set caller data
- call ast_pbx_start()
(new thread)
PBX core ISDN: SETUP
ast_request -> ast_call() chan_dahdi
loop
extensions.conf calls ast_waitfor() ISDN: CONNECT
Dial() application
Media ast_bridge_call()
PBX core ast_channel_bridge()
Exchange
40. Arquitectura Básica
• FreeSWITCH haciendo una llamada entre SIP y PRI.
(monitor thread)
SIP: Invite
mod_sofia
- call switch_core_session_request
- Set caller profile
- call switch_core_session_thread_launch()
(new thread) ISDN: SETUP
mod_openzap
State routing state
machine execute state
Bridge Application ISDN: CONNECT
switch_ivr_originate() (new thread)
loop
State
Handling
machine
state changes Media
loop
Exchange Handling
state changes
41. Conclusión
• Nos encontramos en una carrera por escalabilidad, características
y adopción de la tecnología entre varios proyectos de telefonía libre
• FreeSWITCH aún necesita mayor adopción y aplicaciones en su
ecosistema
• Asterisk necesita mas mejoras en su arquitectura para escalar
• La competencia entre Asterisk y FreeSWITCH definitivamente los
ha llevado a ser mejores
42. Gracias!
Preguntas y comentarios?
Contact e-mail: moy@sangoma.com
moises.silva@gmail.com
http://www.moythreads.com/