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/ 目录: [td]目录
功能
转发
将内网可访问的资源(如 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
下载
服务端(本仓库)
支持的平台: [td]| 平台 | 文件名示例 | | Linux 64-bit | TVGate-linux-64.zip | | Linux ARM64 | TVGate-linux-arm64-v8a.zip | | Linux ARM32 v7 | TVGate-linux-arm32-v7a.zip | | Linux 32-bit | TVGate-linux-32.zip | | Linux MIPS | TVGate-linux-mips32.zip | | Linux LoongArch | TVGate-linux-loong64.zip | | Linux RISC-V | TVGate-linux-riscv64.zip | | Windows 64-bit | TVGate-windows-64.zip | | Windows ARM64 | TVGate-windows-arm64-v8a.zip | | macOS 64-bit | TVGate-macos-64.zip | | macOS ARM64 | TVGate-macos-arm64-v8a.zip | | Android ARM64 | TVGate-android-arm64-v8a.zip | 查看全部支持的平台
安卓客户端
OpenWrt 插件
梅林固件(Asuswrt-Merlin)
快速开始
安装
- 下载对应平台二进制(示例)并放到 /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: [Unit]Description=TVGate - IPTV 转发 / 代理工具After=network.target[Service]Type=simpleLimitCORE=infinityLimitNOFILE=100000LimitNPROC=100000ExecStart=/usr/local/TVGate/TVGate-linux-amd64 -config=/usr/local/TVGate/config.yamlRestart=on-failurePrivateTmp=trueExecReload=/bin/kill -SIGHUP $MAINPID[Install]WantedBy=multi-user.target
启用并启动: systemctl daemon-reloadsystemctl enable --now TVGate
OpenWrt 安装
使用示例(外网访问路径)
以下示例假设 TVGate 运行在公网 IP 111.222.111.222,端口 8888。 组播 RTP(内网)
RTSP(运营商/内网单播)
HTTP / M3U8(运营商单播)
HTTPS 转发
局域网 PHP 动态页面代理
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。
相关项目
[td]
|