Samiksha Jaiswal (Editor)

FreeSWITCH

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit
Original author(s)
  
Anthony Minessale

Development status
  
Active

Developer(s)
  
Many contributors

Written in
  
C

Stable release
  
1.6.15 (February 14, 2017; 26 days ago (2017-02-14)) [±]

Operating system
  
Unix-like, Windows, Solaris, OS X

FreeSWITCH is a free and open source communications software for the creation of voice and messaging products. It is licensed under the Mozilla Public License (MPL), a free software license. Its core library, libfreeswitch, is capable of being embedded into other projects, as well as being used as a stand-alone application.

Contents

History

The FreeSWITCH project was first announced in January 2006 at O'Reilly Media's ETEL Conference. In June 2007, FreeSWITCH was selected by Truphone for use, and in August 2007, Gaboogie announced that it selected FreeSWITCH as its conferencing platform.

FreeSWITCH's first official 1.0.0 release (Phoenix) was on May 26, 2008. A minor 1.0.1 patch release came out on July 24, 2008. At ClueCon 2012 Anthony Minessale announced the release of FreeSWITCH version 1.2.0 and that the FreeSWITCH development team had adopted separate stable (version 1.2) and development (version 1.3) branches.

FreeSWITCH 1.4, released at early 2014, is the first version support SIP over Websocket and WebRTC.

Also in 2014, Tuenti announced that it selected FreeSWITCH as a main component for its platform.

FreeSWITCH 1.6 is the first version that supports video transcoding and video conferencing.

Design

According to the lead designer, Anthony Minessale, FreeSWITCH is intended to be a softswitch that is built on top of a solid core, driven by a state machine. The stated goals of the project include stability, scalability, and abstraction.

To reduce complexity, FreeSWITCH uses freely available software libraries that perform needed functions. Some dependencies are:

  • Apache Portable Runtime (APR and APR-Util)
  • SQLite – a lightweight implementation of a SQL engine
  • PCRE – Perl Compatible Regular Expressions
  • Sofia-SIP – an open-source SIP user agent library
  • libspeex – Speex DSP library (replaced libresample as of version 1.0.3)
  • mod_spandsp for T.38 fax gateway or passthrough are supported.
  • libSRTP – an open-source implementation of the Secure Real-time Transport Protocol
  • Not all of these software dependencies are required to build the core freeswitch application, but are dependencies of various external modules, such as codecs. FreeSWITCH is a modular application, in which modules can extend the functionality but the abstraction layer prevents inter-module dependency. The goal is to ensure that one module is not required to load another.

    Features

    FreeSWITCH includes many modules that provide many telephony applications, such as conferencing, XML-RPC control of live calls, interactive voice response (IVR), speech synthesis and speech recognition, public switched telephone network (PSTN) interfaces for analogue and digital circuits, voice over IP protocols including Session Initiation Protocol (SIP), Verto, Skinny Client Control Protocol (SCCP), H.323, Extensible Messaging and Presence Protocol (XMPP), GoogleTalk, T.38 and others.

    FreeSWITCH provides an application programming interface that exposes primitives for call control and IVR functionality. Applications may be written in the C language, C++, Python, Perl, Lua, JavaScript, Java and Microsoft .NET via Microsoft's CLR or via Mono.

    Call control applications can use the Event Socket, which is an Internet socket-based communications facility within FreeSWITCH providing a language independent interface. The Event Socket Library (ESL) and "ESL-wrappers" are available for Erlang, JavaScript, Lua, Perl, PHP, Python, and Ruby.

    As of FreeSWITCH version 1.4, support exists for WebRTC.

    Codec Support

    FreeSWITCH supports a variety of audio codecs:

    FreeSWITCH 1.4 supports video codecs only in passthrough mode:

  • H261 (passthrough)
  • H263 (passthrough)
  • H263+ (H263-1998) (passthrough)
  • H263++ (H263-2000) (passthrough)
  • H264 (passthrough)
  • Theora (passthrough)
  • MP4 (passthrough)
  • FreeSWITCH 1.6 supports video transcoding.

  • H263
  • H264
  • VP8
  • VP9

  • Some codecs are implemented in pass-through mode only. Since the raw compressed data is passed through between callers without any processing, this allows support for some codecs that cannot be provided free of charge due to patent or other licensing issues. In pass-through mode, the codecs cannot be transcoded, i.e., both callers must use the same codec and functions that touch the media stream such as IVR are not supported.

    The software supports hardware transcoding cards, such as produced by Sangoma. These implement codecs in hardware, reducing the CPU usage of the server. Some of these codecs are fully licensed, providing an alternative to the pass-through options above.

    Operating and build system support

  • Debian linux is the preferred operating system as it provides the broadest support in its libraries necessary to run FreeSWITCH unencumbered by licensing restrictions
  • Other linux systems, such as RHEL and CentOS
  • Solaris 10 UNIX (Solaris Studio)
  • FreeBSD (gmake)
  • OS X (gmake)
  • Windows (native)
  • Comparison with other telephony software

    FreeSWITCH occupies a space between pure switches that simply route calls, such as GnuGK and SER, and those that provide primarily PBX or IVR functionality, such as Asterisk and its derivatives. FreeSWITCH provides building blocks from which applications – such as a PBX, a voicemail system, a conferencing system or a calling card – can be built using any of the supported languages.

    Derived products

    FreeSWITCH is a core component in many PBX in a box commercial products and open-source projects. Some of the commercial products are hardware and software bundles, for which the manufacturer supports and releases the software as open source.

    Examples are the Gemeinschaft (PBX) and the HWPBX with a CTI Client for FreeSWITCH.

    References

    FreeSWITCH Wikipedia