From cdcc370293a159c321e41af7f0eef141c62d698d Mon Sep 17 00:00:00 2001 From: Gilles Chanteperdrix Date: Sun, 22 Feb 2015 07:59:55 +0100 Subject: rtsp: punch holes again after pause MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a client behind a NAT issues a pause command, and stay paused for a long time, the router may stop the RTP/RTCP port redirection. Resend the hole punching packets before each PLAY command to cause the router to restart the port redirection in that case. Move the existing code for sending the packets from the SETUP phase to the PLAY phase. Signed-off-by: Martin Storsjö --- libavformat/rtspdec.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libavformat/rtspdec.c') diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index 418f3837b8..659c768423 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -504,6 +504,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++) { -- cgit v1.2.1