Update to be compliant with [HICN-206] Customize first part of the name for HTTP. 46/19846/1
authorjsamain <[email protected]>
Mon, 27 May 2019 16:59:35 +0000 (18:59 +0200)
committerjsamain <[email protected]>
Mon, 27 May 2019 16:59:35 +0000 (18:59 +0200)
Added the -P option to set the IPv6 first word of the name.

Change-Id: I321b22450d0efee713ddefef7405cf46ee381369
Signed-off-by: jsamain <[email protected]>
17 files changed:
Common/Config.cpp
Common/Config.h
Input/DASHManager.cpp
Input/DASHManager.h
Input/DASHReceiver.cpp
Input/DASHReceiver.h
Input/ICNConnectionConsumerApi.cpp
Input/ICNConnectionConsumerApi.h
Managers/MultimediaManager.cpp
Managers/MultimediaManager.h
Managers/MultimediaStream.cpp
Managers/MultimediaStream.h
UI/DASHPlayer.cpp
UI/DASHPlayer.h
main.cpp
qml/Viper/Options.qml
qml/Viper/main.qml

index 70b6776..b1a2ddf 100644 (file)
@@ -158,6 +158,7 @@ public:
 
         settings.beginGroup(QString::fromLatin1("backend"));
         settings.setValue(QString::fromLatin1("video_uri"), video_uri);
+        settings.setValue(QString::fromLatin1("v6FirstWord"), v6FirstWord);
         settings.setValue(QString::fromLatin1("segment_buffer_size"), segment_buffer_size);
         settings.endGroup();
 
@@ -283,6 +284,7 @@ public:
     QString frag_sample;
     QString frag_pp;
     QString video_uri;
+    QString v6FirstWord;
     qreal segment_buffer_size;
     QString last_played;
     QString adaptation_logic;
@@ -522,6 +524,7 @@ void Config::reload()
 
     settings.beginGroup(QString::fromLatin1("backend"));
     setVideoURI(settings.value(QString::fromLatin1("video_uri"), QString::fromLatin1("http://webserver/sintel/mpd")).toString());
+    setV6FirstWord(settings.value(QString::fromLatin1("v6FirstWord"), QString::fromLatin1("b001")).toString());
 
     setSegmentBufferSize(settings.value(QString::fromLatin1("segment_buffer_size"), 20).toReal());
     settings.endGroup();
@@ -1291,6 +1294,10 @@ QString Config::videoURI() const
 {
     return mpData->video_uri;
 }
+QString Config::v6FirstWord() const
+{
+    return mpData->v6FirstWord;
+}
 
 Config& Config::setVideoURI(const QString &text)
 {
@@ -1302,6 +1309,16 @@ Config& Config::setVideoURI(const QString &text)
     return *this;
 }
 
