Usage: overview and endpoints
Endpoints
/proxy/hls/manifest.m3u8: Proxify HLS streams/proxy/stream: Proxy generic http video streams/proxy/mpd/manifest.m3u8: Process MPD manifests/proxy/mpd/playlist.m3u8: Generate HLS playlists from MPD/proxy/mpd/segment.mp4: Process and decrypt media segments/proxy/ip: Get the public IP address of the MediaFlow Proxy server/proxy/forward: Generic transparent HTTP relay — any method, any body, any headers; route API calls through MediaFlow's IP (see Forward proxy)/extractor/video: Extract direct video stream URLs from supported hosts (see Video extractor)/playlist/builder: Build and customize playlists from multiple sources/proxy/epg: Proxy and cache XMLTV/EPG data (see EPG Proxy below)/proxy/transcode/playlist.m3u8: Generate HLS VOD playlist for generic stream transcode/proxy/transcode/init.mp4: fMP4 init segment for generic transcode playlist/proxy/transcode/segment.m4s: fMP4 media segment for generic transcode playlist/proxy/telegram/transcode/playlist.m3u8: Generate HLS VOD playlist for Telegram transcode/proxy/telegram/transcode/init.mp4: fMP4 init segment for Telegram transcode playlist/proxy/telegram/transcode/segment.m4s: fMP4 media segment for Telegram transcode playlist
EPG Proxy
GET /proxy/epg — fetch, cache, and serve XMLTV/EPG schedule data from any upstream source.
Designed for Channels DVR, Plex, Emby, Jellyfin, TiviMate, and any other XMLTV-compatible client.
EPG vs DVR: EPG (Electronic Program Guide) is the XMLTV XML file that contains TV schedule data. A DVR application like Channels DVR reads EPG data to populate its TV guide and schedule recordings. This proxy sits between the DVR/player and the upstream EPG source.
Parameters
| Parameter | Required | Description |
|---|---|---|
d |
Yes | Upstream XMLTV/EPG URL. Plain URLs and base64-encoded URLs are both accepted. |
api_password |
Yes* | API password (*if configured) |
cache_ttl |
No | Cache lifetime in seconds. 0 disables caching. Default: 3600 (1 hour, configurable via EPG_CACHE_TTL). |
h_<Name> |
No | Custom upstream request headers. E.g. h_Authorization=Bearer token for protected EPG sources. |
Example
GET /proxy/epg?d=http://provider.com/xmltv.php?username=x%26password=y&api_password=secret
With a base64-encoded source URL (recommended when the EPG URL contains credentials):
GET /proxy/epg?d=aHR0cDovL3Byb3ZpZGVyLmNvbS94bWx0di5waHA_dXNlcm5hbWU9eCZwYXNzd29yZD15&api_password=secret
Channels DVR setup
- Open Channels DVR → Sources → Add Source → Custom Channels
- In the EPG/Guide Data section, paste your
/proxy/epg?d=...URL as the XMLTV URL - Save and trigger a guide refresh
Response headers
| Header | Value |
|---|---|
Content-Type |
application/xml; charset=utf-8 |
X-EPG-Cache |
HIT or MISS |
Cache-Control |
public, max-age=<ttl> |
Once the server is running, for more details on the available endpoints and their parameters, visit the Swagger UI at http://localhost:8888/docs.