TXT(#genre#)· M3U / M3U8 · JSON 直播格式 · EPG 节目单 · 多线路 · DRM 加密 · 最佳实践
sites[] 字段详解 · type 类型 · Vod 对象格式 · 播放信息 · Filter 筛选系统 · parses[] 解析器 · 全局网络字段
JAR(Java/Kotlin) · JS(QuickJS) · Python(Chaquopy) · 全方法接口参考 · req / pd / pdfh 工具函数 · 调试技巧
项目概览与架构
FongMi/TV 是一个面向 Android TV 与手机的开源影视 + 直播平台。它本身不内置任何资源,所有内容来自外部「接口」(配置文件 JSON)。直播功能由 ExoPlayer(Media3) + FFmpeg 软解 驱动,支持自动硬解 → 软解降级;点播功能由动态加载的 Spider 驱动,支持 JAR / JS / Python 三种运行时。
技术栈一览
| 模块 | 技术 | 说明 |
|---|---|---|
| 播放器 | ExoPlayer (Media3) | 硬解 / 软解自动切换 |
| 软解 | FFmpeg | 处理特殊编码流(HEVC / AV1 等) |
| DRM | Widevine / PlayReady / ClearKey | 支持 #KODIPROP 声明与 JSON drm 字段 |
| EPG | XMLTV (.xml / .gz) | 每 6 小时自动刷新,tvg-id 精确匹配 |
| 本地服务 | NanoHTTPD | 端口 9978–9998,供 Spider proxy() 使用 |
| JAR Spider | Android DexClassLoader | 动态加载 classes.dex,运行 Java/Kotlin Spider |
| JS Spider | QuickJS(ES2020+) | 内置 req / pd / pdfh / CryptoJS / cheerio |
| Python Spider | Chaquopy (Python 3) | 支持 requests / BeautifulSoup / lxml |
配置文件加载流程
-
1加载主配置 JSON从用户填写的 URL 拉取 config.json(或 depot.json)。Depot 模式可聚合多个子配置。
-
2解析 sites[] + lives[]点播站点写入 sites[],直播源写入 lives[]。两者可以共存。
-
3下载并缓存 SpiderApp 按需下载顶层 spider(JAR/JS/PY),及各站点独立的 jar 文件,缓存在本地。
-
4实例化 Spider 并调用接口方法用户访问站点首页 →
homeContent();点击分类 →categoryContent();点击视频 →detailContent()+playerContent()。
主配置文件骨架
无论是直播还是点播,入口都是唯一一个主配置 JSON 文件。以下是包含所有顶层字段的最小可用骨架:
{
// ── 全局 Spider 包(所有 type=3/1/2 站点默认使用)
"spider": "https://cdn.example.com/spider.jar",
// ── 点播站点列表 → 详见"点播配置"页
"sites": [
{
"key": "demo", "name": "演示站",
"type": 3, "api": "csp_Demo"
}
],
// ── 直播源列表 → 详见"直播配置"页
"lives": [
{
"name": "默认直播",
"url": "https://cdn.example.com/live.m3u",
"epg": "https://epg.example.com/e.xml"
}
],
// ── 解析器列表 → 详见"点播配置"页 parses[] 章节
"parses": [
{ "name": "通用解析", "type": 1, "url": "https://jx.example.com/?url=" }
],
// ── 触发解析器的 URL 关键词
"flags": ["youku.com", "iqiyi.com", "bilibili.com"],
// ── 广告 URL 黑名单关键词
"ads": ["ad.example.com"],
// ── URL 重写规则
"rules": [{ "regex": "\\bhttp://", "replace": "https://" }],
// ── 全局 EPG
"epg": "https://epg.example.com/all.xml",
// ── 壁纸 / 公告
"wallpaper": "https://cdn.example.com/bg.jpg",
"notice": "2026-01-01 更新"
}
"urls":[{name,url}...]
),App 会让用户从中选择,或聚合多个子配置——这是"壳"的常用分发方式。