news 2026/9/20 9:54:12

Sunshine 实战:把 PC 画面串到任意屏幕的 4 个关键动作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sunshine 实战:把 PC 画面串到任意屏幕的 4 个关键动作

Sunshine 实战:把 PC 画面串到任意屏幕的 4 个关键动作

【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine

周末躺在沙发想在大屏上打游戏,主机却搁在书房,电视只能黑屏干瞪眼。Sunshine 就是干这个的:一个自托管游戏串流主机,装在游戏 PC 上,把画面硬件编码后推给电视、平板、手机里的 Moonlight 客户端。开源免费,无订阅费。

关键信息说明
主机平台Windows、Linux、macOS(实验性)、FreeBSD
串流客户端Moonlight,可装在电视、平板、手机、PC 等任意设备
编码方案NVENC / QuickSync / AMF / VAAPI / VideoToolbox,CPU 软编兜底
管理入口浏览器 Web UI,默认 https://localhost:47990
费用开源免费,无订阅

原理速览:它凭什么做到

数据通路分三段:抓取、编码、发送。抓取走各平台原生通道——Windows 用 DXGI 或 WGC,Linux 用 KMS、X11 或 NvFBC,macOS 用 ScreenCaptureKit。然后是 GPU 专用编码单元把画面压成视频流,这一步最关键:硬件编码把 CPU 从压缩里解放出来,是串流不卡的核心原因。最后压缩流经网络送到 Moonlight 客户端,在另一块屏上解码播放。说白了,就是把 GPU 编码结果装进信封,沿网线寄给另一块屏幕。

延迟表现还取决于发送方式:Sunshine 每 16ms 突发发一帧(对应 60fps),中间网络设备缓冲不够就会丢数据,这也是后文排障里丢包问题的根源。编码方案按显卡自动选,在 Web UI 的 AudioVideo 页签可切换,各平台支持矩阵如下:

编码 API显卡LinuxmacOSWindows
NVENCNVIDIA支持支持
QuickSyncIntel支持
AMFAMD支持
VAAPIAMD / Intel / NVIDIA支持
VideoToolboxApple / Intel支持
Vulkan VideoAMD / Intel / NVIDIA实验性
软编(CPU)任意支持支持支持

核心实现分散在 src/nvenc/(NVENC)和 src/platform/linux/(VAAPI、Vulkan Video 等)。没有独显就选软编,能跑,但 1080p 下 CPU 占用明显上升。

五分钟跑通最短闭环

第 1 步:安装。按你的系统选一条:

# Windows winget install LizardByte.Sunshine # Linux(Flatpak) flatpak install --system flathub dev.lizardbyte.app.Sunshine # macOS brew tap LizardByte/homebrew && brew install sunshine

完整安装包列表(AppImage、.deb、.rpm、FreeBSD pkg 等)见 docs/getting_started.md。卡住了:翻到文末"继续深挖"。

第 2 步:启动并打开 Web UI。Linux 上直接起用户服务,否则在终端跑sunshine

systemctl --user --now enable app-dev.lizardbyte.app.Sunshine

浏览器打开 https://localhost:47990,"不安全网站"的警告来自自签名证书,忽略即可。首次启动会要求你创建用户名和密码——当场记下来,忘了只能重置。47990 打不开直接查"踩坑速查"。

第 3 步:配对客户端。Moonlight 里添加这台主机,客户端会显示一个 PIN。登录 Web UI,在顶部导航的 PIN 页输入该 PIN,给设备起个名字,配对完成。完整配对流程见 docs/getting_started.md 的 Configuration 章节。

三个值得知道的点

应用管理:给每个游戏一个启动入口

Web UI 里的应用列表就是 Moonlight 客户端看到的入口。每个应用有名称、可执行文件、工作目录,还能挂prep-cmd(启动前执行的命令)。默认列表来自 src_assets/linux/assets/apps.json,其中 Steam 大屏的写法:

{ "name": "Steam Big Picture", "detached": ["setsid steam steam://open/bigpicture"], "prep-cmd": [ { "do": "", "undo": "setsid steam steam://close/bigpicture" } ], "image-path": "steam.png" }

三条行为规则要知道:启动新应用会先终止正在串流的应用;prep-cmd失败则放弃启动;应用退出,串流随之结束。客厅里想一键拉起某个游戏或 Steam 大屏时用得上。

虚拟手柄:客户端的手柄"变"成主机的手柄

你在 Moonlight 端插着 Xbox、DualSense 或 Switch Pro,Sunshine 会在主机上虚拟出同类型手柄传给游戏,游戏看到的就是它。Windows 和 Linux 支持最全:通用、DS4、DS5、Switch Pro、Xbox 360/One/Series 全支持;macOS 暂不支持。Windows 主机可另装 Virtual HID Driver 解锁完整特性,Linux 依赖 uinput,实现见 src/platform/virtualhid_input.cpp 和 src/platform/linux/input/。不想往 PC 上插手柄、直接用电视那头的手柄玩时用得上。

HDR 串流:Windows 正式支持,Linux 实验性

