LLVIP API

腾讯视频数据接口 · 完整版在线播放 · 选集解析 · 免费无鉴权

快速开始

所有接口 免鉴权、无配额限制,直接 GET 调用即可。最常用的三件事:

# 1. 解析一集(元数据 + 官方试看直链)
curl "https://llvipapi.pages.dev/api/parse?url=https://v.qq.com/x/cover/mzc00200803dr6b/c4102g9a01t.html"

# 2. 拿一部剧的全部选集
curl "https://llvipapi.pages.dev/api/episodes?url=https://v.qq.com/x/cover/mzc00200803dr6b/c4102g9a01t.html"

# 3. 在线播放完整版(免费/限免内容,浏览器打开)
https://llvipapi.pages.dev/player.html
播放完整版的说明:本站播放器在访客浏览器内生成腾讯播放器同款签名(cKey),因此免费/限免剧集直接播出完整版;VIP 剧集仅能播出官方试看段(付费墙边界,需会员账号才能解锁完整版,本站不做绕过)。

接口详情

GET /api/resolve

一站式解析 ⭐推荐接入 — 传一个链接或 cid,直接返回全剧所有集数的直链 JSON(自动选集 + 分组发现 + 批量签名 + H.264)。免费/限免剧集 access=free_full 完整版;VIP 剧集返回官方试看段。

参数位置必填说明
url / cidquery二选一该剧任意页面链接(单集页/封面页)或剧集 ID
kindquery✗zhengpian(默认,仅正片)| all(含预告/彩蛋/采访)
beginquery✗从第几集开始(默认 1,配合 next_begin 分页)
countquery✗单次最多返回集数(默认 40,上限 45)

响应示例

{
 "code": 0,
 "title": "兰香如故",
 "episode_all": "全47集",
 "total_items": 91, "zhengpian": 38,
 "count": 38, "next_begin": null,
 "episodes": [
  {"n": 1, "vid": "c4102g9a01t", "title": "不争宠只争命!…",
   "duration_sec": 2812, "kind": "正片",
   "access": "free_full", "full": true,
   "link": "https://....ts.m3u8?ver=4"},
  {"n": 7, ..., "access": "preview_300s", "full": false, ...}
 ]
}
# 全剧直链
curl "https://llvipapi.pages.dev/api/resolve?cid=mzc00200803dr6b"

# 分页拿 31 集之后
curl "https://llvipapi.pages.dev/api/resolve?cid=mzc00200803dr6b&begin=31"
<?php
$cid = "mzc00200803dr6b";
$data = json_decode(file_get_contents(
    "https://llvipapi.pages.dev/api/resolve?cid=" . $cid), true);

foreach ($data["episodes"] as $ep) {
    if ($ep["full"]) {
        echo $ep["n"] . ". " . $ep["link"] . PHP_EOL;
    }
}
const data = await fetch(
  'https://llvipapi.pages.dev/api/resolve?cid=mzc00200803dr6b'
).then(r => r.json());

// 直接喂给 hls.js 播放(跨域经 /api/hls)
const ep1 = data.episodes[0];
new Hls().loadSource(
  'https://llvipapi.pages.dev/api/hls?url=' + encodeURIComponent(ep1.link)
);
import requests

r = requests.get("https://llvipapi.pages.dev/api/resolve",
                 params={"cid": "mzc00200803dr6b"}, timeout=60).json()
for ep in r["episodes"]:
    print(ep["n"], ep["access"], (ep["link"] or "")[:60])
耗时与限额:全量解析约 4~10 秒(38 集)——响应结果请缓存复用(vkey 时效 1~2 小时)。单请求最多解析 45 集,超过用 begin 分页。
GET /api/parse

解析播放页 — 从腾讯视频播放页链接中提取 cid/vid,返回该集元数据(时长、大小、分辨率、清晰度列表)与官方匿名试看 MP4 直链。

