RTP: when sending to RTP an odd port we need to specify a=rtcp
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Wed, 7 Jan 2009 19:11:17 +0000 (21:11 +0200)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Wed, 7 Jan 2009 19:11:17 +0000 (21:11 +0200)
Otherwise the receiver would -in principle- try to receive RTP on the
next (plus one) even port, whereas the m= line port would be used for
RTCP. We could also pass a=rtcp for the normal even/RTP & odd/RTCP
ports setup, but that can only confuse receivers with no gain.

Note that receivers may not parse the a=rtcp parameter in any case. In
fact, VLC does not parse the a=rtcp field to this day. In any case,
sending RTP to an *even* port is the only safely interoperable option.

modules/stream_out/rtp.c

index 8ec54d9..1d10655 100644 (file)
@@ -783,6 +783,9 @@ char *SDPGenerate( const sout_stream_t *p_stream, const char *rtsp_url )
                       id->psz_enc, id->i_clock_rate, id->i_channels,
                       id->psz_fmtp);
 
+        if( !p_sys->rtcp_mux && (id->i_port & 1) ) /* cf RFC4566 §5.14 */
+            sdp_AddAttribute ( &psz_sdp, "rtcp", "%u", id->i_port + 1 );
+
         if( rtsp_url != NULL )
         {
             assert( strlen( rtsp_url ) > 0 );