app_conference is a channel-independent conference application. Design goals It has several design goals which are different than meetme: * It does not require a zap channel for timing. * It is very efficient when used with channels which support DTX (silence detection/discontinuous transmission). * It can do VAD on channels which do not support DTX (although this is more expensive than just mixing them, but less expensive then encoding; therefore it might still be a win). * It presents messages on the Monitor interface for determine which speakers are active. I believe that people other than myself are using this, but my environment is pretty rigid, and cases outside of this aren't tested: * Some callers come from the PSTN via IAX2 from a box with Zaptel cards, via uLaw. * Other callers come from iaxclient based softphones using speex (was GSM) via IAX2 (with DTX). * Some conferences have a single SIP channel which listens in GSM. Mixing design * Minimize encoding/decoding, minimize mixing. * Minimize generational loss from trancoding. * Usual cases are handled very efficiently: o One speaker: That speaker's frame is sent directly to each participant which uses the same codec. It is trancoded _once_ for each additional codec type used by participants. o Two speakers: Each speaker gets the other speaker's frames. The two speaker's frames are decoded and mixed, and then encoded _once_ for each codec type used by participants. License Naturally, app_conference is GPL. The CVS also includes parts of libspeex, which is distributed under it's a BSD-style license. Getting app_conference app_conference is available from the 'iaxclient' project on sourceforge: * CVS browse: http://cvs.sourceforge.net/viewcvs.py/iaxclient/app_conference/ (cache) * Project page: http://sourceforge.net/projects/iaxclient/ (cache) Compiling app_conference * just like any other asterisk application. * Some makefile fiddling may be necessary Using app_conference There is no configuration file. Conferences are created on-the-fly. Dialplan syntax: Conference(ConferenceName/Flags/Priority[/VADSTART/VADCONTINUE]) * ConferenceName: Whatever you want to name the conference * Flags one of more of the following: o M: Moderator (presently same as speaker) o S: Speaker o L: Listener o T: "Telephone caller" (just for stats?). o V: Do VAD on this caller o D: Use Denoise filter on this caller. o d: Send manager events when DTMF is received. * Priority: Currently ignored; was to be a "speaking priority" so a higher priority caller could "override" others. * VADSTART: Optional: "probability" to use to detect start of speech. * VADCONTINUE: Optional: "probability" to use to detect continuation of speech. Features / CLI/Manager Commands * conference debug <conference_name> [ on | off ] enable debugging for a conference * conference show stats show conference stats * conference play sound <channel-id> <sound-file> [mute] play a sound to a conference member, optionally muting them. Manager Events app_conference generates several detailed manager events so that applications interfacing with the manager API can monitor conferences: * ConferenceState: sent as members begin/end speaking. Channel: The channel State: "speaking" or "silent" * ConferenceDTMF: sent when conference members send DTMF to the conference Channel: The channel Key: The DTMF key send [0-9*#] * ConferenceSoundComplete: send when the conference has finished playing a sound to a user Channel: The channel Sound: The first 255 bytes of the file requested in conference play sound CLI/Mgr command. Benchmarking It would be nice to have solid benchmarks to present, but a good size machine should be able to handle many callers when either (a) they are using DTX, or (b) they are listen-only. It's used often with hundreds of simultaneous callers. Discussion The iaxclient-devel mailing list is probably as good a place as any to discuss. --- app_conference is brought to you by the letter q, and the number e