TVGate — IPTV 转发 / 代理工具
TVGate — IPTV 转发 / 代理工具高性能的本地内网流/网页资源转发与代理工具,将内部可访问的 http/rtsp/rtp 等资源安全地发布到外网,并支持通过多种上游代理跨区域访问受限资源。
[*]转发:内网 RTP 组播 / RTSP / HTTP / HTTPS / PHP 动态页 → HTTP 对外发布(类似 udpxy + 反代)
[*]代理:按域名 / IP / 子网 分组指定上游代理(socks5/socks4/http/https),跨区域访问受限源
[*]H5 播放器:IPTV 订阅直播 / EPG / 回看,真实源地址不外露
[*]推流发布:拉流转推 RTMP 多平台 + 本地 FLV/HLS 播放 + 录像归档
[*]内置 PHP 运行时:纯 Go phpgo,无需 PHP-FPM,安卓也能跑
[*]Web 管理后台:可视化配置全部模块,配置热重载无需重启
📖 详细文档
所有模块的详细配置说明、字段表与完整示例都在 doc/ 目录:
模块文档说明
服务器与传输doc/SERVER.mdserver 监听端口 / TLS / http 连接池 / reload 热重载
TVBox 全平台客户端(TVFusion)github.com/qist/tvfusion已迁移至独立仓库开发(设计基准随迁 DESIGN.md);tvgate 作为引擎依赖(Go module)
Web 管理后台doc/WEB.md登录 / 二次授权 / 代码文件管理 / 三处备份机制
H5 播放器doc/PLAYER.mdIPTV 订阅 / EPG / 回看 / 不透明 key / /pp 播放入口
推流发布doc/PUBLISHER.mdRTMP 转推 / 本地 FLV·HLS / 录像回放 / MP4 归档 / 配置模板
代理组doc/PROXYGROUPS.md按域名/IP 分组上游代理、测速切换、规则格式
组播配置doc/MULTICAST.mdRTP 组播转 HTTP、FCC 快速换台
域名映射doc/DOMAINMAP.md请求域名改写 + 自定义请求头
全局认证doc/GLOBALAUTH.md动态/静态 token 校验,保护转发与播放入口
视频解析doc/JX.mdjx 影视解析接口,对接 TVBox
TS 缓存doc/TS.mdTS 分片内存缓存,多观众少回源
PHP 模块doc/PHP.md纯 Go phpgo runtime,/php/ 执行脚本
定时任务doc/TASKS.mdcron 调度,支持系统命令与 php:// 内部执行
仓库同步doc/SYNC.mdGitHub/GitLab/Gitee 单向同步到 docroot(TVBox 订阅托管)
GitHub 加速doc/GITHUB.md仓库同步与版本升级共用的加速地址配置
DNSdoc/DNS.md自定义 DNS 与三级解析兜底链
日志doc/LOG.md日志输出与轮转
梅林部署doc/MERLIN.mdAsuswrt-Merlin 路由器 Entware 一键安装
性能调优doc/TUNING.md内核参数 / conntrack / CPU 性能模式
配置总示例doc/config.yaml全模块配置样例(字段注释)
更新日志doc/CHANGELOG.md版本变更记录
目录
[*]功能
[*]详细文档
[*]下载
[*]快速开始
[*]Docker 启动
[*]服务管理
[*]使用示例
[*]Nginx 反向代理
[*]注意事项
功能
转发
将内网可访问的资源(如 http, https, rtsp, rtp)通过 HTTP 对外发布,外网用户访问 Go 程序所在主机的端口(默认 8888)即可获取流或请求代理的资源。支持的常见场景:
[*]将内网 RTP / 组播 转为可通过 HTTP 访问(类似 udpxy)
[*]将运营商提供的 RTSP / HTTP 单播转发并通过外网访问
[*]将局域网内的 PHP 动态脚本通过外网访问(如 huya.php)
[*]H5 播放器:订阅 IPTV 频道清单,浏览器直接看直播/回看(真实源不外露)
[*]定时任务:cron 调度执行系统命令或 docroot 内 PHP 脚本(安卓无原生 php 也可用)
代理
支持上游代理(socks5、socks4、http、https),可为不同域名 / IP / 子网指定不同上游代理,实现跨区域、跨运营商访问受限内容。
[*]动态重载配置:修改 config.yaml 后程序会自动重载配置(无需重启)
[*]规则类型:单 IP、CIDR 子网、域名通配符、IPv6 等,详见 doc/PROXYGROUPS.md
下载
服务端(本仓库)
前往 Releases 下载对应平台的二进制文件。支持的平台:
平台文件名示例
Linux 64-bitTVGate-linux-64.zip
Linux ARM64TVGate-linux-arm64-v8a.zip
Linux ARM32 v7TVGate-linux-arm32-v7a.zip
Linux 32-bitTVGate-linux-32.zip
Linux MIPSTVGate-linux-mips32.zip
Linux LoongArchTVGate-linux-loong64.zip
Linux RISC-VTVGate-linux-riscv64.zip
Windows 64-bitTVGate-windows-64.zip
Windows ARM64TVGate-windows-arm64-v8a.zip
macOS 64-bitTVGate-macos-64.zip
macOS ARM64TVGate-macos-arm64-v8a.zip
Android ARM64TVGate-android-arm64-v8a.zip
查看全部支持的平台
安卓客户端
tvgate-android — Android 平台 IPTV 播放客户端,配合 TVGate 服务端使用。前往 tvgate-android Releases 下载 APK。OpenWrt 插件
luci-app-tvgate — OpenWrt LuCI 管理界面插件,可在路由器上直接管理 TVGate。前往 luci-app-tvgate Releases 下载 ipk/apk 安装包。梅林固件(Asuswrt-Merlin)
华硕路由器梅林固件用户可通过 Entware 一键部署:U 盘安装、开机自启、U 盘弹出自动停止。 教程见 doc/MERLIN.md,一键脚本 doc/scripts/merlin-install.sh。快速开始
安装
[*]下载对应平台二进制(示例)并放到 /usr/local/TVGate/(或你的目录)。
[*]第一次启动配置文件会自动创建,后续修改请直接编辑 config.yaml 或者web 界面编辑。
[*]启动:
nohup /usr/local/TVGate/TVGate-linux-amd64 -config=/usr/local/TVGate/config.yaml > /var/log/tvgate.log 2>&1 & /var/log/tvgate.log 2>&1 &" tabindex="0" role="button" style="box-sizing: border-box; font-size: 14px; text-wrap-mode: nowrap; vertical-align: middle; cursor: pointer; user-select: none; appearance: none; border: 0px; border-radius: 6px; line-height: 20px; position: relative; color: rgb(9, 105, 218); background-color: rgba(0, 0, 0, 0); box-shadow: none; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color 80ms cubic-bezier(0.33, 1, 0.68, 1), box-shadow 80ms cubic-bezier(0.33, 1, 0.68, 1), border-color 80ms cubic-bezier(0.33, 1, 0.68, 1); width: 28px; height: 28px; display: flex !important; justify-content: center !important; align-items: center !important; margin: 8px !important;">
[*]浏览器打开 http://<IP>:8888/web/ 进入管理后台(默认账号密码见配置 web 段),可视化配置所有模块。
📦 使用 Docker 启动
你可以直接通过 Docker 拉取镜像运行:映射端口要根据yaml配置端口一致,例如:8888方式一:使用 ghcr.io 镜像
docker run -d --name=tvgate -p 8888:8888--restart=unless-stopped-v /usr/local/TVGate/:/etc/tvgate/ ghcr.io/qist/tvgate:latest
方式二:使用 Docker Hub 镜像
docker run -d --name=tvgate -p 8888:8888 --restart=unless-stopped-v /usr/local/TVGate/:/etc/tvgate/ juestnow/tvgate:latest
udp转发:
docker run -d--net=host--name=tvgate --restart=unless-stopped -v /usr/local/TVGate/:/etc/tvgate/ ghcr.io/qist/tvgate:latest
docker-compose 示例
version: "3"services:tvgate: image: ghcr.io/qist/tvgate:latest # 或 juestnow/tvgate:latest container_name: tvgate restart: always ports: - "8888:8888" volumes: - /usr/local/TVGate/:/etc/tvgate/
运行后可通过 http://宿主机IP:8888/ 访问。服务管理 / 启动脚本
systemd (Linux)
把以下文件保存为 /etc/systemd/system/TVGate.service:Description=TVGate - IPTV 转发 / 代理工具After=network.targetType=simpleLimitCORE=infinityLimitNOFILE=100000LimitNPROC=100000ExecStart=/usr/local/TVGate/TVGate-linux-amd64 -config=/usr/local/TVGate/config.yamlRestart=on-failurePrivateTmp=trueExecReload=/bin/kill -SIGHUP $MAINPIDWantedBy=multi-user.target
启用并启动:systemctl daemon-reloadsystemctl enable --now TVGate
OpenWrt 安装
下载地址:luci-app-tvgate Releases
[*]安装 ipk 包(OpenWrt 24 及以下):opkg updateopkg install curl ca-certificates unzip luci-compat luci luci-baseopkg install /tmp/luci-app-tvgate_1.0.0_all.ipkopkg install /tmp/luci-i18n-tvgate-zh-cn_1.0.0-1_all.ipkopkg install /tmp/luci-i18n-tvgate-en_1.0.0-1_all.ipk
[*]卸载 ipk 包:opkg remove luci-app-tvgateopkg remove luci-i18n-tvgate-enopkg remove luci-i18n-tvgate-zh-cn
[*]安装 apk 包(OpenWrt 25+):apk updateapk add curl ca-certificates unzip luci-compat luci luci-baseapk add --allow-untrusted luci-app-tvgate-1.0.0-r1.apkapk add --allow-untrusted luci-i18n-tvgate-en-1.0.0-r1.apkapk add --allow-untrusted luci-i18n-tvgate-zh-cn-1.0.0-r1.apk
[*]卸载 apk 包:apk del luci-app-tvgateapk del luci-i18n-tvgate-enapk del luci-i18n-tvgate-zh-cn
使用示例(外网访问路径)
以下示例假设 TVGate 运行在公网 IP 111.222.111.222,端口 8888。
[*]组播 RTP(内网)
[*]内网地址:rtp://239.0.0.1:2000
[*]外网访问:
http://111.222.111.222:8888/udp/239.0.0.1:2000
[*]RTSP(运营商/内网单播)
[*]内网地址:
rtsp://10.254.192.94/PLTV/.../index.smil
[*]外网访问:
http://111.222.111.222:8888/rtsp ... PLTV/.../index.smil
[*]HTTP / M3U8(运营商单播)
[*]内网地址:
http://sc.rrs.169ol.com/PLTV/.../index.m3u8
[*]外网访问:
http://111.222.111.222:8888/sc.rrs.169ol.com/PLTV/.../index.m3u8
[*]HTTPS 转发
[*]外网访问(转发 https):
http://111.222.111.222:8888/http ... PLTV/.../index.m3u8
[*]局域网 PHP 动态页面代理
[*]内网地址:http://192.168.1.10/huya.php?id=11342412
[*]外网访问:
http://111.222.111.222:8888/192.168.1.10/huya.php?id=11342412
Nginx 反向代理配置参考
当你在前端放置 Nginx 做 TLS 终端或域名路由时,建议如下配置把请求反代到本地 TVGate:server { listen 80; listen 443 ssl http2; server_name dl.test.com; ssl_certificate /etc/nginx/ssl/dl.test.com.crt; ssl_certificate_key /etc/nginx/ssl/dl.test.com.key; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 特殊情况: 路径以 /http:// 或 /https:// 开头,直接交给后端处理 location ~ ^/http(s)?:// { proxy_pass http://127.0.0.1:8888; proxy_set_header Host $host; } location / { proxy_pass http://127.0.0.1:8888; proxy_set_header Host $host; proxy_buffering off; proxy_cache off; }}
注意事项 / 常见问题
[*]安全性:如果将 TVGate 暴露到公网,请务必在前端使用 TLS(NGINX/证书)并限制访问(IP 白名单、HTTP 认证、VPN 等)。
[*]带宽与性能:流媒体转发占用大量上行带宽,请确认宿主机带宽足够;高并发内核调优见 doc/TUNING.md。
[*]版权合规:请确保你有权限分发和访问被转发的内容。
[*]端口冲突:如果 8888 被占用,请在配置或启动参数中修改监听端口。
[*]自动重载配置:修改 config.yaml 后观察日志,确认程序已加载新配置。
许可证
[*]本项目主体以 MPL-2.0 协议开源。
[*]播放引擎 ui/src/media-engine/:clean-room 自研实现,同样以 MPL-2.0 协议开源;旧版 ui/src/playback-engine/(基于 GPL 上游 rtp2httpd 的派生代码)已整体移除——源码中不再包含任何 GPL 派生代码,也无对旧引擎目录的 import 依赖(零依赖已核验,可在本仓库以 grep -rIn -E "from .*playback-engine" ui/src/media-engine --include='*.ts' 复现:命中为空;源码注释中少量 playback-engine 字样仅为历史溯源说明,非代码包含)。
[*]软解后端 FFmpeg(WASM):ui/src/media-engine/wasm/ 构建时链接裁剪的 FFmpeg 库(LGPL-2.1+,未启用任何 GPL 组件),以独立 .wasm 资源分发(等同动态链接);其源码获取与构建方式见 ui/src/media-engine/wasm/Makefile 与 ui/src/media-engine/wasm/README.md。
[*]第三方组件许可与历史 GPL 引擎移除说明:见 THIRD-PARTY-NOTICES。
相关项目
项目说明下载
tvgate服务端核心(本仓库)Releases
tvgate-androidAndroid IPTV 播放客户端Releases
luci-app-tvgateOpenWrt LuCI 管理插件Releases
页:
[1]