From patchwork Wed Apr 11 07:00:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dixit, Vishwanath" X-Patchwork-Id: 8388 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp368211jad; Wed, 11 Apr 2018 00:00:37 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+r8CtxOzG3TC8MqOPBgV7LZrGNoEIoq+puplcS+y8nmdNRMoVaSpVaC5NICSrd0U+joxUB X-Received: by 10.223.157.140 with SMTP id p12mr2353783wre.198.1523430037821; Wed, 11 Apr 2018 00:00:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523430037; cv=none; d=google.com; s=arc-20160816; b=aaOWsBJBI4lMYfKA9vbYqJrcrNM7CylvnFOlQgKsvN1svkTDCYZW9PZSiUbSbpzbrI mYPNK9m6weywtb4ik75HregmBE6yLpjLibyHdRhB64ZE8k0tFV2Y7TH4pIoSqkSD1GzB VhVN72vyObLVQYZTnRvy0HWgk2IkSbjO44NU6LMvNcdtjAzJPS3KfmiA/oV+LW4S45M4 fpvUF7ZfOYGNQtWq0TQ+JUeg/GZVApYswIPp1T7XTy6PoByrj6NH+utCwnQNqBb2ZtFS u0Rpx7X5xVYBkOyB2qa3OOZoEj0KAp1bP+ocTcmBamgWg+AHOyiQXzQClvYJFVIPim8m xvcA== 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=f2OmGi11sQ33WM4jJEfvyYv/Mv/tFCmdstfzqpQT34k=; b=tiz0vwr/idVXZHeJS2ECkQkU72sD30uZOsbJZ5w6svBniQtbq5cfPvkQOAZBi5RRFX fAL7ZvyUT/QikMN3OZ43DjP3JBL6ZNInYIKHsQZD8HTpAB55n3oSkPOG7i74ppzKXL0r +XZWZxLYBcteuDXDwX7kTx5ONjVodgiujxEG+UY9+HxJAYgaCa0+e3L83ld+Tk9MzX+0 nqg+FbLaYcb4pY5Sebxl0q2Ws4EdIZiJichQ5SFDhM1RBgbzc1kJ68UtteV6soGLGx+e hzEebwjCTZgU1K7FxGSBahKAqNv3qG2G+QchYOA/1LyG/LR8ltfVjNXesxyVrmPADfJR wgVA== 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=avJWrMfc; 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 o88si340466wrb.312.2018.04.11.00.00.37; Wed, 11 Apr 2018 00:00:37 -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=avJWrMfc; 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 46CCE689B7C; Wed, 11 Apr 2018 10:00:03 +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 366FB689F57 for ; Wed, 11 Apr 2018 10:00:01 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=m78bu0.a1-4.dyn; x=1523430925; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe; bh=2VdtZT1WSHfc98pkRucmY0dSNpNzH0e0rNqVz41Wbmc=; b=avJWrMfc VKPRUz9EJ978irVEpirvK5dES0eOQnd8718b2lEMRlW1DXJLztjr1RK6xIvueb78xhGNgofVwSuT9 NN1sc8OzNFJbaa6h5TT5RYIe5NZmpv0WvMjKHUrIJ5C09XcCSduCKfhPqe6PBmjPiuVzNTA0QgStt k34H2uyen8oEJTEt079Ivvo+KIhQLLVvDf3D9bo5oNOwQGxLvafB8O+DqWLJklClESXbRTw/78dGe 36m5Nd0StkmkCMrNDJg9wPLfY0vIhKnh9oNRYsH2s1N243L6OvhqKYXFnD1ZlvHAmQuVyiBfhiKH1 WMd9kjKQEoowoDrw3H6cVae5tA==; From: vdixit@akamai.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 11 Apr 2018 12:30:18 +0530 Message-Id: <1523430018-16855-1-git-send-email-vdixit@akamai.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1522831011-6912-1-git-send-email-vdixit@akamai.com> References: <1522831011-6912-1-git-send-email-vdixit@akamai.com> X-Smtpcorp-Track: 1f69MyDIIhlIm1.zfKHoLk0m Feedback-ID: 337386m:337386asVRLGB:337386sAtzPoZP_w:SMTPCORP X-Report-Abuse: Please forward a copy of this message, including all headers, to Subject: [FFmpeg-devel] [PATCH v3 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 8dbfede..e1b6666 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} This is a deprecated option to set the segment length in microseconds, 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 7169e11..ad52730 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -1267,6 +1267,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); @@ -1294,10 +1295,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,