正文由作者完成,AI 主要用于措辞优化和语言打磨。
引言
我在直播时,经常会被观众问到这些问题:
主播主播,你现在用的是什么软件?
主播主播,这是什么游戏?
主播主播,这首歌叫什么?
这些问题当然可以直接口头回答,但总觉得不够优雅。毕竟这类信息通常也不涉及隐私,完全可以交给程序自动展示。
于是我就开始琢磨:能不能做一个小工具,把 当前正在使用的软件、正在播放的歌曲 之类的信息,自动同步给 OBS,再展示给直播间观众?
那么,具体该怎么实现呢?
一开始我想到的是 OBS 的 游戏源。因为我平时在用 VTube Studio,它支持通过 OBS 的 游戏源 捕获 Live2D 形象,并开启 允许透明,效果很干净。
不过 OBS 的游戏源本质上捕获的是渲染管线,而不是普通桌面窗口。换句话说,如果只是为了显示一行实时文字,还专门去写一个基于 DX、OpenGL 或 Vulkan 的渲染程序,明显有点杀鸡用牛刀。
后来我发现,OBS 其实自带一个更轻量的方案:文字源。
我们真正需要的,归根结底也只是把几行文本显示到直播画面里,而且这些文本还得能实时更新。
而 OBS 的文字源恰好支持 从文件读取。既然如此,思路就一下子清晰了:
只要让 OBS 持续读取一个 TXT 文件,再写一个小程序不断更新这个 TXT,不就可以了吗?

这个思路完全可行。实测下来,OBS 会每隔几秒重新读取一次 TXT 内容。虽然它不是即时 Hook,而是简单轮询,但对于“当前正在使用什么软件”这类信息来说,已经完全够用了。

不过,只做实时进程显示,其实只解决了 “我当前正在用什么软件” 这个问题。
如果我还想进一步告诉观众:“我现在正在放什么歌” 呢?
所以我又补了一个功能:支持监测指定的 EXE,并实时读取这个进程的窗口标题变化。一般来说,不少音乐播放器都会把当前播放曲目写进窗口标题里。

那如果中途我把音乐软件关掉了怎么办?
也很简单:在检测不到目标进程时,程序就向 TXT 写入一个零宽空格。这样 OBS 端看起来就像“空白”,不会残留上一次的歌曲名;等软件重新启动后,显示内容又会自动恢复。
整个方案落地下来,其实只需要在 OBS 里额外添加两个文字源即可。
于是,这个小项目就这样诞生了:


发现错误或想要改进这篇文章?
在 GitHub 上编辑此页