主机开了 HDR、客户端也开了 HDR,串流才真正带 HDR;客户端不开就按 SDR 解码,主机还是 HDR 状态时画面直接过曝。Linux 端要求苛刻:Intel/AMD 显卡 + VAAPI 的 HEVC Main 10 或 AV1 10-bit 编码 + KMS 捕获后端(NvFBC 和 X11 不支持 HDR)+ 支持 HDR 渲染的合成器(Gamescope 或 KDE Plasma 6)。完整要求见 docs/getting_started.md 的 HDR Support 章节。想在大电视上看 HDR 游戏、保住高光细节时用得上。

一个完整工作流

场景:书房里一台老游戏 PC 没接显示器,你要把 Steam 大屏直接串到客厅电视。

  1. 先把机器拉起来。人在别处,SSH 登进主机带 X11 启动 Sunshine:ssh <user>@<主机IP> 'export DISPLAY=:0; sunshine'。NVIDIA 显卡走 NvFBC 捕获,不接显示器时显卡可能不输出,用 HDMI 欺骗器或 EDID 模拟器补上。
  2. 接着把画质调到匹配电视。打开 Web UI 的 AudioVideo 页签,分辨率设成电视原生值(如 3840×2160),码率按你的网络情况调;顺手在导航栏下拉里选个主题。
  3. 然后确认应用列表。Applications 页签里找 "Steam Big Picture",默认就自带;没有就按上一节的 apps.json 结构手动添加。
  4. 最后配对开播。电视上的 Moonlight 添加主机,回到 Web UI 的 PIN 页完成配对,选 "Steam Big Picture" 启动。画面出来,大屏菜单就位。

应用管理界面长这样:

踩坑速查 🔧

忘了 Web UI 账号密码,进不去后台根因:凭据只存本地,无找回入口;处置:停掉 Sunshine,跑sunshine --creds {新用户名} {新密码}重置(Flatpak 用flatpak run --command=sunshine前缀)

浏览器访问 47990 打不开根因:防火墙挡了端口,或服务没在跑;处置:先查服务状态,再放行 47990 端口

画面卡顿、丢包根因:主机 2.5Gb 有线,客户端只有 1Gb 或 Wi-Fi;处置:iPerf3 测出瓶颈(丢包 <5%、抖动 <1ms 才算达标),降速主机网卡或升级到 0.23.1 之后版本

Linux 上连上后键鼠、手柄没反应根因:运行 Sunshine 的用户没有 uinput 权限;处置:把用户加进input组并重新登录(FreeBSD 用pw groupmod input -m $USER

主机开了 HDR,串出来的画面发白过曝根因:客户端没开 HDR,流按 SDR 解码;处置:Moonlight 设置里启用 HDR,Linux 主机改用 KMS 捕获后端

都解决不了,先打开 Web UI 的 Troubleshooting 页签,每条 warning/error 都能点开看细节,按线索逐条过。

继续深挖

  • docs/getting_started.md — 各平台安装方式、首次设置、配对流程,以及快捷键(Ctrl+Alt+Shift+N 隐藏光标、Ctrl+Alt+Shift+F1/F12 切显示器)
  • docs/configuration.md — port、locale、编码器、音频设备,全部配置项逐项说明
  • docs/troubleshooting.md — 凭据重置、iPerf3 网络测试(50M 反向 UDP)、丢包处理
  • docs/performance_tuning.md — 按你的网络情况选码率与分辨率
  • src/platform/ — 各平台屏幕捕获与编码实现(KMS、NvFBC、WGC、VAAPI、ScreenCaptureKit 等)
  • tests/ — 单元测试与集成测试,想搞懂内部行为从这里入手

【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 9:52:56

STM32CubeMX官方下载与安装避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 9:49:05

视频下载网址的本质:三类合法形态与四大拦截机制解析

1. “视频下载网址”不是功能入口&#xff0c;而是内容分发链路中的一个脆弱节点“视频下载网址”这五个字&#xff0c;乍看像一个工具按钮、一个浏览器插件名称&#xff0c;甚至有人会误以为是某个App的官方下载页。但在我过去十年做音视频技术方案支持、内容分发系统搭建和前…

作者头像 李华
网站建设 2026/9/20 9:48:15

网易云音乐爬虫实战:weapi接口加密与评论翻页抓取全解析

简介&#xff1a;面向Python爬虫入门者与数据采集开发者&#xff0c;这套源码围绕网易云音乐数据获取展开&#xff0c;覆盖歌手、专辑、歌曲、歌词、评论&#xff08;热评前1000条&#xff09;等核心对象&#xff0c;并提供建表SQL和评论词云分析脚本&#xff0c;便于从爬取、存…

作者头像 李华
网站建设 2026/9/20 9:47:53

LibreChat自托管指南:用Docker统一多模型AI对话与工作流

我最早接触 AI 对话&#xff0c;是从跟风使用几个网页版开始的。连续三个多月&#xff0c;我都在多个页面之间来回切换&#xff0c;写作、编程、翻译、答疑都要把上下文一遍遍搬来搬去&#xff0c;效率和体验都很糟糕。后来我在自己的服务器上把 LibreChat 搭了起来&#xff0c…

作者头像 李华
网站建设 2026/9/20 9:46:28

从main到硬件:STM32与PC的C程序启动差异及GPIO八种模式详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华