数据源
LibreTV 采用空壳设计:不内置任何采集站,由部署者/用户自行添加,避免内置源失效与合规风险。
搜索用的采集源与首页的推荐源(豆瓣 / Bangumi / 影视榜单)是两套独立配置:前者决定"能搜到什么",后者决定首页展示什么,见 Recommendations。
- 部署者预置:通过
DEFAULT_SOURCES环境变量下发(JSON 数组),所有用户开箱即搜,详见配置文档; - 用户自建:设置抽屉「+ 添加 API」手动添加,保存在浏览器 localStorage。
支持的数据源类型
Apple CMS(苹果CMS)标准采集接口,即提供以下接口的资源站:
搜索:{api}?ac=videolist&wd={关键词}
详情:{api}?ac=videolist&ids={vod_id}
添加数据源
设置 → 数据源 → 「+ 添加 API」:
| 字段 | 必填 | 说明 |
|---|---|---|
| 名称 | 是 | 显示用名称 |
| API 地址 | 是 | 形如 https://example.com/api.php/provide/vod,结尾 / 会自动去除 |
| 详情页地址 | 否 | 形如 https://example.com;部分源列表接口不返回播放地址,需要爬取详情页 HTML 提取 m3u8 |
| 成人标记 | 否 | 标记后受「成人内容过滤」开关控制 |
添加后默认自动勾选参与搜索。
详情页爬取(特殊源)
当标准详情接口拿不到播放地址时,服务端自动降级:
- 请求
{detail}/index.php/vod/detail/id/{id}.html; - 通用正则提取
\$https://...m3u8; - 若无结果,尝试非凡影视特征路径模式(
/日期/哈希/index.m3u8); - 去重后作为剧集列表。
服务端聚合行为
- 所有勾选的源并行搜索,单源 8 秒超时;
- 任一源失败不影响整体,失败源在结果区顶部以名称列出;
- 结果按「源内去重(sourceKey+vodId)→ 名称排序(zh-CN)」合并;
- 成人过滤在服务端执行,关键词包括:伦理片、福利、里番动漫、无码、SWAG 等。
源可用性测试
设置 → 数据源,每个源右侧的 ⚡ 按钮触发服务端探活:
- 以搜索
test的完整往返衡量:返回响应耗时(ms)与结果条数; - 结果以徽章内联展示(
✓ 610ms绿色 /✗ 超时红色); - 探活请求与搜索一样经过 SSRF 校验,仅支持公网 http(s) 地址。
源订阅 / 分享
源列表可以脱离单台设备流转:导出为 JSON 文件 → 托管到任意公开 URL → 他人在「设置」里填入该 URL 订阅。
订阅格式(LibreTV-SourceList JSON)
{
"name": "我的源列表",
"version": 1,
"sources": [
{
"name": "暴风资源",
"url": "https://bfzyapi.com/api.php/provide/vod",
"detail": "https://bfzyapi.com",
"isAdult": false
}
]
}
字段说明:
| 字段 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
name |
顶层 | string | 否 | 列表名称,订阅后显示在订阅条目上;缺省时显示订阅地址主机名 |
version |
顶层 | number | 否 | 格式版本,当前为 1;导入端目前忽略该字段 |
sources |
顶层 | array | 是 | 源数组,最多 100 个,超出部分截断 |
sources[].name |
项 | string | 否 | 源显示名;缺省时使用 URL 主机名 |
sources[].url |
项 | string | 是 | Apple CMS 采集接口地址(公网 http/https),结尾 / 自动去除 |
sources[].detail |
项 | string | 否 | 详情页根地址,用于列表接口拿不到播放地址的源 |
sources[].isAdult |
项 | boolean | 否 | 成人内容标记,默认 false;受「成人内容过滤」开关控制 |
兼容与限制:
- 也接受裸数组格式
[{ "name": "...", "url": "..." }, ...](此时列表名显示为主机名); - 按
url去重(先到先得);非公网 http(s) 地址(内网/回环/保留地址)会被静默过滤; - 订阅由服务端拉取(拉取前经过 SSRF 校验),因此订阅地址无需配置 CORS,Gist、对象存储、任意静态托管均可。
订阅行为
- 导入:设置 → 源订阅 / 分享 → 填入订阅地址 → 「订阅」;导入的源自动勾选(成人过滤开启时跳过成人源),并在列表中带「订阅」标识;
- 手动同步:订阅条目上的 ⟳ 随时强制同步——整体替换该订阅名下的源(与订阅 URL 相同的手动源会被去重合并),成功/失败均以提示反馈;
- 订阅源的管理边界:订阅源以远端列表为准——单独编辑会在下次同步时被覆盖,单独移除会在重新同步时恢复;如需调整请修改远端列表后同步,或直接删除整个订阅;
- 删除订阅:同时移除其导入的所有源。
分享(导出)
设置 → 源订阅 / 分享 → 「导出源列表」:把当前全部来源(部署者预置 + 手动添加 + 订阅导入,按 URL 去重)导出为上述格式的 JSON 文件。托管后即可被他人订阅。
自定义源的数据流
数据源配置只保存在用户浏览器(localStorage),服务端不存储。每次搜索/详情请求会把用到的源配置随请求上传,因此:
- 同一部署的不同用户可以有不同的数据源集合;
- 分享播放链接时 URL 会携带
sourceUrl参数,接收者即使未配置同名的源也能播放(见 Player)。
常见问题
Q: 添加源后搜索无结果?
用浏览器直接访问 {api}?ac=videolist&wd=test 验证是否返回 JSON。部分源校验 Referer/UA 或已停更。
Q: 搜索成功但详情提示"未找到播放资源"? 该源的播放地址可能需要详情页爬取,请补填「详情页地址」;或该影片在源内本身无 m3u8 地址。
Q: 可以批量导入吗?
旧版支持逗号分隔的多个 API 地址一次性导入(?urls= 参数)。重构版暂未移植该入口,可通过「导出/导入配置」迁移。