前阵子在折腾怎么把夸克网盘的内容接到飞牛影视上播放,中间踩了不少坑,前后搞了好几天。这里把过程和遇到的问题都记录一下。
背景
有个夸克网盘会员,88VIP 带的,闲鱼买的 88VIP,几块钱一年。网盘里存了些电影和剧,之前都是手机或网页上看,现在有了飞牛 NAS,想在飞牛影视上看,大屏体验好一些。
但不想把几百 G 的东西全下载到 NAS 硬盘上,空间也不够。目标是直接挂载云端播放,NAS 本地不存视频文件。
从 144 kB/s 到 11 MB/s 的摸索过程
飞牛自带的远程挂载
飞牛 NAS 本身支持挂载夸克网盘,系统设置里可以直接添加远程挂载,挂上之后在飞牛影视里指定这个挂载路径作为媒体库。这是最简单的方案,不需要额外装任何东西。
结果测速只有 144 kB/s,视频完全加载不出来。飞牛的远程挂载底层走的是 rclone 的 FUSE,中间层开销太大。
部署 OpenList + WebDAV
飞牛自带挂载不行,就自己搭了 OpenList(AList 的一个分支),Docker 部署,在里面添加夸克网盘驱动。OpenList 提供 WebDAV 接口,然后在飞牛系统里用远程挂载把这个 WebDAV 挂到本地路径,飞牛影视再去扫描。
测速 521 kB/s,比原来快了几倍,但还是远远不够播放视频。这条路也走不通。
STRM 直链方案
后来了解到 STRM 这个方案。STRM 文件本质就是一个文本文件,里面只有一行内容:视频的直链 URL。把 STRM 文件放到飞牛影视的媒体库路径下,飞牛影视播放的时候会直接去请求这个 URL 拿视频流,完全绕开了 WebDAV 和 FUSE 中间层。
OpenList 本身就带 STRM 驱动,可以把已有的存储路径自动生成对应的 STRM 文件到本地目录。配置好之后测速到了 4.2 MB/s,1080p 的内容可以正常播放了。
但 4K 原盘码率通常在 60 Mbps 以上,4.2 MB/s(约 33 Mbps)还是不够用,播放过程中会频繁缓冲。而且中间还碰到个别视频播放没有声音的问题。
速度对比
| 方案 |
测速 |
结果 |
| 飞牛原生挂载 |
144 kB/s |
无法加载 |
| OpenList WebDAV |
521 kB/s |
无法播放 |
| STRM 直链 |
4.2 MB/s |
1080p 可看,4K 缓冲 |
| QuarkTV 流式 |
11+ MB/s |
4K 流畅 |
发现夸克网页播放流畅的原因
用 STRM 方案的时候一直有个疑问:同一个文件,夸克自己的网页播放器放起来非常流畅,通过 OpenList 就卡。一开始以为是夸克 CDN 速度快,或者有什么 302 重定向加速。
后来用浏览器 F12 开发者工具抓了夸克网页播放器的网络请求,对比发现了关键区别:夸克网页播放器请求的根本不是原始文件,而是调了一个 /1/clouddrive/file/v2/play 接口,返回的是服务端转码后的视频流。
这个 play 接口会返回多个画质档位供选择:
| 画质 |
分辨率 |
码率 |
转码后大小(原文件 49.4 GB) |
| 4K |
3840x2160 |
~4000 kbps |
3.1 GB |
| super |
1440x810 |
~1500 kbps |
1.16 GB |
| high |
960x540 |
~1200 kbps |
916 MB |
一个 49.4 GB 的 4K REMUX 原盘,经过夸克的服务端转码后,最高画质也只有 3.1 GB,码率从原盘的 60+ Mbps 压到了 4 Mbps 左右。带宽需求降低了一个数量级,自然就不卡了。
所以问题不在下载速度,而在于请求的是原始文件还是转码流。
另外也验证了一下 302 重定向的问题——在同一个局域网内,飞牛影视和 NAS 走的是同一条出口带宽,302 只是改变了请求路径,不改变实际带宽,所以对速度没有提升。真正有意义的是选择转码流还是原始文件。
QuarkTV 驱动的配置
搞清楚原理之后,在 OpenList 里找到了 Quark TV 驱动。这个驱动走的是夸克电视端 API,和网页播放器底层用的是同一套转码服务。
核心配置就一个:link_method 设为 streaming(流式)。设成流式后,OpenList 返回的不再是原始文件的下载地址,而是转码后的视频流地址。
中间走了个弯路:先试了标准夸克驱动里的 use_transcoding_address 选项,想通过标准驱动实现转码播放。结果测试多个文件都返回了同样的错误:
failed get link: data invalid: [plf_invalid]
查了一下这是 OpenList 的已知问题,标准夸克驱动的转码地址功能目前不可用。后来才发现需要单独使用 QuarkTV 驱动。
QuarkTV 驱动配置步骤:
- OpenList 后台 → 存储 → 添加 → 驱动选
Quark TV
- 用夸克 App 扫码登录(走的是 TV 端的二维码认证流程,会生成 refresh_token)
link_method 选 streaming
- 保存
配置完成后实测下载速度 11+ MB/s,4K 内容完全流畅播放,拖进度条秒加载。
需要注意的是,流式模式返回的是 H.264 + AAC 编码的转码视频,码率约 4000 kbps,虽然分辨率是 4K 但画质和原盘有差距。如果对画质有极致要求,这个方案不太合适。个人觉得在线看完全够用,不仔细对比看不出区别。
STRM 文件生成和内容整理
播放速度解决后,还有一个问题:飞牛影视无法正确识别媒体内容。夸克网盘上的文件名比较混乱,类似 4K S01 EP 01.mkv 这种命名,飞牛影视的刮削器没法匹配到 TMDB 的影视信息,很多内容只显示为文件名,没有海报和简介。
这里需要解决两件事:
- 生成指向 QuarkTV 流式链接的 STRM 文件
- 把文件名整理成标准的 TMDB 命名格式,让飞牛影视能正确刮削
用了 SmartStrm(开发者 Cp0204)来处理。这个工具可以扫描 OpenList 的目录结构,自动生成对应的 STRM 文件。更重要的是它内置了 TMDB 影视识别功能,可以在文件浏览器里选择目录,自动查询 TMDB 获取正确的影视信息,然后批量将源文件重命名为标准格式(如 剧名.S01E01.集名.mkv)。
踩过的几个坑
1. STRM 文件权限
SmartStrm 生成的 STRM 文件默认权限是 drwx------(仅 owner 可读),飞牛影视的进程用其他用户运行,读不到这些文件。需要手动 chmod -R 755 修改权限。
2. OpenList 的 sign_all 和 guest 用户
OpenList 默认 sign_all=true,所有文件访问请求都需要携带签名认证。但 STRM 文件里存的是直链 URL,飞牛影视播放时是浏览器直接去请求这个 URL,不会带 OpenList 的认证信息,结果就是 401 被拒绝。
需要做两步修改:
- 关闭
sign_all(设为 false)
- 启用 guest 用户,权限设为 256(只读访问)
这样未认证的请求也能正常获取文件。
3. SmartStrm 的 network_mode: host 导致 STRM URL 错误
SmartStrm 用 Docker 的 network_mode: host 部署时,生成的 STRM 文件里的 URL 主机地址会是 127.0.0.1。
飞牛影视有个「STRM 直连播放」模式,在这个模式下浏览器会直接请求 STRM 文件里的 URL。问题在于浏览器是在客户端机器上运行的,127.0.0.1 指向的是客户端自己而不是 NAS,所以请求会失败(ERR_CONNECTION_REFUSED)。
解决办法是把 SmartStrm 改为显式端口映射(ports: "8024:8024"),然后在 SmartStrm 的配置文件里把 storage URL 设为 NAS 的局域网 IP 地址。
4. QuarkTV 驱动不支持文件重命名
SmartStrm 的 TMDB 识别功能可以自动匹配影视信息并生成新文件名,但点「应用」的时候报错:批量重命名失败。
原因是 QuarkTV 驱动是只读的,只支持列目录和获取播放链接两个操作,不支持 rename、move、delete 这些写操作。
解决办法是在 OpenList 里再加一个标准夸克驱动(用浏览器 cookie 认证),挂载同一个夸克账号。这样 OpenList 里就有两个驱动:
/quark-tv — QuarkTV 驱动(只读,用于生成流式播放链接)
/quark — 标准夸克驱动(可读写,用于重命名等文件管理操作)
在 SmartStrm 的文件浏览器里通过 /quark 路径浏览文件,执行 TMDB 识别和重命名,操作完成后再触发 SmartStrm 任务重新生成 STRM 文件。最终生成了 292 个 STRM 文件,飞牛影视刷新媒体库后全部正确识别,海报、评分、简介都有了。
5. 标准夸克驱动 cookie 的 HttpOnly 坑
标准夸克驱动需要浏览器 cookie 来认证。但 cookie 中有个关键字段 __pus 是 HttpOnly 属性的,在浏览器控制台用 document.cookie 读不到它。
获取完整 cookie 的方法:打开 F12 开发者工具的 Network 面板,在夸克网盘页面上触发任意操作(比如刷新文件列表),找到一个发往 drive-pc.quark.cn 的请求,从请求头(Request Headers)的 cookie 字段里复制完整内容。这样拿到的 cookie 包含 HttpOnly 字段。
6. OpenList 的 429 限流
调试过程中频繁测试,触发了 OpenList 的登录请求限流,返回 429 状态码。重启 OpenList 容器可以清除限流计数器。
自动化:新内容自动入库
手动整理完存量文件后,还需要解决后续新内容的自动入库问题。目标是新的分享资源转存到夸克网盘后,自动触发 STRM 文件生成,飞牛影视自动发现新内容。
部署了 quark-auto-save(同一作者 Cp0204 的工具),它可以监控分享链接并自动转存到指定目录。转存完成后通过 webhook 通知 SmartStrm,SmartStrm 增量扫描并生成新文件的 STRM。
整条链路:
分享链接 → quark-auto-save 自动转存 → webhook 通知 SmartStrm → 增量生成 STRM → 飞牛影视自动发现
三个服务放在同一个 docker-compose 里管理:
services:
openlist:
image: openlistteam/openlist:latest-lite
ports:
- "5244:5244"
volumes:
- ./data:/opt/openlist/data
- /vol1/1000/strm:/opt/openlist/strm
smartstrm:
image: cp0204/smartstrm:latest
ports:
- "8024:8024"
volumes:
- ./smartstrm/config:/app/config
- /vol1/1000/strm/library:/strm
quark-auto-save:
image: cp0204/quark-auto-save:latest
ports:
- "5005:5005"
volumes:
- ./quark-auto-save/config:/app/config
环境变量(用户名密码等)按各工具的文档自行配置。
webhook 联动的配置方式:在 quark-auto-save 的系统配置页面展开 smartstrm 插件,填入 SmartStrm 的 webhook 地址和对应的任务名。SmartStrm 这边可以把 crontab 定时任务去掉,不再定时全量扫描,改为纯 webhook 触发,只在有新内容转存时才运行增量生成。
其他注意事项
- 夸克 cookie 有效期不长,过段时间会失效,需要重新从浏览器获取并更新到 OpenList 和 quark-auto-save 的配置里
- SmartStrm 的 TMDB 影视识别接口在国内直连基本超时,需要配置代理
- QuarkTV 流式模式返回的是 H.264 + AAC 编码的转码视频,4K 分辨率但码率约 4000 kbps,不是原盘画质
- STRM 文件就是文本文件,本身只占几 KB 空间,整个方案不需要在 NAS 上存储视频文件
- 飞牛原先自带的夸克远程挂载在 STRM 方案跑通后可以清理掉,避免冗余