Back to Iptv Api

README En

README_en.md

2.0.739.5 KB
Original Source
<div align="center"> </div> <p>
⚡️ IPTV live-source automatic update platform — 🤖 fully automated collection, filtering, speed-testing, and generation 🚀. Supports extensive personalized configuration; paste the resulting address into a player to watch.
</p>

<p align="center">
<a href="https://trendshift.io/repositories/12327" target="_blank"></a>
</p> <p align="center"> <a href="https://github.com/Guovin/iptv-api/releases/latest"> </a> <a href="https://www.python.org/"> </a> <a href="https://github.com/Guovin/iptv-api/releases/latest"> </a> <a href="https://hub.docker.com/repository/docker/guovern/iptv-api"> </a> <a href="https://github.com/Guovin/iptv-api/stargazers"> </a> <a href="https://github.com/Guovin/iptv-api/fork"> </a> </p> <div align="center">

中文 | English

</div>

[!IMPORTANT]

  1. Go to the Govin WeChat public account and reply with cdn to get an acceleration address to improve access speed for subscription sources and channel logos.
  2. This project does not provide data sources. Please add your own before generating results. (How to add data sources?)
  3. The quality of generated results depends on the data sources and network conditions; please adjust the configuration accordingly to obtain results that better meet your needs.

Core Features

FeatureSupportDescription
Custom templatesGenerate custom channel playlists
Channel aliasesImprove channel matching and accuracy, supports regular expressions
Multi-source aggregationLocal sources and subscription sources (supports UA configuration, detects invalid addresses and automatically disables them)
Stream relayImprove playback on weak networks, supports direct browser playback, and automatic transcoding/adaptation
Replay/VOD interfacesFetching and generating replay/VOD interfaces
EPGFetch and display channel program guides
Channel logosCustom channel logos, supports local additions or a remote library
Speed test & validationObtain latency, bitrate, resolution, fps; filter invalid interfaces; supports real-time output
Advanced preferencesRate, resolution, blacklist/whitelist, location and ISP custom filters
Results managementCategorized storage and access of results, log recording, unmatched channel records, statistical analysis, freeze filtering/unfreeze rollback, data caching
Scheduled tasksScheduled or interval updates
Multi-platform deploymentWorkflows, CLI, GUI, Docker (amd64/arm64/arm v7)
More featuresSee Configuration section for details

Config

[!NOTE]
The following configuration items are located in config/config.ini and can be modified via the configuration file or environment variables. Save changes and restart to apply.

