From patchwork Fri Nov 17 23:13:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin NG X-Patchwork-Id: 6149 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp1210199jah; Fri, 17 Nov 2017 15:13:49 -0800 (PST) X-Google-Smtp-Source: AGs4zMZYC64Y0/RLk2fEdrGMdQwYWto0wPNYtEns1BgHw8Qd99p/YH6fN8L6Ovz0xGO+udN2kbyh X-Received: by 10.223.150.2 with SMTP id b2mr6104455wra.185.1510960429878; Fri, 17 Nov 2017 15:13:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510960429; cv=none; d=google.com; s=arc-20160816; b=lT4+YzWaPYXxXSkHeAKS7qTfwkgv4aLZbt/ECbBQlWe0ZgHpT0v7b5Xh0aLK/lvhJT xorpoklpx++OrHZTolg+EUR/iOUo6+Co1AaSjoLZ0r/hlOe26RVM3vmFQd87El5owrNK elwwMpr4IAWQLm4uQVqeg4jMyLC4bEUfWGlcoaR/QdBfhgI4eyYQq8hpgnu59PYN2Idk hboYMCeS0qtlkeNWSZzqbNn6SeWWkFhhD/dw/gaUOfZNdLOi0crDyGymQb5lQApkdsgh uzksLnrX7XSIoQ8wb5/oN5ZCXiX2Bk7Boa8KA5C/ua5E/L+iRzBoc+Pf6wLbg3HqbwQj 9gaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:spamdiagnosticmetadata :spamdiagnosticoutput:content-language:accept-language:message-id :date:thread-index:thread-topic:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=SgsoC/2DyAuu7vp6Dr37D8pqz2WQM6n5/Rw58uu4rNU=; b=IvU2FSyFn77qOJWr1999oF/impBwnJbzdA94Bjc9ohicrVIbD5YP02CB8+DJ983h5Y Or5BqDtLr18TI836D/Gk2HWOOo/8InS7YDdTNi39UUVmfWEnTJFkK75mzlYC5iEyYhau ix8Oqky1Da//Xc3xiHbDmfD3eez9l/LEwiIeugsXukXysftYVxKhTcVUXqtoDifKg5f/ kpE4/9CHjwwL8w1cMyLU18A0QKJR71GMyXhI4MS6xIFQzbWviwA24lkxDDgRfHxbt4YR BIBwYzZRMEtQZyS6jEB5vFlVbz2u4rNMYG8Mg4kalQFeq0xqPrWgo/kWnmHjhwHKKUUL axnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=HjfJv0XE; 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=NONE sp=QUARANTINE dis=NONE) header.from=hotmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k21si3824522wrd.429.2017.11.17.15.13.49; Fri, 17 Nov 2017 15:13:49 -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=@hotmail.com header.s=selector1 header.b=HjfJv0XE; 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=NONE sp=QUARANTINE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D8E066891D5; Sat, 18 Nov 2017 01:13:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-oln040092001106.outbound.protection.outlook.com [40.92.1.106]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BE68B68066B for ; Sat, 18 Nov 2017 01:13:24 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=I+d6ML0cMYv5uz3lPrPGs7tFvTmAKq4jRzE1Q91fvnQ=; b=HjfJv0XE+9hXsPpPL71LzebpG/QZxX3aDQG8GMX6BfXLezvKnGgkQHAZmm6DSO7c32oqp1/lhm16LhbfEyTj5Shpej99QhhGYFeUDvob1WqkqVusEa9mBCD4dwwUDsE8zS3LeutWOgqg8P52KUQTPBxz/NUJlwNjTCfPfzT7IdcCeVVbYGtm1enYduAQWEPGLF7Fo2gGgPfg0qqk3LGOqfcE1UBAmsR82LnHxVY8e5ZCbWjuJyTW3T9pOATiUW39qEZkdlSxcHZPIERe+XbQ9ab2mqsGWJEv7DjhEW+mK7S1VQCGRm0xizvZTEXKRWq4ALV+phAnN9zhBqn50P5MiQ== Received: from BN3NAM01FT026.eop-nam01.prod.protection.outlook.com (10.152.66.55) by BN3NAM01HT081.eop-nam01.prod.protection.outlook.com (10.152.67.224) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.218.12; Fri, 17 Nov 2017 23:13:38 +0000 Received: from DM5PR22MB0681.namprd22.prod.outlook.com (10.152.66.51) by BN3NAM01FT026.mail.protection.outlook.com (10.152.67.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.20.218.12 via Frontend Transport; Fri, 17 Nov 2017 23:13:38 +0000 Received: from DM5PR22MB0681.namprd22.prod.outlook.com ([10.172.189.151]) by DM5PR22MB0681.namprd22.prod.outlook.com ([10.172.189.151]) with mapi id 15.20.0239.007; Fri, 17 Nov 2017 23:13:38 +0000 From: Colin NG To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] Download dash content with byte range info Thread-Index: AQHTX/mz+KbuRnQA0kWMo5h5JNlh5A== Date: Fri, 17 Nov 2017 23:13:38 +0000 Message-ID: Accept-Language: en-CA, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:B251204E3D92010FE5F6FAD075260E501C485DEB244B69352FCDB2FCD71A1538; UpperCasedChecksum:4316CB0B9AA5423EA87627F11ABEF03FBA94CD80F0B3075D9E67BF107A3E69D5; SizeAsReceived:6904; Count:45 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [kMsDh6ez2sLp46XfKW0srh8I2fUAHX8s] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BN3NAM01HT081; 6:Jw+kfMLas6jqy9YYSobQCB6dyZ30xuHg/vxZBFxoY5/spQfnHtBfUTarWYeboFskjhxaJJhqRQ2rErxFX6s31O+WurBG/nqXbJaTaboeychyBRY/T5lEVJxbGN2Uu9sinywcf6suBdxqrndLXcGowD44EAlSWkRKn1Ddswj+AaldRIQwpMjJzzpHj0GRTsnc/4rnAIf9TC68zrxfY+2EE55K/GCz9ISixz6uq3Ce8m18fJn3a/gmY44a3TObcBGV6qR2TSmA/8PYxWJD6tkhHxrfapiyDWsBom2YCnVyP/sWdMh3v8zrjZ4H7xrkZxUBKAsBiOiAIHAuZQhPULP9DPj9waliSp63+kEfYwEPIvQ=; 5:O9UOIhZ+Z8fqOIs4iFOG3DWHd3pURpv7QCCY9eTzyU2bl+vYdPdwqKEjWUycmwBvzxc45YQRG7SN0GvXUUCxxPvJbwNgWFVmxAlKUKVEW4wXIdrRX8poKpzp1+SSrgWeFkze88nZ4Veo4JTsEJIQHtdYX4vyJQlXp4BWyfOhRyE=; 24:2YxKqWezTLoymV1VQ2+n3I9lEEugovllpgSk/shXjkiIt7yKU1GTSnwVVv1WiMCTep1Ya2bMiUhNUfZ4W8ggOfNzsRf6p3kT2rbBDjIZ9l4=; 7:wyWwudb5K2IWlTGn2T6tiNnu/PNTfjTSTjvPgvwftjk8DgS3hll5O8ps9zvI79RgE3H0OWRaugq1+5s0bVGNeR4EFrDAtnBG7Mw/Gf3FCC7cffF/xXIwvP+X007ZyLsU7kesmaszy64fQkWgkc9/QccKbbFNXv/Cq4eiwh0mgiPqU3m3kE6qSR3eiAWjykwmBZCVj9gf+9moJ3fGnrlW+HAifR1ePmCVOIhzPpv5xQcxbeiNCcPcmbkU2XJdtj3L x-incomingheadercount: 45 x-eopattributedmessage: 0 x-ms-office365-filtering-correlation-id: a1f54c73-3e49-4a38-9042-08d52e10d58e x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201702061074)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(201702181274)(2017031322404)(1601125374)(1603101448)(1701031045); SRVR:BN3NAM01HT081; x-ms-exchange-slblob-mailprops: DD4MX5oUjaJclZkY6defm+P+UlNfr8yeAN5sIbhDfyD8EczM3qVpt97J2LlCcuNx0LyFt8BcEQsNBu2ACAwAfErDM0bu4Y4M0kFYgU3PYI/zgv9G4faTQbbqL1HSy0r3KRTNAr4Rh8My8rGI6uVWNoCFp9KI450FMlfp7UqIp+PW6f38eD7c8g6f/QGyjNhgnRcqkggWJG0bmsMLPTuWiCTC50P45Ll4qS6xoVSv6ijOmQcqNPBdSOenETp5XQbKB0hs3p6DNOyXJhiiHwRqpDtEPhOaBPTepT5J/a2Cd/F/8hHJfPoPkS4ZsbiKj9+0YA/0HE+3g0UaIGs6OFUIcyj4oKstbxClkrzjoDd/A6Wdv4M5MDAHbIXFRye302nxmBKM0P/FJawFee0yDEIoGQvnjcPZJHWkTsFi7H5uqIiPf4mI8XvgmK18836xupEpJFqUtJuIXd/CXwPRn3r/GyoBiuRfVFMYRcTpMuqY1f3f3mG7Wb9YrGBHXWvP38p0lQ8r88/fvn0Vk+FSeL6JcPAtZ5cqqpDjyS+Dnqc3uDHwBMvDpTbaweVZDR/pmu3XMIcPfivl8yCD6z/tFKh+xLqjtU1nPqSVrF6SLVJzyjxS5hizqNm0Oj8PcwBPrkc1wnF3urvBjFdmJi3diD1cbXEbMyPN5AI0hbnsNtAGWDpDI6yeYHbYPw== x-ms-traffictypediagnostic: BN3NAM01HT081: x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(444000031); SRVR:BN3NAM01HT081; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BN3NAM01HT081; x-forefront-prvs: 049486C505 x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:BN3NAM01HT081; H:DM5PR22MB0681.namprd22.prod.outlook.com; FPR:; SPF:None; LANG:; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1f54c73-3e49-4a38-9042-08d52e10d58e X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Nov 2017 23:13:38.8160 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3NAM01HT081 Subject: [FFmpeg-devel] [PATCH] Download dash content with byte range info 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: Colin NG Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavformat/dashdec.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index 0e3afd2..671ae9d 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -522,6 +522,25 @@ static enum AVMediaType get_content_type(xmlNodePtr node) return type; } +static struct fragment * get_Fragment(char *range) +{ + struct fragment * seg = av_mallocz(sizeof(struct fragment)); + + if (!seg) + return NULL; + + memset(seg, 0, sizeof(struct fragment)); + seg->size = -1; + if (range) { + char *str_end_offset; + char *str_offset = av_strtok(range, "-", &str_end_offset); + seg->url_offset = strtoll(str_offset, NULL, 10); + seg->size = strtoll(str_end_offset, NULL, 10) -seg->url_offset; + } + + return seg; +} + static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representation *rep, xmlNodePtr fragmenturl_node, xmlNodePtr *baseurl_nodes, @@ -530,33 +549,40 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati { char *initialization_val = NULL; char *media_val = NULL; + char *range_val = NULL; if (!av_strcasecmp(fragmenturl_node->name, (const char *)"Initialization")) { initialization_val = xmlGetProp(fragmenturl_node, "sourceURL"); - if (initialization_val) { - rep->init_section = av_mallocz(sizeof(struct fragment)); + range_val = xmlGetProp(fragmenturl_node, "range"); + if (initialization_val || range_val) { + rep->init_section = get_Fragment(range_val); if (!rep->init_section) { xmlFree(initialization_val); + xmlFree(range_val); return AVERROR(ENOMEM); } rep->init_section->url = get_content_url(baseurl_nodes, 4, rep_id_val, rep_bandwidth_val, initialization_val); + if (!rep->init_section->url) { av_free(rep->init_section); xmlFree(initialization_val); + xmlFree(range_val); return AVERROR(ENOMEM); } - rep->init_section->size = -1; xmlFree(initialization_val); + xmlFree(range_val); } } else if (!av_strcasecmp(fragmenturl_node->name, (const char *)"SegmentURL")) { media_val = xmlGetProp(fragmenturl_node, "media"); - if (media_val) { - struct fragment *seg = av_mallocz(sizeof(struct fragment)); + range_val = xmlGetProp(fragmenturl_node, "mediaRange"); + if (media_val || range_val) { + struct fragment *seg = get_Fragment(range_val); if (!seg) { xmlFree(media_val); + xmlFree(range_val); return AVERROR(ENOMEM); } seg->url = get_content_url(baseurl_nodes, 4, @@ -566,11 +592,12 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati if (!seg->url) { av_free(seg); xmlFree(media_val); + xmlFree(range_val); return AVERROR(ENOMEM); } - seg->size = -1; dynarray_add(&rep->fragments, &rep->n_fragments, seg); xmlFree(media_val); + xmlFree(range_val); } }