From patchwork Tue Oct 17 15:51:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Johansen X-Patchwork-Id: 44284 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3e0b:b0:15d:8365:d4b8 with SMTP id bk11csp462864pzc; Tue, 17 Oct 2023 08:51:48 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEtv32Leq6DF3YmOXosHvbsYXZBN6Pj+Xt7dS0fGK1fTCcIqq0ojHj1wWyA9f55TVo6zz8T X-Received: by 2002:a17:907:3207:b0:9be:e79e:c75c with SMTP id xg7-20020a170907320700b009bee79ec75cmr1925570ejb.21.1697557908053; Tue, 17 Oct 2023 08:51:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697557908; cv=none; d=google.com; s=arc-20160816; b=J4VnrqRYqtsV/lHXm1ooY96UPi1aSICokL2c22a39eAULDNhi9Cu18s/jyKDomVtft ARMv70Y75NP53PNr/3GTSt+Hwqet7QswM8nAQkIr3ktLOl8OTSggGVZGOEMEJdUVS2BN wn8DOuRWQGhlMUs1NtK2kI2Tv18v0hc480CdnSJ6lUNuZJaqRfA8UjdlOhqr2nMwxviq Qy3q0Df8JGljcBStdINqj6rA6Xk0wego6hed3Yo6geHtCt04VvvkTOkL67OQO2c+hbXa huCigP4LhWyDXJA8KnGXqCSeu/iuGFC02xBKKvh3nzeHuRg8Y8wB9/R7w+kmA/C6C1XO TLTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=xTXSCVGLBN2F8H4mfAIwgLHgVs1fkGGlL8a3U6HErp4=; fh=BNczk7MtTFTHa4uMdKY29AxmcfAa404kNGyDf0xbsP0=; b=DH4CAeoRsfmMstTurXa0rcvSUoZw/CcUn/XWv+gbkKciAQl1EtDV/HtwBs2IDUM4IL ImDbFDg4VpHWQZ5G+hZAEf31K3VqyrEfMTsyXsVyuLGOKi4fCtac8Kmas+P2rdVCe5XE bJFJ/sDRUuyux+XC+F69O/DMa9knzeB1Wk6sLR+ne0ZHMFInWZY22ZVseW3sEgBp7TcF UJYS/oOjFDtMv7676R1zgA98tjtcfR7Qt5IT8UAnXvzB4Vk32xg1Ln6cXwgQuVmAs+xk DwonDYD2hm5HdvaBMETptIpvKWJju3FqUP+bbNUyuECB8rzclFxmAipC5lMxVH7kWztg l7gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=TAG0dfZG; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e22-20020a1709061e9600b009b2f6b330b9si19343ejj.353.2023.10.17.08.51.45; Tue, 17 Oct 2023 08:51:48 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=TAG0dfZG; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 18C1968C95D; Tue, 17 Oct 2023 18:51:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 61CD968C95D for ; Tue, 17 Oct 2023 18:51:35 +0300 (EEST) Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-6bd73395bceso2073997b3a.0 for ; Tue, 17 Oct 2023 08:51:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1697557892; x=1698162692; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=fKO/HMW00dH0pyfYYvCsIQa4tE3dYsIuyKYhDYdC3YE=; b=TAG0dfZGGmcWJ1VXU4ifa3uEXvhlMRpm+W4rPbGCJ6CBhalZ72MyvS8KykHrgmRZXc c6S/2Ea6EzwUGJQgomeiJ+WHNLRDazveuYVsAsUHB+2Ud6BMZX5+JeI9nr58e3bLthiM zinHelD7NaRxCO08mcg6Ytl1JAutT/w+0uwyA+W16sb50DF8BVegOLWS7ufYrQofWoAt pGelXYLHLaRvOk/hSStxuFDUy9swEcp5yrHG6/OqanhJkireYzPY4thJ2lziZc56UOrn 7XeOJbMDkUnooV9HCfZMDtKb7YGRqH/O5NsegnjNPPmzXe24/c706uHm71MZguEYhSTR 8a8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697557892; x=1698162692; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fKO/HMW00dH0pyfYYvCsIQa4tE3dYsIuyKYhDYdC3YE=; b=PWtP9n7sUyBbJNZpL48UoB9RvDRfdzq1GDYrqoEyxg1fpTbfiDdViA0ySXwfk9Pp91 ll/9pWwnkvMImdNg0zbs4e+DcUzMITP6qnSaDbkr7HkTcuHxJZ310uPQulMmvGo8uznZ 2d7AWJ50FTfYIcNwssBfRFbMBGci3sRHxEcIqvirLs3jyZNWMvXQL7mmUM+kOcvepcmG 7AySA6RKGTmYTL321qg4RZzkp1DuBxA/HqRZtIbKcApYbPyKSAy/hmoSKI65rSNXWiIk u2R/HgqK3e+JO1OqyPHp5DE7tUtvgMRj5dIDtPkReEXcHDI8hwRxmrRMDa/N3BH/saMb ooTw== X-Gm-Message-State: AOJu0YxLkyt51z5543R8TCvZGmnWWZmus1E8aIen+KSrqMWgnXDFi4mC 5A5eL1K2BYmtksMRZCyYApUCwl7k2YTZJA== X-Received: by 2002:a05:6a00:290f:b0:68f:c1e0:a2c4 with SMTP id cg15-20020a056a00290f00b0068fc1e0a2c4mr3473675pfb.3.1697557892207; Tue, 17 Oct 2023 08:51:32 -0700 (PDT) Received: from localhost.localdomain ([2605:a601:a98f:6200:d463:8d09:8b65:390d]) by smtp.gmail.com with ESMTPSA id w17-20020aa79a11000000b006930db1e6cfsm1609789pfj.62.2023.10.17.08.51.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Oct 2023 08:51:31 -0700 (PDT) From: Dave Johansen To: ffmpeg-devel@ffmpeg.org Date: Tue, 17 Oct 2023 09:51:00 -0600 Message-Id: <20231017155100.43908-1-davejohansen@gmail.com> X-Mailer: git-send-email 2.39.2 (Apple Git-143) MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] 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 Cc: Dave Johansen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uqd8tUMQx58l --- doc/muxers.texi | 3 +++ libavformat/hlsenc.c | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) 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. + @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..474322cc21 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -28,6 +28,8 @@ #include #endif +#include "float.h" + #include "libavutil/avassert.h" #include "libavutil/mathematics.h" #include "libavutil/avstring.h" @@ -212,6 +214,8 @@ typedef struct HLSContext { int64_t recording_time; int64_t max_seg_size; // every segment file max size + double init_program_date_time; + char *baseurl; char *vtt_format_options_str; char *subtitle_filename; @@ -2867,7 +2871,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 ? hls->init_program_date_time : av_gettime() / 1000000.0; if (hls->use_localtime) { pattern = get_default_pattern_localtime_fmt(s); @@ -3141,6 +3145,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_DOUBLE, {.dbl = 0 }, 0, DBL_MAX, 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"},