<details> <summary>Click to expand configuration parameters</summary>
Configuration ItemDescriptionDefault Value
open_updateEnable updates, used to control whether to update interfaces. If disabled, all working modes (getting interfaces and speed tests) stop.True
open_unmatch_categoryEnable unmatched channel category. Channels not matched by source_file will be written directly into this category and will not participate in speed testingFalse
open_empty_categoryEnable empty category, channels without results will automatically be classified to the bottom.False
open_update_timeEnable display of update time.True
open_url_infoEnable to display interface description information, used to control whether to display interface source, resolution, protocol type and other information (content after $). The player uses this information to describe the interface. If some players (such as PotPlayer) do not support parsing and cannot play, you can turn it off.False
open_epgEnable EPG function, support channel display preview content.True
open_m3u_resultEnable converting and generating m3u file type result links, supporting the display of channel icons.True
urls_limitNumber of interfaces per channel.5
update_time_positionUpdate time display position, takes effect only when open_update_time is enabled. Optional values: top, bottom. top: display at the top of the result, bottom: display at the bottom.top
languageApplication language setting; Optional values: zh_CN, enzh_CN
update_modeScheduled execution update mode, does not apply to workflow; Optional values: interval, time; interval: execute by interval time, time: execute at specified time pointinterval
update_intervalScheduled execution update interval, only takes effect when update_mode = interval, unit hours, set to 0 or empty to run only once12
update_timesScheduled execution update time point, only takes effect when update_mode = time, format HH:MM, supports multiple time points separated by commas
update_startupExecute update at startup, used to control whether to execute an update immediately after the program startsTrue
time_zoneTime zone, can be used to control the time zone for scheduled execution or display update time; Optional values: Asia/Shanghai or other time zone codesAsia/Shanghai
source_fileTemplate file path.config/demo.txt
final_fileGenerated result file path.output/result.txt
open_realtime_writeEnable real-time writing of result files, you can access and use the updated results during the speed measurement processTrue
open_serviceEnable page service, used to control whether to start the result page service. If using platforms such as Qinglong with scheduled tasks, and you need the program to exit after update is finished, you can disable this.True
app_portPage service port, used to control the port number of the page service.5180
public_schemePublic network protocol. Optional values: http, https.http
public_domainPublic network Host address, used to generate access URLs in the result; uses local machine IP by default.127.0.0.1
cdn_urlCDN proxy acceleration address, used for accelerated access to subscription sources, channel icons and other resources.
http_proxyHTTP proxy address, used for network requests such as obtaining subscription sources
open_localEnable local source function, will use the data in the template file and the local source file (local.txt).True
open_subscribeEnable subscription source function.True
open_auto_disable_sourceEnable automatic disabling of invalid sources. When the request fails after retries, the content is empty, or no matching value is found, the corresponding address in config/subscribe.txt and config/epg.txt will be prefixed with # to disable it.True
open_historyEnable using historical update results (including interfaces from template and result files), merged into this update.True
open_headersEnable using request header authentication information contained in M3U, used for speed test and other operations. Note: only a few players support playing such interfaces with authentication info, so it is disabled by default.False
open_speed_testEnable speed test functionality to obtain response time, rate, and resolution.True
open_filter_resolutionEnable resolution filtering. Interfaces below the minimum resolution (min_resolution) will be filtered. GUI users need to manually install FFmpeg; the program will call FFmpeg to obtain interface resolution. Recommended to enable: although it increases speed test time, it more effectively distinguishes playable interfaces.True
open_filter_speedEnable speed filtering. Interfaces below the minimum speed (min_speed) will be filtered.True
open_full_speed_testEnable full speed test, all interfaces under the channel (except for the whitelist) are speed tested, if turned off, when the number of valid speed test results reaches urls_limit, the remaining interfaces will stop speed testingFalse
open_supplyEnable compensation mechanism mode. When the number of channel interfaces is insufficient, interfaces that do not meet the conditions (such as lower than minimum speed) but may still be available will be added to the result to avoid empty results.False
min_resolutionMinimum interface resolution, takes effect only when open_filter_resolution is enabled.1280x720
max_resolutionMaximum interface resolution, takes effect only when open_filter_resolution is enabled.3840x2160
min_speedMinimum interface speed (unit: M/s), takes effect only when open_filter_speed is enabled.0.5
resolution_speed_mapResolution and rate mapping relationship, used to control the minimum rate requirements for interfaces of different resolutions, the format is resolution:speed, multiple mapping relationships are separated by commas1280x720:0.2,1920x1080:0.5,3840x2160:1.0
speed_test_limitNumber of interfaces to test at the same time. Controls concurrency in the speed test stage. Larger values shorten speed test time but increase load and may reduce accuracy; smaller values increase time but reduce load and improve accuracy.5
speed_test_timeoutSingle interface speed test timeout duration in seconds. Larger values increase speed test time and number of interfaces obtained (but with lower average quality); smaller values reduce time and favor low-latency, higher-quality interfaces.10
speed_test_filter_hostUse Host address to de-duplicate speed tests. Channels with the same Host share speed test data. Enabling this can greatly reduce speed test time but may cause inaccurate results.False
request_timeoutQuery request timeout duration in seconds, used to control timeout and retry duration when querying interface text links. Adjusting this value can optimize update time.10
ipv6_supportForce treating the current network as IPv6-supported and skip detection.False
ipv_typeProtocol type of interfaces in the generated result. Optional values: ipv4, ipv6, all.all
ipv_type_preferInterface protocol type preference. Preferred type will be ordered earlier in the result. Optional values: ipv4, ipv6, auto.auto
locationInterface location filter. Result will only contain interfaces whose location matches the given keywords (comma-separated). Leave empty to not restrict by location. Recommended to set near the end user to improve playback experience.
ispInterface operator filter. Result will only contain interfaces whose operator matches the given keywords (comma-separated). Leave empty to not restrict by operator.
origin_type_preferPreferred interface source ordering. The result is sorted in this order (comma-separated). Example: local,subscribe. Leave empty to not specify and sort by interface speed instead.
local_numPreferred number of local source interfaces in the result.10
subscribe_numPreferred number of subscription source interfaces in the result.10
logo_urlChannel logo library URL.
logo_typeChannel logo file type.png
open_rtmpEnable RTMP push function. Recommended only for owned or authorized content. Requires FFmpeg installed and uses local bandwidth to improve playback experience.True
nginx_http_portNginx HTTP service port, used for the HTTP service of RTMP push forwarding.8080
nginx_rtmp_portNginx RTMP service port, used for the RTMP service of RTMP push forwarding.1935
rtmp_idle_timeoutRTMP channel idle stop-streaming timeout in seconds. When no one watches for longer than this duration, streaming is stopped, helping reduce server resource usage.300
rtmp_max_streamsMaximum number of concurrent RTMP push streams. Controls how many channels can be pushed at the same time. Larger values increase server load; tune to optimize resource usage.10
rtmp_transcode_modePush streaming transcoding mode. copy means no transcoding — output is copied to save CPU consumption as much as possible. auto means adaptive transcoding to match players; this increases CPU usage but can improve compatibility.copy
</details>

