我在使用 Infuse 连接飞牛影视/Jellyfin 播放 STRM 文件时遇到一个稳定复现的问题:飞牛影视网页端可以正常流畅播放,Infuse 直接播放 STRM 内的真实 URL 也正常,但 Infuse 通过飞牛影视/Jellyfin 播放同一个 STRM 会失败,报错:
Failed to read the file with URL (Cannot open stream)
环境
- 服务端:飞牛 fnOS + 飞牛影视
- 飞牛影视对外 Jellyfin 端口:
8005
- STRM 真实媒体来源:OpenList 挂载阿里云盘
- OpenList 对外端口:
5245
- 客户端:Infuse for macOS
- 飞牛影视版本:
0.9.7
- mediasrvVersion:
0.8.35
- Jellyfin API 显示版本:
10.10.0
STRM 文件内容
STRM 文件内容是单行纯 URL,类似:
http://nas.example.com:5245/d/newali/xxx/xxx.mkv
已经确认:
- UTF-8,无 BOM。
- 单行 URL。
- 无多余空格。
- 不是网页地址,不是分享页。
- URL 可被外部播放器直接访问。
已排除的问题
一开始怀疑是 OpenList、MIME、Range 或阿里云盘速度问题,后来逐项排除了。
1. OpenList / 5245 直链正常
curl -I 已返回:
HTTP/1.1 302 Found
Location: https://dl1-v6.aliyundrive.cloud/...
Content-Type: video/x-matroska
Accept-Ranges: bytes
说明现在不是 NAS 中转大文件,而是正确跳转到阿里云盘真实下载地址。
2. Range 正常
64MB Range 测试:
curl -L -r 0-67108863 -o /dev/null -w 'code=%{http_code} speed=%{speed_download} total=%{time_total}\n' 'http://nas.example.com:5245/d/newali/xxx/xxx.mkv'
结果:
code=206 speed=10528028 total=6.374305
也就是:
206 Partial Content 正常。
- 速度约
10MB/s。
- Range 分段读取正常。
3. Infuse 直接 URL 播放正常
把 STRM 里的真实 URL 直接添加到 Infuse 里播放,可以正常播放。
4. 飞牛影视网页端播放正常
飞牛影视网页端播放同一个 STRM,已经非常流畅。
只有这个场景失败
失败场景只有一个:
Infuse
→ 连接飞牛影视/Jellyfin
→ 播放飞牛影视库里的 STRM 条目
→ 报 Failed to read the file with URL (Cannot open stream)
服务端抓包和日志结论
抓包后确认,Infuse 通过飞牛影视/Jellyfin 播放 STRM 时,并不是直接播放 STRM 文件里的 5245 真实 URL,而是走了这条链路:
Infuse / Mac
→ 飞牛影视 8005
→ 飞牛读取 STRM 文件
→ 飞牛再访问 5245 真实 URL
→ OpenList / 阿里云盘
关键日志如下。
1. 飞牛/NAS 先读取 STRM 文件
5245 日志显示:
GET /dav/ali-strm/.../xxx.strm
2. 飞牛影视识别到 STRM 里的真实 URL
飞牛影视日志显示:
strm file play, using url:
http://nas.example.com:5245/d/newali/.../xxx.mp4
3. 飞牛再访问真实媒体 URL
5245 日志显示:
HEAD /d/newali/.../xxx.mp4
GET /d/newali/.../xxx.mp4
4. 飞牛影视随后报错
飞牛影视日志显示:
strm file range request not supported
问题判断
Range = 播放器按字节分段读取视频的请求,用于探测、拖动、边下边播。
Infuse 对 Range 比较严格。当前看起来飞牛影视在通过 Jellyfin/8005 暴露 STRM 给 Infuse 时,没有把 STRM 里的真实 URL 直接交给 Infuse,而是自己做了中转流;但这个 STRM 中转流不支持 Range,导致 Infuse 无法打开流。
所以问题不是:
- OpenList 慢。
- 阿里云盘慢。
- MIME 错误。
- STRM URL 不可访问。
- Infuse 完全不支持 STRM。
而是:
飞牛影视/Jellyfin 的 STRM 中转流不支持 Range,
导致 Infuse 通过飞牛影视播放 STRM 失败。
期望行为
希望飞牛影视在 Jellyfin/Infuse 场景下支持以下任一方案。
1. STRM 直链透传
直接把 STRM 文件里的真实 URL 返回给客户端播放,不经过飞牛 8005 中转。
2. 支持 STRM Range 中转
如果必须由飞牛 8005 中转,也希望支持:
Range
206 Partial Content
Content-Range
Accept-Ranges: bytes
3. 提供“不代理 STRM / Direct Link”选项
对 STRM 文件允许选择:
这样 Infuse、VidHub 等第三方播放器可以直接访问真实 URL。
当前临时绕过方案
目前只能绕过飞牛影视/Jellyfin:
- Infuse 直接添加 OpenList / WebDAV / HTTP 来源播放。
- 飞牛影视继续用于网页端播放和刮削展示。
但这样就无法完整使用飞牛影视通过 Jellyfin 暴露出来的媒体库体验,所以希望官方能修复 STRM 在 Jellyfin/Infuse 下的 Range 或直链透传问题。