mirror of
https://github.com/rofafor/vdr-plugin-satip.git
synced 2023-10-10 13:37:42 +02:00
Added support for Digital Devices CI extension.
This commit is contained in:
parent
0fd559ce79
commit
db59aa9c29
1
HISTORY
1
HISTORY
@ -95,3 +95,4 @@ VDR Plugin 'satip' Revision History
|
|||||||
- Fixed the server teardown.
|
- Fixed the server teardown.
|
||||||
- Removed the unnecessary config directory definition.
|
- Removed the unnecessary config directory definition.
|
||||||
- Added a fallback for older glibc libraries.
|
- Added a fallback for older glibc libraries.
|
||||||
|
- Added support for Digital Devices CI extension.
|
||||||
|
5
README
5
README
@ -27,6 +27,7 @@ Requirements:
|
|||||||
http://www.gnu.org/software/libc/
|
http://www.gnu.org/software/libc/
|
||||||
|
|
||||||
- VDR >= 2.1.4 for scrambled channels
|
- VDR >= 2.1.4 for scrambled channels
|
||||||
|
>= 2.1.7 for Digital Devices CI extension
|
||||||
|
|
||||||
Description:
|
Description:
|
||||||
|
|
||||||
@ -79,6 +80,10 @@ Setup menu:
|
|||||||
option to "low". Similarly, the "high"
|
option to "low". Similarly, the "high"
|
||||||
value prefers the SAT>IP over the local
|
value prefers the SAT>IP over the local
|
||||||
DVB cards when selecting available devices.
|
DVB cards when selecting available devices.
|
||||||
|
- Use CI extension = no If you want to use the CI extension found
|
||||||
|
in some SAT>IP hardware (e.g. Digital
|
||||||
|
Devices OctopusNet), set this option to
|
||||||
|
"yes".
|
||||||
- Enable EPG scanning = yes If you want exclude all SAT>IP devices
|
- Enable EPG scanning = yes If you want exclude all SAT>IP devices
|
||||||
from VDR's EIT background scanning, set
|
from VDR's EIT background scanning, set
|
||||||
this option to "no".
|
this option to "no".
|
||||||
|
1
config.c
1
config.c
@ -14,6 +14,7 @@ cSatipConfig SatipConfig;
|
|||||||
cSatipConfig::cSatipConfig(void)
|
cSatipConfig::cSatipConfig(void)
|
||||||
: operatingModeM(eOperatingModeLow),
|
: operatingModeM(eOperatingModeLow),
|
||||||
traceModeM(eTraceModeNormal),
|
traceModeM(eTraceModeNormal),
|
||||||
|
ciExtensionM(0),
|
||||||
eitScanM(1),
|
eitScanM(1),
|
||||||
useBytesM(1)
|
useBytesM(1)
|
||||||
{
|
{
|
||||||
|
3
config.h
3
config.h
@ -16,6 +16,7 @@ class cSatipConfig
|
|||||||
private:
|
private:
|
||||||
unsigned int operatingModeM;
|
unsigned int operatingModeM;
|
||||||
unsigned int traceModeM;
|
unsigned int traceModeM;
|
||||||
|
unsigned int ciExtensionM;
|
||||||
unsigned int eitScanM;
|
unsigned int eitScanM;
|
||||||
unsigned int useBytesM;
|
unsigned int useBytesM;
|
||||||
int disabledSourcesM[MAX_DISABLED_SOURCES_COUNT];
|
int disabledSourcesM[MAX_DISABLED_SOURCES_COUNT];
|
||||||
@ -58,6 +59,7 @@ public:
|
|||||||
void ToggleOperatingMode(void) { operatingModeM = (operatingModeM + 1) % eOperatingModeCount; }
|
void ToggleOperatingMode(void) { operatingModeM = (operatingModeM + 1) % eOperatingModeCount; }
|
||||||
unsigned int GetTraceMode(void) const { return traceModeM; }
|
unsigned int GetTraceMode(void) const { return traceModeM; }
|
||||||
bool IsTraceMode(eTraceMode modeP) const { return (traceModeM & modeP); }
|
bool IsTraceMode(eTraceMode modeP) const { return (traceModeM & modeP); }
|
||||||
|
unsigned int GetCIExtension(void) const { return ciExtensionM; }
|
||||||
unsigned int GetEITScan(void) const { return eitScanM; }
|
unsigned int GetEITScan(void) const { return eitScanM; }
|
||||||
unsigned int GetUseBytes(void) const { return useBytesM; }
|
unsigned int GetUseBytes(void) const { return useBytesM; }
|
||||||
unsigned int GetDisabledSourcesCount(void) const;
|
unsigned int GetDisabledSourcesCount(void) const;
|
||||||
@ -67,6 +69,7 @@ public:
|
|||||||
|
|
||||||
void SetOperatingMode(unsigned int operatingModeP) { operatingModeM = operatingModeP; }
|
void SetOperatingMode(unsigned int operatingModeP) { operatingModeM = operatingModeP; }
|
||||||
void SetTraceMode(unsigned int modeP) { traceModeM = (modeP & eTraceModeMask); }
|
void SetTraceMode(unsigned int modeP) { traceModeM = (modeP & eTraceModeMask); }
|
||||||
|
void SetCIExtension(unsigned int onOffP) { ciExtensionM = onOffP; }
|
||||||
void SetEITScan(unsigned int onOffP) { eitScanM = onOffP; }
|
void SetEITScan(unsigned int onOffP) { eitScanM = onOffP; }
|
||||||
void SetUseBytes(unsigned int onOffP) { useBytesM = onOffP; }
|
void SetUseBytes(unsigned int onOffP) { useBytesM = onOffP; }
|
||||||
void SetDisabledSources(unsigned int indexP, int sourceP);
|
void SetDisabledSources(unsigned int indexP, int sourceP);
|
||||||
|
12
device.c
12
device.c
@ -406,7 +406,7 @@ bool cSatipDevice::HasLock(int timeoutMsP) const
|
|||||||
bool cSatipDevice::HasInternalCam(void)
|
bool cSatipDevice::HasInternalCam(void)
|
||||||
{
|
{
|
||||||
debug16("%s [device %u]", __PRETTY_FUNCTION__, deviceIndexM);
|
debug16("%s [device %u]", __PRETTY_FUNCTION__, deviceIndexM);
|
||||||
return false;
|
return SatipConfig.GetCIExtension();
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSatipDevice::WriteData(uchar *bufferP, int lengthP)
|
void cSatipDevice::WriteData(uchar *bufferP, int lengthP)
|
||||||
@ -428,6 +428,16 @@ int cSatipDevice::GetId(void)
|
|||||||
return deviceIndexM;
|
return deviceIndexM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cSatipDevice::GetPmtPid(void)
|
||||||
|
{
|
||||||
|
int pid = 0;
|
||||||
|
#if defined(APIVERSNUM) && APIVERSNUM >= 20107
|
||||||
|
pid = channelM.Ca() ? ::GetPmtPid(channelM.Source(), channelM.Transponder(), channelM.Sid()) : 0;
|
||||||
|
#endif
|
||||||
|
debug16("%s pmtpid=%d source=%c transponder=%d sid=%d name=%s [device %u]", __PRETTY_FUNCTION__, pid, cSource::ToChar(channelM.Source()), channelM.Transponder(), channelM.Sid(), channelM.Name(), deviceIndexM);
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
|
||||||
uchar *cSatipDevice::GetData(int *availableP)
|
uchar *cSatipDevice::GetData(int *availableP)
|
||||||
{
|
{
|
||||||
debug16("%s [device %u]", __PRETTY_FUNCTION__, deviceIndexM);
|
debug16("%s [device %u]", __PRETTY_FUNCTION__, deviceIndexM);
|
||||||
|
1
device.h
1
device.h
@ -108,6 +108,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
virtual void WriteData(u_char *bufferP, int lengthP);
|
virtual void WriteData(u_char *bufferP, int lengthP);
|
||||||
virtual int GetId(void);
|
virtual int GetId(void);
|
||||||
|
virtual int GetPmtPid(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __SATIP_DEVICE_H
|
#endif // __SATIP_DEVICE_H
|
||||||
|
@ -14,6 +14,7 @@ public:
|
|||||||
virtual ~cSatipDeviceIf() {}
|
virtual ~cSatipDeviceIf() {}
|
||||||
virtual void WriteData(u_char *bufferP, int lengthP) = 0;
|
virtual void WriteData(u_char *bufferP, int lengthP) = 0;
|
||||||
virtual int GetId(void) = 0;
|
virtual int GetId(void) = 0;
|
||||||
|
virtual int GetPmtPid(void) = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cSatipDeviceIf(const cSatipDeviceIf&);
|
cSatipDeviceIf(const cSatipDeviceIf&);
|
||||||
|
@ -103,6 +103,15 @@ msgstr ""
|
|||||||
"Normal - Dispositius treballan en parametres normals\n"
|
"Normal - Dispositius treballan en parametres normals\n"
|
||||||
"Alta - Dispositius treballan a prioritat Alta"
|
"Alta - Dispositius treballan a prioritat Alta"
|
||||||
|
|
||||||
|
msgid "Enable CI extension"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether a CI extension shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting enables integrated CI/CAM handling found in some SAT>IP hardware (e.g. Digital Devices OctopusNet)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Enable EPG scanning"
|
msgid "Enable EPG scanning"
|
||||||
msgstr "Activa Escanneig EPG"
|
msgstr "Activa Escanneig EPG"
|
||||||
|
|
||||||
|
12
po/de_DE.po
12
po/de_DE.po
@ -103,6 +103,18 @@ msgstr ""
|
|||||||
"normal - Geräte arbeiten innerhalb der gewöhnlichen Parameter\n"
|
"normal - Geräte arbeiten innerhalb der gewöhnlichen Parameter\n"
|
||||||
"hoch - Geräte arbeiten mit höchste Priorität"
|
"hoch - Geräte arbeiten mit höchste Priorität"
|
||||||
|
|
||||||
|
msgid "Enable CI extension"
|
||||||
|
msgstr "Aktiviere CI Erweiterung"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether a CI extension shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting enables integrated CI/CAM handling found in some SAT>IP hardware (e.g. Digital Devices OctopusNet)."
|
||||||
|
msgstr ""
|
||||||
|
"Legt fest ob eine CI Erweiterung genutzt werden soll.\n"
|
||||||
|
"\n"
|
||||||
|
"Diese Einstellung aktiviert die Nutzung des integrierten CI/CAM einiger SAT>IP Geräte (z.B. Digital Devices OctopusNet)."
|
||||||
|
|
||||||
msgid "Enable EPG scanning"
|
msgid "Enable EPG scanning"
|
||||||
msgstr "Aktiviere EPG Aktualisierung"
|
msgstr "Aktiviere EPG Aktualisierung"
|
||||||
|
|
||||||
|
@ -103,6 +103,15 @@ msgstr ""
|
|||||||
"Normal - Dispositivos trabajando con prioridad Normal\n"
|
"Normal - Dispositivos trabajando con prioridad Normal\n"
|
||||||
"Alta - Dispositivos trabajando con prioridad Alta"
|
"Alta - Dispositivos trabajando con prioridad Alta"
|
||||||
|
|
||||||
|
msgid "Enable CI extension"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether a CI extension shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting enables integrated CI/CAM handling found in some SAT>IP hardware (e.g. Digital Devices OctopusNet)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Enable EPG scanning"
|
msgid "Enable EPG scanning"
|
||||||
msgstr "Activa Escaneo EPG"
|
msgstr "Activa Escaneo EPG"
|
||||||
|
|
||||||
|
12
po/fi_FI.po
12
po/fi_FI.po
@ -102,6 +102,18 @@ msgstr ""
|
|||||||
"normaali - laitteet toimivat normaalilla prioriteetilla\n"
|
"normaali - laitteet toimivat normaalilla prioriteetilla\n"
|
||||||
"korkea - laitteet toimivat korkealla prioriteetilla"
|
"korkea - laitteet toimivat korkealla prioriteetilla"
|
||||||
|
|
||||||
|
msgid "Enable CI extension"
|
||||||
|
msgstr "Käytä CI-laajennosta"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether a CI extension shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting enables integrated CI/CAM handling found in some SAT>IP hardware (e.g. Digital Devices OctopusNet)."
|
||||||
|
msgstr ""
|
||||||
|
"Määrittele CI-laajennoksen käyttöönotto\n"
|
||||||
|
"\n"
|
||||||
|
"Tällä asetuksella saadaan otettua käyttöön SAT>IP-laitteiden sisäinen CI-paikka (esim. Digital Devices OctopusNet)."
|
||||||
|
|
||||||
msgid "Enable EPG scanning"
|
msgid "Enable EPG scanning"
|
||||||
msgstr "Käytä ohjelmaoppaan taustapäivitystä"
|
msgstr "Käytä ohjelmaoppaan taustapäivitystä"
|
||||||
|
|
||||||
|
2
satip.c
2
satip.c
@ -274,6 +274,8 @@ bool cPluginSatip::SetupParse(const char *nameP, const char *valueP)
|
|||||||
// Parse your own setup parameters and store their values.
|
// Parse your own setup parameters and store their values.
|
||||||
if (!strcasecmp(nameP, "OperatingMode"))
|
if (!strcasecmp(nameP, "OperatingMode"))
|
||||||
SatipConfig.SetOperatingMode(atoi(valueP));
|
SatipConfig.SetOperatingMode(atoi(valueP));
|
||||||
|
else if (!strcasecmp(nameP, "EnableCIExtension"))
|
||||||
|
SatipConfig.SetCIExtension(atoi(valueP));
|
||||||
else if (!strcasecmp(nameP, "EnableEITScan"))
|
else if (!strcasecmp(nameP, "EnableEITScan"))
|
||||||
SatipConfig.SetEITScan(atoi(valueP));
|
SatipConfig.SetEITScan(atoi(valueP));
|
||||||
else if (!strcasecmp(nameP, "DisabledSources")) {
|
else if (!strcasecmp(nameP, "DisabledSources")) {
|
||||||
|
3
server.c
3
server.c
@ -45,6 +45,9 @@ cSatipServer::cSatipServer(const char *addressP, const char *modelP, const char
|
|||||||
quirkM |= eSatipQuirkForceLock;
|
quirkM |= eSatipQuirkForceLock;
|
||||||
if (quirkM != eSatipQuirkNone)
|
if (quirkM != eSatipQuirkNone)
|
||||||
info("Malfunctioning '%s' server detected! Please, fix the firmware.", *descriptionM);
|
info("Malfunctioning '%s' server detected! Please, fix the firmware.", *descriptionM);
|
||||||
|
// These devices support the X_PMT protocol extension
|
||||||
|
if (strstr(*descriptionM, "OctopusNet")) // Digital Devices OctopusNet
|
||||||
|
quirkM |= eSatipQuirkUseXPMT;
|
||||||
}
|
}
|
||||||
char *s, *p = strdup(*modelM);
|
char *s, *p = strdup(*modelM);
|
||||||
char *r = strtok_r(p, ",", &s);
|
char *r = strtok_r(p, ",", &s);
|
||||||
|
1
server.h
1
server.h
@ -37,6 +37,7 @@ public:
|
|||||||
eSatipQuirkSessionId = 0x01,
|
eSatipQuirkSessionId = 0x01,
|
||||||
eSatipQuirkPlayPids = 0x02,
|
eSatipQuirkPlayPids = 0x02,
|
||||||
eSatipQuirkForceLock = 0x04,
|
eSatipQuirkForceLock = 0x04,
|
||||||
|
eSatipQuirkUseXPMT = 0x08,
|
||||||
eSatipQuirkMask = 0x0F
|
eSatipQuirkMask = 0x0F
|
||||||
};
|
};
|
||||||
enum eSatipModelType {
|
enum eSatipModelType {
|
||||||
|
7
setup.c
7
setup.c
@ -329,6 +329,7 @@ eOSState cSatipMenuInfo::ProcessKey(eKeys keyP)
|
|||||||
cSatipPluginSetup::cSatipPluginSetup()
|
cSatipPluginSetup::cSatipPluginSetup()
|
||||||
: deviceCountM(0),
|
: deviceCountM(0),
|
||||||
operatingModeM(SatipConfig.GetOperatingMode()),
|
operatingModeM(SatipConfig.GetOperatingMode()),
|
||||||
|
ciExtensionM(SatipConfig.GetCIExtension()),
|
||||||
eitScanM(SatipConfig.GetEITScan()),
|
eitScanM(SatipConfig.GetEITScan()),
|
||||||
numDisabledSourcesM(SatipConfig.GetDisabledSourcesCount()),
|
numDisabledSourcesM(SatipConfig.GetDisabledSourcesCount()),
|
||||||
numDisabledFiltersM(SatipConfig.GetDisabledFiltersCount())
|
numDisabledFiltersM(SatipConfig.GetDisabledFiltersCount())
|
||||||
@ -364,6 +365,10 @@ void cSatipPluginSetup::Setup(void)
|
|||||||
helpM.Append(tr("Define the used operating mode for all SAT>IP devices:\n\noff - devices are disabled\nlow - devices are working at the lowest priority\nnormal - devices are working within normal parameters\nhigh - devices are working at the highest priority"));
|
helpM.Append(tr("Define the used operating mode for all SAT>IP devices:\n\noff - devices are disabled\nlow - devices are working at the lowest priority\nnormal - devices are working within normal parameters\nhigh - devices are working at the highest priority"));
|
||||||
|
|
||||||
if (operatingModeM) {
|
if (operatingModeM) {
|
||||||
|
#if defined(APIVERSNUM) && APIVERSNUM >= 20107
|
||||||
|
Add(new cMenuEditBoolItem(tr("Enable CI extension"), &ciExtensionM));
|
||||||
|
helpM.Append(tr("Define whether a CI extension shall be used.\n\nThis setting enables integrated CI/CAM handling found in some SAT>IP hardware (e.g. Digital Devices OctopusNet)."));
|
||||||
|
#endif
|
||||||
Add(new cMenuEditBoolItem(tr("Enable EPG scanning"), &eitScanM));
|
Add(new cMenuEditBoolItem(tr("Enable EPG scanning"), &eitScanM));
|
||||||
helpM.Append(tr("Define whether the EPG background scanning shall be used.\n\nThis setting disables the automatic EIT scanning functionality for all SAT>IP devices."));
|
helpM.Append(tr("Define whether the EPG background scanning shall be used.\n\nThis setting disables the automatic EIT scanning functionality for all SAT>IP devices."));
|
||||||
|
|
||||||
@ -510,11 +515,13 @@ void cSatipPluginSetup::Store(void)
|
|||||||
{
|
{
|
||||||
// Store values into setup.conf
|
// Store values into setup.conf
|
||||||
SetupStore("OperatingMode", operatingModeM);
|
SetupStore("OperatingMode", operatingModeM);
|
||||||
|
SetupStore("EnableCIExtension", ciExtensionM);
|
||||||
SetupStore("EnableEITScan", eitScanM);
|
SetupStore("EnableEITScan", eitScanM);
|
||||||
StoreSources("DisabledSources", disabledSourcesM);
|
StoreSources("DisabledSources", disabledSourcesM);
|
||||||
StoreFilters("DisabledFilters", disabledFilterIndexesM);
|
StoreFilters("DisabledFilters", disabledFilterIndexesM);
|
||||||
// Update global config
|
// Update global config
|
||||||
SatipConfig.SetOperatingMode(operatingModeM);
|
SatipConfig.SetOperatingMode(operatingModeM);
|
||||||
|
SatipConfig.SetCIExtension(ciExtensionM);
|
||||||
SatipConfig.SetEITScan(eitScanM);
|
SatipConfig.SetEITScan(eitScanM);
|
||||||
for (int i = 0; i < MAX_DISABLED_SOURCES_COUNT; ++i)
|
for (int i = 0; i < MAX_DISABLED_SOURCES_COUNT; ++i)
|
||||||
SatipConfig.SetDisabledSources(i, disabledSourcesM[i]);
|
SatipConfig.SetDisabledSources(i, disabledSourcesM[i]);
|
||||||
|
1
setup.h
1
setup.h
@ -18,6 +18,7 @@ private:
|
|||||||
int deviceCountM;
|
int deviceCountM;
|
||||||
int operatingModeM;
|
int operatingModeM;
|
||||||
const char *operatingModeTextsM[cSatipConfig::eOperatingModeCount];
|
const char *operatingModeTextsM[cSatipConfig::eOperatingModeCount];
|
||||||
|
int ciExtensionM;
|
||||||
int eitScanM;
|
int eitScanM;
|
||||||
int numDisabledSourcesM;
|
int numDisabledSourcesM;
|
||||||
int disabledSourcesM[MAX_DISABLED_SOURCES_COUNT];
|
int disabledSourcesM[MAX_DISABLED_SOURCES_COUNT];
|
||||||
|
12
tuner.c
12
tuner.c
@ -41,6 +41,7 @@ cSatipTuner::cSatipTuner(cSatipDeviceIf &deviceP, unsigned int packetLenP)
|
|||||||
signalStrengthM(-1),
|
signalStrengthM(-1),
|
||||||
signalQualityM(-1),
|
signalQualityM(-1),
|
||||||
streamIdM(-1),
|
streamIdM(-1),
|
||||||
|
pmtPidM(-1),
|
||||||
addPidsM(),
|
addPidsM(),
|
||||||
delPidsM(),
|
delPidsM(),
|
||||||
pidsM()
|
pidsM()
|
||||||
@ -186,8 +187,6 @@ bool cSatipTuner::Connect(void)
|
|||||||
// Just retune
|
// Just retune
|
||||||
if (streamIdM >= 0) {
|
if (streamIdM >= 0) {
|
||||||
cString uri = cString::sprintf("%sstream=%d?%s", *connectionUri, streamIdM, *streamParamM);
|
cString uri = cString::sprintf("%sstream=%d?%s", *connectionUri, streamIdM, *streamParamM);
|
||||||
//if (pidsM.Size())
|
|
||||||
// uri = cString::sprintf("%s&pids=%s", *uri, *pidsM.ListPids());
|
|
||||||
debug1("%s Retuning [device %d]", __PRETTY_FUNCTION__, deviceIdM);
|
debug1("%s Retuning [device %d]", __PRETTY_FUNCTION__, deviceIdM);
|
||||||
if (rtspM.Play(*uri)) {
|
if (rtspM.Play(*uri)) {
|
||||||
keepAliveM.Set(timeoutM);
|
keepAliveM.Set(timeoutM);
|
||||||
@ -240,6 +239,7 @@ bool cSatipTuner::Disconnect(void)
|
|||||||
cSatipDiscover::GetInstance()->UseServer(currentServerM, false);
|
cSatipDiscover::GetInstance()->UseServer(currentServerM, false);
|
||||||
statusUpdateM.Set(0);
|
statusUpdateM.Set(0);
|
||||||
timeoutM = eMinKeepAliveIntervalMs;
|
timeoutM = eMinKeepAliveIntervalMs;
|
||||||
|
pmtPidM = -1;
|
||||||
addPidsM.Clear();
|
addPidsM.Clear();
|
||||||
delPidsM.Clear();
|
delPidsM.Clear();
|
||||||
|
|
||||||
@ -391,6 +391,7 @@ bool cSatipTuner::UpdatePids(bool forceP)
|
|||||||
if (((forceP && pidsM.Size()) || (pidUpdateCacheM.TimedOut() && (addPidsM.Size() || delPidsM.Size()))) &&
|
if (((forceP && pidsM.Size()) || (pidUpdateCacheM.TimedOut() && (addPidsM.Size() || delPidsM.Size()))) &&
|
||||||
!isempty(*streamAddrM) && (streamIdM > 0)) {
|
!isempty(*streamAddrM) && (streamIdM > 0)) {
|
||||||
cString uri = cString::sprintf("rtsp://%s/stream=%d", *streamAddrM, streamIdM);
|
cString uri = cString::sprintf("rtsp://%s/stream=%d", *streamAddrM, streamIdM);
|
||||||
|
bool usexpmt = (SatipConfig.GetCIExtension() && !!(currentServerM && currentServerM->Quirk(cSatipServer::eSatipQuirkUseXPMT)));
|
||||||
bool usedummy = !!(currentServerM && currentServerM->Quirk(cSatipServer::eSatipQuirkPlayPids));
|
bool usedummy = !!(currentServerM && currentServerM->Quirk(cSatipServer::eSatipQuirkPlayPids));
|
||||||
if (forceP || usedummy) {
|
if (forceP || usedummy) {
|
||||||
if (pidsM.Size())
|
if (pidsM.Size())
|
||||||
@ -404,6 +405,13 @@ bool cSatipTuner::UpdatePids(bool forceP)
|
|||||||
if (delPidsM.Size())
|
if (delPidsM.Size())
|
||||||
uri = cString::sprintf("%s%sdelpids=%s", *uri, addPidsM.Size() ? "&" : "?", *delPidsM.ListPids());
|
uri = cString::sprintf("%s%sdelpids=%s", *uri, addPidsM.Size() ? "&" : "?", *delPidsM.ListPids());
|
||||||
}
|
}
|
||||||
|
if (usexpmt) {
|
||||||
|
int pid = deviceM->GetPmtPid();
|
||||||
|
// issue TS rerouting only on pid changes
|
||||||
|
if ((pid > 0) && (pid != pmtPidM))
|
||||||
|
uri = cString::sprintf("%s&x_pmt=%d", *uri, pid);
|
||||||
|
pmtPidM = pid;
|
||||||
|
}
|
||||||
if (!rtspM.Play(*uri))
|
if (!rtspM.Play(*uri))
|
||||||
return false;
|
return false;
|
||||||
addPidsM.Clear();
|
addPidsM.Clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user