From patchwork Fri Aug 16 22:28:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Berclaz X-Patchwork-Id: 51041 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b6ca:0:b0:48e:c0f8:d0de with SMTP id s10csp716425vqj; Fri, 16 Aug 2024 15:29:27 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWZgEIQ1ftlrDBx8Lfm6nf3pZJcxM+MS0k0dPTJgqpZOEgMtc71ukN8WS2YEoQpkQMjJAuZdLr6wHaNEv4mdRFQPHg1dH9x7Ajdmg== X-Google-Smtp-Source: AGHT+IEGeH5CrpCVv6t5qmfrrGR4IWqIUtLWoDyEO52Y3Yw57s72bUJCabRvkld17rMmPA8I5k6a X-Received: by 2002:a05:651c:1502:b0:2ef:2f9e:dd19 with SMTP id 38308e7fff4ca-2f3be573087mr38924751fa.2.1723847367087; Fri, 16 Aug 2024 15:29:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1723847367; cv=none; d=google.com; s=arc-20160816; b=mAiVjSs7O0Y7A2TKqi1mSd2EnQBcfVPYoPtuLuwTFODk6o5p4ZxkXnEeKcCYxZe9nz yC08QJBeF3PHzz1le3shdx09I5eszR7HkSf8nMdv18JPfX8CVDMTctFq5oDQY2b8UDPU VxK2wUz45yjt+8o/Nvi71G3H4z8LHxrPaxas2Q8wRE7IPEIUSEWGDc8Pa7Skm/5o/Vw4 Fu+9aZD7lQWAsMknYKOr8j+6+JfgxqymeIusR/NjA+srszKLkjmUDdxu+ED1FEsKcj0X Z+WppwA7JodH4R37lBZZNId4evC+moPc+mKaNmXiFb+IR18Fyrlvql8PfbyU+/gaC6yk Mq7g== 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:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=X7cZ9qlGcehlf3zXZv5F3tkHchF5g+EwLgJw+dpakss=; fh=9rpMnfKXTP/u4Vh8uMYwMZ/otx7sycm5KQadsXAVDeQ=; b=DwYmi90q0iFVPEo0QTGCjRNCKCjnB7Fk1/MKomH/iWMJ+C3jkmy9K2Z6lyOQ13wUvI kaaBI6n8P0EyGNe/VgwYHODldAmTYdWcHxUDzs527Oyza+gSiDRM5qzMgbt8mdWVBsCv OaJ69vwnnTohxV5t0dOLsEYP11dus15ZU7xcDFMKzCqhYfn/lER32/wR86CxCXAPR7Mw mhKEHGiY8Mtk6IlO3yEx69lvu0jzfkbY1o7HkGKZnl/gef+o7QfQzR9d620tfMg7lRkH O15StnLog3WoQtMYCnZ3SNnmLNWOZDnHFHxjsLEBo8+XQ98KoTwcGXnmlc0DNF7pkuzF UWhQ==; dara=google.com 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 a640c23a62f3a-a838394a7d2si251372966b.659.2024.08.16.15.29.26; Fri, 16 Aug 2024 15:29:27 -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 D0F0A68DC93; Sat, 17 Aug 2024 01:29:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B7C8868DC2C for ; Sat, 17 Aug 2024 01:29:07 +0300 (EEST) Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-6bce380eb96so1642009a12.0 for ; Fri, 16 Aug 2024 15:29:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723847346; x=1724452146; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Aau1LmfKyQhjIv15TNcq9tm/7GLbfTAZ1GWbHFK21cg=; b=hpqHjJk5S73KznVav3boCFFMQ6kTMimGUx0K0c1rpw10bEp3kpEa1WfbBnQIj3NVxw 3N4IufhrFu391eL2QoIAbDyM7KpBQCIo3XkKxtM8m1vV/si3MpCxbPF2PTq+iFM3IRef 6G+HWG/qQ8ly0+TTsiqZK4ootk4R68SG+lcYiXypXOg0WguH56L9a4LvTIe+MZQrOoWa 4vX4cQWngnCDaK/hxfYqZazv4GH2DmCUYyfMBhiZzaznn0wj7LJqXWooSH+bXWxNyNGV fS7jN/wabZhX817xqYDSYpB1OXXL0wN6AiUBxFgPN6MOx1biwg0MLnwF+pcCqlIYGky+ HRdA== X-Gm-Message-State: AOJu0YyHGwb/d+cNm9WjC3D3ZFNikVE8BCwotIePZT0UhhAg7bLdTTMB linl3FYKFluIBetsl894qXqRFxVBHO3M97/S79k/Xt98XqLVPwe6UNGmxZVAM4FEKXW5anhMjbb +JpBWFphKSUlgS+62OUxWRwmjWyLifxOGo+1mrxxRwNT8hvJnvdnb+S4L4lIY1BsBnE2ucTaz/j FTFesKKSYIC6B6QH0VqpkDTiX7buaWpmW76Mm3sk9F+ytuZ1ekjMcs4H1xH5A0X1MqajjkX/z1e Am4V8uZfXCvqoEfnyugjf8cxN03N5t84DE= X-Received: by 2002:a05:6a20:d490:b0:1c2:8dd5:71d9 with SMTP id adf61e73a8af0-1c904f6bab9mr5050813637.4.1723847345366; Fri, 16 Aug 2024 15:29:05 -0700 (PDT) Received: from jrb-desktop.mirage.percipient.ai (72-164-150-194.dia.static.qwest.net. [72.164.150.194]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d3c3e5b9fdsm4640330a91.40.2024.08.16.15.29.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Aug 2024 15:29:05 -0700 (PDT) To: ffmpeg-devel@ffmpeg.org Date: Fri, 16 Aug 2024 15:28:49 -0700 Message-ID: <20240816222849.603644-2-jerome@percipient.ai> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240816222849.603644-1-jerome@percipient.ai> References: <20240816222849.603644-1-jerome@percipient.ai> MIME-Version: 1.0 X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: donwilliamspercipientai,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: donwilliamspercipientai,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 Subject: [FFmpeg-devel] [PATCH 1/1] Add option to set DASH stream start time, instead of relying on system clock 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: , X-Patchwork-Original-From: Jerome Berclaz via ffmpeg-devel From: Jerome Berclaz Reply-To: FFmpeg development discussions and patches Cc: Jerome Berclaz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9UwQ7OO3FfzT --- libavformat/dashenc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) --- 2.43.0 diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index d4a6fe0304..e586e934cb 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -204,6 +204,7 @@ typedef struct DASHContext { AVRational min_playback_rate; AVRational max_playback_rate; int64_t update_period; + int64_t start_time_ms; } DASHContext; static const struct codec_string { @@ -2108,7 +2109,12 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) os->last_pts = pkt->pts; if (!c->availability_start_time[0]) { - int64_t start_time_us = av_gettime(); + int64_t start_time_us; + if (c->start_time_ms) { + start_time_us = c->start_time_ms * 1000; + } else { + start_time_us = av_gettime(); + } c->start_time_s = start_time_us / 1000000; format_date(c->availability_start_time, sizeof(c->availability_start_time), start_time_us); @@ -2393,6 +2399,7 @@ static const AVOption options[] = { { "seg_duration", "segment duration (in seconds, fractional value can be set)", OFFSET(seg_duration), AV_OPT_TYPE_DURATION, { .i64 = 5000000 }, 0, INT_MAX, E }, { "single_file", "Store all segments in one file, accessed using byte ranges", OFFSET(single_file), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E }, { "single_file_name", "DASH-templated name to be used for baseURL. Implies storing all segments in one file, accessed using byte ranges", OFFSET(single_file_name), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, E }, + { "start_time_ms", "Stream start time in epoch milliseconds", OFFSET(start_time_ms), AV_OPT_TYPE_INT64, {.i64 = 0}, 0, UINT64_MAX, E, .unit = "ms"}, { "streaming", "Enable/Disable streaming mode of output. Each frame will be moof fragment", OFFSET(streaming), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E }, { "target_latency", "Set desired target latency for Low-latency dash", OFFSET(target_latency), AV_OPT_TYPE_DURATION, { .i64 = 0 }, 0, INT_MAX, E }, { "timeout", "set timeout for socket I/O operations", OFFSET(timeout), AV_OPT_TYPE_DURATION, { .i64 = -1 }, -1, INT_MAX, .flags = E },