第三方视频API文档
概述
本文档描述了 cik.netlify.app 后端服务提供的视频API接口。这些接口用于获取视频源、搜索视频内容和获取视频详情。
基础信息
基础URL: https://cik.netlify.app
项目中的配置地址说明
assetSite - 静态资源服务器
地址: https://web-app-center.netlify.app
主要用途:
背景图片服务: 为应用提供背景图片资源
- 普通背景图片:
/assets/background_${1-28}.jpg - 18+内容背景图片:
/assets/background_18_${1-100}.jpg
- 普通背景图片:
HLS视频流代理: 提供纯净的HLS视频流服务
- 接口路径:
/api/video/hls/pure/${token}.m3u8 - 用于处理和转换视频流格式
- 接口路径:
视频播放页面重定向: 当第三方视频源返回的视频详情中
proxy: true时,自动重定向到该域名下的播放页面
proxyUrl - 代理服务器
地址: https://deploy-3wi.pages.dev
主要用途:
跨域请求代理: 解决前端跨域访问第三方资源的问题
- 代理接口:
/api/proxy?url=${targetUrl} - 支持各种HTTP方法和头部转发
- 代理接口:
视频地址解析: 代理访问第三方视频网站进行地址解析
- 用于解析云播放地址,提取真实的视频文件URL
资源访问代理: 代理访问各种外部资源
- 图片、音频、视频等媒体文件
- 支持Range请求,用于分片下载
音乐播放代理: 为音乐播放提供代理服务
- 当音乐URL不是HTTPS或需要代理时使用
这两个地址在项目中起到了关键的基础设施作用,assetSite主要负责静态资源和视频流服务,proxyUrl主要负责代理和跨域访问功能。
API接口列表
1. 获取视频源列表
接口地址: GET https://cik.netlify.app/api/video/source
功能描述: 获取所有可用的视频源配置信息
请求参数: 无
响应格式:
{
"code": 0,
"data": [
{
"key": "z",
"name": "最大资源",
"rating": 5,
"api": "https://api.zuidazy.net/api.php/provide/vod/at/xml",
"group": "normal"
},
{
"key": "k",
"name": "快播资源",
"rating": 4.5,
"api": "https://www.kuaibozy.com/api.php/provide/vod/at/xml",
"group": "normal"
}
],
"msg": "成功"
}字段说明:
key: 视频源唯一标识符name: 视频源显示名称rating: 视频源评分 (1-5)api: 视频源的XML API地址group: 分组类型 ("normal" 或 "18+")
2. 视频搜索
接口地址: GET https://cik.netlify.app/api/video/list
功能描述: 在指定视频源中搜索视频内容
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| api | string | 是 | 视频源标识符 (从source接口获取) |
| s | string | 否 | 搜索关键词 |
| t | string | 否 | 视频类型ID (从types字段获取tid值) |
| p | string | 否 | 页码,默认1 |
t字段取值说明: t字段的值来源于任意一次list接口调用返回的types数组中的tid字段。常见的类型ID包括:
1: 电影2: 电视剧3: 综艺4: 动漫6: 动作片7: 喜剧片8: 爱情片9: 科幻片10: 恐怖片11: 剧情片13: 国产剧14: 欧美剧15: 韩剧16: 日剧- 等等...
获取完整类型列表的方法:
# 先调用list接口获取types数组
curl "https://cik.netlify.app/api/video/list?api=z"
# 从返回的data.types数组中获取所有可用的tid和tname请求示例:
GET https://cik.netlify.app/api/video/list?api=z&s=复仇者联盟&p=1响应格式:
{
"code": 0,
"data": {
"video": [
{
"id": 12345,
"name": "复仇者联盟4:终局之战",
"note": "HD高清",
"last": "2024-01-15",
"dt": "2019-04-26",
"tid": 6,
"type": "动作片"
}
],
"page": {
"page": 1,
"pagecount": 10,
"pagesize": 20,
"recordcount": 200
},
"types": [
{
"tid": "6",
"tname": "动作片"
},
{
"tid": "7",
"tname": "喜剧片"
}
],
"name": "最大资源",
"s": "复仇者联盟",
"type": null,
"prefer": false,
"searchDisable": false
},
"msg": "成功"
}字段说明:
video: 视频列表数组id: 视频唯一IDname: 视频标题note: 视频备注信息 (如清晰度)last: 最后更新时间dt: 发布时间tid: 类型IDtype: 类型名称
page: 分页信息types: 可用的视频类型列表,包含所有可用的类型ID和名称tid: 类型ID,用于t参数的取值tname: 类型名称,用于显示
name: 视频源名称prefer: 是否为优选源searchDisable: 是否禁用搜索
3. 获取视频详情
接口地址: GET https://cik.netlify.app/api/video/{api}/{id}
功能描述: 获取指定视频的详细信息和播放源
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| api | string | 视频源标识符 |
| id | string | 视频ID |
请求示例:
GET https://cik.netlify.app/api/video/z/12345响应格式:
{
"code": 0,
"data": {
"id": 12345,
"name": "复仇者联盟4:终局之战",
"subname": "Avengers: Endgame",
"note": "HD高清",
"pic": "https://example.com/poster.jpg",
"type": "动作片",
"year": "2019",
"actor": "小罗伯特·唐尼,克里斯·埃文斯",
"area": "美国",
"des": "电影描述...",
"director": "安东尼·罗素,乔·罗素",
"lang": "英语",
"last": "2024-01-15",
"state": 1,
"tid": 6,
"proxy": false,
"prefer": false,
"dataList": [
{
"name": "线路1",
"urls": [
{
"label": "HD",
"url": "https://example.com/play.html?vid=123"
}
]
}
]
},
"msg": "成功"
}字段说明:
id: 视频IDname: 视频标题subname: 副标题 (通常为英文名)pic: 封面图片URLtype: 视频类型year: 发行年份actor: 主演列表area: 制片地区des: 视频描述director: 导演lang: 语言state: 状态 (1=正常)proxy: 是否需要代理访问prefer: 是否为优选源dataList: 播放源列表name: 播放源名称urls: 播放地址列表label: 清晰度标签url: 播放页面URL (需要进一步解析)
错误处理
所有API接口使用统一的错误响应格式:
成功响应:
{
"code": 0,
"data": {...},
"msg": "成功"
}错误响应:
{
"code": -1,
"data": null,
"msg": "错误描述信息"
}常见错误码:
0: 请求成功-1: 请求失败 (通用错误)
使用说明
1. 基本使用流程
- 获取视频源: 调用
/api/video/source获取可用的视频源列表 - 搜索视频: 使用视频源的
key调用/api/video/list搜索视频 - 获取详情: 使用视频的
id和api调用/api/video/{api}/{id}获取详情 - 解析播放: 从详情中获取播放URL,需要进一步解析才能获得真实播放地址
2. 注意事项
- 所有接口都支持CORS跨域访问
- 建议添加适当的请求间隔,避免频繁请求
- 播放URL通常指向播放页面,需要额外的解析步骤才能获得真实的视频流地址
- 部分视频源可能需要代理访问 (
proxy: true) - 18+ 内容的视频源需要特殊处理
3. 请求头建议
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
Accept: application/json代码示例
JavaScript/Node.js
// 获取视频源列表
async function getVideoSources() {
const response = await fetch('https://cik.netlify.app/api/video/source');
const data = await response.json();
return data.data;
}
// 获取视频类型列表
async function getVideoTypes(api) {
const response = await fetch(`https://cik.netlify.app/api/video/list?api=${api}`);
const data = await response.json();
return data.data.types;
}
// 搜索视频
async function searchVideos(api, keyword, type = '', page = 1) {
const params = new URLSearchParams({
api: api,
s: keyword,
t: type,
p: page.toString()
});
const response = await fetch(`https://cik.netlify.app/api/video/list?${params}`);
const data = await response.json();
return data.data;
}
// 获取视频详情
async function getVideoDetail(api, id) {
const response = await fetch(`https://cik.netlify.app/api/video/${api}/${id}`);
const data = await response.json();
return data.data;
}
// 使用示例
async function example() {
// 1. 获取视频源
const sources = await getVideoSources();
console.log('可用视频源:', sources);
// 2. 获取视频类型列表
const firstSource = sources[0];
const types = await getVideoTypes(firstSource.key);
console.log('可用类型:', types);
// 3. 选择动作片类型进行搜索 (tid: "6")
const actionTypeId = types.find(t => t.tname === '动作片')?.tid || '6';
const searchResult = await searchVideos(firstSource.key, '复仇者联盟', actionTypeId);
console.log('搜索结果:', searchResult);
// 4. 获取第一个视频的详情
if (searchResult.video && searchResult.video.length > 0) {
const firstVideo = searchResult.video[0];
const detail = await getVideoDetail(firstSource.key, firstVideo.id);
console.log('视频详情:', detail);
}
}Python
import requests
def get_video_sources():
"""获取视频源列表"""
response = requests.get('https://cik.netlify.app/api/video/source')
return response.json()['data']
def get_video_types(api):
"""获取视频类型列表"""
params = {'api': api}
response = requests.get('https://cik.netlify.app/api/video/list', params=params)
return response.json()['data']['types']
def search_videos(api, keyword, type_id='', page=1):
"""搜索视频"""
params = {
'api': api,
's': keyword,
't': type_id,
'p': str(page)
}
response = requests.get('https://cik.netlify.app/api/video/list', params=params)
return response.json()['data']
def get_video_detail(api, video_id):
"""获取视频详情"""
url = f'https://cik.netlify.app/api/video/{api}/{video_id}'
response = requests.get(url)
return response.json()['data']
# 使用示例
if __name__ == '__main__':
# 1. 获取可用的视频源
sources = get_video_sources()
print('可用视频源:', sources)
# 2. 获取视频类型列表
api = sources[0]['key']
types = get_video_types(api)
print('可用类型:', types)
# 3. 选择动作片类型进行搜索
action_type = next((t for t in types if t['tname'] == '动作片'), {'tid': '6'})
results = search_videos(api, '复仇者联盟', action_type['tid'], 1)
print('搜索结果:', results)
# 4. 获取第一个视频的详情
if results.get('video') and len(results['video']) > 0:
detail = get_video_detail(api, results['video'][0]['id'])
print('视频详情:', detail)技术说明
1. 数据来源
该API服务聚合了多个视频网站的数据,包括但不限于:
- 最大资源 (zuidazy.net)
- 快播资源 (kuaibozy.com)
- 无尽资源 (wujinapi.com)
- 新浪资源 (xinlangapi.com)
- 等等...
2. 数据格式
- 所有时间字段使用
YYYY-MM-DD格式 - 评分使用 1-5 的数值范围
- 所有文本内容使用 UTF-8 编码
3. 限制说明
- 该API为第三方服务,稳定性和可用性无法保证
- 部分内容可能涉及版权问题,使用时请遵守相关法律法规
- 建议在生产环境中添加适当的缓存和错误处理机制
更新日志
- 2024-01-15: 初始版本,包含基础的视频源、搜索、详情API
视频资源 API 文档
概述
本文档描述了视频资源服务的 REST API 接口,包括资源源获取、视频搜索和视频详情查询等功能。
基础信息
- 主域名:
https://cik.netlify.app - 资源域名:
https://web-app-center.netlify.app - 代理服务:
https://deploy-3wi.pages.dev
API 接口
1. 获取视频资源源列表
获取可用的视频资源提供商列表。
端点:
GET /api/video/source响应示例:
{
"code": 0,
"data": [
{
"key": "a",
"name": "电影天堂资源",
"rating": 4.5,
"api": "https://caiji.dyttzyapi.com/api.php/provide/vod/at/xml",
"dataSource": "/data/video/dyttzyapi.json",
"searchDisable": true,
"group": "normal"
},
{
"key": "h",
"name": "华为吧",
"rating": 4.2,
"api": "https://huawei8.live/api.php/provide/vod/at/xml",
"group": "normal"
}
],
"msg": "成功"
}字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
key | string | 资源源唯一标识,用于后续查询 |
name | string | 资源源名称 |
rating | number | 资源源评分 |
api | string | 原始数据接口 |
dataSource | string | 数据源文件路径(可选) |
searchDisable | boolean | 是否禁用搜索功能 |
group | string | 资源分组 |
2. 搜索视频列表
根据关键词搜索视频内容。
端点:
GET /api/video/list查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
s | string | 是 | 搜索关键词,需要 URL 编码 |
api | string | 是 | 资源源 key,从源列表接口获取 |
请求示例:
GET /api/video/list?s=%E9%80%83%E5%AD%A6%E5%A8%81%E9%BE%99&api=a响应示例:
{
"code": 0,
"data": {
"page": {
"page": 1,
"pagecount": 1,
"pagesize": 20,
"recordcount": 5
},
"video": [
{
"last": "2025-08-28 17:27:47",
"id": 61772,
"tid": 7,
"name": "新逃学威龙:卧底高校",
"type": "喜剧片",
"dt": "dytt,dyttm3u8",
"note": "HD国语"
}
],
"types": [
{
"tid": 7,
"tname": "喜剧片"
}
],
"name": "电影天堂资源",
"s": "逃学威龙",
"type": null,
"prefer": false,
"searchDisable": true
},
"msg": "成功"
}字段说明:
分页信息 (page):
| 字段 | 类型 | 说明 |
|---|---|---|
page | number | 当前页码 |
pagecount | number | 总页数 |
pagesize | number | 每页大小 |
recordcount | number | 总记录数 |
视频信息 (video):
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 视频唯一 ID,用于查询详情 |
name | string | 视频名称 |
type | string | 视频类型 |
tid | number | 类型 ID |
last | string | 最后更新时间 |
dt | string | 数据源类型 |
note | string | 视频质量说明 |
类型筛选 (types):
| 字段 | 类型 | 说明 |
|---|---|---|
tid | number | 类型 ID |
tname | string | 类型名称 |
3. 获取视频详情
获取指定视频的详细信息,包括播放地址。
端点:
GET /api/video/{source}/{id}路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
source | string | 是 | 资源源标识,如 "a", "m1" 等 |
id | string | 是 | 视频 ID,从搜索接口获取 |
请求示例:
GET /api/video/a/13032
GET /api/video/m1/2078响应示例:
{
"code": 0,
"data": {
"last": "2025-02-26 12:19:28",
"id": 13032,
"tid": 11,
"name": "星际穿越",
"type": "剧情片",
"pic": "https://vip.dytt-img.com/upload/vod/20250226-1/684c683ce99a54b24a3dcdf57f03a590.jpg",
"subname": "星际启示录(港) / 星际效应(台) / 星际空间 / 星际之间 / 星际远航 / 星际 / Flora's Letter",
"lang": "英语",
"area": "美国",
"year": 2014,
"state": "",
"note": "HD中字|国语",
"actor": "马修·麦康纳,安妮·海瑟薇,杰西卡·查斯坦,麦肯吉·弗依,卡西·阿弗莱克,迈克尔·凯恩,马特·达蒙,提莫西·查拉梅,艾伦·伯斯汀,约翰·利思戈,韦斯·本特利,大卫·吉亚西,比尔·欧文,托弗·格雷斯,科莱特·沃夫,弗朗西斯·X.麦卡蒂,安德鲁·博尔巴,乔什·斯图沃特,莱雅·卡里恩斯,利亚姆·迪金森,杰夫·赫普内尔,伊莱耶斯·加贝尔,布鲁克·史密斯,大卫·奥伊罗,威廉姆·德瓦内,拉什·费加,格里芬·弗雷泽,弗洛拉·诺兰",
"director": "克里斯托弗·诺兰",
"des": "<p>近未来的地球黄沙遍野...</p>",
"dataList": [
{
"name": "dyttm3u8",
"urls": [
{
"label": "HD中字",
"url": "https://vip.dytt-film.com/20250216/7088_504b7f66/index.m3u8"
}
]
}
],
"prefer": false,
"proxy": false
},
"msg": "成功"
}字段说明:
基础信息:
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 视频 ID |
name | string | 视频名称 |
type | string | 视频类型 |
pic | string | 封面图片地址 |
subname | string | 副标题/别名 |
lang | string | 语言 |
area | string | 地区 |
year | number | 年份 |
actor | string | 演员列表 |
director | string | 导演 |
des | string | 描述信息(HTML 格式) |
note | string | 视频质量说明 |
播放源信息 (dataList):
| 字段 | 类型 | 说明 |
|---|---|---|
name | string | 播放源名称 |
urls | array | 播放地址列表 |
播放地址 (urls):
| 字段 | 类型 | 说明 |
|---|---|---|
label | string | 视频质量标签 |
url | string | 播放地址 |
工具函数
图片代理
GET /api/proxy?url={图片URL}示例:
https://deploy-3wi.pages.dev/api/proxy?url=https://vip.dytt-img.com/upload/vod/20250828-1/13bdd1b35e248048918fc5c15f9c10dd.jpgHLS 流处理
pureHlsUrl(url): 获取纯净 HLS 流地址proxyHlsUrl(url): 获取代理 HLS 流地址
Base64 编解码
Base64Params.create(text): 编码文本为 Base64Base64Params.parse(text): 解码 Base64 文本
响应状态码
| 代码 | 说明 |
|---|---|
| 0 | 成功 |
| 其他 | 错误 |
注意事项
- 所有搜索关键词需要进行 URL 编码
- 图片地址可能需要通过代理服务访问
- 视频播放地址可能需要进行 HLS 处理
- 不同资源源的可用性和内容可能有所不同
- 某些资源源可能禁用搜索功能(
searchDisable: true)
source
https://cik.netlify.app/api/video/source
{
"code": 0,
"data": [
{
"key": "a",
"name": "电影天堂资源",
"rating": 4.5,
"api": "https://caiji.dyttzyapi.com/api.php/provide/vod/at/xml",
"dataSource": "/data/video/dyttzyapi.json",
"searchDisable": true,
"group": "normal"
},
{
"key": "h",
"name": "华为吧",
"rating": 4.2,
"api": "https://huawei8.live/api.php/provide/vod/at/xml",
"group": "normal"
}
],
"msg": "成功"
}列表
https://cik.netlify.app/api/video/list?s={搜索内容}&api={key}
https://cik.netlify.app/api/video/list?s=逃学威龙&api=a
{
"code": 0,
"data": {
"page": {
"page": 1,
"pagecount": 1,
"pagesize": 20,
"recordcount": 5
},
"video": [
{
"last": "2025-08-28 17:27:47",
"id": 61772,
"tid": 7,
"name": "新逃学威龙:卧底高校",
"type": "喜剧片",
"dt": "dytt,dyttm3u8",
"note": "HD国语"
},
{
"last": "2025-03-19 10:19:33",
"id": 22373,
"tid": 7,
"name": "逃学威龙3之龙过鸡年",
"type": "喜剧片",
"dt": "dytt,dyttm3u8",
"note": "HD国语"
},
{
"last": "2025-03-19 10:18:44",
"id": 22371,
"tid": 7,
"name": "逃学威龙2",
"type": "喜剧片",
"dt": "dytt,dyttm3u8",
"note": "HD国语|粤语"
},
{
"last": "2025-03-19 10:16:31",
"id": 22369,
"tid": 7,
"name": "逃学威龙",
"type": "喜剧片",
"dt": "dytt,dyttm3u8",
"note": "HD国语|粤语"
},
{
"last": "2025-01-26 12:32:15",
"id": 1199,
"tid": 7,
"name": "新逃学威龙",
"type": "喜剧片",
"dt": "dytt,dyttm3u8",
"note": "HD国语"
}
],
"types": [
{
"tid": 7,
"tname": "喜剧片"
}
],
"name": "电影天堂资源",
"s": "逃学威龙",
"type": null,
"prefer": false,
"searchDisable": true
},
"msg": "成功"
}详情
https://cik.netlify.app/api/video/a/13032https://cik.netlify.app/api/video/m1/2078
{
"code": 0,
"data": {
"last": "2025-02-26 12:19:28",
"id": 13032,
"tid": 11,
"name": "星际穿越",
"type": "剧情片",
"pic": "https://vip.dytt-img.com/upload/vod/20250226-1/684c683ce99a54b24a3dcdf57f03a590.jpg",
"subname": "星际启示录(港) / 星际效应(台) / 星际空间 / 星际之间 / 星际远航 / 星际 / Flora's Letter",
"lang": "英语",
"area": "美国",
"year": 2014,
"state": "",
"note": "HD中字|国语",
"actor": "马修·麦康纳,安妮·海瑟薇,杰西卡·查斯坦,麦肯吉·弗依,卡西·阿弗莱克,迈克尔·凯恩,马特·达蒙,提莫西·查拉梅,艾伦·伯斯汀,约翰·利思戈,韦斯·本特利,大卫·吉亚西,比尔·欧文,托弗·格雷斯,科莱特·沃夫,弗朗西斯·X.麦卡蒂,安德鲁·博尔巴,乔什·斯图沃特,莱雅·卡里恩斯,利亚姆·迪金森,杰夫·赫普内尔,伊莱耶斯·加贝尔,布鲁克·史密斯,大卫·奥伊罗,威廉姆·德瓦内,拉什·费加,格里芬·弗雷泽,弗洛拉·诺兰",
"director": "克里斯托弗·诺兰",
"des": "<p> 近未来的地球黄沙遍野,小麦、秋葵等基础农作物相继因枯萎病灭绝,人类不再像从前那样仰望星空,放纵想象力和灵感的迸发,而是每日在沙尘暴的肆虐下倒数着所剩不多的光景。在家务农的前NASA宇航员库珀(马修·麦康纳 Matthew McConaughey 饰)接连在女儿墨菲(麦肯吉·弗依 Mackenzie Foy 饰)的书房发现奇怪的重力场现象,随即得知在某个未知区域内前NASA成员仍秘密进行一个拯救人类的计划。多年以前土星附近出现神秘虫洞,NASA借机将数名宇航员派遣到遥远的星系寻找适合居住的星球。在布兰德教授(迈克尔·凯恩 Michael Caine 饰)的劝说下,库珀忍痛告别了女儿,和其他三名专家教授女儿艾米莉亚·布兰德(安妮·海瑟薇 Anne Hathaway 饰)、罗米利(大卫·吉雅西 David Gyasi 饰)、多伊尔(韦斯·本特利 Wes Bentley 饰)搭乘宇宙飞船前往目前已知的最有希望的三颗星球考察。<br/> 他们穿越遥远的星系银河,感受了一小时七年光阴的沧海桑田,窥见了未知星球和黑洞的壮伟与神秘。在浩瀚宇宙的绝望而孤独角落,总有一份超越了时空的笃定情怀将他们紧紧相连……</p>",
"dataList": [
{
"name": "dyttm3u8",
"urls": [
{
"label": "HD中字",
"url": "https://vip.dytt-film.com/20250216/7088_504b7f66/index.m3u8"
},
{
"label": "HD国语",
"url": "https://vip.dytt-film.com/20250216/7087_5c2631d5/index.m3u8"
}
]
},
{
"name": "dytt",
"urls": [
{
"label": "HD中字",
"url": "https://vip.dytt-film.com/share/504b7f668328dab60570f03ecfe47918"
},
{
"label": "HD国语",
"url": "https://vip.dytt-film.com/share/5c2631d54272554b181cf21ad2171fa3"
}
]
}
],
"prefer": false,
"proxy": false
},
"msg": "成功"
}
export abstract class Api {
public static site = 'http://cik.netlify.app'
public static assetSite = 'https://web-app-center.netlify.app'
public static proxyUrl = 'https://deploy-3wi.pages.dev'
public static posterServer = process.env.POSTER_SERVER || ''
}
export function encode(text: string) {
if (bufferSupported()) {
return Buffer.from(text).toString('base64')
}
try {
return btoa(text)
}
catch (err) {
const encoded = encodeURIComponent(text)
return btoa(encoded)
}
}
export function decode(text: string) {
if (bufferSupported()) {
return Buffer.from(text, 'base64').toString()
}
return atob(text)
}
export abstract class Base64Params {
public static parse(text: string): string | null {
try {
return decode(text + '='.repeat(4 - text.length % 4))
}
catch (err) {
return null
}
}
public static create(text: string): string {
return encode(text).replace(/\={1,2}$/, '')
}
}
export function pureHlsUrl(url: string) {
const token = Base64Params.create(url)
return `${Api.assetSite}/api/video/hls/pure/${token}.m3u8`
}
export function proxyHlsUrl(url: string) {
return parseTokenUrl(
url,
clue => `${assetApiPrefix}/proxy/${clue}.m3u8`
)
}
https://deploy-3wi.pages.dev/api/proxy?url=https://vip.dytt-img.com/upload/vod/20250828-1/13bdd1b35e248048918fc5c15f9c10dd.jpg
https://web-app-center.netlify.app/api/proxy?url=https://vip.dytt-img.com/upload/vod/20250828-1/13bdd1b35e248048918fc5c15f9c10dd.jpg