[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[AVT] Re: What is an RTP Session?
> Mike Taylor" <mtaylor_eng@hotmail.com> writes:
>
> Furthermore, does anyone know of any commercial or public domain
> voice conferencing apps that can create multipoint unicast
> peer-to-peer conferences?
While its not "voice" conferencing, the GPL'd sfront:
http://www.cs.berkeley.edu/~lazzaro/sa/index.html
does MIDI sessions using multipoint unicast. You can read about the
details here:
http://www.cs.berkeley.edu/~lazzaro/sa/sfman/user/network/
and download code to play with.
Basically, it works like this:
-- There's a "conference SIP server" (a B2BUA, in practice)
running at Berkeley, that keeps track of active sessions.
-- When someone joins a session, it sends an SDP describing how
to send data to itself to the Berkeley SIP server. This SDP
includes a UDP IP/ports that the sender listens to using
recvfrom() in a connectionless way, so that it can receive
DGRAMs from many sources.
-- The Berkeley SIP server distributes the SDP of the new
session participant to the existing participants (if any),
which all then start sending RTP and RTCP to the new member.
-- The Berkeley SIP server sends the SDPs of the existing session
participants to the new participant, which send starts sending
packets to all of them. Each SDP codes the UDP IP/ports that the
participant listens on for DGRAMs from any sender.
-- The Berkeley server uses a variant of the NAT-breaking ideas
for SIP currently working through midcom, to solve the
problem that the "new session participant" might be behind
a NAT box. We don't support firewalls -- in practice, about
25% of the people who try to demo sfront seem to fail because
of firewall issues, from my cursory look at our logs, so this
is a significant shortcoming.
-- Receiver multiplexing is a bit sticky, because by the rules
of SDP, the hosts need not send UDP from the same IP/ports
pair its receiving from. Sfront gets around this by assuming
the sending and receiving IP/ports are the same, and falls
back on demultiplexing via SSRC (which is explicitly
discouraged in the RTP RFC, for good reason ...) if this
assumption is failing.
-- I would recommend NOT to do multipoint in the way sfront
does, unless you are also willing to run SRTP and authenticate
every RTP and RTCP packet coming in. By running UDP w/o a
connect(), literally anyone could send you a UDP packet,
which could be crafted to exploit bugs in your decoder and
root your machine, etc. Sfront does this sort of authentication,
but since it predates SRTP it uses its own method to sign the
packets.
Some of what I describe about is probably not legal SIP/SDP/RTP usage,
I tried as hard as I could to stay within the bounds of the RFCs when
implementing it, though ...
-------------------------------------------------------------------------
John Lazzaro -- Research Specialist -- CS Division -- EECS -- UC Berkeley
lazzaro [at] cs [dot] berkeley [dot] edu www.cs.berkeley.edu/~lazzaro
-------------------------------------------------------------------------
_______________________________________________
Audio/Video Transport Working Group
avt@ietf.org
https://www1.ietf.org/mailman/listinfo/avt