Sunshine 游戏串流服务器:从零装到调出60fps的实操手册
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
周五晚上,你瘫在沙发上,卧室那台配了 RTX 4070 的机器还开着,你却不想爬起来换地方。要是能把它的画质和帧率原样搬到客厅这台 75 寸电视上,那就完美了。Sunshine 就是干这个的:一个跑在你自己电脑上的游戏串流服务器,Moonlight 客户端连上它,画面和声音实时推到你手里的任何一块屏幕上。
它到底是个什么东西?
Sunshine 是一个开源的自托管串流服务端,装在跑游戏的那台电脑上;电视、平板、手机上装配套的 Moonlight 客户端,就能把主机画面连同声音、按键一起搬过去。
和别的方案比,它有几个实在的好处:
- 不用交月费,软件完全免费
- 数据不出你家门,画面走的是你自己家局域网
- N 卡、A 卡、U 卡的硬件编码都支持,老机器也能跑
- 客户端生态全:手机、平板、电视盒子、树莓派都有 Moonlight
顺带说一句,老玩家熟悉的 NVIDIA GameStream 已经从 GeForce Experience 里撤掉了,Sunshine 是它的开源继任者,而且不挑显卡品牌。
一帧画面是怎么跑到你屏幕上的?
串流听起来玄乎,其实链路很短。你按下一键开始游戏之后:
- 游戏照常在主机上跑,GPU 渲染出画面;
- GPU 顺手把这帧画面压缩成视频流。这就是硬件编码——GPU 扛下编码这桩脏活,CPU 能歇着,延迟也压得住;
- 视频流加上 Opus 编码的音频,通过 RTSP 协商、UDP 传输走局域网发出去。UDP 是"丢了就丢"的协议,适合这种宁可丢帧不能等画面的场景;
- Moonlight 客户端收到后用自家显卡解码、显示,你的按键则走另一条路反向传回主机。
全程大概就是一帧来回几百毫秒的事,比人眨一下眼睛快得多。想看代码的话,视频编码核心在 src/video.cpp,连接协商和传输在 src/rtsp.cpp,音频抓取在 src/audio.cpp。
上图是 Sunshine 自带的应用管理界面,你可以把 Steam、游戏或者整个桌面都登记成一个"应用",Moonlight 端点一下就串。
三步把它跑起来
路径 A:装官方安装包(90% 的人选这个)
适合想最快玩起来的人。从项目 Release 页下载对应系统的安装包:Windows 是 MSI、Debian/Ubuntu 是 .deb、macOS 是 dmg。以 Ubuntu 为例,下载好 deb 之后一条命令装完:
sudo dpkg -i ./sunshine_*.deb sudo apt install -f # 缺依赖的话补一下装完自动注册成系统服务,开机自启。打开浏览器访问localhost:47990,能看到设置界面并设置密码,就成了。
路径 B:Docker(玩容器、想隔离环境的选它)
注意官方文档提醒过:Docker 方案对大多数用户不是首选,因为要把显卡设备直接捅进容器,配置比安装包多几步。但如果你习惯用容器管理一切,下面这个 compose 文件够用了,它做的事是:拉起官方镜像、把 GPU 设备直通进去、映射好串流需要的端口。
services: sunshine: image: lizardbyte/sunshine:latest-ubuntu-24.04 container_name: sunshine restart: unless-stopped ipc: host volumes: - ./config:/config devices: - /dev/dri:/dev/dri ports: - "47984-47990:47984-47990/tcp" - "48010:48010" - "47998-48000:47998-48000/udp"docker compose up -d然后还是访问localhost:47990。容器里/config对应宿主机的./config,配置文件就落在那里,方便备份。
路径 C:源码编译(想改代码的选它)
适合开发者。依赖装齐之后,大致是标准的 CMake 三步:
git clone https://gitcode.com/GitHub_Trending/su/Sunshine cd Sunshine mkdir build && cd build cmake .. && make -j$(nproc) && sudo make installLinux 下编译需要 FFmpeg、各平台显示相关开发库,具体清单可以看 docs/building.md。这步要是卡住了,十有八九是依赖没装全,先别怀疑人生。
装完别急着开玩,先调这几个参数
打开localhost:47990的配置页,顶部有搜索框,直接搜参数名就能跳过去,比翻配置文件快得多。
真正影响体感的就下面这几项:
| 参数 | 推荐值 | 为什么重要 |
|---|---|---|
| 分辨率 / 帧率 | 1080p/60 起步 | 客户端按这个要画面,超了显卡和网络都扛不住 |
| 编码格式 | N 卡选 H.265,其他 H.264 | H.265 同画质省 30% 带宽,但吃一点客户端解码 |
| 视频码率 | 25 Mbps 起 | 低于 20M 画面开始"塑料感",4K 再往上加 |
| 音频通道 | 立体声 2 通道 | 想听 5.1 环绕再开 6 通道,普通游戏双声道够了 |
| UPnP | 建议开着 | 自动在路由器上打洞,省得手动放行端口 |
改完点保存,Sunshine 会自动重启服务生效,不用手动操作。
两种典型玩法,参数照着抄就行
客厅电视 4K 党:电视和主机都走网线,这是底线,无线串 4K 基本别想。
- 分辨率 4K、60fps,码率拉到 50~60 Mbps
- 编码 H.265,码率分配策略选"质量优先"
- 电视端 Moonlight 开硬件解码,老电视盒子可能顶不住 4K H.265,先拿 1080p 试
- 音频开 6 通道,主机侧把 5.1 输出指给对应声卡
iPad / 手机便携党:我一般 1080p 给 25Mbps,5GHz WiFi 够跑;你要是 4K 电视,码率拉到 50M 但必须走网线。
- 分辨率 1080p、60fps,码率 20~25 Mbps
- 编码 H.264,兼容性最好,老手机也能硬解
- 尽量连 5GHz 频段,信号弱就先降码率再降帧率
- 触屏设备在 Moonlight 里把虚拟控制器布局调好再玩
卡住了看这里
| 你看到的现象 | 大概率原因 | 一条命令或操作 |
|---|---|---|
| Moonlight 搜不到主机 | 路由器没放行端口 | 配置页里打开 UPnP;或手动放行 47984~47990 TCP、47998~48000 UDP |
| 串起来画面糊 | 码率太低 | 视频码率加到 30 Mbps 以上再对比 |
| 有画面没声音 | 抓取设备选错 | 配置页"音频"里把输入设备切到你想用的声卡 |
| 按了开始没反应/卡住 | 显卡驱动太久没更新 | 更新显卡驱动后重启 Sunshine 服务 |
| 不知道哪错了 | 看日志 | 打开localhost:47990的日志页,或直接翻~/.config/sunshine下的日志文件 |
日志页会实时滚动打印运行状态,编码器初始化失败、端口被占这类问题都能直接看到,比盲猜快。
最后
把 Sunshine 装起来其实就半小时的事:挑一条路径装好,打开 47990 配一下码率和编码,Moonlight 一连,客厅就是你的游戏机房了。现在就按上面"三步把它跑起来"先装一把,串起来再回来调参数。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考