SteamDeck 开发总结:环境、兼容性认证、Proton 踩坑
SteamDeck 开发总结:环境、兼容性认证、Proton 踩坑
这篇是把一个 Windows 游戏移植上 SteamDeck、拿到兼容性认证全过程的总结。环境搭建和工具用法见 Devkit Client 用法,这里重点在兼容性认证要求和 Proton 这层撞过的坑——音视频解码器那块是整个项目最大的坑。
准备开发环境
有 SteamDeck 直接开发就行。没有的话用 Linux 设备代替:
- 手柄(确保游戏完全支持手柄)
- 720p 显示设备(模拟 Deck 默认分辨率 1280x800 / 1280x720)
- Linux 机器(Manjaro、Arch 发行版和 Deck OS 环境很接近)
- SteamOS Dev Kit Service(测试机)+ Client(开发机)
虚拟机能搭 Linux 环境但要来回切开发/测试环境,不方便,建议有一台独立于开发机的 Linux 测试机。无 Dev-Kit 开发的官方文档:https://partner.steamgames.com/doc/steamdeck/testing
Important
正式上传测试自己的游戏前,先在 Deck 上从 Steam 装个用 Proton 的别的游戏跑一下,确保 Proton 和它的依赖装全,避免预期外的问题。
Proton 是 Windows 兼容层。没有原生 Linux 构建的游戏在 Deck 上通过 Proton 跑,它自动接管 Windows 可执行文件和数据,在 Deck 的 Linux 系统上运行。
兼容性认证
Deck 上的适配评级分四级:
| 评级 | 含义 |
|---|---|
| Verified | 通过所有兼容性检查,用户无需任何配置就能用全部功能 |
| Playable | 能跑但可能需要用户手动操作(手动选控制器配置、手动调出屏幕键盘、用触摸屏浏览启动器等) |
| Unsupported | 因和 Proton 或特定硬件不兼容,无法在 Deck 上运行 |
| Unknown | 尚未完成兼容性审查 |
Check List
- Input
- 控制器支持:默认配置下所有游戏功能必须完全支持手柄。
- 控制器图标:用 Deck 控制器时按键图标必须和 Deck 或 Xbox 按钮名一致,非键鼠活动时不能显示键鼠图标(建议用 Steam Input API)。
- 文本输入:需要输入文本的地方要支持控制器、虚拟键盘,保证仅靠手柄就能完成输入。
- Display
- 分辨率:支持 1280x800(优于 1280x720)。
- 默认设置:默认配置下帧率要能正常游玩。
- 文本可读:屏幕上最小字体字符高度不低于 9 像素。
- Seamlessness
- 没有设备兼容性警告。
- Launcher 也要满足以上全部要求(建议干脆不用 Launcher)。
审核流程详见 https://partner.steamgames.com/doc/steamdeck/compat。
项目踩过的坑
每次下载后都要手动开 Proton 兼容
原因是 Steam 后台配了"支持 Linux + SteamOS",启动时默认不走 Proton,而游戏实际是纯 Windows 构建,于是跑不起来。解法:Steam 后台取消勾选 Linux + SteamOS。
分辨率和帧率默认配置
为保证默认配置下流畅,在游戏实例里判断是否运行在 SteamDeck 上,给一套保守的默认值:
MaxFPS = 60;
...
if (IsSteamRunningOnSteamDeck())
{
ResolutionScale = 50;
MaxFPS = 30;
SetGraphicsPreset(0); // Low
FlushPreset();
}
Deck 文档对帧数没硬性要求,只要求默认配置下能流畅运行。所以做法是默认配置满足 30 帧;用户自己改画质改帧数后实际只能跑 40-50 帧,也不违反认证。
UI 头像锯齿
Deck 分辨率低,UI 高清纹理采样后丢信息产生锯齿。这问题本身不复杂但解决一波三折:先手动 blur 给每个头像做低配版,客户不满意;改用 Mipmap(把 LOD 设置从 nomipmap 改成 Sharpen5)柔化边缘;又发现部分资源尺寸不是 2 的幂,在 UE4.17 下无法生成 MipMap,只能让客户改资源、我们改设置再上传,一来一回耽误很久。
解码器(最大的坑)
Proton 对音视频多媒体支持有已知缺陷。Steam 官方建议:为省带宽和磁盘,用 VP9 或 AV1 这类独立编解码器。
视频解码
从一个兼容性 Bug 开始——某些设备(Radeon RX560)上无法播片,横跨两个月:
- 之前把视频换成 VP9,怀疑部分设备硬件解码器不支持 VP9。
- 接了一套软件解码器处理 VP9。
- 仍然崩,发现是没找到 VP9 对应 Decoder,系统需要装 VP9 Video Extensions。
- 方案 1:下离线包,PowerShell 脚本安装,Steam 后台配自动安装。
- 方案 2:准备两套视频数据,PC 用原 MPEG,Deck 用 VP9。
- 方案 1 脚本不稳定偶尔出错,最终选方案 2。
- 打包时按平台选拷 MPEG 或 VP9。
- 回滚之前的软件解码代码,换回硬件解码。
音频解码
音频解码器的相关改动很多但最终没合进主分支。Steam 评论里有玩家抱怨游戏运行久了声音会 crack,不确定是不是 Proton 音频解码支持不完善导致。结论:音视频解码在 Deck 上要优先重点检查。
编码器
QA 测出游戏内录制功能不可用。原因是录制用了 WMF(Windows Media Foundation)视频编码库,这个库在 Deck 上无法初始化。按官方建议要找一个 Deck 支持的编码器库集成进工程,最终找到 libavcodec:
libavcodec 是 FFmpeg 多媒体框架的核心组件,包含多种音视频编解码器实现(VP9、AAC、MP3、H.264、H.265)以及容器格式处理能力(MP4、MKV、FLV)。
但这方案没真正集成——Bug 是 5 月底报的,6 月初就上线,集成 + 测试工作量太大。为不影响上线,改用了在 Deck 上禁用录制及相关功能的办法,绕开编码器问题。
完全支持控制器
项目本身手柄支持不完善,部分功能要按键盘 Esc/Ins/Del 等特定键,这在 Deck 上绝对拿不到控制器认证。要把这些键鼠按键映射到手柄上,和客户确认这些只在 Deck 用。
对合集类项目这是深坑:合集里有 Launcher 和多个游戏,除了加按键响应,还要处理手柄图标切换,同一个图标在不同游戏里实现完全不同,一个功能要改 7-8 次。仓库里关于 Deck 的提交近一半都在做和修这个需求。临上线前因为客户拿不到 Steam "完全支持控制器" 认证,这套方案又被应用到了 PC 上。
文本可读
字体大小要求也导致项目延期。自研引擎的游戏没有编辑器,只能客户自己改数据发给我们打版本测试,过了这个测试客户才能通过兼容性检查拿认证。
其他已知 Proton 问题
详见 https://partner.steamgames.com/doc/steamdeck/proton,简单列几类:.NET / WPF、Media Foundation、Anti-cheat、Anti-tamper / DRM。Proton 已支持大多数 API,但仍有游戏不能开箱即用,棘手问题可以直接联系 Valve,或上报到 Steamworks Forum、Proton 的 GitHub tracker。
附:播片黑屏的转码方案
游戏在 Deck 上播片有声没画(或黑屏崩),基本就是用了 Proton 不支持的视频编码格式。两种解法:
方案 1:把 MP4 转成 VP9(推荐)
- 用 ShotCut(或同类工具)把过场视频转成 VP9 编码。
- VP9 视频放到原位置。
- 改引用这些视频的代码,比如把
OPN.mp4改成OPN.webm。 - 在代码里规避解码视频导致的黑屏/崩溃。
- 先打 PC 版验证能跑。
- 传到 Deck 测试。
方案 2:Proton-GE
- Deck 切桌面模式。
- 从 https://github.com/GloriousEggroll/proton-ge-custom/releases 下一个 release。
- 没有就建
~/.steam/root/compatibilitytools.d目录。 - 把 tarball 解压进
~/.steam/root/compatibilitytools.d/。 - 重启 Steam。
- 强制使用 Proton-GE 兼容工具。
实测方案 2 有时因未知原因解决不了问题,优先用方案 1 的转码方案。