From patchwork Wed Nov 15 07:58:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Liu X-Patchwork-Id: 6094 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp4275056jah; Tue, 14 Nov 2017 23:58:49 -0800 (PST) X-Google-Smtp-Source: AGs4zMbSbHpGerTOiMlUz6KX0YrE0mQL1QcVQwBX6sUW0N+8wlalj/2rCQpwRgRb5O6W7fof7Tx4 X-Received: by 10.28.207.8 with SMTP id f8mr6044203wmg.30.1510732728980; Tue, 14 Nov 2017 23:58:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510732728; cv=none; d=google.com; s=arc-20160816; b=S6YaoivqiJxICjXp5Eb1FhG+XNLcor6YSpzzpGdESoDtlxknxjmB62WhFoB0/gGWNp jlWNwP8wh1sRYKQcpyiYB8HmBco0XGfkRJwzyVNGHCh+R9WP9LcJpnN5MbpL5GO/3EvB EcBYheUK0uRrFAY40sSVE5jvRkfXCPVp89td28uJh+F2varC8r5ya2uEOBuuC6GRTBw/ TC4IJECvi54c5K6oCz+nN5KkBk7IdOnYiju8qYmJNfPt+T310xm5mG4nL+QFy53aErOD /afVPPLOXYc+gvwSyrJeK+2gr9jUSk2ftdPBDOPCuIBihb2sxFDyDJOhpiGQMcJxKxpZ RFMA== 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:to:message-id:date:from:references:in-reply-to :mime-version:dkim-signature:delivered-to:arc-authentication-results; bh=vXiQ0c1WyMqC1VvjOdBdYacGAeceseccf46ZzMr9Ols=; b=lGyEvdhofaf/Z+jU4f8aTYbdAfFsr9hh/kbWJs21KRB/Wy8ufzwZvN2PD+iUxrvmHh lhHSV+dW1RJb5Lm8cYWz1bNGwlYaJMcECfjE33Xq5rrWD/SPtyJypcsbpycoeVAx37oV 8X3+BqWN5NdPWSFijc1o2JdQT7uuMxa1/kfj6VnU+p11ha6nUE7GCy3sCxl6mx9wYoLH ilFH/5PtV/0sLaNYH+tloan6LV/CZF0aQOAQ1yJX9ZOe936GPMrDmHqDveuLWY7tBO6P L4rp82OK1lO49HtouOgsLhYfw0hgAvj1IEgCz5CuSijcccslKxP6rpNF2iuahZ7sQGaK vE0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=YVwkA1Yn; 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=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o99si18497582wrc.85.2017.11.14.23.58.48; Tue, 14 Nov 2017 23:58:48 -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=@gmail.com header.s=20161025 header.b=YVwkA1Yn; 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=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4E602689FD9; Wed, 15 Nov 2017 09:58:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi0-f49.google.com (mail-oi0-f49.google.com [209.85.218.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 86BCA689E74 for ; Wed, 15 Nov 2017 09:58:26 +0200 (EET) Received: by mail-oi0-f49.google.com with SMTP id h81so9925124oib.8 for ; Tue, 14 Nov 2017 23:58:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=R6XlTyq6JQ1BPzDNoSJc5Ewfj8gxf1/lHNYzOckVsxY=; b=YVwkA1YnIpVw058514J/rWihz2kCipD7aQ/kjL1tQEDdg7F3I6LxTwOU7CG5zfyLtR 2980dBZv3hdCwwsf/eNx+RFqG7N7PnvGqZFK7+fHDVxCXI4vPikzh/p7E/SEsGp7vt0+ N4guwtJRzVbSiGfgFG2rjQ1GwF823R0IQK0bnEK9VbMDtlm5jz/zZ0WHgF87BoBm/I3k 9oCviQGlIUP+zAJiTkoiajcIqtFOsJHzMKjXZJBEfYEiWsUf+bCDWtzmXGDSHOxHiJ+Z uTCIle4Ohtx4ZNoB4hp8k0Jbgf3InXmxI+Y+qEU9MY6oDa6T1FMJyFWpqji5lN+VedKN Pf+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=R6XlTyq6JQ1BPzDNoSJc5Ewfj8gxf1/lHNYzOckVsxY=; b=Mjfbeg7Qt9PFjmnTNGY41l59SD7wtdno+NuzYVr+53gEEyJ7/6pHS5v+ZTTPPx1jix Coa1XYX8/fAUArIiUn8Ah4LRJBWw67NTgrNo31og6tnwuolIBRJ6ydHP8klkv7Mjspv3 7P8uVNDDAKb/zG38dIiNqBm00yT7eIWsVwx7Ioel+I9bqVI2xUaxvcvxgM5ueSrvTtIH Oy+0GOgb6ReL1Y0g9zg8et82Akbwup7yC0NbUlf2H6c98Gc1543OJsKtR2/BJK/DiypD BIaSLrkcDTOjkrhZiDHUv0uFhNqKbfn4rPFK2Bg17mVefUIBeXeM9+MsdxWTHAYaV95H 0NJg== X-Gm-Message-State: AJaThX7TNOHtdioKR+ZJnt8ikme+/q4PuOSVAX8+U6g9f19Exq8EKoTf FjM47Bml+wp6GXvmORbTM2cRKXTavMLh5PT1EEZpbg== X-Received: by 10.202.50.67 with SMTP id y64mr2730250oiy.391.1510732720014; Tue, 14 Nov 2017 23:58:40 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.188.133 with HTTP; Tue, 14 Nov 2017 23:58:39 -0800 (PST) In-Reply-To: References: From: Steven Liu Date: Wed, 15 Nov 2017 15:58:39 +0800 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 2017-11-15 10:26 GMT+08:00 Colin NG : > Please ignore the previous "patch" email. > > > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > +} + static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representation *rep, xmlNodePtr fragmenturl_node, xmlNodePtr *baseurl_nodes, @@ -530,11 +546,13 @@ 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 = getFragment(range_val);// byte range on if (!rep->init_section) { xmlFree(initialization_val); return AVERROR(ENOMEM); @@ -550,11 +568,13 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati } 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 = getFragment(range_val);// byte range on if (!seg) { xmlFree(media_val); return AVERROR(ENOMEM); @@ -571,12 +591,12 @@ static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representati seg->size = -1; dynarray_add(&rep->fragments, &rep->n_fragments, seg); xmlFree(media_val); + xmlFree(range_val); } } return 0; } - static int parse_manifest_segmenttimeline(AVFormatContext *s, struct representation *rep, xmlNodePtr fragment_timeline_node) { diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index 0e3afd2..68196e9 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -522,6 +522,22 @@ static enum AVMediaType get_content_type(xmlNodePtr node) return type; } +static struct fragment * getFragment(char *range) Camel-Case code style, please use name looks like : get_fragment +{ + struct fragment * seg = av_mallocz(sizeof(struct fragment)); check the seg , if av_mallocz is failed, it will error; + + memset(seg, 0, sizeof(struct fragment)); unnecessary memset, because av_mallocz is set seg to 0 already. + 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;