Foundation Sunshine 配置完全指南:配置文件、全量参数详解与源码级解析

原创2026-10-02 17:42:552,221 阅读
文章标签:音视频后端桌面应用

Foundation Sunshine 配置完全指南:配置文件、全量参数详解与源码级解析

本指南以 Foundation Sunshine 仓库中的 docs/configuration.md 为骨架,完整覆盖 Sunshine(Moonlight 自托管游戏串流主机)的配置文件定位、命令行覆盖方式,以及 General / Input / Audio-Video / Network / Config Files / Advanced 六大分组和 NVENC、QuickSync、AMF、VideoToolbox、Software 五类编码器下的全部可配置项:默认值、取值范围、可选枚举与实战示例一应俱全。读完本文,你将能够手写一份可运行的 sunshine.conf,理解每个参数在源码中的解析与校验路径,并能在多显卡、多显示器、HDR、虚拟显示设备(VDD)与音频回环等复杂场景下精准调参。

一、配置文件位置与启动方式

Sunshine 对大多数用户可直接使用默认配置工作,但部分场景(多显示器、HDR、特殊输入映射、编码器调优)需要进一步定制。配置文件的默认位置因操作系统而异:

OS 配置文件默认目录
Docker /config
Linux ~/.config/sunshine
macOS ~/.config/sunshine
Windows %ProgramFiles%\Sunshine\config

如果你希望把配置放在其他位置,只需在启动 Sunshine 时把完整配置文件路径作为第一个参数传入:

sunshine ~/sunshine_config.conf

apps.json(应用列表)的默认位置与配置文件相同;如需自定义,可通过配置文件中的 file_apps 项修改。