+Config& Config::setV6FirstWord(const QString &text)
+{
+    if (mpData->v6FirstWord == text)
+        return *this;
+    mpData->v6FirstWord = text;
+    Q_EMIT v6FirstWordChanged();
+    Q_EMIT changed();
+    return *this;
+}
+
 qreal Config::segmentBufferSize() const
 {
     return mpData->segment_buffer_size;
index 059c677..7f2bfd9 100644 (file)
@@ -70,6 +70,7 @@ class COMMON_EXPORT Config : public QObject
     Q_PROPERTY(QString fragSample READ fragSample WRITE setFragSample NOTIFY fragSampleChanged)
     Q_PROPERTY(QString fragPostProcess READ fragPostProcess WRITE setFragPostProcess NOTIFY fragPostProcessChanged)
     Q_PROPERTY(QString videoURI READ videoURI WRITE setVideoURI NOTIFY videoURIChanged)
+    Q_PROPERTY(QString v6FirstWord READ v6FirstWord WRITE setV6FirstWord NOTIFY v6FirstWordChanged)
 
     Q_PROPERTY(qreal segmentBufferSize READ segmentBufferSize WRITE setSegmentBufferSize NOTIFY segmentBufferSizeChanged)
     Q_PROPERTY(QString adaptationLogic READ adaptationLogic WRITE setAdaptationLogic NOTIFY adaptationLogicChanged)
@@ -266,6 +267,8 @@ public:
     QString fragPostProcess() const;
     Config& setVideoURI(const QString &value);
     QString videoURI() const;
+    Config& setV6FirstWord(const QString &value);
+    QString v6FirstWord() const;
     Config& setSegmentBufferSize(qreal value);
     qreal segmentBufferSize() const;
     Config& setAdaptationLogic(const QString &value);
@@ -392,6 +395,7 @@ public:
     Q_SIGNAL void languageChanged();
     Q_SIGNAL void historyChanged();
     Q_SIGNAL void videoURIChanged();
+    Q_SIGNAL void v6FirstWordChanged();
     Q_SIGNAL void segmentBufferSizeChanged();
     Q_SIGNAL void adaptationLogicChanged();
     Q_SIGNAL void icnChanged();
index b3ff830..5317b20 100644 (file)
@@ -19,22 +19,23 @@ using namespace dash::network;
 using namespace dash::mpd;
 using namespace libdash::framework::mpd;
 
-DASHManager::DASHManager(viper::managers::StreamType type, uint32_t maxCapacity, IDASHManagerObserver* stream, MPDWrapper* mpdWrapper, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop) :
-    readSegmentCount   (0),
-    receiver           (NULL),
-    multimediaStream   (stream),
-    isRunning          (false),
-    icn                        (icnEnabled),
-    icnAlpha           (icnAlpha),
-    noDecoding         (nodecoding),
-    beta                       (beta),
-    drop                       (drop)
+DASHManager::DASHManager(viper::managers::StreamType type, uint32_t maxCapacity, IDASHManagerObserver* stream, MPDWrapper* mpdWrapper, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop, std::string v6FirstWord) :
+    readSegmentCount    (0),
+    receiver            (NULL),
+    multimediaStream    (stream),
+    isRunning           (false),
+    icn                 (icnEnabled),
+    icnAlpha            (icnAlpha),
+    noDecoding          (nodecoding),
+    beta                (beta),
+    drop                (drop),
+    v6FirstWord         (v6FirstWord)
 {
 
     this->buffer = new Buffer<MediaObject>(maxCapacity,libdash::framework::buffer::VIDEO);
     this->buffer->attachObserver(this);
 
-    this->receiver  = new DASHReceiver(type, mpdWrapper, this, this->buffer, maxCapacity, this->isICN(), this->icnAlpha, this->beta, this->drop);
+    this->receiver  = new DASHReceiver(type, mpdWrapper, this, this->buffer, maxCapacity, this->isICN(), this->icnAlpha, this->beta, this->drop, this->v6FirstWord);
 }
 DASHManager::~DASHManager()
 {
index 4bd301e..62c4bff 100644 (file)
@@ -36,7 +36,7 @@ namespace input
 class DASHManager : public IDASHReceiverObserver, public IBufferObserver
 {
 public:
-    DASHManager             (viper::managers::StreamType type, uint32_t maxCapacity, IDASHManagerObserver *multimediaStream, libdash::framework::mpd::MPDWrapper *mpdWrapper, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop);
+    DASHManager             (viper::managers::StreamType type, uint32_t maxCapacity, IDASHManagerObserver *multimediaStream, libdash::framework::mpd::MPDWrapper *mpdWrapper, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop, std::string v6FirstWord);
     virtual ~DASHManager    ();
 
     bool start();
@@ -66,6 +66,7 @@ public:
 private:
     float                                               beta;
     float                                               drop;
+    std::string                                         v6FirstWord;
     buffer::Buffer<MediaObject>                         *buffer;
     DASHReceiver                                        *receiver;
     uint32_t                                            readSegmentCount;
index 0d77bdf..c5769b1 100644 (file)
@@ -19,7 +19,7 @@ using namespace dash::mpd;
 
 using duration_in_seconds = std::chrono::duration<double, std::ratio<1, 1> >;
 
-DASHReceiver::DASHReceiver          (viper::managers::StreamType type, MPDWrapper *mpdWrapper, IDASHReceiverObserver *obs, Buffer<MediaObject> *buffer, uint32_t bufferSize, bool icnEnabled, double icnAlpha, float beta, float drop) :
+DASHReceiver::DASHReceiver          (viper::managers::StreamType type, MPDWrapper *mpdWrapper, IDASHReceiverObserver *obs, Buffer<MediaObject> *buffer, uint32_t bufferSize, bool icnEnabled, double icnAlpha, float beta, float drop, std::string v6FirstWord) :
     type                        (type),
     mpdWrapper                  (mpdWrapper),
     adaptationSetStream         (NULL),
@@ -42,6 +42,7 @@ DASHReceiver::DASHReceiver          (viper::managers::StreamType type, MPDWrappe
     isLooping                   (false),
     beta                        (beta),
     drop                        (drop),
+    v6FirstWord               (v6FirstWord),
     bufferingThread             (NULL),
     mpdFetcherThread            (NULL)
 {
@@ -57,8 +58,8 @@ DASHReceiver::DASHReceiver          (viper::managers::StreamType type, MPDWrappe
 
     if(icn)
     {
-        this->conn = new ICNConnectionConsumerApi(this->icnAlpha, this->beta, this->drop);
-        this->initConn = new ICNConnectionConsumerApi(this->icnAlpha, this->beta, this->drop);
+        this->conn = new ICNConnectionConsumerApi(this->icnAlpha, this->beta, this->drop, this->v6FirstWord);
+        this->initConn = new ICNConnectionConsumerApi(this->icnAlpha, this->beta, this->drop, this->v6FirstWord);
     }
     InitializeCriticalSection(&this->monitorMutex);
     InitializeCriticalSection(&this->monitorPausedMutex);
index e5b48ad..545ecb7 100644 (file)
@@ -48,7 +48,7 @@ class MediaObject;
 class DASHReceiver
 {
 public:
-    DASHReceiver(viper::managers::StreamType type, libdash::framework::mpd::MPDWrapper *mpdWrapper, IDASHReceiverObserver *obs, buffer::Buffer<MediaObject> *buffer, uint32_t bufferSize, bool icnEnabled, double icnAlpha, float beta, float drop);
+    DASHReceiver(viper::managers::StreamType type, libdash::framework::mpd::MPDWrapper *mpdWrapper, IDASHReceiverObserver *obs, buffer::Buffer<MediaObject> *buffer, uint32_t bufferSize, bool icnEnabled, double icnAlpha, float beta, float drop, std::string v6FirstWord);
     virtual ~DASHReceiver();
 
     bool Start();
@@ -84,6 +84,7 @@ public:
 private:
     float                                               beta;
     float                                               drop;
+    std::string                                         v6FirstWord;
     bool                                                withFeedBack;
     bool                                                isBufferBased;
     std::map<std::string, MediaObject*>                 initSegments;
index a7f52b4..c93e9ed 100644 (file)
@@ -36,14 +36,15 @@ using duration_in_seconds = std::chrono::duration<double, std::ratio<1, 1> >;
 namespace libdash {
 namespace framework {
 namespace input {
-ICNConnectionConsumerApi::ICNConnectionConsumerApi(double alpha, float beta, float drop) :
+ICNConnectionConsumerApi::ICNConnectionConsumerApi(double alpha, float beta, float drop, std::string v6FirstWord) :
     m_first(1),
     m_isFinished(false),
     sizeDownloaded (0),
     cumulativeBytesReceived(0),
     icnAlpha(alpha),
     beta(beta),
-    drop(drop)
+    drop(drop),
+    v6FirstWord(v6FirstWord)
 {
     gamma = 1;
     this->speed = 0.0;
@@ -146,7 +147,7 @@ int ICNConnectionConsumerApi::Read(uint8_t *data, size_t len)
                                                        {"User-Agent", "higet/1.0"},
                                                        {"Connection", "Keep-Alive"}};
        std::string s(m_name.c_str());
-       hTTPClientConnection->get(s, headers);
+       hTTPClientConnection->get(s, headers, {}, nullptr, nullptr, this->v6FirstWord);
        response  = hTTPClientConnection->response();
        this->res = true;
        this->dataPos = 0;
index c05c524..c12e215 100644 (file)
@@ -64,7 +64,7 @@ class ICNConnectionConsumerApi : public IICNConnection, public libl4::transport:
 
 
 public:
-    ICNConnectionConsumerApi(double alpha, float beta, float drop);
+    ICNConnectionConsumerApi(double alpha, float beta, float drop, std::string v6FirstWord);
     virtual ~ICNConnectionConsumerApi();
 
     virtual void Init(dash::network::IChunk *chunk);
@@ -95,6 +95,7 @@ private:
     libl4::http::HTTPResponse response;
     float beta;
     float drop;
+    std::string v6FirstWord;
     uint64_t i_chunksize;
     int i_lifetime;
     int i_missed_co;
index 30f8427..81c5514 100644 (file)
@@ -99,7 +99,7 @@ bool    MultimediaManager::initICN(const std::string& url)
 {
     this->url = url;
     EnterCriticalSection(&this->monitorMutex);
-    this->icnConn = new libdash::framework::input::ICNConnectionConsumerApi(20.0, this->beta, this->drop);
+    this->icnConn = new libdash::framework::input::ICNConnectionConsumerApi(20.0, this->beta, this->drop, this->v6FirstWord);
     icnConn->InitForMPD(url);
     int ret = 0;
     char * data = (char *)malloc(4096);
@@ -394,14 +394,14 @@ void MultimediaManager::notifyAudioBufferObservers(uint32_t fillstateInPercent)
 
 void MultimediaManager::initVideoRendering(uint32_t offset)
 {
-    this->videoStream = new MultimediaStream(viper::managers::VIDEO, this->mpdWrapper, this->segmentBufferSize, this->isICN(), this->icnAlpha, this->noDecoding, this->beta, this->drop);
+    this->videoStream = new MultimediaStream(viper::managers::VIDEO, this->mpdWrapper, this->segmentBufferSize, this->isICN(), this->icnAlpha, this->noDecoding, this->beta, this->drop, this->v6FirstWord);
     this->videoStream->attachStreamObserver(this);
     this->videoStream->setPosition(offset);
 }
 
 void MultimediaManager::initAudioPlayback(uint32_t offset)
 {
-    this->audioStream = new MultimediaStream(viper::managers::AUDIO, this->mpdWrapper, this->segmentBufferSize, this->isICN(), this->icnAlpha, this->noDecoding, this->beta, this->drop);
+    this->audioStream = new MultimediaStream(viper::managers::AUDIO, this->mpdWrapper, this->segmentBufferSize, this->isICN(), this->icnAlpha, this->noDecoding, this->beta, this->drop, this->v6FirstWord);
     this->audioStream->attachStreamObserver(this);
     this->audioStream->setPosition(offset);
 }
@@ -673,6 +673,11 @@ void MultimediaManager::setDrop(float drop)
     this->drop = drop;
 }
 
+void MultimediaManager::setV6FirstWord(std::string v6FirstWord)
+{
+    this->v6FirstWord = v6FirstWord;
+}
+
 void MultimediaManager::fetchMPD()
 {
     if(this->icn)
index ade2b76..926261a 100644 (file)
@@ -73,6 +73,7 @@ public:
     void                                    setOffset                                  (int offset);
     void                                    setBeta                     (float beta);
     void                                    setDrop                     (float drop);
+    void                                    setV6FirstWord              (std::string v6FirstWord);
     bool                                    canPush                     ();
     void                                    fetchMPD                    ();
 
@@ -85,6 +86,7 @@ public:
 private:
     float                                                       beta;
     float                                                       drop;
+    std::string                                                 v6FirstWord;
     std::string                                                 downloadPath;
     int                                                         segmentBufferSize;
     ViperGui                                                    *viperGui;
index 86cde35..4b11da8 100644 (file)
@@ -18,7 +18,7 @@ using namespace libdash::framework::buffer;
 using namespace libdash::framework::mpd;
 using namespace dash::mpd;
 
-MultimediaStream::MultimediaStream(StreamType type, MPDWrapper *mpdWrapper, uint32_t bufferSize, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop) :
+MultimediaStream::MultimediaStream(StreamType type, MPDWrapper *mpdWrapper, uint32_t bufferSize, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop, std::string v6FirstWord) :
     type                (type),
     segmentBufferSize   (bufferSize),
     dashManager         (NULL),
@@ -27,7 +27,8 @@ MultimediaStream::MultimediaStream(StreamType type, MPDWrapper *mpdWrapper, uint
     icnAlpha            (icnAlpha),
     noDecoding          (nodecoding),
     beta                (beta),
-    drop                (drop)
+    drop                (drop),
+    v6FirstWord         (v6FirstWord)
 {
     this->init();
 }
@@ -69,7 +70,7 @@ void MultimediaStream::setPositionInMsec(uint32_t milliSecs)
 
 void MultimediaStream::init()
 {
-    this->dashManager   = new DASHManager(this->type, this->segmentBufferSize, this, this->mpdWrapper, this->isICN(), this->icnAlpha, this->noDecoding, this->beta, this->drop);
+    this->dashManager   = new DASHManager(this->type, this->segmentBufferSize, this, this->mpdWrapper, this->isICN(), this->icnAlpha, this->noDecoding, this->beta, this->drop, this->v6FirstWord);
 }
 
 bool MultimediaStream::start()
index 454cca2..e1ab22c 100644 (file)
@@ -44,7 +44,7 @@ namespace managers
 class MultimediaStream : public libdash::framework::input::IDASHManagerObserver, public libdash::framework::buffer::IBufferObserver
 {
 public:
-    MultimediaStream(StreamType type, libdash::framework::mpd::MPDWrapper *mpdWrapper, uint32_t segmentBufferSize, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop);
+    MultimediaStream(StreamType type, libdash::framework::mpd::MPDWrapper *mpdWrapper, uint32_t segmentBufferSize, bool icnEnabled, double icnAlpha, bool nodecoding, float beta, float drop, std::string v6FirstWord);
     virtual ~MultimediaStream();
 
     bool start();
@@ -80,6 +80,7 @@ public:
 private:
     float                                               beta;
     float                                               drop;
+    std::string                                         v6FirstWord;
     std::vector<IStreamObserver *>                      observers;
     libdash::framework::mpd::MPDWrapper                 *mpdWrapper;
     libdash::framework::adaptation::IAdaptationLogic    *logic;
index efb8562..c53cbed 100644 (file)
@@ -21,7 +21,7 @@ using namespace viper::managers;
 using namespace dash::mpd;
 using namespace std;
 
-DASHPlayer::DASHPlayer(ViperGui &gui, Config *config) :
+DASHPlayer::DASHPlayer(int argc, char* argv[], ViperGui &gui, Config *config) :
     gui         (&gui),
     config      (config)
 {
@@ -36,12 +36,28 @@ DASHPlayer::DASHPlayer(ViperGui &gui, Config *config) :
     this->multimediaManager = new MultimediaManager(this->gui, this->parametersAdaptation->segmentBufferSize, config->getConfigPath().toStdString() + QString::fromLatin1("/").toStdString());
     this->multimediaManager->setBeta(config->beta());
     this->multimediaManager->setDrop(config->drop());
+    this->multimediaManager->setV6FirstWord(config->v6FirstWord().toStdString());
     connect(this->gui->getVideoPlayer(), SIGNAL(positionChanged(qint64)), SLOT(updateSlider(qint64)));
     connect(this->gui->getVideoPlayer(), SIGNAL(stateChanged(QtAV::AVPlayer::State)), SLOT(manageGraph(QtAV::AVPlayer::State)));
     connect(this->gui->getVideoPlayer(), SIGNAL(error(QtAV::AVError)), this, SLOT(error(QtAV::AVError)));
     this->multimediaManager->attachManagerObserver(this);
     this->mpdWrapper = new MPDWrapper(NULL);
     this->multimediaManager->setMPDWrapper(this->mpdWrapper);
+
+    //TODO adding a proper parsing function to handle command line arguments
+
+    int index = 1;
+
+    while(index < argc)
+    {
+        if(!strcmp(argv[index], "-P") && index+1 < argc)
+        {
+            this->setV6FirstWord(argv[index+1]);
+            index += 2;
+        }
+    }
+
+
 }
 
 DASHPlayer::~DASHPlayer()
@@ -416,6 +432,7 @@ void DASHPlayer::reloadParameters()
     this->beta = config->beta();
     this->drop = config->drop();
     this->videoURI = config->videoURI().toStdString();
+    this->v6FirstWord = config->v6FirstWord().toStdString();
     this->alpha = config->alpha();
     this->repeat = config->repeat();
     this->parametersAdaptation = (struct AdaptationParameters *)malloc(sizeof(struct AdaptationParameters));
@@ -467,11 +484,22 @@ QString DASHPlayer::getVideoURI()
     return config->videoURI();
 }
 
+QString DASHPlayer::getV6FirstWord()
+{
+    return config->v6FirstWord();
+}
+
 void DASHPlayer::setVideoURI(QString videoURI)
 {
     config->setVideoURI(videoURI);
 }
 
+void DASHPlayer::setV6FirstWord(QString v6FirstWord)
+{
+    config->setV6FirstWord(v6FirstWord);
+    this->multimediaManager->setV6FirstWord(v6FirstWord.toStdString());
+}
+
 qreal DASHPlayer::getAlpha()
 {
     return config->alpha();
index c85c235..7b6274f 100644 (file)
@@ -45,7 +45,7 @@ class DASHPlayer : public IDASHPlayerGuiObserver, public managers::IMultimediaMa
     Q_OBJECT
 
 public:
-    DASHPlayer(ViperGui& gui, Config *config);
+    DASHPlayer(int argc, char* argv[], ViperGui& gui, Config *config);
     virtual ~DASHPlayer();
 
     virtual void onSettingsChanged(int period, int videoAdaptationSet, int videoRepresentation, int audioAdaptationSet, int audioRepresentation);
@@ -74,7 +74,9 @@ public:
     Q_INVOKABLE bool getIcn();
     Q_INVOKABLE void setIcn(bool icn);
     Q_INVOKABLE QString getVideoURI();
+    Q_INVOKABLE QString getV6FirstWord();
     Q_INVOKABLE void setVideoURI(QString videoURI);
+    Q_INVOKABLE void setV6FirstWord(QString v6FirstWord);
     Q_INVOKABLE qreal getAlpha();
     Q_INVOKABLE void setAlpha(qreal alpha);
     Q_INVOKABLE qreal getSegmentBufferSize();
@@ -174,6 +176,7 @@ private:
     const char                                                  *url;
     bool                                                        icn;
     std::string                                                 videoURI;
+    std::string                                                 v6FirstWord;
     double                                                      alpha;
     struct libdash::framework::adaptation::AdaptationParameters *parametersAdaptation;
     libdash::framework::adaptation::LogicType                   adaptLogic;
index b91b226..a1f2969 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -213,7 +213,7 @@ int main(int argc, char *argv[])
     gui.setPlayButton(viewer.rootObject()->findChild<QObject*>(QStringLiteral("playBtn")));
     gui.setGraphDataSource(&graphDataSource);
     gui.setRootObject(viewer.rootObject());
-    DASHPlayer dashPlayer(gui, &Config::instance());
+    DASHPlayer dashPlayer(argc, argv, gui, &Config::instance());
     engine->rootContext()->setContextProperty("dashPlayer",&dashPlayer);
     QMetaObject::invokeMethod(viewer.rootObject(), "initGraph", Q_ARG(QVariant, (&Config::instance())->graph()));
     QMetaObject::invokeMethod(viewer.rootObject(), "initRepeat", Q_ARG(QVariant, (&Config::instance())->repeat()));
index f8ed090..3f8d7ab 100755 (executable)
@@ -25,6 +25,7 @@ Rectangle {
     signal saveAdaptationLogic(string selectedAdaptationLogic, int adaptationLogicKey)
     signal saveIcn(bool selectedIcn)
     signal saveVideoURI(string selectedVideoURI)
+    signal saveV6FirstWord(string selectedV6FirstWord)
     signal saveSegmentBufferSize(real selectedSegmentBufferSize)
     signal saveRateAlpha(real selectedRateAlpha)
     signal saveBufferReservoirThreshold(real selectedBufferReservoirThreshold)
@@ -434,6 +435,37 @@ Rectangle {
             text: videoURI
         }
     }
+    Item {
+        id: itemv6Prefix
+        anchors.top: parent.top
+        anchors.left: parent.left
+        anchors.right: parent.right
+        anchors.rightMargin: parent.width/2
+        anchors.topMargin: Utils.scaled(18) + 2*heightRow
+        Label {
+            text: "IPv6 First Word:"
+            id: labelv6Prefix
+            color: "white"
+            anchors.top: parent.top
+            anchors.right: textInputv6FirstWord.left
+            anchors.rightMargin: Utils.scaled(5)
+            anchors.topMargin: (textInputv6Prefix.height - height)/2
+            font.bold: true
+            font.pixelSize: Utils.scaled(10);
+        }
+
+        TextInput {
+            id: textInputv6FirstWord
+            z: parent.z + 1
+            width: parent.width/4*3
+            anchors.top: parent.bottom
+            anchors.left: parent.left
+            anchors.leftMargin: Utils.scaled(200)
+            font.pixelSize: Utils.scaled(20)
+            color: "white"
+            text: v6FirstWord
+        }
+    }
 
     Item {
         id: itemSegmentBufferSize
@@ -1582,6 +1614,7 @@ Rectangle {
                 saveAdaptationLogic(adaptationLogicModel.get(comboAdaptationSetList.currentIndex).text, comboAdaptationSetList.currentIndex);
                 saveIcn(switchIcn.checked)
                 saveVideoURI(textInputVideoURI.text)
+                saveV6FirstWord(textInputv6FirstWord.text)
                 saveSegmentBufferSize(spinboxSegmentBufferSize.value/100)
                 saveRateAlpha(spinboxRateAlpha.value/100)
                 saveBufferReservoirThreshold(spinboxBufferReservoirThreshold.value/100)
index e170931..1b645e3 100755 (executable)
@@ -37,6 +37,7 @@ Rectangle {
     property bool buffering: false
     property string adaptationLogic: ""
     property string videoURI: ""
+    property string v6FirstWord: ""
     property real alpha: 0
     property real segmentBufferSize: 0
     property bool icn: false
@@ -412,6 +413,7 @@ Rectangle {
             icn = dashPlayer.getIcn()
             adaptationLogic = dashPlayer.getAdaptationLogic()
             videoURI = dashPlayer.getVideoURI()
+            v6FirstWord = dashPlayer.getV6FirstWord()
             segmentBufferSize = dashPlayer.getSegmentBufferSize()
             rateAlpha = dashPlayer.getRateAlpha()
             bufferReservoirThreshold = dashPlayer.getBufferReservoirThreshold()
@@ -574,6 +576,11 @@ Rectangle {
             videoURI = selectedVideoURI
         }
 
+        onSaveV6FirstWord: {
+           dashPlayer.setV6FirstWord(selectedV6FirstWord)
+           v6FirstWord = selectedV6FirstWord
+        }
+
         onSaveSegmentBufferSize: {
             dashPlayer.setSegmentBufferSize(selectedSegmentBufferSize)
             segmentBufferSize = selectedSegmentBufferSize