参数位置必填说明
urlquery✓播放页链接。支持 /x/cover/{cid}/{vid}.html 与 /x/page/{vid}.html 两种格式

响应字段

字段类型说明
codeint0 成功;-1 参数错误;-2 上游失败
cid / vidstring剧集 ID / 单集 ID
duration_sec / duration_minnumber时长(秒 / 分钟)
size_mbnumber文件大小(MB)
resolutionstring分辨率,如 864x486
formats[]array全部清晰度档位(id/name/cname/resolution)
accessstringfree_full=匿名可看完整版;preview_Ns=仅 N 秒试看
links[]string[]MP4 直链(含 vkey,时效 1~2 小时;已按可达性排序,域名节点优先)
curl "https://llvipapi.pages.dev/api/parse?url=https%3A%2F%2Fv.qq.com%2Fx%2Fcover%2Fmzc00200803dr6b%2Fc4102g9a01t.html"
const url = 'https://v.qq.com/x/cover/mzc00200803dr6b/c4102g9a01t.html';
const res = await fetch(`https://llvipapi.pages.dev/api/parse?url=${encodeURIComponent(url)}`);
const data = await res.json();
if (data.code === 0) {
  console.log(data.access, data.duration_min + '分钟', data.resolution);
  console.log('试看直链:', data.links[0]);
}
import requests

url = "https://v.qq.com/x/cover/mzc00200803dr6b/c4102g9a01t.html"
r = requests.get("https://llvipapi.pages.dev/api/parse",
                 params={"url": url}, timeout=15).json()
if r["code"] == 0:
    print(r["access"], r["duration_min"], "分钟")
    print("试看直链:", r["links"][0])
GET /api/preview

按 vid 解析 — 与 parse 等价,但直接接受 11 位 vid(免传完整链接)。适合已有 vid 列表的场景(如配合 /api/episodes)。

参数位置必填说明
vidquery✓11 位字母数字视频 ID,如 c4102g9a01t

响应示例

{
 "code": 0,
 "vid": "c4102g9a01t",
 "cid": "mzc00200803dr6b",
 "duration_sec": 2812.57,
 "size_mb": 147.2,
 "resolution": "864x486",
 "access": "preview_180s",   // free_full=完整版 | preview_Ns=试看N秒
 "mp4": ["http://.../xxx.f2.mp4?vkey=..."]   // 多CDN节点,按可达性排序
}
直链中的 vkey 有效期约 1~2 小时,过期返回 403,请重新请求本接口获取新链接。
GET /api/episodes

全量选集 — 传该剧任意页面(单集页或封面页)或 cid,返回全部选集(正片 + 预告 + 彩蛋 + 采访,自动分类)。服务端自动发现分页分组,无 30 集上限。

参数位置必填说明
urlquery二选一该剧任意页面链接(单集页/封面页均可)
cidquery二选一剧集 ID(如 mzc00200803dr6b)

响应字段

字段类型说明
titlestring剧名
episode_allstring总集数描述,如 全47集
updated_tostring更新进度描述(可能为空)
totalint选集总条数(含预告/彩蛋等)
episodes[].vidstring单集 ID(配合 /api/preview 或播放器使用)
episodes[].nint集号(正片的权威集号;预告/彩蛋为分类序号)
episodes[].label / titlestring集号标签 / 单集标题
episodes[].duration_secint时长(秒)
episodes[].kindstring正片 或 短片(预告/彩蛋/采访)

响应示例

{
 "code": 0,
 "title": "兰香如故",
 "episode_all": "全47集",
 "total": 91,
 "episodes": [
   {"vid": "c4102g9a01t", "n": 1, "label": "1", "duration_sec": 2812, "kind": "正片", "title": "不争宠只争命!…"},
   ...
 ]
}
curl "https://llvipapi.pages.dev/api/episodes?url=https://v.qq.com/x/cover/mzc00200803dr6b/c4102g9a01t.html"
const cid = 'mzc00200803dr6b';
const { episodes } = await
  fetch(`https://llvipapi.pages.dev/api/episodes?cid=${cid}`).then(r => r.json());

