From patchwork Tue Sep 3 01:55:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Liu Steven X-Patchwork-Id: 14879 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 4CDEA449D55 for ; Tue, 3 Sep 2019 04:55:34 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2AC3E687F86; Tue, 3 Sep 2019 04:55:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtpbgeu2.qq.com (smtpbgeu2.qq.com [18.194.254.142]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CC5EB687F86 for ; Tue, 3 Sep 2019 04:55:26 +0300 (EEST) X-QQ-mid: bizesmtp25t1567475720tjmvi75i Received: from localhost (unknown [49.7.64.202]) by esmtp10.qq.com (ESMTP) with id ; Tue, 03 Sep 2019 09:55:19 +0800 (CST) X-QQ-SSF: 01100000008000K0ZQF0060A0000000 X-QQ-FEAT: F8xs2aWDdZiSe5fAKl5Gsf4bNs0Pswa01O1YC+PTZuWU7lk5/+cy5DlliSLiz VEmK1oDXE0IIkwvFsxaAbCvxFbtOLyiekAZke/ic1g2JEBphqc5P6b05SPZyP2AIHNIfMkE LGySJ2/7QSgpi3NVWkjnYW9J8rjrGor05BFzkB9eBjGiuLVPHiC7BxEmBtUIyFdmdFHDHKo xm6Tvv5wvzxea27xn+N5ZOchu5gNi26BxlBNwQsOhVab/l09JOEvyjyWnSa4+B0ONNnZJft PYMmXIkBYkSAHc5lEyC3h6RPIiAF3CHDEotkCxtP7Vb6hSh9zZqLVSCW6cup5yVyZJiKlNX 8V5EDSi X-QQ-GoodBg: 0 From: Steven Liu To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 Sep 2019 09:55:17 +0800 Message-Id: <20190903015517.93407-1-lq@chinaffmpeg.org> X-Mailer: git-send-email 2.17.2 (Apple Git-113) X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:chinaffmpeg.org:qybgforeign:qybgforeign2 X-QQ-Bgrelay: 1 Subject: [FFmpeg-devel] [PATCH] avformat/hls: continue to play enabled playlist when have failed playlist 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: Steven Liu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" fix ticket: 7811 Signed-off-by: Steven Liu --- libavformat/hls.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/libavformat/hls.c b/libavformat/hls.c index 61b6759ef5..3aee7a19ae 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -116,6 +116,7 @@ struct playlist { int n_segments; struct segment **segments; int needed; + int broken; int cur_seq_no; int64_t cur_seg_offset; int64_t last_load_time; @@ -1815,15 +1816,21 @@ static int hls_read_header(AVFormatContext *s) if (c->n_playlists > 1 || c->playlists[0]->n_segments == 0) { for (i = 0; i < c->n_playlists; i++) { struct playlist *pls = c->playlists[i]; - if ((ret = parse_playlist(c, pls->url, pls, NULL)) < 0) + if ((ret = parse_playlist(c, pls->url, pls, NULL)) < 0) { + av_log(s, AV_LOG_WARNING, "parse_playlist error %s [%s]\n", av_err2str(ret), pls->url); + pls->broken = 1; + if (c->n_playlists > 1) + continue; goto fail; + } } } - if (c->variants[0]->playlists[0]->n_segments == 0) { - av_log(s, AV_LOG_WARNING, "Empty segment\n"); - ret = AVERROR_EOF; - goto fail; + for (i = 0; i < c->n_variants; i++) { + if (c->variants[i]->playlists[0]->n_segments == 0) { + av_log(s, AV_LOG_WARNING, "Empty segment [%s]\n", c->variants[i]->playlists[0]->url); + c->variants[i]->playlists[0]->broken = 1; + } } /* If this isn't a live stream, calculate the total duration of the @@ -1993,6 +2000,9 @@ static int recheck_discard_flags(AVFormatContext *s, int first) cur_needed = playlist_needed(c->playlists[i]); + if (pls->broken) { + continue; + } if (cur_needed && !pls->needed) { pls->needed = 1; changed = 1;