Skip to content

Repository files navigation

Yangshipin Android Stream Resolver

一个轻量的局域网 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、登录状态、播放地址缓存或任何媒体文件。

1. 启动 Android 容器

仓库提供了 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:5555

2. 安装解析服务

sudo 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

3. 使用

  • 订阅: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 -v

License

MIT

About

A lightweight LAN M3U resolver backed by an official Yangshipin Android client in Redroid.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages