Blinue / Magpie

An all-purpose window upscaler for Windows 10/11.
GNU General Public License v3.0
8.19k stars 459 forks source link

录制好的视频会有两个鼠标光标,远古版本没有这种问题 #936

Closed achooyu closed 1 month ago

achooyu commented 1 month ago

Magpie version 程序版本

Magpie-v0.11.0-x64

Windows version 系统版本

Windows 10 IoT 企业版 LTSC 21H2

Related screenshot (optional) 相关截图(可选)

No response

Reproduction steps 复现步骤

Magpie-v0.11.0,用n卡自带的录制软件录屏时,最终录制好的视频会有两个鼠标光标(magipe和系统鼠标。系统鼠标是1号大小,实际我电脑设置的是3)。录制时游戏画面只显示一个鼠标光标。用带有隐藏系统鼠标光标功能的录制软件,隐藏系统鼠标后,游戏画面和录制好的视频都仅显示一个鼠标光标(magipe)。

Magipe-v0.52版本,游戏画面和录制好的视频也仅显示一个鼠标光标(系统鼠标),因为我系统鼠标大小改的是3,缩放后,大小就变成1。

之前用的前两个版本,录制好的视频也只显示一个鼠标(magpie),更新最新版本后就这样了,回退版本也不行。无日志,被我删除了。

建议修复下,如果不能修复,能不能给新版本加个功能,让它实现Magipe-v0.52一样的鼠标光标效果,能同步大小就更好了。

b站和贴吧也搜到好多跟我一样的问题。

辛苦啦!

Log files 日志文件

magpie.log 此日志是Magpie-v0.11.0-x64的

Blinue commented 1 month ago

多出来的光标是录屏软件自己绘制的,和 #141 同一个原因。

Magpie 的工作原理是隐藏系统光标,并在缩放后的位置自行绘制。很多软件不检测系统光标是否被隐藏,主要原因是全局隐藏系统光标是很罕见的,API 也很偏门。Sunshine 之所以兼容,是因为它用了相对现代的 Desktop Duplication 捕获方式,其中有获取正确光标的接口;大多数录屏/串流软件可能还是使用陈旧的 GDI 来捕获,然后自作聪明的补上系统光标,于是同时存在 Magpie 和录屏软件绘制的两个光标。

隐藏光标的方式在 v0.6.1 中更改过: https://github.com/Blinue/Magpie/commit/9660416b86b18c708c3db3fea8f9cd05a260d9b3 ,旧版本使用了很危险且不可靠的方式来隐藏光标:

  1. 将全局系统光标替换为透明
  2. 注入游戏进程将游戏的自定义光标替换为透明

旧方案确实可以和录屏/串流软件兼容,因为光标被替换成了透明图像,它们自行绘制的光标也是不可见的。但旧方案存在两个严重的问题:

  1. 替换全局系统光标是危险的行为,一旦在退出缩放后未能还原,系统光标会一直不可见;相比之下现在使用的隐藏系统光标的 API(ShowSystemCursor 和 MagShowSystemCursor)会在 Magpie 退出甚至崩溃后自动恢复系统光标。
  2. 注入游戏进程的问题更多,一方面注入可能会失败(以前 hooke007 维护过一个支持的游戏的列表,相比之下新方案不存在不支持的游戏),而且无法用于有反作弊机制的游戏。

基于上述原因,我认为新方案比旧方案优越得多,新方案唯一的问题是不能和某些(但并非所有)第三方软件兼容,这是兼容性问题而不是 bug。这里有一个悖论:我们需要让游戏可以一如既往运行,但不想录屏软件也“一如既往”运行。Magpie 隐藏光标的方案无法被传统方式检测到,这对于游戏本身是好事,对于录屏/串流软件则是坏事,而前者显然重要得多。

我暂时找不到解决方案,双光标问题统一在 #141 讨论。

achooyu commented 1 month ago

没事 我换个录制软件就好了。谢谢啦