From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 948D9478EB for ; Fri, 27 Oct 2023 10:58:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 027B668CBE4; Fri, 27 Oct 2023 13:58:21 +0300 (EEST) Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 106FB68CB11 for ; Fri, 27 Oct 2023 13:58:14 +0300 (EEST) Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-52bd9ddb741so3290922a12.0 for ; Fri, 27 Oct 2023 03:58:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698404293; x=1699009093; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=hnYWhCoSZ/ZmZxnwIVcnoVdZ/uBqOLcXMoM8zkEOS0k=; b=KqJs2hvkOLY0e2p03TGAdXlMl+ud7c00ASVk/Rd54B5uUc+5u3cY65lHXaSM/fxVHV ipXLaiRCAGrU4ExP+blH4sjqa7jMdPXn/licNNUpNhrUykq+5lGEhHWv1r0WuOxHYZ1Q PypazYggcp32G+lvqoLBgw0xzaaeH3717X/0wPGxVQ9O3Qil9/lfKXdlHJHQVXwB06ba mA7LS2qk7OsPXa31Tn4p9Czhm08PIrMZytTyc++d1MlDN0JfE+CuKvyKMiNNKAIApMSg fzoTANE/+OTcpGIT/Mq8OQgwDMMCfAkeoX3FG5KHTjeLNk1XEmmLqlYM+m9zfxauZk+Q YIxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698404293; x=1699009093; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hnYWhCoSZ/ZmZxnwIVcnoVdZ/uBqOLcXMoM8zkEOS0k=; b=GIVGu7hgUFBCGMwRd6oJyNmULUN7JrLS8qngIi1UVlHlhfnKGCQS4L4Bi9tGMJMks0 /UJwJqaVVc7kAc16ODdb8s4yC4GXctHGg2leyu5nui0bNar7WBlUa+8t4982HQFEJFJu 6NY26T8IHSk2DVvQD7vzdH72GRY1iEJOFDlGQvUIXwrIdpjMsg1JQB/Bp4Ebk6wjSSZ1 rUmWKnClW3Gfz5zvc+i6F85fqWmIFkMqKoJRHqmH6IUypOeN/mByXKHz7r+nzA07if/P AJmDcj1SB6tB5hWS/HTwxVs4Zl1rScyGqlOiNj30hG4/maonzPmeSgwtKiStyPPXlvWE nPrg== X-Gm-Message-State: AOJu0YwMlr+pFbDUREfMc9TZwmR2UdAkdyN58pIn+3YW/wJEmrk4IV9s MHuW5+iNBAKaxskdkxELbXkLucSh/Rw= X-Google-Smtp-Source: AGHT+IE+zsfgtlSnwKUbhA3YpTNDk+8ltWRJpsjptVOb2ZNmGbe998llTTJanGr4MhlNaUK0xRFQ+Q== X-Received: by 2002:a17:907:26c4:b0:9b2:aa2f:ab69 with SMTP id bp4-20020a17090726c400b009b2aa2fab69mr1731241ejc.30.1698404292890; Fri, 27 Oct 2023 03:58:12 -0700 (PDT) Received: from [192.168.1.104] (84-112-104-25.cable.dynamic.surfer.at. [84.112.104.25]) by smtp.gmail.com with ESMTPSA id ox9-20020a170907100900b009b65b2be80bsm1008909ejb.76.2023.10.27.03.58.12 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Oct 2023 03:58:12 -0700 (PDT) From: epirat07@gmail.com To: FFmpeg development discussions and patches Date: Fri, 27 Oct 2023 12:58:11 +0200 X-Mailer: MailMate (1.14r5937) Message-ID: In-Reply-To: <20231027035941.23491-1-davejohansen@gmail.com> References: <20231027035941.23491-1-davejohansen@gmail.com> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH 1/4] avformat/hlsenc: Add init_program_date_time so start time can be specified X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 27 Oct 2023, at 5:59, Dave Johansen wrote: > --- > doc/muxers.texi | 3 +++ > libavformat/hlsenc.c | 41 +++++++++++++++++++++++++---------------- > 2 files changed, 28 insertions(+), 16 deletions(-) > Thanks for the revised patch! > diff --git a/doc/muxers.texi b/doc/muxers.texi > index f6071484ff..87c19a5cb9 100644 > --- a/doc/muxers.texi > +++ b/doc/muxers.texi > @@ -1086,6 +1086,9 @@ seeking. This flag should be used with the @code{hls_time} option. > @item program_date_time > Generate @code{EXT-X-PROGRAM-DATE-TIME} tags. > > +@item init_program_date_time > +Time to start program date time at. > + Probably would help to mention the expected format here. > @item second_level_segment_index > Makes it possible to use segment indexes as %%d in hls_segment_filename expression > besides date/time values when strftime is on. > diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c > index 4ef84c05c1..5dfff6b2b6 100644 > --- a/libavformat/hlsenc.c > +++ b/libavformat/hlsenc.c > @@ -212,6 +212,8 @@ typedef struct HLSContext { > int64_t recording_time; > int64_t max_seg_size; // every segment file max size > > + char *init_program_date_time; > + > char *baseurl; > char *vtt_format_options_str; > char *subtitle_filename; > @@ -1192,6 +1194,25 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, > return 0; > } > > +static double parse_iso8601(const char *ptr) { > + struct tm program_date_time; > + int y,M,d,h,m,s; > + double ms; > + if (sscanf(ptr, "%d-%d-%dT%d:%d:%d.%lf", &y, &M, &d, &h, &m, &s, &ms) != 7) { > + return -1; > + } > + > + program_date_time.tm_year = y - 1900; > + program_date_time.tm_mon = M - 1; > + program_date_time.tm_mday = d; > + program_date_time.tm_hour = h; > + program_date_time.tm_min = m; > + program_date_time.tm_sec = s; > + program_date_time.tm_isdst = -1; > + > + return mktime(&program_date_time) + (double)(ms / 1000); > +} > + > static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs) > { > HLSContext *hls = s->priv_data; > @@ -1257,24 +1278,11 @@ static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs > } > } > } else if (av_strstart(line, "#EXT-X-PROGRAM-DATE-TIME:", &ptr)) { > - struct tm program_date_time; > - int y,M,d,h,m,s; > - double ms; > - if (sscanf(ptr, "%d-%d-%dT%d:%d:%d.%lf", &y, &M, &d, &h, &m, &s, &ms) != 7) { > + discont_program_date_time = parse_iso8601(ptr); > + if (discont_program_date_time < 0) { > ret = AVERROR_INVALIDDATA; > goto fail; > } > - > - program_date_time.tm_year = y - 1900; > - program_date_time.tm_mon = M - 1; > - program_date_time.tm_mday = d; > - program_date_time.tm_hour = h; > - program_date_time.tm_min = m; > - program_date_time.tm_sec = s; > - program_date_time.tm_isdst = -1; > - > - discont_program_date_time = mktime(&program_date_time); > - discont_program_date_time += (double)(ms / 1000); > } else if (av_strstart(line, "#", NULL)) { > continue; > } else if (line[0]) { > @@ -2867,7 +2875,7 @@ static int hls_init(AVFormatContext *s) > char *p = NULL; > int http_base_proto = ff_is_http_proto(s->url); > int fmp4_init_filename_len = strlen(hls->fmp4_init_filename) + 1; > - double initial_program_date_time = av_gettime() / 1000000.0; > + double initial_program_date_time = hls->init_program_date_time ? parse_iso8601(hls->init_program_date_time) : av_gettime() / 1000000.0; As parse_iso8601 parsing user input can fail, it should properly report the error and fail. Especially given that it does not accept all variations of ISO-8601 date/time IIUC. It might be confusing if the user specifies a time, forgets the milliseconds and it will just silently not use the option at all? > > if (hls->use_localtime) { > pattern = get_default_pattern_localtime_fmt(s); > @@ -3141,6 +3149,7 @@ static const AVOption options[] = { > {"split_by_time", "split the hls segment by time which user set by hls_time", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SPLIT_BY_TIME }, 0, UINT_MAX, E, "flags"}, > {"append_list", "append the new segments into old hls segment list", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_APPEND_LIST }, 0, UINT_MAX, E, "flags"}, > {"program_date_time", "add EXT-X-PROGRAM-DATE-TIME", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_PROGRAM_DATE_TIME }, 0, UINT_MAX, E, "flags"}, > + {"init_program_date_time", "Time to start program date time at", OFFSET(init_program_date_time), AV_OPT_TYPE_STRING, .flags = E}, > {"second_level_segment_index", "include segment index in segment filenames when use_localtime", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SECOND_LEVEL_SEGMENT_INDEX }, 0, UINT_MAX, E, "flags"}, > {"second_level_segment_duration", "include segment duration in segment filenames when use_localtime", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SECOND_LEVEL_SEGMENT_DURATION }, 0, UINT_MAX, E, "flags"}, > {"second_level_segment_size", "include segment size in segment filenames when use_localtime", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SECOND_LEVEL_SEGMENT_SIZE }, 0, UINT_MAX, E, "flags"}, > -- > 2.39.2 (Apple Git-143) > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".