[vlc-devel] rtcp and udp port collision
finlayson at live555.com
Sat Oct 23 00:19:31 CEST 2010
>Le vendredi 22 octobre 2010 14:29:20 Sébastien Escudier, vous avez écrit :
>> But, in the case I describe, we know DEST is taken by the client, which
>> may be on the same computer, so we shouldn't bind DEST-1. This is what's
>> happening with me.
>> And to avoid this, we could bind only even ports number for SRC.
>> Moreover, as noticed by David, this seems to be a common practice.
>I checked the VLC RTP output code. It ignores failure to create the RTCP
>socket (this is another bug). So it must be the client that fails.
>That would be live555, not VLC. This is pretty stupid. The client should
>allocate both RTP and RTCP ports *before* it contacts the server. Then, for
>lack of atomic multi-bind(), the client should run a live loop until it
>obtains a working pair.
I don't think that the LIVE555 code (used by the
RTSP client) is a problem; it does exactly what
you describe (see "liveMedia/MediaSession.cpp",
lines 610-673). Note, though, that before trying
to "bind()" a port to the new socket (to see if
it can be used), the code calls "setsockopt()" to
turn off SO_REUSEPORT. This is how it detects
whether the port number is in use elsewhere on
the same host.
This can work, of course, only if the *server*
also turns off SO_REUSEPORT when it tries to
allocate its own ports. Our RTSP server code
does this (look for "NoReuse" in
you care). But perhaps your RTSP server code
Live Networks, Inc.
More information about the vlc-devel