Skip to content

Commit 75a424a

Browse files
author
Taois
committed
docs: 新增代理开发调试文档,并更新打包后的 jar 文件
1 parent 87059eb commit 75a424a

3 files changed

Lines changed: 101 additions & 0 deletions

File tree

mediaProxy/README_DEV.md

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# mediaProxy (goProxy) 开发与调试指南
2+
3+
本文档详细介绍了 drpy-plugin 中 `mediaProxy` (由 Go 编写的视频代理服务,即 `goProxy`) 的完整开发、测试、调试及编译打包流程。
4+
5+
## 1. 环境准备
6+
7+
确保您的本地开发环境已安装以下工具:
8+
- **Go**: 建议 1.21 或更高版本(用于编译 `proxy.go`
9+
- **Python**: 3.x(用于运行模拟播放器及测试脚本)
10+
- **PowerShell**: Windows 环境默认自带(用于执行编译及打包脚本)
11+
- **Git**: 用于版本控制
12+
- **UPX**: 可选,用于压缩编译后的可执行文件(在 Android 环境下能大幅缩小体积)
13+
14+
## 2. 本地启动代理服务
15+
16+
在开发阶段,我们直接使用 Go 命令在本地启动代理服务。服务默认运行在 `5575` 端口。
17+
18+
```powershell
19+
cd mediaProxy
20+
go run proxy.go -port 5575
21+
```
22+
23+
如果需要查看更详细的调试信息(例如每个分片的下载情况、错误日志),请添加 `-debug` 参数:
24+
25+
```powershell
26+
go run proxy.go -debug -port 5575
27+
```
28+
29+
## 3. 测试与模拟播放器请求
30+
31+
在本地服务启动后,需要验证代理是否能正确处理视频的完整播放以及拖拽操作(即 HTTP Range 请求)。
32+
33+
### 3.1 准备测试数据
34+
35+
`mediaProxy` 目录下创建一个名为 `playinfo.txt` 的文件,将你需要测试的视频直链(例如迅雷等网盘解析出的原始播放链接)粘贴进去。
36+
37+
### 3.2 运行测试脚本
38+
39+
我们编写了两个 Python 脚本来模拟不同场景的测试:
40+
41+
1. **基础流程测试 (`test_proxy.py`)**:
42+
该脚本模拟了完整下载、拖拽到中部、拖拽到尾部以及拖拽后继续播放四个场景。
43+
```powershell
44+
python test_proxy.py
45+
```
46+
**预期结果**: 各个场景返回 `206 Partial Content`,并且能正确下载对应字节数的数据。
47+
48+
2. **播放器模拟测试 (`test_player_sim.py`)**:
49+
该脚本更贴近实际播放器的行为,通过读取 `playinfo.txt` 中的链接,发起不同 `Range` 的请求,并打印响应头,方便检查 `Content-Range``Content-Length` 是否正确。
50+
```powershell
51+
python test_player_sim.py
52+
```
53+
54+
## 4. 调试错误与代码修改
55+
56+
当遇到播放截断、无法拖拽等问题时,通常是因为 HTTP Range 处理或并发控制不当。以下是常见的排查点:
57+
58+
- **观察 Debug 日志**:
59+
检查 `go run proxy.go -debug` 输出的日志,特别关注 `statusCode``Range` 以及 `ProxyRead/ProxyWorker` 相关的报错。
60+
- **416 错误处理**:
61+
网盘(如迅雷)在请求到达文件末尾时常返回 `416 Range Not Satisfiable`。这**不是**一个致命错误,代理不应该直接中断。正确的做法是跳出当前分片的下载循环,平滑结束。
62+
- **429/503 频率限制**:
63+
多线程并发请求可能触发服务器的防刷机制。需要加入退避重试(Retry Backoff)机制,并在 `handleGetMethod` 中限制最大线程数(如限制为 16)。
64+
- **Context 与协程泄漏**:
65+
使用 `context.WithCancel` 控制并发任务的生命周期。当主请求结束(如用户关闭播放器)时,通过 `cancel()` 通知所有 worker 退出,避免后台持续下载导致内存和连接泄漏。
66+
67+
> **修改建议**: 所有代理逻辑的核心在 `ConcurrentDownload``ProxyRead` 以及 `ProxyWorker` 三个函数中,修改时需仔细处理 `channel``buffer` 的读写。
68+
69+
## 5. 编译 Android 二进制文件
70+
71+
在本地测试通过后,需要将 `proxy.go` 交叉编译为 Android 平台可执行文件。
72+
73+
`mediaProxy` 目录下,直接运行提供的 PowerShell 脚本:
74+
75+
```powershell
76+
./build_goproxy.ps1
77+
```
78+
79+
**脚本主要工作**:
80+
1. 设置环境变量 `GOOS=linux`,分别针对 `GOARCH=arm` (32位) 和 `GOARCH=arm64` (64位) 进行编译。
81+
2. 禁用 CGO (`CGO_ENABLED=0`),移除调试信息 (`-ldflags="-s -w"`) 以减小体积。
82+
3. 输出文件存放至 `goProxy/goProxy-arm``goProxy/goProxy-arm64`
83+
4. (可选) 如果系统中存在 `upx` 命令,脚本会自动对编译结果进行 UPX 压缩。
84+
85+
## 6. 打包 custom_spider.jar
86+
87+
编译好的 Android 可执行文件最终需要打包进 `custom_spider.jar` 中的 `assets` 目录下供 TVBox 等客户端使用。
88+
89+
`mediaProxy` 目录下,运行打包脚本:
90+
91+
```powershell
92+
./update_jar.ps1
93+
```
94+
95+
**脚本主要工作**:
96+
1.`goProxy` 目录下的 `goProxy-arm``goProxy-arm64` 添加或更新到上一级目录的 `custom_spider.jar``assets/` 路径中。
97+
2. 自动计算更新后 `custom_spider.jar` 的 MD5 值。
98+
3. 将生成的 MD5 值写入 `custom_spider.jar.md5` 文件中。
99+
100+
至此,整个开发、测试、编译、打包的闭环流程完成。你可以将生成的 `custom_spider.jar``custom_spider.jar.md5` 发布到你的源中供用户更新。

mediaProxy/custom_spider.jar

3.86 MB
Binary file not shown.

mediaProxy/custom_spider.jar.md5

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
c1c95fa9cde443c3bf94a50985c400bc

0 commit comments

Comments
 (0)