forked from sems-server/sems
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
341 lines (259 loc) · 12.3 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
+------------------------------------+
| SIP Express Media Server - README |
+------------------------------------+
Introduction:
SEMS is a free, high performance, extensible media server
for SIP (RFC3261) based VoIP services.
It is intended to complement proxy/registrar servers
in VoIP networks for all applications where server-
side processing of audio is required, for example away
or pre-call announcements, voicemail, or network side
conferencing. Another use case is for interconnecting
SIP networks, where a back-to-back user agent (B2BUA)
is required.
SEMS can be used to implement simple high performance
components like announcement servers as building
blocks of more complex applications, or, using its powerful
framework for application development including back-to-back
user agent (B2BUA) and state machine scripting functionality,
complex VoIP services can be realized completely in SEMS.
SEMS supports all important patent free codecs out of the
box (g711u, g711a, GSM06.10, speex, G.726, L16, OPUS, iLBC etc).
There is a wrapper for the IPP G.729 codec implementation
available. Integrating other codecs in SEMS is very simple
(patented or not).
SEMS shows very good performance on current standard
PC architecture based server systems. It has sucessfully
been run with 1200 G.711 conference channels on a quad-core
Intel(R) Xeon at 2GHz (700 GSM, 280 iLBC channels), and up to
5000 channels on a dual quad Xeon at 2.9GHz. Its back-to-back
user agent has been run with up to 19000 TPS on the latter
machine. On the other hand it also runs on very small devices -
for example small embedded systems like routers running OpenWRT,
for which of course the achievable channel count is not that
high.
License:
SEMS is free (speech+beer) software. It is licensed under dual
license terms, the GPL (v2+) and proprietary license. This
program is released under the GPL with the additional exemption
that compiling, linking, and/or using OpenSSL is allowed.
For a license to use SEMS under non-GPL terms, please contact
FRAFOS GmbH at info@frafos.com .
See doc/COPYING for details.
Applications:
The following applications are shipped with SEMS :
Back-to-back User Agent
* sbc flexible SBC application, supports
- identity change
- header manipulation (filter etc)
- (multihomed) RTP relay, NAT handling, transcoding
- SIP authentication
- Session timer, call timer, prepaid
etc
Announcements (Prompts, Ringbacktones, Pre-call-prompts):
* announcement plays an announcement
* ann_b2b pre-call-announcement, plays announcement
before connecting the callee in B2BUA mode
* announce_transfer pre-call-announcement, plays announcement
and then transfers the caller to the callee
using REFER
* early_announce (pre-call) announcement using early media (183),
optionally continues the call in B2BUA mode
* precoded_announce plays preencoded announcements
Voicemail/Mailbox
* voicebox users can dial in to the voicebox to check
their messages
* annrecorder users can record their personal greeting
message
* mailbox auto-attendant that saves voicemails into
an IMAP server. Users can dial in to check
their messages (simpler version)
* voicemail records voice messages and sends them
as email, saves them to a voicebox, or
both
Conferencing
* conference enables many people to talk together
at the same time
* webconference conference application that can be
controlled from an external program,
e.g. a website
* conf_auth collect a PIN number, verify it against an
XMLRPC authentication server and connects in
B2BUA mode
* pin_collect collect a PIN, optionally verify it, and transfer
the call into a conference
App development
* dsm DSM state machine scripting (use this)
* ivr embedded Python interpreter for simple apps
* py_sems another embedded Python interpreter
Misc
* echo test module to echo the caller's voice
* callback reject the call, call back caller later and have
her enter a number to call in b2bua with media relay
mode
* reg_agent SIP REGISTER to register SEMS' contact to an aor
Developing and customizing Applications and services:
SEMS comes with a set of example applications intended to help
development of custom services, including a calling card
application, a traffic generator, a component to control the
media server via XMLRPC, and announcements played from DB.
DSM state machine scripting is a powerful yet simple method
to rapidly implement custom applications. With this method,
the service logic is written as an easy to understand
textual definition of a state machine, which is interpreted
and executed for every call. The (domain specific) language
for defining state machines can be extended by implementing
modules. A set of useful modules are shipped with SEMS,
including MySQL database access module, Python module,
conference support, Amazon AWS and more.
SEMS' core implements basic call and audio processing,
and loads plug-ins which extend the system. Audio
plug-ins enable new codecs and file formats,
application plug-ins implement the services' logic.
Other modules called component modules provide
functionality for other modules to use.
You can easily extend SEMS by creating your own plug-ins.
Applications can be written using the SEMS framework API
in C++, or in Python using an embedded python interpreter
of the ivr or py_sems modules, or the DSM.
Requirements:
All requirements are optional.
o Python version >= 2.3 for the ivr (embedded python interpreter)
and py_sems
o flite speech synthesizer for TTS in the ivr
o lame >= 3.95 for mp3 file output, mpg123 for mp3 playback
o spandsp library for DTMF detection and PLC
(SEMS has its own implementations for both)
o libZRTP SDK (http://zfoneproject.com) for ZRTP
o libev for jsonrpc
How to get started with SEMS:
To try out SEMS, the easiest is to get a release from
http://ftp.iptel.org/pub/sems/, unpack and install it
using the usual make && make install. After installation, the
configuration file /usr/local/etc/sems/sems.conf needs to be
adapted, especially the parameters "sip_ip", "media_ip",
"load_plugins", "application".
On Debian and Ubuntu, add the SEMS repository from OBS to
/etc/apt/sources.list:
deb http://download.opensuse.org/repositories/home:/team-sems/Debian_5.0 ./
and install SEMS packages with:
wget http://download.opensuse.org/repositories/home:/team-sems/Debian_5.0/Release.key \
-O - |apt-key add -
apt-get update && apt-get install sems
If you want to build SEMS from source on debian/derivatives, see below.
On Fedora/CentOS, simply do
$ sudo yum install sems
and sems package will be installed.
You can also follow one of the tutorials linked from the SEMS homepage
(e.g. http://ftp.iptel.org/pub/sems/doc/current/howtostart_noproxy.html).
The Application Modules Documentation page then gives an
overview of the application modules that come with SEMS
(http://ftp.iptel.org/pub/sems/doc/current/AppDoc.html).
If you are interested in writing your own applications, the
application development tutorial is a good start
(http://www.iptel.org/sems/sems_application_development_tutorial),
together with the design overview
(http://www.iptel.org/files/semsng-designoverview.pdf) and the example
applications (apps/examples/).
SEMS needs to be told from the many possible applications that are
loaded which one to run. You can simply set the application
in sems.conf, e.g. application=conference. You can also define an
application mapping, i.e. numbers (R-URIs) that will be mapped to
applications, see the explanation of 'application' parameter in
sems.conf.
Creating packages on debian (ubuntu, ...), here for jessie:
install debian package build tools:
$ sudo apt-get install debhelper devscripts
install dependencies (those below or let dpkg-buildpackage below tell you
which ones):
$ sudo apt-get install g++ make libspandsp-dev flite-dev libspeex-dev \
libssl-dev python-dev python-sip-dev openssl libev-dev \
libmysql++-dev libevent-dev libxml2-dev libcurl4-openssl-dev
get the source:
$ wget ftp.iptel.org/pub/sems/sems-x.y.z.tar.gz ; tar xzvf sems-x.y.z.tar.gz
or, for git master:
$ git clone https://github.com/sems-server/sems.git
$ cd sems-x.y.z ; ln -s pkg/deb/jessie ./debian
set version in changelog if not correct
$ dch -v x.y.z "SEMS x.y.z release"
or:
$ dch -b -v `git describe --always` "sems git master"
build package:
$ dpkg-buildpackage -rfakeroot -us -uc
install sems and sems-python-modules packages in .. using dpkg.
Installed files using 'make install':
/usr/local/sbin/sems : SEMS executable
/usr/local/lib/sems/plug-in/* : plug-ins
/usr/local/lib/sems/audio/* : default path for audio files
/usr/local/lib/sems/ivr/* : precompiled IVR scripts
/usr/local/etc/sems/sems.conf : configuration file
/usr/local/etc/sems/etc/* : modules configuration files
/usr/local/share/doc/sems/README : this README.
source_path/scripts/sems[.redhat] : example start-up scripts.
source_path/sems.conf.example : example configuration file.
Documentation:
In the doc/ directory there is a set of files describing the
applications shipped with SEMS, alongside some more documentation.
Generate the doxygen documentation with 'make doc' in doc/doxygen_doc,
that contains all these files as well.
All this and more documentation is available online linked from
the SEMS homepage:
http://www.iptel.org/sems.
Support, mailing lists, bugs and contact:
Please have a look at the documentation and other information on
the SEMS homepage (www.iptel.org/sems).
Best-effort support is given through the mailing lists for SEMS,
sems@iptel.org and semsdev@iptel.org, which are the first address
to ask for help, report bugs and improvements. You need to be
subscribed to be able to post to the lists: http://lists.iptel.org.
The mailing list archives at http://lists.iptel.org/pipermail/sems/
and http://lists.iptel.org/pipermail/semsdev/ can be a great help as
well (especially with google site search on lists.iptel.org, e.g.
http://www.google.com/coop/cse?cx=006590474108803368786%3A158hxzctv4u ).
The bug tracker for SEMS is at http://tracker.iptel.org/browse/SEMS
Please submit all bugs, crashes and feature requests you encounter.
Authors:
Raphael Coeffic (rco@iptel.org), the father of SEMS,
Stefan Sayer (stefan.sayer@gmail.com), current lead developer,
and all contributors:
Alex Gradinar
Alfred E Heggestad
Andreas Granig
Andrey Samusenko
Andriy I Pylypenko
Anton Zagorskiy
B. Oldenburg
Balint Kovacs
Bogdan Pintea
Carsten Bock
Greger Viken Teigre
Grzegorz Stanislawski
Helmut Kuper
Jeremy A
Jiri Kuthan
Joe Stusick
Jose-Luis Millan
Juha Heinanen
Matthew Williams
Michael Furmur
Ovidiu Sas
Pavel Kasparek
Peter Lemenkov
Peter Loeppky
Richard Newman
Robert Szokovacs
Rui Jin Zheng
Tom van der Geer
Ulrich Abend
Vaclav Kubart
Victor Seva
(if you feel you should be on this list, please mail to stefan.sayer@gmail.com)
Special thanks to FRAFOS GmbH, sipwise GmbH, IPTEGO GmbH, iptelorg GmbH and TelTech Systems Inc. for
sponsoring development of SEMS.
Contributions:
All kinds of contributions and bug fixes are very welcome, for
example new application or codec modules, documentation pages, howtos
etc. Please email one of the lists or the authors.
Please also have a look at the contributions license policy
(see doc/COPYING).
SEMS - the media-S in the SLAMP.