Quick Start

Configuration and Results Directory

iptv-api/                  # Project root directory
├── config                 # Configuration files directory, includes config files, templates, etc.
│   └── hls                # Local HLS streaming files directory, used to store video files named after channel names
│   └── local              # Local source files directory; used to store multiple local source files; supports txt/m3u formats
│   └── config.ini         # Configuration parameters file
│   └── demo.txt           # Channel template
│   └── alias.txt          # Channel aliases
│   └── blacklist.txt      # Interface blacklist
│   └── whitelist.txt      # Interface whitelist
│   └── subscribe.txt      # Channel subscription sources list
│   └── local.txt          # Local source file
│   └── epg.txt            # EPG subscription sources list
└── output                 # Output files directory, includes generated result files, etc.
    └── data               # Result data cache directory
    └── epg                # EPG result directory
    └── ipv4               # IPv4 result directory
    └── ipv6               # IPv6 result directory
    └── result.m3u/txt     # m3u/txt result
    └── hls.m3u/txt        # RTMP hls stream result
    └── log                # Log files directory
        └── result.log     # Valid result log
        └── speed_test.log # Speed test log
        └── statistic.log  # Statistics result log
        └── unmatch.log    # Unmatched channel records

Workflow

Fork this project and initiate workflow updates, detailed steps are available at Detailed Tutorial

Command Line

shell
pip install pipenv
shell
pipenv install --dev

Start update:

shell
pipenv run dev

Start service:

shell
pipenv run service

GUI Software

  1. Download the IPTV-API Update Software, open the software, and click Start to perform the update

  2. Or run the following command in the project directory to open the GUI software:

shell
pipenv run ui

Docker

1. Deployment with Compose (recommended)

Download the docker-compose.yml or create one by copying the content (internal parameters can be changed as needed), then run the following command in the path where the file is located:

bash
docker compose up -d

2. Manual deployment with commands

(1) Pull the image
bash
docker pull guovern/iptv-api:latest

🚀 Proxy acceleration (use this command if pulling fails, but it may download an older version):

bash
docker pull docker.1ms.run/guovern/iptv-api:latest
(2) Run the container
bash
docker run -d -p 80:8080 guovern/iptv-api

Environment variables:

VariableDescriptionDefault
PUBLIC_DOMAINPublic domain or IP address, determines external access and the Host used in push stream results127.0.0.1
PUBLIC_PORTPublic port, set to the mapped port, determines external access address and the port used in push stream results80
NGINX_HTTP_PORTNginx HTTP service port, needs to be mapped for external access8080

