一个轻量的局域网 IPTV 解析服务。它驱动已安装央视频官方客户端的 Android 容器自动切台,从容器网络流量中识别播放列表,并向播放器提供稳定的本地 M3U 地址。
服务只发布官方目录中标记为非会员的频道,默认分为“央视”和“地方卫视”两个分组。
- 自动读取央视频官方频道目录,无需维护静态频道表
- 通过频道 PID 自动切换 Android 客户端
- 串行抓取、并发播放,避免多个请求互相切台
- 缓存临时播放地址并在过期时重新解析
- 输出稳定的
tv.m3u和单频道 M3U8 地址 - 自动把相对分片地址改写为绝对 CDN 地址
- 可按频道 ID 隐藏地区受限或不可用频道
- 仅依赖 Python 标准库、Docker 和 tcpdump
- Linux 主机,Python 3.8 或更高版本
- Docker、tcpdump 和 systemd
- 一个兼容宿主机架构和内核的 Redroid 容器
- 容器中已安装央视频官方 Android 客户端
- 如需账号权限,需自行在官方客户端中完成登录
- 宿主机能够观察 Android 容器的网络流量
本项目不包含 APK、账号、Cookie、登录状态、播放地址缓存或任何媒体文件。
仓库提供了 compose.yaml 示例。根据宿主机架构选择合适的 Redroid 镜像:
REDROID_IMAGE=your-compatible-redroid-image docker compose up -d宿主机必须具有可用的 Binder 设备。不同发行版和内核的 Binder 配置方式不同,请参考 Redroid 文档。
安装从官方渠道获取的 APK:
adb connect localhost:5555
adb install /path/to/official-app.apk可以使用 scrcpy 打开 Android 界面并完成登录:
scrcpy -s localhost:5555sudo install -d -m 0755 /opt/ysp-android-resolver
sudo install -m 0755 service.py /opt/ysp-android-resolver/service.py
sudo install -m 0644 ysp-android-resolver.service /etc/systemd/system/ysp-android-resolver.service
sudo install -m 0644 ysp-android-resolver.env.example /etc/default/ysp-android-resolver
sudo systemctl daemon-reload
sudo systemctl enable --now ysp-android-resolver.service查看状态:
systemctl status ysp-android-resolver.service
journalctl -u ysp-android-resolver.service -f- 订阅:
http://server-name:35457/tv.m3u - 健康检查:
http://server-name:35457/healthz - 频道状态:
http://server-name:35457/api/status - 全量预热:
http://server-name:35457/api/refresh-all - 单台刷新:
http://server-name:35457/api/refresh/cctv1 - 单台播放:
http://server-name:35457/live/cctv1.m3u8
第一次访问尚未缓存的频道时,服务会切换 Android 客户端并等待播放列表,通常需要数秒。建议部署后调用一次全量预热接口。
通过 /etc/default/ysp-android-resolver 设置环境变量:
| 变量 | 默认值 | 说明 |
|---|---|---|
REDROID_CONTAINER |
redroid-ysp |
Android 容器名称 |
APP_PACKAGE |
官方客户端包名 | Android 应用包名 |
BIND_HOST |
0.0.0.0 |
HTTP 服务监听地址 |
PORT |
35457 |
HTTP 服务端口 |
PUBLIC_BASE_URL |
空 | 反向代理后的公开基础地址 |
STATE_DIR |
/var/lib/ysp-android-resolver |
运行状态和频道目录缓存 |
URL_TTL_SECONDS |
600 |
播放地址主动刷新时间 |
CAPTURE_TIMEOUT |
15 |
单频道抓取超时秒数 |
BATCH_DELAY |
1 |
批量切台间隔秒数 |
BATCH_ON_START |
0 |
启动时是否全量预热 |
M3U_EXCLUDE_IDS |
空 | 从订阅隐藏的频道 ID,逗号分隔 |
TV_SHARE_VAPPID |
官方公开参数 | 官方 Web 接口的当前应用 ID |
TV_SHARE_VSECRET |
空 | 官方 Web 接口的当前公开参数,必须在本机配置 |
TV_SHARE_VSECRET 不写入仓库。请从当前官方 Web 客户端配置中取得,并只保存在 /etc/default/ysp-android-resolver。官方更新参数后可以直接替换环境变量,无需修改程序。
- 服务需要 root 权限调用 tcpdump 和 Docker,请只在可信主机上运行。
- HTTP API 没有内置认证。请限制在可信网络,或通过带认证的反向代理发布。
- 不要提交
STATE_DIR;其中包含临时播放地址和 Android 解析状态。 - 不要提交本机环境文件或官方接口参数;
.gitignore已排除.env。 - 地区限制、节目版权和账号权限仍由官方平台决定。本项目不会绕过这些限制。
- 如果官方客户端改用 HTTPS、证书固定或修改深链格式,解析逻辑可能需要更新。
本项目仅用于学习、研究和个人设备互操作。使用者应遵守所在地区法律、平台服务条款和内容版权要求,不得用它重新分发或商业化未经授权的内容。
python3 -m unittest discover -s tests -vMIT