-
Notifications
You must be signed in to change notification settings - Fork 298
recon Overview
recon (Conversation Manager) is a SIP User Agent API that allows conversations and participants to be created. Participants can then be placed into conversations. Recon could be used to create the following types of applications:
- Multi-line Phone
- Conference Server
- Media Server
There are three types of participants:
- Local participant - this participant type consists of the default local speaker and microphone of the computer that is running recon. Local participants are always only explicitly destroyed. Each application should only have one local participant created at startup time. This paricipant can be moved between/added to conversations as desired.
- Media participant - this participant type consists of an audio file, audio stream, or a tone being played out. Media participants are destroyed when the file is complete or when explicitly destroyed.
- Remote Participant - this participant type uses audio from an external source. The current implementation uses SIP to create/connect to remote participants. Remote participants are destroyed by the API user, or a "hangup" signal from the remote party.
- 1 conversation
- 1 local participant
- 1 remote participant.
Recon has a few options available for the underlying RTP/codec/mixing library. The media engine is responsible for processing incoming RTP packets to and from the reflow layer. The reflow project is then used to send RTP packets to the network. See the What is reflow?
- sipXtapi: recon's first supported media engine. Audio handling only. See What is sipXtapi? section for more information.
- Gstreamer: adds support for video and webrtc. This is an initial implementation and not all recon features are available. https://gstreamer.freedesktop.org/.
- Kurento: adds support for video and webrtc. This is an initial implementation and not all recon features are available. https://github.com/Kurento/kurento.
- LibWebRtc: adds support for video and webrtc. This is an initial implementation and not all recon features are available. https://webrtc.org/.
The flow manager is a layer that faciltates the flow of media to/from a media based application. It is responsible for any NAT traversal logic, and will eventually implement ICE as a NAT traversal solution. reflow uses the reTurn project for NAT traversal. The flow manager also implements SRTP encryption of RTP packets, and is capable of sending media via:
- UDP
- TURN UDP Allocation
- TURN TCP Allocation with UDP relay
- TURN TLS Allocation with UDP relay
- SRTP encrypted over any of the above transports
- DTLS-SRTP encrypted
recon uses only the media framework portion of the LGPL licensed sipXtapi open source project. sipXtapi is full SIP User Agent SDK. It consists of a number of underlying libraries, that include a media framework, called sipXmediaLib that is capable, amongst other tasks, of the following:
- RTP encoding and decoding
- Codec encoding and decoding - including support for G.711A/u, AMR NB/WB, G.722, G.726, G.729, GSM FR, iLBC, Speex NB/WB/UWB, RFC4733 DTMFs
- Media mixing capabilities (Bridge Mixer)
- Packet Loss Concealment
- Echo cancellation
- Tone generation
- Media file playback
- PC/device Speaker and Microphone mixing
For more details check out:
To view source code:- https://github.com/sipXtapi/sipXtapi/
- CpMediaInterface.h - Main media interface header file for sipXtapi users
- CpTopologyGraphInterface.h - Other main media interface header file for sipXtapi users. CpTopologyGraphInterface.h inherits from CpMediaInterface.h, and offers more advanced media API's. This is the interface that recon uses.
- Rohan Mahy
- Scott Godin ( s g o d i n AT s i p s p e c t r u m DOT c o m )
- Correct and comprehensive implementation of the relevant standards from the SIP working groups
- Support for SIP signaling over UDP/TCP/TLS protocols over both IPv4 and IPv6
- Asynchronous client APIs
- Sending media over TURN UDP/TCP/TLS allocations using a UDP relay
- STUN binding discovery for SDP body
- SRTP via SDES key negotiation
- SRTP via DTLS-SRTP key negotiation
- Supported Codecs (via sipXtapi): G711u/a, GSM, iLBC, speex
- Audio file memory cache
- Target-Dialog support (draft-ietf-sip-target-dialog)
- Auto-answer support
- SIP Subscription support
- Multi-Registration support with Digest Authentication
- Bridge Mixing
- Variable Participant Contribution Levels
- Both In-dialog and Out-of-dialog REFER handling
- Test console program (testUA)
- SDP Media Capability Negotiation (draft-ietf-mmusic-sdp-capability-negotiation)
- Single step transfers
- Supervised transfers
- Pager and Session Mode Instant Messaging Support
- Media layer abstraction interface - so that plugging in other media libraries is easier
- Video Support
- TODO - more details here
- You can discuss recon ongoing development at GitHub Discussions.
- recon is in a subtree of the reSIProcate source base at https://github.com/resiprocate/resiprocate.
- You can view recon source code
- You can view reflow source code
- You can view sipXtapi source code
- recon Overview
- Building recon
- Using recon
- recon Sequence Diagram PNG or PDF
- Using testUA
- Limitations with sipXtapi media Integration
- Original Planning Notes
- recon ToDo List
- recon uses the reflow project which has the following dependencies
- OpenSSL - minimum version is 1.1.1
- ASIO 1.2.0 or above (http://asio.sourceforge.net/) - recently tested with ASIO 1.18.1
- libSrtp
- sipXtapi
Note: Using boost that includes ASIO was considered, but this adds an extra requirement to build the boost system library.
recon is distributed under a standard 3-clause BSD license:
Copyright (c) 2007-2008, Plantronics, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of Plantronics nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ==================================================================== */
Also see the following applicable licenses for surrounding code:
- Navigation
- Developers
- Packages
- Community