From patchwork Mon Sep 5 10:47:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ligverd Haer X-Patchwork-Id: 424 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp37236vsd; Mon, 5 Sep 2016 03:50:43 -0700 (PDT) X-Received: by 10.194.79.198 with SMTP id l6mr30628431wjx.84.1473072643580; Mon, 05 Sep 2016 03:50:43 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id bh1si24272146wjb.229.2016.09.05.03.50.42; Mon, 05 Sep 2016 03:50:43 -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 3B021689F81; Mon, 5 Sep 2016 13:50:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.kursktelecom.ru (mail.kursktelecom.ru [77.241.16.8]) by ffbox0-bg.mplayerhq.hu (Postfix) with SMTP id DBF91689F42 for ; Mon, 5 Sep 2016 13:50:25 +0300 (EEST) Received: (qmail 30585 invoked by uid 89); 5 Sep 2016 13:47:35 +0300 Received: by simscan 1.1.0 ppid: 30558, pid: 30568, t: 1.5210s scanners: regex: 1.1.0 attach: 1.1.0 clamav: 0.88.2/m:38/d:1452 spam: 3.1.1 X-Spam-Checker-Version: SpamAssassin 3.1.1 (2006-03-10) on mail.kursktelecom.ru X-Spam-Level: X-Spam-Status: No, score=-0.2 required=5.0 tests=ALL_TRUSTED, WEIRD_QUOTING autolearn=disabled version=3.1.1 Received: from ligverd.kursktelecom.ru (HELO kid.localnet) (hidra@kursktelecom.ru@77.241.16.66) by smtp.kursktelecom.ru with ESMTPA; 5 Sep 2016 13:47:34 +0300 From: Ligverd Haer To: ffmpeg-devel@ffmpeg.org Date: Mon, 05 Sep 2016 13:47:34 +0300 Message-ID: <2105862.8yzaTEHBEC@kid> User-Agent: KMail/5.2.3 (Linux/4.1.13-smp; KDE/5.24.0; i686; ; ) MIME-Version: 1.0 Subject: [FFmpeg-devel] dash encoder. Correct generated manifest for MPEG-DASH MPD Validator and calculate current bandwidth for eath chunk. Now works correctly with dash.sj 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Create valide manifest. Calculate current bandwidth for eath chunk. Now works correctly with dash.sj diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 519f9c4..06b4e60 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -498,18 +498,15 @@ static int write_manifest(AVFormatContext *s, int final) OutputStream *os = &c->streams[0]; int start_index = FFMAX(os->nb_segments - c->window_size, 0); int64_t start_time = av_rescale_q(os->segments[start_index]->time, s->streams[0]->time_base, AV_TIME_BASE_Q); - avio_printf(out, "\t\n"); } else { - avio_printf(out, "\t\n"); + avio_printf(out, "\t\n",final?"":" id=\"0\""); } if (c->has_video) { - avio_printf(out, "\t\tmax_frame_rate.num && !c->ambiguous_frame_rate) - avio_printf(out, " %s=\"%d/%d\"", (av_cmp_q(c->min_frame_rate, c->max_frame_rate) < 0) ? "maxFrameRate" : "frameRate", c->max_frame_rate.num, c->max_frame_rate.den); - avio_printf(out, ">\n"); + avio_printf(out, "\t\t\n"); for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; @@ -598,11 +595,15 @@ static int dash_write_header(AVFormatContext *s) AVDictionary *opts = NULL; char filename[1024]; - os->bit_rate = s->streams[i]->codecpar->bit_rate; + os->bit_rate = s->streams[i]->codecpar->bit_rate ? s->streams[i]->codecpar->bit_rate : s->bit_rate; + if (os->bit_rate) { snprintf(os->bandwidth_str, sizeof(os->bandwidth_str), " bandwidth=\"%d\"", os->bit_rate); } else { + snprintf(os->bandwidth_str, sizeof(os->bandwidth_str), + " bandwidth=\"%d\"", 0); + int level = s->strict_std_compliance >= FF_COMPLIANCE_STRICT ? AV_LOG_ERROR : AV_LOG_WARNING; av_log(s, level, "No bit rate set for stream %d\n", i); @@ -858,6 +859,10 @@ static int dash_flush(AVFormatContext *s, int final, int stream) if (ret < 0) break; } + + os->bit_rate = (int)( (float)range_length*8 / ((float)(os->max_pts - os->start_pts) / 10000) ); + snprintf(os->bandwidth_str, sizeof(os->bandwidth_str)," bandwidth=\"%i\"", os->bit_rate); + add_segment(os, filename, os->start_pts, os->max_pts - os->start_pts, start_pos, range_length, index_length); av_log(s, AV_LOG_VERBOSE, "Representation %d media segment %d written to: %s\n", i, os->segment_index, full_path); }