查看: 28|回复: 0

TVGate — IPTV 转发 / 代理工具

[复制链接]
发帖战绩
34
17
42305
主题
帖子
积分

等级头衔 ID : 2
用户组 : 管理员

积分成就 威望 : 10099 点
贡献 : 10108 点
金钱 : 11948 枚
违规 : 0 次
在线时间 : 115 小时
注册时间 : 2026-1-9
最后登录 : 2026-10-13

勋章

开拓者大师管理员论坛守护者论坛元老精英会员

联系方式

发表于 6 天前 | 显示全部楼层 |阅读模式 来自 江苏常州
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]
模块文档说明
服务器与传输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版本变更记录
目录



功能


转发


将内网可访问的资源(如 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 下载对应平台的二进制文件。
支持的平台:
[td]
平台文件名示例
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:
[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 安装


  • 安装 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。

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]
项目说明下载
tvgate服务端核心(本仓库)Releases
tvgate-androidAndroid IPTV 播放客户端Releases
luci-app-tvgateOpenWrt LuCI 管理插件Releases

谁念西风独自凉,萧萧黄叶闭疏窗。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|TVDB社区

相关侵权、举报、投诉及建议等,请发 E-mail:admin@tvdb.cn

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
返回顶部