Skip to content

Conversation

@0Chencc
Copy link
Contributor

@0Chencc 0Chencc commented Dec 21, 2025

fixed #1546
入口在这里,添加了http与socks5的支持,已经在本地进行测试,确认测试无误。

Snipaste_2025-12-21_16-59-24 Snipaste_2025-12-21_16-59-14

@Predidit
Copy link
Owner

  1. 此PR同时包含了弹幕密度相关变更,你可以简单说一下这里的设计吗。

  2. 这个功能长期推迟实现的原因是我们实际上要处理三部分的代理,也就是 dart HTTP 代理,media-kit 底层的 mpv 代理,以及执行视频嗅探的 webview 代理,这个PR其实只实现了第一部分。

mpv 的代理相当简单,参考 https://mpv.io/manual/master/ 的 http-proxy 部分。你可以在 player_controller.dart 中使用类似 pp.setProperty 的手段进行设置,这里的主要问题是 mpv 只支持 http 代理,不支持 socks 代理,我们也许应该在这个 PR 中移除 socks 支持以保持一致。为 webview 设置代理更加复杂,需要查看各个 webview 包的文档,我们需要先实现文档中提供了相关用发的平台,对于需要修改对应 webview 插件的平台,如果你有兴趣的话,可以进行,如果不感兴趣的话,我会在后续进行相关尝试。

@0Chencc
Copy link
Contributor Author

0Chencc commented Dec 21, 2025

要分两点讨论

此前我在本地尝试着实现弹幕密度的调整,但是因为其他工作而暂时搁置,这其中的实现我还未测试,是错误提交。

然后是socks5,其实dart原生对于socks5的支持非常差,站在我的角度上确实可以移除socks5,只不过考虑到会有潜在用户有这样的需求(不过现在大部分代理工具都支持混合端口)

其余的内容我今晚看一下怎么实现,应该不难。

- 移除 SOCKS5 支持以保持与 mpv 一致
- 添加 mpv http-proxy 属性设置
- 移除 flutter_socks_proxy 依赖
- 简化 proxy_utils 解析逻辑
@0Chencc
Copy link
Contributor Author

0Chencc commented Dec 22, 2025

现在的代码中,我增加了mpv的全平台支持。

目前我们只剩下webview的嗅探实现。

由于iOS/macOS/Windows/Linux均没有可用的flutter api来设置代理。所以我仅仅实现了android。对于其他平台的webview嗅探实现你有什么好的想法吗?
@Predidit

@Predidit
Copy link
Owner

我有些怀疑 webview_proxy_utils.dart 存在的意义,这可能导致 webview 相关生命周期问题,我们可以直接在 webview_controller_impel 这样的场合处理代理

对于windows,我们有类似 await WebviewController.initializeEnvironment(additionalArguments: '--show-fps-counter'); 传递 chromium 启动参数,可以通过启动参数指定本地代理

对于linux,我之前尝试基于本地代理的视频解析器时实现过代理设置功能,在 https://github.com/Predidit/linux_webview_window/tree/http_proxy ,相关代码量很少,你可以尝试以下把这个变更 rebase 到当前分支测试

对于 macOS/iOS ,我没有什么想法,我对这两个平台的理解非常非常有限

@0Chencc
Copy link
Contributor Author

0Chencc commented Dec 22, 2025

对于windows的问题,如果通过chromium的方式传入,那似乎每次更改代理都需要用户来重启应用。
不过我认为用户如果有代理这样的比较pro的需求应该可以接受这样的调整。

@Predidit
Copy link
Owner

这是你实际测试的结果吗,正常情况下视频页面退出后 chromium 线程就被销毁了,它正确地重新初始化

@0Chencc
Copy link
Contributor Author

0Chencc commented Dec 22, 2025

你是对的,此前是我脑测的结果,我只是粗略查看了代码并没有测试,在经过测试后我发现他确实会正确重新初始化。

@Predidit
Copy link
Owner

Hi,

我想知道这个 PR 还是你的视线范围内吗,在我看来它已经很接近完成,macOS/iOS 的 webview 代理实现我们应该暂时搁置

@0Chencc
Copy link
Contributor Author

0Chencc commented Dec 27, 2025

这个pr还在我的todolist中,我预计在明天继续开发。

移除了webview_proxy_utils.dart

增加了windows的代理支持
- Add proxy configuration to Linux WebView controller
- Use local linux_webview_window with HTTP proxy patch
Switch from local path to git reference for CI compatibility
@0Chencc
Copy link
Contributor Author

0Chencc commented Dec 27, 2025

本pr已经完成了linux的代理,我在虚拟机测试过已经没问题了。

@Predidit
Copy link
Owner

看上去相当不错,只有两个小问题

  1. ‎lib/request/bangumi.dart 修改的作用是什么,这似乎和这个PR的目标无关
  2. proxy_settings.dart 的设计不是很符合 material3 规范,至少我们应该使用一些 floatingActionButton

@0Chencc
Copy link
Contributor Author

0Chencc commented Dec 28, 2025

bangumi是测试时遗漏的,现在已经恢复了代码。

proxy_settings现在已经对齐规范。

@Predidit
Copy link
Owner

只有最后一个小问题,目前 proxy_settings 的交互逻辑还是有点不通顺,也就是代理开关和保存按钮的功能分界暧昧。

可以考虑 webdav 同步页面的处理,在一级子页面中提供 代理开关 和 代理设置,代理设置转向一个只有代理地址和认证信息填写等内容的二级页面,在这里提供一个带有 Text 的 FloatingActionsButton 进行代理保存和测试。有外面的代理开关来控制代理启用和禁用。

@Predidit
Copy link
Owner

在实际使用测试时,我注意到一个问题

如果我填写一个格式正确,但并不存在的代理服务器,永远不会出现测试失败的 toast

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

请求增加代理

2 participants