sharoon7171/streamtape-direct-resolver
GitHub: sharoon7171/streamtape-direct-resolver
一个 Node.js 编写的 Streamtape 视频直链解析器,通过重放前端混淆逻辑和跟随网关重定向,将文件 ID 或页面 URL 转换为可直接播放的 tapecontent.net MP4 地址。
Stars: 0 | Forks: 0
# Streamtape 直链解析器
将 Streamtape **文件 ID 或 URL** 解析为直接的 `tapecontent.net` MP4 链接。一个小型 Node 服务器执行解析;内置的 UI 在浏览器中解析并播放流。
**输入示例:** `LQYwpG81BwiRGOv` 或 `https://streamtape.to/v/LQYwpG81BwiRGOv`
## 架构
```
flowchart TB
subgraph client ["Browser"]
UI["public/app.js"]
VID["<video>"]
end
subgraph server ["Node server :8790"]
IDX["src/server/index.js"]
API["POST /api/resolve"]
RES["src/streamtape/resolve.js"]
end
subgraph upstream ["Upstream"]
PAGE["streamtape.to/v/{id}"]
GATE["streamtape.to/get_video?…"]
CDN["*.tapecontent.net"]
end
UI -->|videoId| API
API --> RES
RES -->|GET| PAGE
PAGE -->|HTML + obfuscated JS| RES
RES -->|GET + Referer| GATE
GATE -->|302 Location| RES
RES -->|Range probe| CDN
RES -->|directLink + title| API
API --> UI
UI -->|directLink| VID
VID -->|GET| CDN
```
| 层级 | 主机 | 角色 |
|---|---|---|
| 视频页面 | `streamtape.to/v/{id}` | 在混淆的内联 JavaScript 中提供已签名的 `get_video` 参数 |
| 验证网关 | `streamtape.to/get_video` | 验证 token;以 **302** 响应重定向至 CDN |
| CDN | `*.tapecontent.net` | 交付 MP4 (`Access-Control-Allow-Origin: *`) |
## 解析原理
Streamtape 不会将 CDN URL 嵌入页面中。视频页面包含诱饵链接,并在运行时通过 `substring` 混淆来构建真实的 `get_video` 路径。解析器会重放那段客户端逻辑,然后跟随网关重定向。
```
sequenceDiagram
participant API as /api/resolve
participant Res as resolve.js
participant Page as streamtape.to
participant Gate as get_video
participant CDN as tapecontent.net
API->>Res: resolve(videoId)
Res->>Page: GET /v/{id}
Page-->>Res: HTML
Res->>Res: eval innerHTML assignments → get_video path
Res->>Gate: GET …&stream=1, Referer /v/{id}
Gate-->>Res: 302 Location
Res->>CDN: Range bytes=0-15
CDN-->>Res: 206 + ftyp
Res-->>API: { videoId, title, directLink }
```
1. **获取视频页面** — `GET https://streamtape.to/v/{id}`。
2. **解码混淆** — 定位 `document.getElementById(…).innerHTML` 代码块,在隔离的 `document` mock 中执行它,并读取在播放器脚本中与 `&stream=1` 绑定的元素。
3. **跟随网关** — 使用 `redirect: manual` 并将 `Referer` 设置为视频页面来请求解码后的 `get_video` URL。预期响应 **302**;读取 `Location`。
4. **探测 CDN** — `Range: bytes=0-15` 必须返回带有 MP4 `ftyp` atom 的 **206** 响应。主机名必须以 `tapecontent.net` 结尾。
`expires`、`ip` 和 `token` 由服务器端针对每个请求签发。链接过期时需重新解析。
## 播放原理
没有使用代理。CDN 允许跨域访问 (`Access-Control-Allow-Origin: *`),因此 UI 将直链分配给 `
标签:API, BeEF, GNU通用公共许可证, MITM代理, Node.js, Web服务, 数据可视化, 流媒体, 爬虫, 网络测绘, 视频解析