
Bitfocus Companion 完整拆解用软件把 Stream Deck 变成专业媒体控制台的思路【免费下载链接】companionBitfocus Companion enables the Elgato Stream Deck and other controllers to be a professional shotbox surface for an increasing amount of different presentation switchers, video playback software and broadcast equipment.项目地址: https://gitcode.com/gh_mirrors/co/companionBitfocus Companion 是一个开源服务器程序它把 Elgato Stream Deck 等硬件设备改造成专业媒体控制台统一管理按钮映射、动作序列和状态反馈。今天不聊架构愿景只回答几个实际问题它到底能干什么、事件链路怎么跑通的、以及自己动手扩展时从哪里下手。️ 先讲它到底能干什么两个真实场景先看直播导播台。一台三摄像头的直播里导播的手搁在 15 键的 Stream Deck 上。其中某个键配置的不是切到 2 号机位这么单一的动作而是一整套动作序列先淡出主播音频再切换 OBS 的视频源最后弹出标题字幕。序列跑完这个键的背光变绿导播不用看屏幕就知道执行完了。再看导播旁边。助播的平板浏览器里打开一个网页上面是同一套按键布局的镜像——Companion 内置的模拟器和 Web 按钮视图。平板不插硬件但所有按钮都能点助播可以帮忙预置下一场要用的页面。这两个场景覆盖了它的三个核心能力Surface设备表面、动作序列、变量反馈。后面拆开看它们各自是怎么实现的。拆开看它是怎么做到的技术层面最值得追问的是三个问题。多块硬件设备怎么统一管理难点在于设备差异大Stream Deck 是方形按键X-Keys 带旋钮有的设备还带 LCD 滑条各自上报图像和事件的格式都不一样。如果按钮布局代码里写满如果设备是 X 就……接第二种设备时项目就完了。这里的关键是把硬件驱动本身做成模块向上提供一层叫 Surface 的统一抽象。设备发现、注册和分组逻辑集中在companion/lib/Surface/Controller.ts按钮布局只面向表面编程不关心底下是什么物理设备。同一套布局可以渲染到不同设备上甚至给不同设备单独映射不同的页面。目前内置了 Stream Deck 和 X-Keys 两个驱动清单在assets/builtin-surface-modules.json里可以查到。从按钮按下到动作执行的完整链路一个按钮上可以叠十几条动作分别属于 OBS、vMix、QLab 这些不同的连接执行顺序必须保证参数还要求能在运行时动态计算。解法是把动作当成数据而不是代码每条动作记录它归属哪个连接按键事件触发后companion/lib/Controls/ActionRunner.ts按顺序取出按钮上的动作列表根据连接 ID 找到对应模块的处理器逐条执行。参数支持写表达式比如把当前场景编号加 1真正按键的那一刻才由变量引擎求值——这意味着按钮行为可以随状态变化而变化不用写任何脚本。状态怎么实时同步回硬件背光和文字要反映的是对方软件现在的状态比如 OBS 当前正在播的场景这是条反方向的通道也是最容易做糟蹋的地方轮询太慢全量推送又太贵。Companion 的做法是把反馈feedback写成表达式。你在按钮的反馈里声明当变量 scene 等于 2 时背光变绿companion/lib/Variables/下的变量系统负责从各连接拉取变量值并求值只有求值结果变化的按钮才会被重新渲染并推送到设备Web 管理界面同步刷新。反馈配置长这样实际用起来体验如何从安装到按键生效上手流程很短装好服务后浏览器打开管理页面Stream Deck 插进机器自动识别不用另装驱动。配置界面是左侧栏加右侧配置区连接管理、按钮编辑、触发器、变量都在侧边栏里切换按钮编辑是卡片式的选中一个键右边叠动作、加反馈、调样式改动即时生效在设备上不用保存-刷新。和传统方案各厂商 App 里一对一映射快捷键比体感差异在于它的定位是服务器布局存在数据库里你在另一台电脑远程配置硬件只是输入方式之一布局还能整体导入导出换台机器直接恢复。这里有个坑第一次用会在表达式语法上卡住变量引用、函数嵌套都要适应一下好在官方文档里有完整的表达式参考。想自己扩展 / 二次开发模块机制怎么运作软件适配和硬件驱动走的是同一套机制——都是模块。一个模块就是一个带 manifest 的包里面声明名称、版本、兼容的 Companion 版本安装、更新和依赖校验由companion/lib/Instance/ModuleStore.ts负责支持在线更新和离线导入。写一个软件模块的入口是companion-module/base工具包在 setup 回调里注册自己的 actions、variables 和 feedbacks大部分工作其实是把自家软件的 API 映射成这套接口几十行就能让一个新程序接进来。生态现状一句话社区的软件适配模块数量已经很可观文档里有完整的模块开发指南硬件 Surface 模块则少得多内置就 Stream Deck 和 X-Keys 两个新硬件主要靠社区补位。适合谁用不适合谁用适合要同时控制多台软件或设备OBS vMix 灯光 播放脚本并且愿意花几个晚上做初始配置的人适合需要团队协作、远程配置的场合——布局可以导入导出、整份实例可以备份迁移不适合只想给 Stream Deck 映射几个快捷键。那用厂商自带 App 两分钟搞定起一台 Companion 服务器属于杀鸡用牛刀慎重Companion 是个常驻服务如果你不想长期跑一个后台程序它不太对路说白了Companion 干的事就一件把你所有控制器的按钮映射收进一个可远程管理、可用表达式驱动的服务器里。想动手的话docs/user-guide/ 里的用户指南和DEVELOPER.md是两个最实用的入口后者还带了本地跑起来开发核心代码的完整流程。【免费下载链接】companionBitfocus Companion enables the Elgato Stream Deck and other controllers to be a professional shotbox surface for an increasing amount of different presentation switchers, video playback software and broadcast equipment.项目地址: https://gitcode.com/gh_mirrors/co/companion创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考