mirror of
https://github.com/rofafor/vdr-plugin-satip.git
synced 2023-10-10 13:37:42 +02:00
Add support for RTP-over-TCP.
This commit is contained in:
parent
4b1892d754
commit
26ef489ea3
1
config.c
1
config.c
@ -19,6 +19,7 @@ cSatipConfig::cSatipConfig(void)
|
|||||||
useBytesM(1),
|
useBytesM(1),
|
||||||
portRangeStartM(0),
|
portRangeStartM(0),
|
||||||
portRangeStopM(0),
|
portRangeStopM(0),
|
||||||
|
useRtpOverTcpM(false),
|
||||||
detachedModeM(false),
|
detachedModeM(false),
|
||||||
disableServerQuirksM(false),
|
disableServerQuirksM(false),
|
||||||
useSingleModelServersM(false)
|
useSingleModelServersM(false)
|
||||||
|
3
config.h
3
config.h
@ -21,6 +21,7 @@ private:
|
|||||||
unsigned int useBytesM;
|
unsigned int useBytesM;
|
||||||
unsigned int portRangeStartM;
|
unsigned int portRangeStartM;
|
||||||
unsigned int portRangeStopM;
|
unsigned int portRangeStopM;
|
||||||
|
bool useRtpOverTcpM;
|
||||||
bool detachedModeM;
|
bool detachedModeM;
|
||||||
bool disableServerQuirksM;
|
bool disableServerQuirksM;
|
||||||
bool useSingleModelServersM;
|
bool useSingleModelServersM;
|
||||||
@ -69,6 +70,7 @@ public:
|
|||||||
int GetCICAM(unsigned int indexP) const;
|
int GetCICAM(unsigned int indexP) const;
|
||||||
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; }
|
||||||
|
bool GetUseRtpOverTcp(void) const { return useRtpOverTcpM; }
|
||||||
bool GetDetachedMode(void) const { return detachedModeM; }
|
bool GetDetachedMode(void) const { return detachedModeM; }
|
||||||
bool GetDisableServerQuirks(void) const { return disableServerQuirksM; }
|
bool GetDisableServerQuirks(void) const { return disableServerQuirksM; }
|
||||||
bool GetUseSingleModelServers(void) const { return useSingleModelServersM; }
|
bool GetUseSingleModelServers(void) const { return useSingleModelServersM; }
|
||||||
@ -85,6 +87,7 @@ public:
|
|||||||
void SetCICAM(unsigned int indexP, int cicamP);
|
void SetCICAM(unsigned int indexP, int cicamP);
|
||||||
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 SetUseRtpOverTcp(bool onOffP) { useRtpOverTcpM = onOffP; }
|
||||||
void SetDetachedMode(bool onOffP) { detachedModeM = onOffP; }
|
void SetDetachedMode(bool onOffP) { detachedModeM = onOffP; }
|
||||||
void SetDisableServerQuirks(bool onOffP) { disableServerQuirksM = onOffP; }
|
void SetDisableServerQuirks(bool onOffP) { disableServerQuirksM = onOffP; }
|
||||||
void SetUseSingleModelServers(bool onOffP) { useSingleModelServersM = onOffP; }
|
void SetUseSingleModelServers(bool onOffP) { useSingleModelServersM = onOffP; }
|
||||||
|
@ -178,6 +178,15 @@ msgstr "Filtra"
|
|||||||
msgid "Define an ill-behaving filter to be blacklisted."
|
msgid "Define an ill-behaving filter to be blacklisted."
|
||||||
msgstr "Definir un filtre mal comportar a la llista negra."
|
msgstr "Definir un filtre mal comportar a la llista negra."
|
||||||
|
|
||||||
|
msgid "Use RTP-over-TCP mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether the RTP-over-TCP mode shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting affects only SAT>IP devices supporting the feature."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Active SAT>IP servers:"
|
msgid "Active SAT>IP servers:"
|
||||||
msgstr "Activa SAT>IP servers:"
|
msgstr "Activa SAT>IP servers:"
|
||||||
|
|
||||||
|
@ -178,6 +178,15 @@ msgstr "Filter"
|
|||||||
msgid "Define an ill-behaving filter to be blacklisted."
|
msgid "Define an ill-behaving filter to be blacklisted."
|
||||||
msgstr "Bestimme einen fehlerhaften Filter der ausgeblendet werden soll."
|
msgstr "Bestimme einen fehlerhaften Filter der ausgeblendet werden soll."
|
||||||
|
|
||||||
|
msgid "Use RTP-over-TCP mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether the RTP-over-TCP mode shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting affects only SAT>IP devices supporting the feature."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Active SAT>IP servers:"
|
msgid "Active SAT>IP servers:"
|
||||||
msgstr "Aktive SAT>IP Server:"
|
msgstr "Aktive SAT>IP Server:"
|
||||||
|
|
||||||
|
@ -178,6 +178,15 @@ msgstr "Filtra"
|
|||||||
msgid "Define an ill-behaving filter to be blacklisted."
|
msgid "Define an ill-behaving filter to be blacklisted."
|
||||||
msgstr "Define un filtro para poner en la lista negra."
|
msgstr "Define un filtro para poner en la lista negra."
|
||||||
|
|
||||||
|
msgid "Use RTP-over-TCP mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether the RTP-over-TCP mode shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting affects only SAT>IP devices supporting the feature."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Active SAT>IP servers:"
|
msgid "Active SAT>IP servers:"
|
||||||
msgstr "Activa SAT>IP servers:"
|
msgstr "Activa SAT>IP servers:"
|
||||||
|
|
||||||
|
12
po/fi_FI.po
12
po/fi_FI.po
@ -177,6 +177,18 @@ msgstr "Suodatin"
|
|||||||
msgid "Define an ill-behaving filter to be blacklisted."
|
msgid "Define an ill-behaving filter to be blacklisted."
|
||||||
msgstr "Määrittele käytöstä poistettava suodatin, joka lisätään mustalle listalle."
|
msgstr "Määrittele käytöstä poistettava suodatin, joka lisätään mustalle listalle."
|
||||||
|
|
||||||
|
msgid "Use RTP-over-TCP mode"
|
||||||
|
msgstr "Käytä RTP-over-TCP -moodia"
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
"Define whether the RTP-over-TCP mode shall be used.\n"
|
||||||
|
"\n"
|
||||||
|
"This setting affects only SAT>IP devices supporting the feature."
|
||||||
|
msgstr ""
|
||||||
|
"Määrittele RTP-over-TCP -moodin käyttöönotto.\n"
|
||||||
|
"\n"
|
||||||
|
"Tämä asetus vaikuttaa vain SAT>IP-laitteisiin, jotka tukevat kyseistä ominaisuutta."
|
||||||
|
|
||||||
msgid "Active SAT>IP servers:"
|
msgid "Active SAT>IP servers:"
|
||||||
msgstr "Aktiiviset SAT>IP-palvelimet:"
|
msgstr "Aktiiviset SAT>IP-palvelimet:"
|
||||||
|
|
||||||
|
7
rtsp.c
7
rtsp.c
@ -171,9 +171,9 @@ bool cSatipRtsp::Options(const char *uriP)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cSatipRtsp::Setup(const char *uriP, int rtpPortP, int rtcpPortP)
|
bool cSatipRtsp::Setup(const char *uriP, int rtpPortP, int rtcpPortP, bool useTcpP)
|
||||||
{
|
{
|
||||||
debug1("%s (%s, %d, %d) [device %d]", __PRETTY_FUNCTION__, uriP, rtpPortP, rtcpPortP, tunerM.GetId());
|
debug1("%s (%s, %d, %d, %d) [device %d]", __PRETTY_FUNCTION__, uriP, rtpPortP, rtcpPortP, useTcpP, tunerM.GetId());
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (handleM && !isempty(uriP)) {
|
if (handleM && !isempty(uriP)) {
|
||||||
@ -190,7 +190,8 @@ bool cSatipRtsp::Setup(const char *uriP, int rtpPortP, int rtcpPortP)
|
|||||||
default:
|
default:
|
||||||
case cmUnicast:
|
case cmUnicast:
|
||||||
// RTP/AVP;unicast;client_port=<client RTP port>-<client RTCP port>
|
// RTP/AVP;unicast;client_port=<client RTP port>-<client RTCP port>
|
||||||
transport = cString::sprintf("RTP/AVP;unicast;client_port=%d-%d", rtpPortP, rtcpPortP);
|
// RTP/AVP/TCP;unicast;client_port=<client RTP port>-<client RTCP port>
|
||||||
|
transport = cString::sprintf("RTP/AVP%s;unicast;client_port=%d-%d", useTcpP ? "/TCP" : "", rtpPortP, rtcpPortP);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
rtsp.h
2
rtsp.h
@ -56,7 +56,7 @@ public:
|
|||||||
cString RtspUnescapeString(const char *strP);
|
cString RtspUnescapeString(const char *strP);
|
||||||
void Reset(void);
|
void Reset(void);
|
||||||
bool Options(const char *uriP);
|
bool Options(const char *uriP);
|
||||||
bool Setup(const char *uriP, int rtpPortP, int rtcpPortP);
|
bool Setup(const char *uriP, int rtpPortP, int rtcpPortP, bool useTcpP);
|
||||||
bool SetSession(const char *sessionP);
|
bool SetSession(const char *sessionP);
|
||||||
bool Describe(const char *uriP);
|
bool Describe(const char *uriP);
|
||||||
bool Play(const char *uriP);
|
bool Play(const char *uriP);
|
||||||
|
2
satip.c
2
satip.c
@ -386,6 +386,8 @@ bool cPluginSatip::SetupParse(const char *nameP, const char *valueP)
|
|||||||
for (unsigned int i = 0; i < DisabledFiltersCount; ++i)
|
for (unsigned int i = 0; i < DisabledFiltersCount; ++i)
|
||||||
SatipConfig.SetDisabledFilters(i, DisabledFilters[i]);
|
SatipConfig.SetDisabledFilters(i, DisabledFilters[i]);
|
||||||
}
|
}
|
||||||
|
else if (!strcasecmp(nameP, "UseRtpOverTcp"))
|
||||||
|
SatipConfig.SetUseRtpOverTcp(atoi(valueP));
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
|
8
server.c
8
server.c
@ -102,6 +102,14 @@ cSatipServer::cSatipServer(const char *addressP, const int portP, const char *mo
|
|||||||
quirkM |= eSatipQuirkSessionId;
|
quirkM |= eSatipQuirkSessionId;
|
||||||
quirksM = cString::sprintf("%s%sSessionId", *quirksM, isempty(*quirksM) ? "" : ",");
|
quirksM = cString::sprintf("%s%sSessionId", *quirksM, isempty(*quirksM) ? "" : ",");
|
||||||
}
|
}
|
||||||
|
// These devices contain support for RTP over TCP:
|
||||||
|
if (strstr(*descriptionM, "GSSBOX") || // Grundig Sat Systems GSS.box DSI 400
|
||||||
|
strstr(*descriptionM, "DIGIBIT") || // Telestar Digibit R1
|
||||||
|
strstr(*descriptionM, "Triax SatIP Converter") // Triax TSS 400
|
||||||
|
) {
|
||||||
|
quirkM |= eSatipQuirkRtpOverTcp;
|
||||||
|
quirksM = cString::sprintf("%s%sRtpOverTcp", *quirksM, isempty(*quirksM) ? "" : ",");
|
||||||
|
}
|
||||||
// These devices contain a play (add/delpids) parameter bug:
|
// These devices contain a play (add/delpids) parameter bug:
|
||||||
if (strstr(*descriptionM, "fritzdvbc") // Fritz!WLAN Repeater DVB-C
|
if (strstr(*descriptionM, "fritzdvbc") // Fritz!WLAN Repeater DVB-C
|
||||||
) {
|
) {
|
||||||
|
11
server.h
11
server.h
@ -67,11 +67,12 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
enum eSatipQuirk {
|
enum eSatipQuirk {
|
||||||
eSatipQuirkNone = 0x00,
|
eSatipQuirkNone = 0x00,
|
||||||
eSatipQuirkSessionId = 0x01,
|
eSatipQuirkSessionId = 0x01,
|
||||||
eSatipQuirkPlayPids = 0x02,
|
eSatipQuirkPlayPids = 0x02,
|
||||||
eSatipQuirkForceLock = 0x04,
|
eSatipQuirkForceLock = 0x04,
|
||||||
eSatipQuirkMask = 0x0F
|
eSatipQuirkRtpOverTcp = 0x08,
|
||||||
|
eSatipQuirkMask = 0x0F
|
||||||
};
|
};
|
||||||
cSatipServer(const char *addressP, const int portP, const char *modelP, const char *descriptionP);
|
cSatipServer(const char *addressP, const int portP, const char *modelP, const char *descriptionP);
|
||||||
virtual ~cSatipServer();
|
virtual ~cSatipServer();
|
||||||
|
5
setup.c
5
setup.c
@ -332,6 +332,7 @@ eOSState cSatipMenuInfo::ProcessKey(eKeys keyP)
|
|||||||
cSatipPluginSetup::cSatipPluginSetup()
|
cSatipPluginSetup::cSatipPluginSetup()
|
||||||
: detachedModeM(SatipConfig.GetDetachedMode()),
|
: detachedModeM(SatipConfig.GetDetachedMode()),
|
||||||
deviceCountM(0),
|
deviceCountM(0),
|
||||||
|
useRtpOverTcpM(SatipConfig.GetUseRtpOverTcp()),
|
||||||
operatingModeM(SatipConfig.GetOperatingMode()),
|
operatingModeM(SatipConfig.GetOperatingMode()),
|
||||||
ciExtensionM(SatipConfig.GetCIExtension()),
|
ciExtensionM(SatipConfig.GetCIExtension()),
|
||||||
eitScanM(SatipConfig.GetEITScan()),
|
eitScanM(SatipConfig.GetEITScan()),
|
||||||
@ -400,6 +401,8 @@ void cSatipPluginSetup::Setup(void)
|
|||||||
helpM.Append(tr("Define an ill-behaving filter to be blacklisted."));
|
helpM.Append(tr("Define an ill-behaving filter to be blacklisted."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Add(new cMenuEditBoolItem(tr("Use RTP-over-TCP mode"), &useRtpOverTcpM));
|
||||||
|
helpM.Append(tr("Define whether the RTP-over-TCP mode shall be used.\n\nThis setting affects only SAT>IP devices supporting the feature."));
|
||||||
Add(new cOsdItem(tr("Active SAT>IP servers:"), osUnknown, false));
|
Add(new cOsdItem(tr("Active SAT>IP servers:"), osUnknown, false));
|
||||||
helpM.Append("");
|
helpM.Append("");
|
||||||
|
|
||||||
@ -546,6 +549,7 @@ void cSatipPluginSetup::StoreFilters(const char *nameP, int *valuesP)
|
|||||||
void cSatipPluginSetup::Store(void)
|
void cSatipPluginSetup::Store(void)
|
||||||
{
|
{
|
||||||
// Store values into setup.conf
|
// Store values into setup.conf
|
||||||
|
SetupStore("UseRtpOverTcp", useRtpOverTcpM);
|
||||||
SetupStore("OperatingMode", operatingModeM);
|
SetupStore("OperatingMode", operatingModeM);
|
||||||
SetupStore("EnableCIExtension", ciExtensionM);
|
SetupStore("EnableCIExtension", ciExtensionM);
|
||||||
SetupStore("EnableEITScan", eitScanM);
|
SetupStore("EnableEITScan", eitScanM);
|
||||||
@ -553,6 +557,7 @@ void cSatipPluginSetup::Store(void)
|
|||||||
StoreSources("DisabledSources", disabledSourcesM);
|
StoreSources("DisabledSources", disabledSourcesM);
|
||||||
StoreFilters("DisabledFilters", disabledFilterIndexesM);
|
StoreFilters("DisabledFilters", disabledFilterIndexesM);
|
||||||
// Update global config
|
// Update global config
|
||||||
|
SatipConfig.SetUseRtpOverTcp(useRtpOverTcpM);
|
||||||
SatipConfig.SetOperatingMode(operatingModeM);
|
SatipConfig.SetOperatingMode(operatingModeM);
|
||||||
SatipConfig.SetCIExtension(ciExtensionM);
|
SatipConfig.SetCIExtension(ciExtensionM);
|
||||||
SatipConfig.SetEITScan(eitScanM);
|
SatipConfig.SetEITScan(eitScanM);
|
||||||
|
1
setup.h
1
setup.h
@ -17,6 +17,7 @@ class cSatipPluginSetup : public cMenuSetupPage
|
|||||||
private:
|
private:
|
||||||
bool detachedModeM;
|
bool detachedModeM;
|
||||||
int deviceCountM;
|
int deviceCountM;
|
||||||
|
int useRtpOverTcpM;
|
||||||
int operatingModeM;
|
int operatingModeM;
|
||||||
const char *operatingModeTextsM[cSatipConfig::eOperatingModeCount];
|
const char *operatingModeTextsM[cSatipConfig::eOperatingModeCount];
|
||||||
int ciExtensionM;
|
int ciExtensionM;
|
||||||
|
3
tuner.c
3
tuner.c
@ -221,10 +221,11 @@ bool cSatipTuner::Connect(void)
|
|||||||
}
|
}
|
||||||
else if (rtspM.Options(*connectionUri)) {
|
else if (rtspM.Options(*connectionUri)) {
|
||||||
cString uri = cString::sprintf("%s?%s", *connectionUri, *streamParamM);
|
cString uri = cString::sprintf("%s?%s", *connectionUri, *streamParamM);
|
||||||
|
bool useTcp = SatipConfig.GetUseRtpOverTcp() && nextServerM.IsValid() && nextServerM.IsQuirk(cSatipServer::eSatipQuirkRtpOverTcp);
|
||||||
// Flush any old content
|
// Flush any old content
|
||||||
//rtpM.Flush();
|
//rtpM.Flush();
|
||||||
//rtcpM.Flush();
|
//rtcpM.Flush();
|
||||||
if (rtspM.Setup(*uri, rtpM.Port(), rtcpM.Port())) {
|
if (rtspM.Setup(*uri, rtpM.Port(), rtcpM.Port(), useTcp)) {
|
||||||
keepAliveM.Set(timeoutM);
|
keepAliveM.Set(timeoutM);
|
||||||
if (nextServerM.IsValid()) {
|
if (nextServerM.IsValid()) {
|
||||||
currentServerM = nextServerM;
|
currentServerM = nextServerM;
|
||||||
|
Loading…
Reference in New Issue
Block a user