{"id":13820444,"url":"https://github.com/kvaster/iptv-proxy","last_synced_at":"2025-05-16T10:30:56.976Z","repository":{"id":43296168,"uuid":"235300385","full_name":"kvaster/iptv-proxy","owner":"kvaster","description":"Simple iptv restreamer","archived":false,"fork":false,"pushed_at":"2024-06-02T17:33:23.000Z","size":247,"stargazers_count":94,"open_issues_count":11,"forks_count":22,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-05T08:09:02.520Z","etag":null,"topics":["iptv"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kvaster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-21T09:22:27.000Z","updated_at":"2024-07-27T19:24:55.000Z","dependencies_parsed_at":"2024-01-13T16:23:19.874Z","dependency_job_id":"40a3b59b-3aad-446e-9034-7c361aa7f5b4","html_url":"https://github.com/kvaster/iptv-proxy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kvaster%2Fiptv-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kvaster%2Fiptv-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kvaster%2Fiptv-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kvaster%2Fiptv-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kvaster","download_url":"https://codeload.github.com/kvaster/iptv-proxy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225423609,"owners_count":17472147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iptv"],"created_at":"2024-08-04T08:01:03.501Z","updated_at":"2024-11-19T20:30:31.916Z","avatar_url":"https://github.com/kvaster.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# Overview\n\nThis project is a simple iptv restreamer. For now it supports only HLS (m3u8) streams.\nSome iptv providers allow to connect only one device per url and this is not really\ncomfortable when you have 3+ tv. Iptv-proxy allocates such 'urls' dynamically. I.e. your\niptv provider have two urls (playlists) and allows only one connection per url, but\nyou have 4 tv in your house and you never watch more then 2 tv at the same time.\nIn this case you can setup two playlists in iptv proxy and they will be dynamically\nallocated to active tv.\n\nAlso iptvproxy can combine different iptv providers. It will combine both - playlist and xmltv data (if available).\n\n## Configuration\n\n```yaml\nhost: 127.0.0.1\nport: 8080\nbase_url: http://127.0.0.1:8080\nforwarded_pass: password\ntoken_salt: 6r8bt67ta5e87tg7afn\nchannels_timeout_sec: 5\nchannels_total_timeout_sec: 60\nchannels_retry_delay_ms: 1000\nxmltv_timeout_sec: 30\nxmltv_total_timeout_sec: 120\nxmltv_retry_delay_ms: 1000\nuse_http2: false\nservers:\n  - name: someiptv-1\n    connections:\n      - url: https://someiptv.com/playlist.m3u\n        max_connections: 1\n  - name: someiptv-2\n    connections:\n      - url: https://iptv-proxy.example.com/playlist.m3u\n        max_connections: 4\n      - url: https://iptv-proxy.example.com/playlist2.m3u\n        max_connections: 2\n        login: mylogin\n        password: mypassword\n    xmltv_url: https://epg.example.com/epg.xml.gz\n    xmltv_before: p5d\n    xmltv_after: p1d\n    send_user: true\n    proxy_stream: true\n    channel_failed_ms: 1000\n    info_timeout_ms: 1000\n    info_total_timeout_ms: 2000\n    info_retry_delay_ms: 100\n    catchup_timeout_ms: 1000\n    catchup_total_timeout_ms: 2000\n    catchup_retry_delay_ms: 100\n    stream_start_timeout_ms: 1000\n    stream_read_timeout_ms: 1000\n    group_filters:\n      - 'movies'\n      - 'vid.*'\nallow_anonymous: false\nusers:\n  - 65182_login1\n  - 97897_login2\n```\n\n* `base_url` - url of your service, you may omit this (see forwarded_pass)\n* `forwarded_pass` - password for Forwarded header in case iptvproxy is behind proxy\n* `token_salt` - just random chars, they are used to create encrypted tokens\n* `channels_timeout_sec` - timeout for single request (default is 5 sec) \n* `channels_total_timeout_sec` - total timeout for channels loading (default is 60 sec)\n* `channels_retry_delay_ms` - delay between requests (default is 1000 ms)\n* `xmltv_timeout_sec` - timeout for single xmltv data request (default is 30 sec)\n* `xmltv_total_timeout_sec` - total timeout for loading xmltv data (default is 120 sec)\n* `xmltv_retry_delay_ms` - delat between retries (default is 1000 ms)\n* `use_http2` - use http2 when available, default is false - where are some strange problems with recent nginx and we really don't need http2\n* `max_connections` - max active connections allowed for this playlist\n* `login` - login for basic authentication (useful for tvheadend iptv playlists)\n* `password` - password for basic authentication (useful for tvheadend iptv playlists)\n* `xmltv_url` - url for xmltv data, epg for different servers will be reprocessed and combined to one file for all channels\n* `xmltv_after` - filter programmes after specified time (to reduce xmltv size), java duration format (p1d - one day), default - unlimited\n* `xmltv_before` - filter programmes before specified time (to reduce xmltv size), java duration format (p5d - five days), default - unlimited\n* `send_user` - this is useful only when you're using cascade config - iptv-proxy behind iptv-proxy.\nIf 'true' then iptv-proxy will send current user name in special http header.\nWe need this to identify device (endpoint) - this will help us to handle max connections and\nchannel switching properly.\n* `proxy_stream` - true (default) means proxy all data through own server,\nfalse means using direct urls for data\n* `channel_failed_ms` - on channel failure (error on downloading current m3u8 info)\nit will be marked as 'failed' for some time and will be not used for any subsequent requests.\nThis feature should be enabled for last iptvproxy in chain (the one which connects to your iptv service)\nand should be disabled in other situation\n* `info_timeout_ms` - timeout for single request (default is 2000ms)\n* `info_total_timeout_ms` - some providers may return 404 http error on m3u8 request. This setting\nwill trigger automatic request retry. We'll be trying to make additional requests for this period. (default is 2000ms).\n* `info_retry_delay_ms` - delay in milliseconds between retries (default is 100ms).\n* `catchup_timeout_sec` - same as `info_timeout_ms` but used only with catchup (channel archive, timeshift, default is 1000ms).\n* `catchup_total_timeout_ms` - same as `info_total_timeout_ms` but used only with catchup (default is 2000ms).\n* `catchup_retry_delay_ms` - same as `info_retry_delay_ms` but used only with catchup (default is 100ms).\n* `stream_start_timeout_ms` - timeout for starting actually streaming data (default is 1000ms)\n* `stream_read_timeout_ms` - read timeout during streaming - time between any data packets (default is 1000ms)\n* `group_filters` - list of regex channel filters\n* `allow_anonymous` - allow to connect any device without specific user name.\nIt is not good idea to use such setup. You really should add name for each device you're using.\n\niptv proxy will embed full urls in it's lists - it means we should know url from which service is accessed by user.\nUrl is calculated in following way:\n* if forwarded_pass is enabled url is taken from Forwarded header\n(nginx setup: `proxy_set_header Forwarded \"pass=PASS;baseUrl=https://$host\";`).\nPassword must match setting in iptvproxy config\n* base_url is used in case it defined\n* schema host and port from request is used (will not work in case iptvproxy is behind proxy)\n\n## Device setup\n\nOn device you should use next url as dynamic playlist:\n\n`\u003cbase_url\u003e/m3u/\u003cuser_name\u003e`\n\nor\n\n`\u003cbase_url\u003e/m3u`\n\nfor anonymous access.\n\nFor xmltv you should use `\u003cbase_url\u003e/epg.xml.gz`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkvaster%2Fiptv-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkvaster%2Fiptv-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkvaster%2Fiptv-proxy/lists"}