-
Notifications
You must be signed in to change notification settings - Fork 3
/
README
235 lines (172 loc) · 9.48 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
Iaxclient has changed a lot in the past months making this file inaccurate.
For reference purposes we are still including it with the distribution, but
be aware that a large percentage of the information in here is outdated and
no longer applies. The situation will be rectified in the near future, but
until then, use with care.
=======================================================================
INTRODUCTION
This is iaxclient, a portable IAX/IAX2 protocol telephony client library.
The library itself is in the directory "lib", located in the same
directory as this README file.
The library is designed to build for multiple platforms, and currently
supports Linux, MacOSX, Solaris, and Win32 platforms. It is designed to
handle the "backend" of IAX telephony operations, including call handling,
network protocols, audio encoding/decoding, and audio capture/playback.
In it's future, it may be extended to also handle video encode, decode,
capture and playback.
There are also sample clients, which use the library, included here.
Currently, these are all stored under the "simpleclient" directory, and
there are three of them:
simpleclient/testcall: A simple command-line oriented test program,
useful for testing and debugging. It supports
all of the same platforms as the library itself.
simpleclient/vtestcall: Like testcall, but for testing and debugging
video calls. Requires SDL.
simpleclient/wx: A wxWindows (see wxwindows.org) based GUI
client. This client also supports all of the
same platforms as the library itself.
simpleclient/WinIAX: A MSVC/Win32 client. This only works with
Win32, obviously, and was contributed by
Faizan "Tili" Naqvi <[email protected]>
simpleclient/tkiaxphone A command-line client, with a Tcl/Tk GUI
client that drives it. It should work on
all the platforms
The home page for iaxclient is "http://iaxclient.sourceforge.net/"
Up-to-date versions of iaxclient are available from a sourceforge SVN
repository.
=======================================================================
LICENSES
The iaxclient library itself, is provided under the terms of the LGPL:
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
The iaxclient library may also include, when compiled, works distributed
under other licenses. See those directories and source files for
specifics. These include:
libiax: (c) 2001 Mark Spencer under the LGPL.
libiax2: (c) 2001 Mark Spencer under the LGPL.
gsm encoder: Copyright 1992, 1993, 1994 by Jutta Degener
and Carsten Bormann, Technische Universitaet Berlin
(free license, terms in gsm/copyright)
portaudio: Copyright (c) 1999-2000 Ross Bencina and Phil Burk
Modified BSD style license, in portaudio/LICENSE.txt
sox tools: compand.c: Copyright 1999 Chris Bagwell And
Nick Bailey
resample.c: (not currently used) Copyright 1991
Lance Norskog And Sundry Contributors,
free licenses in source files.
libspeex: (c) various authors
BSD-like license.
libtheora: (c) 2002-2005 Xiph.org Foundation
BSD-like license.
=======================================================================
CONTRIBUTORS:
IAXCLIENT itself was contributed to by:
Steve Kann <[email protected]>
Shawn Lawrence <[email protected]>
Faizan "Tili" Naqvi <[email protected]> [Win32 VC++ build/client]
Scott Lambert <[email protected]> [FreeBSD build changes]
Michael Van Donselaar <[email protected]> [Win32/MinGW build directions, UI changes, IAXComm phone ]
Steven Sokol <[email protected]> [ Debugging, Blind Transfer ]
Stephan Kauss <[email protected]> [ 32-bit alignment for IAX2 ]
Stephen Uhler <[email protected]> [Solaris build, tkiaxphone]
Steve Underwood <[email protected]> [PLC implementation from spandsp]
Jean-Denis Girard <[email protected]> [URL Receive implementation]
Panfilov Dmitry <[email protected]> [Basic ALSA-native audio driver]
Mihai Balea <mihai at hates dot ms>
Bill Welch <welch1820 at gmail dot com> [Project files for several MS development environments]
Peter Grayson <[email protected]>
In addition to including libiax, IAXCLIENT is also based in part on code
included in test clients within libiax itself.
The included sub-libraries, including libiax, libiax2, gsm, portaudio,
and the sox-derived filters, were developed by others, as noted in above
and in their sources. We couldn't have built IAXCLIENT (or, it would
have been much more difficult!) without the great work from these
projects.
=======================================================================
BUILDING THE LIBRARY:
./configure
make
make install
See INSTALL for generic information about the building on Unix-like
systems.
See README.VisualStudio for information about how to build with
Microsoft Visual Studio.
=======================================================================
LIBRARY ORGANIZATION/DESIGN/CODING CONVENTION NOTES
The iaxclient library is designed to be a small, simple library that
encapsulates all that you need in order to make IAX protocol telephony
programs.
All exported symbols should be prefixed with "iaxc_", to avoid namespace
collisions/pollution in programs using this library.
The header file "iaxclient.h" should contain those declarations needed
by client programs, but not rely on other headers (i.e. those from
included libraries). The "iaxclient-lib.h" header file is the main
header file for the library's internal declarations.
=======================================================================
SAMPLE CLIENTS
The "testcall" sample program, provided in the simpleclient/testcall
directory (above this "lib" directory) is a simple client program which
should also be portable.
The Makefile for "testcall" will automatically build or update the
library when it it built, and the requirements for building testcall are
the same as for the library itself.
See README files in the other sample clients for directions for building
these.
=========================================================================
CODECS
The codec API is pretty straightforward; just use any of the existing
available codecs as a guide. The only place in the main code they
interface is the switch in audio_encode.c:create_codec
ILBC
Lots of people are enamored with iLBC lately, so I put this together for
them. Personally, I prefer speex, because it seems to sound just as
good, but has no license restrictions. With proper compilation options
(i.e. use it's SSE optimizations), it can be made even faster than the
iLBC reference.
There is glue to build iaxclient with iLBC available in the source, but
the source to iLBC itself is _not_ included. This is primarily because
of the licensing issues.
I'm not a lawyer, but it appears that iLBC's license would make it
impossible to build iaxclient and link it with a GPL front-end, meaning
a library built this way is no longer something that could be considered
LGPL. However, you could probably build a client using iLBC and
distribute it legally, if you follow the rules in the LGPL. So, this is
an issue for you and your legal counsel to figure out.
To actually build iaxclient with iLBC, though is very easy. Just make a
directory under lib named iLBC, and drop the iLBC reference sources into
it, then change CODEC_ILBC=0 to CODEC_ILBC=1 in the Makefile, and away
you go.
The source presently is set up for the draft-5 version.
The iLBC license and software can be found here
http://www.ilbcfreeware.org/software.html
(sources are also in asterisk).
=========================================================================
AUDIO DRIVERS
The supported audio driver for iaxclient is audio_portaudio; which uses
a snapshot of the portaudio v19 library (included, with some minor
modifications) to access native audio services on each platform.
It includes support for Windows (WMME), Linux (OSS, ALSA, JACK) and
MacOS X (CoreAudio).
There is a (presently broken) WMME-native audio driver which was used
during early development, and is no longer maintained. You probably
don't want to use this.
All three Linux PortAudio drivers are enabled by default and supporting
libraries need to be present on the system in order to build. If you
prefer to disable one or more of the drivers, use the USE_PA_* options
in the main Makefile.
Dmitry Panfilov has contributed a basic native ALSA driver for Linux.
Not all features are supported with this driver. It is not compiled in
by default, because this would add alsa libraries to the build and link
dependencies -- and we don't have a good way of communicating that to
applications (like pkg-config stuff, etc). To use it, though, you just
need to change AUDIO_ALSA=0 to AUDIO_ALSA=1 in the Makefile.