aboutsummaryrefslogtreecommitdiffstats
path: root/libdash/include
diff options
context:
space:
mode:
Diffstat (limited to 'libdash/include')
-rw-r--r--libdash/include/IAdaptationSet.h367
-rw-r--r--libdash/include/IBaseUrl.h69
-rw-r--r--libdash/include/IChunk.h88
-rw-r--r--libdash/include/IConnection.h69
-rw-r--r--libdash/include/IContentComponent.h83
-rw-r--r--libdash/include/IDASHManager.h45
-rw-r--r--libdash/include/IDASHMetrics.h48
-rw-r--r--libdash/include/IDescriptor.h68
-rw-r--r--libdash/include/IDownloadObserver.h58
-rw-r--r--libdash/include/IDownloadObserver.h.save58
-rw-r--r--libdash/include/IDownloadableChunk.h93
-rw-r--r--libdash/include/IHTTPTransaction.h56
-rw-r--r--libdash/include/IMPD.h207
-rw-r--r--libdash/include/IMPDElement.h77
-rw-r--r--libdash/include/IMetrics.h62
-rw-r--r--libdash/include/IMultipleSegmentBase.h66
-rw-r--r--libdash/include/INode.h97
-rw-r--r--libdash/include/IPeriod.h156
-rw-r--r--libdash/include/IProgramInformation.h69
-rw-r--r--libdash/include/IRange.h53
-rw-r--r--libdash/include/IRepresentation.h159
-rw-r--r--libdash/include/IRepresentationBase.h181
-rw-r--r--libdash/include/ISegment.h86
-rw-r--r--libdash/include/ISegmentBase.h86
-rw-r--r--libdash/include/ISegmentList.h58
-rw-r--r--libdash/include/ISegmentTemplate.h148
-rw-r--r--libdash/include/ISegmentTimeline.h50
-rw-r--r--libdash/include/ISegmentURL.h94
-rw-r--r--libdash/include/ISubRepresentation.h70
-rw-r--r--libdash/include/ISubset.h54
-rw-r--r--libdash/include/ITCPConnection.h40
-rw-r--r--libdash/include/IThroughputMeasurement.h38
-rw-r--r--libdash/include/ITimeline.h66
-rw-r--r--libdash/include/IURLType.h61
-rw-r--r--libdash/include/config.h37
-rw-r--r--libdash/include/libdash.h31
36 files changed, 3148 insertions, 0 deletions
diff --git a/libdash/include/IAdaptationSet.h b/libdash/include/IAdaptationSet.h
new file mode 100644
index 00000000..eff9c7ec
--- /dev/null
+++ b/libdash/include/IAdaptationSet.h
@@ -0,0 +1,367 @@
+/**
+ * @class dash::mpd::IAdaptationSet
+ * @brief This interface is needed for accessing the attributes and elements of the <b><tt>AdaptationSet</tt></b> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.3.2, table 5
+ * @details Each Period consists of one or more Adaptation Sets. An Adaptation Set is described by an <b><tt>AdaptationSet</tt></b> element.
+ * <b><tt>AdaptationSet</tt></b> elements are contained in a <b><tt>Period</tt></b> element.\n\n
+ * An Adaptation Set contains alternate Representations, i.e. only one Representation within an Adaptation Set is expected to be presented at a time.
+ * All Representations contained in one Adaptation Set represent the same media content components and therefore contain media streams that are considered to be perceptually equivalent.\n\n
+ * Representations are arranged into Adaptation Sets according to the media content component properties of the media content components present in the Representations, namely
+ * <ul>
+ * <li>the language as described by the \c \@lang attribute,
+ * <li>the media component type described by the \c \@contentType attribute,
+ * <li>the picture aspect ratio as described by the \c \@par attribute,
+ * <li>the role property as described by the <b><tt>Role</tt></b> elements,
+ * <li>the accessibility property as described by the <b><tt>Accessibility</tt></b> elements,
+ * <li>the viewpoint property as described by the <b><tt>Viewpoint</tt></b> elements,
+ * <li>the rating property as described by the <b><tt>Rating</tt></b> elements.
+ * </ul>
+ * Representations shall appear in the same Adaptation Set if and only if they have identical values for all of these media content component properties for each media content component.\n\n
+ * The values for the elements <b><tt>Role</tt></b>, <b><tt>Accessibility</tt></b>, <b><tt>Viewpoint</tt></b> and <b><tt>Rating</tt></b> are generally not provided
+ * within the scope of this part of ISO/IEC 23009. However, a number of simple schemes are defined in section 5.8.5. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.\n\n
+ * If there exist multiple media content components then the properties of each media content component shall be described by a separate ContentComponent element as defined in 5.5.4.
+ * The ContentComponent element shares common elements and attributes with the <b><tt>AdaptationSet</tt></b> element. Default values, or values applicable to all media content components,
+ * may be provided directly in the <b><tt>AdaptationSet</tt></b> element. Attributes present in the <b><tt>AdaptationSet</tt></b> shall not be repeated in the ContentComponent element.\n\n
+ * The <b><tt>AdaptationSet</tt></b> element may contain default values for elements and attributes associated to the contained Representations.
+ * The list of possible present elements and attributes that are common to <b><tt>AdaptationSet</tt></b> and <b><tt>Representation</tt></b> (and also <b><tt>SubRepresentation</tt></b>)
+ * are collected in 5.3.7. Any of the common attributes shall only be present either in the <b><tt>AdaptationSet</tt></b> element or in the <b><tt>Representation</tt></b> element,
+ * but not in both.\n\n
+ * The <b><tt>AdaptationSet</tt></b> element also supports the description of ranges for the \c \@bandwidth, \c \@width, \c \@height and \c \@frameRate attributes
+ * associated to the contained Representations, which provide a summary of all values for all the Representations within this Adaptation Set.
+ * The Representations contained within an Adaptation Set shall not contain values outside the ranges documented for that Adaptation Set. \n\n
+ * Adaptation Sets may be further arranged into groups using the \c \@group attribute. The semantics of this grouping is that the media content within one Period is represented by:
+ * <ol>
+ * <li>either one Representation from group 0, if present,
+ * <li>or the combination of at most one Representation from each non-zero group.
+ * </ol>
+ * If the <tt><b>AdaptationSet</b>\@group</tt> attribute is not present then all Representations in this Adaptation Set are assigned to a non-zero group specific to this Adaptation Set.
+ * @see dash::mpd::IDescriptor dash::mpd::IContentComponent dash::mpd::IBaseUrl dash::mpd::ISegmentBase dash::mpd::ISegmentList dash::mpd::ISegmentTemplate dash::mpd::IRepresentation
+ * dash::mpd::IRepresentationBase
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IADAPTATIONSET_H_
+#define IADAPTATIONSET_H_
+
+#include "config.h"
+
+#include "IDescriptor.h"
+#include "IContentComponent.h"
+#include "IBaseUrl.h"
+#include "ISegmentBase.h"
+#include "ISegmentList.h"
+#include "ISegmentTemplate.h"
+#include "IRepresentation.h"
+#include "IRepresentationBase.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IAdaptationSet : public virtual IRepresentationBase
+ {
+ public:
+ virtual ~IAdaptationSet(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify information about accessibility scheme.\n
+ * For more details refer to sections 5.8.1 and 5.8.4.3. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetAccessibility () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify information on role annotation scheme.
+ * For more details refer to sections 5.8.1 and 5.8.4.2. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetRole () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify information on rating scheme.\n
+ * For more details refer to sections 5.8.1 and 5.8.4.4. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetRating () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify information on viewpoint annotation scheme.\n
+ * For more details refer to sections 5.8.1 and 5.8.4.5. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetViewpoint () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IContentComponent objects that specifies the properties
+ * of one media content component contained in this Adaptation Set.\n
+ * For more details refer to section 5.3.4. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IContentComponent objects
+ */
+ virtual const std::vector<IContentComponent *>& GetContentComponent () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IBaseUrl objects that specify base URLs that can be used for reference resolution and alternative URL selection.\n
+ * For more details refer to the description in section 5.6. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IBaseUrl objects
+ */
+ virtual const std::vector<IBaseUrl *>& GetBaseURLs () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentBase object that specifies default Segment Base information.\n
+ * Information in this element is overridden by information in the <tt><b>Representation.SegmentBase</b></tt>, if present.\n
+ * For more details see section 5.3.9. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentBase object
+ */
+ virtual ISegmentBase* GetSegmentBase () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentList object that specifies default Segment List information.\n
+ * Information in this element is overridden by information in the <tt><b>Representation.SegmentList</b></tt>, if present.\n
+ * For more details see section 5.3.9. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentList object
+ */
+ virtual ISegmentList* GetSegmentList () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentTemplate object that specifies default Segment Template information.\n
+ * Information in this element is overridden by information in the <tt><b>Representation.SegmentTemplate</b></tt>, if present.\n
+ * For more details see section 5.3.9. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentTemplate object
+ */
+ virtual ISegmentTemplate* GetSegmentTemplate () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IRepresentation objects that specifies a Representation.\n
+ * At least one Representation element shall be present in each Adaptation Set. The actual element may however be part of a remote element.\n
+ * For more details refer to section 5.3.5. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IRepresentation objects
+ */
+ virtual const std::vector<IRepresentation *>& GetRepresentation () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies a reference to external <tt><b>AdaptationSet</b></tt> element.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkHref () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the processing instructions, which can be either \c \"onLoad\" or \c \"onRequest\".
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkActuate () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies an unique identifier for this Adaptation Set in the scope of the Period.
+ * The attribute shall be unique in the scope of the containing Period. \n\n
+ * The attribute shall not be present in a remote element.\n\n
+ * If not present, no identifier for the Adaptation Set is specified.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetId () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies an identifier for the group that is unique in the scope of the containing Period.\n
+ * For details refer to section 5.3.3.1. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetGroup () const = 0;
+
+ /**
+ * Returns a reference to a string that declares the language code for this Adaptation Set. The syntax and semantics according to IETF RFC 5646 shall be used.\n
+ * If not present, the language code may be defined for each media component or it may be unknown.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetLang () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the media content component type for this Adaptation Set.
+ * A value of the top-level Content-type 'type' value as defined in RFC1521, Clause 4 shall be taken.\n
+ * If not present, the media content component type may be defined for each media component or it may be unknown.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetContentType () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the picture aspect ratio of the video media component type,
+ * in the form of a string consisting of two integers separated by ':', e.g., \c \"16:9\". When this attribute is present,
+ * and the attributes \c \@width and \c \@height for the set of Representations are also present, the picture aspect ratio as specified by this attribute shall be the same
+ * as indicated by the values of \c \@width, \c \@height, and \c \@sar, i.e. it shall express the same ratio as (\c \@width * \em sarx): (\c \@height * \em sary),
+ * with \em sarx the first number in \c \@sar and \em sary the second number.\n
+ * If not present, the picture aspect ratio may be defined for each media component or it may be unknown.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetPar () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the minimum \c \@bandwidth value in all Representations in this Adaptation Set.
+ * This value has the same units as the \c \@bandwidth attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMinBandwidth () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the maximum \c \@bandwidth value in all Representations in this Adaptation Set.
+ * This value has the same units as the \c \@bandwidth attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMaxBandwidth () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the minimum \c \@width value in all Representations in this Adaptation Set.
+ * This value has the same units as the \c \@width attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMinWidth () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the maximum \c \@width value in all Representations in this Adaptation Set.
+ * This value has the same units as the \c \@width attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMaxWidth () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies specifies the minimum \c \@height value in all Representations in this Adaptation Set.
+ * This value has the same units as the \c \@height attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMinHeight () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies specifies the maximum \c \@height value in all Representations in this Adaptation Set.
+ * This value has the same units as the \c \@height attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMaxHeight () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the minimum \c \@framerate value in all Representations in this Adaptation Set.
+ * This value is encoded in the same format as the \c \@frameRate attribute.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMinFramerate () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the maximum \c \@framerate value in all Representations in this Adaptation Set.
+ * This value is encoded in the same format as the \c \@frameRate attribute.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMaxFramerate () const = 0;
+
+ /**
+ * Because of the fact that the type of the attribute \em segmentAlignment is a union of \c xs:unsignedInt and \c xs:boolean this method is needed to determine
+ * whether its value is of type bool or integer.\n
+ * If and only if \c 'true' is returned, an invocation of HasSegmentAlignment() is neccessary to retrieve the bool value.\n
+ * If and only if \c 'false' is returned, an invocation of GetSegmentAlignment() is neccessary to retrieve the integer value.
+ * @return a bool value
+ */
+ virtual bool SegmentAlignmentIsBoolValue () const = 0;
+
+ /**
+ * If the return value of SegmentAlignmentIsBoolValue() equals \c 'true' the bool value returned by this method
+ * specifies whether Segment Alignment is used or not. This is only valid for Adaptation Sets containing Representations with multiple media content components.
+ * If \c 'true' is returned, this specifies that for any two Representations,
+ * X and Y, within the same Adaptation Set, the <em>m</em>-th Segment of X and the <em>n</em>-th Segment of Y
+ * are non-overlapping (as defined in section 4.5.2 of <em>ISO/IEC 23009-1, Part 1, 2012</em>) whenever \em m is not equal to \em n.
+ * @return a bool value
+ */
+ virtual bool HasSegmentAlignment () const = 0;
+
+ /**
+ * If the return value of SegmentAlignmentIsBoolValue() equals \c 'false' this specifies that for any two Representations,
+ * X and Y, within the same Adaptation Set, the <em>m</em>-th Segment of X and the <em>n</em>-th Segment of Y
+ * are non-overlapping (as defined in section 4.5.2 of <em>ISO/IEC 23009-1, Part 1, 2012</em>) whenever \em m is not equal to \em n.\n\n
+ * For Adaptation Sets containing Representations with a single media content component, when two <b><tt>AdaptationSet</tt></b> elements within a Period share the same
+ * integer value for this attribute - <b>which is the return value of this method</b>, then for any two Representations, X and Y, within the union of the two Adaptation Sets,
+ * the <em>m</em>-th Segment of X and the <em>n</em>-th Segment of Y are non-overlapping (as defined in section 4.5.2 of <em>ISO/IEC 23009-1, Part 1, 2012</em>)
+ * whenever \em m is not equal to \em n.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetSegmentAligment () const = 0;
+
+ /**
+ * Because of the fact that the type of the attribute \em subsegmentAlignment is a union of \c xs:unsignedInt and \c xs:boolean this method is needed to determine
+ * whether its value is of type bool or integer.\n
+ * If and only if \c 'true' is returned, an invocation of HasSubsegmentAlignment() is neccessary to retrieve the bool value.\n
+ * If and only if \c 'false' is returned, an invocation of GetSubsegmentAlignment() is neccessary to retrieve the integer value.
+ * @return a bool value
+ */
+ virtual bool SubsegmentAlignmentIsBoolValue () const = 0;
+
+ /**
+ * If and only if the return value of SubsegmentAlignmentIsBoolValue() equals \c 'true' the bool value returned by this method
+ * specifies whether Subsegment Alignment is used or not.
+ * If \c 'true' is returned, the following conditions shall be satisfied:
+ * <ul>
+ * <li>Each Media Segment shall be indexed (i.e. either it contains a Segment index or there is an Index Segment providing an index for the Media Segment)
+ * <li>For any two Representations, X and Y, within the same Adaptation Set, the <em>m</em>-th Subsegment of X and the <em>n</em>-th Subsegment of Y are
+ * non-overlapping (as defined in section 4.5.2 of <em>ISO/IEC 23009-1, Part 1, 2012</em>) whenever \em m is not equal to \em n.
+ * </ul>
+ * @return a bool value
+ */
+ virtual bool HasSubsegmentAlignment () const = 0;
+
+ /**
+ * If the return value of SubsegmentAlignmentIsBoolValue() equals \c 'false' the following conditions shall be satisfied:
+ * <ul>
+ * <li>Each Media Segment shall be indexed (i.e. either it contains a Segment index or there is an Index Segment providing an index for the Media Segment)
+ * <li>For any two Representations, X and Y, within the same Adaptation Set, the <em>m</em>-th Subsegment of X and the <em>n</em>-th Subsegment of Y are
+ * non-overlapping (as defined in section 4.5.2 of <em>ISO/IEC 23009-1, Part 1, 2012</em>) whenever \em m is not equal to \em n.
+ * <li>For Adaptation Sets containing Representations with a single media content component, when two <tt><b>AdaptationSet</b></tt> elements within a Period share
+ * the same integer value for this attribute - <b>which is the return value of this method</b>, then for any two Representations, X and Y,
+ * within the union of the two Adaptation Sets, the <em>m</em>-th Subsegment of X and the <em>n</em>-th Subsegment of Y are non-overlapping
+ * (as defined in section 4.5.2 of <em>ISO/IEC 23009-1, Part 1, 2012</em>) whenever m is not equal to n.
+ * </ul>
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetSubsegmentAlignment () const = 0;
+
+ /**
+ * Returns a unsigned integer that when greater than 0, specifies that each Subsegment with \c SAP_type greater than 0 starts with a SAP of type
+ * less than or equal to the value of \c \@subsegmentStartsWithSAP. A Subsegment starts with SAP when the Subsegment contains a SAP,
+ * and for the first SAP, I<sub>SAU</sub> is the index of the first access unit that follows I<sub>SAP</sub> , and I<sub>SAP</sub> is contained in the Subsegment.\n
+ * The semantics of \c \@subsegmentStartsWithSAP equal to 0 are unspecified.
+ * @return an unsigned integer
+ */
+ virtual uint8_t GetSubsegmentStartsWithSAP () const = 0;
+
+ /**
+ * Returns a bool value that when true, the following applies:
+ * <ul>
+ * <li>All Representations in the Adaptation Set shall have the same number \em M of Media Segments;
+ * <li>Let \em R<sub>1</sub> , \em R<sub>2</sub> , ..., \em R<sub>N</sub> be all the Representations within the Adaptation Set.
+ * <li>Let
+ * <ul>
+ * <li><em>S<sub>i,j</sub></em> , for \em j > 0, be the \em j<sup>th</sup> Media Segment in the \em i<sup>th</sup> Representation (i.e., \em R<sub>i</sub> )
+ * <li>if present, let <em>S<sub>i,0</sub></em> be the Initialization Segment in the \em i<sup>th</sup> Representation, and
+ * <li>if present, let \em B<sub>i</sub> be the Bitstream Switching Segment in the \em i<sup>th</sup> Representation.
+ * </ul>
+ * <li>The sequence of
+ * <ul>
+ * <li>any Initialization Segment, if present, in the Adaptation Set, with,
+ * <li> if Bitstream Switching Segments are present, \n
+ * <em> B<sub>i(1)</sub>, S<sub>i(1),1</sub>, B<sub>i(2)</sub>, S<sub>i(2),2</sub>, ...,
+ * B<sub>i(k)</sub>, S<sub>i(k),k</sub>, ..., B<sub>i(M)</sub>, S<sub>i(M),M</sub> </em>
+ * <li>else \n
+ * S<sub>i(1),1</sub>, S<sub>i(2),2</sub>, ..., S<sub>i(k),k</sub>, ..., S<sub>i(M),M</sub>,
+ * </ul>
+ * wherein any \em i(k) for all \em k values in the range of 1 to \em M, respectively, is an integer value in the range of 1 to \em N,
+ * results in a \"conforming Segment sequence\" as defined in section 4.5.3 of <em>ISO/IEC 23009-1, Part 1, 2012</em>
+ * with the media format as specified in the \c \@mimeType attribute.
+ * </ul>
+ * More detailed rules may be defined for specific media formats.
+ * @return a bool value
+ */
+ virtual bool GetBitstreamSwitching () const = 0;
+ };
+ }
+}
+
+#endif /* IADAPTATIONSET_H_ */ \ No newline at end of file
diff --git a/libdash/include/IBaseUrl.h b/libdash/include/IBaseUrl.h
new file mode 100644
index 00000000..206ad14b
--- /dev/null
+++ b/libdash/include/IBaseUrl.h
@@ -0,0 +1,69 @@
+/**
+ * @class dash::mpd::IBaseUrl
+ * @brief This interface is needed for accessing the attributes and the content of <tt><b>BaseURL</b></tt> elements
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.6
+ * @details The BaseURL element may be used to specify one or more common locations for Segments and other resources.\n
+ * A URL that can be used as Base URL. The content of this element is a URI string as described in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.6.4
+ * @see dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IBASEURL_H_
+#define IBASEURL_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "ISegment.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IBaseUrl : public virtual IMPDElement
+ {
+ public:
+ virtual ~IBaseUrl(){}
+
+ /**
+ * Returns the reference to a string representing a BaseURL
+ * @return a reference to a string
+ */
+ virtual const std::string& GetUrl () const = 0;
+
+ /**
+ * Returns the reference to a string that specifies a relationship between Base URLs such that \c <b>BaseURL</b> elements with the same
+ * \c \@serviceLocation value are likely to have their URLs resolve to services at a common network location, for example a common Content Delivery Network
+ * @return a reference to a string
+ */
+ virtual const std::string& GetServiceLocation () const = 0;
+
+ /**
+ * Returns the reference to a string that represents a byte range. \n
+ * If present specifies HTTP partial GET requests may alternatively be issued by adding the byte range into a
+ * regular HTTP-URL based on the value of this attribute and the construction rules in Annex E.2. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.\n
+ * If not present, HTTP partial GET requests may not be converted into regular GET requests. \n
+ * \b NOTE: Such alternative requests are expected to not be used unless the DASH application requires this. For more details refer to Annex E.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetByteRange () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object which represents a media segment that can be downloaded. Should be used for single base urls inside
+ * a representation.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the media segment
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* ToMediaSegment (const std::vector<IBaseUrl *>& baseurls) const = 0;
+ };
+ }
+}
+
+#endif /* IBASEURL_H_ */ \ No newline at end of file
diff --git a/libdash/include/IChunk.h b/libdash/include/IChunk.h
new file mode 100644
index 00000000..76b3314b
--- /dev/null
+++ b/libdash/include/IChunk.h
@@ -0,0 +1,88 @@
+/**
+ * @class dash::network::IChunk
+ * @brief This interface is needed for accessing the information belonging to a dash::network::IChunk object
+ * @details Provides specific information of a chunk, e.g., URI, Hostname, Port, Path and optional Range that
+ * that are needed to download this chunk.
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ICHUNK_H_
+#define ICHUNK_H_
+
+#include "config.h"
+#include "IHTTPTransaction.h"
+
+namespace dash
+{
+ namespace network
+ {
+ class IChunk
+ {
+ public:
+ virtual ~IChunk(){}
+
+ /**
+ * Returns a reference to a string that specifies the absolute URI to this chunk
+ * @return a reference to a string
+ */
+ virtual std::string& AbsoluteURI () = 0;
+
+ /**
+ * Returns a reference to a string that specifies the host of this chunk
+ * @return a reference to a string
+ */
+ virtual std::string& Host () = 0;
+
+ /**
+ * Returns an unsigned integer representing the port belonging to this chunk
+ * @return an unsigned integer
+ */
+ virtual size_t Port () = 0;
+
+ /**
+ * Returns a reference to a string that specifies the path to this chunk
+ * @return a reference to a string
+ */
+ virtual std::string& Path () = 0;
+
+ /**
+ * Returns a reference to a string that specifies the byte range belonging to this chunk
+ * @return a reference to a string
+ */
+ virtual std::string& Range () = 0;
+
+ /**
+ * Returns an unsigned integer representing the start byte of the byte range that belongs to this chunk
+ * @return an unsigned integer
+ */
+ virtual size_t StartByte () = 0;
+
+ /**
+ * Returns an unsigned integer representing the end byte of the byte range that belongs to this chunk
+ * @return an unsigned integer
+ */
+ virtual size_t EndByte () = 0;
+
+ /**
+ * Returns a bool value that represents whether this chunk has a byte range or not
+ * @return a bool value
+ */
+ virtual bool HasByteRange () = 0;
+
+ /**
+ * Returns the type of a <b>HTTP Request/Response Transaction</b> in <em>ISO/IEC 23009-1, Part 1, 2012</em>, annex D.4.3, Table D.2
+ * @return a dash::metrics::HTTPTransactionType
+ */
+ virtual dash::metrics::HTTPTransactionType GetType () = 0;
+ };
+ }
+}
+
+#endif /* ICHUNK_H_ */ \ No newline at end of file
diff --git a/libdash/include/IConnection.h b/libdash/include/IConnection.h
new file mode 100644
index 00000000..4150d562
--- /dev/null
+++ b/libdash/include/IConnection.h
@@ -0,0 +1,69 @@
+/**
+ * @class dash::network::IConnection
+ * @brief The connection interface can be used to enable the download of segments through external connections.
+ * @details This interface enables the extension of libdash to download segment through, e.g., SPDY, CCN etc.
+ * @see dash::network::IChunk
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ICONNECTION_H_
+#define ICONNECTION_H_
+
+#include "config.h"
+
+#include "IChunk.h"
+#include "IDASHMetrics.h"
+
+namespace dash
+{
+ namespace network
+ {
+ class IConnection : public virtual dash::metrics::IDASHMetrics
+ {
+ public:
+ virtual ~IConnection(){}
+
+ /**
+ * This function should read a block of bytes from the specified chunk.
+ * @param data pointer to a block of memory
+ * @param len size of the memory block that can be used by the method
+ * @param chunk the dash::network::IChunk object from which data should be read
+ * @return amount of data that has been read
+ */
+ virtual int Read (uint8_t *data, size_t len, IChunk *chunk) = 0;
+
+ /**
+ * This function should peek a block of bytes from the specified chunk.
+ * @param data pointer to a block of memory
+ * @param len size of the memory block that can be used by the method
+ * @param chunk the dash::network::IChunk object from which data should be peeked
+ * @return amount of data that has been peeked
+ */
+ virtual int Peek (uint8_t *data, size_t len, IChunk *chunk) = 0;
+
+ /**
+ * This function should get the average speed of download for the specified chunk.
+ * It should be called after the whole chunk has been downloaded.
+ * @return average speed of download in bps.
+ */
+ virtual double GetAverageDownloadingSpeed () = 0;
+
+ /**
+ * This function should get the time taken for the download of the specified chunk.
+ * It should be called after the whole chunk has been downloaded.
+ * @return average time of download in seconds.
+ */
+ virtual double GetDownloadingTime () = 0;
+
+ };
+ }
+}
+
+#endif /* ICONNECTION_H_ */
diff --git a/libdash/include/IContentComponent.h b/libdash/include/IContentComponent.h
new file mode 100644
index 00000000..9f3be97f
--- /dev/null
+++ b/libdash/include/IContentComponent.h
@@ -0,0 +1,83 @@
+/**
+ * @class dash::mpd::IContentComponent
+ * @brief This interface is needed for accessing the attributes and elements of the <b><tt>ContentComponent</tt></b> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.4.2, table 6
+ * @details Each Adaptation Set contains one or more media content components. The properties of each media content
+ * component are described by a <b><tt>ContentComponent</tt></b> element or may be described directly on the <b><tt>AdaptationSet</tt></b> element
+ * if only one media content component is present in the Adaptation Set. <b><tt>ContentComponent</tt></b> elements are contained in an <b><tt>AdaptationSet</tt></b> element.
+ * @see dash::mpd::IMPDElement dash::mpd::IDescriptor dash::mpd::IAdaptationSet
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ICONTENTCOMPONENT_H_
+#define ICONTENTCOMPONENT_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IDescriptor.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IContentComponent : public virtual IMPDElement
+ {
+ public:
+ virtual ~IContentComponent(){}
+
+
+ /**
+ * @copydoc dash::mpd::IAdaptationSet::GetAccessibility()
+ */
+ virtual const std::vector<IDescriptor *>& GetAccessibility () const = 0;
+
+ /**
+ * @copydoc dash::mpd::IAdaptationSet::GetRole()
+ */
+ virtual const std::vector<IDescriptor *>& GetRole () const = 0;
+
+ /**
+ * @copydoc dash::mpd::IAdaptationSet::GetRating()
+ */
+ virtual const std::vector<IDescriptor *>& GetRating () const = 0;
+
+ /**
+ * @copydoc dash::mpd::IAdaptationSet::GetViewpoint()
+ */
+ virtual const std::vector<IDescriptor *>& GetViewpoint () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies an identifier for this media component.
+ * The attribute shall be unique in the scope of the containing Adaptation Set.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetId () const = 0;
+
+ /**
+ * @copydoc dash::mpd::IAdaptationSet::GetLang()
+ */
+ virtual const std::string& GetLang () const = 0;
+
+ /**
+ * @copydoc dash::mpd::IAdaptationSet::GetContentType()
+ */
+ virtual const std::string& GetContentType () const = 0;
+
+ /**
+ * @copydoc dash::mpd::IAdaptationSet::GetPar()
+ */
+ virtual const std::string& GetPar () const = 0;
+
+ };
+ }
+}
+
+#endif /* ICONTENTCOMPONENT_H_ */ \ No newline at end of file
diff --git a/libdash/include/IDASHManager.h b/libdash/include/IDASHManager.h
new file mode 100644
index 00000000..5e4688fb
--- /dev/null
+++ b/libdash/include/IDASHManager.h
@@ -0,0 +1,45 @@
+/**
+ * @class dash::IDASHManager
+ * @brief This interface is needed for generating an IMPD object from the information found in a MPD file
+ * @details By invoking the method Open(char *path) all the information found in the MPD file specified by \em path is mapped to corresponding IMPD objects.
+ * @see dash::mpd::IMPD
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IDASHMANAGER_H_
+#define IDASHMANAGER_H_
+
+#include "config.h"
+
+#include "IMPD.h"
+#include "IConnection.h"
+
+namespace dash
+{
+ class IDASHManager
+ {
+ public:
+ virtual ~IDASHManager(){}
+
+ /**
+ * Returns a pointer to dash::mpd::IMPD object representing the the information found in the MPD file specified by \em path
+ * @param path A URI to a MPD file
+ * @return a pointer to an dash::mpd::IMPD object
+ */
+ virtual mpd::IMPD* Open (char *path, std::string mURL = "") = 0;
+
+ /**
+ * Frees allocated memory and deletes the DashManager
+ */
+ virtual void Delete () = 0;
+ };
+}
+
+#endif /* IDASHMANAGER_H_ */
diff --git a/libdash/include/IDASHMetrics.h b/libdash/include/IDASHMetrics.h
new file mode 100644
index 00000000..748af7a5
--- /dev/null
+++ b/libdash/include/IDASHMetrics.h
@@ -0,0 +1,48 @@
+/**
+ * @class dash::metrics::IDASHMetrics
+ * @brief The connection interface can be used to retrieve DASH Metrics.
+ * @details The <em>TCP Connection</em> list and <em>HTTP Request/Response Transactions</em> can be retrieved. \n
+ * This basically corresponds to the information neeed for <tt>Observation point 1</tt> as defined in <em>ISO/IEC 23009-1, Part 1, 2012</em>, annex D.3.2.
+ * @see dash::metrics::ITCPConnection dash::metrics::IHTTPConnection
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IDASHMETRICS_H_
+#define IDASHMETRICS_H_
+
+#include "config.h"
+#include "IHTTPTransaction.h"
+#include "ITCPConnection.h"
+
+namespace dash
+{
+ namespace metrics
+ {
+ class IDASHMetrics
+ {
+ public:
+ virtual ~IDASHMetrics(){}
+
+ /**
+ * This function returns a list of DASH Metrics as defined in <em>ISO/IEC 23009-1, Part 1, 2012</em>, annex D.4.2.
+ * @return a list of dash::metrics::ITCPConnection Metrics Objects
+ */
+ virtual const std::vector<ITCPConnection *>& GetTCPConnectionList () const = 0;
+
+ /**
+ * This function returns a list of DASH Metrics as defined in <em>ISO/IEC 23009-1, Part 1, 2012</em>, annex D.4.3.
+ * @return a list of dash::metrics::IHTTPConnection Metrics Objets
+ */
+ virtual const std::vector<IHTTPTransaction *>& GetHTTPTransactionList () const = 0;
+ };
+ }
+}
+
+#endif /* IDASHMETRICS_H_ */
diff --git a/libdash/include/IDescriptor.h b/libdash/include/IDescriptor.h
new file mode 100644
index 00000000..3983e41e
--- /dev/null
+++ b/libdash/include/IDescriptor.h
@@ -0,0 +1,68 @@
+/**
+ * @class dash::mpd::IDescriptor
+ * @brief This interface is needed for accessing the attributes of the <tt><b>Descriptor</b></tt> type as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.8.2, table 21
+ * @details The MPD may contain descriptors that make use of a common syntax as defined in this subclause.
+ * The elements of type \c DescriptorType provide a flexible mechanism for DASH content authors to annotate
+ * and extend the \c <b>MPD</b>, \c <b>Period</b>, \c <b>AdaptationSet</b> and \c <b>Representation</b> elements.\n
+ * The descriptor elements are all structured in the same way, namely they contain a \c \@schemeIdUri attribute that provides a URI to identify the scheme and
+ * an optional attribute \c \@value. The semantics of the element are specific to the scheme employed. The URI identifying the scheme may be a URN or a URL.\n
+ * In <em>ISO/IEC 23009-1, Part 1, 2012</em>, specific elements for descriptors are defined in section 5.8.4.\n
+ * The MPD does not provide any specific information on how to use these elements. It is up to the application that employs DASH formats
+ * to instantiate the description elements with appropriate scheme information. However, this part of ISO/IEC 23009 defines some specific schemes in 5.8.5.\n
+ * DASH applications that use one of these elements must first define a Scheme Identifier in the form of a URI and must then define the value space
+ * for the element when that Scheme Identifier is used. The Scheme Identifier appears in the \c \@schemeIdUri attribute.
+ * In the case that a simple set of enumerated values are required, a text string may be defined for each value and this string must be included
+ * in the \c \@value attribute. If structured data is required then any extension element or attribute may be defined in a separate namespace.\n
+ * Two elements of type DescriptorType are equivalent, if the element name, the value of the \c \@schemeIdUri and the value of the \c \@value attribute are equivalent.
+ * If the \c \@schemeIdUri is a URN, then equivalence shall refer to lexical equivalence as defined in clause 5 of RFC 2141. If the \c \@schemeIdUri is a URL,
+ * then equivalence shall refer to equality on a character-for-character basis as defined in clause 6.2.1 of RFC3986.
+ * If the \c \@value attribute is not present, equivalence is determined by the equivalence for \c \@schemeIdUri only.
+ * Attributes and element in extension namespaces are not used for determining equivalence.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IDESCRIPTOR_H_
+#define IDESCRIPTOR_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IDescriptor : public virtual IMPDElement
+ {
+ public:
+ virtual ~IDescriptor(){}
+
+ /**
+ * Returns a reference to a string that specifies a URI to identify the scheme. \n
+ * The semantics of this element are specific to the scheme specified by this attribute.
+ * The \c \@schemeIdUri may be a URN or URL. When a URL is used, it should also contain a month-date in the form
+ * mmyyyy; the assignment of the URL must have been authorized by the owner of the domain name in that URL on
+ * or very close to that date, to avoid problems when domain names change ownership.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetSchemeIdUri () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the value for the descriptor element. \n
+ * The value space and semantics must be defined by the owners of the scheme identified in the \c \@schemeIdUri attribute.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetValue () const = 0;
+ };
+ }
+}
+
+#endif /* IDESCRIPTOR_H_ */ \ No newline at end of file
diff --git a/libdash/include/IDownloadObserver.h b/libdash/include/IDownloadObserver.h
new file mode 100644
index 00000000..b78198d4
--- /dev/null
+++ b/libdash/include/IDownloadObserver.h
@@ -0,0 +1,58 @@
+/**
+ * @class dash::network::IDownloadObserver
+ * @brief This interface is needed for informing the application of the state of the download process.
+ * @details Informs the application about the download rate and the state of the download.
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IDOWNLOADOBSERVER_H_
+#define IDOWNLOADOBSERVER_H_
+
+#include "config.h"
+
+namespace dash
+{
+ namespace network
+ {
+ enum DownloadState
+ {
+ NOT_STARTED = 0,
+ IN_PROGRESS = 1,
+ REQUEST_ABORT = 2,
+ ABORTED = 3,
+ COMPLETED = 4
+ };
+ class IDownloadObserver
+ {
+ public:
+ virtual ~IDownloadObserver(){}
+
+ /**
+ * Informs the dash::network::IDownloadObserver object that the download rate has changed.
+ * @param bytesDownloaded the number of downloaded bytes
+ */
+ virtual void OnDownloadRateChanged (uint64_t bytesDownloaded) = 0;
+
+ /**
+ * Informs the dash::network::IDownloadObserver object that the downloading time has changed.
+ * @param downloadingTime the time taken for the downloading of this segment in seconds
+ */
+ virtual void OnDownloadTimeChanged (double downloadingTime) = 0;
+
+ /**
+ * Informs the dash::network::IDownloadObserver object that the download state has changed.
+ * @param state the download state
+ */
+ virtual void OnDownloadStateChanged (DownloadState state) = 0;
+ };
+ }
+}
+
+#endif /* IDOWNLOADOBSERVER_H_ */
diff --git a/libdash/include/IDownloadObserver.h.save b/libdash/include/IDownloadObserver.h.save
new file mode 100644
index 00000000..0d67c852
--- /dev/null
+++ b/libdash/include/IDownloadObserver.h.save
@@ -0,0 +1,58 @@
+/**
+ * @class dash::network::IDownloadObserver
+ * @brief This interface is needed for informing the application of the state of the download process.
+ * @details Informs the application about the download rate and the state of the download.
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IDOWNLOADOBSERVER_H_
+#define IDOWNLOADOBSERVER_H_
+
+#include "config.h"
+
+namespace dash
+{
+ namespace network
+ {
+ enum DownloadState
+ {
+ NOT_STARTED = 0,
+ IN_PROGRESS = 1,
+ REQUEST_ABORT = 2,
+ ABORTED = 3,
+ COMPLETED = 4
+ };
+ class IDownloadObserver
+ {
+ public:
+ virtual ~IDownloadObserver(){}
+
+ /**
+ * Informs the dash::network::IDownloadObserver object that the download rate has changed.
+ * @param bytesDownloaded the number of downloaded bytes
+ */
+ virtual void OnDownloadRateChanged (uint64_t bytesDownloaded) = 0;
+
+ /**
+ * Informs the dash::network::IDownloadObserver object that the download rate has changed.
+ * @param bytesDownloaded the number of downloaded bytes
+ */
+ virtual void OnDownloadTimeChanged (double ) = 0;
+
+ /**
+ * Informs the dash::network::IDownloadObserver object that the download state has changed.
+ * @param state the download state
+ */
+ virtual void OnDownloadStateChanged (DownloadState state) = 0;
+ };
+ }
+}
+
+#endif /* IDOWNLOADOBSERVER_H_ */
diff --git a/libdash/include/IDownloadableChunk.h b/libdash/include/IDownloadableChunk.h
new file mode 100644
index 00000000..d7189cd2
--- /dev/null
+++ b/libdash/include/IDownloadableChunk.h
@@ -0,0 +1,93 @@
+/**
+ * @class dash::network::IDownloadableChunk
+ * @brief This interface is needed for starting and abortinng downloads, reading, peeking and attaching dash::network::IDownloadObservers to this Chunk
+ * @details Enables the download of media segments with the internal libcurl connection or with external connections that can be passed to this interface
+ * @see dash::network::IDownloadObserver dash::network::IConnection dash::network::IChunk
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IDOWNLOADABLECHUNK_H_
+#define IDOWNLOADABLECHUNK_H_
+
+#include "config.h"
+
+#include "IDownloadObserver.h"
+#include "IConnection.h"
+#include "IChunk.h"
+#include "IDASHMetrics.h"
+
+namespace dash
+{
+ namespace network
+ {
+ class IDownloadableChunk : public IChunk, public dash::metrics::IDASHMetrics
+ {
+ public:
+ virtual ~IDownloadableChunk(){}
+
+ /**
+ * Starts the download of this chunk and returns a bool value whether the starting of the download was possible or not
+ * @return a bool value
+ */
+ virtual bool StartDownload () = 0;
+
+ /**
+ * Starts the download of this chunk and returns a bool value whether the starting of the download was possible or not
+ * @param connection the dash::network::IConnection that shall be used for downloading
+ * @return a bool value
+ */
+ virtual bool StartDownload (IConnection *connection) = 0;
+
+ /**
+ * Aborts the download of a chunk
+ */
+ virtual void AbortDownload () = 0;
+
+ /**
+ * Reads
+ * @param data pointer to a block of memory
+ * @param len size of the memory block that can be used by the method
+ * @return amount of data that has been read
+ */
+ virtual int Read (uint8_t *data, size_t len) = 0;
+
+ /**
+ * Reads
+ * @param data pointer to a block of memory
+ * @param len size of the memory block that can be used by the method
+ * @return amount of data that has been peeked
+ */
+ virtual int Peek (uint8_t *data, size_t len) = 0;
+
+ /**
+ * Reads
+ * @param data pointer to a block of memory
+ * @param len size of the memory block that can be used by the method
+ * @param offset the offset to start with
+ * @return amount of data that has been peeked
+ */
+ virtual int Peek (uint8_t *data, size_t len, size_t offset) = 0;
+
+ /**
+ * Attaches a dash::network::IDownloadObserver to this Chunk
+ * @param observer a dash::network::IDownloadObserver
+ */
+ virtual void AttachDownloadObserver (IDownloadObserver *observer) = 0;
+
+ /**
+ * Detaches a dash::network::IDownloadObserver from this Chunk
+ * @param observer a dash::network::IDownloadObserver
+ */
+ virtual void DetachDownloadObserver (IDownloadObserver *observer) = 0;
+ };
+ }
+}
+
+#endif /* IDOWNLOADABLECHUNK_H_ */ \ No newline at end of file
diff --git a/libdash/include/IHTTPTransaction.h b/libdash/include/IHTTPTransaction.h
new file mode 100644
index 00000000..756a1550
--- /dev/null
+++ b/libdash/include/IHTTPTransaction.h
@@ -0,0 +1,56 @@
+/**
+ * @class dash::metrics::IHTTPTransaction
+ * @brief This interface is needed for accessing the attributes and the content of a <tt><b>HTTP Request/Response Transaction</b></tt>
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, annex D.4.3
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IHTTPTRANSACTION_H_
+#define IHTTPTRANSACTION_H_
+
+#include "config.h"
+#include "IThroughputMeasurement.h"
+
+namespace dash
+{
+ namespace metrics
+ {
+ enum HTTPTransactionType
+ {
+ MPD,
+ XLinkEpansion,
+ InitializationSegment,
+ IndexSegment,
+ MediaSegment,
+ BitstreamSwitchingSegment,
+ Other
+ };
+
+ class IHTTPTransaction
+ {
+ public:
+ virtual ~IHTTPTransaction (){}
+
+ virtual uint32_t TCPId () const = 0;
+ virtual HTTPTransactionType Type () const = 0;
+ virtual const std::string& OriginalUrl () const = 0;
+ virtual const std::string& ActualUrl () const = 0;
+ virtual const std::string& Range () const = 0;
+ virtual const std::string& RequestSentTime () const = 0;
+ virtual const std::string& ResponseReceivedTime () const = 0;
+ virtual uint16_t ResponseCode () const = 0;
+ virtual uint64_t Interval () const = 0;
+ virtual const std::vector<IThroughputMeasurement *>& ThroughputTrace () const = 0;
+ virtual const std::string& HTTPHeader () const = 0;
+ };
+ }
+}
+
+#endif /* IHTTPTRANSACTION_H_ */
diff --git a/libdash/include/IMPD.h b/libdash/include/IMPD.h
new file mode 100644
index 00000000..7e69eecf
--- /dev/null
+++ b/libdash/include/IMPD.h
@@ -0,0 +1,207 @@
+/**
+ * @class dash::mpd::IMPD
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>MPD</b></tt> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.1.2, table 3
+ * @details A Media Presentation as described in the <tt><b>MPD</b></tt> consists of (all sections refer to <em>ISO/IEC 23009-1, Part 1, 2012</em>)
+ * <ul>
+ * <li>A sequence of one or more Periods as described in section 5.3.2.
+ * <li>Each Period contains one or more Adaptation Sets as described in 5.3.3.
+ * In case an Adaptation Set contains multiple media content components, then each media content component is described individually
+ * as defined in 5.3.4.
+ * <li>Each Adaptation Set contains one or more Representations as described in 5.3.5.
+ * <li>A Representation may contain one or more Sub-Representations as described in 5.3.6.
+ * <li>Adaptation Sets, Representations and Sub-Representations share common attributes and elements that are described in 5.3.7.
+ * <li>Each Period may contain one or more Subsets that restrict combination of Adaptation Sets for presentation. Subsets are described in 5.3.8.
+ * <li>Each Representation consists of one or more Segments described in 6. Segment Information is introduced in 5.3.9.
+ * Segments contain media data and/or metadata to access, decode and present the included media content.
+ * Representations may also include Sub-Representations as defined in 5.3.6 to describe and extract partial information from a Representation.
+ * <li>Each Segment consists of one or more Subsegments. Subsegments are described in 6.2.3.2.
+ * </ul>
+ * @see dash::mpd::IMPDElement dash::mpd::IProgramInformation dash::mpd::IBaseUrl dash::mpd::IPeriod dash::mpd::IMetrics
+ * dash::mpd::IRepresentationBase
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IMPD_H_
+#define IMPD_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IProgramInformation.h"
+#include "IBaseUrl.h"
+#include "IPeriod.h"
+#include "IMetrics.h"
+#include "IDASHMetrics.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IMPD : public virtual IMPDElement, public dash::metrics::IDASHMetrics
+ {
+ public:
+ virtual ~IMPD(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IProgramInformation objects that specify descriptive information about the program.\n
+ * For more details refer to the description in section 5.7. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IProgramInformation objects
+ */
+ virtual const std::vector<IProgramInformation *>& GetProgramInformations () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IBaseUrl objects that specify Base URLs that can be used for reference resolution
+ * and alternative URL selection. \n
+ * For more details refer to the description in section 5.6. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IBaseUrl objects
+ */
+ virtual const std::vector<IBaseUrl *>& GetBaseUrls () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specify locations at which the MPD is available.
+ * @return a reference to a vector of strings
+ */
+ virtual const std::vector<std::string>& GetLocations () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IPeriod objects that specify the information of a Period.\n
+ * For more details refer to the description in section 5.3.2. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IPeriod objects
+ */
+ virtual const std::vector<IPeriod *>& GetPeriods () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IMetrics objects that specify the DASH Metrics.\n
+ * For more details see section 5.9. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IPeriod objects
+ */
+ virtual const std::vector<IMetrics *>& GetMetrics () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies an identifier for the Media Presentation. It is recommended to use an identifier that is unique within
+ * the scope in which the Media Presentation is published. \n
+ * If not specified, no MPD-internal identifier is provided. However, for example the URL to the MPD may be used as an identifier for the Media Presentation.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetId () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specifies a list of Media Presentation profiles as described in section 8 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.\n
+ * The contents of this attribute shall conform to either the \c pro-simple or \c pro-fancy productions of RFC6381, Section 4.5, without the enclosing \c DQUOTE characters,
+ * i.e. including only the \c unencodedv or \c encodedv elements respectively.
+ * As profile identifier the URI defined for the conforming Media Presentation profiles as described in section 8 shall be used.
+ * @return a reference to a vector of pointers to dash::mpd::IProgramInformation objects
+ */
+ virtual const std::vector<std::string>& GetProfiles () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies whether the Media Presentation Description may be updated (<tt>\@type=\"dynamic\"</tt>) or not (<tt>\@type=\"static\"</tt>).\n
+ * \b NOTE: Static MPDs are typically used for On-Demand services, whereas dynamic MPDs are used for live services.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetType () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies
+ * <ul>
+ * <li>the anchor for the computation of the earliest availability time (in UTC) for any Segment in the Media Presentation if <tt>\@type=\"dynamic\"</tt>.
+ * <li>the Segment availability start time for all Segments referred to in this MPD if <tt>\@type=\"static\"</tt>.
+ * </ul>
+ * If not present, all Segments described in the MPD shall become available at the time the MPD becomes available.\n
+ * For <tt>\@type=\"dynamic\"</tt> this attribute shall be present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetAvailabilityStarttime () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the latest Segment availability end time for any Segment in the Media Presentation. When not present, the value is unknown.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetAvailabilityEndtime () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the duration of the entire Media Presentation. If the attribute is not present, the duration of the Media Presentation is unknown.
+ * In this case the attribute <tt><b>MPD</b>\@minimumUpdatePeriod</tt> shall be present.\n
+ * This attribute shall be present when the attribute <tt><b>MPD</b>\@minimumUpdatePeriod</tt> is not present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMediaPresentationDuration () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the smallest period between potential changes to the MPD.
+ * This can be useful to control the frequency at which a client checks for updates. \n
+ * If this attribute is not present it indicates that the MPD does not change.
+ * If <tt><b>MPD</b>\@type</tt> is \c \"static\", \c \@minimumUpdatePeriod shall not be present.\n
+ * Details on the use of the value of this attribute are specified in section 5.4. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMinimumUpdatePeriod () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies a common duration used in the definition of the Representation data rate
+ * (see \c \@bandwidth attribute in section 5.3.5.2 of <em>ISO/IEC 23009-1, Part 1, 2012</em>).
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMinBufferTime () const = 0;
+
+
+ /**
+ * Returns a reference to a string that specifies the duration of the time shifting buffer that is guaranteed to be available for a Media Presentation
+ * with type \c \"dynamic\". When not present, the value is infinite. This value of the attribute is undefined if the type attribute is equal to \c \"static\".
+ * @return a reference to a string
+ */
+ virtual const std::string& GetTimeShiftBufferDepth () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies
+ * <ul>
+ * <li>when \c \@type is \c \"dynamic\", a fixed delay offset in time from the presentation time of each access unit that is suggested to be used for presentation of each access unit.\n
+ For more details refer to 7.2.1. \n
+ When not specified, then no value is provided and the client is expected to choose a suitable value.
+ <li>when \c \@type is \c \"static\" the value of the attribute is undefined and may be ignored.
+ </ul>
+ * @return a reference to a string
+ */
+ virtual const std::string& GetSuggestedPresentationDelay () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the maximum duration of any Segment in any Representation in the Media Presentation,
+ * i.e. documented in this MPD and any future update of the MPD. If not present, then the maximum Segment duration shall be the maximum duration of any Segment documented in this MPD.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMaxSegmentDuration () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the maximum duration of any Media Subsegment in any Representation in the Media Presentation.
+ * If not present, the same value as for the maximum Segment duration is implied.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMaxSubsegmentDuration () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::IBaseUrl that specifies the absolute path to the MPD file. \n
+ * This absolute path is needed if there is no BaseURL specified and all other BaseURLs are relative.
+ * @return a pointer to a dash::mpd::IBaseUrl
+ */
+ virtual IBaseUrl* GetMPDPathBaseUrl () const = 0;
+
+ /**
+ * Returns the UTC time in seconds when the MPD was fetched.\n
+ * It is up to the client to check that this value has been set accordingly. \n
+ * See SetFetchTime() for further details.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetFetchTime () const = 0;
+ };
+ }
+}
+
+#endif /* IMPD_H_ */ \ No newline at end of file
diff --git a/libdash/include/IMPDElement.h b/libdash/include/IMPDElement.h
new file mode 100644
index 00000000..616b5448
--- /dev/null
+++ b/libdash/include/IMPDElement.h
@@ -0,0 +1,77 @@
+/**
+ * @class dash::mpd::IMPDElement
+ * @brief This interface is needed for accessing additional nested <em>XML Elements</em> and <em>XML Attributes</em> of some MPD Classes.
+ * @details Due to the fact that some MPD classes may contain additional <em>XML Elements</em>, which are not specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>
+ * but are attached to them, this interface is needed for retrieving these <em>XML Elements</em>. \n\n
+ * See example below for clarification (inspired by the example from section G.7 of <em>ISO/IEC 23009-1, Part 1, 2012</em>).\n
+ * \code{.xml}
+ * <ContentProtection schemeIdUri="http://example.net/052011/drm" additionalAttribute="abc">
+ * <drm:License>http://MoviesSP.example.com/protect?license=kljklsdfiowek</drm:License>
+ * <drm:Content>http://MoviesSP.example.com/protect?content=oyfYvpo8yFyvyo8f</drm:Content>
+ * </ContentProtection>
+ * \endcode
+ * \em ContentProtection is of type <tt><b>DescriptorType</b></tt> which is defined in section 5.8.3 of <em>ISO/IEC 23009-1, Part 1, 2012</em> as follows:
+ * \code{.xml}
+ * <!-- Descriptor -->
+ * <xs:complexType name="DescriptorType">
+ * <xs:sequence>
+ * <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ * </xs:sequence>
+ * <xs:attribute name="schemeIdUri" type="xs:anyURI" use="required"/>
+ * <xs:attribute name="value" type="xs:string"/>
+ * <xs:anyAttribute namespace="##other" processContents="lax"/>
+ * </xs:complexType>
+ * \endcode
+ * So <tt><b>ContentProtection</b></tt> can contain additional <em>XML Elements</em> - here <tt><b>License</b></tt> and <tt><b>Content</b></tt> -
+ * which are of type dash::xml::INode and can be retrieved by calling GetAdditionalSubNodes(). \n
+ * Similarly additional <em>XML Attributes</em> that are not specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>
+ * can be retrieved by calling GetRawAttributes(), but please mind that all attributes
+ * of the Element are returned, not just the additional ones. So in the example above both
+ * attributes \c schemeIDUri (which is specified) and \c additionalAttribute (which is not) are returned.
+ * @see dash::xml::INode
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IMPDELEMENT_H_
+#define IMPDELEMENT_H_
+
+#include "config.h"
+
+#include "INode.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IMPDElement
+ {
+ public:
+ virtual ~IMPDElement (){}
+
+ /**
+ * This method returns a vector of pointers to dash::xml::INode objects which correspond to additional <em>XML Elements</em> of certain
+ * MPD elements. These <em>XML Elements</em> are not specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>. \n
+ * See the example in the class description for details.
+ * @return a vector of pointers to dash::xml::INode objects
+ */
+ virtual const std::vector<xml::INode *> GetAdditionalSubNodes () const = 0;
+
+ /**
+ * This method returns a map with key values and mapped values of type std::string of all <em>XML Attributes</em> of certain MPD elements. \n
+ * Some of these <em>XML Attributes</em> are not specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>. \n
+ * See the example in the class description for details.
+ * @return a map with key values and mapped values, both of type std::string
+ */
+ virtual const std::map<std::string, std::string> GetRawAttributes () const = 0;
+ };
+ }
+}
+
+#endif /* IMPDELEMENT_H_ */
diff --git a/libdash/include/IMetrics.h b/libdash/include/IMetrics.h
new file mode 100644
index 00000000..c1498727
--- /dev/null
+++ b/libdash/include/IMetrics.h
@@ -0,0 +1,62 @@
+/**
+ * @class dash::mpd::IMetrics
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>Metrics</b></tt> element as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.9.2, table 23
+ * @details This part of <em>ISO/IEC 23009</em> does not define mechanisms for reporting metrics, however it does define a set of metrics and a mechanism
+ * that may be used by the service provider to trigger metric collection and reporting at the clients, should a reporting mechanism be available.
+ * The trigger mechanism is based on the <tt><b>Metrics</b></tt> element in the MPD. The element contains the list of DASH Metrics for which the measurements are desired,
+ * the time interval and the granularity for the measurements, as well as the scheme according to which the metric reporting is desired.
+ * @see dash::mpd::IDescriptor dash::mpd::IRange dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IMETRICS_H_
+#define IMETRICS_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IDescriptor.h"
+#include "IRange.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IMetrics : public virtual IMPDElement
+ {
+ public:
+ virtual ~IMetrics(){}
+
+ /**
+ * Returns a refernce to a vector of pointers to dash::mpd::IDescriptor objects that specify information about the requested reporting method and formats.\n
+ * For more details refer to section 5.9.4. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetReportings () const = 0;
+
+ /**
+ * Returns a refernce to a vector of pointers to dash::mpd::IRange objects that specify the time period during which DASH Metrics collection is requested.
+ * When not present, DASH Metrics reporting is requested for the whole duration of the content.
+ * @return a reference to a vector of pointers to dash::mpd::IRange objects
+ */
+ virtual const std::vector<IRange *>& GetRanges () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies all DASH Metrics (as a list of DASH Metric keys as defined in Annex D of <em>ISO/IEC 23009-1, Part 1, 2012</em>, separated by a comma)
+ * that the client is desired to report.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMetrics () const = 0;
+
+ };
+ }
+}
+
+#endif /* IMETRICS_H_ */ \ No newline at end of file
diff --git a/libdash/include/IMultipleSegmentBase.h b/libdash/include/IMultipleSegmentBase.h
new file mode 100644
index 00000000..06d0dff3
--- /dev/null
+++ b/libdash/include/IMultipleSegmentBase.h
@@ -0,0 +1,66 @@
+/**
+ * @class dash::mpd::IMultipleSegmentBase
+ * @brief This interface is needed for accessing the common elements and attributes for the <tt><b>MultipleBaseInformation</b></tt> type
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.2.2, table 12
+ * @details It specifies multiple Segment base information
+ * @see dash::mpd::ISegmentTimeline dash::mpd::ISegmentBase dash::mpd::IURLType
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IMULTIPLESEGMENTBASE_H_
+#define IMULTIPLESEGMENTBASE_H_
+
+#include "config.h"
+
+#include "ISegmentTimeline.h"
+#include "ISegmentBase.h"
+#include "IURLType.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IMultipleSegmentBase : public virtual ISegmentBase
+ {
+ public:
+ virtual ~IMultipleSegmentBase(){}
+
+ /**
+ * Return a pointer to a dash::mpd::ISegmentTimeline object
+ * @return a pointer to a dash::mpd::ISegmentTimeline object
+ */
+ virtual const ISegmentTimeline* GetSegmentTimeline () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::IURLType object that specifies the URL including a possible byte range for the Bitstream Switching Segment.
+ * @return a pointer to a dash::mpd::IURLType object
+ */
+ virtual const IURLType* GetBitstreamSwitching () const = 0;
+
+ /**
+ * Returns a integer specifying the constant approximate Segment duration. \n
+ * All Segments within this Representation element have the same duration unless it is the last Segment within the Period, which could be significantly shorter.\n
+ * The value of the duration in seconds is the division of the value of this attribute and the value of the \c \@timescale attribute associated to the containing Representation.\n
+ * For more details refer to section 5.3.9.5.3. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetDuration () const = 0;
+
+ /**
+ * Returns a integer specifying the number of the first Media Segment in this Representation in the Period.\n
+ * For more details refer to 5.3.9.5.3. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetStartNumber () const = 0;
+ };
+ }
+}
+
+#endif /* IMULTIPLESEGMENTBASE_H_ */ \ No newline at end of file
diff --git a/libdash/include/INode.h b/libdash/include/INode.h
new file mode 100644
index 00000000..96bc6e88
--- /dev/null
+++ b/libdash/include/INode.h
@@ -0,0 +1,97 @@
+/**
+ * @class dash::xml::INode
+ * @brief This interface defines the access to class members of <em>XML Elements</em>.
+ * @details Due to the fact that some MPD elements may contain additional <em>XML Elements</em>, which are not specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>
+ * but are attached to them, this interface is needed to access such an <em>XML Element</em>. \n\n
+ * For clarification see the example in dash::mpd::IMPDElement
+ * @see dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef INODE_H_
+#define INODE_H_
+
+#include "config.h"
+
+namespace dash
+{
+ namespace xml
+ {
+ class INode
+ {
+ public:
+ virtual ~INode (){}
+
+ /**
+ * Returns a reference to a vector of pointers to nested dash::xml::INode objects.
+ * @return a reference to a vector containing pointers to dash::xml::INode objects.
+ */
+ virtual const std::vector<INode *>& GetNodes () const = 0;
+
+ /**
+ * Returns a vector of attribute names belonging to this <em>XML Element</em>
+ * @return a vector of strings
+ */
+ virtual std::vector<std::string> GetAttributeKeys () const = 0;
+
+ /**
+ * Returns the name of this <em>XML Element</em>
+ * @return a reference to string
+ */
+ virtual const std::string& GetName () const = 0;
+
+ /**
+ * Returns the text contained in this <em>XML Element</em>
+ * @return a string
+ */
+ virtual std::string GetText () const = 0;
+
+ /**
+ * Returns a std::map of key value / mapped value pairs corresponding to the <em>XML Attributes</em> and their values of this <em>XML Element</em>
+ * @return a reference to a map with key values and mapped values, both of type std::string
+ */
+ virtual const std::map<std::string, std::string>& GetAttributes () const = 0;
+
+ /**
+ * Returns the type of this <em>XML Element</em> represented by an integer
+ * \code
+ * Start = 1
+ * End = 15
+ * WhiteSpace = 14
+ * Text = 3
+ * \endcode
+ * @return an integer
+ */
+ virtual int GetType () const = 0;
+
+ /**
+ * Returns the value belonging to the <em>XML Attribute</em> specified by key
+ * @param key the name of the desired <em>XML Attribute</em>
+ * @return a reference to a string
+ */
+ virtual const std::string& GetAttributeValue (std::string key) const = 0;
+
+ /**
+ * Returns a bool value determininig whether the <em>XML Attribute</em> name is contained in this <em>XML Element</em> or not.
+ * @param name the name of the desired <em>XML Attribute</em>
+ * @return a bool value
+ */
+ virtual bool HasAttribute (const std::string& name) const = 0;
+
+ /**
+ * Returns a bool value determining whether the <em>XML Element</em> has text or not.
+ * @return a bool value
+ */
+ virtual bool HasText () const = 0;
+ };
+ }
+}
+
+#endif /* INODE_H_ */
diff --git a/libdash/include/IPeriod.h b/libdash/include/IPeriod.h
new file mode 100644
index 00000000..10ec9244
--- /dev/null
+++ b/libdash/include/IPeriod.h
@@ -0,0 +1,156 @@
+/**
+ * @class dash::mpd::IPeriod
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>Period</b></tt> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.2.2, table 4
+ * @details A Media Presentation consists of one or more Periods. A Period is defined by a <tt><b>Period</b></tt> element in the <tt><b>MPD</b></tt> element. \n
+ * The type of the Period, either a regular Period or an Early Available Period, as well as the \em PeriodStart time of a regular Period is determined as follows:
+ * <ul>
+ * <li>If the attribute \c \@start is present in the Period, then the Period is a regular <tt><b>Period</b></tt> and the \em PeriodStart is equal to the value of this attribute.
+ * <li>If the \c \@start attribute is absent, but the previous <tt><b>Period</b></tt> element contains a \c \@duration attribute then then this new Period is also a regular Period.
+ * The start time of the new Period \em PeriodStart is the sum of the start time of the previous Period \em PeriodStart and
+ * the value of the attribute \c \@duration of the previous Period.
+ * <li>If \em (i) \c \@start attribute is absent, and \em (ii) the <tt><b>Period</b></tt> element is the first in the MPD,
+ * and \em (iii) the <tt><b>MPD</b>\@type</tt> is \c 'static', then the \em PeriodStart time shall be set to zero.
+ * <li>If \em (i) \c \@start attribute is absent, and \em (ii) the previous Period element does not contain a \c \@duration attribute or
+ * the <tt><b>Period</b></tt> element is the first in the MPD, and (iii) the <tt><b>MPD</b>\@type</tt> is \c 'dynamic',
+ * then this Period is an Early Available Period (see below for details).
+ * </ul>
+ * For any regular Period the following holds: \em PeriodStart reflects the actual time that should elapse after playing the media of all prior Periods in this Media Presentation
+ * relative to the \em PeriodStart time of the first Period in the Media Presentation. The Period extends until the \em PeriodStart of the next Period, or until the end of the
+ * Media Presentation in the case of the last Period. More specifically, the difference between the \em PeriodStart time of a Period and
+ * either the \em PeriodStart time of the following Period, if this is not the last Period, or the value of the <tt><b>MPD</b>\@mediaPresentationDuration</tt> if this is the last one,
+ * is the presentation duration in Media Presentation time of the media content represented by the Representations in this Period. \n\n
+ * Early Available Periods may be used to advertise initialization of other non-media data before the media data itself is available.
+ * <tt><b>Period</b></tt> elements documenting early available Periods shall not occur before any Period element documenting a regular Period. For Early Available Periods,
+ * any resources that are announced in such a Period element shall be available. Such a <tt><b>Period</b></tt> element shall not contain URLs to Media Segments.
+ * The data contained in such a <tt><b>Period</b></tt> element does not represent a Period in the Media Presentation. Only when the \em PeriodStart time becomes known
+ * through an update of the MPD, such a <tt><b>Period</b></tt> element represents a regular Period. However, an update of the MPD may even remove a <tt><b>Period</b></tt> element
+ * representing an Early Available Period in later updates of the MPD as long as no \em PeriodStart time is associated with the Period. \n\n
+ * To avoid dereferencing of a remote element containing a <tt><b>Period</b></tt> element solely to determine the Period timeline, e.g. in case of seeking,
+ * <tt><b>Period</b>\@start</tt> or previous Period's <tt><b>Period</b>\@duration</tt> should be present in the MPD.
+ * @see dash::mpd::IMPDElement dash::mpd::BaseUrl dash::mpd::IAdaptationSet dash::mpd::ISegmentBase dash::mpd::ISegmentList dash::mpd::ISegmentTemplate dash::mpd::ISubset
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IPERIOD_H_
+#define IPERIOD_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IBaseUrl.h"
+#include "ISegmentBase.h"
+#include "ISegmentList.h"
+#include "ISegmentTemplate.h"
+#include "IAdaptationSet.h"
+#include "ISubset.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IPeriod : public virtual IMPDElement
+ {
+ public:
+ virtual ~IPeriod(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IBaseUrl objects that specify base URLs that can be used for reference resolution and alternative URL selection.\n
+ * For more details refer to the description in section 5.6. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IBaseUrl objects
+ */
+ virtual const std::vector<IBaseUrl *>& GetBaseURLs () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentBase object that specifies default Segment Base information.\n
+ * Information in this element is overridden by information in <tt><b>AdapationSet.SegmentBase</b></tt> and <tt><b>Representation.SegmentBase</b></tt>, if present.\n
+ * For more details see section 5.3.9. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentBase object
+ */
+ virtual ISegmentBase* GetSegmentBase () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentList object that specifies default Segment List information.\n
+ * Information in this element is overridden by information in <tt><b>AdapationSet.SegmentList</b></tt> and <tt><b>Representation.SegmentList</b></tt>, if present.\n
+ * For more details see section 5.3.9. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentList object
+ */
+ virtual ISegmentList* GetSegmentList () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentTemplate object that specifies default Segment Template information.\n
+ * Information in this element is overridden by information in <tt><b>AdapationSet.SegmentTemplate</b></tt> and <tt><b>Representation.SegmentTemplate</b></tt>, if present.
+ * For more details see section 5.3.9. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentTemplate object
+ */
+ virtual ISegmentTemplate* GetSegmentTemplate () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IAdaptationSet objects that specify Adapatation Sets.\n
+ * At least one Adaptation Set shall be present in each Period. However, the actual element may be present only in a remote element if xlink is in use.\n
+ * For more details see section 5.3.3. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IAdaptationSet objects
+ */
+ virtual const std::vector<IAdaptationSet *>& GetAdaptationSets () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::ISubset objects that specify Subsets.\n
+ * For more details see section 5.3.8. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::ISubset objects
+ */
+ virtual const std::vector<ISubset *>& GetSubsets () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies a reference to an external <tt><b>Period</b></tt> element.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkHref () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the processing instructions, which can be either \c \"onLoad\" or \c \"onRequest\".\n
+ * This attribute shall not be present if the \c \@xlink:href attribute is not present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkActuate () const = 0;
+
+ /**
+ * Returns an reference to a string that specifies an identifier for this Period.
+ * The attribute shall be unique in the scope of the Media Presentation.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetId () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the \em PeriodStart time of the Period.The \em PeriodStart time is used as an anchor to determine the MPD start
+ * time of each Media Segment as well as to determine the presentation time of each each access unit in the Media Presentation timeline.\n
+ * If not present, refer to the details in section 5.3.2.1. of <em>ISO/IEC 23009-1, Part 1, 2012</em>
+ * @return a reference to a string
+ */
+ virtual const std::string& GetStart () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the duration of the Period to determine the \em PeriodStart time of the next Period.\n
+ * If not present, refer to the details in section 5.3.2.1. of <em>ISO/IEC 23009-1, Part 1, 2012</em>
+ * @return a reference to a string
+ */
+ virtual const std::string& GetDuration () const = 0;
+
+ /**
+ * When set to \c 'true', this is equivalent as if the <tt><b>AdaptationSet</b>\@bitstreamSwitching</tt> for each Adaptation Set contained in this Period is set to \c 'true'.
+ * In this case, the <tt><b>AdaptationSet</b>\@bitstreamSwitching</tt> attribute shall not be set to \c 'false' for any Adaptation Set in this Period.
+ * @return a bool value
+ */
+ virtual bool GetBitstreamSwitching () const = 0;
+
+ };
+ }
+}
+
+#endif /* IPERIOD_H_ */ \ No newline at end of file
diff --git a/libdash/include/IProgramInformation.h b/libdash/include/IProgramInformation.h
new file mode 100644
index 00000000..58c03750
--- /dev/null
+++ b/libdash/include/IProgramInformation.h
@@ -0,0 +1,69 @@
+/**
+ * @class dash::mpd::IProgramInformation
+ * @brief This interface is needed for accessing the attributes and elements of the Program Information element as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.7.2, table 20
+ * @details Descriptive information on the program may be provided for a Media Presentation within the <tt><b>ProgramInformation</b></tt> element.
+ * When multiple <tt><b>ProgramInformation</b></tt> elements are present, the \c \@lang attribute shall be present and
+ * each element shall describe the Media Presentation sufficiently in the language defined by the value of the \c \@lang attribute.
+ * For each language, the program information may specify title, source of the program, copyright information, and a URL to more information.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IPROGRAMINFORMATION_H_
+#define IPROGRAMINFORMATION_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IProgramInformation : public virtual IMPDElement
+ {
+ public:
+ virtual ~IProgramInformation(){}
+
+ /**
+ * Returns a reference to a string that specifies the title for the Media Presentation.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetTitle () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies information about the original source (for example content provider) of the Media Presentation.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetSource () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies a copyright statement for the Media Presentation, usually starting with the copyright symbol, unicode \c U+00A9.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetCopyright () const = 0;
+
+ /**
+ * Returns a reference to a string that declares the language code(s) for this Program Information. The syntax and semantics according to <em>IETF RFC 5646</em> shall be applied.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetLang () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies an absolute URL which provides more information about the Media Presentation.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMoreInformationURL () const = 0;
+
+ };
+ }
+}
+
+#endif /* IPROGRAMINFORMATION_H_ */ \ No newline at end of file
diff --git a/libdash/include/IRange.h b/libdash/include/IRange.h
new file mode 100644
index 00000000..0f85f98d
--- /dev/null
+++ b/libdash/include/IRange.h
@@ -0,0 +1,53 @@
+/**
+ * @class dash::mpd::IRange
+ * @brief This interface is needed for accessing the attributes and elements of the Metrics <tt><b>Range</b></tt> element as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.9.2, table 23
+ * @details It specifies the time period during which DASH Metrics collection is requested.
+ * @see dash::mpd::IMetrics
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IRANGE_H_
+#define IRANGE_H_
+
+#include "config.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IRange
+ {
+ public:
+ virtual ~IRange(){}
+
+ /**
+ * Returns a reference to a string that specifies the start time of the DASH Metrics collection operation.
+ * When not present, DASH Metrics collection is requested from the beginning of content consumption.
+ * For services with <tt><b>MPD</b>\@type='dynamic'</tt>, the start time is indicated in wallclock time by adding the value of this
+ * attribute to the value of the <tt><b>MPD</b>\@availabilityStartTime</tt> attribute.
+ * For services with <tt><b>MPD</b>\@type='static'</tt>, the start time is indicated in Media Presentation time and is relative to the
+ * PeriodStart time of the first Period in this MPD.
+ * \b NOTE: For example, if <tt><b>MPD</b>\@availabilityStartTime</tt> is 14:30 and the metrics collection is intended to start at 14:45, then \c \@starttime is 0:15.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetStarttime () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the duration of the DASH metrics collection interval. The value of the attribute expresses in Media Presentation time.
+ * If not present, the value is identical to the Media Presentation duration.
+ * @return a reference to string
+ */
+ virtual const std::string& GetDuration () const = 0;
+
+ };
+ }
+}
+
+#endif /* IRANGE_H_ */ \ No newline at end of file
diff --git a/libdash/include/IRepresentation.h b/libdash/include/IRepresentation.h
new file mode 100644
index 00000000..0762d870
--- /dev/null
+++ b/libdash/include/IRepresentation.h
@@ -0,0 +1,159 @@
+/**
+ * @class dash::mpd::IRepresentation
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>Representation</b></tt> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.5.2, table 7
+ * @details Representations are described by the <tt><b>Representation</b></tt> element. <tt><b>Representation</b></tt> elements are contained in an <tt><b>AdaptationSet</b></tt> element.\n
+ * A Representation is one of the alternative choices of the complete set or subset of media content components comprising the media content during the defined Period.\n
+ * A Representation starts at the start of the Period \em PeriodStart and continues to the end of the Period, i.e. the start of the next Period or the end of the Media Presentation.\n
+ * Each Representation includes one or more media streams, where each media stream is an encoded version of one media content component.\n
+ * A Representation consists of one or more Segments.\n
+ * Each Representation either shall contain an Initialization Segment or each Media Segment in the Representation shall be self-initializing,
+ * i.e. the Media Segment itself conforms to the media type as specified in the \c \@mimeType attribute for this Representation. \n
+ * When a Representation is not a dependent Representation, i.e. the \c \@dependencyId attribute is absent, then concatenation of the Initialization Segment,
+ * if present, and all consecutive Media Segments in one Representation shall represent a conforming Segment sequence as defined in section 4.5.3 of <em>ISO/IEC 23009-1, Part 1, 2012</em>
+ * conforming to the media type as specified in the \c \@mimeType attribute for this Representation.\n
+ * Dependent Representations are described by a <tt><b>Representation</b></tt> element that contains a \c \@dependencyId attribute.
+ * Dependent Representations are regular Representations except that they depend on a set of complementary Representations for decoding and/or presentation.
+ * The \c \@dependencyId contains the values of the \c \@id attribute of all the complementary Representations, i.e. Representations that are necessary to
+ * present and/or decode the media content components contained in this dependent Representation.\n
+ * For any dependent Representation X that depends on complementary Representation Y, the <em>m</em>-th Subsegment of X and the <em>n</em>-th Subsegment of Y
+ * shall be non-overlapping (as defined in 4.5.3) whenever \em m is not equal to \em n. For dependent Representations the concatenation of the Initialization Segment with the
+ * sequence of Subsegments of the dependent Representations, each being preceded by the corresponding Subsegment of each of the complementary Representations
+ * in order as provided in the \c \@dependencyId attribute shall represent a conforming Subsegment sequence as defined in 4.5.3 conforming to the media
+ * format as specified in the \c \@mimeType attribute for this dependent Representation.\n\n
+ * \b NOTE: When decoding of a dependent Representation is started from a SAP in the (Sub)Segment with number \em i, the decoding process does not need to access
+ * data from the complementary Representation(s) from any earlier (sub)segments than (sub)Segment with number i of the complementary Representation(s).
+ * @see dash::mpd::IRepresentationBase dash::mpd::ISegmentBase dash::mpd::ISegmentList dash::mpd::ISegmentTemplate dash::mpd::IBaseUrl dash::mpd::ISubRepresentation
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IREPRESENTATION_H_
+#define IREPRESENTATION_H_
+
+#include "config.h"
+
+#include "IBaseUrl.h"
+#include "ISubRepresentation.h"
+#include "ISegmentBase.h"
+#include "ISegmentList.h"
+#include "ISegmentTemplate.h"
+#include "IRepresentationBase.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IRepresentation : public virtual IRepresentationBase
+ {
+ public:
+ virtual ~IRepresentation(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IBaseUrl objects that specifies Base URLs that can be used for reference resolution and alternative URL selection.\n
+ * For more details refer to the description in section 5.6. of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IBaseUrl objects
+ */
+ virtual const std::vector<IBaseUrl *>& GetBaseURLs () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::ISubRepresentation objects that specifies information about Sub-Representations
+ * that are embedded in the containing Representation.
+ * For more detail see section 5.3.6 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::ISubRepresentation objects
+ */
+ virtual const std::vector<ISubRepresentation *>& GetSubRepresentations () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentBase object that specifies default Segment Base information.
+ * For more detail see section 5.3.9 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentBase object
+ */
+ virtual ISegmentBase* GetSegmentBase () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentList object that specifies the Segment List information.
+ * For more detail see section 5.3.9 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentList object
+ */
+ virtual ISegmentList* GetSegmentList () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegmentTemplate object that specifies the Segment Template information.
+ * For more detail see section 5.3.9 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a pointer to a dash::mpd::ISegmentTemplate object
+ */
+ virtual ISegmentTemplate* GetSegmentTemplate () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies an identifier for this Representation. The identifier shall be unique within a Period
+ * unless the Representation is functionally identically to another Representation in the same Period. \n
+ * The identifier shall not contain whitespace characters. \n
+ * If used in the template-based URL construction as defined in 5.3.9.4.4 of <em>ISO/IEC 23009-1, Part 1, 2012</em>,
+ * the string shall only contain characters that are permitted within an HTTP-URL according to RFC 1738.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetId () const = 0;
+
+ /**
+ * Returns an integer that specifies a bandwidth in bits per seconds (bps).\n
+ * If the Representation is continuously delivered at this bitrate, starting at any SAP that is indicated either by \c \@startWithSAP
+ * or by any Segment Index box, a client can be assured of having enough data for continuous playout providing playout begins after
+ * \c \@minBufferTime * \c \@bandwidth bits have been received (i.e. at time \c \@minBufferTime after the first bit is received).\n\n
+ * For dependent Representations this value shall specify the minimum bandwidth as defined above of this Representation and all complementary Representations.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetBandwidth () const = 0;
+
+ /**
+ * Returns an integer that specifies a quality ranking of the Representation relative to other Representations in the same Adaptation Set.
+ * Lower values represent higher quality content.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetQualityRanking () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specifies all complementary Representations the Representation depends on in the decoding and/or
+ * presentation process as values of \c \@id attributes.\n
+ * If not present, the Representation can be decoded and presented independently of any other Representation. \n
+ * This attribute shall not be present where there are no dependencies.
+ * @return a reference to a vector of strings
+ */
+ virtual const std::vector<std::string>& GetDependencyId () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specifies media stream structure identifier values.\n
+ * The attribute may be present for Representations containing video and its semantics are unspecified for any other type of Representations.\n
+ * If present, the attribute \c \@mediaStreamStructureId specifies a whitespace-separated list of media stream structure identifier values.
+ * If media streams share the same media stream structure identifier value, the media streams shall have the following characteristics:
+ * <ul>
+ * <li> The media streams have the same number of Stream Access Points of type 1 to 3.
+ * <li> The values of T<sub>SAP</sub>, T<sub>DEC</sub>, T<sub>EPT</sub>, and T<sub>PTF</sub> of the <em>i</em>-th SAP of type 1 to 3 in one media stream are identical
+ * to the values of T<sub>SAP</sub>, T<sub>DEC</sub>, T<sub>EPT</sub>, and T<sub>PTF</sub>, respectively, of the <em>i</em>-th SAP of type 1 to 3
+ * in the other media streams for any value of \em i from 1 to the number of SAPs of type 1 to 3 in any of the media streams.
+ * <li> A media stream formed by concatenating the media stream of a first Representation until I<sub>SAU</sub> (exclusive) of the <em>i</em>-th SAP of type 1 to 3 and the
+ * media stream of a second Representation (having the same media stream structure identifier value as for the first Representation) starting from the I<sub>SAU</sub>
+ * (inclusive) of the <em>i</em>-th SAP of type 1 to 3 conforms to the specification in which the media stream format is specified for any value of \em i from 1 to the number
+ * of SAPs of type 1 to 3 in either media stream. Furthermore, the decoded pictures have an acceptable quality regardless of type of the Stream Access Point access unit used.
+ * </ul>
+ * All media stream structure identifier values for one Adaptation Set shall differ from those of another Adaptation Set.\n
+ * If not present, then for this Representation no similarities to other Representations are known.
+ * \b NOTE Indicating multiple media stream structure identifier values for a Representation can be useful in cases where switching between Representations A and B
+ * as well as between Representations B and C is allowed at non-IDR intra pictures, but switching between Representations A and C would cause too
+ * severe a degradation in the quality of the leading pictures and is hence not allowed. To indicate these permissions and restrictions,
+ * Representation A would contain \c \@mediaStreamStructureId equal to \"1"\", Representation B would contain \c \@mediaStreamStructureId equal to \"1 2\",
+ * and Representation C would contain \c \@mediaStreamStructureId equal to \"2\".
+ * @return a reference to a vector of strings
+ */
+ virtual const std::vector<std::string>& GetMediaStreamStructureId () const = 0;
+ };
+ }
+}
+
+#endif /* IREPRESENTATION_H_ */
diff --git a/libdash/include/IRepresentationBase.h b/libdash/include/IRepresentationBase.h
new file mode 100644
index 00000000..e7b7e688
--- /dev/null
+++ b/libdash/include/IRepresentationBase.h
@@ -0,0 +1,181 @@
+/**
+ * @class dash::mpd::IRepresentationBase
+ * @brief This interface is needed for accessing the common attributes and elements of the certain MPD element as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.7
+ * @details The elements \c <b>AdaptationSet</b>, \c <b>Representation</b> and \c <b>SubRepresentation</b> have assigned common attributes and elements that are specified in
+ * <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.7.2, table 9
+ * @see dash::mpd::IDescriptor dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IREPRESENTATIONBASE_H_
+#define IREPRESENTATIONBASE_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IDescriptor.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IRepresentationBase : public virtual IMPDElement
+ {
+ public:
+ virtual ~IRepresentationBase(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specifies frame-packing arrangement information of the video media component type.\n
+ * When no <tt><b>FramePacking</b></tt> element is provided for a video component, frame-packing shall not used for the video media component.\n
+ * For further details see sections 5.8.1 and 5.8.4.6 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetFramePacking () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specifies the audio channel configuration of the audio media component type.\n
+ * For further details see sections 5.8.1 and 5.8.4.7 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetAudioChannelConfiguration () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specifies information about content protection schemes used for the associated Representations.\n
+ * For further details see sections 5.8.1 and 5.8.4.1 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector<IDescriptor *>& GetContentProtection () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specifies the profiles which the associated Representation(s)
+ * conform to of the list of Media Presentation profiles as described in section 8 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * The value shall be a subset of the respective value in any higher level of the document hierarchy (Representation, Adaptation Set, MPD).\n
+ * If not present, the value is inferred to be the same as in the next higher level of the document hierarchy.
+ * For example, if the value is not present for a Representation, then \c \@profiles at the Adaptation Set level is valid for the Representation.\n
+ * The same syntax as defined in 5.3.1.2 shall be used.
+ * @return a reference to a vector of strings
+ */
+ virtual const std::vector<std::string>& GetProfiles () const = 0;
+
+ /**
+ * Returns an integer that specifies the horizontal visual presentation size of the video
+ * media type on a grid determined by the \c \@sar attribute. \n\n
+ * In the absence of \c \@sar width and height are specified as if the value of \c \@sar were \"1:1\".\n
+ * \b NOTE: The visual presentation size of the video is equal to the number of horizontal and vertical samples used for presentation
+ * after encoded samples are cropped in response to encoded cropping parameters, “overscan” signaling, or “pan/scan” display parameters, e.g. SEI messages.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetWidth () const = 0;
+
+ /**
+ * Returns an integer that specifies the vertical visual presentation size of the video
+ * media type, on a grid determined by the \c \@sar attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetHeight () const = 0;
+
+ /**
+ * Returns a string that specifies the sample aspect ratio of the video media component type,
+ * in the form of a string consisting of two integers separated by ':', e.g., \"10:11\".
+ * The first number specifies the horizontal size of the encoded video pixels (samples) in arbitrary units.
+ * The second number specifies the vertical size of the encoded video pixels (samples) in same units as the horizontal size.
+ * @return a string
+ */
+ virtual std::string GetSar () const = 0;
+
+ /**
+ * Returns a string that specifies the output frame rate (or in the case of interlaced, half the output field rate)
+ * of the video media type in the Representation. If the frame or field rate is varying, the value is the average frame
+ * or half the average field rate field rate over the entire duration of the Representation.\n
+ * The value is coded as a string, either containing two integers separated by a \"/\", (\"F/D\"), or a single integer \"F\".
+ * The frame rate is the division F/D, or F, respectively, per second (i.e. the default value of D is \"1\").
+ * @return a string
+ */
+ virtual std::string GetFrameRate () const = 0;
+
+ /**
+ * Returns a string that represents an audio sampling rate. \n
+ * Either a single decimal integer value specifying the sampling rate or a whitespace separated pair of decimal integer
+ * values specifying the minimum and maximum sampling rate of the audio media component type. The values are in samples per second.
+ * @return a string
+ */
+ virtual std::string GetAudioSamplingRate () const = 0;
+
+ /**
+ * Returns a string that specifies the MIME type of the concatenation of the Initialization Segment, if present,
+ * and all consecutive Media Segments in the Representation.
+ * @return a string
+ */
+ virtual std::string GetMimeType () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specifies the profiles of Segments that are essential to process the Representation.
+ * The detailed semantics depend on the value of the \c \@mimeType attribute. The contents of this attribute shall conform to either the
+ * \c pro-simple or \c pro-fancy productions of RFC6381, Section 4.5, without the enclosing \c DQUOTE characters,
+ * i.e. including only the \c unencodedv or \c encodedv elements respectively.
+ * As profile identifier the brand identifier for the Segment as defined in section 6 of <em>ISO/IEC 23009-1, Part 1, 2012</em> shall be used.\n
+ * If not present on any level, the value may be deducted from the value of the\c \@profiles attribute.
+ * @return a reference to a vector of strings
+ */
+ virtual const std::vector<std::string>& GetSegmentProfiles () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specifies the codecs present within the Representation.
+ * The codec parameters shall also include the profile and level information where applicable. \n
+ * The contents of this attribute shall conform to either the \c simp-list or \c fancy-list productions of RFC6381, Section 3.2,
+ * without the enclosing \c DQUOTE characters. The codec identifier for the Representation's media format,
+ * mapped into the name space for codecs as specified in RFC6381, Section 3.3, shall be used.
+ * @return a reference to a vector of strings
+ */
+ virtual const std::vector<std::string>& GetCodecs () const = 0;
+
+ /**
+ * Returns a double value specifying the maximum SAP interval in seconds of all contained media streams,
+ * where the SAP interval is the maximum time interval between the T<sub>SAP</sub> of any two successive SAPs of types 1 to 3
+ * inclusive of one media stream in the associated Representations.
+ * @return a double
+ */
+ virtual double GetMaximumSAPPeriod () const = 0;
+
+ /**
+ * Returns an unsigned integer that (when greater than 0) specifies that in the associated Representations,
+ * each Media Segment starts with a SAP of type less than or equal to the value of this attribute value in each media stream.
+ * @return an unsigned integer
+ */
+ virtual uint8_t GetStartWithSAP () const = 0;
+
+ /**
+ * Returns a double that specifies the maximum playout rate as a multiple of the regular playout rate,
+ * which is supported with the same decoder profile and level requirements as the normal playout rate.
+ * @return a double
+ */
+ virtual double GetMaxPlayoutRate () const = 0;
+
+ /**
+ * Returns a bool value that informs about coding dependency.\n
+ * If \c 'true', for all contained media streams, specifies that there is at least one access unit that depends on one or more other access units for decoding.
+ * If \c 'false', for any contained media stream, there is no access unit that depends on any other access unit for decoding (e.g. for video all the pictures are intra coded). \n
+ * If not specified on any level, there may or may not be coding dependency between access units.
+ * @return a bool value
+ */
+ virtual bool HasCodingDependency () const = 0;
+
+ /**
+ * Returns a string that specifies the scan type of the source material of the video media component type.
+ * The value may be equal to one of \c \"progressive\", \c \"interlaced\" and \c \"unknown\".
+ * @return a string
+ */
+ virtual std::string GetScanType () const = 0;
+
+ };
+ }
+}
+
+#endif /* IREPRESENTATIONBASE_H_ */ \ No newline at end of file
diff --git a/libdash/include/ISegment.h b/libdash/include/ISegment.h
new file mode 100644
index 00000000..32355ef5
--- /dev/null
+++ b/libdash/include/ISegment.h
@@ -0,0 +1,86 @@
+/**
+ * @class dash::mpd::ISegment
+ * @brief This interface is needed for setting values of a Segment
+ * @details Several methods for setting the values of member variables are provided. \n\n
+ * These are only needed in case you do not want to use the values provided by the MPD.
+ * @see dash::network::IDownloadableChunk dash::network::IChunk
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ISEGMENT_H_
+#define ISEGMENT_H_
+
+#include "config.h"
+
+#include "IDownloadableChunk.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISegment : public virtual network::IDownloadableChunk
+ {
+ public:
+ virtual ~ISegment(){}
+
+ /**
+ * This method allows you to specify an absolute URI for this Segment
+ * @param uri a string representing an URI
+ */
+ virtual void AbsoluteURI (std::string uri) = 0;
+
+ /**
+ * This method allows you to specify a host for this Segment
+ * @param host a string representing an host
+ */
+ virtual void Host (std::string host) = 0;
+
+ /**
+ * This method allows you to specify a port for this Segment
+ * @param port an integer representing a portnumber
+ */
+ virtual void Port (size_t port) = 0;
+
+ /**
+ * This method allows you to specify a path for this Segment
+ * @param path a string representing a path
+ */
+ virtual void Path (std::string path) = 0;
+
+ /**
+ * This method allows you to specify a byte range for this Segment
+ * @param range a string representing a byte range as definend in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.2.2, table 13:\n
+ <em>The byte range shall be expressed and formatted as a \c byte-range-spec as defined in RFC 2616, Clause 14.35.1.
+ It is restricted to a single expression identifying a contiguous range of bytes.</em>
+ */
+ virtual void Range (std::string range) = 0;
+
+ /**
+ * This method allows you to specify the start byte for this Segment
+ * @param startByte an integer representing the start byte
+ */
+ virtual void StartByte (size_t startByte) = 0;
+
+ /**
+ * This method allows you to specify the end byte for this Segment
+ * @param endByte an integer representing the end byte
+ */
+ virtual void EndByte (size_t endByte) = 0;
+
+ /**
+ * This method allows you to specify whether this Segment has a byte range or not
+ * @param hasByteRange a bool value, \c true to specify that this Segment has a byte range, \c false otherwise
+ */
+ virtual void HasByteRange (bool hasByteRange) = 0;
+ };
+ }
+}
+
+#endif /* ISEGMENT_H_ */ \ No newline at end of file
diff --git a/libdash/include/ISegmentBase.h b/libdash/include/ISegmentBase.h
new file mode 100644
index 00000000..a29a4eab
--- /dev/null
+++ b/libdash/include/ISegmentBase.h
@@ -0,0 +1,86 @@
+/**
+ * @class dash::mpd::ISegmentBase
+ * @brief This interface is needed for accessing the common elements and attributes of <tt><b>SegmentBase</b></tt>
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.2.2, table 11
+ * @details It specifies Semgent base elements as well as the type for the Segment base information. \n
+ * The <tt><b>SegmentBase</b></tt> is sufficient if only a single Media Segment is provided per Representation and the Media Segment URL is included in the BaseURL element.\n
+ * In case multiple Media Segments are present, either a <tt><b>SegmentList</b></tt> or a <tt><b>SegmentTemplate</b></tt> is used
+ * that share the multiple Segment base information as provided in 5.3.9.2.3, Table 12. \n
+ * If the Representation contains more than one Media Segment, then either the attribute \c \@duration or the element <tt><b>SegmentTimeline</b></tt> shall be present.
+ * The attribute \c \@duration and the element <tt><b>SegmentTimeline</b></tt> shall not be present at the same time.
+ * Segments described by the Segment base information are referenced by an HTTP-URL conforming to the type URLType as defined in Table 13.
+ * @see dash::mpd::IURLType dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ISEGMENTBASE_H_
+#define ISEGMENTBASE_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IURLType.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISegmentBase : public virtual IMPDElement
+ {
+ public:
+ virtual ~ISegmentBase(){}
+
+ /**
+ * Returns a pointer to a dash::mpd::IURLType object that specifies the URL including a possible byte range for the Initialization Segment.
+ * @return a pointer to dash::mpd::IURLType object
+ */
+ virtual const IURLType* GetInitialization () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::IURLType object that specifies the URL including a possible byte range for the Representation Index Segment.
+ * @return a pointer to dash::mpd::IURLType object
+ */
+ virtual const IURLType* GetRepresentationIndex () const = 0;
+
+ /**
+ * Returns an integer representing a timescale that specifies the timescale in units per seconds
+ * to be used for the derivation of different real-time duration values in the Segment Information.\n
+ * \b NOTE: This may be any frequency but typically is the media clock frequency of one of the media streams (or a positive integer multiple thereof).
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetTimescale () const = 0;
+
+ /**
+ * Returns an integer that specifies the presentation time offset of the Representation relative to the start of the Period.\n
+ * The value of the presentation time offset in seconds is the division of the value of this attribute and the value of the \c \@timescale attribute.\n
+ * If not present on any level, the value of the presentation time offset is 0.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetPresentationTimeOffset () const = 0;
+
+ /**
+ * Returns a string that specifies the byte range that contains the Segment Index in all Media Segments of the Representation.\n
+ * The byte range shall be expressed and formatted as a \c byte-range-spec as defined in RFC 2616, Clause 14.35.1.
+ * It is restricted to a single expression identifying a contiguous range of bytes.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetIndexRange () const = 0;
+
+ /**
+ * When set to \c 'true' specifies that for all Segments in the Representation, the data outside the prefix defined by \c \@indexRange contains the data
+ * needed to access all access units of all media streams syntactically and semantically.
+ * @return a bool value
+ */
+ virtual bool HasIndexRangeExact () const = 0;
+ };
+ }
+}
+
+#endif /* ISEGMENTBASE_H_ */ \ No newline at end of file
diff --git a/libdash/include/ISegmentList.h b/libdash/include/ISegmentList.h
new file mode 100644
index 00000000..803df66d
--- /dev/null
+++ b/libdash/include/ISegmentList.h
@@ -0,0 +1,58 @@
+/**
+ * @class dash::mpd::ISegmentList
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>SegmentList</b></tt> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.3.2, table 14
+ * @details The Segment list is defined by one or more <tt><b>SegmentList</b></tt> elements. Each <tt><b>SegmentList</b></tt> element itself contains a list of <tt><b>SegmentURL</b></tt> elements
+ * for a consecutive list of Segment URLs. Each Segment URL may contain the Media Segment URL and possibly a byte range.
+ * The Segment URL element may also contain an Index Segment.
+ * @see dash::mpd::ISegmentURL dash::mpd::IMultipleSegmentBase
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ISEGMENTLIST_H_
+#define ISEGMENTLIST_H_
+
+#include "config.h"
+
+#include "ISegmentURL.h"
+#include "IMultipleSegmentBase.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISegmentList : public virtual IMultipleSegmentBase
+ {
+ public:
+ virtual ~ISegmentList(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::ISegmentURL objects that are contained in this SegmentList.
+ * @return a reference to a vector of pointers to dash::mpd::ISegmentURL objects
+ */
+ virtual const std::vector<ISegmentURL *>& GetSegmentURLs () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies a reference to an external <tt><b>SegmentList</b></tt> element.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkHref () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the processing set - can be either \c \"onLoad\" or \c \"onRequest\".
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkActuate () const = 0;
+
+ };
+ }
+}
+
+#endif /* ISEGMENTLIST_H_ */ \ No newline at end of file
diff --git a/libdash/include/ISegmentTemplate.h b/libdash/include/ISegmentTemplate.h
new file mode 100644
index 00000000..d7072956
--- /dev/null
+++ b/libdash/include/ISegmentTemplate.h
@@ -0,0 +1,148 @@
+/**
+ * @class dash::mpd::ISegmentTemplate
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>SegmentTemplate</b></tt> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.4.2, table 15
+ * @details The Segment template is defined by the <tt><b>SegmentTemplate</b></tt> element. In this case, specific identifiers that are substituted by dynamic values assigned to Segments,
+ * to create a list of Segments. The substitution rules are provided in section 5.3.9.4.4 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @see dash::mpd::ISegment dash::mpd::IMultipleSegmentBase
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+
+#ifndef ISEGMENTTEMPLATE_H_
+#define ISEGMENTTEMPLATE_H_
+
+#include "config.h"
+
+#include "IMultipleSegmentBase.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISegmentTemplate : public virtual IMultipleSegmentBase
+ {
+ public:
+ virtual ~ISegmentTemplate(){}
+
+ /**
+ * Returns a reference to a string that specifies the template to create the Media Segment List.\n
+ * For more details on template-based segment URL construction refer to section 5.3.9.4.4 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a string
+ */
+ virtual const std::string& Getmedia () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the template to create the Index Segment List. If neither the \em \$Number\$ nor the \em \$Time\$ identifier
+ * is included, this provides the URL to a Representation Index. \n
+ * For more details on template-based segment URL construction refer to section 5.3.9.4.4 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a string
+ */
+ virtual const std::string& Getindex () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the template to create the Initialization Segment. Neither \em \$Number\$ nor the \em \$Time\$ identifier
+ * shall be included. \n
+ * For more details on template-based segment URL construction refer to section 5.3.9.4.4 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a string
+ */
+ virtual const std::string& Getinitialization () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the template to create the Bitstream Switching Segment. Neither \em \$Number\$ nor the \em \$Time\$ identifier shall be included.\n
+ * For more details on template-based segment URL construction refer to section 5.3.9.4.4 of <em>ISO/IEC 23009-1, Part 1, 2012</em>.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetbitstreamSwitching () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object that represents an initialization segment and can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the Initialization Segment (template).
+ * @param representationID a string containing the representation ID that will replace the identifier \em \$RepresentationID\$ in the Initialization template. \n
+ * \b NOTE: If there is no identifier \em \$RepresentationID\$ in the template then this parameter will not be used and can be set to \"\".
+ * @param bandwidth an integer specifying the bandwidth that will replace the identifier \em \$Bandwidth\$ in the initialization template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Bandwidth\$ identifier. \n
+ * \b NOTE: If there is no identifier \em \$bandwidth\$ in the template then this parameter will not be used and can be set to 0.
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* ToInitializationSegment (const std::vector<IBaseUrl *>& baseurls, const std::string& representationID, uint32_t bandwidth) const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object that represents a Bitstream Switching Segment and can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the Bitstream Switching Segment (template).
+ * @param representationID a string containing the representation ID that will replace the identifier \em \$RepresentationID\$ in the Bitstream Switching template. \n
+ * \b NOTE: If there is no identifier \em \$RepresentationID\$ in the template then this parameter will not be used and can be set to \"\".
+ * @param bandwidth an integer specifying the bandwidth that will replace the identifier \em \$Bandwidth\$ in the Bitstream Switching template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Bandwidth\$ identifier.\n
+ * \b NOTE: If there is no identifier \em \$bandwidth\$ in the template then this parameter will not be used and can be set to 0.
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* ToBitstreamSwitchingSegment (const std::vector<IBaseUrl *>& baseurls, const std::string& representationID, uint32_t bandwidth) const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object that represents a Media Segment and can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the Media Segment (template).
+ * @param representationID a string containing the representation ID that will replace the identifier \em \$RepresentationID\$ in the Media template.\n
+ * \b NOTE: If there is no identifier \em \$RepresentationID\$ in the template then this parameter will not be used and can be set to \"\".
+ * @param bandwidth an integer specifying the bandwidth that will replace the identifier \em \$Bandwidth\$ in the Media template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Bandwidth\$ identifier. \n
+ * \b NOTE: If there is no identifier \em \$bandwidth\$ in the template then this parameter will not be used and can be set to 0.
+ * @param number an integer specifying the desired Segment number that will replace the identifier \em \$Number\$ in the Media template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Number\$ identifier.
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* GetMediaSegmentFromNumber (const std::vector<IBaseUrl *>& baseurls, const std::string& representationID, uint32_t bandwidth, uint32_t number) const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object that represents a Index Segment and can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the Index Segment (template).
+ * @param representationID a string containing the representation ID that will replace the identifier \em \$RepresentationID\$ in the Index template.\n
+ * \b NOTE: If there is no identifier \em \$RepresentationID\$ in the template then this parameter will not be used and can be set to \"\".
+ * @param bandwidth an integer specifying the bandwidth that will replace the identifier \em \$Bandwidth\$ in the Index template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Bandwidth\$ identifier.\n
+ * \b NOTE: If there is no identifier \em \$bandwidth\$ in the template then this parameter will not be used and can be set to 0.
+ * @param number an integer specifying the desired Segment number that will replace the identifier \em \$Number\$ in the Index template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Number\$ identifier.
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* GetIndexSegmentFromNumber (const std::vector<IBaseUrl *>& baseurls, const std::string& representationID, uint32_t bandwidth, uint32_t number) const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object that represents a Media Segment and can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the Media Segment (template).
+ * @param representationID a string containing the representation ID that will replace the identifier \em \$RepresentationID\$ in the Media template.
+ * \b NOTE: If there is no identifier \em \$RepresentationID\$ in the template then this parameter will not be used and can be set to \"\".
+ * @param bandwidth an integer specifying the bandwidth that will replace the identifier \em \$Bandwidth\$ in the Media template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Bandwidth\$ identifier.\n
+ * \b NOTE: If there is no identifier \em \$bandwidth\$ in the template then this parameter will not be used and can be set to 0.
+ * @param time an integer corresponding to the <tt><b>SegmentTimeline</b>\@t</tt> attribute that will replace the identifier \em \$Time\$ in the Media template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Time\$ identifier.
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* GetMediaSegmentFromTime (const std::vector<IBaseUrl *>& baseurls, const std::string& representationID, uint32_t bandwidth, uint32_t time) const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object that represents a Index Segment and can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the Index Segment (template).
+ * @param representationID a string containing the representation ID that will replace the identifier \em \$RepresentationID\$ in the Index template.\n
+ * \b NOTE: If there is no identifier \em \$RepresentationID\$ in the template then this parameter will not be used and can be set to \"\".
+ * @param bandwidth an integer specifying the bandwidth that will replace the identifier \em \$Bandwidth\$ in the Index template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Bandwidth\$ identifier.\n
+ * \b NOTE: If there is no identifier \em \$bandwidth\$ in the template then this parameter will not be used and can be set to 0.
+ * @param time an integer corresponding to the <tt><b>SegmentTimeline</b>\@t</tt> attribute that will replace the identifier \em \$Time\$ in the Index template.
+ * This integer will be formated according to a possibly contained format tag in the \em \$Time\$ identifier.
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* GetIndexSegmentFromTime (const std::vector<IBaseUrl *>& baseurls, const std::string& representationID, uint32_t bandwidth, uint32_t time) const = 0;
+ };
+ }
+}
+
+#endif /* ISEGMENTTEMPLATE_H_ */ \ No newline at end of file
diff --git a/libdash/include/ISegmentTimeline.h b/libdash/include/ISegmentTimeline.h
new file mode 100644
index 00000000..809ee735
--- /dev/null
+++ b/libdash/include/ISegmentTimeline.h
@@ -0,0 +1,50 @@
+/**
+ * @class dash::mpd::ISegmentTimeline
+ * @brief This interface is needed for accessing the subelements of the <tt><b>SegmentTimeline</b></tt> element, as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.6
+ * @details The <tt><b>SegmentTimeline</b></tt> element expresses the earliest presentation time and presentation duration (in units based on the \c \@timescale attribute)
+ * for each Segment in the Representation. The use is an alternative to providing the \c \@duration attribute and provides three additional features:
+ * <ul>
+ * <li> the specification of arbitrary Segment durations,
+ * <li> the specification of accurate Segment durations for one media stream where the duration expresses presentation duration of the Segment, and
+ * <li> the signalling of discontinuities of the Media Presentation timeline for which no Segment data are present in a specific Representation.
+ * </ul>
+ * For compactness the syntax of this element includes run-length compression to express a sequence of Segments having constant duration.\n\n
+ * The <tt><b>SegmentTimeline</b></tt> element shall contain a list of <tt><b>S</b></tt> elements each of which describes a sequence of contiguous segments of identical MPD duration.
+ * @see dash::mpd::ITimeline dash::mpd::IMultipleSegmentBase dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ISEGMENTTIMELINE_H_
+#define ISEGMENTTIMELINE_H_
+
+#include "config.h"
+
+#include "ITimeline.h"
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISegmentTimeline : public virtual IMPDElement
+ {
+ public:
+ virtual ~ISegmentTimeline(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::ITimeline objects, that correspond to the to <b><tt>S</tt></b> elements.
+ * @return a reference to vector of pointers to dash::mpd::ITimeline objects
+ */
+ virtual std::vector<ITimeline *>& GetTimelines () const = 0;
+ };
+ }
+}
+
+#endif /* ISEGMENTTIMELINE_H_ */ \ No newline at end of file
diff --git a/libdash/include/ISegmentURL.h b/libdash/include/ISegmentURL.h
new file mode 100644
index 00000000..236dc923
--- /dev/null
+++ b/libdash/include/ISegmentURL.h
@@ -0,0 +1,94 @@
+/**
+ * @class dash::mpd::ISegmentURL
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>SegmentURL</b></tt> element
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.3.2, table 14
+ * @details Each Segment URL may contain the Media Segment URL and possibly a byte range. The Segment URL element may also contain an Index Segment.
+ * @see dash::mpd::ISegment dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ISEGMENTURL_H_
+#define ISEGMENTURL_H_
+
+#include "config.h"
+
+#include "ISegment.h"
+#include "IBaseUrl.h"
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISegmentURL : public virtual IMPDElement
+ {
+ public:
+ virtual ~ISegmentURL(){}
+
+ /**
+ * Returns a reference to a string that in combination with the \c \@mediaRange attribute specifies the HTTP-URL for the Media Segment.\n
+ * It shall be formated as an \c <absolute-URI> according to RFC 3986, Clause 4.3, with a fixed scheme of \"http\" or \"https\" or
+ * as a \c <relative-ref> according to RFC 3986, Clause 4.2.\n
+ * If not present, then any <tt><b>BaseURL</b></tt> element is mapped to the \c \@media attribute and the range attribute shall be present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMediaURI () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the byte range within the resource identified by the \c \@media corresponding to the Media Segment.
+ * The byte range shall be expressed and formatted as a \c byte-range-spec as defined in RFC 2616, Clause 14.35.1.
+ * It is restricted to a single expression identifying a contiguous range of bytes.\n
+ * If not present, the Media Segment is the entire resource referenced by the \c \@media attribute.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMediaRange () const = 0;
+
+ /**
+ * Returns a reference to a string that in combination with the \c \@indexRange attribute specifies the HTTP-URL for the Index Segment.
+ * It shall be formated as an \c <absolute-URI> according to RFC 3986, Clause 4.3, with a fixed scheme of \"http\" or \"https\" or
+ * as a \c <relative-ref> according to RFC 3986, Clause 4.2. \n
+ * If not present and the \c \@indexRange not present either, then no Index Segment information is provided for this Media Segment.\n
+ * If not present and the \c \@indexRange present, then the \c \@media attribute is mapped to the \c \@index. If the \c \@media attribute is not present either,
+ * then any <tt><b>BaseURL</b></tt> element is mapped to the \c \@index attribute and the \c \@indexRange attribute shall be present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetIndexURI () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the byte range within the resource identified by the \c \@index corresponding to the Index Segment.
+ * If \c \@index is not present, it specifies the byte range of the Segment Index in Media Segment.\n
+ * The byte range shall be expressed and formatted as a \c byte-range-spec as defined in RFC 2616, Clause 14.35.1. It is restricted to a single
+ * expression identifying a contiguous range of bytes. \n
+ * If not present, the Index Segment is the entire resource referenced by the \c \@index attribute.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetIndexRange () const = 0;
+
+ virtual uint64_t GetActualRate () = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object which represents a media segment that can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the media segment
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* ToMediaSegment (const std::vector<IBaseUrl *>& baseurls) const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object that represents an index segment and can be downloaded.
+ * @param baseurls a vector of pointers to dash::mpd::IBaseUrl objects that represent the path to the index segment
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* ToIndexSegment (const std::vector<IBaseUrl *>& baseurls) const = 0;
+
+ };
+ }
+}
+
+#endif /* ISEGMENTURL_H_ */
diff --git a/libdash/include/ISubRepresentation.h b/libdash/include/ISubRepresentation.h
new file mode 100644
index 00000000..a93605c2
--- /dev/null
+++ b/libdash/include/ISubRepresentation.h
@@ -0,0 +1,70 @@
+/**
+ * @class dash::mpd::ISubRepresentation
+ * @brief This interface is needed for accessing the attributes and elements of the <tt><b>SubRepresentation</b></tt> element as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.6.2, table 8
+ * @details Sub-Representations are embedded in regular Representations and are described by the <tt><b>SubRepresentation</b></tt> element.
+ * <tt><b>SubRepresentation</b></tt> elements are contained in a <tt><b>Representation</b></tt> element.\n
+ * The SubRepresentation element describes properties of one or several media content components that are embedded in the Representation.
+ * It may for example describe the exact properties of an embedded audio component (e.g., codec, sampling rate, etc.),
+ * an embedded sub-title (e.g., codec) or it may describe some embedded lower quality video layer (e.g. some lower frame rate, etc.).
+ * @see dash::mpd::IRepresentationBase
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ISUBREPRESENTATION_H_
+#define ISUBREPRESENTATION_H_
+
+#include "config.h"
+
+#include "IRepresentationBase.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISubRepresentation : public virtual IRepresentationBase
+ {
+ public:
+ virtual ~ISubRepresentation(){}
+
+ /**
+ * Returns an integer that specifies the Sub-Representation level. If \c \@level attribute is present and for media formats used in this Part of ISO/IEC 23009,
+ * a Subsegment Index as defined in section 6.3.2.4 of <em>ISO/IEC 23009-1, Part 1, 2012</em> shall be available for each Media Segment in the containing Representation.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetLevel () const = 0;
+
+ /**
+ * Returns a reference to a vector of unsigned integers that specifies the set of Sub-Representations within this Representation that this Sub-Representation depends on
+ * in the decoding and/or presentation process as a list of \c \@level values.\n
+ * If not present, the Sub-Representation can be decoded and presented independently of any other Representation.
+ * @return a reference to a vector of unsigned integers
+ */
+ virtual const std::vector<uint32_t>& GetDependencyLevel () const = 0;
+
+ /**
+ * Returns an integer that is identical to the \c \@bandwidth definition in Representation, but applied to this Sub-Representation.
+ * This attribute shall be present if the \c \@level attribute is present.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetBandWidth () const = 0;
+
+ /**
+ * Returns a reference to a vector of strings that specifies the set of all media content components
+ * that are contained in this Sub-Representation as <tt><b>ContentComponent</b>\@id</tt> values. \n
+ * If not present, the Sub-Representation is not assigned to a media content component.
+ * @return a reference to a vector of strings
+ */
+ virtual const std::vector<std::string>& GetContentComponent () const = 0;
+
+ };
+ }
+}
+
+#endif /* ISUBREPRESENTATION_H_ */ \ No newline at end of file
diff --git a/libdash/include/ISubset.h b/libdash/include/ISubset.h
new file mode 100644
index 00000000..6d5c8566
--- /dev/null
+++ b/libdash/include/ISubset.h
@@ -0,0 +1,54 @@
+/**
+ * @class dash::mpd::ISubset
+ * @brief This interface is needed for accessing the attributes of the <tt><b>Subset</b></tt> element as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.8.2, table 10
+ * @details Subsets are described by the <tt><b>Subset</b></tt> element contained in the <tt><b>Period</b></tt> element. \n
+ * Subsets provide a mechanism to restrict the combination of active Adaptation Sets where an active Adaptation Set is one
+ * for which the DASH client is presenting at least one of the contained Representations.\n
+ * A Subset defines a set of one or more Adaptation Sets. The presence of a <tt><b>Subset</b></tt> element within a <tt><b>Period</b></tt> element expresses
+ * the intention of the creator of the Media Presentation that a client should act as follows:
+ * At any time, the set of active Adaptation Sets shall be a subset of the Adaptation Sets of one of the specified Subsets.
+ * Any Adaptation Set not explicitly contained in any Subset element is implicitly contained in all specified Subsets.\n
+ * This implies that
+ * <ul>
+ * <li>Empty Subsets are not allowed.
+ * <li>No Subset should contain all the Adaptation Sets.
+ * </ul>
+ * Each Adaptation Set for which the value of the \c \@id is provided in the \c \@contains attribute is contained in this Subset.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ISUBSET_H_
+#define ISUBSET_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ISubset : public virtual IMPDElement
+ {
+ public:
+ virtual ~ISubset(){}
+
+ /**
+ * Returns a reference to a vector of unsigned integers specifying the Adaptation Sets contained in a Subset by providing
+ * the \c \@id values of the contained Adaptation Sets.
+ * @return a reference to a vector of unsigned integers
+ */
+ virtual const std::vector<uint32_t>& Contains () const = 0;
+ };
+ }
+}
+
+#endif /* ISUBSET_H_ */ \ No newline at end of file
diff --git a/libdash/include/ITCPConnection.h b/libdash/include/ITCPConnection.h
new file mode 100644
index 00000000..3d4f4867
--- /dev/null
+++ b/libdash/include/ITCPConnection.h
@@ -0,0 +1,40 @@
+/**
+ * @class dash::metrics::ITCPConnection
+ * @brief This interface is needed for accessing the attributes and the content of a <tt><b>TCP Connection</b></tt>
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, annex D.4.2
+ * @see
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ITCTPCONNECTION_H_
+#define ITCTPCONNECTION_H_
+
+#include "config.h"
+
+namespace dash
+{
+ namespace metrics
+ {
+ class ITCPConnection
+ {
+ public:
+ virtual ~ITCPConnection (){}
+
+ virtual uint32_t TCPId () const = 0;
+ virtual const std::string& DestinationAddress () const = 0;
+ virtual const std::string& ConnectionOpenedTime () const = 0;
+ virtual const std::string& ConnectionClosedTime () const = 0;
+ virtual uint64_t ConnectionTime () const = 0;
+
+ };
+ }
+}
+
+#endif /* ITCTPCONNECTION_H_ */
diff --git a/libdash/include/IThroughputMeasurement.h b/libdash/include/IThroughputMeasurement.h
new file mode 100644
index 00000000..c35cb9ae
--- /dev/null
+++ b/libdash/include/IThroughputMeasurement.h
@@ -0,0 +1,38 @@
+/**
+ * @class dash::metrics::IThroughputMeasurement
+ * @brief This interface is needed for accessing the attributes and the content of a single <tt><b>Throughput Measurment</b></tt> entry
+ * as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, annex D.4.3 (part of the HTTP Request/Response Transaction)
+ * @see dash::metrics::IHTTPTransaction
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ITHROUGHPUTMEASUREMENT_H_
+#define ITHROUGHPUTMEASUREMENT_H_
+
+#include "config.h"
+
+namespace dash
+{
+ namespace metrics
+ {
+ class IThroughputMeasurement
+ {
+ public:
+ virtual ~IThroughputMeasurement (){}
+
+ virtual const std::string& StartOfPeriod () const = 0;
+ virtual uint64_t DurationOfPeriod () const = 0;
+ virtual const std::vector<uint32_t>& ReceivedBytesPerTrace () const = 0;
+
+ };
+ }
+}
+
+#endif /* ITHROUGHPUTMEASUREMENT_H_ */
diff --git a/libdash/include/ITimeline.h b/libdash/include/ITimeline.h
new file mode 100644
index 00000000..e1f8e953
--- /dev/null
+++ b/libdash/include/ITimeline.h
@@ -0,0 +1,66 @@
+/**
+ * @class dash::mpd::ITimeline
+ * @brief This interface is needed for accessing the attributes of <b><tt>S</tt></b> elements, as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.6.1
+ * @details dash::mpd::ITimeline objects correspond to <b><tt>S</tt></b> elements of the <tt><b>SegmentTimeline</b></tt> \n \n
+ * The <b><tt>S</tt></b> element contains a mandatory \c \@d attribute specifying the MPD duration,
+ * an optional \c \@r repeat count attribute specifying the number of contiguous Segments with identical MPD duration minus one
+ * and an optional \c \@t time attribute specifying the MPD start time of the first Segment in the series.
+ * @see dash::mpd::ISegmentTimeline dash::mpd::IMultipleSegmentBase dash::mpd::IMPDElement
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef ITIMELINE_H_
+#define ITIMELINE_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ITimeline : public virtual IMPDElement
+ {
+ public:
+ virtual ~ITimeline(){}
+
+ /**
+ * Returns an integer that specifies the MPD start time, in \c \@timescale units, the first Segment in the series starts relative to the beginning of the Period.\n
+ * The value of this attribute must be equal to or greater than the sum of the previous <tt><b>S</b></tt> element earliest presentation time and
+ * the sum of the contiguous Segment durations. \n
+ * If the value of the attribute is greater than what is expressed by the previous <tt><b>S</b></tt> element, it expresses discontinuities in the timeline.\n
+ * If not present then the value shall be assumed to be zero for the first S element and for the subsequent <tt><b>S</b></tt> elements,
+ * the value shall be assumed to be the sum of the previous <tt><b>S</b></tt> element's earliest presentation time and contiguous duration
+ * (i.e. previous <tt><b>S</b>\@t</tt> + \c \@d * (\c \@r + 1)).\n\n
+ * \em StartTime corresponds to the \c \@t attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetStartTime () const = 0;
+
+ /**
+ * Returns the integer that specifies the Segment duration, in units of the value of the \c \@timescale. \n\n
+ * \em Duration corresponds to the \c \@d attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetDuration () const = 0;
+
+ /**
+ * Returns an integer that specifies the repeat count of the number of following contiguous Segments with the same duration expressed by the value of \c \@d.
+ * This value is zero-based (e.g. a value of three means four Segments in the contiguous series). \n\n
+ * \em RepeatCount corresponds to the \c \@r attribute.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetRepeatCount () const = 0;
+ };
+ }
+}
+
+#endif /* ITIMELINE_H_ */ \ No newline at end of file
diff --git a/libdash/include/IURLType.h b/libdash/include/IURLType.h
new file mode 100644
index 00000000..67f893b5
--- /dev/null
+++ b/libdash/include/IURLType.h
@@ -0,0 +1,61 @@
+/**
+ * @class dash::mpd::IURLType
+ * @brief This interface is needed for accessing the attributes of <tt><b>URLType</b></tt> elements, as specified in <em>ISO/IEC 23009-1, Part 1, 2012</em>, section 5.3.9.2.2, table 13
+ * @details This object defines an HTTP-URL\n
+ * @see dash::mpd::IBaseUrl dash::mpd::IMPDElement dash::mpd::ISegment
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef IURLTYPE_H_
+#define IURLTYPE_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "ISegment.h"
+#include "IBaseUrl.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IURLType : public virtual IMPDElement
+ {
+ public:
+ virtual ~IURLType(){}
+
+ /**
+ * Returns a reference to a string that pecifies the source URL part and shall be formated either as an \c <absolute-URI> according to RFC 3986, Clause 4.3,
+ * with a fixed scheme of \"http\" or \"https\" or as a \c <relative-ref> according to RFC 3986, Clause 4.2.\n
+ * If not present, then any <tt><b>BaseURL</b></tt> element is mapped to the \c \@sourceURL attribute and the range attribute shall be present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetSourceURL () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the byte range restricting the above HTTP-URL.\n
+ * The byte range shall be expressed and formatted as a byte-range-spec as defined in RFC 2616, Clause 14.35.1. It is restricted to a single expression identifying a
+ * contiguous range of bytes.\n
+ * If not present, the element refers to the entire resource referenced in the \c \@sourceURL attribute.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetRange () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::ISegment object, that can be downloaded
+ * @param baseurls a reference to a vector of pointers to dash::mpd::IBaseUrl objects representing the path to \c \@sourceURL
+ * @return a pointer to a dash::mpd::ISegment object
+ */
+ virtual ISegment* ToSegment (const std::vector<IBaseUrl *>& baseurls) const = 0;
+ };
+ }
+}
+
+#endif /* IURLTYPE_H_ */ \ No newline at end of file
diff --git a/libdash/include/config.h b/libdash/include/config.h
new file mode 100644
index 00000000..951c7e12
--- /dev/null
+++ b/libdash/include/config.h
@@ -0,0 +1,37 @@
+/**
+ * config.h
+ *
+ * @brief Standard includes that are used by the library
+ * @details ...
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef CONFIG_H_
+#define CONFIG_H_
+
+/********************************
+ * Pragmas
+ ********************************/
+#pragma warning( disable : 4250 ) // virtual inheritance
+/********************************
+ * Standard includes
+ ********************************/
+#include <stdlib.h>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <stdint.h>
+#include <map>
+#include <deque>
+#include <iostream>
+#include <cstdlib>
+#include <string.h>
+
+#endif /* CONFIG_H_ */
diff --git a/libdash/include/libdash.h b/libdash/include/libdash.h
new file mode 100644
index 00000000..01b80bbd
--- /dev/null
+++ b/libdash/include/libdash.h
@@ -0,0 +1,31 @@
+/**
+ * libdash.h
+ *
+ * @brief The main interface to the libary that should be used to create a IDASHManager
+ * @details ...
+ *
+ * @author bitmovin Softwareentwicklung OG \n
+ * Email: libdash-dev@vicky.bitmovin.net
+ * @version 2.1
+ * @date 2013
+ * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ */
+
+#ifndef LIBDASH_H_
+#define LIBDASH_H_
+
+#include "config.h"
+
+#if defined _WIN32 || defined _WIN64
+#else
+#define __declspec(dllexport)
+#define __cdecl
+#endif
+
+#include "IDASHManager.h"
+
+__declspec(dllexport) dash::IDASHManager* __cdecl CreateDashManager();
+
+#endif /* LIBDASH_H_ */