From patchwork Tue Apr 10 08:28:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Liu Steven X-Patchwork-Id: 8374 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp783242jad; Tue, 10 Apr 2018 01:28:54 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/eP557LN4jU49sLTkqxEIv2qByHmeAgpEgm9ug5+vQ9CyP0AFSzZLSWMq302/Dzs+MdfUv X-Received: by 10.223.169.55 with SMTP id u52mr30117549wrc.29.1523348934044; Tue, 10 Apr 2018 01:28:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523348934; cv=none; d=google.com; s=arc-20160816; b=vWsosGibr1UdR7RBr3d6MMryguwC7CwKfFifrlfPSRcdu0RJcCjzsyIQT975cZupG3 At53m4e0Cnl65eHh4IBko1D1UXp1E37W3RSqzaJtx/U2y0tKcry4pp1PY2aR6J7U+z7m 9UGHGM/TxAQwRmjeA7WEo22SOva6434FBM4f0AOGBKil2wSQRiDL92XKS90FVwysnOSr 4PT4njgJMATOYIn3hFHvA/icFSqWKaaoINT450Mog0oTOHP2Qkdv0x0ZnRN+xU592LO5 x1/5gvBdWCgHWmpntVVxN/Ta5bsBPBqsk11MyEc5KXl/ACwbJNp7V4ig6wCm6Q7L/bBy cLcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:date:to:from :delivered-to:arc-authentication-results; bh=oP9+oIfmTPMXAWdMAbCIneaQbwwshtLYuK5Am2AgPB8=; b=TllFQHF1pJ5zD8qxus3uhJx1A+Vm57r4/4uMPrDZQhliU+IOjzCB+2NqNgzr9MuKs0 ry4IbIsrPzogGdixHtOev68TZA9jUNpSUbrkh3HpdoM1cCKDl/UUtIB4JB9BRZWY2ZEE Joz3vLmrk//qcr1zFG1VYTmMt3zQMj9kINYSRpjanXH0qOPeKFrkKxGn3F7bg/ERSEWx hOJrLdZ6u2EBteoFmKdXgwLQD3yWnwilcuwhq+ShyXuG6GpqB6U5exNTrwsge16sYqJI q0CyEgOIMWA0LQvsNV1Ze6XTDKqaoNMIKaaEiYOqY1Kl8lqhJmmeSPW59OCbPZvGjZKM WmOg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p17si1533119wrp.438.2018.04.10.01.28.51; Tue, 10 Apr 2018 01:28:54 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1867E689E45; Tue, 10 Apr 2018 11:28:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 38517680A16 for ; Tue, 10 Apr 2018 11:28:17 +0300 (EEST) X-QQ-mid: bizesmtp16t1523348911t6ogzcdf Received: from localhost (unknown [47.90.47.25]) by esmtp4.qq.com (ESMTP) with id ; Tue, 10 Apr 2018 16:28:31 +0800 (CST) X-QQ-SSF: 01100000002000F0FKF0B00A0000000 X-QQ-FEAT: R/yWRekfFcrkU+H4ckonkj4KsjNQQWVagy7s9luH3B3ASC2VUhouEO0vPRkE9 yv95RmqzLmxQAXB60Y7fRJRD+00yU6JP5pBRn7sKHApOXsiOtJ5PEcdu0IjgI3jH/0r26gj G673zXCA6wVECVgrQIQQBMtZdbyZl7rOdPQ+tegewpfOHCCccbZk5jiIXyWXh0rgZPMeLvK wrwAmSeU3l+9ctXUO6TBrjLM3LGoGChE+x2KD0lAK1p7oDcCwXN8BIL5K7+Qy2Oq3fP+MGE UonOpNrxiVYoc5+QWq3qisEa8Mx4e83qimRw== X-QQ-GoodBg: 0 From: Steven Liu To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Apr 2018 16:28:26 +0800 Message-Id: <20180410082826.10169-1-lq@chinaffmpeg.org> X-Mailer: git-send-email 2.10.1.382.ga23ca1b.dirty X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:chinaffmpeg.org:qybgforeign:qybgforeign2 X-QQ-Bgrelay: 1 Subject: [FFmpeg-devel] [PATCH] avformat/hlsenc: add option hls_out_list_size 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" when use hls_list_size and hls_flags delete_segments, there will saving hls_list_size * 2 +- segments, so this option can control the segments numbers. fix ticket: #7131 Signed-off-by: Steven Liu --- doc/muxers.texi | 4 ++++ libavformat/hlsenc.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/doc/muxers.texi b/doc/muxers.texi index cb75c261c5..21ef786bcf 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -513,6 +513,10 @@ Segment will be cut on the next key frame after this time has passed. Set the maximum number of playlist entries. If set to 0 the list file will contain all the segments. Default value is 5. +@item hls_out_list_size @var{size} +Set the maximum number out of playlist entries. Default value is 1. +This option should be used with @code{hls_flags delete_segments}. + @item hls_ts_options @var{options_list} Set output format options using a :-separated list of key=value parameters. Values containing @code{:} special characters must be diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 2a54b4342e..ff4c88d798 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -171,6 +171,7 @@ typedef struct HLSContext { float time; // Set by a private option. float init_time; // Set by a private option. int max_nb_segments; // Set by a private option. + int hls_out_list_size; // Set by a private option. #if FF_API_HLS_WRAP int wrap; // Set by a private option. #endif @@ -443,6 +444,7 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, HLSSegment *segment, *previous_segment = NULL; float playlist_duration = 0.0f; int ret = 0, path_size, sub_path_size; + int segment_cnt = 0; char *dirname = NULL, *p, *sub_path; char *path = NULL; AVDictionary *options = NULL; @@ -456,14 +458,24 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, } segment = vs->old_segments; + segment_cnt = 0; while (segment) { playlist_duration -= segment->duration; previous_segment = segment; segment = previous_segment->next; + segment_cnt++; if (playlist_duration <= -previous_segment->duration) { previous_segment->next = NULL; break; } + + if (!hls->hls_out_list_size) { + av_log(s, AV_LOG_WARNING, "the hls_out_list_size value is 0, that's wrong, so turn it to default value 1.\n"); + } + if (segment_cnt >= hls->hls_out_list_size) { + previous_segment->next = NULL; + break; + } } if (segment && !hls->use_localtime_mkdir) { @@ -2779,6 +2791,7 @@ static const AVOption options[] = { {"hls_time", "set segment length in seconds", OFFSET(time), AV_OPT_TYPE_FLOAT, {.dbl = 2}, 0, FLT_MAX, E}, {"hls_init_time", "set segment length in seconds at init list", OFFSET(init_time), AV_OPT_TYPE_FLOAT, {.dbl = 0}, 0, FLT_MAX, E}, {"hls_list_size", "set maximum number of playlist entries", OFFSET(max_nb_segments), AV_OPT_TYPE_INT, {.i64 = 5}, 0, INT_MAX, E}, + {"hls_out_list_size", "set maximum number of out to playlist entries", OFFSET(hls_out_list_size), AV_OPT_TYPE_INT, {.i64 = 1}, 0, INT_MAX, E}, {"hls_ts_options","set hls mpegts list of options for the container format used for hls", OFFSET(format_options_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E}, {"hls_vtt_options","set hls vtt list of options for the container format used for hls", OFFSET(vtt_format_options_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E}, #if FF_API_HLS_WRAP