Merge commit 'cdcc370293a159c321e41af7f0eef141c62d698d'
[ffmpeg.git] / libavformat / rtspdec.c
index f4255f2..12aa122 100644 (file)
@@ -506,6 +506,18 @@ static int rtsp_read_play(AVFormatContext *s)
     av_log(s, AV_LOG_DEBUG, "hello state=%d\n", rt->state);
     rt->nb_byes = 0;
 
+    if (rt->lower_transport == RTSP_LOWER_TRANSPORT_UDP) {
+        for (i = 0; i < rt->nb_rtsp_streams; i++) {
+            RTSPStream *rtsp_st = rt->rtsp_streams[i];
+            /* Try to initialize the connection state in a
+             * potential NAT router by sending dummy packets.
+             * RTP/RTCP dummy packets are used for RDT, too.
+             */
+            if (rtsp_st->rtp_handle &&
+                !(rt->server_type == RTSP_SERVER_WMS && i > 1))
+                ff_rtp_send_punch_packets(rtsp_st->rtp_handle);
+        }
+    }
     if (!(rt->server_type == RTSP_SERVER_REAL && rt->need_subscription)) {
         if (rt->transport == RTSP_TRANSPORT_RTP) {
             for (i = 0; i < rt->nb_rtsp_streams; i++) {
@@ -542,9 +554,6 @@ static int rtsp_read_play(AVFormatContext *s)
                 AVStream *st = NULL;
                 if (!rtpctx || rtsp_st->stream_index < 0)
                     continue;
-                if (CONFIG_RTPDEC &&
-                        !(rt->server_type == RTSP_SERVER_WMS && i > 1) && s->iformat)
-                        ff_rtp_send_punch_packets(rtsp_st->rtp_handle);
 
                 st = s->streams[rtsp_st->stream_index];
                 rtpctx->range_start_offset =