diff --git a/README.md b/README.md
index b7b334ac..c647af4d 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ You can find the latest sources and binaries on github.
4. After that all files will be provided in the bin folder
5. You can test the library with the sampleplayer.exe. This application simply downloads the lowest representation of one of our dataset MPDs.
-### Ubuntu 12.04
+### Ubuntu 14.04 (Kernel 3.19.0-71-generic)
1. sudo apt-get install git-core build-essential cmake libxml2-dev libcurl4-openssl-dev
2. git clone git://github.com/bitmovin/libdash.git
3. cd libdash/libdash
@@ -56,20 +56,20 @@ You can find the latest sources and binaries on github.
#### QTSamplePlayer
Prerequisite: libdash must be built as described in the previous section.
+Tested using **cmake** version **2.8.12.2**.
1. sudo apt-add-repository ppa:ubuntu-sdk-team/ppa
2. sudo apt-add-repository ppa:canonical-qt5-edgers/qt5-proper
3. sudo apt-get update
-4. sudo apt-get install qtmultimedia5-dev qtbase5-dev libqt5widgets5 libqt5core5 libqt5gui5 libqt5multimedia5 libqt5multimediawidgets5 libqt5opengl5 libav-tools libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libpostproc-dev libswscale-dev
+4. sudo apt-get install qtmultimedia5-dev qtbase5-dev libqt5widgets5 libqt5core5a libqt5gui5 libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediawidgets5 libqt5opengl5 libav-tools libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libpostproc-dev libswscale-dev
5. cd libdash/libdash/qtsampleplayer
6. mkdir build
7. cd build
-8. wget http://www.cmake.org/files/v2.8/cmake-2.8.11.2-Linux-i386.sh
-9. chmod a+x cmake-2.8.11.2-Linux-i386.sh
-10. ./cmake-2.8.11.2-Linux-i386.sh
-11. ./cmake-2.8.11.2-Linux-i386/bin/cmake ../
-12. make
-13. ./qtsampleplayer
+8. cmake ../
+9. make
+10. ./qtsampleplayer
+
+If some issues arise regarding the *make* installation, please make sure to be using the right kernel and *cmake version*. It is important to run *cmake* with the appropriate version in order to avoid linking problems that can fail the *make* process.
## License
diff --git a/libdash/libdash/include/IAdaptationSet.h b/libdash/libdash/include/IAdaptationSet.h
index eff9c7ec..a4a0cb0f 100644
--- a/libdash/libdash/include/IAdaptationSet.h
+++ b/libdash/libdash/include/IAdaptationSet.h
@@ -45,6 +45,10 @@
* @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.
+ *
+ * @contributor Daniele Lorenzi
+ * @contributoremail lorenzidaniele.97@gmail.com
+ * @contributiondate 2021
*/
#ifndef IADAPTATIONSET_H_
@@ -156,7 +160,19 @@ namespace dash
* @return a reference to a string
*/
virtual const std::string& GetXlinkActuate () const = 0;
-
+
+ /**
+ * Returns a reference to a string that specifies the type of link.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkType () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies where to open the link.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkShow () 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
@@ -255,15 +271,6 @@ namespace dash
*/
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.
@@ -284,16 +291,7 @@ namespace dash
* 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;
+ virtual bool GetSegmentAligment () const = 0;
/**
* If and only if the return value of SubsegmentAlignmentIsBoolValue() equals \c 'true' the bool value returned by this method
@@ -319,9 +317,9 @@ namespace dash
* within the union of the two Adaptation Sets, the m-th Subsegment of X and the n-th Subsegment of Y are non-overlapping
* (as defined in section 4.5.2 of ISO/IEC 23009-1, Part 1, 2012) whenever m is not equal to n.
*
- * @return an unsigned integer
+ * @return a bool value
*/
- virtual uint32_t GetSubsegmentAlignment () const = 0;
+ virtual bool 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
@@ -360,6 +358,19 @@ namespace dash
* @return a bool value
*/
virtual bool GetBitstreamSwitching () const = 0;
+
+ /**
+ * Returns a reference to a vector of unsigned integers that specifies the reference initialization set defined as a whitespace-separated list of unsigned integers.
+ * @return a reference to a vector of unsigned integers
+ */
+ virtual const std::vector& GetInitializationSetRef () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies specifies the URL of an Initialization Segment that is sufficient to initialize the Adaptation Set. If not present, an Initialization Segment from one of the Representations is sufficent.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetInitializationPrincipal () const = 0;
+
};
}
}
diff --git a/libdash/libdash/include/IBaseUrl.h b/libdash/libdash/include/IBaseUrl.h
index 206ad14b..8124e598 100644
--- a/libdash/libdash/include/IBaseUrl.h
+++ b/libdash/libdash/include/IBaseUrl.h
@@ -13,6 +13,10 @@
* @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.
+ *
+ * @contributor Daniele Lorenzi
+ * @contributoremail lorenzidaniele.97@gmail.com
+ * @contributiondate 2021
*/
#ifndef IBASEURL_H_
@@ -36,14 +40,14 @@ namespace dash
* Returns the reference to a string representing a BaseURL
* @return a reference to a string
*/
- virtual const std::string& GetUrl () const = 0;
+ virtual const std::string& GetUrl () const = 0;
/**
* Returns the reference to a string that specifies a relationship between Base URLs such that \c BaseURL 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;
+ virtual const std::string& GetServiceLocation () const = 0;
/**
* Returns the reference to a string that represents a byte range. \n
@@ -53,7 +57,35 @@ namespace dash
* \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;
+ virtual const std::string& GetByteRange () const = 0;
+
+ /**
+ * Returns a number that specifies an offset to define the adjusted segment availability time.
+ * If the value is present in \c SegmentBase then this attribute is additive to the one in \c SegmentBase.
+ * @return a double
+ */
+ virtual double GetAvailabilityTimeOffset () const = 0;
+
+ /**
+ * Returns a boolean that specifies if all Segments of all associated Representation are complete at the adjusted availability start time.
+ * If the value is present in \c SegmentBase then this attribute should not be present. If present in \c SegmentBase and \c BaseURL, the value in \c BaseURL shall be ignored.
+ * @return a boolean
+ */
+ virtual bool IsAvailabilityTimeComplete () const = 0;
+
+ /**
+ * Returns the reference to a string that specifies the duration of the smallest time shifting buffer for any Representation in the MPD that is guaranteed to be available for a Media Presentation with type 'dynamic'.
+ * This value overrides \c MPD@timeShiftBufferDepth for the resources that use this \c BaseURL. This value of the attribute is undefined if the \c MPD@type attribute is equal to \c 'static'.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetTimeShiftBufferDepth () const = 0;
+
+ /**
+ * Returns a boolean that specifies: if set to true, partially available may be accessed with byte range request. If a client is making a byte-range request against a partially available Segment and the first-byte position of that range request is non-zero and the client is expecting an aggregating response, then the client should signal that expectation by following the convention of IETF RFC 8673. Specifically, it should use a last-byte value of 9007199254740991. This will signal the server to respond with a 206 aggregating response instead of waiting for the end of the segment and responding with a 200 response code and a content-length response header. \n
+ * If set to false, the client should not expect a response corresponding to the requested byte range.
+ * @return a boolean
+ */
+ virtual bool HasRangeAccess () 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
@@ -61,7 +93,7 @@ namespace dash
* @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& baseurls) const = 0;
+ virtual ISegment* ToMediaSegment (const std::vector& baseurls) const = 0;
};
}
}
diff --git a/libdash/libdash/include/IContentComponent.h b/libdash/libdash/include/IContentComponent.h
index 9f3be97f..6cd693a4 100644
--- a/libdash/libdash/include/IContentComponent.h
+++ b/libdash/libdash/include/IContentComponent.h
@@ -14,6 +14,10 @@
* @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.
+ *
+ * @contributor Daniele Lorenzi
+ * @contributoremail lorenzidaniele.97@gmail.com
+ * @contributiondate 2021
*/
#ifndef ICONTENTCOMPONENT_H_
@@ -75,6 +79,13 @@ namespace dash
* @copydoc dash::mpd::IAdaptationSet::GetPar()
*/
virtual const std::string& GetPar () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the tag of the Content Component
+ * which may be used for selection purposes towards the decoder.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetTag () const = 0;
};
}
diff --git a/libdash/libdash/include/IContentPopularityRate.h b/libdash/libdash/include/IContentPopularityRate.h
new file mode 100644
index 00000000..f95d7f0b
--- /dev/null
+++ b/libdash/libdash/include/IContentPopularityRate.h
@@ -0,0 +1,76 @@
+/**
+ * @class dash::mpd::IContentPopularityRate
+ * @brief This interface is needed for accessing the common elements and attributes of ContentPopularityRate
+ * @details Content Popularity Rate is a method for signalling information on which content items amongst the different Preselections and Adaptation Sets are expected to be more popular than others.
+ * Example use cases for different content streams in a Media Presentation include:
+ *
+ *
content streams from different viewpoints: in this case, an Adaptation Set containing recommended viewpoint is expected to be more popular than other Adaptation Sets;
+ *
sub-picture streams in a 360 video: in this case, a set of Adaptation Sets containing the sub-picture streams that compose "recommended viewport" can be signalled as more popular than others.
+ *
+ * Content Popularity Rate information is expected to be provided by the content provider based on the author’s intent, expected consumption rate by users,
+ * or actual viewing statistics that could have been measured by using DASH metrics, such as Play list as defined in Annex D.4.6. of ISO/IEC 23009-1.\n
+ * If provided, the information can be used for data prefetching by clients or network elements, e.g. CDN servers.
+ * It can also be used for example to deliver the data that is considered most relevant on a preferred data link, for example on multicast or broadcast, whereas less popular data is only provided in unicast.
+ * Expected-to-be-popular data can also be prefetched in higher quality in order to ensure that such data is available in good quality.\n
+ * To indicate the popularity of a Pre-selection or Adaptation Set, the \b ContentPopularityRate element may be present within that element.
+ * The \b ContentPopularityRate element contains one or more \b PR elements giving the rating for different parts of the content.
+ * The semantics of the \b ContentPopularityRate element are provided in 5.14.2, Table 43, the syntax is provided in 5.14.3 (of ISO/IEC 23009-1).
+ * @see dash::mpd::IPopularityRate dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef ICONTENTPOPULARITYRATE_H_
+#define ICONTENTPOPULARITYRATE_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IPopularityRate.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IContentPopularityRate : public virtual IMPDElement
+ {
+ public:
+ virtual ~IContentPopularityRate(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IPopularityRate objects that specifies
+ * start time and number of segments for a contiguous sequence of segments assigned identical Popularity Rate value.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IPopularityRate objects
+ */
+ virtual const std::vector& GetPopularityRates () const = 0;
+
+ /**
+ * Returns a reference to a string that indicates the source of rating by this element.
+ * The value can be one of the following:
+ *
+ *
\c content (when the value is specified by the content author or content provider);
+ *
\c statistics (when the value is specified based on viewing statistics);
+ *
\c other.
+ *
+ * When \c "other" is used, \c @source_description should be provided.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetSource () const = 0;
+
+ /**
+ * Returns a reference to a UTF-8 string that provides a textual description of the source of rating.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetSourceDescription () const = 0;
+
+ };
+ }
+}
+
+#endif /* ICONTENTPOPULARITYRATE_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IContentProtection.h b/libdash/libdash/include/IContentProtection.h
new file mode 100644
index 00000000..bc849dcd
--- /dev/null
+++ b/libdash/libdash/include/IContentProtection.h
@@ -0,0 +1,64 @@
+/**
+ * @class dash::mpd::IContentProtection
+ * @brief This interface is needed for accessing the common attributes of ContentProtection
+ * as specified in ISO/IEC 23009-1, section 5.8.4.1
+ * @details Content protection descriptors are signalled by the ContentProtection element and are used to provide content protection, encryption, and DRM related information in order to access encrypted and/or DRM-protected content.
+ * The ContentProtection element is an extended descriptor type.\n
+ * For the element ContentProtection, the \c @schemeIdUri attribute is used to identify a content protection descriptor scheme. \n
+ * The ContentProtection descriptors is expected to provide sufficient information, possibly in conjunction with the \c @value and/or extension attributes and elements, such as the DRM system(s), encryption algorithm(s), and key distribution scheme(s) employed, to enable a client to determine whether it can possibly play the protected content. The ContentProtection element can be extended in a separate namespace to provide information specific to a content protection scheme (e.g. particular key management systems or encryption methods). \n
+ * When no ContentProtection element is present, the content shall not be encrypted. \n
+ * Subclause 5.8.5.2 exclusively defines schemes indicating the encryption scheme for different MPEG formats. In subclause 5.8.5.2.2, the MP4 protection scheme identified with \c @schemeIdUri set to \c "urn:mpeg:dash:mp4protection:2011" is defined. In subclause 5.8.5.2.3, the MPEG-2 TS protection scheme identified with \c @schemeIdUri set to \c "urn:mpeg:dash:13818:1:CA_descriptor:2011" is defined. These schemes merely indicate the encryption mode used in conjunction with one or more DRMs. Hence, it is recommended to provide the client with additional content protection information about the available DRMs. \n
+ * Additional ContentProtection elements with the \c @schemeIdURI attribute set to a URN not defined in subclause 5.8.5 must describe a specific key management and protection scheme that is sufficient to access and present the Representation. For such schemes, an optional \c @robustness attribute may be present, for details see subclause 5.8.4.1.2. \n
+ * The content protection information may be provided explicitly in a ContentProtection element or may be referenced from another ContentProtection element. For details refer to subclause 5.8.4.1.3. \n
+ * The semantics of the attributes within the ContentProtection element are provided in subclause 5.8.4.1.4, Table 30. The XML syntax of ContentProtection element is provided in subclause 5.8.4.1.5. \n
+ * Subclause 5.8.4.1.6 provides information on how to define a content protection scheme.
+ * @see
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef ICONTENTPROTECTION_H_
+#define ICONTENTPROTECTION_H_
+
+#include "config.h"
+
+#include "IDescriptor.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IContentProtection : public virtual IDescriptor
+ {
+ public:
+ virtual ~IContentProtection(){}
+
+ /**
+ * Returns the reference to a string that specifies the robustness level required for this content protection scheme for accessing content represented by the associated Representation(s). For more details refer to subclause 5.8.4.1.2 and 5.8.4.1.6. \n
+ * If not present, then the lowest robustness level for the identified content protection scheme applies.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetRobustness () const = 0;
+
+ /**
+ * Returns the reference to a string that specifies an identifier of this descriptor. The identifier shall be unique within an MPD. \n
+ * The attribute shall not be present if the \c @ref attribute is present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetRefId () const = 0;
+
+ /**
+ * Returns the reference to a string that - if present - makes this a referencing content protection descriptor
+ * that inherits from a “source” content protection descriptor which is identified by the equivalent value of \c @refId attribute. For details, refer to subclause 5.8.4.1.3. \n
+ * The attribute shall not be present if the \c @refId attribute is present.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetRef () const = 0;
+ };
+ }
+}
+
+#endif /* ICONTENTPROTECTION_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IDescriptor.h b/libdash/libdash/include/IDescriptor.h
index 3983e41e..a57cbcd9 100644
--- a/libdash/libdash/include/IDescriptor.h
+++ b/libdash/libdash/include/IDescriptor.h
@@ -27,6 +27,10 @@
* @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.
+ *
+ * @contributor Daniele Lorenzi
+ * @contributoremail lorenzidaniele.97@gmail.com
+ * @contributiondate 2021
*/
#ifndef IDESCRIPTOR_H_
@@ -61,6 +65,14 @@ namespace dash
* @return a reference to a string
*/
virtual const std::string& GetValue () const = 0;
+
+ /**
+ * Returns a reference to a string that that specifies the identifier for the descriptor.
+ * Descriptors with identical values for this attribute shall be synonymous, i.e. the processing
+ * of one of the descriptors with an identical value is sufficient.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetId () const = 0;
};
}
}
diff --git a/libdash/libdash/include/IEvent.h b/libdash/libdash/include/IEvent.h
new file mode 100644
index 00000000..5646d0fd
--- /dev/null
+++ b/libdash/libdash/include/IEvent.h
@@ -0,0 +1,89 @@
+/**
+ * @class dash::mpd::IEvent
+ * @brief This interface is needed for accessing the attributes of Event
+ * as specified in ISO/IEC 23009-1, subclause 5.10.2.2, Table 35.
+ * @details The Event element specifies an Event and contains the message of the event. The content of this element depends on the event scheme. The contents shall be either: \n
+ *
+ *
A string, optionally encoded as specified by \c @contentEncoding
+ *
XML content using elements external to the MPD namespace
+ *
+ * For new event schemes, string content should be used, making use of Base 64 encoding if needed. \n
+ * \b NOTE The schema allows “mixed” content within this element however only string data or XML elements are permitted by the above options, not a combination. \n
+ * The XML syntax of the Event is provided in subclause 5.10.2.3.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IEVENT_H_
+#define IEVENT_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IEvent : public virtual IMPDElement
+ {
+ public:
+ virtual ~IEvent(){}
+
+ /**
+ * Returns an integer that specifies the presentation time of the event relative to the start of the Period taking into account the \c @presentationTimeOffset of the Event Stream, if present. \n
+ * The value of the presentation time in seconds is the division of the value of this attribute and the value of the \c @timescale attribute. \n
+ * If not present, the value of the presentation time is 0.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint64_t GetPresentationTime () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the presentation duration of the Event. \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. \n
+ * The interpretation of the value of this attribute is defined by the scheme owner. \n
+ * If not present, the value of the duration is unknown.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetDuration () const = 0;
+
+ /**
+ * Returns an integer that specifies an identifier for this instance of the event. \n
+ * Events with equivalent content and attribute values in the \b Event element shall have the same value for this attribute. \n
+ * The scope of the \c @id for each Event is with the same \c @schemeIdURI and \c @value pair.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetId () const = 0;
+
+ /**
+ * Returns the reference to a string that specifies whether the information in the body and the information in the \c @messageData is encoded. \n
+ * If present, the following value is possible:
+ *
+ *
\c base64 the content is encoded as described in IETF RFC 4648 prior to adding it to the field.
+ *
+ * If this attribute is present, the DASH Client is expected to decode the message data and only provide the decoded message to the application.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetContentEncoding () const = 0;
+
+ /**
+ * Returns the reference to a string that specifies the value for the event stream element. The value space and semantics must be defined by the owners of the scheme identified in the \c @schemeIdUri attribute. \n
+ * The use of the message data is discouraged by content authors; it is only maintained for the purpose of backward-compatibility.
+ * Including the message in the Event element is recommended in preference to using this attribute.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMessageData () const = 0;
+ };
+ }
+}
+
+#endif /* IEVENT_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IEventStream.h b/libdash/libdash/include/IEventStream.h
new file mode 100644
index 00000000..b0e4699b
--- /dev/null
+++ b/libdash/libdash/include/IEventStream.h
@@ -0,0 +1,96 @@
+/**
+ * @class dash::mpd::IEventStream
+ * @brief This interface is needed for accessing the common elements and attributes of EventStream
+ * as specified in ISO/IEC 23009-1, subclause 5.10.2.2, Table 34
+ * @details The EventStream element is structured in a similar way as the descriptor defined in subclause 5.8, namely it contains 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
+ * A Period shall contain at most one \b EventStream element with the same value of the \c @schemeIdUri attribute and the value of the \c @value attribute, i.e. all Events of one type shall be clustered in one Event Stream. \n
+ * As Event Streams contain timed events, also a time scale attribute \c @timescale is provided to assign events to a specific media presentation time within the Period. The timed events themselves are described by the \b Event element.
+ * ìThe XML syntax of the Event Stream is provided in subclause 5.10.2.3.
+ * @see dash::mpd::IEvent dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IEVENTSTREAM_H_
+#define IEVENTSTREAM_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IEvent.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IEventStream : public virtual IMPDElement
+ {
+ public:
+ virtual ~IEventStream(){}
+
+ /**
+ * Returns a pointer to a vector of dash::mpd::Event objects, each of which specifies the property of the Event itself. \n
+ * Events in Event Streams shall be ordered such that their presentation time is non-decreasing.
+ *
+ * @return a pointer to a vector of dash::mpd::Event objects
+ */
+ virtual const std::vector& GetEvents () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies a reference to an external EventStream 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 a reference to a string that identifies the message scheme. The string may use URN or URL syntax.
+ * When a URL is used, it is recommended to 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.
+ * A URL may resolve to an Internet location, and a location that does resolve may store a specification of the message scheme.
+ *
+ * @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 event stream element. The value space and semantics must be defined
+ * by the owners of the scheme identified in the \c @schemeIdUriattribute.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetValue () const = 0;
+
+ /**
+ * Returns an integer that specifies the timescale in units per seconds to be used for the derivation of different real-time duration values in the \b Event elements. \n
+ * If not present on any level, it shall be set to 1.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetTimescale () const = 0;
+
+ /**
+ * Returns an integer that specifies the presentation time offset of this Event Stream that aligns with the start of the Period.
+ * Any Event contained in this Event Stream is mapped to the Period timeline by using the Event presentation time adjusted by the value of the presentation time offset. \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.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint64_t GetPresentationTimeOffset () const = 0;
+ };
+ }
+}
+
+#endif /* IEVENTSTREAM */
\ No newline at end of file
diff --git a/libdash/libdash/include/IExtendedBandwidth.h b/libdash/libdash/include/IExtendedBandwidth.h
new file mode 100644
index 00000000..d7a9d821
--- /dev/null
+++ b/libdash/libdash/include/IExtendedBandwidth.h
@@ -0,0 +1,50 @@
+/**
+ * @class dash::mpd::IExtendedBandwidth
+ * @brief This interface is needed for accessing the common attributes and elements of ExtendedBandwidth
+ * as specified in ISO/IEC 23009-1, section 5.3.5.6
+ * @details Subclause 5.3.5.4 provides a detailed overview on the usage of \c @minBufferTime and \c @bandwidth for determining the bitrate properties of the associated Representation. However, this model does not expose certain extended bandwidth properties of the Representation, for example the nature of the encoding being variable bitrate, or any bitrate properties over different time windows. \n
+ * For this purpose, each Represention have assigned an extended bandwidth signalling providing additional properties of the Representation. This information is provided as part of the ExtendedBandwidth element as defined in Table 12.
+ * @see dash::mpd::IModelPair
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IEXTENDEDBANDWIDTH_H_
+#define IEXTENDEDBANDWIDTH_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IModelPair.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IExtendedBandwidth : public virtual IMPDElement
+ {
+ public:
+ virtual ~IExtendedBandwidth(){}
+
+ /**
+ * Returns a pointer to a vector of dash::mpd::IModelPair objects, each of which defines an extended bandwidth model pair that applies for the Representation.
+ * @return a pointer to a vector of dash::mpd::IModelPair objects
+ */
+ virtual const std::vector& GetModelPairs () const = 0;
+
+ /**
+ * Returns a boolean that - if set to true - assure that the content is encoded to primarily have a constant or consistent quality, while at the same time when the signal restrictions on MPD@minBufferTime and Representation@bandwidth attributes are reached, the quality of the content may drop.
+ * In cases where is cap is not reached, the quality of the content is expected to be consistent. \n
+ * If set to false or not present, no information on the nature of the encoding is present. \n
+ * \t NOTE: the signalling set to true implies that the actual instantaneous bitrate can frequently be below the maximum.
+ * @return a boolean
+ */
+ virtual bool GetVbr () const = 0;
+ };
+ }
+}
+
+#endif /* IEXTENDEDBANDWIDTH_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IFCS.h b/libdash/libdash/include/IFCS.h
new file mode 100644
index 00000000..f6ab4dec
--- /dev/null
+++ b/libdash/libdash/include/IFCS.h
@@ -0,0 +1,52 @@
+/**
+ * @class dash::mpd::IFCS
+ * @brief This interface is needed for accessing the attributes of FCS
+ * as specified in ISO/IEC 23009-1, section 5.3.9.7.2, table 22
+ * @details The FCS element contains an optional \c @d attribute specifying the MPD duration of the alternative content section and a mandatory \c @t time attribute
+ * whereby the value of the \c @t attribute minus the value of the \c @presentationTimeOffset specifies the MPD start time of the alternative content section. \n
+ * The semantics of the attributes for FCS are provided in 5.3.9.7.2, Table 22. The XML syntax of the Failover Content signalling is provided in 5.3.9.7.3.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IFCS_H_
+#define IFCS_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IFCS : public virtual IMPDElement
+ {
+ public:
+ virtual ~IFCS(){}
+
+ /**
+ * Returns an integer that specifies the value of the \c PresentationTime which corresponds to the \c @t attribute.
+ * This attribute minus the value of the \c @presentationTimeOffset specifies the MPD start time, in \c @timescale units, of the first sample in the alternative content section. \n
+ * The value of this attribute must be equal to or greater than the sum of the previous FCS element earliest presentation time and the sum of the contiguous section duration.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint64_t GetPresentationTime () const = 0;
+
+ /**
+ * Returns an integer that specifies the alternative content section duration in units of the value of the \c @timescale. \n
+ * If not present, the alternative content section lasts until the start of the next FCS element, or until the end of the Period or until the end of MPD duration, whichever occurs first in the timeline. \n\n
+ * \em Duration corresponds to the \c \@d attribute.
+ * @return an unsigned integer
+ */
+ virtual uint64_t GetDuration () const = 0;
+ };
+ }
+}
+
+#endif /* IFCS_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IFailoverContent.h b/libdash/libdash/include/IFailoverContent.h
new file mode 100644
index 00000000..2f4e927d
--- /dev/null
+++ b/libdash/libdash/include/IFailoverContent.h
@@ -0,0 +1,52 @@
+/**
+ * @class dash::mpd::IFailoverContent
+ * @brief This interface is needed for accessing the common elements and attributes of FailoverContent
+ * as specified in ISO/IEC 23009-1, section 5.3.9.7.2, table 22
+ * @details The FailoverContent element enables identification of such sections of Representations that include alternative “failover content” and should be avoided by the DASH Client,
+ * for example by switching to a Representation that does not include such failover content. \n
+ * The FailoverContent element contains a list of failover content sections, each expressed by one FCS element.
+ * The FCS element contains an optional \c @d attribute specifying the MPD duration of the alternative content section and a mandatory \c @t time attribute
+ * whereby the value of the \c @t attribute minus the value of the \c @presentationTimeOffset specifies the MPD start time of the alternative content section. \n
+ * The semantics of the attributes and elements for failover content are provided in 5.3.9.7.2, Table 22. The XML syntax of the Failover Content signalling is provided in 5.3.9.7.3.
+ * @see dash::mpd::IFCS dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IFAILOVERCONTENT_H_
+#define IFAILOVERCONTENT_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IFCS.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IFailoverContent : public virtual IMPDElement
+ {
+ public:
+ virtual ~IFailoverContent(){}
+
+ /**
+ * Returns a pointer to a vector of dash::mpd::FCS objects, each of which specifies the property of the Failover Content signalling itself.
+ * @return a pointer to a vector of dash::mpd::FCS objects
+ */
+ virtual std::vector& GetFCS () const = 0;
+
+ /**
+ * Returns a boolean that specifies whether the corresponding data results in a valid HTTP request
+ * or if the request is invalid and it is expected that a 404 is received when requesting the associated Media Segment.
+ * @return a bool value
+ */
+ virtual bool IsValid () const = 0;
+ };
+ }
+}
+
+#endif /* IFAILOVERCONTENT_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IInitializationSet.h b/libdash/libdash/include/IInitializationSet.h
new file mode 100644
index 00000000..c4fa9d12
--- /dev/null
+++ b/libdash/libdash/include/IInitializationSet.h
@@ -0,0 +1,172 @@
+/**
+ * @class dash::mpd::IInitializationSet
+ * @brief This interface is needed for accessing the attributes of InitializationSet.
+ * @details An Initialization Set provides a common set of media properties across Periods in a Media Presentation.
+ * If an Initialization Set with certain properties is provided in an MPD, there shall be at least one Adaptation Set in at least one Period with these properties.
+ * More importantly, it can also be indicated that all Periods in the Media Presentations include at least one Adaptation Set that follows the properties of the Initialization Set.
+ * Especially in the latter case an Initialization Set can be selected at the start of a Media Presentation in order to establish the relevant decryption, decoding and rendering environment.
+ * This provides expected consistent playback behaviour for the DASH Client if it selects only Adaptation Sets that are included in the selected Initialization Set.\n
+ * The semantical definition of Initialization Sets shares all parameters of Adaptation Sets, but an Initialization Set may only include a subset of those parameters.
+ * An Adaptation Set referring to an Initialization Set that it conforms to may include additional information, for example:\n
+ *
+ *
There may be an Initialization Set with media type audio and a \c @codecs parameter, but without a \c @lang attribute.
+ * Then each Period includes at least one Adaptation Set with the same media type, the same \c @codecs parameter, but each of the Adaptation Sets defines a different language for each Period.
+ * This ensures that initialization of an audio playback decoder is possible, but over Period boundaries, the language may change, or additional languages may be added.
+ *
There may be an Initialization Set with media type video and \c @maxWidth and \c @maxHeight parameter and a \c @codecs parameter. Then at least one Period includes at least one Adaptation Set with the same media type,
+ * but its actual codecs parameters and the \c @maxWidth and \c @maxHeight may be different than the ones in the Initialization Set, but can be decoded and displayed within the Initialization Set constraints.
+ *
+ * An Initialization Set may get assigned a specific profile using the \c @profiles parameter in order to express conformance to DASH profiles or Interoperability Points. \n
+ * If an MPD has multiple Periods, there should be at least one Initialization Set be present for each media type. \n
+ * The semantics of the attributes and elements within an \b InitializationSet element are provided in subclause 5.3.12.2, Table 26. The XML syntax of the \b InitializationSet element is provided in subclause 5.3.12.3.
+ * @see dash::mpd::IDescriptor
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IINITIALIZATIONSET_H_
+#define IINITIALIZATIONSET_H_
+
+#include "config.h"
+
+#include "IDescriptor.h"
+#include "IRepresentationBase.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IInitializationSet : public virtual IRepresentationBase
+ {
+ public:
+ virtual ~IInitializationSet(){}
+
+
+ /**
+ * 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 ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& 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 ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& 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 ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& 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 ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& GetViewpoint () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies a reference to a remote element entity that shall contain exactly one element of type \b InitializationSet.
+ *
+ * @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 a reference to a string that specifies the the type of link.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkType () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies a unique identifier for this Initialization Set.
+ * The attribute shall be a unique unsigned integer value amongst all InitializationSet and InitializationGroup ids in the scope of the MPD.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetId () const = 0;
+
+ /**
+ * If set to \b true, then there is at least one Adaptation Set in each Period of the Media Presentation that conforms to this Initialization Set.
+ *
+ * @return a bool value
+ */
+ virtual bool IsInAllPeriods () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the media content component type for this Initialization Set.
+ * A value of the top-level Content-type 'type' value as defined in IETF RFC 6838:2013, 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.,"16:9".
+ * When this attribute is present, and the attributes \c @width and \c @height for the Representations of Adaptation Sets conforming to this Initialization Set 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 * sarx):(\c@height * sary), with sarx the first number in \c @sar and 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 maximum \c @width value in all Representations in all Adaptation Sets associated to this Initialization Set.
+ * This value has the same units as the \c @width attribute. \n
+ * If not present, the value is unknown.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMaxWidth () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the maximum \c @height value in all Representations in all Adaptation Sets associated to this Initialization Set.
+ * This value has the same units as the \c @height attribute. \n
+ * If not present, the value is unknown.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMaxHeight () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the maximum \c @framerate value in all Representations in all Adaptation Sets associated to this Initialization Set.
+ * This value is encoded in the same format as the \c @frameRate attribute. \n
+ * If not present, the value is unknown.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMaxFrameRate () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the URL of an Initialization Segment.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetInitialization () const = 0;
+
+ };
+ }
+}
+
+#endif /* IINITIALIZATIONSET_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/ILabel.h b/libdash/libdash/include/ILabel.h
new file mode 100644
index 00000000..96485200
--- /dev/null
+++ b/libdash/libdash/include/ILabel.h
@@ -0,0 +1,60 @@
+/**
+ * @class dash::mpd::ILabel
+ * @brief This interface is needed for accessing the attributes of Label
+ * as specified in ISO/IEC 23009-1, subclause 5.3.10.2, Table 23-24.
+ * @details Labels provide the ability to annotate data structures in a DASH Media Presentation by providing a short textual description of the parent element.
+ * Labels can be used for the purpose of interaction and configuration settings within a DASH Client or associated application.
+ * For example, the Label element can be used to provide a selection menu to the user. GroupLabel may be added on a higher level to provide a summary or title of labels collected in a group.
+ * For example, GroupLabel can be used as the title on a selection menu containing a collection of labels. Labels with the same value for the \c @id attribute belong to a label group.
+ * All labels with the same \c @id shall be on the same level in the MPD. The \c @lang attribute assigned to a label describes the language of that label.
+ * For example, the \c @lang attribute can be used by the DASH Client to filter labels according to user language preferences.
+ * The semantics of the label element and the group label element are provided in Table 23 and Table 24, respectively, in subclause 5.3.10.2, the XML syntax is provided in subclause 5.3.10.3.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef ILABEL_H_
+#define ILABEL_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ILabel : public virtual IMPDElement
+ {
+ public:
+ virtual ~ILabel(){}
+
+ /**
+ * For Label:
+ * Returns an integer that specifies an identifier for the label. Labels with the same value for this attribute belong to a label group.
+ *
+ * For GroupLabel:
+ * Returns an integer that specifies an identifier for the group label. The value for this attribute shall be unique for all group labels in the MPD.
+ * The value of this attribute shall be the same as the id attribute of all Label elements in the label group.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetId () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the language of the label.
+ * If not present, the language of the label is unknown.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetLang () const = 0;
+
+ };
+ }
+}
+
+#endif /* ILABEL_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/ILatency.h b/libdash/libdash/include/ILatency.h
new file mode 100644
index 00000000..f9ea4d6a
--- /dev/null
+++ b/libdash/libdash/include/ILatency.h
@@ -0,0 +1,72 @@
+/**
+ * @class dash::mpd::ILatency
+ * @brief This interface is needed for accessing the attributes and elements of Latency
+ * as specified in ISO/IEC 23009-1, subclause K.3.2.
+ * @details Table K.1 defines the service description parameters for the service latency
+ * @see dash::mpd::IMPDElement dash::mpd::IUIntPairsWithID
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef ILATENCY_H_
+#define ILATENCY_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+#include "IUIntPairsWithID.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ILatency : public virtual IMPDElement
+ {
+ public:
+ virtual ~ILatency(){}
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IUIntPairsWithID objects that define a list of latency and quality pairs together with the quality type.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IUIntPairsWithID objects
+ */
+ virtual const std::vector& GetQualityLatencyType () const = 0;
+
+ /**
+ * Returns an unsigned integer that defines the ID of the Producer Reference Time element in the MPD against which the latency is measured, if more than one is present.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetReferenceId () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the service provider’s preferred presentation latency in milliseconds compared to the producer reference time.
+ * Indicates a content provider’s desire for the content to be presented as close to the indicated latency as is possible given the player’s capabilities and observations. \n
+ * This attribute may express a latency that is only achievable by low-latency players under favourable network conditions.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetTarget () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the service provider’s indication about the maximum presentation latency in milliseconds.
+ * Indicates a content provider’s desire for the content not to be presented if the latency exceeds the maximum latency.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMax () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the service provider’s indication about minimum presentation latency in milliseconds for example to avoid inconsistencies with second screen applications, overlays, etc.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMin () const = 0;
+ };
+ }
+}
+
+#endif /* ILATENCY_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/ILeapSecondInformation.h b/libdash/libdash/include/ILeapSecondInformation.h
new file mode 100644
index 00000000..f4e02ae1
--- /dev/null
+++ b/libdash/libdash/include/ILeapSecondInformation.h
@@ -0,0 +1,70 @@
+/**
+ * @class dash::mpd::ILeapSecondInformation
+ * @brief This interface is needed for accessing the attributes of LeapSecondInformation
+ * as specified in ISO/IEC 23009-1, subclause 5.13.2, Table 42.
+ * @details Information on the occurrence of leap seconds and their relationship with \cMPD\b@availabilityStartTime can be expressed using the \b LeapSecondInformation element.\n
+ * This information allows a client to perform time calculations accurately without an external source of information on the timing of past and future leap seconds.
+ * It also allows a service provider to express any correction for leap seconds that has already been made.\n
+ * With this information, a client may perform timing calculations by assuming a constant day length of 86400 seconds if it first applies the relevant offset from the \b LeapSecondInformation element to the value of the \bMPD\c@availabilityStartTime attribute.
+ * The client can then correctly play a Media Presentation for which \bMPD\c@type is 'dynamic' when leap seconds have occurred since the time of \bMPD\c@availabilityStartTime and even when leap seconds occur during playback.\n
+ * The offset specified in \c @availabilityStartLeapOffset applies if the current time is before \c @nextLeapChangeTime. \c @nextAvailabilityStartLeapOffset applies if the current time is equal to or after \c @nextLeapChangeTime, but its use may need to be delayed if the client’s internal wall-clock has not yet processed the leap second.\n
+ * \b NOTE 1 If a particular client’s wall-clock is synchronized solely by means of a one-shot protocol, e.g. using the scheme \c urn:mpeg:dash:utc:http-xsdate:2014 defined in subclause 5.8.5.7, the value of \c @availabilityStartLeapOffset remains appropriate for that client until its clock is next synchronized after the leap second has occurred. \n
+ * \b NOTE 2 Leap seconds can occur at any of four possible times each year and can add or remove a second from the UTC timeline. Whilst leap seconds always occur immediately before midnight UTC, they can occur during the day in other time zones.
+ * Even within the Greenwich Mean Time (GMT) zone, the most common time for a leap second has been 23:59:60 on New Year's Eve, when many people may be watching live video streams. It is therefore important that leap seconds are handled correctly.\n
+ * Some operating systems allow leap seconds to be handled by "smearing" the leap second over a longer period of time. Care should be taken to ensure that availability times in a published MPD are not affected by this.\n
+ * The semantics of the attributes within the \b LeapSecondInformation element are provided in subclause 5.13.2, Table 42. The XML syntax of the \b LeapSecondInformation element is provided in subclause 5.13.3. of ISO/IEC 23009-1.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef ILEAPSECONDINFORMATION_H_
+#define ILEAPSECONDINFORMATION_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class ILeapSecondInformation : public virtual IMPDElement
+ {
+ public:
+ virtual ~ILeapSecondInformation(){}
+
+ /**
+ * Returns an integer that specifies the number of seconds applying at the time of MPD publication that a client would need to subtract
+ * from \bMPD\c@availabilityStartTime in order to perform timing calculations without further consideration of leap seconds.\n
+ * If a leap second correction has already been applied, the \b LeapSecondInformation element should still be present but this attribute should be set to 0.
+ *
+ * @return an integer
+ */
+ virtual int32_t GetAvailabilityStartLeapOffset () const = 0;
+
+ /**
+ * Returns an integer that specifies the number of seconds that will apply from the time of the next leap second (indicated by the \c @nextLeapChangeTime)
+ * that a client would need to subtract from \bMPD\c@availabilityStartTime in order to perform timing calculations without further consideration of leap seconds.\n
+ * If the timing of the next leap second is unknown, this attribute shall be omitted.
+ *
+ * @return an integer
+ */
+ virtual int32_t GetNextAvailabilityStartLeapOffset () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the UTC time at which a leap second will occur. Before this time, \c @availabilityStartLeapOffset applies.
+ * On or after this time, \c @nextAvailabilityStartLeapOffset applies for timing calculations made against a wall-clock that has processed the leap second.\n
+ * If the timing of the next leap second is unknown, this attribute shall be omitted.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetNextLeapChangeTime () const = 0;
+ };
+ }
+}
+
+#endif /* ILEAPSECONDINFORMATION_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IMPD.h b/libdash/libdash/include/IMPD.h
index 7e69eecf..b5509002 100644
--- a/libdash/libdash/include/IMPD.h
+++ b/libdash/libdash/include/IMPD.h
@@ -17,8 +17,9 @@
* Representations may also include Sub-Representations as defined in 5.3.6 to describe and extract partial information from a Representation.
*
Each Segment consists of one or more Subsegments. Subsegments are described in 6.2.3.2.
*
- * @see dash::mpd::IMPDElement dash::mpd::IProgramInformation dash::mpd::IBaseUrl dash::mpd::IPeriod dash::mpd::IMetrics
- * dash::mpd::IRepresentationBase
+ * @see dash::mpd::IMPDElement dash::mpd::IProgramInformation dash::mpd::IBaseUrl dash::mpd::IDescriptor dash::mpd::IContentProtection dash::mpd::IPeriod dash::mpd::IMetrics
+ * dash::mpd::IRepresentationBase dash::mpd::IServiceDescription dash::mpd::ILeapSecondInformation dash::mpd::IPatchLocation dash::mpd::IInitializationSet
+ * dash::mpd::IUIntVWithID
*
* @author bitmovin Softwareentwicklung OG \n
* Email: libdash-dev@vicky.bitmovin.net
@@ -27,6 +28,10 @@
* @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.
+ *
+ * @contributor Daniele Lorenzi
+ * @contributoremail lorenzidaniele.97@gmail.com
+ * @contributiondate 2021
*/
#ifndef IMPD_H_
@@ -37,9 +42,16 @@
#include "IMPDElement.h"
#include "IProgramInformation.h"
#include "IBaseUrl.h"
+#include "IContentProtection.h"
+#include "IDescriptor.h"
#include "IPeriod.h"
#include "IMetrics.h"
#include "IDASHMetrics.h"
+#include "IServiceDescription.h"
+#include "ILeapSecondInformation.h"
+#include "IPatchLocation.h"
+#include "IInitializationSet.h"
+#include "IUIntVWithID.h"
namespace dash
{
@@ -70,6 +82,60 @@ namespace dash
* @return a reference to a vector of strings
*/
virtual const std::vector& GetLocations () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IPatchLocation objects that specify a location at which the MPD patch document is available. Details on the MPD patch document, this element, and expected processing models are available in subclause 5.15. of ISO/IEC 23009-1. \n
+ * If this element is present, the MPD@id attribute and the MPD@publishTime shall be present. \n
+ * When \c @type is 'static' or the \c @minimumUpdatePeriod attribute is not present, then value of the element is undefined and may be ignored. \n
+ * If this element is not present, no MPD patch document is available. \n
+ * If multiple elements are present, any PatchLocation element may be used.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IPatchLocation objects
+ */
+ virtual const std::vector& GetPatchLocations () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IServiceDescription objects that specify the service descriptions.
+ * For more details refer to the description in section K.4.1 of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IServiceDescription objects
+ */
+ virtual const std::vector& GetServiceDescriptions () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IInitializationSet objects that specify suitable initializations for specific media types for the presentation.
+ * For more details refer to the description in section 5.3.12.2, of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IInitializationSet objects
+ */
+ virtual const std::vector& GetInitializationSets () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IUIntVWithID objects that specify white space separated lists of ids of Initialization Sets of the same content type.
+ * This indicates that any Period in the Media Presentation has at least one Adaptation Set that conforms to one of the Initialization Sets referenced in this element.\n
+ * For details, see subclause 5.3.12, of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IUIntVWithID objects
+ */
+ virtual const std::vector& GetInitializationGroups () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IUIntVWithID objects that specify white space separated lists of ids of Initialization Sets and Initialization Groups to indicate a combination which creates a complete presentation.\n
+ * A client supporting all listed Initialization Sets and Initialization Groups of an Initialization Presentation is expected to be able to play the entire Media Presentation as intended by the service provider.\n
+ * For details, see subclause 5.3.12, of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IUIntVWithID objects
+ */
+ virtual const std::vector& GetInitializationPresentations () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IContentProtection objects that specifies information about content protection
+ * and encryption schemes used in this Media Presentation. If present on this level, it shall include the \c @refId attribute. \n
+ * For details, see subclauses 5.8.1 and 5.8.4.1 of ISO/IEC 23009-1. \n
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IContentProtection objects
+ */
+ virtual const std::vector& GetContentProtections () const = 0;
/**
* Returns a reference to a vector of pointers to dash::mpd::IPeriod objects that specify the information of a Period.\n
@@ -78,12 +144,47 @@ namespace dash
*/
virtual const std::vector& GetPeriods () const = 0;
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify information about the containing element that is considered
+ * essential by the Media Presentation author for processing the containing element. \n
+ * For details, see subclause 5.8.4.8. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& GetEssentialProperties () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify supplemental information about the containing element
+ * that may be used by the DASH Client optimizing the processing. \n
+ * For details, see subclause 5.8.4.9. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& GetSupplementalProperties () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify information on ways to obtain a synchronization to wall-clock time
+ * as used in this Media Presentation. The order of the elements expresses a preference of choice by the Media Presentation author. \n
+ * For more details, refer to subclause 5.8.4.11. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& GetUTCTimings () 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 ISO/IEC 23009-1, Part 1, 2012.
* @return a reference to a vector of pointers to dash::mpd::IPeriod objects
*/
virtual const std::vector& GetMetrics () const = 0;
+
+ /**
+ * Returns a reference to a dash::mpd::ILeapSecondInformation object that specifies leap second information affecting MPD timing calculations.\n
+ * For details, refer to clause 5.13. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a dash::mpd::ILeapSecondInformation object
+ */
+ virtual const ILeapSecondInformation * GetLeapSecondInformation () 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
@@ -126,6 +227,12 @@ namespace dash
* @return a reference to a string
*/
virtual const std::string& GetAvailabilityEndtime () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the time at which the MPD file was published. When not present, the value is unknown.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetPublishTime () 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.
diff --git a/libdash/libdash/include/IModelPair.h b/libdash/libdash/include/IModelPair.h
new file mode 100644
index 00000000..a730c4d3
--- /dev/null
+++ b/libdash/libdash/include/IModelPair.h
@@ -0,0 +1,51 @@
+/**
+ * @class dash::mpd::IModelPair
+ * @brief This interface is needed for accessing the common attributes and elements of ModelPair
+ * as specified in ISO/IEC 23009-1, section 5.3.5.6
+ * @details A ModelPair element defines an extended bandwidth model pair that applies for the Representation.
+ * @see
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IMODELPAIR_H_
+#define IMODELPAIR_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IModelPair : public virtual IMPDElement
+ {
+ public:
+ virtual ~IModelPair(){}
+
+ /**
+ * Returns the reference to a string that specifies a duration used in the definition of the Representation data rate together with \c @bandwidth attribute within the same element. \n
+ * \t NOTE: there are cases for which a real or expected long-term average bitrate may be usefully signaled. Examples include (i) the signaling of the average bitrate of a Representation in On-Demand case. In this case the \c @buffer may be set to the duration of the Period
+ * and the \c @bandwidth may be set to the size of the Representation. (ii) the signaling of the maximum expected long-term bitrate in Live-Edge Periods: In this case the \c @buffer is set to a large value, for example 1 hour, or 24 hours and the bandwidth expresses the maximum amount of bytes over this period.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetBufferTime () const = 0;
+
+ /**
+ * Returns an unsigned integer: \n
+ * Consider a hypothetical constant bitrate channel of bandwidth with the value of this attribute in bits per second (bps).
+ * Then, if the Representation is continuously delivered at this bitrate, starting at any signalled SAP of type 1 or 2 included in this Representation element, a client can be assured of having enough data for continuous playout providing playout begins after \c @bufferTime * \c @bandwidth bits have been received (i.e. at time \c @bufferTime after the first bit is received). \n
+ * For dependent Representations, this value specifies the bandwidth according to the above definition for the aggregation of this Representation and all complementary Representations. \n
+ * For details, see subclause 5.3.5.4.
+ * @return an unsigned integer
+ */
+ virtual uint64_t GetBandwidth () const = 0;
+ };
+ }
+}
+
+#endif /* IMODELPAIR_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IMultipleSegmentBase.h b/libdash/libdash/include/IMultipleSegmentBase.h
index 06d0dff3..c83bb02c 100644
--- a/libdash/libdash/include/IMultipleSegmentBase.h
+++ b/libdash/libdash/include/IMultipleSegmentBase.h
@@ -12,6 +12,10 @@
* @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.
+ *
+ * @contributor Daniele Lorenzi
+ * @contributoremail lorenzidaniele.97@gmail.com
+ * @contributiondate 2021
*/
#ifndef IMULTIPLESEGMENTBASE_H_
@@ -59,6 +63,14 @@ namespace dash
* @return an unsigned integer
*/
virtual uint32_t GetStartNumber () const = 0;
+
+ /**
+ * Returns a integer specifying the number of the last Media Segment in this Representation in the Period. \n
+ * If not present, the number is inferred from the duration of the Period.
+ * For more details refer to 5.3.9.5.3. of ISO/IEC 23009-1, Part 1, 2012.
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetEndNumber () const = 0;
};
}
}
diff --git a/libdash/libdash/include/IOperatingBandwidth.h b/libdash/libdash/include/IOperatingBandwidth.h
new file mode 100644
index 00000000..78f4d9c0
--- /dev/null
+++ b/libdash/libdash/include/IOperatingBandwidth.h
@@ -0,0 +1,71 @@
+/**
+ * @class dash::mpd::IOperatingBandwidth
+ * @brief This interface is needed for accessing the attributes of OperatingBandwidth
+ * as specified in ISO/IEC 23009-1, subclause K.3.5.
+ * @details Table K.4 defines the service description parameters for operating bandwidth.
+ * The keys in Table K.4 shall be used to refer to the operating bandwidth as defined in Table K.3.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IOPERATINGBANDWIDTH_H_
+#define IOPERATINGBANDWIDTH_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IOperatingBandwidth : public virtual IMPDElement
+ {
+ public:
+ virtual ~IOperatingBandwidth(){}
+
+ /**
+ * Returns a reference to a string that defines the media type for which the bandwidth parameters apply. They type can be:
+ *
+ *
\c video: applies to video
+ *
\c audio: applies to audio
+ *
\c any: applies to any media type individually
+ *
\c all: applies to aggregation of all media types
+ *
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMediaType () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the minimum bandwidth value desired through this presentation for the above MediaType.
+ * This is the smallest desired aggregated value for the \c @bandwidth attribute for all Representations of this media type to be played concurrently by the DASH Client during regular playback.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMin () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the maximum bandwidth value desired through this presentation for the above MediaType.
+ * This is the largest desired aggregated value for the \c @bandwidth attribute for all Representations of this media type to be played concurrently by the DASH Client during regular playback.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMax () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the target bandwidth value desired through this presentation for the above MediaType.
+ * This is the largest desired aggregated value for the \c @bandwidth attribute for all Representations of this media type to be played concurrently by the DASH Client during regular playback.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetTarget () const = 0;
+ };
+ }
+}
+
+#endif /* IOPERATINGBANDWIDTH_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IOperatingQuality.h b/libdash/libdash/include/IOperatingQuality.h
new file mode 100644
index 00000000..4d4a02f2
--- /dev/null
+++ b/libdash/libdash/include/IOperatingQuality.h
@@ -0,0 +1,87 @@
+/**
+ * @class dash::mpd::IOperatingQuality
+ * @brief This interface is needed for accessing the attributes of OperatingQuality
+ * as specified in ISO/IEC 23009-1, subclause K.3.4.
+ * @details Table K.3 defines the service description parameters for operational quality.
+ * The keys in Table K.3 shall be used to refer to the operating quality as defined in Table K.3.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IOPERATINGQUALITY_H_
+#define IOPERATINGQUALITY_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IOperatingQuality : public virtual IMPDElement
+ {
+ public:
+ virtual ~IOperatingQuality(){}
+
+ /**
+ * Returns a reference to a string that defines the media type for which these quality parameters apply. They type can be
+ *
+ *
\c video: applies to video
+ *
\c audio: applies to audio
+ *
\c any: applies to any media type
+ *
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetMediaType () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the minimum quality ranking value desired through this presentation for the above MediaType.
+ * This is the largest desired value for the \c @qualityRanking attribute for the Representations to be played by the DASH Client during regular playback.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMin () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the maximum quality ranking value desired through this presentation for the above MediaType.
+ * This is the largest desired value for the \c @qualityRanking attribute for the Representations to be played by the DASH Client during regular playback.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMax () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the quality ranking value desired through this presentation for the above MediaType.
+ * This is the target value for the \c @qualityRanking attribute for the Representations to be played by the DASH Client during regular playback.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetTarget () const = 0;
+
+ /**
+ * Returns a reference to a string that defines the interpretation of the value of \c @qualityRanking attribute.
+ * If not present, the quality is considered in linear scale.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetType () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the maximum quality difference value recommended by the content author for the presentation for the above MediaType.
+ * This is the recommended maximum difference between \c @qualityRanking attributes for Representations being played concurrently.
+ * This is typically applicable for Representations that are picked from Adaptation Sets within one Preselection.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint32_t GetMaxDifference () const = 0;
+ };
+ }
+}
+
+#endif /* IOPERATINGQUALITY_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IPatchLocation.h b/libdash/libdash/include/IPatchLocation.h
new file mode 100644
index 00000000..83614bfd
--- /dev/null
+++ b/libdash/libdash/include/IPatchLocation.h
@@ -0,0 +1,49 @@
+/**
+ * @class dash::mpd::IPatchLocation
+ * @brief This interface is needed for accessing the attributes of PatchLocation.
+ * @details An MPD may contain one or several PatchLocation elements to provide a location for an MPD patch document that may apply to the MPD including this element in order to generate an updated MPD.\n
+ * The semantics of the MPD patch location element are provided in Table 48 and the XML syntax is provided in Table 49 of ISO/IEC 23009-1.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IPATCHLOCATION_H_
+#define IPATCHLOCATION_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IPatchLocation : public virtual IMPDElement
+ {
+ public:
+ virtual ~IPatchLocation(){}
+
+ /**
+ * Returns a reference to a string that specifies a location at which the MPD patch is available. The referenced document shall conform to an MPD patch document as defined in subclause 5.15.3. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a string
+ */
+ virtual const std::string& GetUrl () const = 0;
+
+ /**
+ * Returns an double that specifies the time period duration (in seconds) starting from MPD@publishTime until the MPD patch document is at least available at the indicated location above. For details refer to the processing model in subclause 5.14.4. of ISO/IEC 23009-1. \n
+ * If not present, the value is unknown.
+
+ *
+ * @return a double
+ */
+ virtual double GetTtl () const = 0;
+ };
+ }
+}
+
+#endif /* IPATCHLOCATION_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IPeriod.h b/libdash/libdash/include/IPeriod.h
index 10ec9244..dad75a95 100644
--- a/libdash/libdash/include/IPeriod.h
+++ b/libdash/libdash/include/IPeriod.h
@@ -28,7 +28,8 @@
* 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 Period element solely to determine the Period timeline, e.g. in case of seeking,
* Period\@start or previous Period's Period\@duration 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
+ * @see dash::mpd::IMPDElement dash::mpd::BaseUrl dash::mpd::IAdaptationSet dash::mpd::ISegmentBase dash::mpd::ISegmentList dash::mpd::ISegmentTemplate dash::mpd::ISegmentBase
+ * dash::mpd::IDescriptor dash::mpd::ILabel dash::mpd::IEventStream dash::mpd::ISubset dash::mpd::IPreselection dash::mpd::IContentProtection
*
* @author bitmovin Softwareentwicklung OG \n
* Email: libdash-dev@vicky.bitmovin.net
@@ -37,6 +38,10 @@
* @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.
+ *
+ * @contributor Daniele Lorenzi
+ * @contributoremail lorenzidaniele.97@gmail.com
+ * @contributiondate 2021
*/
#ifndef IPERIOD_H_
@@ -49,8 +54,14 @@
#include "ISegmentBase.h"
#include "ISegmentList.h"
#include "ISegmentTemplate.h"
+#include "IDescriptor.h"
+#include "ILabel.h"
+#include "IEventStream.h"
+#include "IContentProtection.h"
+#include "IServiceDescription.h"
#include "IAdaptationSet.h"
#include "ISubset.h"
+#include "IPreselection.h"
namespace dash
{
@@ -66,7 +77,7 @@ namespace dash
* For more details refer to the description in section 5.6. of ISO/IEC 23009-1, Part 1, 2012.
* @return a reference to a vector of pointers to dash::mpd::IBaseUrl objects
*/
- virtual const std::vector& GetBaseURLs () const = 0;
+ virtual const std::vector& GetBaseURLs () const = 0;
/**
* Returns a pointer to a dash::mpd::ISegmentBase object that specifies default Segment Base information.\n
@@ -74,7 +85,7 @@ namespace dash
* For more details see section 5.3.9. of ISO/IEC 23009-1, Part 1, 2012.
* @return a pointer to a dash::mpd::ISegmentBase object
*/
- virtual ISegmentBase* GetSegmentBase () const = 0;
+ virtual ISegmentBase* GetSegmentBase () const = 0;
/**
* Returns a pointer to a dash::mpd::ISegmentList object that specifies default Segment List information.\n
@@ -82,7 +93,7 @@ namespace dash
* For more details see section 5.3.9. of ISO/IEC 23009-1, Part 1, 2012.
* @return a pointer to a dash::mpd::ISegmentList object
*/
- virtual ISegmentList* GetSegmentList () const = 0;
+ virtual ISegmentList* GetSegmentList () const = 0;
/**
* Returns a pointer to a dash::mpd::ISegmentTemplate object that specifies default Segment Template information.\n
@@ -90,7 +101,39 @@ namespace dash
* For more details see section 5.3.9. of ISO/IEC 23009-1, Part 1, 2012.
* @return a pointer to a dash::mpd::ISegmentTemplate object
*/
- virtual ISegmentTemplate* GetSegmentTemplate () const = 0;
+ virtual ISegmentTemplate* GetSegmentTemplate () const = 0;
+
+ /**
+ * Returns a pointer to a dash::mpd::IDescriptor object that specifies that this Period belongs to a certain asset. \n
+ * For more details, see subclause 5.8.5.7. of ISO/IEC 23009-1.
+ *
+ * @return a pointer to a dash::mpd::IDescriptor object
+ */
+ virtual const IDescriptor * GetAssetIdentifier () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IEventStream objects, each of which specifies Event Stream information.\n
+ * For more details see section 5.10.2. of ISO/IEC 23009-1.
+ * @return a reference to a vector of pointers to dash::mpd::IEventStream objects
+ */
+ virtual const std::vector& GetEventStreams () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IServiceDescription objects that specify the service descriptions.
+ * For more details refer to the description in section K.4.1 of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IServiceDescription objects
+ */
+ virtual const std::vector& GetServiceDescriptions () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IContentProtection objects that specifies information about content protection
+ * and encryption schemes used in this Media Presentation. If present on this level, it shall include the \c @refId attribute. \n
+ * For details, see subclauses 5.8.1 and 5.8.4.1 of ISO/IEC 23009-1. \n
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IContentProtection objects
+ */
+ virtual const std::vector& GetContentProtections () const = 0;
/**
* Returns a reference to a vector of pointers to dash::mpd::IAdaptationSet objects that specify Adapatation Sets.\n
@@ -98,34 +141,75 @@ namespace dash
* For more details see section 5.3.3. of ISO/IEC 23009-1, Part 1, 2012.
* @return a reference to a vector of pointers to dash::mpd::IAdaptationSet objects
*/
- virtual const std::vector& GetAdaptationSets () const = 0;
+ virtual const std::vector& 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 ISO/IEC 23009-1, Part 1, 2012.
* @return a reference to a vector of pointers to dash::mpd::ISubset objects
*/
- virtual const std::vector& GetSubsets () const = 0;
+ virtual const std::vector& GetSubsets () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IDescriptor objects that specify supplemental information about the containing element
+ * that may be used by the DASH Client optimizing the processing. \n
+ * For details, see subclause 5.8.4.9. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IDescriptor objects
+ */
+ virtual const std::vector& GetSupplementalProperties () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::ILabel objects that specify summary labels for a group of Labels.
+ * For more details, refer to subclause 5.3.10. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::ILabel objects
+ */
+ virtual const std::vector& GetGroupLabels () const = 0;
+
+ /**
+ * Returns a reference to a vector of pointers to dash::mpd::IPreselection objects that specify preselections,
+ * i.e. combinations of Adaptation Sets that form a specific experience and can be selected for joint decoding and rendering.\n
+ * For more details, refer to subclause 5.3.11. of ISO/IEC 23009-1.
+ *
+ * @return a reference to a vector of pointers to dash::mpd::IPreselection objects
+ */
+ virtual const std::vector& GetPreselections () const = 0;
/**
* Returns a reference to a string that specifies a reference to an external Period element.
* @return a reference to a string
*/
- virtual const std::string& GetXlinkHref () const = 0;
+ 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;
+ virtual const std::string& GetXlinkActuate () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the type of W3C XLINK being used. \n
+ * In the context of this document, all references shall be W3C XLINK simple links. The attribute \c @xlink:type is optional with fixed setting \c @xlink:type="simple".
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkType () const = 0;
+
+ /**
+ * Returns a reference to a string that specifies the desired behaviour of the remote element entity once dereferenced from within an MPD as defined in W3C XLINK. \n
+ * In the context of this document, the attribute \c @xlink:show is optional with fixed setting \c @xlink:show="embed". \n
+ * \b NOTE In W3C XLINK, the behaviour of conforming XLink applications when embedding as a remote element entity is not defined. Thus, the actual behaviour for this document is defined in subclause 5.5.3. of ISO/IEC 23009-1.
+ * @return a reference to a string
+ */
+ virtual const std::string& GetXlinkShow () 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;
+ 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
@@ -133,21 +217,21 @@ namespace dash
* If not present, refer to the details in section 5.3.2.1. of ISO/IEC 23009-1, Part 1, 2012
* @return a reference to a string
*/
- virtual const std::string& GetStart () const = 0;
+ 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
+ * 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 ISO/IEC 23009-1, Part 1, 2012
* @return a reference to a string
*/
- virtual const std::string& GetDuration () const = 0;
+ virtual const std::string& GetDuration () const = 0;
/**
* When set to \c 'true', this is equivalent as if the AdaptationSet\@bitstreamSwitching for each Adaptation Set contained in this Period is set to \c 'true'.
* In this case, the AdaptationSet\@bitstreamSwitching attribute shall not be set to \c 'false' for any Adaptation Set in this Period.
* @return a bool value
*/
- virtual bool GetBitstreamSwitching () const = 0;
+ virtual bool GetBitstreamSwitching () const = 0;
};
}
diff --git a/libdash/libdash/include/IPlaybackRate.h b/libdash/libdash/include/IPlaybackRate.h
new file mode 100644
index 00000000..289cfd5c
--- /dev/null
+++ b/libdash/libdash/include/IPlaybackRate.h
@@ -0,0 +1,50 @@
+/**
+ * @class dash::mpd::IPlaybackRate
+ * @brief This interface is needed for accessing the attributes of PlaybackRate
+ * as specified in ISO/IEC 23009-1, subclause K.3.3.
+ * @details Table K.2 defines the service description parameters for non-nominal playback rate.
+ * The keys in Table K.2 shall be used to refer to the non-nominal playback rate as defined in Table K.2.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IPLAYBACKRATE_H_
+#define IPLAYBACKRATE_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IPlaybackRate : public virtual IMPDElement
+ {
+ public:
+ virtual ~IPlaybackRate(){}
+
+ /**
+ * Returns a double that specifies the maximum playback rate that the content provider indicates is appropriate for the purposes of automatically adjusting
+ * playback latency and buffer occupancy during normal playback, where 1.0 is normal playback speed.
+ *
+ * @return a double
+ */
+ virtual double GetMax () const = 0;
+
+ /**
+ * Returns a double that specifies the minimum playback rate that the content provider indicates is appropriate for the purposes of automatically adjusting
+ * playback latency and buffer occupancy during normal playback, where 1.0 is normal playback speed.
+ *
+ * @return a double
+ */
+ virtual double GetMin () const = 0;
+ };
+ }
+}
+
+#endif /* IPLAYBACKRATE_H_ */
\ No newline at end of file
diff --git a/libdash/libdash/include/IPopularityRate.h b/libdash/libdash/include/IPopularityRate.h
new file mode 100644
index 00000000..89595b82
--- /dev/null
+++ b/libdash/libdash/include/IPopularityRate.h
@@ -0,0 +1,65 @@
+/**
+ * @class dash::mpd::IPopularityRate
+ * @brief This interface is needed for accessing the common attributes of PR of 5.14.2., table 43 of ISO/IEC 23009-1
+ * @details In the context of the \b ContentPopularityRate element, one or more PopularityRate elements are used to specify start time and number of segments for a contiguous sequence of segments assigned identical Popularity Rate value.
+ * For more details, see 5.14.2., table 43 of ISO/IEC 23009-1.
+ * @see dash::mpd::IMPDElement
+ *
+ * @author Daniele Lorenzi \n
+ * Email: lorenzidaniele.97@gmail.com
+ * @version 2.1
+ * @date 2021
+ */
+
+#ifndef IPOPULARITYRATE_H_
+#define IPOPULARITYRATE_H_
+
+#include "config.h"
+
+#include "IMPDElement.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IPopularityRate : public virtual IMPDElement
+ {
+ public:
+ virtual ~IPopularityRate(){}
+
+ /**
+ * Returns an unsigned integer that indicates the relative Popularity Rate of the segments of containing entity (i.e. the Preselection or Adaptation Set containing this \b ContentPopularityRate element),
+ * within the same Media Presentation. No unit. The value shall be in the range of 1 to 100.
+ * A greater value means higher likelihood of the series of (Sub)Segments being consumed/requested.
+ *
+ * @return an unsigned integer
+ */
+ virtual uint8_t GetPopularityRate () const = 0;
+
+ /**
+ * Returns an unsigned integer that specifies the first Segment from which \c @popularityRate value of this \b PR element is relevant.
+ * If the addressing scheme for the containing entity is using Segment template with \c $Number$, then \c @popularityRate applies from the earliest presentation time of the Segment with the segment number specified by this attribute.
+ * For other addressing schemes, the value of \c @popularityRate applies from the Segment which contains the media sample whose presentation time specified by this attribute in unit of \c @timescale on Representation level.
+ * If not present, then it shall be assumed that \c @popularityRate applies from:
+ *