项目介绍
Sunshine 是一款技术驱动型的开源远程控制解决方案,通过优化底层传输协议与硬件加速技术,在延迟、画质等关键指标上达到商业软件水平。其模块化设计便于企业二次开发,适合对数据安全、成本控制有高要求的场景。随着远程办公与云游戏市场的增长,该项目具有广阔的应用前景。
其核心工作模式是“服务端+客户端”的组合。在典型的家庭网络场景中,可以将一台性能强劲的电脑作为服务端,运行Sunshine软件;在其他设备(如另一台电脑、手机、电视或Steam Deck等游戏掌机)上安装兼容的客户端(如Moonlight)。两者连接到同一个家庭网络后,即可实现低延迟的桌面串流。
Sunshine 与 TeamViewer 对比
| 维度 |
Sunshine |
TeamViewer |
| 成本 |
完全免费 |
商业授权(个人免费版功能受限) |
| 延迟 |
<20ms(局域网) |
50-100ms(依赖服务器中转) |
| 画质 |
4:4:4 无损采样 |
4:2:0 色度压缩 |
| 隐私 |
本地部署,数据不外传 |
需信任商业公司服务器 |
| 扩展性 |
支持自定义编码参数 |
封闭系统,无法调整内部逻辑 |
应用场景
-
远程办公
- 高清无损传输办公桌面,支持多显示器扩展
- 适用于设计、视频剪辑等对画质要求高的场景
-
游戏串流
- 通过 Moonlight(NVIDIA GameStream 兼容客户端)实现低延迟游戏串流。
- 支持 4K@120Hz 分辨率与 HDR 色彩。结合方案尤其适合将高性能PC游戏串流到掌机或电视上,在掌机屏幕和电视大屏上都能获得流畅的同步游戏体验。
-
技术支持
- 企业 IT 部门远程维护设备
- 开发者远程调试服务器或嵌入式设备
-
家庭媒体中心
- 将 PC 媒体内容流式传输到电视或移动设备
- 支持硬件加速解码(如 Intel Quick Sync Video)
核心特性与功能模块
Sunshine 的核心优势在于其超低延迟、高画质和开源特性,这些优势通过以下模块化功能实现:
技术特性
-
超低延迟
- 端到端延迟 <20ms(局域网环境)
- 优化网络包处理流程,减少中间环节耗时
-
画质优先
- 支持 4:4:4 色度采样(无损文本渲染)
- 动态分辨率缩放(平衡画质与带宽)
-
开源生态
- 完全开源代码,支持二次开发
- 兼容 Moonlight、NVIDIA Shield 等客户端
-
硬件加速
- 利用 GPU 编码器(NVIDIA NVENC/AMD AMF/Intel QSV)
- 降低 CPU 占用率(尤其适合低端设备)
-
跨平台兼容
- 服务端支持 Windows/Linux/macOS
- 客户端兼容 Android/iOS/Web/Steam Deck
功能模块
| 模块 |
功能描述 |
| 核心传输层 |
- 基于 H.264/H.265 编码的实时视频流<br>- 自适应码率控制(根据网络状况动态调整)<br>- AES-256 端到端加密 |
| 输入控制 |
- 键盘/鼠标事件同步<br>- 游戏手柄映射(支持 DirectInput/XInput)<br>- 多点触控支持(移动端) |
| 音频传输 |
- 双向音频流(可选 Opus/AAC 编码)<br>- 麦克风静音/音量控制 |
| 网络优化 |
- UDP 打洞技术穿透 NAT/防火墙<br>- QoS 优先级标记(减少网络拥塞影响)<br>- 本地局域网自动发现 |
| 管理界面 |
- Web-based 控制台(配置服务端参数)<br>- 连接日志与带宽统计<br>- 多用户权限管理 |
项目技术栈
核心组件
| 技术 |
用途 |
| FFmpeg |
视频编码/解码(支持 H.264/H.265/AV1) |
| libuv |
异步 I/O 事件循环(网络通信) |
| OpenSSL |
TLS 加密与证书管理 |
| SDL2 |
输入设备抽象层(键盘/鼠标/手柄) |
| PulseAudio/ALSA |
音频捕获与播放(Linux) |
开发工具链
| 工具 |
版本 |
| 编译器 |
GCC 11+/Clang 14+/MSVC 19.30+ |
| 构建系统 |
CMake 3.20+ |
| 依赖管理 |
vcpkg(Windows)/Conan(Linux) |
| 测试框架 |
Google Test + Catch2 |
性能优化技术
- 多线程渲染:分离视频解码与显示线程
- 零拷贝传输:减少内存拷贝次数
- RTP/RTCP 协议:实时传输控制与 QoS 反馈
功能演示与配置指南
客户端配置示例(以Moonlight为例)
客户端(如Moonlight)的配置直接影响到最终的串流体验。在客户端的设置界面(例如版本 6.1.0)中,通常包含以下关键选项:
基础设置
- 分辨率与帧率:可设置为4K自定义120 FPS等。需要注意的是,设置值过高可能导致卡顿或错误。
- 视频比特率:例如113 Mbps。网络较慢时应降低比特率以保证流畅度,网络良好时可提高比特率以提升画质。
- 显示模式:推荐使用全屏模式。
- 垂直同步:用于帧同步。
输入设置
- 为远程桌面而非游戏优化鼠标
- 在全屏模式下捕获系统键盘快捷键
- 将触摸屏用作虚拟轨迹球
- 交换鼠标左右键
- 反转鼠标滚轮方向
游戏手柄设置
- 交换A/B和X/Y手柄按钮
- 强制手柄 #1 始终连接
- 通过按住“开始”按钮启用手柄鼠标控制
部署与连接流程
- 安装服务端:在主机上安装并运行Sunshine服务端。
- 获取客户端:客户端应用非常普及,在各大应用商店(如Linux的Discover商店)搜索“Moonlight”,通常都能找到,其描述通常为“从你的NVIDIA GameStream启用的PC远程玩游戏”。
- 网络发现:客户端启动后,会自动扫描局域网内运行了Sunshine的主机,并列出设备(例如显示为
DESKTOP-D...这样的名称)。
- 建立连接:在客户端列表中选择目标主机,输入在Sunshine服务端Web控制台中设置的PIN码,即可建立加密连接,开始远程控制或游戏串流。
开源地址
项目代码仓库位于 github.com/LizardByte/Sunshine,开发者可以在此查看源码、提交问题或参与贡献。
参考资料
[1] 再见 TeamViewer,一款开源免费、超低延迟,画面高清的远程控制工具!, 微信公众号:mp.weixin.qq.com/s/mRX_rbdVPP04MRPbDK6o9Q
版权声明:本文由 云栈社区 整理发布,版权归原作者所有。
|