aboutsummaryrefslogtreecommitdiffstats
path: root/MPD/SegmentTemplateStream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'MPD/SegmentTemplateStream.cpp')
-rw-r--r--MPD/SegmentTemplateStream.cpp55
1 files changed, 48 insertions, 7 deletions
diff --git a/MPD/SegmentTemplateStream.cpp b/MPD/SegmentTemplateStream.cpp
index 66004294..a62a9bab 100644
--- a/MPD/SegmentTemplateStream.cpp
+++ b/MPD/SegmentTemplateStream.cpp
@@ -14,15 +14,28 @@
using namespace dash::mpd;
using namespace libdash::framework::mpd;
-SegmentTemplateStream::SegmentTemplateStream(IMPD *mpd, IPeriod *period, IAdaptationSet *adaptationSet, IRepresentation *representation) :
- AbstractRepresentationStream (mpd, period, adaptationSet, representation)
+SegmentTemplateStream::SegmentTemplateStream(viper::managers::StreamType type, MPDWrapper *mpdWrapper, IPeriod *period, IAdaptationSet *adaptationSet, IRepresentation *representation) :
+ AbstractRepresentationStream (type, mpdWrapper, period, adaptationSet, representation)
{
- this->baseUrls = BaseUrlResolver::resolveBaseUrl(mpd, period, adaptationSet, 0, 0, 0);
+// this->baseUrls = BaseUrlResolver::resolveBaseUrl(mpd, period, adaptationSet, 0, 0, 0);
+ this->baseUrls = BaseUrlResolver::resolveBaseUrl(type, mpdWrapper, 0, 0, 0);
this->segmentTemplate = findSegmentTemplate();
this->inSync = false;
this->currentSegment = 0;
calculateSegmentStartTimes();
}
+
+SegmentTemplateStream::SegmentTemplateStream(viper::managers::StreamType type, MPDWrapper *mpdWrapper, IPeriod *period, IAdaptationSet *adaptationSet, IRepresentation *representation, IMPD* mpd) :
+ AbstractRepresentationStream (type, mpdWrapper, period, adaptationSet, representation)
+{
+// this->baseUrls = BaseUrlResolver::resolveBaseUrl(mpd, period, adaptationSet, 0, 0, 0);
+ this->baseUrls = BaseUrlResolver::resolveBaseUrl(type, mpdWrapper, 0, 0, 0, mpd);
+ this->segmentTemplate = findSegmentTemplate();
+ this->inSync = false;
+ this->currentSegment = 0;
+ calculateSegmentStartTimes();
+}
+
SegmentTemplateStream::~SegmentTemplateStream()
{
}
@@ -55,7 +68,14 @@ ISegment* SegmentTemplateStream::getMediaSegment(size_t segmentNumber)
{
/* time-based template */
if (this->segmentTemplate->GetSegmentTimeline())
- {
+ {//Get the one at segmentNumber
+ if(this->segmentStartTimes.size() > segmentNumber)
+ return this->segmentTemplate->GetMediaSegmentFromTime(baseUrls, representation->GetId(), representation->GetBandwidth(), this->segmentStartTimes.at(segmentNumber));
+ else
+ return NULL;
+
+//The following is to be used if you wish to start directly from the right time
+/* {
if(this->inSync)
{
this->currentSegment++;
@@ -86,7 +106,7 @@ ISegment* SegmentTemplateStream::getMediaSegment(size_t segmentNumber)
this->currentSegment = segNumber;
return this->segmentTemplate->GetMediaSegmentFromTime(baseUrls, representation->GetId(), representation->GetBandwidth(), this->segmentStartTimes.at(this->currentSegment));
}
- return NULL;
+ return NULL; */
}
/* number-based template */
@@ -115,9 +135,9 @@ uint32_t SegmentTemplateStream::getSize()
uint32_t numberOfSegments = 0;
double mediaPresentationDuration = 0;
- if (this->mpd->GetType() == "static")
+ if (this->mpdWrapper->getTypeWithoutLock() == "static")
{
- mediaPresentationDuration = TimeResolver::getDurationInSec(this->mpd->GetMediaPresentationDuration());
+ mediaPresentationDuration = TimeResolver::getDurationInSec(this->mpdWrapper->getMediaPresentationDuration());
numberOfSegments = (uint32_t) ceil(mediaPresentationDuration / (this->segmentTemplate->GetDuration() / this->segmentTemplate->GetTimescale()));
}
else
@@ -194,3 +214,24 @@ void SegmentTemplateStream::calculateSegmentStartTimes()
}
this->averageDuration = totalDuration / numOfTimelines;
}
+
+uint32_t SegmentTemplateStream::getTime(size_t segmentNumber)
+{
+ if(segmentNumber < this->segmentStartTimes.size())
+ return this->segmentStartTimes.at(segmentNumber);
+ else
+ return 0;
+}
+
+size_t SegmentTemplateStream::getSegmentNumber(uint32_t time)
+{
+ size_t i;
+ for(i = 0; i < this->segmentStartTimes.size(); i ++)
+ {
+ if(time <= this->segmentStartTimes.at(i))
+ {
+ break;
+ }
+ }
+ return i;
+}