If you need to modify environment variables, add the following parameters after the above run command:

bash
# Modify public domain
-e PUBLIC_DOMAIN=your.domain.com
# Modify public port
-e PUBLIC_PORT=80

In addition to the environment variables listed above, you can also override the configuration items in the configuration file via environment variables.

Mounts: used to synchronize files between the host and the container. You can edit templates, configs, and access generated result files directly on the host. Append the following options to the run command above:

bash
# Mount config directory
-v /iptv-api/config:/iptv-api/config
# Mount output directory
-v /iptv-api/output:/iptv-api/output
3. Update Results
EndpointDescription
/Default endpoint
/m3um3u format endpoint
/txttxt format endpoint
/ipv4ipv4 default endpoint
/ipv6ipv6 default endpoint
/ipv4/txtipv4 txt endpoint
/ipv6/txtipv6 txt endpoint
/ipv4/m3uipv4 m3u endpoint
/ipv6/m3uipv6 m3u endpoint
/contentEndpoint content
/log/resultLog of valid results
/log/speed-testLog of all interfaces involved in speed testing
/log/statisticLog of statistics results
/log/unmatchLog of unmatched channels

RTMP Streaming:

[!NOTE]

  1. If deploying on a server, be sure to set the PUBLIC_DOMAIN environment variable to the server's domain name or IP address and the PUBLIC_PORT environment variable to the public port; otherwise the streaming addresses will not be accessible.
  2. When streaming is enabled, obtained interfaces (e.g., subscription sources) will be streamed by default; only use this for content you own, are explicitly authorized to redistribute, or need for closed/internal testing.
  3. To stream local video sources, create an hls folder under the config directory and place video files named after the channel; the program will automatically stream them to the corresponding channels.
  4. When using this project in Mainland China, make sure the content authorization, copyright, network-audiovisual, and broadcasting-related compliance requirements are satisfied. Do not use it to distribute, relay, or publicly expose unauthorized live streams or program sources.
Streaming EndpointDescription
/hlshls streaming endpoint
/hls/txthls txt streaming endpoint
/hls/m3uhls m3u streaming endpoint
/hls/ipv4hls ipv4 default streaming endpoint
/hls/ipv6hls ipv6 default streaming endpoint
/hls/ipv4/txthls ipv4 txt streaming endpoint
/hls/ipv4/m3uhls ipv4 m3u streaming endpoint
/hls/ipv6/txthls ipv6 txt streaming endpoint
/hls/ipv6/m3uhls ipv6 m3u streaming endpoint
/statStreaming status statistics endpoint

How to use streaming?

Changelog

Changelog

Follow

GitHub

Follow my GitHub account Guovin to find more useful projects

WeChat public account

WeChat public account search for Govin, or scan the code to receive updates and learn more tips:

Need more help?

Contact via email: [email protected]

Star History

Donations

<div>Development and maintenance are not easy, please buy me a coffee ~</div>

AlipayWechat

Disclaimer

  • This project is provided as a tool/framework only; it does not include, host, cache, or guarantee any live streams, copyrighted programs, or other third-party content. Users must add their own data sources and ensure that the data sources used and their use comply with applicable laws and regulations in their jurisdiction.
  • Users are solely responsible for any content obtained, distributed, relayed, or played through this project. Do not use it to distribute, share, relay, or watch copyrighted content without authorization, especially in Mainland China where content authorization, licensing, filing/permit, and other regulatory requirements may apply.
  • The RTMP/HLS push features are intended only for owned content, explicitly authorized content, or closed-environment technical testing. If you cannot verify authorization, disable open_rtmp and do not expose the related endpoints to the public internet.
  • When using this project, comply with local laws, regulations, and supervisory requirements. The author is not liable for any legal responsibility arising from users' use of this project.
  • For commercial, corporate, or production use, consult compliance/legal counsel and complete a review.

License

AGPL-3.0 License © 2024-PRESENT Govin