From patchwork Mon Aug 19 21:13:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Berclaz X-Patchwork-Id: 51083 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:a52a:0:b0:48e:c0f8:d0de with SMTP id e10csp161404vqs; Mon, 19 Aug 2024 14:13:46 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVNyilI03sEG3iNHRqXDu9X4UXxs+SzetYfPq3lPjL6kzGq+upQBWIKWQ0GEWeWNNu9LbthoVn4jVZ8a9/r+48M@gmail.com X-Google-Smtp-Source: AGHT+IHoGNzvNxfO1RQFc7vaLeJJ1pzrnC35ekzUdoQZ5VM9DbOuB0+WWQKpkmtVBBiL+ttiNnGd X-Received: by 2002:a17:906:f59b:b0:a6f:24fe:f2a7 with SMTP id a640c23a62f3a-a83928a9cfemr862625266b.10.1724102026692; Mon, 19 Aug 2024 14:13:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1724102026; cv=none; d=google.com; s=arc-20160816; b=oa01kjOOG5LqJ++y9HpEbhwCIf6O6QJzwEYccJQ1dSzic05KKB9z/9Y6ynUUDWML9Y Ri/Qqq1GOraW0VNtR1gz7DZ4VNtiFLZoesj0e5KaDM7zMoYasBFSnL5O6KwctIkXwtZ2 UK2oLOijqO25k76mSythMJoVztk/9ajDukiN2uq9uF8+eiNrqEzDHze0c821aEURabTv ufQRhO/awfDwuPrmtheI0Qgi8Bb9/st5z4mLvnVtk5052X11gP0QDyl03Fxgcdb0EMym TPEwjaeiNvSVJGmNq47qMeZ7lo7+PcbjuZPFX1N4ZraGUpNmTqMC5rP3vBOuEmgyG7lx kslw== 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:message-id:date:to :delivered-to; bh=wiOtnPlymDha+YHgS+HRMQ6WX2L6UnY+VxM8BHfG0Og=; fh=9rpMnfKXTP/u4Vh8uMYwMZ/otx7sycm5KQadsXAVDeQ=; b=DqcbkeDQLO3LRzbvihDZVD7Tq+JGKqTo86L3o6BdFi+mkcM4uiD3V+12jfXmwjhNQP 3ccvvCapXQV9VK7rZXc7R/bRmAV1sdldp4K6IazkaOk8Qo+S01hwLSVQ22mjQMqj4xCg 0Xf02lD48/E9m+qI7/+7FH1T1GYlxUY2/8KT1cNDq5XLmfp8i4C2VMIP99y8+CLnvQ1U jFXTEMKTpp+ILtToNer2OwIda91QZP7U3lsz0+/J9WodRNjgZds0UH7ccaMRQ30bsrGn mmxwNApMVqZMAVPUyGlcADWKwl0r12wk0gjyKWPsXF8wDXqYg0vT9SpyU5QAubeJe68r D8VA==; 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-a83838c8738si651444966b.194.2024.08.19.14.13.46; Mon, 19 Aug 2024 14:13:46 -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 89B0568DCCD; Tue, 20 Aug 2024 00:13:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3783C68DCCD for ; Tue, 20 Aug 2024 00:13:36 +0300 (EEST) Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-202146e9538so26654635ad.3 for ; Mon, 19 Aug 2024 14:13:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724102014; x=1724706814; 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=0ZMP9HrKNOhOjxAfyQXllGYr738wGGTjTx0aVy50rvo=; b=MucLps4V36KBvlOYVoWBcY0RIKnaQGpvIIW2+t+CWqHl7jggC4k/jqkloBa45ITGr9 ag3tiXskMHJAiD7KQkOREMrUy1W8y9cF6HiqLuc2oFo/womhHiJtKF9EMMbjGLiNlnbQ sZFyA+PPIIWHdrGxZ1xV/R+KOu6HRrZePOg8a7r2/ZpVUx4x/hPHFcyCIcQMcZzgH54M NtGcMB1CTstX1BQ1Car4DHyahyKjqlHw+FBZN7wyv7+a02Xx2BiB0oFCxLD5ibGwBlBV IejZf92tOLp6jubjBaEd7i1nlgkAKCn1mrgW7muvXjJT+vp558Q9b8NEkwmGOgg+oc9w vHoQ== X-Gm-Message-State: AOJu0YxZ2DhA5HBxTOBG2QV6B9W0A7+TyNwyZJtsc+ksm0YorK3HMAD/ YK2aPH3G1vIJxLmGfQzQ+9602q7sjX0vMb4soRLrs4YOfnjdJTQtddFdxzu24Cne/eL7pG4ZHfM tXRByfnsRzdg/HhcmWXA1SS6TtKZ+jN5BaN1pCnSv191Z1q808rUy56kmisJDITcsPF8CXeuQZs rOV6cIsb1O+qi14VHRqQaalJpoj/JJKAmj13Lz9ayn2oDVJURhLxBmLPVB53pCOmX9TETDeFc04 rc+imFaZrcphPVIvCua+Yuyf5IL9ICMK18= X-Received: by 2002:a17:902:f544:b0:1f9:d0da:5b2f with SMTP id d9443c01a7336-20203ed8c92mr173367725ad.39.1724102014127; Mon, 19 Aug 2024 14:13:34 -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 d9443c01a7336-201f038e4e6sm66551455ad.238.2024.08.19.14.13.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Aug 2024 14:13:33 -0700 (PDT) To: ffmpeg-devel@ffmpeg.org Date: Mon, 19 Aug 2024 14:13:30 -0700 Message-ID: <20240819211330.652685-1-jerome@percipient.ai> X-Mailer: git-send-email 2.43.0 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] avformat/dashenc: add option to set live DASH stream start time 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: /cs0FNrPQpUG When encoding a DASH stream in live ("dynamic") mode without timeline, the field "availabilityStartTime" is set to the system time. The new options allows the libavformat user to pass a specific time to be used instead of the system time. --- libavformat/dashenc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 },