mirror of
https://github.com/rofafor/vdr-plugin-iptv.git
synced 2023-10-10 13:37:03 +02:00
Added missing CURL timeouts and improved section id scanner.
This commit is contained in:
parent
01b554a2de
commit
a4f0bdf737
5
HISTORY
5
HISTORY
@ -212,3 +212,8 @@ VDR Plugin 'iptv' Revision History
|
|||||||
- Fixed a nasty network byte order bug.
|
- Fixed a nasty network byte order bug.
|
||||||
- Fixed and refactored the section filtering code.
|
- Fixed and refactored the section filtering code.
|
||||||
- Fixed a possible crash in the file protocol.
|
- Fixed a possible crash in the file protocol.
|
||||||
|
|
||||||
|
2014-xx-xx: Versoin 2.0.1
|
||||||
|
|
||||||
|
- Added missing CURL timeouts.
|
||||||
|
- Improved section id scanner.
|
||||||
|
10
README
10
README
@ -165,8 +165,7 @@ Notes:
|
|||||||
"disable_ca_updates" patch to the VDR in order to get rid of "Channel not
|
"disable_ca_updates" patch to the VDR in order to get rid of "Channel not
|
||||||
available" messages.
|
available" messages.
|
||||||
|
|
||||||
- EIT scanning functionality can be disabled for all IPTV channels by applying
|
- EIT scanning functionality is disabled by default.
|
||||||
the "disable_eitscan" patch to the VDR.
|
|
||||||
|
|
||||||
- Section id and pid scanners should be disabled after the correct data is
|
- Section id and pid scanners should be disabled after the correct data is
|
||||||
found. This can be made via VDR's channel editor.
|
found. This can be made via VDR's channel editor.
|
||||||
@ -180,7 +179,12 @@ Notes:
|
|||||||
netrc configuration file for authentication:
|
netrc configuration file for authentication:
|
||||||
$(CONFDIR)/iptv/netrc
|
$(CONFDIR)/iptv/netrc
|
||||||
|
|
||||||
- CURL implementation
|
- You can quite easily figure out correct DVB triplet values by using the
|
||||||
|
multicat and dvbsnoop tools:
|
||||||
|
$ multicat -u -d 1620000000 @127.0.0.1:1234 /tmp/video.ts
|
||||||
|
$ dvbsnoop -s ts -if /tmp/video.ts -tssubdecode -hexdumpbuffer 0x12 | \
|
||||||
|
grep -m1 -A8 Service_ID | grep _ID
|
||||||
|
|
||||||
Acknowledgements:
|
Acknowledgements:
|
||||||
|
|
||||||
- The IPTV section filtering code is derived from Linux kernel.
|
- The IPTV section filtering code is derived from Linux kernel.
|
||||||
|
3
common.h
3
common.h
@ -44,7 +44,8 @@
|
|||||||
do { \
|
do { \
|
||||||
if (exp) { \
|
if (exp) { \
|
||||||
char tmp[64]; \
|
char tmp[64]; \
|
||||||
error(errstr": %s", strerror_r(errno, tmp, sizeof(tmp))); \
|
error("[%s,%d]: "errstr": %s", __FILE__, __LINE__, \
|
||||||
|
strerror_r(errno, tmp, sizeof(tmp))); \
|
||||||
func; \
|
func; \
|
||||||
ret; \
|
ret; \
|
||||||
} \
|
} \
|
||||||
|
2
iptv.c
2
iptv.c
@ -21,7 +21,7 @@
|
|||||||
#define GITVERSION ""
|
#define GITVERSION ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char VERSION[] = "2.0.0" GITVERSION;
|
const char VERSION[] = "2.0.1" GITVERSION;
|
||||||
static const char DESCRIPTION[] = trNOOP("Experience the IPTV");
|
static const char DESCRIPTION[] = trNOOP("Experience the IPTV");
|
||||||
|
|
||||||
class cPluginIptv : public cPlugin {
|
class cPluginIptv : public cPlugin {
|
||||||
|
@ -15,12 +15,12 @@
|
|||||||
|
|
||||||
#define iptv_curl_easy_setopt(X, Y, Z) \
|
#define iptv_curl_easy_setopt(X, Y, Z) \
|
||||||
if ((res = curl_easy_setopt((X), (Y), (Z))) != CURLE_OK) { \
|
if ((res = curl_easy_setopt((X), (Y), (Z))) != CURLE_OK) { \
|
||||||
error("curl_easy_setopt(%s, %s, %s) failed: %d", #X, #Y, #Z, res); \
|
error("curl_easy_setopt(%s, %s) failed: %s (%d)", #Y, #Z, curl_easy_strerror(res), res); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define iptv_curl_easy_perform(X) \
|
#define iptv_curl_easy_perform(X) \
|
||||||
if ((res = curl_easy_perform((X))) != CURLE_OK) { \
|
if ((res = curl_easy_perform((X))) != CURLE_OK) { \
|
||||||
error("curl_easy_perform(%s) failed: %d", #X, res); \
|
error("curl_easy_perform() failed: %s (%d)", curl_easy_strerror(res), res); \
|
||||||
}
|
}
|
||||||
|
|
||||||
cIptvProtocolCurl::cIptvProtocolCurl()
|
cIptvProtocolCurl::cIptvProtocolCurl()
|
||||||
@ -264,7 +264,8 @@ bool cIptvProtocolCurl::Connect()
|
|||||||
iptv_curl_easy_setopt(handleM, CURLOPT_NETRC, (long)CURL_NETRC_OPTIONAL);
|
iptv_curl_easy_setopt(handleM, CURLOPT_NETRC, (long)CURL_NETRC_OPTIONAL);
|
||||||
iptv_curl_easy_setopt(handleM, CURLOPT_NETRC_FILE, *netrc);
|
iptv_curl_easy_setopt(handleM, CURLOPT_NETRC_FILE, *netrc);
|
||||||
|
|
||||||
// Set timeout
|
// Set timeouts
|
||||||
|
iptv_curl_easy_setopt(handleM, CURLOPT_TIMEOUT, (long)eConnectTimeoutS);
|
||||||
iptv_curl_easy_setopt(handleM, CURLOPT_CONNECTTIMEOUT, (long)eConnectTimeoutS);
|
iptv_curl_easy_setopt(handleM, CURLOPT_CONNECTTIMEOUT, (long)eConnectTimeoutS);
|
||||||
|
|
||||||
// Set user-agent
|
// Set user-agent
|
||||||
@ -345,6 +346,10 @@ bool cIptvProtocolCurl::Connect()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case eModeFile:
|
case eModeFile:
|
||||||
|
// Set timeout
|
||||||
|
iptv_curl_easy_setopt(handleM, CURLOPT_TIMEOUT_MS, 10L);
|
||||||
|
break;
|
||||||
|
|
||||||
case eModeUnknown:
|
case eModeUnknown:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
14
sidscanner.c
14
sidscanner.c
@ -71,17 +71,23 @@ void cSidScanner::Process(u_short pidP, u_char tidP, const u_char *dataP, int le
|
|||||||
if (ts.getTransportStreamId() != channelIdM.Tid()) {
|
if (ts.getTransportStreamId() != channelIdM.Tid()) {
|
||||||
debug("cSidScanner::%s(): tsid=%d", __FUNCTION__, ts.getTransportStreamId());
|
debug("cSidScanner::%s(): tsid=%d", __FUNCTION__, ts.getTransportStreamId());
|
||||||
newTid = ts.getTransportStreamId();
|
newTid = ts.getTransportStreamId();
|
||||||
}
|
|
||||||
tidFoundM = true;
|
tidFoundM = true;
|
||||||
|
}
|
||||||
|
if (ts.getOriginalNetworkId() != channelIdM.Nid()) {
|
||||||
|
debug("cSidScanner::%s(): onid=%d", __FUNCTION__, ts.getOriginalNetworkId());
|
||||||
|
newNid = ts.getOriginalNetworkId();
|
||||||
|
nidFoundM = true;
|
||||||
|
}
|
||||||
break; // default to the first one
|
break; // default to the first one
|
||||||
}
|
}
|
||||||
if (nit.getNetworkId() != channelIdM.Nid()) {
|
// fallback for network id if not found already
|
||||||
debug("cSidScanner::%s(): nid=%d", __FUNCTION__, ts.getTransportStreamId());
|
if (!nidFoundM && (nit.getNetworkId() != channelIdM.Nid())) {
|
||||||
|
debug("cSidScanner::%s(): nid=%d", __FUNCTION__, nit.getNetworkId());
|
||||||
newNid = nit.getNetworkId();
|
newNid = nit.getNetworkId();
|
||||||
}
|
|
||||||
nidFoundM = true;
|
nidFoundM = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ((newSid >= 0) || (newNid >= 0) || (newTid >= 0)) {
|
if ((newSid >= 0) || (newNid >= 0) || (newTid >= 0)) {
|
||||||
if (!Channels.Lock(true, 10))
|
if (!Channels.Lock(true, 10))
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user