源码佐证:在 src/config.cpp 的 config::parse(int argc, char *argv<a href="https://link.gitcode.com/i/b6e1e171d22f0d8d304ab75a5937f12e" target="_blank">])([src/config.cpp#L1705-L1745)中,命令行参数按以下规则解析:

  • 首个不带 -/= 的参数被赋给 sunshine.config_file(第 1745 行),即自定义配置文件路径;
  • 形如 name=value 的参数会解析成临时变量 cmd_vars,随后覆盖配置文件中的同名项(src/config.cpp#L1780-L1782);
  • 若配置文件不存在,Sunshine 会自动创建一个空文件(src/config.cpp#L1772-L1775),再读取、合并命令行变量并应用。

因此命令行覆盖的优先级高于配置文件内容,可用于临时切换端口、日志级别等而无需改动磁盘上的配置。

虽然官方推荐使用 Web UI(https://localhost:47990/config/)进行配置,但手动编辑 sunshine.conf 同样可行,下文所有示例均可直接写入配置文件。注意:配置文件中的大多数项与 Web UI 保存结果一一对应,个别项(如 keybindings、widget_token)仅在配置文件中可设。

二、General(通用设置)

2.1 locale — 界面语言

  • 描述:Sunshine Web UI 使用的语言。
  • 默认:en
  • 示例:locale = en
  • 可选值:bg(保加利亚语)、cs(捷克语)、de(德语)、en(英语)、en_GB(英式英语)、en_US(美式英语)、es(西班牙语)、fr(法语)、it(意大利语)、ja(日语)、pt(葡萄牙语)、ru(俄语)、sv(瑞典语)、tr(土耳其语)、zh(简体中文)、zh_TW(繁体中文)。

源码佐证:这些取值在 src/config.cpp#L1627-L1644 中通过 string_restricted_f 白名单校验,非法值会被拒绝并回退默认。

2.2 sunshine_name — 客户端显示名称

  • 描述:Moonlight 客户端中显示的主机名。
  • 默认:PC 主机名(hostname)
  • 示例:sunshine_name = Sunshine

2.3 min_log_level — 日志级别

  • 描述:输出到标准输出的最低日志级别。
  • 默认:info
  • 示例:min_log_level = info
  • 可选值:
    取值 含义
    verbose 全部日志;⚠️ 可能影响串流性能
    debug debug 及更高;⚠️ 可能影响串流性能
    info 信息级及以上
    warning 警告级及以上
    error 错误级及以上
    fatal 仅致命错误
    none 不输出日志

源码佐证:src/config.cpp#L1656-L1688 将字符串级别映射为 0–6 的整数(verbose=0 … none=6),同时兼容直接写数字(0~6)。排查串流问题时建议先升到 debug 观察,日常保持 info 以免影响性能。

2.4 global_prep_cmd — 全局准备命令

  • 描述:在所有应用启动前/后执行的命令列表。任一 prep 命令失败,应用启动将被中止。
  • 默认:[]
  • 示例:
    global_prep_cmd = [{"do":"nircmd.exe setdisplay 1280 720 32 144","undo":"nircmd.exe setdisplay 2560 1440 32 144"}]
    
    每个条目包含 do(启动前执行)与 undo(会话结束恢复),典型用途是配合 nircmd.exe 在串流前临时切换分辨率/刷新率,结束后恢复。

源码佐证:src/config.h 中的 prep_cmd_t 结构体(src/config.h#L242-L248)包含 do_cmd、undo_cmd 与 elevated 字段,由 list_prep_cmd_f(vars, "global_prep_cmd", ...)(src/config.cpp#L1490)解析到 config::sunshine.prep_cmds。

2.5 notify_pre_releases — 预发布版本通知

  • 描述:是否通知 Sunshine 新预发布版本。
  • 默认:disabled
  • 示例:notify_pre_releases = disabled

2.6 stop_on_last_video_session — 最后一个视频会话结束时停止应用

  • 描述:启用后,当所有客户端断开时,Sunshine 结束当前应用并恢复显示器设置。内部以最后一个视频会话结束为触发点,同时关闭剩余仅控制类会话。修改后需保存并应用才生效。禁用时保留原有的 Resume 行为。
  • 默认:disabled
  • 示例:stop_on_last_video_session = disabled

该参数的实际运行语义可结合 docs/stop_on_last_video_session.md 中的生命周期说明理解。

2.7 widget_token — Game Bar 小组件访问令牌

  • 描述:本地 Game Bar 小组件端点(/api/widget/state、/api/widget/action)的访问令牌。这些端点仅限 loopback(回环地址)访问,并要求请求头 X-Sunshine-Token 与该值一致。留空时小组件端点保持关闭(返回 404)。此字段不能在 Web UI 编辑,需手动写入 sunshine.conf 并重启 Sunshine;启用时建议生成随机值(如 UUID)。
  • 默认:disabled
  • 示例:widget_token = 5f1e9a3c-2b7d-4e6a-9c1f-8a2b3d4e5f60
  • 小组件侧配置见 gamebar-widget/README.md。

三、Input(输入设置)

3.1 controller — 允许手柄输入

  • 描述:是否允许客户端手柄输入。
  • 默认:enabled
  • 示例:controller = enabled

3.2 gamepad — 主机模拟的手柄类型

  • 描述:在主机上模拟的手柄类型。
  • 默认:auto
  • 示例:gamepad = auto
  • 可选值:
    取值 说明
    ds4 DualShock 4(PS4);仅 Windows
    ds5 DualSense(PS5);Windows 下需要可选 DualSense 组件,组件不可用时自动回退到手柄自动选择;保存后无需重启即对新建控制器生效
    switch Switch Pro 手柄;仅 Linux
    x360 Xbox 360;仅 Windows
    xone Xbox One;仅 Linux

源码佐证:src/config.cpp#L1565 通过 get_supported_gamepad_options()(src/config.cpp#L1184,内部调用 platf::supported_gamepads)动态生成可选列表,因此不同平台 UI 展示的选项不同;运行期切换由 platf::set_global_gamepad_mode 完成(src/config.cpp#L1911-L1914)。

3.3 ds4_back_as_touchpad_click — Back 键触发触摸板点击

  • 描述:允许 Select/Back 输入同时触发 DS4 触摸板点击,方便在 Xinput 设备上模拟触摸板点击。
  • 默认:enabled
  • 示例:ds4_back_as_touchpad_click = enabled
  • 提示:仅在手动设置 gamepad = ds4 时生效,其他手柄模式下不使用。

3.4 motion_as_ds4 — 运动传感器模拟为 DS4

  • 描述:若客户端报告手柄带有运动传感器,则在主机上将其模拟为 DS4 手柄;禁用后,运动传感器不再参与手柄类型自动选择。
  • 默认:enabled
  • 示例:motion_as_ds4 = enabled
  • 提示:仅在 gamepad = auto 时生效。

3.5 touchpad_as_ds4 — 触摸板模拟为 DS4

  • 描述:若客户端报告手柄带触摸板,则在主机上模拟为 DS4 手柄;禁用后触摸板不参与自动选择。
  • 默认:enabled
  • 示例:touchpad_as_ds4 = enabled
  • 提示:仅在 gamepad = auto 时生效。

3.6 back_button_timeout — Back 键长按模拟 Home

  • 描述:Back/Select 键按住超过指定毫秒数后,模拟一次 Home/Guide 键按下。
  • 默认:-1
  • 示例:back_button_timeout = 2000
  • 提示:设为负数(如默认 -1)则不模拟 Home 键。

源码佐证:src/input.cpp 中 back_button_timeout 通过 task_pool.pushDelayed(...) 实现定时触发(src/input.cpp#L1593-L1618)。

3.7 keyboard — 允许键盘输入

  • 默认:enabled;示例:keyboard = enabled

3.8 key_repeat_delay — 按键重复初始延迟

  • 描述:按键开始重复前的初始延迟(毫秒),控制按键重复的快慢。
  • 默认:500
  • 示例:key_repeat_delay = 500

3.9 key_repeat_frequency — 按键重复频率

  • 描述:每秒按键重复次数;支持小数。
  • 默认:24.9
  • 示例:key_repeat_frequency = 24.9

3.10 always_send_scancodes — 始终发送扫描码

  • 描述:发送扫描码可提升与游戏/应用的兼容性,但非美式英语键盘布局的某些客户端可能产生错误输入。若某些应用完全无法接收键盘输入可开启;若客户端按键在主机上产生错误输入则关闭。
  • 默认:enabled
  • 示例:always_send_scancodes = enabled
  • 注意:仅 Windows 生效。

3.11 key_rightalt_to_key_win — 右 Alt 映射为 Win 键

  • 描述:当 Moonlight 无法直接发送 Windows 键时,让 Sunshine 将右 Alt 视为 Windows 键。
  • 默认:disabled
  • 示例:key_rightalt_to_key_win = enabled

源码佐证:src/config.cpp#L1536-L1543 显示,该选项本质上是向 input.keybindings 中追加一条映射 0xA5 -> 0x5B。

3.12 mouse — 允许鼠标输入

  • 默认:enabled;示例:mouse = enabled

3.13 high_resolution_scrolling — 高分辨率滚动

  • 描述:启用后透传 Moonlight 客户端的高分辨率滚动事件;老应用滚动过快时可关闭。
  • 默认:enabled
  • 示例:high_resolution_scrolling = enabled

3.14 native_pen_touch — 原生笔/触摸透传

  • 描述:启用后透传客户端的原生笔/触摸事件;老应用不支持原生笔/触摸时可关闭。
  • 默认:enabled
  • 示例:native_pen_touch = enabled

3.15 keybindings — 按键重映射表

  • 描述:按需重映射按键(例如 Wayland 下客户端无法捕获 Win 键)。元素必须是偶数个,按“源键码, 目标键码”成对排列(键码使用 Windows 虚拟键码)。该选项不出现在 Web UI 中。
  • 默认:
    keybindings = [
      0x10, 0xA0,
      0x11, 0xA2,
      0x12, 0xA4
    ]
    
  • 示例(额外把 0x4A 映射到 0x4B):
    keybindings = [
      0x10, 0xA0,
      0x11, 0xA2,
      0x12, 0xA4,
      0x4A, 0x4B
    ]
    

源码佐证:keybindings 由 map_int_int_f 解析(src/config.cpp#L1534),并在按键处理时于 src/input.cpp#L834-L835 查表替换键码。

四、Audio/Video(音频/视频设置)

4.1 audio_sink — 音频回环输出设备

  • 描述:用于音频回环的音频输出设备名。
  • 默认:Sunshine 自动选择默认音频设备。
  • 各平台查找设备名的方法:
    • Linux + PulseAudio:
      pacmd list-sinks | grep "name:"
      
    • Linux + PipeWire:
      pactl info | grep Source
      # 某些情况下 Source 不可用,可尝试 Sink:
      pactl info | grep Sink
      
    • macOS:受系统限制 Sunshine 只能访问麦克风;串流系统音频需借助 Soundflower 或 BlackHole 等虚拟声卡。
    • Windows:在命令提示符或 PowerShell 中执行:
      %ProgramFiles%\Sunshine\tools\audio-info.exe
      
      若有多个同名声卡,改用 Device ID。Windows 下留空会捕获当前默认设备,并跟随串流期间默认设备的切换;显式指定设备后,即使 Windows 默认设备变化也保持该采集端点不变。
  • 示例:
    • Linux:audio_sink = alsa_output.pci-0000_09_00.3.analog-stereo
    • macOS:audio_sink = BlackHole 2ch
    • Windows:audio_sink = Speakers (High Definition Audio Device)
  • 注意:需要静音主机扬声器时请使用 virtual_sink,而不是依赖 audio_sink 本身。

4.2 virtual_sink — 虚拟音频设备

  • 描述:指定虚拟音频设备(如 Steam Streaming Speakers),让 Sunshine 在静音扬声器的同时正常串流音频。
  • 默认:无(n/a)
  • 示例:virtual_sink = Steam Streaming Speakers
  • 常见虚拟声卡方案:
    • Steam Streaming Speakers(Linux、macOS、Windows):需已安装 Steam,并启用 install_steam_audio_drivers 或至少使用过一次 Steam 远程畅玩以安装驱动。
    • Virtual Audio Cable(macOS、Windows)。

4.3 keep_sink_default — 保持输出设备为系统默认

  • 描述:Windows 下,串流期间保持所选音频输出设备为系统默认设备;若其他应用改动了默认播放设备,Sunshine 会尝试重新选中已配置(或自动选择)的 sink。禁用时,串流期间交由 Windows 自行决定默认播放设备。
  • 默认:Disabled

4.4 stream_audio — 是否串流音频

  • 描述:是否串流音频;串流“无头显示器”作为第二显示器时关闭它很有用。
  • 默认:enabled
  • 示例:stream_audio = disabled

4.5 microphone_redirect_backend — 麦克风重定向后端

  • 描述:选择如何将 Moonlight 的麦克风 PCM 暴露给 Windows 应用:
    取值 说明
    vb_cable 写入 VB-CABLE 渲染端点,应用从其配对端点采集
    usbip_experimental 直接将 PCM 注入已签名的 Virtual Device Host 麦克风 IN 端点;不经渲染-采集回环
    auto 先尝试 USB/IP,失败则回退 VB-CABLE
    disabled 拒绝麦克风重定向,但保留 Moonlight 端麦克风功能设置
  • 默认:vb_cable
  • 示例:microphone_redirect_backend = auto
  • ⚠️ USB/IP 后端为实验特性,目前使用 DualSense 复合原型 profile;仅 Windows 支持。

4.6 stream_mic — 接收客户端麦克风音频

  • 描述:是否接受兼容 Moonlight 客户端的麦克风音频并重定向到配置的 Windows 麦克风后端。
  • 默认:enabled
  • 示例:stream_mic = disabled

4.7 install_steam_audio_drivers — 安装 Steam 音频驱动

  • 描述:安装 Steam Streaming Speakers 驱动(若已安装 Steam),以支持环绕声与主机音频静音。
  • 默认:enabled;示例:install_steam_audio_drivers = enabled
  • 仅 Windows 支持。

4.8 adapter_name — 选择编码 GPU

  • 描述:选择要串流的显卡。
  • 默认:Sunshine 自动选择默认显卡。
  • 查找方法:
    • Linux + VA-API:VA-API 不要求编码 GPU 与显示 GPU 相同。
      ls /dev/dri/renderD*  # 列出所有支持 VAAPI 的设备
      vainfo --display drm --device /dev/dri/renderD129 | \
        grep -E "((VAProfileH264High|VAProfileHEVCMain|VAProfileHEVCMain10).*VAEntrypointEncSlice)|Driver version"
      
      受支持的最低要求是具备 VAProfileH264High : VAEntrypointEncSlice。
    • Windows:
      %ProgramFiles%\Sunshine\tools\dxgi-info.exe
      
      注意:混合显卡(hybrid graphics)系统上,DXGI 报告的输出连接取决于应用被配置使用哪块显卡,不能可靠反映显示器的物理连接方式。
  • 示例:
    • Linux:adapter_name = /dev/dri/renderD128
    • Windows:adapter_name = Radeon RX 580 Series

4.9 output_name — 选择串流显示器

  • 描述:选择要串流的显示器编号。
  • 默认:Sunshine 自动选择默认显示器。
  • 查找方法:
    • Linux:启动日志中可见显示器列表,使用括号内的 id:
      Info: Detecting displays
      Info: Detected display: DVI-D-0 (id: 0) connected: false
      Info: Detected display: HDMI-0 (id: 1) connected: true
      Info: Detected display: DP-0 (id: 2) connected: true
      Info: Detected display: DP-1 (id: 3) connected: false
      Info: Detected display: DVI-D-1 (id: 4) connected: false
      
      例如 1。
    • macOS:同理使用日志中的 id:
      Info: Detected display: Monitor-0 (id: 3) connected: true
      Info: Detected display: Monitor-1 (id: 2) connected: true
      
      例如 3。
    • Windows:执行 %ProgramFiles%\Sunshine\tools\dxgi-info.exe。
  • 示例:
    • Linux:output_name = 0
    • macOS:output_name = 3
    • Windows:output_name = \\.\DISPLAY1

4.10 显示设备(Display Device)系列:dd_* 选项(仅 Windows)

以下选项用于串流时对显示设备做强制校验与附加配置,核心由 dd_configuration_option 开关控制。

dd_configuration_option — 显示设备的强制校验与附加配置模式:

  • 默认:disabled
  • 示例:dd_configuration_option = ensure_only_display
  • 可选值:
    取值 行为
    disabled 不做任何附加配置(会禁用所有 dd_ 配置项)
    verify_only 仅校验显示器为激活状态(强制步骤,无附加动作)
    ensure_active 显示器未激活则激活它
    ensure_primary 未激活则激活,并设为主显示器
    ensure_only_display 未激活则激活,并关闭其他所有显示器

源码佐证:这些模式映射到 src/display_device/parsed_config.h 中的 device_prep_e 枚举(no_operation/ensure_active/ensure_primary/ensure_only_display/ensure_secondary,parsed_config.h#L27-L33),由 device_prep_from_view 完成字符串→枚举转换(src/display_device/parsed_config.cpp#L452-L464),拓扑的保存/恢复逻辑在 src/platform/windows/display_device/settings.cpp 中实现。

dd_resolution_option — 分辨率配置模式:

  • 默认:auto
  • 示例:dd_resolution_option = manual
  • 可选值:disabled(不附加配置)、auto(按客户端请求分辨率切换,需 Moonlight 开启“优化游戏设置”)、manual(按 dd_manual_resolution 指定值切换,同样需客户端开启“优化游戏设置”)。

dd_manual_resolution — 手动分辨率:

  • 默认:n/a;示例:dd_manual_resolution = 1920x1080
  • 前提:dd_resolution_option = manual。

dd_refresh_rate_option — 刷新率配置模式:

  • 默认:auto;示例:dd_refresh_rate_option = manual
  • 可选值:disabled(不附加配置)、auto(按客户端请求的 FPS 切换)、manual(按 dd_manual_refresh_rate 指定值切换)。

dd_manual_refresh_rate — 手动刷新率:

  • 默认:n/a;示例(注意应为 dd_manual_refresh_rate,原文档此处存在笔误,写成 dd_manual_resolution):
    dd_manual_refresh_rate = 120
    dd_manual_refresh_rate = 59.95
    
  • 前提:dd_refresh_rate_option = manual。

dd_hdr_option — HDR 配置模式:

  • 默认:auto;示例:dd_hdr_option = disabled
  • 可选值:disabled(不附加配置)、auto(若显示器支持则按客户端请求切换 HDR 状态)。

dd_wa_hdr_toggle_delay — VDD HDR 伪色缓解:

  • 描述:使用虚拟显示设备(VDD)串流时,可能错误显示 HDR 颜色;Sunshine 可通过“先关 HDR、等待指定毫秒、再开 HDR”来缓解。值为 0 时关闭该 workaround(默认);0–3000 毫秒区间内生效,推荐约 500 毫秒。除非确实遇到 HDR 问题,否则不要开启,因为它直接影响串流启动时间。
  • 默认:0;示例:dd_wa_hdr_toggle_delay = 500
  • 独立于 dd_hdr_option 工作。

dd_config_revert_delay — 配置回滚延迟:

  • 描述:应用关闭或最后一个会话结束后、回滚显示配置前的额外等待毫秒数,主要用于应用间快速切换时更平滑的过渡。
  • 默认:3000;示例:dd_config_revert_delay = 1500

dd_config_revert_on_disconnect — 断开即回滚:

  • 描述:启用后,在所有客户端断开(而非应用关闭或会话终止)时回滚显示配置,便于不关闭当前应用就回到物理使用主机。⚠️ 部分应用在显示配置变更时可能工作异常。
  • 默认:disabled;示例:dd_config_revert_on_disconnect = enabled

4.11 max_bitrate — 最大码率

  • 描述:Sunshine 编码的最大码率(Kbps)。设为 0 时始终使用 Moonlight 请求的码率。
  • 默认:0
  • 示例:max_bitrate = 5000

源码佐证:码率上限与 FEC 的配合在 src/video.cpp 中体现,encoder_bitrate_from_total_bitrate / encoder_bitrate_for_total_request(src/video.cpp#L225-L240)按 FEC 百分比从总码率反推编码器实际码率,cap_initial_encoder_bitrate(src/video.cpp#L244-L252)在会话开始时对初始码率做封顶。

五、Network(网络设置)

5.1 upnp — 自动端口映射

  • 描述:Sunshine 是否尝试为互联网串流打开端口(UPnP)。
  • 默认:disabled;示例:upnp = enabled

5.2 address_family — 地址族

  • 描述:Sunshine 使用的地址族。
  • 默认:ipv4
  • 示例:address_family = both
  • 可选值:ipv4(仅 IPv4)、both(IPv4+IPv6)。

5.3 bind_address — 绑定 IP

  • 描述:将 Sunshine 绑定到指定 IP。多网卡场景下用于限定监听接口;不设置时绑定所有可用接口(IPv4 为 0.0.0.0,IPv6 为 ::)。地址必须对系统有效且与 address_family 匹配;使用 IPv6 时即使 address_family = both 也可指定 IPv6 地址。
  • 默认:空(绑定所有接口)
  • 示例:IPv4 bind_address = 192.168.1.100;IPv6 bind_address = 2001:db8::1;回环 bind_address = 127.0.0.1

5.4 port — 端口族

  • 描述:Sunshine 使用的端口族基址。修改它会像配置 UI 中显示的那样整体偏移其他端口。
  • 默认:47989
  • 范围:1029-65514
  • 示例:port = 47989

5.5 origin_web_ui_allowed — Web UI 访问来源

  • 描述:允许访问 HTTPS Web UI 的远端来源范围。
  • 默认:lan
  • 示例:origin_web_ui_allowed = lan
  • 可选值:pc(仅本机可访问)、lan(仅局域网设备)、wan(任何人可访问)。

5.6 external_ip — 外部 IP

  • 描述:未指定时 Sunshine 自动探测外部 IP。
  • 默认:自动探测
  • 示例:external_ip = 123.456.789.12

5.7 lan_encryption_mode — 局域网加密模式

  • 描述:局域网串流何时启用加密。⚠️ 加密可能降低串流性能,尤其性能较弱的主机/客户端。
  • 默认:0
  • 可选值:
    取值 行为
    0 不使用加密
    1 客户端支持时使用加密
    2 强制加密,拒绝未加密连接

5.8 wan_encryption_mode — 广域网加密模式

  • 描述:互联网串流何时启用加密。⚠️ 同上,可能影响性能。
  • 默认:1
  • 可选值:同 lan_encryption_mode(0/1/2)。

5.9 ping_timeout — 客户端数据超时

  • 描述:关闭串流前等待 Moonlight 数据的毫秒数。
  • 默认:10000
  • 示例:ping_timeout = 10000

六、Config Files(文件设置)

6.1 file_apps — 应用列表文件

  • 描述:应用配置文件路径,内容为可由 Moonlight 启动的应用 JSON 列表。
  • 默认:apps.json
  • 示例:file_apps = apps.json

源码佐证:src/config.cpp#L1517-L1530 中,若目标路径不存在,会自动从内置资源(SUNSHINE_ASSETS_DIR "/apps.json")复制一份。各平台内置模板见 src_assets/linux/assets/apps.json、src_assets/windows/assets/apps.json、src_assets/macos/assets/apps.json;应用条目格式示例可参考 docs/app_examples.md。

6.2 credentials_file — 用户凭据文件

  • 描述:Web UI 用户凭据存储文件。
  • 默认:sunshine_state.json(注意源码中 credentials_file 默认取自 file_state,见 src/config.cpp#L1465-L1467)
  • 示例:credentials_file = sunshine_state.json

6.3 log_path — 日志文件

  • 描述:Sunshine 日志存储路径。
  • 默认:sunshine.log
  • 示例:log_path = sunshine.log

6.4 pkey — Web UI 与配对私钥

  • 描述:Web UI 与 Moonlight 客户端配对使用的私钥。为最佳兼容性,应为 RSA-2048 私钥。⚠️ 并非所有 Moonlight 客户端支持 ECDSA 或非 2048 位 RSA。
  • 默认:credentials/cakey.pem
  • 示例:pkey = /dir/pkey.pem

6.5 cert — Web UI 与配对证书

  • 描述:Web UI 与 Moonlight 客户端配对使用的证书。最佳兼容性要求 RSA-2048 公钥。
  • 默认:credentials/cacert.pem
  • 示例:cert = /dir/cert.pem

6.6 file_state — 状态文件

  • 描述:Sunshine 当前状态存储文件。
  • 默认:sunshine_state.json
  • 示例:file_state = sunshine_state.json

七、Advanced(高级设置)

7.1 fec_percentage — 前向纠错百分比

  • 描述:每个视频帧中,每数据包的纠错包百分比。⚠️ 越高抗网络丢包越强,但带宽占用越高。
  • 默认:20
  • 范围:1-255
  • 示例:fec_percentage = 20

7.2 qp — 量化参数

  • 描述:部分设备不支持恒定码率(CBR),此时改用 QP。⚠️ 值越大压缩越强、画质越低。
  • 默认:28
  • 示例:qp = 28

7.3 min_threads — 编码最小线程数

  • 描述:用于编码的最小 CPU 线程数。⚠️ 增大该值会略微降低编码效率,但通常值得,以换取更多 CPU 核参与编码;理想值是在目标串流设置下能够稳定编码的最低值。
  • 默认:2
  • 示例:min_threads = 2

7.4 hevc_mode — HEVC 支持模式

  • 描述:是否允许客户端请求 HEVC Main / HEVC Main10 流。⚠️ HEVC 编码更耗 CPU,软件编码下开启可能降低性能。
  • 默认:0
  • 示例:hevc_mode = 2
  • 可选值:
    取值 行为
    0 按编码器能力自动宣告支持 HEVC(推荐)
    1 不宣告支持 HEVC
    2 宣告支持 HEVC Main profile
    3 宣告支持 HEVC Main 与 Main10(HDR)

7.5 av1_mode — AV1 支持模式

  • 描述:是否允许客户端请求 AV1 Main 8-bit / 10-bit 流。⚠️ AV1 编码更耗 CPU。
  • 默认:0
  • 示例:av1_mode = 2
  • 可选值:
    取值 行为
    0 按编码器能力自动宣告支持 AV1(推荐)
    1 不宣告支持 AV1
    2 宣告支持 AV1 Main 8-bit
    3 宣告支持 AV1 Main 8-bit 与 10-bit(HDR)

源码佐证:hevc_mode/av1_mode 在 src/config.cpp#L1203-L1204 通过 int_between_f(vars, ..., {0, 3}) 校验取值范围。

7.6 capture — 强制采集方式

  • 描述:强制指定屏幕采集方法。
  • 默认:自动(按上表顺序选用第一个可用方法)。
  • 示例:capture = kms
  • 可选值:
    取值 说明
    nvfbc NVIDIA Frame Buffer Capture,直接采集到 GPU 内存,通常对 NVIDIA 卡最快;不支持原生 Wayland 且不兼容 XWayland;仅 Linux
    wlr 通过 DMA-BUF 采集 wlroots 系 Wayland 合成器;仅 Linux
    kms 内核 DRM/KMS 采集,要求 Sunshine 具备 cap_sys_admin 能力;仅 Linux
    x11 基于 XCB,最慢、最耗 CPU,尽量避开;仅 Linux
    ddx DirectX Desktop Duplication API,Windows 上支持良好;仅 Windows
    wgc (beta)Windows.Graphics.Capture;仅 Windows;⚠️ 与 Sunshine 服务模式不兼容

7.7 encoder — 强制编码器

  • 描述:强制指定编码器。
  • 默认:使用第一个可用的编码器。
  • 示例:encoder = nvenc
  • 可选值:
    取值 说明
    nvenc NVIDIA 显卡
    quicksync Intel 显卡
    amdvce AMD 显卡
    vaapi Linux VA-API(AMD、Intel)
    software CPU 软件编码

八、NVIDIA NVENC 编码器专项

本节所有选项仅在使用 NVENC 编码器(encoder = nvenc)时生效。

8.1 nvenc_preset — 性能预设

  • 描述:NVENC 性能预设。数值越大压缩率越高(同码率下画质越好),但编码延迟增加。仅在受网络或解码器限制时建议修改;否则提高码率效果相近。
  • 默认:4
  • 可选值:1(P1,最快)… 7(P7,最慢),4 为默认。

8.2 nvenc_twopass — 双通道模式

  • 描述:启用双通道编码,可检测更多运动矢量、更合理分配帧间码率、更严格贴合码率上限。不建议关闭,否则可能偶发码率超调并引发丢包。
  • 默认:quarter_res
  • 可选值:disabled(单通道,最快)、quarter_res(双通道,首通道四分之一分辨率,较快)、full_res(双通道,首通道全分辨率,较慢)。

8.3 nvenc_frame_budget_guard — 帧预算保护

  • 描述:当预估编码时间无法落在帧间隔的固定比例内时,自动降低性能预设(例如单 NVENC 单元的 GPU 上,4K 120fps 会把默认 P4 压到 P1),确保编码不落后于串流。预估基于较新的高端 GPU 并留保守余量。最新会话的实际生效预设会通过配置 API 的 active_nvenc_frame_budget 字段上报,钳制行为以 warning 级别记日志。
  • 默认:enabled
  • 示例:nvenc_frame_budget_guard = disabled

8.4 nvenc_spatial_aq — 空间自适应量化

  • 描述:默认启用。给画面平坦区域分配更高 QP,在受限码率下提升主观画质。
  • 默认:enabled;示例:nvenc_spatial_aq = enabled

8.5 nvenc_vbv_increase — 单帧 VBV/HRD 放宽

  • 描述:单帧 VBV/HRD 上限的百分比放宽。默认 Sunshine 使用单帧 VBV/HRD,即单帧编码大小预期不超过“码率 ÷ 帧率”;放宽后可起到低延迟可变码率作用,但网络无缓冲余量时可能丢包。最大 400(对应编码帧上限放大 5 倍)。
  • 默认:0;范围:0-400;示例:nvenc_vbv_increase = 0

8.6 nvenc_realtime_hags — HAGS 实时调度优先级

  • 描述:Windows 启用硬件加速 GPU 调度(HAGS)时,在 NVENC 使用实时 GPU 调度优先级。当前 NVIDIA 驱动在 HAGS 开启、实时优先级且 VRAM 占用接近上限时可能编码器冻结;关闭可将优先级降为 high,规避冻结,代价是 GPU 高负载下采集性能下降。
  • 默认:enabled;示例:nvenc_realtime_hags = enabled
  • 仅 Windows。

8.7 nvenc_split_encode — 多 NVENC 单元分片编码

  • 描述:将每帧编码拆分到多个 NVENC 硬件单元,显著降低编码延迟,压缩效率损失极小;GPU 只有单个 NVENC 单元时忽略该选项。
  • 默认:driver_decides
  • 可选值:disabled、driver_decides(由驱动决定)、enabled、two_strips(强制 2 分片,需 2+ 引擎)、three_strips(强制 3 分片,需 3+ 引擎)、four_strips(强制 4 分片,需 4+ 引擎)。
  • 仅 Windows。

8.8 nvenc_lookahead_depth — 前瞻帧数

  • 描述:编码前瞻帧数,改善复杂场景的运动估计与码率分配,提升画质;值越大延迟越高;0 表示关闭。
  • 默认:0;范围:0-32;示例:nvenc_lookahead_depth = 16
  • 需 NVENC SDK 13.0(1202)或更新。

8.9 nvenc_lookahead_level — 前瞻质量等级

  • 描述:前瞻质量等级,等级越高画质越好、性能越低;仅在 nvenc_lookahead_depth > 0 时生效。
  • 默认:disabled
  • 可选值:disabled(等同等级 0)、0(最低质量最快)、1、2、3(最高质量最慢)、autoselect(由驱动自动选择)。
  • 需 NVENC SDK 13.0(1202)或更新。

8.10 nvenc_rate_control — 码率控制模式

  • 描述:CBR(恒定码率)提供固定码率,适合低延迟串流;VBR(可变码率)按场景复杂度浮动,复杂场景画质更好但码率波动。
  • 默认:cbr
  • 可选值:cbr(恒定码率,低延迟最佳)、vbr(可变码率,复杂场景更佳)。

8.11 nvenc_target_quality — VBR 目标质量

  • 描述:VBR 模式的目标质量等级,值越低画质越高;0 表示自动选择;仅在 VBR 码率控制下使用。H.264/HEVC 范围 0-51,AV1 范围 0-63。
  • 默认:0;范围:0-63;示例:nvenc_target_quality = 28

8.12 nvenc_temporal_filter — 时域滤波强度

  • 描述:编码前的时域滤波强度,降低噪声、提升压缩效率(尤其自然内容);等级越高降噪越好但可能轻微模糊。
  • 默认:disabled
  • 可选值:disabled(关闭)、0(等同关闭)、4(最大强度)。
  • ⚠️ 要求 frameIntervalP >= 5,且与 zeroReorderDelay、立体 MVC 不兼容;需 NVENC SDK 13.0(1202)或更新。

8.13 nvenc_latency_over_power — 高功率模式

  • 描述:NVIDIA 驱动的自适应 P-State 算法不适合低延迟串流,因此 Sunshine 显式请求高功率模式。⚠️ 不建议关闭,否则编码延迟可能显著增加。
  • 默认:enabled;示例:nvenc_latency_over_power = enabled
  • 仅 Windows。

8.14 nvenc_opengl_vulkan_on_dxgi — OpenGL/Vulkan 以 DXGI 呈现

  • 描述:Sunshine 无法以满帧率采集全屏 OpenGL/Vulkan 程序,除非它们呈现在 DXGI 之上。启用后 Sunshine 将系统全局的 Vulkan/OpenGL 呈现方式改为“Prefer layered on DXGI Swapchain”;这是系统级设置,Sunshine 退出时会还原。
  • 默认:enabled;示例:nvenc_opengl_vulkan_on_dxgi = enabled
  • 仅 Windows。

8.15 nvenc_h264_cavlc — H.264 偏好 CAVLC

  • 描述:NVENC 的 H.264 偏好使用 CAVLC 熵编码而非 CABAC。CAVLC 较陈旧,同画质约多耗 10% 码率,但软件解码略快。
  • 默认:disabled;示例:nvenc_h264_cavlc = disabled
  • 仅在使用 H.264 格式且编码器为 NVENC 时生效。

8.16 nvenc_cuda_array_input — CUDA Array 输入

  • 描述:将 10-bit 4:4:4 帧通过 block-linear CUDA array(而非 pitch-linear 设备指针)送入 NVENC。仅 Windows;要求驱动暴露 NVENC 13.1 或更新,旧驱动上会记录日志并继续使用设备指针。编码器探测始终使用设备指针,因此该选项只影响真实串流会话。
  • 默认:disabled;示例:nvenc_cuda_array_input = disabled
  • ⚠️ 实验特性:部分驱动在 array 路径下产生重影输出,除非协助测试 4:4:4 路径否则保持关闭;若串流异常,关闭该选项并重启串流。

九、Intel QuickSync 编码器专项

仅在使用 encoder = quicksync 时生效。

9.1 qsv_preset — 预设

  • 默认:medium
  • 可选值(速度→质量):veryfast(最快,质量最低)、faster、fast、medium(默认)、slow、slower、veryslow(最慢,质量最高)。

9.2 qsv_coder — 熵编码方式

  • 描述:H.264 下的熵编码方式。
  • 默认:auto
  • 可选值:auto(由 ffmpeg 决定)、cabac(质量更高)、cavlc(解码更快)。
  • 仅在使用 H.264 且编码器为 quicksync 时生效。

9.3 qsv_slow_hevc — 老 GPU 上启用 HEVC

  • 描述:在老 Intel GPU(H.264 仅支持低功率编码)上启用 HEVC 编码。⚠️ 开启后串流性能可能显著下降。
  • 默认:disabled;示例:qsv_slow_hevc = disabled

十、AMD AMF 编码器专项

仅在使用 encoder = amdvce 时生效。

10.1 amd_usage — 使用场景 profile

  • 描述:使用场景 profile 决定一组基础编码参数。后续 AMF 选项会覆盖其中一部分设置,但 profile 中存在无法在其他地方覆盖的隐藏参数。
  • 默认:ultralowlatency
  • 可选值:transcoding(转码,最慢)、webcam(摄像头,慢)、lowlatency_high_quality(低延迟高质量,快)、lowlatency(低延迟,更快)、ultralowlatency(超低延迟,最快)。

10.2 amd_rc — 码率控制

  • 默认:vbr_latency
  • 可选值:cqp(恒定 QP)、cbr(恒定码率)、vbr_latency(可变码率、延迟受限)、vbr_peak(可变码率、峰值受限)。
  • ⚠️ vbr_latency 通常效果最佳,但仍可能轻微超调码率;启用 HRD 能更好地约束各码率模式的峰值码率,但部分显卡可能出现编码伪影。

10.3 amd_enforce_hrd — 强制 HRD

  • 描述:启用 Hypothetical Reference Decoder(HRD)约束以帮助限制目标码率。⚠️ 已知在某些显卡上引起编码伪影或损害编码质量。
  • 默认:disabled;示例:amd_enforce_hrd = disabled

10.4 amd_quality — 质量 profile

  • 默认:balanced
  • 可选值:speed(偏速度)、balanced(均衡)、quality(偏质量)。

10.5 amd_preanalysis — 预分析

  • 描述:预分析可提升编码质量,但增加延迟。
  • 默认:disabled;示例:amd_preanalysis = disabled

10.6 amd_vbaq — 方差自适应量化

  • 描述:VBAQ 将更多比特优先分配给平滑区域,提升主观视觉质量。
  • 默认:enabled;示例:amd_vbaq = enabled

10.7 amd_coder — 熵编码方式

  • 默认:auto
  • 可选值:auto(ffmpeg 决定)、cabac(解码更快)、cavlc(质量更高)。
  • 仅在使用 H.264 且编码器为 amdvce 时生效(注意:与 QSV 的 qsv_coder 中 cabac/cavlc 的说明相反,AMF 文档标注 cabac 为“解码更快”、cavlc 为“质量更高”,以各编码器实际行为为准)。

十一、VideoToolbox 编码器专项(macOS)

以下选项仅在 macOS 上生效。

11.1 vt_coder — 熵编码方式

  • 默认:auto
  • 可选值:auto(ffmpeg 决定)、cabac(解码更快)、cavlc(质量更高)。

11.2 vt_software — 软件编码

  • 描述:强制 Video Toolbox 使用软件编码。
  • 默认:auto
  • 可选值:auto(ffmpeg 决定)、disabled(禁用软件编码)、allowed(允许软件编码)、forced(强制软件编码)。

11.3 vt_realtime — 实时编码

  • 描述:实时编码。⚠️ 关闭可能导致帧编码延迟或丢帧。
  • 默认:enabled;示例:vt_realtime = enabled

十二、Software(软件编码器)专项

仅在使用 encoder = software 时生效。预设概念来自 FFmpeg:预设是编码速度与压缩率的折中集合;预设越慢压缩率越好(同目标文件大小/恒定码率下画质更高,恒定质量下节省码率)。原则是:用你能忍受的最慢预设。

12.1 sw_preset — 预设

  • 默认:superfast
  • 可选值:ultrafast(最快)、superfast、veryfast、faster、fast、medium、slow、slower、veryslow(最慢)。

12.2 sw_tune — 调优模式

  • 描述:按输入内容特征微调编码设置。
  • 默认:zerolatency
  • 可选值:
    取值 适用场景
    film 高质量电影内容;降低 deblocking
    animation 卡通动画;更高 deblocking 与更多参考帧
    grain 保留老胶片的颗粒结构
    stillimage 幻灯片类内容
    fastdecode 关闭部分滤镜以加速解码
    zerolatency 快速编码与低延迟串流

十三、配置解析与校验机制(源码视角)

理解配置项的解析路径,有助于排查“为什么我改的值没生效”:

  1. 读取与合并:config::parse(src/config.cpp#L1705)先解析命令行(sunshine <path> 指定文件、name=value 生成覆盖变量),再读取配置文件、将命令行变量 insert_or_assign 进变量表(src/config.cpp#L1780-L1782),最后统一交给 apply_config。
  2. 类型化校验:apply_config 中各类参数使用专门的解析辅助函数:string_f(字符串)、bool_f(enabled/disabled)、int_between_f(限定区间整数,如 hevc_mode/av1_mode 的 {0,3}、fec_percentage 的 {1,255})、string_restricted_f(白名单字符串,如 locale)、path_f(路径)、list_prep_cmd_f(prep 命令列表)、map_int_int_f(键值映射,如 keybindings)。超出范围或非法取值会被拒绝并记录 warning,然后回退默认值。
  3. 显示设备配置的枚举化:Windows 专属的 dd_* 选项在 src/display_device/parsed_config.h 中建模为 device_prep_e(拓扑准备:ensure_active/ensure_primary/ensure_only_display 等)、resolution_change_e、refresh_rate_change_e、hdr_prep_e,由 src/display_device/parsed_config.cpp#L452-L499 的 *_from_view 做字符串→枚举转换,并在 src/platform/windows/display_device/settings.cpp 中执行拓扑、模式、HDR 的保存/修改/回滚。
  4. 未知配置项告警:当日志级别 ≤ info 时,未识别的配置项会以 Warning: Unrecognized configurable option <a href="https://link.gitcode.com/i/28ada3ee37912753717634db7d90634a" target="_blank">...] 打印([src/config.cpp#L1697-L1699)——排查拼写错误最直接的手段。

十四、常见调参场景速查

  • 低延迟优先:nvenc_preset = 1、nvenc_twopass = disabled、nvenc_split_encode = enabled(需多 NVENC 单元)、保持 nvenc_latency_over_power = enabled、sw_tune = zerolatency(软件编码时)。
  • 画质优先(带宽充足):提高 max_bitrate 或让 Moonlight 自行请求码率(max_bitrate = 0),nvenc_preset 保持默认或小幅上调。
  • 多显示器/虚拟显示器串流:用 output_name 选择目标显示器;Windows 下用 dd_configuration_option = ensure_only_display 等模式在串流期间独占显示器,配 dd_config_revert_delay/dd_config_revert_on_disconnect 控制回滚时机;VDD 场景可关注 dd_wa_hdr_toggle_delay 缓解 HDR 伪色。
  • 音频静音串流:audio_sink 选实际回环设备,virtual_sink 指定 Steam Streaming Speakers / Virtual Audio Cable,并配合 install_steam_audio_drivers(Windows)。
  • 互联网串流:upnp = enabled(或手动端口映射)、wan_encryption_mode = 2 强制加密、external_ip 指定公网 IP。
  • 输入异常:键盘错位关 always_send_scancodes(Windows);无法发送 Win 键用 key_rightalt_to_key_win 或自定义 keybindings;老应用滚动过快关 high_resolution_scrolling。

提示:本文所有参数值均以当前仓库 docs/configuration.md 与 src/config.cpp 等源码为准;不同版本、不同平台的可用取值可能不同,修改后建议查看启动日志确认参数被正确识别。

登录后查看全文
foundation-sunshine