Skip to content

[BUG] 特定情况下115驱动无法通过strm播放视频 #2347

@repo-ooo

Description

@repo-ooo

请确认以下事项

  • 我已确认阅读并同意 AGPL-3.0 第15条
    本程序不提供任何明示或暗示的担保,使用风险由您自行承担。

  • 我已确认阅读并同意 AGPL-3.0 第16条
    无论何种情况,版权持有人或其他分发者均不对使用本程序所造成的任何损失承担责任。

  • 我确认我的描述清晰,语法礼貌,能帮助开发者快速定位问题,并符合社区规则。

  • 我已确认阅读了OpenList文档

  • 我已确认没有重复的问题或讨论。

  • 我已确认是OpenList的问题,而不是其他原因(例如 网络依赖操作)。

  • 我认为此问题必须由OpenList处理,而非第三方。

  • 我已确认这个问题在最新版本中没有被修复。

  • 我没有阅读这个清单,只是闭眼选中了所有的复选框,请关闭这个 Issue 。

OpenList 版本(必填)

v4.2.1(有bug) v4.1.10(无bug) f542187(无bug) 5d9fc83(有bug)

使用的存储驱动(必填)

115

问题描述(必填)

从v4.1.10升级到v4.2.1后,通过Filebar/SenPlayer/EplayerX -> emby -> openlist strm -> 115播放视频报错,回退回v4.1.10恢复可播。询问copilot及排查下,定位到#2068 这个PR之后出现的问题,前一个PR #2034 正常播放。

具体情况:

  1. strm文件内的链接https://openlistxxx/d/115/media/xxx.mp4可直接下载,可浏览器隐私模式未登录下载
  2. 可通过openlist webUI在线播放视频
  3. emby网页端可在线播放视频
  4. Filebar可播放部分视频,另一部分停在缓冲UI;
    SenPlayer全部无法播放,提示Server return 5XX Server Error reply
    EplayerX全部无法播放,提示服务端错误
  5. fix(115_share): adjust 115 share driver for official API update #2068 起的镜像无法播放,前一个commit fix(drivers/teldrive): enhance file listing and upload functionality with pagination and random chunk naming #2034 及之前的镜像可以播放

由于openlist DEBUG模式也看不到原始请求头,我无法进一步判断Filebar/SenPlayer/EplayerX发出的请求与浏览器下载/emby网页端有什么区别

