Moonlight——遠(yuǎn)程同屏/串流桌面、游戲推薦方案
雖然網(wǎng)上已經(jīng)有很多相關(guān)介紹,但隨著版本更替,很多教程已經(jīng)過時,例如手柄驅(qū)動、音頻驅(qū)動,都是不需要單獨(dú)安裝的。
Moonlight是NVIDIA的GameStream協(xié)議的開源實(shí)現(xiàn),可以方便的將Windows電腦畫面?zhèn)鬏數(shù)礁髦髁鞑僮飨到y(tǒng)的客戶端軟件上,甚至可以直接傳輸至谷歌瀏覽器。畫面方面,移動端最高支持4K120幀,且支持HDR(需要顯卡支持),而桌面端甚至可以直接自定義分辨率和幀數(shù);交互方面支持鍵鼠/手柄/觸摸屏/觸控板/觸控筆,就像用自己的電腦一樣使用遠(yuǎn)程電腦。該方案無廣告,完全免費(fèi),這也是相對商業(yè)軟件Parsec的最大優(yōu)勢。
通過Moonlight,你可以實(shí)現(xiàn)很多功能,例如:
在宿舍運(yùn)行主機(jī),在教室用平板串流,搭配鍵鼠即可獲得完整電腦體驗(yàn);
遠(yuǎn)程同屏追劇、看電影;
通過串流游玩單機(jī)雙人游戲,也可以避免部分游戲自帶聯(lián)機(jī)功能網(wǎng)絡(luò)不佳的情況;
當(dāng)作自己的云主機(jī),隨時隨地用輕小設(shè)備訪問。
Moonlight官網(wǎng)地址:https://moonlight-stream.org。在網(wǎng)頁頂部的CLIENT DOWNLOADS中可以選擇各平臺的客戶端進(jìn)行下載,而HOST DOWLOADS中可以下載SUNSHINE??蛻舳酥傅氖怯^看畫面的設(shè)備,主機(jī)則指運(yùn)行SUNSHINE的Windows電腦,主機(jī)的顯示器畫面通過網(wǎng)絡(luò)傳輸?shù)娇蛻舳耍@就是串流的過程了。
由于Sunhine和moonlight下載鏈接來自Github,可能無法訪問,因此這里也給出百度網(wǎng)盤下載鏈接:
https://pan.baidu.com/s/1XSZysDzyYRKa3z4BZFNQEQ?pwd=1234
提取碼:1234
下面先介紹主機(jī)配置。

主機(jī)配置
如果使用英偉達(dá)的非老舊顯卡,則可以直接在Geforce Experience軟件中開啟GameStream功能。但現(xiàn)在已經(jīng)不建議使用這種方式,直接采用Sunshine開源方案是更好的選擇。GameStream傳輸普通桌面應(yīng)用時鼠標(biāo)幀數(shù)只能達(dá)到60幀,而Sunshine則無此問題。從Sunshine 0.21版本開始添加了原生的筆和觸控支持(需配合新版Moonlight客戶端),這意味著可以直接在串流客戶端使用壓感功能。
Moonlight官網(wǎng)提供了Sunshine主機(jī)端以代替Geforce Experience的GameStream功能,這使得任意顯卡均能使用串流功能。根據(jù)開發(fā)者描述,從 Sunshine v0.18 開始,它在許多配置中的串流性能已經(jīng)達(dá)到或超過 GeForce Experience。Sunshine的發(fā)布地址為https://github.com/LizardByte/Sunshine/releases,在最新版本下方的Assets中找到sunshine-windows-installer.exe并下載安裝,如果找不到就先點(diǎn)開Show all。

按照默認(rèn)設(shè)置安裝完成之后(如果修改安裝目錄,注意不能包含中文路徑),開始菜單會多出Sunshine圖標(biāo),打開會轉(zhuǎn)到https://localhost:47990(也可以直接瀏覽器訪問該地址),該網(wǎng)頁即Sunshine配置頁面,由于服務(wù)器使用https但無證書,因此瀏覽器會提示隱私錯誤,繼續(xù)訪問即可。

進(jìn)入Sunshine頁面之后需要注冊,然后使用賬號密碼登錄該網(wǎng)頁。在配置頁面頂部選擇PIN,就來到了配對頁面。當(dāng)有新的客戶端需要進(jìn)行串流時,就需要將客戶端上的驗(yàn)證碼輸入在這里并點(diǎn)擊Send,即可配對成功。

主機(jī)需要連接顯示器才能正常串流,如果是筆記本則不能合蓋。要在無顯示器狀態(tài)下串流,可以買一個顯卡欺騙器接在電腦上,效果相當(dāng)于外接一臺顯示器。另一種辦法是虛擬顯示器,可以直接搜索相關(guān)教程。
當(dāng)主機(jī)連接了多個顯示器時,Moonlight客戶端默認(rèn)連接主顯示器。你可以在Sunshine配置網(wǎng)頁中找到Configuration-Audio/Video-Output Name設(shè)置以指定顯示器。
如果想要串流到多個客戶端,需要修改Sunshine配置網(wǎng)頁https://localhost:47990/config中Advanced-Channels的值,它代表允許同時串流的最大客戶端數(shù)量。

客戶端配置
如果使用電腦作為客戶端,在https://github.com/moonlight-stream/moonlight-qt/releases根據(jù)自己的系統(tǒng)選擇對應(yīng)的版本即可。
如果使用iphone作為客戶端,直接在App store下載Moonlight即可,不過只有英文,暫時不能調(diào)整語言。
如果使用安卓手機(jī)作為客戶端,如果無法使用Play商店,可以在https://github.com/moonlight-stream/moonlight-android/releases下載apk安裝包,選擇app-nonRoot-release.apk即可。
保持主機(jī)和客戶端在同一局域網(wǎng)內(nèi),打開客戶端軟件,應(yīng)該能夠看到主機(jī)的計算機(jī)名。點(diǎn)擊會彈出4位PIN碼,需要在Sunshine配置網(wǎng)頁https://localhost:47990/pin中輸入PIN碼。建立連接后,點(diǎn)擊桌面(DESKTOP)將啟動桌面串流。
默認(rèn)情況下,觸摸屏的輸入方式為觸控板,要想直接觸摸控制,需要在設(shè)置-輸入設(shè)置中去掉勾選“將觸控屏作為觸控板使用”。
在客戶端設(shè)置中,可以調(diào)整分辨率、幀數(shù)、碼率等設(shè)置,但要注意分辨率越高,延遲也會增加(主要因?yàn)榫幗獯a時間增加),而幀數(shù)增加可以減小一點(diǎn)顯示延遲(不超過主機(jī)和客戶端刷新率的情況下)。
默認(rèn)情況下,串流開始后,只在客戶端播放聲音。如果想要在客戶端和主機(jī)同時播放聲音,在客戶端設(shè)置中開啟“在電腦上播放聲音”即可。
如果想要在串流時調(diào)用原生系統(tǒng)觸控鍵盤,可以三指點(diǎn)擊屏幕,就能彈出屏幕鍵盤(對于Android和IOS系統(tǒng))。
如果使用鼠標(biāo)發(fā)現(xiàn)速度過快,可以在設(shè)置-輸入設(shè)置中勾選“適合遠(yuǎn)程桌面的鼠標(biāo)模式”,這會讓鼠標(biāo)移動更加自然。
注意,如果在安卓設(shè)備上進(jìn)行串流,Windows快捷鍵將和安卓系統(tǒng)快捷鍵沖突,許多快捷鍵無法使用。要解決此問題,可以參考https://www.bilibili.com/video/BV1S64y1K7Z7,該作者的修改版本通過無障礙模式解決了快捷鍵沖突問題,同時開啟了多指觸控功能,可以方便的進(jìn)行雙指縮放等操作,真正實(shí)現(xiàn)了原生觸控體驗(yàn)。

遠(yuǎn)程串流
由于Geforce Experience和Sunshine默認(rèn)只在本地網(wǎng)絡(luò)監(jiān)聽端口,客戶端和主機(jī)位于同一局域網(wǎng)內(nèi)才能連接成功,如果要真正實(shí)現(xiàn)遠(yuǎn)程連接,最簡單穩(wěn)定的方法是公網(wǎng)直連。
獨(dú)一無二的IP地址使得主機(jī)能夠在互聯(lián)網(wǎng)中被識別,但是由于IPv4地址匱乏,大多數(shù)家庭網(wǎng)絡(luò)并不具備公網(wǎng)IPv4地址,而新一代的IPv6地址事實(shí)上已經(jīng)十分普及。
如果主機(jī)擁有公網(wǎng)IPv4地址或主機(jī)和客戶端都有公網(wǎng)IPv6地址,則可以進(jìn)行遠(yuǎn)程串流。
如果不知道是否擁有公網(wǎng)IPv4地址,則基本不可能有公網(wǎng)IPv4地址。
如果不知道是否擁有公網(wǎng)IPv6地址,可以訪問https://ip.sb,如果在IPv6欄顯示Supported則代表擁有公網(wǎng)IPv6地址。
要通過公網(wǎng)IPv4地址串流,只需在配置網(wǎng)頁https://localhost:47990/config中把Network-UpnP從“Disabled”改為“Enabled”。
要通過公網(wǎng)IPv6地址串流,只需在配置網(wǎng)頁https://localhost:47990/config中把Network-Address Family從“IPv4 only”改為“IPv4 + IPv6”。注意如果沒有配對過,但又不方便局域網(wǎng)配對,則只能手動輸入IP地址來添加主機(jī)(IPv6地址可能需要加中括號),在網(wǎng)絡(luò)設(shè)置或者cmd(命令提示符)中輸入ipconfig即可查看IP地址。
這里會出現(xiàn)“IPv6 地址”,“臨時 IPv6 地址”和“本地鏈接 IPv6 地址”,其中只有“IPv6?地址”和“臨時 IPv6 地址”是公網(wǎng)地址,但臨時地址在每次重連后均會變化,所以使用“IPv6?地址”更加穩(wěn)定。但是,該地址在一段時間后也會變化(由于前綴變化),要想永久穩(wěn)定連接,可以購買一個域名,并在主機(jī)端運(yùn)行一個服務(wù),使域名解析地址保持為主機(jī)當(dāng)前的IPv6地址,具體可以參考https://zhuanlan.zhihu.com/p/136711266。
如果客戶端依然顯示主機(jī)離線,往往是因?yàn)楣庳埢蚵酚善鞔蜷_了IPv6防火墻,需要手動關(guān)閉。例如我的光貓型號為HS8145X6,默認(rèn)情況下是打開IPv6防火墻的。

值得說明的是,目前各大運(yùn)營商已經(jīng)全面支持IPv6,家庭寬帶和移動數(shù)據(jù)基本全面支持IPv6。家庭寬帶如果無法獲得IPv6地址,一般是由于光貓或路由器型號太舊,不支持IPv6。
如果實(shí)在沒有公網(wǎng)IP地址,可以使用ZeroTier實(shí)現(xiàn)異地組網(wǎng),但是延遲會更高,使用方式可以參見網(wǎng)上教程,下載地址為https://www.zerotier.com/download。組網(wǎng)后無需額外設(shè)置,可以直接像局域網(wǎng)一樣串流。

局域網(wǎng)延遲測試
主機(jī):LCD?2560*1440@240Hz筆記本,i9-13900HX + 4060,千兆網(wǎng)口直連路由器
客戶端:OLED 2560*1600@120Hz平板,Kirin 9000E,WiFi6連接路由器
串流設(shè)置:2560*1440@120Hz,62Mbps,優(yōu)先最低延遲
測量方式:在電腦上顯示秒表,將電腦和平板都設(shè)置為120Hz,同時拍攝電腦和平板屏幕,比較兩者時間差(模糊則取更大的延遲,如下圖所示)。由于Windows自帶秒表幀數(shù)較低(事實(shí)上安卓和IOS也是),因此借助瀏覽器引擎,通過在網(wǎng)頁播放css動畫來實(shí)現(xiàn)高刷秒表。

在串流過程中,Moonlight可以顯示一些相關(guān)的性能信息:平均網(wǎng)絡(luò)延遲約4ms,平均主機(jī)處理延遲約4ms,平均解碼時間約8ms。
測量結(jié)果:連續(xù)十次拍攝延遲結(jié)果為:17ms,23ms,17ms,24ms,16ms,17ms,26ms,26ms,24ms,26ms,平均21.6ms。

補(bǔ)充
根據(jù)Sunshine官方文檔的說法(見下圖),在AMD中啟用“Enhanced Sync”(增強(qiáng)同步)或在Nvidia中啟用“Fast Sync”(快速同步)可能減少延遲。

因此,如果使用英偉達(dá)顯卡,可以在Nvidia控制面板-管理3D設(shè)置中將“垂直同步”設(shè)置為“快”,但實(shí)測中該設(shè)置可能會導(dǎo)致游戲串流畫面出現(xiàn)閃爍。