From patchwork Mon Nov 20 06:14:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jeyapal, Karthick" X-Patchwork-Id: 6215 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp3512069jah; Sun, 19 Nov 2017 22:14:56 -0800 (PST) X-Google-Smtp-Source: AGs4zMah9tP9Yy0HMLe8OzvauIIzbNwgd5E0RDgaRvB5iOltvdHi+63G8wbP7whX5pALYra9ua9v X-Received: by 10.223.146.197 with SMTP id 63mr9737601wrn.180.1511158496029; Sun, 19 Nov 2017 22:14:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511158495; cv=none; d=google.com; s=arc-20160816; b=vIzb8nezRt3KCISTWDVsJmgR3Q7MjEVB7u150Qi4PhYVEsM0bg5wiaP5A/FS9VcPIa 5Kv0V/jpEzrga1MAPkc/WCdgECIKRJt3qZi8g5wwJOG2FRMihHcFE6uZwCZ5JtEATgtQ 1cfNDwa8EXUxGT5upTENYK34Ka1yceScAL62urK/RdnXcuN5RConr8Vg8z8aVjT/5uYi 6AhWvf6gcEjTHSvds8ssNiYjQGj6RJMQrBCV/qM80coUbu1i9jmZQmENdhVy5psUdXoI cocpOreCMmSki8K2agC/fI2+zas0PUQ5GTyc51hA0CjSIXaQxyuwb+44ju72/gZCFsyP u/lA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:content-id:content-language :accept-language:message-id:date:thread-index:thread-topic:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=DH9N422N+FRVY0Jh3DHn44FqR/IaRjDD35/T8eHDiv8=; b=z6frWh+H/pe+kYazCrX01cwy7RhuHJnKIJmjSYc9ZFGrn8SHMPnEZMWBu4rS0qBLTG bLJy7OrzwAFitfGz8nhwmixB2WTSibhp1RIyIrP7XheeKhgIY4BWvfk5PEBYPEpAL/XY YWvnOze+PKAZQceL7cp+Eo6dY/7Ml11D4CnrI+wSB45t6zFFqUAsLhqm+WwQtfmHkl09 E4EnHYd9h6IOKfOh9M3LD7hdiLsn6RTrWUhx3RZHu+BnE41n0QeXAOU9mU/zwEqgiebd x2PZRTQ1mPcN72f9uwplGd6qq+BE7sZ8rF14YBUh/bWxhuaNBbzp4uZn02HKEdkRhWND axTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@akamai.com header.s=jan2016.eng header.b=HpxhRdJ6; 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 j62si7135027wmf.191.2017.11.19.22.14.54; Sun, 19 Nov 2017 22:14:55 -0800 (PST) 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=@akamai.com header.s=jan2016.eng header.b=HpxhRdJ6; 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 9223B687EE3; Mon, 20 Nov 2017 08:14:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx0b-00190b01.pphosted.com (mx0b-00190b01.pphosted.com [67.231.157.127]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F0A1B680757 for ; Mon, 20 Nov 2017 08:14:29 +0200 (EET) Received: from pps.filterd (m0122330.ppops.net [127.0.0.1]) by mx0b-00190b01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vAK6CEai010292 for ; Mon, 20 Nov 2017 06:14:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=from : to : subject : date : message-id : content-type : content-id : content-transfer-encoding : mime-version; s=jan2016.eng; bh=OOK7tfhWZd85QDKEPq0n5JcyyuL02V6v7FH7PZWSQ1M=; b=HpxhRdJ6NgEhB1rOKDhAoQ947L16YyZDZZyvKJQ/icymiJg+JVjQ1pUGrpnBFQ7p1XrD 9yuiSSP318IzTqmJSXDyBHjKzqMVh8B08PH6n2lZP4QpGAJjxaueqQRXBaA9IKL43klW X0H0qO9bGw+ryjrOqB16pEwGVNxObaC15TGiTvECYfQ7oFXWZP9CB5pCo20oes8QqCbl dN2Y+17dNs+/jwz5Ijm4dhJIj0JVQY0rmxBn4ME1KhClBrrBFLxFMUMy1ejoPGmlpp7P ZYB5NHUQ8MQA8/1Msuqc7Wuywho73zmBmaWegIEKPgx4LoCQHl3El0xQ7j6JSBthgjbx hA== Received: from prod-mail-ppoint2 (prod-mail-ppoint2.akamai.com [184.51.33.19]) by mx0b-00190b01.pphosted.com with ESMTP id 2eadcw4wxu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 20 Nov 2017 06:14:45 +0000 Received: from pps.filterd (prod-mail-ppoint2.akamai.com [127.0.0.1]) by prod-mail-ppoint2.akamai.com (8.16.0.21/8.16.0.21) with SMTP id vAK6AfL4028884 for ; Mon, 20 Nov 2017 01:14:44 -0500 Received: from email.msg.corp.akamai.com ([172.27.155.30]) by prod-mail-ppoint2.akamai.com with ESMTP id 2eah2xn68n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Mon, 20 Nov 2017 01:14:44 -0500 Received: from ASIN1EX-DAG2MB2.msg.corp.akamai.com (172.27.155.102) by asin1ex-dag2mb2.msg.corp.akamai.com (172.27.155.102) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Mon, 20 Nov 2017 11:44:41 +0530 Received: from ASIN1EX-DAG2MB2.msg.corp.akamai.com ([172.27.155.102]) by asin1ex-dag2mb2.msg.corp.akamai.com ([172.27.155.102]) with mapi id 15.00.1263.000; Mon, 20 Nov 2017 11:44:41 +0530 From: "Jeyapal, Karthick" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH 1/1] avformat/dashenc: Added configuration to override HTTP User-Agent Thread-Index: AQHTYcbZ+vPSys2BZ0aNqODjhLtDyA== Date: Mon, 20 Nov 2017 06:14:40 +0000 Message-ID: <9D0FC597-2391-4DBA-B916-11800ADBA490@akamai.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [172.19.216.57] Content-ID: MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-11-20_03:, , signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1711200087 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-11-20_03:, , signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1711200088 Subject: Re: [FFmpeg-devel] [PATCH 1/1] avformat/dashenc: Added configuration to override HTTP User-Agent 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" Looks like nobody has any objection for the below patch. Can somebody please push this. Regards, Karthick On 11/8/17, 2:53 PM, "Karthick J" wrote: --- doc/muxers.texi | 2 ++ libavformat/dashenc.c | 22 +++++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) -- 1.9.1 diff --git a/doc/muxers.texi b/doc/muxers.texi index 91bbe67..412fede 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -247,6 +247,8 @@ DASH-templated name to used for the initialization segment. Default is "init-str DASH-templated name to used for the media segments. Default is "chunk-stream$RepresentationID$-$Number%05d$.m4s" @item -utc_timing_url @var{utc_url} URL of the page that will return the UTC timestamp in ISO format. Example: "https://time.akamai.com/?iso" +@item -http_user_agent @var{user_agent} +Override User-Agent field in HTTP header. Applicable only for HTTP output. @item -adaptation_sets @var{adaptation_sets} Assign streams to AdaptationSets. Syntax is "id=x,streams=a,b,c id=y,streams=d,e" with x and y being the IDs of the adaptation sets and a,b,c,d and e are the indices of the mapped streams. diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 7813f44..a68f7fb 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -100,6 +100,7 @@ typedef struct DASHContext { const char *init_seg_name; const char *media_seg_name; const char *utc_timing_url; + const char *user_agent; } DASHContext; static struct codec_string { @@ -210,6 +211,12 @@ static int flush_dynbuf(OutputStream *os, int *range_length) return avio_open_dyn_buf(&os->ctx->pb); } +static void set_http_options(AVDictionary **options, DASHContext *c) +{ + if (c->user_agent) + av_dict_set(options, "user_agent", c->user_agent, 0); +} + static int flush_init_segment(AVFormatContext *s, OutputStream *os) { DASHContext *c = s->priv_data; @@ -575,16 +582,19 @@ static int write_manifest(AVFormatContext *s, int final) int use_rename = proto && !strcmp(proto, "file"); static unsigned int warned_non_file = 0; AVDictionaryEntry *title = av_dict_get(s->metadata, "title", NULL, 0); + AVDictionary *opts = NULL; if (!use_rename && !warned_non_file++) av_log(s, AV_LOG_ERROR, "Cannot use rename on non file protocol, this may lead to races and temporary partial files\n"); snprintf(temp_filename, sizeof(temp_filename), use_rename ? "%s.tmp" : "%s", s->filename); - ret = s->io_open(s, &out, temp_filename, AVIO_FLAG_WRITE, NULL); + set_http_options(&opts, c); + ret = s->io_open(s, &out, temp_filename, AVIO_FLAG_WRITE, &opts); if (ret < 0) { av_log(s, AV_LOG_ERROR, "Unable to open %s for writing\n", temp_filename); return ret; } + av_dict_free(&opts); avio_printf(out, "\n"); avio_printf(out, "initfile, sizeof(os->initfile), c->init_seg_name, i, 0, os->bit_rate, 0); } snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile); - ret = s->io_open(s, &os->out, filename, AVIO_FLAG_WRITE, NULL); + set_http_options(&opts, c); + ret = s->io_open(s, &os->out, filename, AVIO_FLAG_WRITE, &opts); if (ret < 0) return ret; + av_dict_free(&opts); os->init_start_pos = 0; if (!strcmp(os->format_name, "mp4")) { @@ -974,12 +986,15 @@ static int dash_flush(AVFormatContext *s, int final, int stream) } if (!c->single_file) { + AVDictionary *opts = NULL; ff_dash_fill_tmpl_params(filename, sizeof(filename), c->media_seg_name, i, os->segment_index, os->bit_rate, os->start_pts); snprintf(full_path, sizeof(full_path), "%s%s", c->dirname, filename); snprintf(temp_path, sizeof(temp_path), use_rename ? "%s.tmp" : "%s", full_path); - ret = s->io_open(s, &os->out, temp_path, AVIO_FLAG_WRITE, NULL); + set_http_options(&opts, c); + ret = s->io_open(s, &os->out, temp_path, AVIO_FLAG_WRITE, &opts); if (ret < 0) break; + av_dict_free(&opts); if (!strcmp(os->format_name, "mp4")) write_styp(os->ctx->pb); } else { @@ -1188,6 +1203,7 @@ static const AVOption options[] = { { "init_seg_name", "DASH-templated name to used for the initialization segment", OFFSET(init_seg_name), AV_OPT_TYPE_STRING, {.str = "init-stream$RepresentationID$.m4s"}, 0, 0, E }, { "media_seg_name", "DASH-templated name to used for the media segments", OFFSET(media_seg_name), AV_OPT_TYPE_STRING, {.str = "chunk-stream$RepresentationID$-$Number%05d$.m4s"}, 0, 0, E }, { "utc_timing_url", "URL of the page that will return the UTC timestamp in ISO format", OFFSET(utc_timing_url), AV_OPT_TYPE_STRING, { 0 }, 0, 0, E }, + { "http_user_agent", "override User-Agent field in HTTP header", OFFSET(user_agent), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E}, { NULL }, };