From patchwork Wed Jan 17 02:56:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin NG X-Patchwork-Id: 7306 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp4998349jaa; Tue, 16 Jan 2018 18:56:35 -0800 (PST) X-Google-Smtp-Source: ACJfBothesZ5CjGvTSMYxpzSyO5dAKggECY7i0RiTRCKUL2CxYR891pN+rlpl9y1bz6Hj9zCtIrJ X-Received: by 10.223.132.195 with SMTP id 61mr1003369wrg.247.1516157795227; Tue, 16 Jan 2018 18:56:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516157795; cv=none; d=google.com; s=arc-20160816; b=EYUpo6O/tLnpnmjGJ3qEgVfoYZdVOEimgwWOZ1l/pm8EDrw/zq/bMry2grylHZzCCg iQo+gx6boFTObyGprE4X/cPo3YRL+t8zZDLd/bd71bF4NexbPnZQtY2c5UNuM01AcWfF z/dNaQ+KzxcwHRbFQzh2KWrFVTlm5jDgq0x1WHkEpLwHtFEYrKRgaStYbgxBvm4j6iNq iHg4BbnjjpwkRxNw3hjF5mZgSQt+TLfjGqdWoC38di+rZgfXu5SYAFYwc/CzA0+UFX0A f3NqIiDHjNDB9Axhcy55vLDvRBEYiGLF+ZHUPObjfo90P+stz10Pa3vNJGXknQpYbP79 4h3A== 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=6vqtizN7Bj/soT07e8CsuckDdm8etQoyr5wP74a0TX4=; b=aQBtSU0wftlaw1TJZzJRCQok2/7cA2kRxjAtdnfC5Iucj7phlC3Cq4uOVw1GWQyby3 RHvhopauO1NiVskYRkIiS6MG3SgfJgvKj9wbCHxfnZhqcyiJ+i1TPHjrUbdxre4LZ8RF GRitMksWVfF3cNFLoyx4kKmszKfiJWAu2vhz0JD3lUrr8ejf89ybLSfPB3u5mybWaN5F pCDXRBSISM4g+xsFEDy4szfSSd2VKwRpm+rTUwvj8WodhlXdmMNvra+cCjcx3gI0fkki RO1SXaeuItnS0dP4vNSmvdFS/CWKosWAAXjsPoFSVBy3yt7qs/MnxO0xkGBByirYV3/v udOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=VoStGR42; 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 u54si2977533wrf.205.2018.01.16.18.56.34; Tue, 16 Jan 2018 18:56:35 -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=VoStGR42; 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 C3553689EE1; Wed, 17 Jan 2018 04:56:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-oln040092004031.outbound.protection.outlook.com [40.92.4.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B1341689C7D for ; Wed, 17 Jan 2018 04:56:25 +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=H4SGos03hiy4fciVNgFACrNZOkaQIOs9hZ+ppLwCuI4=; b=VoStGR425zB3uKFVzHh3G1+o0T/rhfeu6SBhuFoshs0V25nkH6xdNYGUqDwkdGeCWKPcrhesabFTlkAHGn+doNd6dlDNDVtwb5Fj6KIK9Tt7jD+mfxjuJH/5/UnGVOwkYxZDqQuRcWg7fvfIlIMIZ+tzFhgt16JmxbBpl+5eKJknyre4VzqoZUqQPlGwHZEs01UDrfNyMu8GH1LMnBpRnUDvUl2DzVBE9ZPHnEQO9SE+fFPrq5izzWhGSJGS/YkOcBv/YmJYkcIPZkd1I+Ac1W+hOckubKKk+Mfwt3S8iLGMm6zlswz94QFefnACwuVOqo6ttcA+1aEdoqyPER13jA== Received: from CY1NAM02FT017.eop-nam02.prod.protection.outlook.com (10.152.74.59) by CY1NAM02HT145.eop-nam02.prod.protection.outlook.com (10.152.74.173) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.345.12; Wed, 17 Jan 2018 02:56:26 +0000 Received: from DM5PR22MB0681.namprd22.prod.outlook.com (10.152.74.53) by CY1NAM02FT017.mail.protection.outlook.com (10.152.75.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.20.345.12 via Frontend Transport; Wed, 17 Jan 2018 02:56:26 +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.0407.012; Wed, 17 Jan 2018 02:56:26 +0000 From: Colin NG To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH 1/3] libavformat/dashdec.c: Download dash content with byte range info Thread-Index: AQHTjz7D2Y88tRfBYUWHg5Zc5N7jdA== Date: Wed, 17 Jan 2018 02:56:26 +0000 Message-ID: Accept-Language: en-CA, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:7947288EFBFB275A4A33C609C873F571A7A1C42C378D0DC356652510F8E6854B; UpperCasedChecksum:BD6479D8B1F19E63DDD64B34CFF4F8FF54ECE99ECACBC80BE5F613881C5AB9B1; SizeAsReceived:6966; Count:45 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [ac64BvLKdKeLbN9zv/P1zkQiA6VP9kG1] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; CY1NAM02HT145; 6:hQJxlm5BlBRnhd8dpz/hDcgaaGDAdrmxLKirYvnDx+U6448gyFlZpFcC2gOSCceY0bln2RFMznFmcdnG/k2jX5nW2rxQ89t74DZN4a6bMIEPOf31fVo9UY2nZtjr7z4bcHlShCEhTDNQLmYAxEcFU+c0cqjNm45HRoyn6oW30GXudJP1qNLw7Oq9I6C7Y/3szTBt25qC9KKsRcjeS2RIQnWKDl5Wz+BUJ/CmyOu1w3v+/B53o0Ux8nArbLmBj6a2QNS4CTDcUBHHwNYN6bYonU5ZC+OTmGu6A9069H/bFBDU2XhniwkslHhnKuCUulbZWmvG8LfMH8K3PdvNp4pgAPMqG9d9lbp2Qgx4F7SOkyQ=; 5:LYowQGODqhiCA4RaF5SvZnIVIw4pK3FCV7jYCFo/LsVB6P5Zveu6FpDHP5RvweZveNcIcvgI02PhYCJ44YlzUrE88WPNEW7wiupi8abJ4lzbDpdYfWrc6WXMTvX+cxI1dBjVdI6poUha5cR7Z0T0yfptpe5irHMdayOLAvShn4c=; 24:DyYgSEVBGzNG6xdjyfiBLuJ+GbX7g3ucFynk+kn9T5o4hmOawJ2oQVMSoMGxrvWSb0Ilt1geEIOO6ite/tXhWfQwZNfXjxJdtPDi6rWP1ZU=; 7:+YNn+/g9rlhwqxcnsqSXjiyoOzwN6kSCPaYH0vhHs9VDo1dblVVod6ASfXTzop/EpVqvXzhGsbRF53w2J/IJh/JvzrrskFrX1+lnuGn5H9ThPaQPeepvqvd+j5cf/MSi8Nto6hFNKZzkYPAUZ/uEoxYXA1gzQ8nrdMBFvHW3f6BLsl9z6FjkmZn/yeg3WuO1Dw5Lc5cEdj2vHNkigr9ljTWqGB1je928dLKZC2Ajzh+HcZCoGBtY/uFdQbLE5lw2 x-incomingheadercount: 45 x-eopattributedmessage: 0 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(201702061074)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(201702181274)(2017031322404)(1603101448)(1601125374)(1701031045); SRVR:CY1NAM02HT145; x-ms-exchange-slblob-mailprops: gjx25WM8ZNWt5vumBmJDxMw4E5GRzLnHJQWWS7FXRwrMVs+yK+S+mLVsAN9fusTsa40Zn6NWVodg/mdvfJ1Z43r9TWCIsWUV9VZVRvoGKbGGNgBpy71fODUYIY3/jvlHYLiQZUmqzHyHFHleoN7LbLN3hXB/f4Zx5ORJzrRI2Jw25yDzPepm2jjU1wH/XLo9rYJ7RnWN1w0Pe1sgdpsjgAdH4lwRixMysXp/FlJc3+Cdk2M1WmM4L9x1ae8R5C5LS5ormGWliJuy7Z3JVop8Q5Q1FgvAbENTJTXtHui44Z8r8/0q+e5usvwc9vRb2F/otnAlDSCiV3HvU2geOhtG/P4Ljpq/Fn71xGLwlufQE4GSKLgtZnBELvTJUo+zs13gYpopwoswV9TnK9z4sm6MkZvireXGKxn3abFH8Y0zz9DzvzPLhsEKUJTVC59CpMV9XBx7q5z6V5lwFQB6D9DJEF7UR9rARPwfRnHwYKRMllpWyp/+y7ompHru3BgtsRTE0dUalz0mOVhu+Ysb2jH9WHg5o06p7vpKwwM7bgMz9E4EXgmFCtkfpABEmOnF+8/2yQa9/lEWDUpHW/oKmXayc/UBG8BRnEQvXh7LKGwOQWczUBZZWd+xwYMVrr5RzWbz1g99T8qUUMXyWdIywQwmE7fX4G5eR7ISDTg1bEoTNrKK9j8GnoBkBOA53pLQN7MIG9ZK4VR2XzPJdzm+oM7lM+yTKO814JYPCItRwDGDe+s= x-ms-traffictypediagnostic: CY1NAM02HT145: x-ms-office365-filtering-correlation-id: 8dcf3973-29d4-4526-7a50-08d55d55e607 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444000031); SRVR:CY1NAM02HT145; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CY1NAM02HT145; x-forefront-prvs: 0555EC8317 x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:CY1NAM02HT145; 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: 8dcf3973-29d4-4526-7a50-08d55d55e607 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Jan 2018 02:56:26.3771 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1NAM02HT145 Subject: [FFmpeg-devel] [PATCH 1/3] libavformat/dashdec.c: 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 | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index 2492f1d..67a92d6 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -550,6 +550,23 @@ 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; + + 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, @@ -558,13 +575,16 @@ 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, @@ -574,17 +594,20 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati 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, @@ -594,11 +617,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); } }