From patchwork Wed Apr 4 08:36:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dixit, Vishwanath" X-Patchwork-Id: 8317 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp4618754jad; Wed, 4 Apr 2018 01:37:09 -0700 (PDT) X-Google-Smtp-Source: AIpwx49P117APi7KyV8lHqKT94g6btDo+Jqo/U2nlrbSyLcdcNWHxX5Avld+v5L1YvVRASAzc3PM X-Received: by 10.223.171.26 with SMTP id q26mr12645096wrc.183.1522831029001; Wed, 04 Apr 2018 01:37:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522831028; cv=none; d=google.com; s=arc-20160816; b=QIEObqZzUZMvTLnzJmSnDG+jvuaucgTSNWDgbWd3OmlHCwOAmQmSQr8zTCLBcboas2 bNFGY1CwZI7XMNy4K9CSzwykcGVYwYfED/ivPmWcWn2RJE61naV+i9BYd5Aa9eRxYJse 3MraK//8ExZo8J+ynAI8HotjMLJZBnV6MT+x8hZGN8GxIKE8XtPTjd3pDkWlQyMnH1Cf lHXPEU45LsM6reDFMRXzmGa+47OWofuRoHjY0TZuBvmbMCsv6nSYiKhMBp2z9Noa/PA1 CnjwFWUZtiRFsNXNhkbkyUDKL9+wXgtmw4BkQvhL0bH3OmRDeZThCk/gmZQRnn81lRz5 d48g== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=3bjo4zadpJz1gCXj5YxdQ81k/pS5oGiQsXUo9u+Pngg=; b=KnXlv9jussJER1f7ERCF9K3hFZPzoK6+6NGVnum2r7WbWzmixZMZfOJAVWmra00J4Z 3De/C7xLG4sQYhqp0URPzTe+pUvKNxyxZd4+Wf56K2H/nvNw41NpujwG7dPd2QFZxkG9 KAYL55bjE+JULnq4H141q/eewEKVrfHVQvEzdow9Q6T5UFxF3NqIDSmWM4jwQFqzQZwJ SJDrSKZkzw0Y4MR9r3lWigSh1PjjpA6gk+4qHIZ2b8fv9+HLpCwcMUqNJJpwvMmw9sjd kG+vX6EZ1Fi3PlMNtKT0s24Z5RMJ96jn/u5xZuqYHV50fxWjQ+FWhlbtXvFK6bYwrBq7 pW1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=u3Q+CmSi; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f19si1857844wmf.227.2018.04.04.01.37.08; Wed, 04 Apr 2018 01:37:08 -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=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=u3Q+CmSi; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E360F6898BF; Wed, 4 Apr 2018 11:36:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a1i318.smtp2go.com (a1i318.smtp2go.com [43.228.185.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 09520680C18 for ; Wed, 4 Apr 2018 11:36:38 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=m78bu0.a1-4.dyn; x=1522831924; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe; bh=aUU6gFLpN8eXgG+VGM5WKjRjMWAKbBhedGzH4Z6LyJI=; b=u3Q+CmSi qOLs2N3Z1930I/6oPx0pK9xN0xWkPoyTifzZEHRlPgBceocd3PrbmlgXwl2JfxrjaBsI0QCZz+PUz UnYyaQpzhhy3Pu6Ixib5nKJAR7vDU/Vxzh5TvoF9owBWcUheRTGhTI2JE63nlMOVeEklqa0GnLcSB CVUCvxbfbv0bEVOSexjtoHwXZSplwXqAmXMobP2vfCA7f5veD9LMmVFPhUdq4Ha9Qs8Huw+GpMLTG Xc/tTqnxcc+ppZM9vBNx+Tzv478XEVf/e9Lot3R3k8HDZrSW3VbpfAjAu5h0J52RiR1vd/rMISKfc kEtRYg/BeNpA21LHAKwrAxpHqA==; From: vdixit@akamai.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 4 Apr 2018 14:06:51 +0530 Message-Id: <1522831011-6912-1-git-send-email-vdixit@akamai.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1521782773-25778-1-git-send-email-vdixit@akamai.com> References: <1521782773-25778-1-git-send-email-vdixit@akamai.com> X-Smtpcorp-Track: 1f3dIZ4baUXFuj.xu6Xe_Hzu Feedback-ID: 337386m:337386asVRLGB:337386sAvW8lMa9T:SMTPCORP X-Report-Abuse: Please forward a copy of this message, including all headers, to Subject: [FFmpeg-devel] [PATCH v2 02/11] avformat/dashenc: segmentation at the configured segment duration rate 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: Vishwanath Dixit MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Vishwanath Dixit When use_template is enabled and use_timeline is disabled, typically it is required to generate the segments at the configured segment duration rate on an average. This commit is particularly needed to handle the segmentation when video frame rates are fractional like 29.97 or 59.94 fps. --- doc/muxers.texi | 5 ++++- libavformat/dashenc.c | 13 +++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index a5358e3..9e8b8a4 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -228,7 +228,10 @@ ffmpeg -re -i -map 0 -map 0 -c:a libfdk_aac -c:v libx264 @item -min_seg_duration @var{microseconds} Set the segment length in microseconds (will be deprecated, use @var{seg_duration} instead). @item -seg_duration @var{duration} -Set the segment length in seconds (fractional value can be set). +Set the segment length in seconds (fractional value can be set). The value is +treated as average segment duration when @var{use_template} is enabled and +@var{use_timeline} is disabled and as minimum segment duration for all the other +use cases. @item -window_size @var{size} Set the maximum number of segments kept in the manifest. @item -extra_window_size @var{size} diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 8ef8627..54ccf30 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -1263,6 +1263,7 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) DASHContext *c = s->priv_data; AVStream *st = s->streams[pkt->stream_index]; OutputStream *os = &c->streams[pkt->stream_index]; + int64_t seg_end_duration, elapsed_duration; int ret; ret = update_stream_extradata(s, os, st->codecpar); @@ -1290,10 +1291,18 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) if (os->first_pts == AV_NOPTS_VALUE) os->first_pts = pkt->pts; + if (c->use_template && !c->use_timeline) { + elapsed_duration = pkt->pts - os->first_pts; + seg_end_duration = (int64_t) os->segment_index * c->seg_duration; + } else { + elapsed_duration = pkt->pts - os->start_pts; + seg_end_duration = c->seg_duration; + } + if ((!c->has_video || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) && pkt->flags & AV_PKT_FLAG_KEY && os->packets_written && - av_compare_ts(pkt->pts - os->start_pts, st->time_base, - c->seg_duration, AV_TIME_BASE_Q) >= 0) { + av_compare_ts(elapsed_duration, st->time_base, + seg_end_duration, AV_TIME_BASE_Q) >= 0) { int64_t prev_duration = c->last_duration; c->last_duration = av_rescale_q(pkt->pts - os->start_pts,