const zhengpian = episodes.filter(e => e.kind === '正片');
console.log(zhengpian.map(e => `${e.n}. ${e.title} (${e.vid})`));
import requests

BASE = "https://llvipapi.pages.dev"
eps = requests.get(f"{BASE}/api/episodes",
                   params={"cid": "mzc00200803dr6b"}, timeout=30).json()["episodes"]

# 批量解析全部限免正片
for e in eps:
    if e["kind"] == "正片" and e["n"] <= 6:
        p = requests.get(f"{BASE}/api/preview", params={"vid": e["vid"]}).json()
        print(e["n"], p["access"], p["mp4"][0][:60])
GET /api/link

视频直链(完整版)⭐ — 服务端直接返回全片 HLS 直链,无需浏览器参与。免费/限免剧集返回 free_full 完整版;VIP 剧集返回官方试看段。默认输出 H.264 编码(浏览器/播放器/ffmpeg 通吃)。

参数位置必填说明
vidquery二选一11 位单集 ID
urlquery二选一单集播放页链接(自动提取 vid/cid)
cidquery建议剧集 ID(提升解析稳定性)
guidquery✗自定义 16 位设备标识(一般不用传)

响应示例

{
 "code": 0,
 "vid": "n4102j3cnuw",
 "cid": "mzc00200803dr6b",
 "title": "兰香如故_02",
 "duration_sec": 2809.28,
 "resolution": "864x486",
 "codec": "H.264",
 "access": "free_full",       // free_full=完整版 | preview_Ns=试看N秒(VIP)
 "links": ["https://....v.smtcdns.com/moviets.tc.qq.com/....ts.m3u8?ver=4"]
}
curl "https://llvipapi.pages.dev/api/link?vid=n4102j3cnuw&cid=mzc00200803dr6b"

# 用 ffmpeg 直接合成完整版 MP4(免费/限免集)
LINK=$(curl -s "https://llvipapi.pages.dev/api/link?vid=n4102j3cnuw" | grep -o '"links":\["[^"]*' | cut -d'"' -f4)
ffmpeg -i "$LINK" -c copy 第2集.mp4
// 拿直链后用 hls.js 播放(跨域需经 /api/hls 代理)
const { links, access } = await
  fetch('https://llvipapi.pages.dev/api/link?vid=n4102j3cnuw').then(r => r.json());

const hls = new Hls();
hls.loadSource('https://llvipapi.pages.dev/api/hls?url=' + encodeURIComponent(links[0]));
hls.attachMedia(videoEl);
import requests, subprocess

r = requests.get("https://llvipapi.pages.dev/api/link",
                 params={"vid": "n4102j3cnuw", "cid": "mzc00200803dr6b"}).json()
print(r["title"], r["access"])
if r["access"] == "free_full":
    subprocess.run(["ffmpeg", "-i", r["links"][0], "-c", "copy", "第2集.mp4"])
边界:VIP 内容返回的是官方试看段(无会员签名解不出完整版);access 字段会如实标注。直链时效 1~2 小时。
POST /api/links

批量直链 — 一次请求解析多集直链(≤50个 vid),单隔离实例内 6 路并发。配合 /api/episodes 使用:先拿选集列表,再批量校验全部正片。每项含 ti(权威集号标题,如 兰香如故_31)与 n(解析出的集号)。

字段类型必填说明
vidsstring[]✓11 位 vid 数组,≤50 个
cidstring建议剧集 ID
guidstring✗自定义 16 位设备标识

响应示例

