From patchwork Sun Sep 27 11:50:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 22637 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 34F1844A4CA for ; Sun, 27 Sep 2020 14:51:18 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E83A268B5C6; Sun, 27 Sep 2020 14:51:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from qq.com (out203-205-251-113.mail.qq.com [203.205.251.113]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3F5B868B1FD for ; Sun, 27 Sep 2020 14:51:10 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1601207466; bh=1rPOiw+yZzErVXUymEZzC4wlopgypFntj613Q78ppiQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=he19iS+/CxVeB6DR9x7VfqxrABh5TPWGct2wnkIZHYtnwVMt9R+dp+LYNF9KqDCrw rAIv6tVk6F4TGd163iwb6hMAqBuN4xTLbZ5hR+n4ynNxX4TSUH1IY6Y0H4575YEUKy oGIuxykjCfHikMGPVAnp3MVIILaNHO0Se54zkId0= Received: from ZHILIZHAO-MB2.tencent.com ([59.37.125.48]) by newxmesmtplogicsvrsza8.qq.com (NewEsmtp) with SMTP id CA382222; Sun, 27 Sep 2020 19:50:35 +0800 X-QQ-mid: xmsmtpt1601207435taqg6a0ag Message-ID: X-QQ-XMAILINFO: Mt+27icQg8kNr5nlIJJ7B/SS4ALDcppfmOOSW94kVrmcXMstmGRjl0AfDa12yg Z1S/zUzy4X7EprJHfpSmtoT0iCUbWANKSDySOV0rk7KXpUGMDhzOyTmUlToRrIYW5gyMaeslOjcd g1Gd7GDvmnKwEqcZInbORsjnmJ3FgPRNP5F9HU2yVdq0jpq6/BfBdZAh8oR+auM5vloJe0Zm/yzr kt5IJoGkuhHCfWsTPhcLp0VbSBSNUToxk4nL0b26DBn6gBVSHP5TTXl6koJ7B4NIlzAg5KdIAIDq 3aqwlguO7u1fmSxi32wrxGQgdsc0M5aLuZkTeJB3UGDEOpNMvO0nYvcCN09UGXq8FNVO2pEJKhA6 9N9Gj2zH4ShlAvxA2BfU/UrTjf1uI2729rOmSNz5SqdtGoIwGYb8KZhQCC8UqXXvFvndWBNy+XP7 q9UzI42sTXeT73WP3XcvLmIVBJziw5N3y527tLA+/ltk61KnApOSHb2r2y12rpgGmLaazSUuOy+c 0GxOq3iLK44LsN9EUYyw9xeFjbSven4BpXMF1d4wb7EZfr6ahyKBaCI/XzeN1k8AaRnfyWTIJpq2 LFXuiTFskdyHETypzUPZ8uN9+xU2BurRW8TMeWHJjunL+U7+t3Er2+9jb2/w0/HtaP7Ok4+3K9o2 OhH7ySrJJhdzAU16jCMZiVV68j6IXpyqQc1/0yNlfvlAAr1YNRPdkJtPZM8qvs5LcLdvQxYxJWd3 1zm731XEklKkCZkcZF26M0GpRvDfpCEH1HdtKDU7F3IY7WRdywvdgsR6l5qwbwxmZt From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Sep 2020 19:50:26 +0800 X-OQ-MSGID: <20200927115027.60823-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200926212426.zdifqgcvgdkkvbng@manj> References: <20200926212426.zdifqgcvgdkkvbng@manj> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/2] avformat/rtsp: fix infinite loop with udp transport X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Fix #8840. Steps to reproduce: 1. sender: ./ffmpeg -i test.mp4 -c copy -f rtsp -rtsp_transport udp rtsp://localhost:12345/live.sdp 2. receiver: ./ffmpeg_g -y -rtsp_flags listen -timeout 100 -i rtsp://localhost:12345/live.sdp -c copy test.mp4 --- v3: mention the ticket. libavformat/rtsp.c | 2 ++ libavformat/rtsp.h | 1 + libavformat/rtspdec.c | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 5d8491b74b..597413803f 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -2051,6 +2051,8 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, if ((ret = parse_rtsp_message(s)) < 0) { return ret; } + if (rt->state == RTSP_STATE_TEARDOWN) + return AVERROR_EOF; } #endif } else if (n == 0 && ++timeout_cnt >= MAX_TIMEOUTS) { diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index 54a9a30c16..481cc0c3ce 100644 --- a/libavformat/rtsp.h +++ b/libavformat/rtsp.h @@ -198,6 +198,7 @@ enum RTSPClientState { RTSP_STATE_STREAMING, /**< initialized and sending/receiving data */ RTSP_STATE_PAUSED, /**< initialized, but not receiving data */ RTSP_STATE_SEEKING, /**< initialized, requesting a seek */ + RTSP_STATE_TEARDOWN,/**< initialized, in teardown state */ }; /** diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index dfa29913bf..ec786a469a 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -494,7 +494,7 @@ int ff_rtsp_parse_streaming_commands(AVFormatContext *s) "Public: ANNOUNCE, PAUSE, SETUP, TEARDOWN, " "RECORD\r\n", request.seq); } else if (methodcode == TEARDOWN) { - rt->state = RTSP_STATE_IDLE; + rt->state = RTSP_STATE_TEARDOWN; ret = rtsp_send_reply(s, RTSP_STATUS_OK, NULL , request.seq); } return ret;