From f8a512e91b70cb034d237c101a149ab06f60e37f Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 11 Apr 2021 23:52:16 +0200 Subject: [PATCH] DATV demod: allow video player enable/disable --- doc/img/DATVDemod_plugin.png | Bin 61553 -> 63067 bytes doc/img/DATVDemod_plugin.xcf | Bin 277206 -> 280078 bytes doc/img/DATVDemod_pluginDATV.png | Bin 53314 -> 55863 bytes doc/img/DATVDemod_pluginDATV.xcf | Bin 219145 -> 230673 bytes plugins/channelrx/demoddatv/datvdemod.h | 2 + .../channelrx/demoddatv/datvdemodbaseband.h | 2 + plugins/channelrx/demoddatv/datvdemodgui.cpp | 44 ++++++++++++- plugins/channelrx/demoddatv/datvdemodgui.h | 1 + plugins/channelrx/demoddatv/datvdemodgui.ui | 46 +++++++++++++- .../channelrx/demoddatv/datvdemodsettings.cpp | 12 +++- .../channelrx/demoddatv/datvdemodsettings.h | 1 + plugins/channelrx/demoddatv/datvdemodsink.cpp | 26 +++++++- plugins/channelrx/demoddatv/datvdemodsink.h | 2 + plugins/channelrx/demoddatv/datvudpstream.cpp | 26 +++++++- plugins/channelrx/demoddatv/datvudpstream.h | 17 +++-- plugins/channelrx/demoddatv/datvvideoplayer.h | 60 +++++++++++------- plugins/channelrx/demoddatv/readme.md | 18 +++++- 17 files changed, 219 insertions(+), 38 deletions(-) diff --git a/doc/img/DATVDemod_plugin.png b/doc/img/DATVDemod_plugin.png index 7fc5d75a2a00507f369d72a630385d4840e9604d..2d55a97fa7534d29c4a7a24eacc1b3ae410a575d 100644 GIT binary patch delta 28480 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 delta 26689 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 L{an^LB{Ts5Jx~2_ delta 19100 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 SzatFzPf|=yv`F~*tN#nNm#VA) diff --git a/doc/img/DATVDemod_pluginDATV.xcf b/doc/img/DATVDemod_pluginDATV.xcf index 6bc102150bebff0ee4bd8b8d12900a334ed39ef9..1fb6070c56bb1d06fddbfde591214fb893f09ddc 100644 GIT binary patch delta 10964 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 diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index d57262d25..581a5692c 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -102,10 +102,12 @@ public: void setCNRMeter(LevelMeterSignalDB *cnrMeter) { m_basebandSink->setCNRMeter(cnrMeter); } void SetVideoRender(DATVideoRender *objScreen) { m_basebandSink->SetVideoRender(objScreen); } DATVideostream *getVideoStream() { return m_basebandSink->getVideoStream(); } + DATVUDPStream *getUDPStream() { return m_basebandSink->getUDPStream(); } bool audioActive() { return m_basebandSink->audioActive(); } bool audioDecodeOK() { return m_basebandSink->audioDecodeOK(); } bool videoActive() { return m_basebandSink->videoActive(); } bool videoDecodeOK() { return m_basebandSink->videoDecodeOK(); } + bool udpRunning() { return m_basebandSink->udpRunning(); } bool playVideo() { return m_basebandSink->playVideo(); } diff --git a/plugins/channelrx/demoddatv/datvdemodbaseband.h b/plugins/channelrx/demoddatv/datvdemodbaseband.h index bfcd9d0ee..522e36146 100644 --- a/plugins/channelrx/demoddatv/datvdemodbaseband.h +++ b/plugins/channelrx/demoddatv/datvdemodbaseband.h @@ -74,10 +74,12 @@ public: void setBasebandSampleRate(int sampleRate); //!< To be used when supporting thread is stopped void SetVideoRender(DATVideoRender *objScreen) { m_sink.SetVideoRender(objScreen); } DATVideostream *getVideoStream() { return m_sink.getVideoStream(); } + DATVUDPStream *getUDPStream() { return m_sink.getUDPStream(); } bool audioActive() { return m_sink.audioActive(); } bool audioDecodeOK() { return m_sink.audioDecodeOK(); } bool videoActive() { return m_sink.videoActive(); } bool videoDecodeOK() { return m_sink.videoDecodeOK(); } + bool udpRunning() { return m_sink.udpRunning(); } bool playVideo() { return m_sink.playVideo(); } int getModcodModulation() const { return m_sink.getModcodModulation(); } diff --git a/plugins/channelrx/demoddatv/datvdemodgui.cpp b/plugins/channelrx/demoddatv/datvdemodgui.cpp index 31f5b828d..dc4255097 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.cpp +++ b/plugins/channelrx/demoddatv/datvdemodgui.cpp @@ -219,7 +219,12 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba m_objDATVDemod->setCNRMeter(ui->cnrMeter); m_objDATVDemod->SetVideoRender(ui->screenTV_2); - connect(m_objDATVDemod->getVideoStream(), &DATVideostream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + if (m_settings.m_playerEnable) { + connect(m_objDATVDemod->getVideoStream(), &DATVideostream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + } else { + connect(m_objDATVDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + } + connect(ui->screenTV_2, &DATVideoRender::onMetaDataChanged, this, &DATVDemodGUI::on_StreamMetaDataChanged); m_intPreviousDecodedData=0; @@ -270,6 +275,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba #endif ui->playerIndicator->setStyleSheet("QLabel { background-color: gray; border-radius: 8px; }"); + ui->udpIndicator->setStyleSheet("QLabel { background-color: gray; border-radius: 8px; }"); resetToDefaults(); // does applySettings() } @@ -376,6 +382,18 @@ void DATVDemodGUI::displaySettings() ui->udpTS->setChecked(m_settings.m_udpTS); ui->udpTSAddress->setText(m_settings.m_udpTSAddress); ui->udpTSPort->setText(tr("%1").arg(m_settings.m_udpTSPort)); + ui->playerEnable->setChecked(m_settings.m_playerEnable); + + if (m_settings.m_playerEnable) + { + disconnect(m_objDATVDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + connect(m_objDATVDemod->getVideoStream(), &DATVideostream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + } + else + { + disconnect(m_objDATVDemod->getVideoStream(), &DATVideostream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + connect(m_objDATVDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + } blockApplySettings(false); } @@ -565,6 +583,12 @@ void DATVDemodGUI::tick() ui->playerIndicator->setStyleSheet("QLabel { background-color: gray; border-radius: 8px; }"); } + if (m_objDATVDemod->udpRunning()) { + ui->udpIndicator->setStyleSheet("QLabel { background-color: rgb(85, 232, 85); border-radius: 8px; }"); // green + } else { + ui->udpIndicator->setStyleSheet("QLabel { background-color: gray; border-radius: 8px; }"); + } + return; } @@ -817,6 +841,24 @@ void DATVDemodGUI::on_StreamMetaDataChanged(DataTSMetaData2 *objMetaData) } } +void DATVDemodGUI::on_playerEnable_clicked() +{ + m_settings.m_playerEnable = ui->playerEnable->isChecked(); + + if (m_settings.m_playerEnable) + { + disconnect(m_objDATVDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + connect(m_objDATVDemod->getVideoStream(), &DATVideostream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + } + else + { + disconnect(m_objDATVDemod->getVideoStream(), &DATVideostream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + connect(m_objDATVDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); + } + + applySettings(); +} + void DATVDemodGUI::displayRRCParameters(bool blnVisible) { ui->spiRollOff->setVisible(blnVisible); diff --git a/plugins/channelrx/demoddatv/datvdemodgui.h b/plugins/channelrx/demoddatv/datvdemodgui.h index 0532f36ca..4b16d02ca 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.h +++ b/plugins/channelrx/demoddatv/datvdemodgui.h @@ -92,6 +92,7 @@ private slots: void on_udpTS_clicked(bool checked); void on_udpTSAddress_editingFinished(); void on_udpTSPort_editingFinished(); + void on_playerEnable_clicked(); private: Ui::DATVDemodGUI* ui; diff --git a/plugins/channelrx/demoddatv/datvdemodgui.ui b/plugins/channelrx/demoddatv/datvdemodgui.ui index 0706b5807..b3fe41001 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.ui +++ b/plugins/channelrx/demoddatv/datvdemodgui.ui @@ -785,7 +785,7 @@ - 10 + 70 250 16 16 @@ -813,6 +813,25 @@ + + + + 0 + 250 + 61 + 16 + + + + Video player enable + + + Qt::RightToLeft + + + Video + + @@ -892,6 +911,31 @@ + + + + + 0 + 0 + + + + + 16 + 16 + + + + UDP thread running indicator + + + QLabel { background-color: gray; border-radius: 8px; } + + + + + + diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.cpp b/plugins/channelrx/demoddatv/datvdemodsettings.cpp index 84becb337..e48e3ed71 100644 --- a/plugins/channelrx/demoddatv/datvdemodsettings.cpp +++ b/plugins/channelrx/demoddatv/datvdemodsettings.cpp @@ -62,6 +62,7 @@ void DATVDemodSettings::resetToDefaults() m_udpTSAddress = "127.0.0.1"; m_udpTSPort = 8882; m_udpTS = false; + m_playerEnable = true; m_streamIndex = 0; m_useReverseAPI = false; m_reverseAPIAddress = "127.0.0.1"; @@ -111,6 +112,7 @@ QByteArray DATVDemodSettings::serialize() const s.writeS32(33, m_maxBitflips); s.writeString(34, m_softLDPCToolPath); s.writeS32(35, m_softLDPCMaxTrials); + s.writeBool(36, m_playerEnable); return s.final(); } @@ -198,6 +200,7 @@ bool DATVDemodSettings::deserialize(const QByteArray& data) d.readString(34, &m_softLDPCToolPath, "/opt/install/sdrangel/bin/ldpctool"); d.readS32(35, &tmp, 8); m_softLDPCMaxTrials = tmp < 1 ? 1 : tmp > m_softLDPCMaxMaxTrials ? m_softLDPCMaxMaxTrials : tmp; + d.readBool(36, &m_playerEnable, true); validateSystemConfiguration(); @@ -235,7 +238,11 @@ void DATVDemodSettings::debug(const QString& msg) const << " m_audioMute: " << m_audioMute << " m_audioDeviceName: " << m_audioDeviceName << " m_audioVolume: " << m_audioVolume - << " m_videoMute: " << m_videoMute; + << " m_videoMute: " << m_videoMute + << " m_udpTS: " << m_udpTS + << " m_udpTSAddress: " << m_udpTSAddress + << " m_udpTSPort: " << m_udpTSPort + << " m_playerEnable: " << m_playerEnable; } bool DATVDemodSettings::isDifferent(const DATVDemodSettings& other) @@ -255,7 +262,8 @@ bool DATVDemodSettings::isDifferent(const DATVDemodSettings& other) || (m_notchFilters != other.m_notchFilters) || (m_symbolRate != other.m_symbolRate) || (m_excursion != other.m_excursion) - || (m_standard != other.m_standard)); + || (m_standard != other.m_standard) + || (m_playerEnable != other.m_playerEnable)); } void DATVDemodSettings::validateSystemConfiguration() diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.h b/plugins/channelrx/demoddatv/datvdemodsettings.h index 009c4fcc6..27dec5065 100644 --- a/plugins/channelrx/demoddatv/datvdemodsettings.h +++ b/plugins/channelrx/demoddatv/datvdemodsettings.h @@ -100,6 +100,7 @@ struct DATVDemodSettings QString m_udpTSAddress; quint32 m_udpTSPort; bool m_udpTS; + bool m_playerEnable; int m_streamIndex; //!< MIMO channel. Not relevant when connected to SI (single Rx). bool m_useReverseAPI; QString m_reverseAPIAddress; diff --git a/plugins/channelrx/demoddatv/datvdemodsink.cpp b/plugins/channelrx/demoddatv/datvdemodsink.cpp index f8bb361a8..931c70d87 100644 --- a/plugins/channelrx/demoddatv/datvdemodsink.cpp +++ b/plugins/channelrx/demoddatv/datvdemodsink.cpp @@ -155,6 +155,18 @@ bool DATVDemodSink::videoDecodeOK() } } +bool DATVDemodSink::udpRunning() +{ + if (!r_videoplayer) { + return false; + } + + bool udpRunning = r_videoplayer->isUDPRunning(); + r_videoplayer->resetUDPRunning(); + + return udpRunning; +} + bool DATVDemodSink::playVideo() { QMutexLocker mlock(&m_mutex); @@ -565,6 +577,7 @@ void DATVDemodSink::InitDATVFramework() m_objCfg.rrc_steps = 0; //auto m_objVideoStream->resetTotalReceived(); + m_udpStream.resetTotalReceived(); switch(m_settings.m_modulation) { @@ -861,7 +874,11 @@ void DATVDemodSink::InitDATVFramework() r_derand = new leansdr::derandomizer(m_objScheduler, *p_rtspackets, *p_tspackets); // OUTPUT - r_videoplayer = new leansdr::datvvideoplayer(m_objScheduler, *p_tspackets, m_objVideoStream, &m_udpStream); + if (m_settings.m_playerEnable) { + r_videoplayer = new leansdr::datvvideoplayer(m_objScheduler, *p_tspackets, m_objVideoStream, &m_udpStream); + } else { + r_videoplayer = new leansdr::datvvideoplayer(m_objScheduler, *p_tspackets, nullptr, &m_udpStream); + } m_blnDVBInitialized = true; } @@ -904,6 +921,7 @@ void DATVDemodSink::InitDATVS2Framework() m_objCfg.rrc_steps = 0; //auto m_objVideoStream->resetTotalReceived(); + m_udpStream.resetTotalReceived(); switch(m_settings.m_modulation) { @@ -1224,7 +1242,11 @@ void DATVDemodSink::InitDATVS2Framework() */ // OUTPUT - r_videoplayer = new leansdr::datvvideoplayer(m_objScheduler, *p_tspackets, m_objVideoStream, &m_udpStream); + if (m_settings.m_playerEnable) { + r_videoplayer = new leansdr::datvvideoplayer(m_objScheduler, *p_tspackets, m_objVideoStream, &m_udpStream); + } else { + r_videoplayer = new leansdr::datvvideoplayer(m_objScheduler, *p_tspackets, nullptr, &m_udpStream); + } m_blnDVBInitialized = true; } diff --git a/plugins/channelrx/demoddatv/datvdemodsink.h b/plugins/channelrx/demoddatv/datvdemodsink.h index 103013909..331efb3e1 100644 --- a/plugins/channelrx/demoddatv/datvdemodsink.h +++ b/plugins/channelrx/demoddatv/datvdemodsink.h @@ -67,10 +67,12 @@ public: void setCNRMeter(LevelMeterSignalDB *cnrMeter); void SetVideoRender(DATVideoRender *objScreen); DATVideostream *getVideoStream() { return m_objVideoStream; } + DATVUDPStream *getUDPStream() { return &m_udpStream; } bool audioActive(); bool audioDecodeOK(); bool videoActive(); bool videoDecodeOK(); + bool udpRunning(); bool playVideo(); void stopVideo(); diff --git a/plugins/channelrx/demoddatv/datvudpstream.cpp b/plugins/channelrx/demoddatv/datvudpstream.cpp index 84c4c98cd..3d997ff7c 100644 --- a/plugins/channelrx/demoddatv/datvudpstream.cpp +++ b/plugins/channelrx/demoddatv/datvudpstream.cpp @@ -26,7 +26,11 @@ DATVUDPStream::DATVUDPStream(int tsBlockSize) : m_address(QHostAddress::LocalHost), m_port(8882), m_tsBlockSize(tsBlockSize), - m_tsBlockIndex(0) + m_tsBlockIndex(0), + m_dataBytes(0), + m_percentBuffer(0), + m_totalBytes(0), + m_fifoSignalCount(0) { m_tsBuffer = new char[m_tsBlocksPerFrame*m_tsBlockSize]; } @@ -45,15 +49,31 @@ void DATVUDPStream::pushData(const char *chrData, int nbTSBlocks) for (int i = 0; i < nbTSBlocks; i++) { std::copy(chrData + i*m_tsBlockSize, chrData + (i+1)*m_tsBlockSize, m_tsBuffer + m_tsBlockIndex*m_tsBlockSize); - - if (m_tsBlockIndex < m_tsBlocksPerFrame - 1) + + if (m_tsBlockIndex < m_tsBlocksPerFrame - 1) { m_tsBlockIndex++; } else { m_udpSocket.writeDatagram(m_tsBuffer, m_tsBlocksPerFrame*m_tsBlockSize, m_address, m_port); + m_dataBytes += m_tsBlocksPerFrame*m_tsBlockSize; + m_totalBytes += m_tsBlocksPerFrame*m_tsBlockSize; + + if (++m_fifoSignalCount == 10) + { + emit fifoData(&m_dataBytes, &m_percentBuffer, &m_totalBytes); + m_fifoSignalCount = 0; + } + + m_dataBytes = 0; m_tsBlockIndex = 0; } } } + +void DATVUDPStream::resetTotalReceived() +{ + m_totalBytes = 0; + emit fifoData(&m_dataBytes, &m_percentBuffer, &m_totalBytes); +} diff --git a/plugins/channelrx/demoddatv/datvudpstream.h b/plugins/channelrx/demoddatv/datvudpstream.h index 5270f7a84..ec164df1a 100644 --- a/plugins/channelrx/demoddatv/datvudpstream.h +++ b/plugins/channelrx/demoddatv/datvudpstream.h @@ -22,22 +22,27 @@ #include #include #include +#include -class QString; - -class DATVUDPStream +class DATVUDPStream : public QObject { + Q_OBJECT public: DATVUDPStream(int tsBlockSize); ~DATVUDPStream(); void pushData(const char *chrData, int nbTSBlocks); + void resetTotalReceived(); void setActive(bool active) { m_active = active; } + bool isActive() const { return m_active; } bool setAddress(const QString& address) { return m_address.setAddress(address); } void setPort(quint16 port) { m_port = port; } static const int m_tsBlocksPerFrame; +signals: + void fifoData(int *dataBytes, int *percentBuffer, qint64 *totalReceived); + private: bool m_active; QUdpSocket m_udpSocket; @@ -46,6 +51,10 @@ private: int m_tsBlockSize; int m_tsBlockIndex; char *m_tsBuffer; + int m_dataBytes; + int m_percentBuffer; + qint64 m_totalBytes; + int m_fifoSignalCount; }; -#endif // DATVUDPSTREAM_H \ No newline at end of file +#endif // DATVUDPSTREAM_H diff --git a/plugins/channelrx/demoddatv/datvvideoplayer.h b/plugins/channelrx/demoddatv/datvvideoplayer.h index 48c259ee1..dc5f54b1e 100644 --- a/plugins/channelrx/demoddatv/datvvideoplayer.h +++ b/plugins/channelrx/demoddatv/datvvideoplayer.h @@ -31,12 +31,13 @@ template struct datvvideoplayer: runnable datvvideoplayer( scheduler *sch, pipebuf &_in, - DATVideostream *objVideoStream, + DATVideostream *videoStream, DATVUDPStream *udpStream) : runnable(sch, _in.name), in(_in), - m_objVideoStream(objVideoStream), - m_udpStream(udpStream) + m_videoStream(videoStream), + m_udpStream(udpStream), + m_atomicUDPRunning(0) { } @@ -48,38 +49,53 @@ template struct datvvideoplayer: runnable return; } + int nw; + m_udpStream->pushData((const char *) in.rd(), in.readable()); - int nw = m_objVideoStream->pushData((const char *) in.rd(), size); + m_atomicUDPRunning.storeRelaxed(m_udpStream->isActive() && (size > 0) ? 1 : 0); - if (!nw) + if (m_videoStream) { - fatal("leansdr::datvvideoplayer::run: pipe"); - return; - } + nw = m_videoStream->pushData((const char *) in.rd(), size); - if (nw < 0) + if (!nw) + { + fatal("leansdr::datvvideoplayer::run: pipe"); + return; + } + + if (nw < 0) + { + fatal("leansdr::datvvideoplayer::run: write"); + return; + } + + if (nw % sizeof(T)) + { + fatal("leansdr::datvvideoplayer::run: partial write"); + return; + } + + if (nw != size) { + fprintf(stderr, "leansdr::datvvideoplayer::run: nw: %d size: %d\n", nw, size); + } + } + else { - fatal("leansdr::datvvideoplayer::run: write"); - return; - } - - if (nw % sizeof(T)) - { - fatal("leansdr::datvvideoplayer::run: partial write"); - return; - } - - if (nw != size) { - fprintf(stderr, "leansdr::datvvideoplayer::run: nw: %d size: %d\n", nw, size); + nw = size; } in.read(nw / sizeof(T)); } + bool isUDPRunning() const { return m_atomicUDPRunning.loadRelaxed() == 1; } + void resetUDPRunning() { m_atomicUDPRunning.storeRelaxed(0); } + private: pipereader in; - DATVideostream *m_objVideoStream; + DATVideostream *m_videoStream; DATVUDPStream *m_udpStream; + QAtomicInt m_atomicUDPRunning; }; } diff --git a/plugins/channelrx/demoddatv/readme.md b/plugins/channelrx/demoddatv/readme.md index b13fca276..d6ab075b5 100644 --- a/plugins/channelrx/demoddatv/readme.md +++ b/plugins/channelrx/demoddatv/readme.md @@ -44,7 +44,7 @@ Power of signal received in the channel (dB) This gauge gives the MER estimation. The averaged value appears on the right. -

B.3: CNR estimation

+

B.4: CNR estimation

This gauge gives the CNR estimation. The averaged value appears on the right. @@ -60,6 +60,16 @@ This is the address of the TS UDP This is the port of the TS UDP +

B.8: UDP streaming indicator

+ +Indicator turns green if UDP data is streaming to destination + +

B.9: Video player enable and indicator

+ +Use the checkbox to enable or disable the internal video player. The indicator next turns green if the video player thread is active. + +Use this control to disable the video player if it causes too many crashes... +

B.1: Symbol constellation

This is the constellation of the PSK or QAM synchronized signal. When the demodulation parameters are set correctly (modulation type, symbol rate and filtering) and signal is strong enough to recover symbol synchronization the purple dots appear close to the white crosses. White crosses represent the ideal symbols positions in the I/Q plane. @@ -143,13 +153,15 @@ Push this button when you are lost...
B.2a.12: Amount of data decoded
-Automatically adjusts unit (kB, MB, ...) +Amount data received in the video player. If the video player is disabled this is the amount of data sent via UDP. Automatically adjusts unit (kB, MB, ...)
B.2a.13: Stream speed
+Current data flow in the video player. If the video player is disabled this is the flow sent via UDP. +
B.2a.14: Buffer status
-Gauge that shows percentage of buffer queue length +Gauge that shows percentage of video player buffer queue length

B.2b: DATV signal settings (DVB-S2 specific)