From fedf1dcb90472dc72bb677a9e535a08d556b8e3e Mon Sep 17 00:00:00 2001 From: Christopher Mueller <christopher.mueller@itec.aau.at> Date: Mon, 30 Jan 2012 14:48:24 +0100 Subject: [PATCH] dash: segment added byterange and tochunk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hugo Beauzée-Luyssen <beauze.h@gmail.com> --- modules/stream_filter/dash/mpd/Segment.cpp | 71 ++++++++++++++++++++-- modules/stream_filter/dash/mpd/Segment.h | 20 +++++- 2 files changed, 82 insertions(+), 9 deletions(-) diff --git a/modules/stream_filter/dash/mpd/Segment.cpp b/modules/stream_filter/dash/mpd/Segment.cpp index 5ac7f03d4b..44d4d744fb 100644 --- a/modules/stream_filter/dash/mpd/Segment.cpp +++ b/modules/stream_filter/dash/mpd/Segment.cpp @@ -28,24 +28,83 @@ #include "Segment.h" using namespace dash::mpd; +using namespace dash::http; -std::string Segment::getSourceUrl() const +Segment::Segment () : + startByte (-1), + endByte (-1) +{ + +} + +std::string Segment::getSourceUrl () const { return this->sourceUrl; } -void Segment::setSourceUrl( const std::string &url ) +void Segment::setSourceUrl ( const std::string &url ) { if ( url.empty() == false ) this->sourceUrl = url; } - -bool Segment::isSingleShot() const +bool Segment::isSingleShot () const { return true; } - -void Segment::done() +void Segment::done () { //Only used for a SegmentTemplate. } +void Segment::addBaseUrl (BaseUrl *url) +{ + this->baseUrls.push_back(url); +} +const std::vector<BaseUrl *>& Segment::getBaseUrls () const +{ + return this->baseUrls; +} +void Segment::setByteRange (int start, int end) +{ + this->startByte = start; + this->endByte = end; +} +int Segment::getStartByte () const +{ + return this->startByte; +} +int Segment::getEndByte () const +{ + return this->endByte; +} +dash::http::Chunk* Segment::toChunk () +{ + Chunk *chunk = new Chunk(); + + if(this->startByte != -1 && this->endByte != -1) + { + chunk->setStartByte(this->startByte); + chunk->setEndByte(this->endByte); + } + + if(this->baseUrls.size() > 0) + { + std::stringstream ss; + ss << this->baseUrls.at(0)->getUrl() << this->sourceUrl; + chunk->setUrl(ss.str()); + ss.clear(); + + for(size_t i = 1; i < this->baseUrls.size(); i++) + { + ss << this->baseUrls.at(i)->getUrl() << this->sourceUrl; + chunk->addOptionalUrl(ss.str()); + ss.clear(); + } + + } + else + { + chunk->setUrl(this->sourceUrl); + } + + return chunk; +} diff --git a/modules/stream_filter/dash/mpd/Segment.h b/modules/stream_filter/dash/mpd/Segment.h index 9c2dd7eae1..55ac6ef2fa 100644 --- a/modules/stream_filter/dash/mpd/Segment.h +++ b/modules/stream_filter/dash/mpd/Segment.h @@ -26,6 +26,10 @@ #define SEGMENT_H_ #include <string> +#include <sstream> +#include <vector> +#include "mpd/BaseUrl.h" +#include "http/Chunk.h" namespace dash { @@ -34,6 +38,7 @@ namespace dash class Segment { public: + Segment(); virtual ~Segment(){} virtual std::string getSourceUrl() const; virtual void setSourceUrl( const std::string &url ); @@ -42,11 +47,20 @@ namespace dash * That is basically true when using an Url, and false * when using an UrlTemplate */ - virtual bool isSingleShot() const; - virtual void done(); + virtual bool isSingleShot () const; + virtual void done (); + virtual void addBaseUrl (BaseUrl *url); + virtual const std::vector<BaseUrl *>& getBaseUrls () const; + virtual void setByteRange (int start, int end); + virtual int getStartByte () const; + virtual int getEndByte () const; + virtual dash::http::Chunk* toChunk (); protected: - std::string sourceUrl; + std::string sourceUrl; + std::vector<BaseUrl *> baseUrls; + int startByte; + int endByte; }; } } -- 2.25.4