What is EPG Source WebGrab+Plus?
Protocol Definition & Architecture: Troubleshooting And Fixes
Technical Definition
WebGrab+Plus is the most widely used grabber for building XMLTV guides. It reads site-specific .ini definitions to scrape broadcaster schedules and merges them into one XMLTV file that panels serve via xmltv.php.
How It Operates Under the Hood
A config lists channels with site, site_id, and xmltv_id; the grabber runs on a schedule (every 6-12 hours), respects per-site rate limits, and writes gzip output. Panels map xmltv_id to each stream tvg-id.
Troubleshooting Checklist
When EPG Source WebGrab+Plus misbehaves, confirm the player version, clear cache, re-run the player_api.php handshake in a browser, and compare results on a second device. Most faults trace back to timeouts, mismatched identifiers, or ISP interference rather than the mechanism itself.
Protocol Engineering Specifications
| Stream Engineering Metric | Reference Specification | Governing Standard |
|---|---|---|
| Config file | WebGrab++.config.xml |
XML |
| Grab interval | 6-12 h |
Scheduler |
| Output | XMLTV gzip |
xmltv.php |
| Transport Container | MPEG-TS (188 bytes: 4 B header + 184 B payload, 0x47 sync) |
ISO/IEC 13818-1 |
| Manifest Specification | Extended M3U8 playlist / LL-HLS 0.5 s parts |
IETF RFC 8216 |
| Decoder Pipeline | Hardware MediaCodec HEVC Main 10 (ExoPlayer / Media3) |
Android Media3 |
Xtream Codes v2 REST API Deep-Dive
Every modern player connects Reference Panel through the same HTTP handshake. The sequence below is what TiviMate, IPTV Smarters, and XCIPTV execute on login; you can reproduce each call in a browser or with curl.
1 Authentication handshake
GET http://line.server.example.com:8080/player_api.php?username=USERNAME&password=PASSWORD
{
"user_info": {
"username": "USERNAME",
"status": "Active",
"auth": 1,
"exp_date": "1798761600",
"is_trial": "0",
"active_cons": "1",
"max_connections": "5",
"allowed_output_formats": ["m3u8", "ts", "rtmp"]
},
"server_info": {
"url": "line.server.example.com",
"port": "8080",
"https_port": "2086",
"server_protocol": "http",
"timezone": "UTC",
"timestamp_now": 1759795200
}
}
auth must equal 1 and status "Active". exp_date is a Unix timestamp; max_connections caps concurrent streams; https_port exposes the TLS listener used to defeat SNI-based shaping.
2 Live category indexing & stream URL construction
GET http://line.server.example.com:8080/player_api.php?username=USERNAME&password=PASSWORD&action=get_live_categories
[
{ "category_id": "12", "category_name": "UK | SKY SPORTS", "parent_id": 0 },
{ "category_id": "18", "category_name": "USA | ESPN & FOX SPORTS", "parent_id": 0 },
{ "category_id": "41", "category_name": "24/7 | PPV EVENTS", "parent_id": 0 }
]
GET http://line.server.example.com:8080/player_api.php?username=USERNAME&password=PASSWORD&action=get_live_streams&category_id=12
# Stream URL template returned per stream_id:
http://line.server.example.com:8080/live/USERNAME/PASSWORD/STREAM_ID.ts
http://line.server.example.com:8080/live/USERNAME/PASSWORD/STREAM_ID.m3u8
3 EPG XMLTV synchronisation routine
curl -sS --compressed "http://line.server.example.com:8080/xmltv.php?username=USERNAME&password=PASSWORD" -o guide.xml
# Short-form EPG for a single channel (JSON, base64 descriptions):
GET http://line.server.example.com:8080/player_api.php?username=USERNAME&password=PASSWORD&action=get_short_epg&stream_id=STREAM_ID&limit=4
<?xml version="1.0" encoding="UTF-8"?>
<tv generator-info-name="Reference Panel EPG">
<channel id="skysportsmainevent.uk">
<display-name>Sky Sports Main Event</display-name>
<icon src="https://cdn.example/logos/ssme.png"/>
</channel>
<programme start="20261006190000 +0000" stop="20261006210000 +0000" channel="skysportsmainevent.uk">
<title lang="en">Premier League Live</title>
<desc lang="en">Live coverage, 50 fps.</desc>
<category lang="en">Sports</category>
</programme>
</tv>
4 M3U extended playlist equivalent
#EXTM3U
#EXTINF:-1 tvg-id="skysportsmainevent.uk" tvg-name="Sky Sports Main Event" tvg-logo="https://cdn.example/logos/ssme.png" group-title="UK | SKY SPORTS",Sky Sports Main Event FHD
http://line.server.example.com:8080/live/USERNAME/PASSWORD/10231.ts
# Full playlist export:
http://line.server.example.com:8080/get.php?username=USERNAME&password=PASSWORD&type=m3u_plus&output=ts
EPG Source WebGrab+Plus FAQ
What is EPG Source WebGrab+Plus in simple terms?
WebGrab+Plus is the most widely used grabber for building XMLTV guides. It reads site-specific .ini definitions to scrape broadcaster schedules and merges them into one XMLTV file that panels serve via xmltv.php.
Why do new channels show no guide for a day?
The grabber adds the channel on its next scheduled run; most panels refresh within 12 hours.
How do I know if my ISP is throttling IPTV streams, and how do I stop it?
Run a speed test on the same device while a stream buffers. If raw throughput is above 25 Mbps but the player reports a bitrate below 8 Mbps, your ISP is applying traffic shaping to the stream flow, usually triggered by deep packet inspection of the TLS SNI or by sustained UDP/TCP flows to known hosting ASNs. Stop it by routing the player through a WireGuard tunnel (which hides destination and SNI inside ChaCha20-Poly1305 encryption), switching DNS to 1.1.1.1 over HTTPS, and keeping a 5,000 ms player buffer so short shaping bursts never reach the decoder.
What buffer size should I set in TiviMate, Smarters, or XCIPTV for 4K sports?
Set the largest option (5,000 ms in TiviMate, "Large" in Smarters). Buffer time in seconds equals buffer bytes multiplied by 8, divided by the stream bitrate in Mbps: a 15 MB allocation on an 18.5 Mbps 4K feed yields 6.5 seconds of protection, which covers typical ISP shaping bursts of 2-4 seconds without a visible freeze.
Why is my EPG guide empty or showing programs at the wrong time?
Players fetch an XMLTV file from xmltv.php and match each channel by tvg-id. An empty guide means the player downloaded the file before the server finished its 15-minute refresh or the file exceeded the player size cap (set TiviMate EPG update to "never limit"). Wrong times are a timezone offset issue: XMLTV timestamps carry +0000 and the player must apply your local offset, so set an EPG shift of +1 or -5 hours in the channel settings rather than changing the device clock.
What is device MAC address binding and why does my MAG box or Smart TV app ask for it?
Stalker / Ministra middleware authenticates a set-top box by its 48-bit MAC address (MAG boxes use the 00:1A:79 OUI prefix) instead of a username and password. The reseller panel binds that MAC to a subscription line; apps such as IBO Player and Smarters on Samsung or LG TVs generate a virtual MAC that must be registered the same way. If you replace the device, the panel must re-bind the new MAC or the portal returns an "unregistered device" error.
WireGuard vs OpenVPN: which VPN protocol is better for 4K IPTV?
WireGuard. It runs in the Linux kernel, uses a 4,000-line codebase with ChaCha20-Poly1305 encryption, and adds roughly 1-3 ms of latency with 5-8% throughput overhead, so an 18.5 Mbps 4K stream passes untouched. OpenVPN in TCP mode suffers from TCP-over-TCP meltdown during packet loss and typically costs 20-35% throughput; use OpenVPN only in UDP mode with tls-crypt on networks that block UDP port 51820.
Every external citation on this page points to a primary source: telecommunications RFCs, ITU-T and ISO codec standards, manufacturer and developer documentation, national regulators, or official sports governing bodies. No commercial IPTV competitor is cited.