[reSIProcate] progress update: splitting reCon API and sipX implementation code
Daniel Pocock
daniel at pocock.pro
Sun Apr 25 13:38:55 CDT 2021
I made some commits for this work
The goal is to give people the flexibility to choose your own media
stack. For example, you could use Farstream, GStreamer, ffmpeg or
Kurento Media Server.
A lot of the recon code is already very generic and useful for arbitrary
media stacks. I found quite a few methods that are 99% SIP logic and
they have one line of code touching sipXtapi. I've created some pure
virtual functions to replace some of the most common interactions with
sipXtapi, here are some trivial examples:
https://github.com/resiprocate/resiprocate/commit/33d0333564c3c24057dbd7457930045e8f3395a3#diff-b3b2761215e678b972bd1b483df12aadccdff55fcc0db530bf7eb1bc60a4c2aa
https://github.com/resiprocate/resiprocate/commit/36f5f25680ed039d90b361f4fd0ecfd33a5261e3#diff-b3b2761215e678b972bd1b483df12aadccdff55fcc0db530bf7eb1bc60a4c2aa
Another important concept is the use of the builder pattern to create
the Participant classes, they can return the right subclass for any
media stack:
https://github.com/resiprocate/resiprocate/commit/bbd61211eeb28664d4f19e4c64784de4de036d03#diff-b3b2761215e678b972bd1b483df12aadccdff55fcc0db530bf7eb1bc60a4c2aa
After doing all that, the bulk of the work is in this monster commit:
https://github.com/resiprocate/resiprocate/commit/c835e6f030d88a55cb708800f75429888c930d84#diff-b3b2761215e678b972bd1b483df12aadccdff55fcc0db530bf7eb1bc60a4c2aa
There is still some remaining work to do in LocalParticipant and
MediaResourceParticipant (for example, DTMF tones). I thought I would
push as far as I can with RemoteParticipant and then circle back for the
other types of Participant.
We may need to create a type or class to encapsulate the bridge port
IDs. I haven't looked at Kurento in depth but I notice it is using some
UUIDs while sipXtapi uses integer IDs.
After this is settled, the next thing I plan to work on is the Session
concept. Farstream has an extra layer in the class hierarchy for the
session, e.g. audio session, video session, screenshare session. reCon
only has a single audio session, this will need to become a list of
[0..*] sessions.
More information about the resiprocate-devel
mailing list