使用镜像:
[有bug] openlistteam/openlist:v4.2.1-aio
[无bug] openlistteam/openlist:v4.1.10-aio
[有bug][#2068][镜像来源] openlistteam/openlist@sha256:15e5a93668e567e9b7dc5b5a91871e40cd90c3058a66741a2d5bfbd954c7e39b
[无bug][#2034][镜像来源] openlistteam/openlist@sha256:c40f845cfa40142c57690ddf2df8a3b884583599140c7154948a6acc1579ff3f

copilot的判断我不是很认同,其认为 #2068

-func (d *Pan115) DownloadWithUA(pickCode, ua string) (*driver115.DownloadInfo, error) {
-	...
-	req.Header.Set("Cookie", d.Cookie)
-	...
}

// 被替换为:
+downloadInfo, err := d.client.DownloadWithUA(file.(*FileObj).PickCode, userAgent)

替换为SDK实现可能某些情况下舍弃了cookie

// internal/net/serve.go L212-226
func ProcessHeader(origin, override http.Header) http.Header {
    result := http.Header{}
    // 从客户端请求头中复制
    for h, val := range origin {
        if utils.SliceContains(conf.SlicesMap[conf.ProxyIgnoreHeaders], strings.ToLower(h)) {
            continue  // ⚠️ 关键:这里会过滤掉某些header
        }
        result[h] = val
    }
    // 从驱动返回的header中合并
    for h, val := range override {
        result[h] = val
    }
    return result
}

由于问题比较复杂,我的能力只能探寻到此,希望上述描述能有助于尽快修复相关问题

日志(必填)

[有bug][#2068][镜像来源]

2026/04/11 ██████ /home/runner/work/OpenList/OpenList/internal/db/settingitem.go:20
[0.228ms] [rows:1] SELECT * FROM `x_setting_items` WHERE `key` = "forward_direct_link_params" ORDER BY `x_setting_items`.`key` LIMIT 1
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/net/serve.go:256 github.com/OpenListTeam/OpenList/v4/internal/net.RequestHttp() {"status":403,"request_id":"██████████","message":"no cookie value"} 
ERRO[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/server/common/common.go:51 github.com/OpenListTeam/OpenList/v4/server/common.ErrorPage() http request [https://cdnfhnfile.115cdn.net/██████/██████.mp4?t=███&u=███&s=███&d=███&c=██&f=██&k=███&us=███&uc=███&v=███] failure,status: 403|Forbidden response:{"status":403,"request_id":"██████","message":"no cookie value"} 
[GIN] 2026/04/11 - ██████ | 403 |  7.224676795s |      172.17.0.1 | GET      "/d/115/media/████████.mp4"
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/op/path.go:27 github.com/OpenListTeam/OpenList/v4/internal/op.GetStorageAndActualPath() use storage:  /115                           
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/op/path.go:27 github.com/OpenListTeam/OpenList/v4/internal/op.GetStorageAndActualPath() use storage:  /115                           
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/op/path.go:27 github.com/OpenListTeam/OpenList/v4/internal/op.GetStorageAndActualPath() use storage:  /115                           
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/op/fs.go:134 github.com/OpenListTeam/OpenList/v4/internal/op.Get() op.Get /media/████████.mp4 
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/net/serve.go:256 github.com/OpenListTeam/OpenList/v4/internal/net.RequestHttp() {"request_id":"████████","message":"no cookie value","status":403} 
ERRO[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/server/common/common.go:51 github.com/OpenListTeam/OpenList/v4/server/common.ErrorPage() http request [https://cdnfhnfile.115cdn.net/██████/██████.mp4?t=███&u=███&s=███&d=███&c=██&f=██&k=███&us=███&uc=███&v=███] failure,status: 403|Forbidden response:{"request_id":"████████","message":"no cookie value","status":403} 
[GIN] 2026/04/11 - ██████ | 403 |  396.387594ms |      172.17.0.1 | GET      "/d/115/media/████████.mp4"

[无bug][#2034][镜像来源]

2026/04/11 ██████ /home/runner/work/OpenList/OpenList/internal/db/settingitem.go:20
[0.179ms] [rows:1] SELECT * FROM `x_setting_items` WHERE `key` = "forward_direct_link_params" ORDER BY `x_setting_items`.`key` LIMIT 1
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/op/path.go:27 github.com/OpenListTeam/OpenList/v4/internal/op.GetStorageAndActualPath() use storage:  /115                           
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/op/path.go:27 github.com/OpenListTeam/OpenList/v4/internal/op.GetStorageAndActualPath() use storage:  /115                           
DEBU[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/internal/op/path.go:27 github.com/OpenListTeam/OpenList/v4/internal/op.GetStorageAndActualPath() use storage:  /115                           
ERRO[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/server/handles/down.go:149 github.com/OpenListTeam/OpenList/v4/server/handles.proxy() GET /d/115/media/████████.mp4 local proxy error: context canceled 
[GIN] 2026/04/11 - ██████ | 200 |  7.571571497s |      172.17.0.1 | GET      "/d/115/████████.mp4"
ERRO[2026-04-11 ██████]/home/runner/work/OpenList/OpenList/server/handles/down.go:149 github.com/OpenListTeam/OpenList/v4/server/handles.proxy() GET /d/115/media/████████.mp4 local proxy error: context canceled 
[GIN] 2026/04/11 - ██████ | 206 |  7.177572539s |      172.17.0.1 | GET      "/d/115/media/████████.mp4"

Filebar可播放部分视频,另一部分停在缓冲UI;
SenPlayer全部无法播放,提示Server return 5XX Server Error reply
EplayerX全部无法播放,提示服务端错误

配置文件内容(必填)

docker-compose

services:
  openlist:
    image: openlistteam/openlist@sha256:15e5a93668e567e9b7dc5b5a91871e40cd90c3058a66741a2d5bfbd954c7e39b #2068
    user: '0:0'
    ports:
      - 5244:5244
      - 5246:5246
    environment:
      - TZ=Asia/Shanghai
      - http_proxy=http://mydomain:7890
      - https_proxy=http://mydomain:7890
      - all_proxy=http://mydomain:7890
      - no_proxy=localhost,127.0.0.1
    volumes:
      - /media:/media
    command: sh -c './openlist server --debug'

115驱动:本机代理✔网页代理✔
strm驱动:本机代理✔编码路径✔除去URL❌携带签名❌保存strm到本地✔
设置 -> 全局 -> 签名所有❌

复现链接(可选)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions