ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Sunshine+moonlight+ParsecVDisplay:低延迟串流方案全解析

Sunshine+moonlight+ParsecVDisplay:低延迟串流方案全解析 1. 串流方案选型背后的真实需求1.1 为什么是这三个组件的组合第一次接触串流的人看到Sunshine、moonlight、ParsecVDisplay这三个名字大概率会一头雾水。这三个东西单独拎出来各自解决的是不同层面的问题但组合在一起恰好构成了一套完整的低延迟远程串流方案。我最初折腾这套组合的动机很简单主力机放在书房客厅只有一台轻薄本和电视想躺在沙发上玩3A大作又不想把机箱搬来搬去。试过几款商业串流软件要么延迟高得没法玩动作游戏要么画质压缩得厉害直到把这套开源组合跑通才算真正解决了问题。先说清楚这三个组件各自扮演什么角色。Sunshine是运行在主机端也就是真正跑游戏的那台机器的串流服务端负责采集画面、编码视频流、接收客户端的输入指令。moonlight是客户端运行在你用来观看和操作的设备上负责解码视频流、把画面显示出来、把键鼠手柄的操作回传给主机。ParsecVDisplay则是一个虚拟显示器驱动它的作用是让主机在没有接物理显示器、或者物理显示器被占用的情况下依然能输出一个“虚拟屏幕”供串流使用。三者缺一不可尤其是ParsecVDisplay很多人卡在“主机没接显示器就串流黑屏”这一步就是缺了它。这套组合的核心价值在于完全免费、开源、延迟可以压到很低、画质可调范围大。商业方案里能做到同等体验的要么收费不菲要么对硬件有额外要求。而SunshinemoonlightParsecVDisplay这套只要你的主机有一块支持硬件编码的显卡NVIDIA、AMD、Intel核显都行就能跑起来。适合的人群也很明确有主机和另一台设备、想跨房间或跨设备玩游戏、对延迟和画质有一定要求、愿意花点时间折腾配置的人。1.2 三个组件各自解决什么问题把这三个组件拆开看每个都有明确的职责边界。Sunshine的定位是“服务端”它替代的是NVIDIA GameStream那套已经停止维护的方案。Sunshine支持NVIDIA的NVENC、AMD的AMF、Intel的QuickSync三种硬件编码方式也支持软件编码作为兜底。它的配置项很细从编码器选择、码率、分辨率、帧率到音频输出、输入设备映射都能调。这意味着你可以根据自己显卡的编码能力精细地平衡画质和延迟。moonlight的定位是“客户端”它原本是为NVIDIA GameStream设计的后来社区把它扩展成了通用的串流客户端。moonlight支持Windows、macOS、Linux、Android、iOS甚至还有树莓派和电视盒子的版本。它的解码能力也很强支持硬件解码能把主机传来的视频流快速解出来显示。moonlight的界面相对简洁配对、选分辨率、选码率、开始串流几步就能跑起来。热词里提到的“moonlight qt”指的是moonlight的一个分支版本用Qt重写了界面在部分平台上的兼容性和体验更好后面会细说。ParsecVDisplay的定位是“虚拟显示器”。它的原理是安装一个虚拟显示驱动让系统认为接了一块额外的显示器。这块虚拟显示器可以设置分辨率、刷新率串流时把画面输出到这块虚拟屏幕上moonlight客户端就能采集到画面。为什么需要它因为很多显卡在没接显示器的时候不会输出画面或者输出的分辨率、刷新率不对。尤其是用无头主机headless做串流服务器的时候没有虚拟显示器串流就是黑屏。ParsecVDisplay解决了这个问题而且它是免费的安装配置也不复杂。1.3 适用场景与硬件门槛这套方案适用的场景比想象中多。最常见的当然是“主机在书房人在客厅”的跨房间串流。其次是“主机是台式机出门带轻薄本”的远程串流不过这种场景对网络要求更高通常需要公网IP或者内网穿透方案这里不展开。还有一种场景是“主机性能强但显示器差”比如主机接的是老显示器但你想在另一台高分辨率设备上玩串流可以绕过物理显示器的限制。另外做视频剪辑或者3D渲染的人也可以用这套方案把主机的画面串到平板上做监看。硬件门槛方面主机端需要一块支持硬件编码的显卡。NVIDIA的GTX 600系列以后基本都支持NVENCAMD的GCN架构以后支持AMFIntel的核显从HD 4000以后支持QuickSync。具体到热词里提到的“amd处理器选择哪个sunshine安装包”这里要澄清一个常见误区Sunshine的安装包选择跟CPU品牌关系不大主要看的是显卡的编码能力。AMD处理器搭配AMD显卡或者AMD处理器搭配NVIDIA显卡都是常见的组合。Sunshine官方提供了Windows的安装包也有Linux的版本选择哪个安装包取决于你的操作系统而不是CPU品牌。如果非要说AMD平台有什么特别注意的那就是AMD显卡的AMF编码器在部分驱动版本下需要手动开启而且编码质量在不同代际的显卡上差异较大。客户端这边门槛更低。一台能跑moonlight的设备就行手机、平板、笔记本、电视盒子都可以。网络方面局域网内建议用千兆有线或者WiFi 6延迟能控制在个位数毫秒。如果走无线5GHz频段是底线2.4GHz基本没法玩动作游戏。2. 核心组件的工作原理与配置逻辑2.1 Sunshine服务端的编码与采集机制Sunshine的工作流程可以拆成三步采集、编码、传输。采集环节Sunshine会抓取主机的屏幕画面可以是整个桌面也可以是某个特定的显示器。如果主机接了多个显示器或者装了ParsecVDisplay虚拟显示器Sunshine会让你选择采集哪一块。编码环节是核心Sunshine把采集到的画面交给显卡的硬件编码器压缩成视频流。这一步决定了画质和延迟的上限。传输环节Sunshine把编码后的视频流通过局域网发给moonlight客户端同时接收客户端回传的输入指令。编码器的选择是配置里最关键的一步。NVIDIA显卡用NVENCAMD显卡用AMFIntel核显用QuickSync。不同编码器的效率和质量有差异。NVENC在NVIDIA的图灵架构以后编码质量已经非常接近软件编码延迟也低。AMF在AMD的RDNA架构以后有明显进步但早期显卡的AMF编码质量一般可能需要提高码率来弥补。QuickSync在Intel的核显上表现不错尤其是11代以后的核显编码效率很高。如果显卡不支持硬件编码或者硬件编码有问题可以退回到软件编码但CPU占用会很高延迟也会增加。码率的设置需要根据分辨率和帧率来算。一个粗略的公式是码率Mbps≈ 分辨率像素数 × 帧率 × 每像素比特数 ÷ 1000000。比如1080p1920×108060帧每像素用0.1比特码率大约是12.4Mbps。实际设置时1080p60建议20-30Mbps1440p60建议30-50Mbps4K60建议60-100Mbps。码率越高画质越好但网络压力也越大。局域网千兆环境下100Mbps以内的码率都没问题。如果走无线码率要适当降低避免丢包导致卡顿。注意Sunshine的编码器设置里有一个“强制硬件编码”的选项如果勾选了但显卡不支持串流会直接失败。建议先不勾选让Sunshine自动检测跑通后再根据情况调整。2.2 moonlight客户端的解码与显示流程moonlight客户端拿到Sunshine传来的视频流后要做三件事解码、显示、回传输入。解码环节moonlight会优先用客户端的硬件解码器比如手机上的GPU、笔记本上的核显或独显。硬件解码能大幅降低CPU占用和延迟。如果客户端不支持硬件解码或者解码器有问题会退回到软件解码但延迟和功耗都会上升。显示环节moonlight把解码后的画面渲染到屏幕上支持全屏、窗口化、拉伸等模式。回传输入环节moonlight把客户端的键鼠、手柄操作打包通过局域网发回给SunshineSunshine再注入到主机系统里。moonlight的设置里分辨率和帧率要和Sunshine端匹配。如果Sunshine端设置的是1080p60moonlight端也设1080p60这样最流畅。如果moonlight端设了更高的分辨率Sunshine端会尝试缩放但可能引入额外的延迟。码率方面moonlight端可以设置一个上限实际码率会根据网络状况动态调整。如果网络好码率会跑满如果网络差码率会降低画质会变差但不会卡死。热词里提到的“阿西西moonlight”和“moonlight qt”指的是moonlight的社区分支版本。阿西西moonlight是国内社区维护的一个版本针对中文用户做了一些优化比如界面汉化、预设配置等。moonlight qt是用Qt框架重写的版本在Linux和部分Windows环境下的兼容性更好界面也更现代。选择哪个版本主要看你的客户端平台和个人偏好。官方版最稳定社区版可能有一些额外的功能或优化但也可能引入新的问题。建议先用官方版跑通再尝试社区版。2.3 ParsecVDisplay虚拟显示器的安装与生效条件ParsecVDisplay的安装比前两个组件要稍微麻烦一点因为它涉及驱动安装。在Windows上下载ParsecVDisplay的安装包后运行安装程序它会安装一个虚拟显示驱动。安装完成后需要在系统的“显示设置”里检查是否多了一块显示器。如果没有出现可能需要重启或者在设备管理器里手动启用。安装成功后可以在ParsecVDisplay的控制面板里设置虚拟显示器的分辨率、刷新率、缩放等参数。虚拟显示器的分辨率设置要和moonlight端匹配。比如moonlight端设的是1080p60虚拟显示器也设1080p60。如果虚拟显示器设的是4K但moonlight端设的是1080pSunshine采集的是4K画面编码后传给moonlightmoonlight再缩放到1080p显示这样会浪费编码和网络资源。所以虚拟显示器的分辨率最好和串流目标分辨率一致。刷新率方面虚拟显示器支持的最高刷新率取决于驱动和显卡一般60Hz是保底120Hz或144Hz需要显卡和驱动支持。提示ParsecVDisplay安装后如果主机同时接了物理显示器系统会默认把虚拟显示器设为扩展屏。串流时Sunshine可以选择采集虚拟显示器这样物理显示器可以正常使用互不干扰。如果主机没接物理显示器虚拟显示器就是唯一的显示输出串流必须采集它。还有一个常见问题ParsecVDisplay的虚拟显示器在部分AMD显卡上需要手动在显卡驱动里开启“虚拟超级分辨率”或者类似的选项否则虚拟显示器的分辨率选项会受限。NVIDIA显卡一般没这个问题。如果安装后虚拟显示器不生效可以先检查显卡驱动是否最新再检查系统显示设置里是否识别到了新显示器。3. 从零搭建的完整实操流程3.1 主机端环境准备与Sunshine安装主机端的准备工作分三步确认硬件支持、安装驱动、安装Sunshine。先确认显卡是否支持硬件编码。NVIDIA显卡可以在NVIDIA控制面板的“系统信息”里看“NVENC”是否支持。AMD显卡可以在AMD Software的“系统”里看“AMF”是否支持。Intel核显可以在任务管理器的“性能”标签里看“GPU”是否有“硬件编码”能力。如果都不支持只能走软件编码体验会打折扣。驱动方面显卡驱动建议更新到最新稳定版。NVIDIA显卡驱动里有一个“游戏内覆盖”的功能可能会和Sunshine冲突建议在NVIDIA GeForce Experience里关闭。AMD显卡驱动里有一个“Radeon Anti-Lag”和“Radeon Boost”功能也可能影响串流建议在串流时关闭。Intel核显驱动一般不需要特别设置但建议更新到最新版。Sunshine的安装包从官方仓库下载。Windows用户下载.exe安装包双击运行一路下一步。安装完成后Sunshine会自动启动并在系统托盘里显示一个图标。右键图标选择“Open Sunshine”会打开一个网页控制台地址是https://localhost:47990。第一次打开会提示设置用户名和密码这个账号密码是用来登录控制台的不是串流用的。设置完成后进入控制台可以看到“Applications”、“Configuration”、“Troubleshooting”等标签。在“Configuration”标签里需要配置几个关键项。首先是“Encoder”选择硬件编码器NVIDIA选“nvenc”AMD选“amf”Intel选“quicksync”。如果选了硬件编码器但串流失败可以换回“software”。其次是“Output Name”选择要采集的显示器。如果装了ParsecVDisplay这里会多出一个虚拟显示器的选项。然后是“Resolution”和“FPS”设置串流的分辨率和帧率。最后是“Bitrate”设置码率。这些设置可以在串流时动态调整但建议先设好一个稳定的配置。注意Sunshine的网页控制台用的是自签名证书浏览器可能会提示“不安全”。这是正常的点击“高级”-“继续访问”即可。如果浏览器完全阻止访问可以换一个浏览器或者在浏览器设置里信任localhost的自签名证书。3.2 虚拟显示器ParsecVDisplay的配置细节ParsecVDisplay的安装包从官方仓库下载。Windows用户下载.exe安装包双击运行。安装过程中Windows会提示“是否安装这个设备软件”选择“安装”。安装完成后系统托盘里会出现ParsecVDisplay的图标。右键图标选择“Display Settings”可以打开虚拟显示器的设置面板。在设置面板里可以添加虚拟显示器、设置分辨率、刷新率、缩放等。第一次使用点击“Add Display”添加一块虚拟显示器。然后设置分辨率和刷新率。分辨率建议和moonlight端的目标分辨率一致刷新率建议和主机物理显示器的刷新率一致或者设为60Hz。如果主机没接物理显示器虚拟显示器的刷新率就是串流的实际上限设高一点没坏处但要注意显卡能否带动。虚拟显示器添加后在Windows的“显示设置”里会多出一块显示器。如果没出现可以点击“检测”按钮或者在设备管理器里查看“显示适配器”下是否有“Parsec Virtual Display Adapter”。如果有但没显示可能是驱动没加载重启一下。如果设备管理器里也没有可能是安装失败重新安装一遍注意安装时关闭杀毒软件避免驱动被拦截。提示ParsecVDisplay的虚拟显示器在部分AMD显卡上需要在AMD Software里开启“Virtual Super Resolution”才能支持更高的分辨率。如果虚拟显示器的分辨率选项里没有你想要的分辨率先检查这个选项。NVIDIA显卡一般不需要额外设置但建议在NVIDIA控制面板里把虚拟显示器的刷新率设到最高。虚拟显示器配置好后回到Sunshine的控制台在“Output Name”里选择虚拟显示器。如果虚拟显示器的名字是“ParsecVDisplay”就选它。然后设置分辨率和帧率和虚拟显示器保持一致。这样Sunshine就会采集虚拟显示器的画面编码后传给moonlight。物理显示器可以正常使用互不干扰。3.3 客户端moonlight的配对与串流设置客户端这边先从moonlight的官方仓库下载对应平台的安装包。Windows、macOS、Linux、Android、iOS都有对应的版本。安装完成后打开moonlight它会自动搜索局域网内的Sunshine服务端。如果没搜到可以点击“Add Host Manually”手动输入主机的IP地址。主机的IP地址可以在Sunshine控制台的“Troubleshooting”标签里看到或者在主机的网络设置里查。搜到主机后点击主机名称moonlight会提示“Pair”。点击“Pair”moonlight会显示一个4位数的PIN码。同时Sunshine的控制台会弹出一个提示要求输入这个PIN码。在Sunshine控制台里输入PIN码点击“Send”配对就完成了。配对成功后moonlight会显示主机上可用的应用列表。如果Sunshine里配置了多个应用这里会全部列出来。选择“Desktop”可以串流整个桌面选择具体的游戏可以串流游戏画面。串流设置里分辨率和帧率要和Sunshine端匹配。码率可以设一个上限建议和Sunshine端的码率一致。如果网络好可以设高一点如果网络差设低一点。moonlight还支持“HDR”串流如果主机和客户端都支持HDR可以开启画质会更好。但HDR串流对带宽要求更高建议在局域网千兆环境下开启。注意moonlight的配对PIN码是一次性的每次配对都会生成新的PIN码。如果配对失败检查主机和客户端是否在同一局域网防火墙是否阻止了moonlight的端口。Sunshine默认用的端口是47989、47990、48010确保这些端口没有被防火墙拦截。串流开始后moonlight会显示主机的画面。如果画面黑屏先检查Sunshine的“Output Name”是否选对了显示器。如果选了虚拟显示器但虚拟显示器没生效画面就是黑的。如果画面卡顿检查网络状况降低码率或分辨率。如果输入延迟高检查客户端的硬件解码是否开启关闭不必要的后台程序。4. 常见问题与排查技巧实录4.1 串流黑屏与虚拟显示器不生效黑屏是这套方案里最常见的问题原因通常有三个采集的显示器选错了、虚拟显示器没生效、显卡没输出画面。排查顺序是这样的先在Sunshine控制台里确认“Output Name”选的是哪块显示器。如果选的是物理显示器但物理显示器关了画面就是黑的。如果选的是虚拟显示器但虚拟显示器没生效画面也是黑的。这时候去Windows的显示设置里看虚拟显示器是否出现在显示器列表里。如果没有检查ParsecVDisplay的驱动是否安装成功设备管理器里是否有“Parsec Virtual Display Adapter”。如果虚拟显示器出现了但串流还是黑屏可能是显卡没往虚拟显示器输出画面。这种情况在AMD显卡上比较常见需要在AMD Software里把虚拟显示器设为主显示器或者把物理显示器断开。NVIDIA显卡一般没这个问题但如果在NVIDIA控制面板里把虚拟显示器设为了“扩展”模式可能需要把主显示器设为虚拟显示器。另外如果主机用的是笔记本合上盖子后显卡可能停止输出需要在电源设置里把“合上盖子时”设为“不采取任何操作”。还有一个隐蔽的问题Sunshine的采集分辨率设得比虚拟显示器的分辨率高。比如虚拟显示器是1080p但Sunshine里设了4K采集出来的画面可能是黑屏或者花屏。这时候把Sunshine的分辨率降到和虚拟显示器一致就行。同理如果moonlight端设的分辨率比Sunshine端高也可能出现黑屏或缩放问题。4.2 延迟高与画面卡顿的优化思路延迟高和画面卡顿是两个不同的问题排查思路也不一样。延迟高指的是操作到画面响应的间隔长通常是网络传输或编码解码的延迟。画面卡顿指的是画面不流畅有掉帧或停顿通常是网络丢包或解码性能不足。先区分是哪种问题再针对性优化。延迟高的优化先检查网络局域网内建议用有线无线用5GHz。然后检查编码器硬件编码的延迟通常比软件编码低。NVIDIA的NVENC延迟最低AMD的AMF稍高Intel的QuickSync居中。如果编码器已经是硬件检查码率是否过高码率过高会导致网络拥塞增加延迟。适当降低码率或者开启Sunshine的“动态码率”功能让码率根据网络状况自动调整。客户端的硬件解码也要开启软件解码的延迟明显更高。画面卡顿的优化先检查网络丢包用ping命令测试主机和客户端之间的延迟和丢包率。如果丢包率高检查无线信号强度或者换有线。然后检查客户端的解码性能如果客户端是手机或平板硬件解码能力可能有限降低分辨率或帧率。如果客户端是笔记本检查是否用了核显解码核显解码性能一般可以强制用独显解码。另外主机的CPU占用过高也会导致编码卡顿关闭不必要的后台程序尤其是杀毒软件和系统更新。提示Sunshine的“Troubleshooting”标签里有一个“Log”功能可以查看串流过程中的详细日志。如果遇到问题先看日志里有没有报错信息。常见的报错包括“Encoder not found”、“Display not found”、“Network timeout”等根据报错信息定位问题。4.3 AMD平台的特殊注意事项热词里提到“amd处理器选择哪个sunshine安装包”这里集中说一下AMD平台的特殊情况。首先Sunshine的安装包选择跟CPU品牌无关Windows就下Windows版Linux就下Linux版。AMD处理器搭配AMD显卡或者AMD处理器搭配NVIDIA显卡都是常见的组合。如果用的是AMD显卡编码器选AMF。AMF在RDNA架构以后的显卡上表现不错但早期显卡比如Polaris架构的RX 400/500系列的AMF编码质量一般可能需要提高码率来弥补画质。AMD显卡的驱动里有一些功能可能影响串流。比如“Radeon Anti-Lag”会降低输入延迟但可能和串流的输入回传冲突建议在串流时关闭。“Radeon Boost”会根据画面运动动态调整分辨率可能导致串流画面忽明忽暗也建议关闭。“Image Sharpening”会锐化画面可能增加编码负担建议关闭。另外AMD显卡的虚拟显示器支持不如NVIDIA完善ParsecVDisplay在AMD显卡上可能需要手动开启“Virtual Super Resolution”否则虚拟显示器的分辨率选项受限。如果用的是AMD处理器搭配NVIDIA显卡编码器选NVENC其他设置和纯NVIDIA平台一样。AMD处理器的核显如果有可以用来做客户端的硬件解码但主机端的编码还是走NVIDIA显卡。这种组合下注意AMD核显驱动和NVIDIA显卡驱动可能冲突建议先装NVIDIA驱动再装AMD核显驱动或者反过来避免驱动覆盖导致问题。4.4 常见问题速查表问题现象可能原因排查方法解决方案串流黑屏采集显示器选错检查Sunshine的Output Name选择正确的显示器串流黑屏虚拟显示器未生效检查设备管理器重装ParsecVDisplay驱动串流黑屏分辨率不匹配检查Sunshine和虚拟显示器分辨率设为一致延迟高网络拥塞ping测试延迟和丢包换有线或5GHz无线延迟高软件编码检查Sunshine编码器切换硬件编码画面卡顿网络丢包ping测试丢包率降低码率或换网络画面卡顿解码性能不足检查客户端硬件解码开启硬件解码或降低分辨率配对失败防火墙拦截检查端口47989/47990/48010放行端口或关闭防火墙输入无响应输入设备未映射检查Sunshine输入设置重新映射输入设备音频不同步音频缓冲设置检查Sunshine音频设置调整音频缓冲或关闭音频这张表覆盖了大部分常见问题但实际排查时问题可能更复杂。我的经验是先看日志日志里通常有明确的报错信息。然后从最简单的可能性开始排查比如先确认网络通不通再确认显示器选对没最后再查编码器和驱动。不要一上来就怀疑硬件问题大部分问题都是配置问题。5. 性能调优与进阶玩法5.1 码率、分辨率与帧率的平衡策略码率、分辨率、帧率这三个参数互相制约调优的核心是找到画质和流畅度的平衡点。码率决定了画面的细节保留程度分辨率决定了画面的清晰度帧率决定了画面的流畅度。三者都拉满网络和硬件可能扛不住三者都压低体验又太差。我的建议是先定分辨率再定帧率最后调码率。分辨率的选择取决于客户端的屏幕。如果客户端是1080p屏幕串流1080p就够了设4K只会浪费资源。如果客户端是2K或4K屏幕可以设对应的分辨率但码率要相应提高。帧率的选择取决于游戏类型。动作游戏、射击游戏建议60帧起步竞技游戏建议120帧或更高。策略游戏、角色扮演游戏30帧也能接受。码率的选择取决于网络。局域网千兆环境下1080p60设20-30Mbps1440p60设30-50Mbps4K60设60-100Mbps。如果走无线码率减半。提示Sunshine支持“动态码率”可以根据网络状况自动调整码率。如果网络不稳定建议开启这个功能。moonlight端也可以设置码率上限实际码率会在上限内动态调整。动态码率的好处是网络差时不会卡死坏处是画质会波动。如果网络稳定建议关掉动态码率设一个固定的码率画质更稳定。还有一个容易被忽略的参数编码预设。Sunshine的编码器设置里有一个“Preset”选项NVIDIA的NVENC有“P1”到“P7”几档数字越大编码质量越高但延迟也越高。AMD的AMF有“Speed”和“Quality”两档。Intel的QuickSync有“Fast”和“Slow”两档。如果延迟敏感选低延迟预设如果画质敏感选高质量预设。实测下来NVENC的“P4”或“P5”是延迟和画质的平衡点AMF的“Speed”延迟更低但画质稍差QuickSync的“Fast”延迟更低。5.2 多显示器与多客户端场景的处理多显示器场景下Sunshine可以采集指定的显示器也可以采集整个桌面。如果主机接了多个物理显示器加上ParsecVDisplay的虚拟显示器Sunshine的“Output Name”里会列出所有显示器。串流时选择虚拟显示器物理显示器可以正常使用。如果想让串流和物理显示器显示同样的内容可以选择“Duplicate”模式但这样物理显示器的分辨率会限制串流的分辨率。如果想让串流和物理显示器显示不同的内容选择“Extend”模式虚拟显示器作为扩展屏串流采集虚拟显示器。多客户端场景下多个moonlight客户端可以同时连接同一个Sunshine服务端。但Sunshine默认只支持一个客户端串流第二个客户端连接时会提示“Host is busy”。如果需要多客户端同时串流需要在Sunshine的配置里开启“Multi-Client”模式。开启后多个客户端可以同时连接但每个客户端的分辨率和码率会独立设置主机的编码负担会成倍增加。如果主机性能不够多客户端串流会导致卡顿。我的建议是除非主机性能很强否则不要开多客户端。还有一种进阶玩法用ParsecVDisplay创建多个虚拟显示器每个虚拟显示器对应一个客户端。这样多个客户端可以串流不同的虚拟显示器互不干扰。但这对主机的显卡和CPU要求很高而且Sunshine的多客户端模式需要额外配置。如果只是偶尔用不建议折腾这个。5.3 音频串流与输入设备映射音频串流是很多人忽略的一环。Sunshine默认会把主机的系统音频串流到客户端但音频的延迟和视频的延迟可能不同步。如果音频延迟明显可以在Sunshine的音频设置里调整缓冲大小。缓冲越小延迟越低但可能爆音缓冲越大延迟越高但更稳定。实测下来默认的缓冲大小一般够用如果不同步先检查客户端的音频输出设备是否选对再调整缓冲。输入设备映射方面Sunshine支持键盘、鼠标、手柄的映射。键盘和鼠标一般不需要特别设置即插即用。手柄需要在Sunshine的输入设置里映射按键。如果手柄是Xbox手柄一般能自动识别如果是PlayStation手柄或第三方手柄可能需要手动映射。moonlight端也支持手柄如果客户端接了手柄moonlight会把手柄输入回传给Sunshine。实测下来Xbox手柄的兼容性最好PlayStation手柄在部分客户端上需要额外驱动。注意如果主机上接了多个输入设备Sunshine可能会把输入指令注入到错误的设备上。比如主机上接了一个物理键盘客户端也回传了键盘输入两个键盘的输入可能会冲突。这时候可以在Sunshine的输入设置里禁用物理输入设备只保留客户端回传的输入。或者用“Exclusive Input”模式串流时独占输入设备物理输入设备暂时失效。5.4 网络环境对串流质量的影响网络环境是串流质量的决定性因素。局域网内有线千兆是最稳的延迟可以压到1-2毫秒丢包率几乎为零。WiFi 6在信号好的情况下延迟可以压到5毫秒以内但信号差时延迟会飙升。WiFi 5在5GHz频段下延迟可以压到10毫秒以内但2.4GHz频段基本没法用。如果走电力线适配器电力猫延迟和丢包率取决于家里的电路质量一般不推荐。如果主机和客户端不在同一局域网需要走公网串流。公网串流的延迟取决于两端的网络质量通常比局域网高很多。公网串流需要主机有公网IP或者在路由器上做端口映射。如果没有公网IP可以用内网穿透方案但延迟会更高。公网串流的码率要适当降低避免网络拥塞。实测下来公网串流的延迟通常在30-50毫秒动作游戏勉强能玩竞技游戏就不太行了。提示如果网络环境复杂可以用Sunshine的“Network”设置里的“UPnP”功能自动做端口映射。但UPnP在部分路由器上默认关闭需要在路由器设置里开启。如果UPnP不可用手动做端口映射把Sunshine的端口47989、47990、48010映射到主机的IP上。公网串流时注意安全设置强密码避免被陌生人连接。6. 个人实操体会与后续扩展这套方案我从去年开始用中间踩了不少坑也积累了一些经验。最开始用的是NVIDIA GameStream后来NVIDIA停止维护转到了Sunshine。Sunshine的配置比GameStream复杂但灵活性更高尤其是支持AMD和Intel的硬件编码让更多设备能跑起来。ParsecVDisplay是后来才加的因为主机放在书房物理显示器经常关着没它串流就是黑屏。加上之后串流稳定了很多物理显示器也可以正常使用互不干扰。moonlight的版本选择上我试过官方版、阿西西版和moonlight qt。官方版最稳定但界面比较老旧。阿西西版针对中文用户做了优化预设配置比较方便但更新频率不如官方版。moonlight qt在Linux上的体验最好Windows上也不错界面现代但偶尔有小bug。我的建议是先用官方版跑通再根据需求尝试社区版。如果遇到问题先回退到官方版排除是版本问题还是配置问题。后续扩展方面这套方案还可以做很多事情。比如用树莓派做客户端接在电视上成本低功耗低适合客厅场景。或者用平板做客户端配一个蓝牙手柄躺在床上玩。再或者用这套方案做远程办公把主机的画面串到笔记本上出门也能用主机的性能。不过远程办公对网络要求更高公网串流的延迟和稳定性需要仔细调优。最后分享一个小技巧如果串流时画面偶尔卡一下但网络和硬件都没问题可能是主机的电源计划设成了“节能”导致CPU降频。把电源计划改成“高性能”或者“卓越性能”能明显改善卡顿。这个坑我踩了很久一直以为是网络问题后来才发现是电源计划。另外如果主机用的是笔记本串流时插上电源别用电池电池模式下显卡性能会受限编码质量会下降。
返回列表