{
 "code": 0, "count": 3,
 "results": [
  {"vid": "c4102g9a01t", "ti": "兰香如故_01", "n": 1,
   "duration_sec": 2812.57, "access": "free_full", "full": true,
   "link": "https://....ts.m3u8?ver=4"},
  {"vid": "z4102yxlwzv", "n": 7, "access": "preview_300s", "full": false, ...}
 ]
}
单请求 ≤50 个 vid(Worker 子请求上限);更多请分批调用。
POST /api/vinfo

签名播放信息代理 — 转发浏览器内生成的 cKey 签名请求到腾讯 vd6.l.qq.com/proxyhttp,返回含全片 HLS 直链的播放信息。这是本站播放器实现"免费内容播完整版"的核心。

字段类型必填说明
buidstring✓onlyvinfo(只要播放信息)
vinfoparamstring✓签名参数串(含 cKey),由页面内 TVK 内核生成,长度 ≤6000

响应为腾讯原始 JSON,关键字段:外层 vinfo(字符串,需二次 JSON.parse)→ vl.vi[0].ul.ui[].url(分片直链)+ preview(可看时长)+ vl.vi[0].ti(权威集号标题,如 兰香如故_31)。

cKey 如何生成?本站自托管了腾讯公开播放器内核 tvk.js(含一处闭包泄漏补丁),页面 JS 调用 SuperPlayerExport.__leak.tv({vid, appVer, guid, platform}) 即得 8.5 版 cKey(纯 JS AES,服务端兼容)。该步骤必须在浏览器执行,无法在服务端完成。
GET /api/hls

流媒体跨域代理 — 解决腾讯 CDN 无 CORS 头、混合内容限制、部分 IP 节点不可达三类问题。m3u8 播放列表会自动重写所有分片/子列表地址为本代理地址;ts/mp4 透传并支持 Range(拖动进度条)。

参数位置必填说明
urlquery✓腾讯系 CDN 的 m3u8 / ts / mp4 直链(域名白名单:*.tc.qq.com / *.smtcdns.com / *.gtimg.com / *.qq.com / *.qpic.cn,含 IP 直连形式)
# 播放列表(已被重写为代理地址)
curl "https://llvipapi.pages.dev/api/hls?url=%3Cm3u8%E5%9C%B0%E5%9D%80%3E"

# 也可直接喂给播放器/ffmpeg
ffmpeg -i "https://llvipapi.pages.dev/api/hls?url=%3Cm3u8%E5%9C%B0%E5%9D%80%3E" -c copy out.mp4
白名单外域名返回 403(防滥用);上游 403/410 时返回可读错误(通常是 vkey 过期)。

错误码

code / 状态含义处理
0成功—
-1 / 400参数缺失或格式错误检查 url/vid
-2 / 502上游请求失败重试;持续失败多为腾讯接口变更
-3 / 403/api/hls 目标域名不在白名单仅支持腾讯系 CDN
-4 / 403直链过期(vkey 失效)重新获取直链
1选集数据为空剧可能刚上架或已下架

完整场景示例

场景:做一个"贴链接就能看"的网页

直接调用 /api/link 即可,一个请求拿全片直链:

// ① 拿直链
const { links } = await fetch('https://llvipapi.pages.dev/api/link?url=' + userInput).then(r => r.json());

// ② 引入 hls.js 播放(跨域经 /api/hls 代理)
const hls = new Hls();
hls.loadSource('https://llvipapi.pages.dev/api/hls?url=' + encodeURIComponent(links[0]));
hls.attachMedia(document.querySelector('video'));
最省事的方式:直接用 本站播放器,或 <iframe src="https://llvipapi.pages.dev/player.html#url=<腾讯链接>"> 嵌入。

场景:批量下载一部剧的限免集

# 1) 拿选集列表
curl -s "https://llvipapi.pages.dev/api/episodes?cid=mzc00200803dr6b" > eps.json
# 2) 对每集调 /api/preview 拿直链(或用油猴脚本抓完整版直链)
# 3) 逐集下载
ffmpeg -i "直链" -c copy 第1集.mp4

在线测试


  

限制与声明