\title{SIP Conferencing}

\begin{document}

Everybody hears everybody vs. subgroups (matrix). It seems likely that a
partially filled mixing matrix is best implemented as several
independent calls, with different sets of participants.

\begin{description}
\item[Multicast:]

\item[Dial-in:] ad hoc conferences are created by sending a request with
a random user identifier to the bridge. The UA creating the conference
then uses REFER to move current call participants to that bridge.

\item[Dial-out:] A SIP UA simply sends {\INVITE} request to all
participants.

\item[Star:] One phone mixes. This model works only for small groups and
has the disadvantage that the departure of the mixer node terminates the
conference.

\item[Full mesh:] In full-mesh mode, every participant sends media
stream to every other participant. Since the per-link bandwidth scales
as $N-1$, this mode is suitable only for very small groups of no more
than about half a dozen participants. However, for very low-bandwidth
conferences, such as text chat, the number of participants that can be
supported in this mode is significantly larger.

\end{description}

Note that bridges can be hierarchical, possibly arranged via an
application-layer multicast routing protocol \cite{gossamer}.

\subsection{Full-Mesh Conferencing}

New arrivals can be told via {\REFER} whom to contact among the
participants known to the inviter.  However, if several participants
invite new members at the same time, these new members may not be added
properly to the mesh by near-simultaneous arrivals.  One solution is to
include the current member list as a header in any invitation responses. 
If a new member discovers a UA that it does not yet know about when
sending an {\INVITE}, it simply invites that participant \cite{sticky}.

This simple model works well for adding participants, but fails if
participants drop out, as they may never be removed from all links of
the mesh and may continue to receive new invitations.  One simple
solution is to employ ``birth'' and ``death certificates'' \cite{death}
that keeps all members in the list, active and expired, but marks those
that have sent a {\BYE} with a departure time stamp and adds an arrival
time stamp for those that have joined.  The departure time stamp is
overridden if the same entity joins again at a later time.  As long as
the time difference between leaving and re-joining exceeds the clock
skew, there should be no ambiguity as to whether a particular UA is
supposed to be ``in'' or ``out''.

\section{SIP Usage}

It may also be helpful to define a new status code indicating that the
recipient is already a member of a particular session.

If RTCP is \emph{not} used, a means for indicating conference membership
is useful.  The same mechanism as for full-mesh conferences could be
employed, where the MCU sends {\OPTIONS} requests to the participants
indicating the current membership list.  Alternatively, membership
changes can be defined as an event, with group members that care about
participant changes subscribing to the membership list \cite{event}.

Use of Call-Id

Use of REFER to move participants between various conference models
(two-party to dial-in, dial-in to multicast, etc.)

\section{Related Issues}

Conference control such as floor control


\end{document}
