收起左侧

飞牛影视通过 Infuse/Jellyfin 播放 STRM 失败:8005 中转不支持 Range,导致 Cannot

0
回复
23
查看
[ 复制链接 ]

11

主题

26

回帖

0

牛值

初出茅庐

fnOS1.0上线纪念勋章

我在使用 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 或直链透传问题。

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则