From patchwork Fri Mar 23 05:27:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dixit, Vishwanath" X-Patchwork-Id: 8118 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp19551jad; Thu, 22 Mar 2018 22:27:20 -0700 (PDT) X-Google-Smtp-Source: AG47ELulR+1H00ihmdolkys2vBvzyKrTCubDcPtMGsV7T+CvkhKJ6iXDHapKGgfpFNytdoTcRnwG X-Received: by 10.28.191.218 with SMTP id o87mr6343711wmi.30.1521782840422; Thu, 22 Mar 2018 22:27:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521782840; cv=none; d=google.com; s=arc-20160816; b=LR4BcDU4rA66AgjTAvmIEXfvS02JxXjTHaPV0uoKZ/iNFVUKw22PZeTIby12Q9LFB5 U7t7MFcQWGTSn5ZqIWUiYEH57COoMyhprleEb02uaY7KaUwN2HQIfd3Di3KYO2yI9XUk rrYyq1INE/buAPwNUQq0wcxAbmbIZgllOlPA9ZJzqvkFjp4Q/9YaxOP+8aeCLncTYnjY 9g10UHTaQfCHv5fIWn8fmIf7KWqU3fsv0gSWuLnDM58MH7yTtyT+29hTfGHLEiSlOB4p PAH6Lxj8xpM309TOkKY9aj/UzgyAfMl7H7vI9Xln+Yhq88ckAMU+/iCeCqPpQNwjDRsw YAsw== 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:message-id:date:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=x0mrHnGL1kENLuuOSFhsZSYvh1psva6fD8WSbHosC+4=; b=sr7rowzwSgmWPPhZvrcsfN2EUyMHA/csU1MN/3uRJNciiPfvuq3t+y6bC6a9uesPar LNtne2fYjxwnpYCIzCgCEf3uNDEmQLHRL/3pH6dA9bW+IAoH0HG4mife15FrkEI/0owZ JiFZP98KLXWeM79FIrD7/1upRr0QRVOTEnbMeFvfGRhEq6Wqj5VOFGAOIm43IaRQQnyK +AYjWqPx4RfLUKX4BkBQMksf0EjJVBW+4HdRCWdY9+z9QZz21VTH+8fKAJVbDIpNPw/f 5FhNmmjUZaFz0h1+F3H7cGzk/VY/CJyEcXXSEL9spXzLbvs1afCstSiHXlxq24/xHgr3 eIdA== 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=bDlM+z46; 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 u69si6290251wrc.186.2018.03.22.22.27.20; Thu, 22 Mar 2018 22:27:20 -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=bDlM+z46; 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 B0F296898B2; Fri, 23 Mar 2018 07:27:02 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a2i831.smtp2go.com (a2i831.smtp2go.com [103.47.207.63]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9B0E86803BD for ; Fri, 23 Mar 2018 07:27:01 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=m78bu0.a1-4.dyn; x=1521783737; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe; bh=jMV3HicphnaAzOZMW3nbI/y8ckAU433U6Wvzgxb15vo=; b=bDlM+z46 pY9Kg6mXR7z2TL0EFInM/eu5afU6dP8cymts+r0gCDDr8PFc8slJBGXvOsogABPz3wQ6Nxu63R1mT sebtXXQ5Pg0VagdwjgyqJr8a33zELIpaSIDbm5hXu4ltiRksH2dHWEMgbqRBUoTJepb6Ch8vtTd6l YU3O81xRQ/674weyzmfii9rSZSNkHj5uxIAcNBn1t5VA4yRsbR1ij+5xV4uQI1gH36EEyXurnzwGU 1wqpHuQuhQQyMSamyAlXdMbEhTb9kVaigXdOiLgj+ByzWYHHGnV1GXvp32swFr6Q/m670yHcHmGxf w0m02n/30zC5WdA3a5Aao/0HWQ==; From: vdixit@akamai.com To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Mar 2018 10:57:05 +0530 Message-Id: <1521782825-26685-1-git-send-email-vdixit@akamai.com> X-Mailer: git-send-email 1.9.1 X-Smtpcorp-Track: 1-zFEORyIejdK6.tNjx6Nr58 Feedback-ID: 337386m:337386asVRLGB:337386szrcBNk4AA:SMTPCORP X-Report-Abuse: Please forward a copy of this message, including all headers, to Subject: [FFmpeg-devel] [PATCH 06/11] avformat/dashenc: addition of @availabilityTimeOffset in MPD 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 availability time of Nth segment = availabilityStartTime + (N*segment duration) - availabilityTimeOffset. This field helps to reduce the latency by about a segment duration in streaming mode. --- libavformat/dashenc.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index b62cb3e..d20bdba 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -85,6 +85,7 @@ typedef struct OutputStream { char filename[1024]; char full_path[1024]; char temp_path[1024]; + int64_t chunk_duration; } OutputStream; typedef struct DASHContext { @@ -343,8 +344,12 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, AVFormatCont if (c->use_template) { int timescale = c->use_timeline ? os->ctx->streams[0]->time_base.den : AV_TIME_BASE; avio_printf(out, "\t\t\t\tuse_timeline) + if (!c->use_timeline) { avio_printf(out, "duration=\"%d\" ", c->seg_duration); + if (c->streaming && os->chunk_duration) + avio_printf(out, "availabilityTimeOffset=\"%.3f\" ", + ((double) c->seg_duration - os->chunk_duration) / AV_TIME_BASE); + } avio_printf(out, "initialization=\"%s\" media=\"%s\" startNumber=\"%d\">\n", c->init_seg_name, c->media_seg_name, c->use_timeline ? start_number : 1); if (c->use_timeline) { int64_t cur_time = 0; @@ -1283,6 +1288,10 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) format_date_now(c->availability_start_time, sizeof(c->availability_start_time)); + if (!os->chunk_duration && pkt->duration) + os->chunk_duration = av_rescale_q(pkt->duration, st->time_base, + AV_TIME_BASE_Q); + 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;