游戲串流搭建指南)
1. 為什么我最終選擇了 Sunshine 加 Moonlight 這套自托管串流方案先說結(jié)論如果你手上有一臺性能還不錯的臺式機或者帶獨顯的迷你主機又想在客廳電視、平板、輕薄本甚至手機上玩 3A 大作Sunshine 加 Moonlight 這套組合目前是自托管串流里最省心、延遲最低、畫質(zhì)最能打的一條路。我自己從早期的 NVIDIA GameStream 一路用到它被官方砍掉中間折騰過各種替代方案最后穩(wěn)定在 Sunshine 上前后幫朋友搭過七八套踩的坑足夠?qū)懸黄暾谋芸佑涗浟?。所謂游戲串流本質(zhì)就是把主機上的游戲畫面實時編碼成視頻流通過網(wǎng)絡(luò)推送到另一臺設(shè)備上顯示同時把接收端的鍵鼠、手柄操作回傳主機。聽起來簡單但要做到感覺不到延遲涉及編碼器選型、網(wǎng)絡(luò)傳輸、解碼渲染一整條鏈路。Sunshine 是運行在主機端的開源串流服務(wù)端Moonlight 是運行在接收端的客戶端兩者配合等于你自己搭了一套私有云游戲平臺不依賴任何第三方服務(wù)器數(shù)據(jù)全在自己局域網(wǎng)里跑。這套方案適合誰三類人最合適。第一類是有高性能主機但顯示器被占用想在別的房間接著玩的第二類是想把游戲畫面投到電視上享受大屏體驗的第三類是手里有老舊筆記本或者平板想借主機的算力玩游戲的。不適合誰如果你的主機本身性能就吃緊或者網(wǎng)絡(luò)環(huán)境是那種老式百兆路由加一堆墻那串流體驗會很糟建議先把網(wǎng)絡(luò)搞好再考慮。我為什么不用那些商業(yè)串流服務(wù)原因很直接延遲不可控、畫質(zhì)被壓縮、還要看訂閱臉色。自托管的好處是編碼參數(shù)、碼率、分辨率全由你說了算局域網(wǎng)內(nèi)跑滿千兆甚至 2.5G畫質(zhì)可以做到幾乎無損。下面我把從零搭建的完整流程、參數(shù)調(diào)優(yōu)、以及那些文檔里不會寫的坑一次性講透。2. 搭建前的硬件與網(wǎng)絡(luò)盤點別急著裝軟件2.1 主機端需要什么配置主機端是整套方案的核心它負(fù)責(zé)運行游戲和編碼視頻流。CPU 方面近五年的主流處理器都夠用真正吃緊的是顯卡的硬件編碼器。NVIDIA 的 NVENC、AMD 的 AMF、Intel 的 Quick Sync 都是硬件編碼方案能把編碼任務(wù)從 CPU 卸載到顯卡上大幅降低延遲和 CPU 占用。我的建議是NVIDIA 顯卡從 GTX 10 系開始 NVENC 就很好用了20 系之后畫質(zhì)和效率更佳AMD 顯卡建議 RX 5000 系以上AMF 編碼器這幾年進步明顯Intel 核顯的 Quick Sync 其實被嚴(yán)重低估如果你是用帶核顯的 Intel 平臺完全可以拿核顯來編碼獨顯專心跑游戲這個玩法后面會細說。內(nèi)存建議 16GB 起步32GB 更穩(wěn)因為游戲本身加上編碼緩沖會占用不少。硬盤方面游戲裝在 SSD 上是基本要求機械硬盤加載慢會拖累整體體驗。2.2 接收端設(shè)備的兼容性Moonlight 客戶端的覆蓋面非常廣這也是我推薦它的重要原因。官方支持 Windows、macOS、Linux、Android、iOS還有樹莓派和各種電視盒子。實測下來安卓電視盒子和手機端的體驗最好因為硬件解碼支持完善Windows 和 macOS 客戶端也很成熟Linux 端稍微折騰一點但也能跑。有個細節(jié)要注意接收端的解碼能力決定了你能跑多高的碼率和分辨率。老設(shè)備可能只支持 H.264 解碼新設(shè)備普遍支持 HEVCH.265甚至 AV1。HEVC 在同等畫質(zhì)下碼率能省 30% 到 50%所以如果你的接收端支持優(yōu)先用 HEVC。2.3 網(wǎng)絡(luò)才是真正的瓶頸我見過太多人硬件配置拉滿結(jié)果卡在網(wǎng)絡(luò)上。串流對網(wǎng)絡(luò)的要求是低延遲加高帶寬兩者缺一不可。理想情況是主機和接收端都接網(wǎng)線走千兆局域網(wǎng)這樣延遲能壓到個位數(shù)毫秒。如果必須用無線5GHz 頻段是底線WiFi 6 更好2.4GHz 基本沒法玩。這里有個反直覺的點很多人以為帶寬越大越好其實延遲穩(wěn)定性比峰值帶寬更重要。一條穩(wěn)定的 500Mbps 連接比一條忽高忽低的千兆連接體驗好得多。所以路由器別買那種便宜貨QoS 和穩(wěn)定性很關(guān)鍵。網(wǎng)絡(luò)類型帶寬典型延遲適用場景有線千兆1000Mbps1-3ms4K 60幀無壓力WiFi 6 5GHz600-900Mbps5-15ms1080P 60幀很穩(wěn)WiFi 5 5GHz300-500Mbps10-25ms1080P 60幀可用2.4GHz50-150Mbps30ms不建議串流3. Sunshine 服務(wù)端的安裝與首次配置3.1 各平臺安裝方式的選擇Sunshine 的安裝包覆蓋 Windows、Linux、macOS。Windows 用戶直接去官方倉庫下載安裝包雙擊一路下一步就行安裝完會自動注冊為系統(tǒng)服務(wù)并開機自啟。Linux 用戶稍微復(fù)雜一點Ubuntu 系可以用 deb 包也可以自己編譯后面單獨講編譯的坑。macOS 用戶下載 dmg 拖進應(yīng)用文件夾即可。我重點說 Windows因為這是絕大多數(shù)人的選擇。安裝完成后Sunshine 會在系統(tǒng)托盤顯示一個圖標(biāo)右鍵可以打開 Web 管理界面默認(rèn)地址是https://localhost:47990。注意是 https瀏覽器會提示證書不安全這是自簽名證書直接點繼續(xù)訪問就行。首次訪問會讓你設(shè)置用戶名和密碼這個憑據(jù)是用來管理 Sunshine 的不是串流時用的。設(shè)置好之后進入主界面你會看到 Applications、Configuration、Troubleshooting 幾個標(biāo)簽頁。3.2 配對流程PIN 碼那點事配對是 Sunshine 和 Moonlight 建立信任關(guān)系的過程。流程是這樣的先在接收端打開 Moonlight它會自動搜索局域網(wǎng)內(nèi)的 Sunshine 主機如果搜不到可以手動添加主機 IP。選中主機后Moonlight 會顯示一個四位 PIN 碼然后你需要在 Sunshine 的 Web 界面里輸入這個 PIN 完成配對。這里有個高頻坑PIN 碼輸入后提示配對失敗。原因通常是主機防火墻攔了 Moonlight 的回連請求或者 Sunshine 服務(wù)沒正常運行。解決辦法是檢查 Windows 防火墻確保 Sunshine 相關(guān)的端口47984、47989、47990、48010 等都放行了。我一般圖省事直接在防火墻里給 Sunshine 放行專用和公用網(wǎng)絡(luò)。還有一個坑是主機有多張網(wǎng)卡比如同時有有線和無線Sunshine 可能綁定了錯誤的網(wǎng)卡。這種情況在 Configuration 的 Network 標(biāo)簽里可以手動指定要監(jiān)聽的網(wǎng)卡選你實際用來串流的那張。3.3 應(yīng)用列表的配置邏輯Sunshine 默認(rèn)會掃描系統(tǒng)里已安裝的游戲但掃描結(jié)果經(jīng)常不全尤其是那些不在 Steam、Epic 等平臺庫里的游戲。我的做法是手動添加應(yīng)用在 Applications 標(biāo)簽頁點 Add然后填名稱、命令、工作目錄。命令這一欄是關(guān)鍵。比如你要串流一個 Steam 游戲可以直接填 Steam 的啟動命令加游戲 ID如果是獨立 exe就填 exe 的完整路徑。工作目錄填 exe 所在文件夾有些游戲不填工作目錄會啟動失敗。提示添加應(yīng)用時建議勾選 Run as administrator很多游戲需要管理員權(quán)限才能正常捕獲畫面和接收輸入。4. 畫質(zhì)與延遲的平衡編碼參數(shù)怎么調(diào)4.1 編碼器選型NVENC、AMF 還是 Quick Sync這是決定串流質(zhì)量的第一道關(guān)卡。Sunshine 支持多種編碼器在 Configuration 的 Audio/Video 標(biāo)簽里可以選。我的實測經(jīng)驗是這樣的NVIDIA 的 NVENC 是綜合表現(xiàn)最好的延遲低、畫質(zhì)好、兼容性強。如果你用 N 卡無腦選 NVENC。AMD 的 AMF 這幾年進步很大RX 6000 系之后畫質(zhì)已經(jīng)接近 NVENC但老卡上還是略遜一籌。Intel 的 Quick Sync 適合核顯平臺尤其是那些用 Intel 核顯做編碼、獨顯跑游戲的混合方案能有效分擔(dān)負(fù)載。有個進階玩法值得一試如果你同時有 Intel 核顯和獨立顯卡可以在 BIOS 里開啟核顯然后讓 Sunshine 用 Quick Sync 編碼獨顯全力跑游戲。這樣編碼和渲染互不干擾幀數(shù)更穩(wěn)。設(shè)置方法是在 Windows 顯示設(shè)置里把核顯啟用然后在 Sunshine 里選 QSV 編碼器。4.2 碼率、分辨率與幀率的三角關(guān)系這三個參數(shù)互相制約調(diào)不好就會出現(xiàn)畫面糊、卡頓或者延遲高?;驹瓌t是分辨率決定畫面清晰度的上限碼率決定實際能傳輸多少細節(jié)幀率決定流暢度。1080P 60 幀碼率建議 20-30Mbps1440P 60 幀建議 30-50Mbps4K 60 幀建議 60-100Mbps。局域網(wǎng)千兆環(huán)境下這些碼率都能輕松跑滿。如果你走無線就要根據(jù)實際帶寬適當(dāng)降低。這里有個容易被忽略的點碼率不是越高越好。超過某個閾值后畫質(zhì)提升微乎其微但網(wǎng)絡(luò)壓力陡增反而容易卡頓。我一般建議從 20Mbps 起步逐步往上加找到畫質(zhì)和穩(wěn)定性的平衡點。分辨率幀率推薦碼率編碼器建議1080P6020-30Mbps任意硬件編碼1440P6030-50MbpsNVENC/AMF1440P12050-70MbpsNVENC4K6060-100MbpsNVENC/AMF4.3 那些影響手感的高級選項Sunshine 里還有幾個高級選項調(diào)好了手感提升明顯。第一個是 Video Frame Buffer這個決定編碼緩沖的幀數(shù)設(shè)成 1 能降低延遲但可能增加卡頓設(shè)成 2 或 3 更穩(wěn)。我一般設(shè) 1因為局域網(wǎng)延遲本來就低。第二個是 FEC前向糾錯這個在無線環(huán)境下有用能抵抗丟包但會增加帶寬開銷。有線環(huán)境可以關(guān)掉。第三個是 YUV 4:4:4 色彩采樣開啟后色彩更準(zhǔn)但需要接收端支持而且碼率會上升。玩色彩豐富的游戲可以開普通游戲沒必要。5. Moonlight 客戶端的調(diào)優(yōu)與常見問題5.1 客戶端畫質(zhì)設(shè)置的正確姿勢Moonlight 端的設(shè)置和 Sunshine 端是聯(lián)動的但有些參數(shù)只在客戶端生效。打開 Moonlight 設(shè)置分辨率、幀率、碼率這三項要和 Sunshine 端匹配否則會出現(xiàn)拉伸或者黑邊。Video Bitrate 這一項如果你在 Sunshine 端已經(jīng)限制了碼率客戶端這里設(shè)成和它一致就行。如果客戶端設(shè)得比服務(wù)端高實際還是按服務(wù)端來。Display Mode 建議選 Fullscreen窗口模式會有額外的合成開銷。VSync 建議開啟能避免畫面撕裂代價是增加一點點延遲但現(xiàn)代設(shè)備上幾乎感覺不到。5.2 手柄與鍵鼠的映射問題Moonlight 對 Xbox 手柄的支持是最好的插上就能用。PS 手柄需要額外配置Windows 端可以用 DS4Windows 之類的工具模擬成 Xbox 手柄。Switch Pro 手柄也能用但震動支持不完善。鍵鼠方面大部分游戲直接映射就行但有些游戲會檢測到是遠程輸入導(dǎo)致鼠標(biāo)加速異常。解決辦法是在游戲里關(guān)閉鼠標(biāo)加速或者在 Moonlight 里調(diào)整鼠標(biāo)模式。有個冷門技巧Moonlight 支持把接收端的觸摸屏模擬成鼠標(biāo)平板上玩一些策略游戲很舒服。在設(shè)置里開啟 Touchscreen Mouse 就行。5.3 搜不到主機怎么辦這是新手最常遇到的問題。排查順序是這樣的先確認(rèn) Sunshine 服務(wù)在運行托盤圖標(biāo)是綠色的然后確認(rèn)主機和接收端在同一網(wǎng)段IP 地址前三段一致再檢查防火墻臨時關(guān)掉防火墻測試一下如果能搜到就是防火墻的問題最后檢查路由器是否開啟了 AP 隔離這個功能會阻止局域網(wǎng)設(shè)備互相通信必須關(guān)掉。如果以上都排除了還搜不到可以手動添加主機 IP。在 Moonlight 里選 Add PC Manually輸入主機的局域網(wǎng) IP比如 192.168.1.100。手動添加能繞過自動發(fā)現(xiàn)的問題。6. Ubuntu 下自啟與原生客戶端編譯的實戰(zhàn)記錄6.1 Sunshine 在 Ubuntu 上的開機自啟配置Ubuntu 用戶裝完 Sunshine 后默認(rèn)可能不會開機自啟需要手動配置 systemd 服務(wù)。Sunshine 官方提供了服務(wù)文件一般在安裝目錄里能找到。把它復(fù)制到/etc/systemd/system/下然后執(zhí)行sudo systemctl daemon-reload sudo systemctl enable sunshine sudo systemctl start sunshine這樣 Sunshine 就會隨系統(tǒng)啟動。但有個坑Sunshine 需要訪問顯卡和輸入設(shè)備如果以普通用戶運行可能權(quán)限不足。解決辦法是在服務(wù)文件里指定 User 和 Group或者把用戶加入 video、input 組。sudo usermod -aG video,input $USER改完記得重新登錄生效。6.2 Moonlight Qt 原生客戶端的編譯安裝Linux 上的 Moonlight 客戶端有幾種Qt 版本是功能最全的。很多發(fā)行版的倉庫里版本比較老想要最新功能就得自己編譯。編譯流程大致是這樣先裝依賴Ubuntu 下sudo apt install cmake build-essential libsdl2-dev libssl-dev \ libavcodec-dev libavutil-dev libavformat-dev qtbase5-dev \ qtdeclarative5-dev qtquickcontrols2-5-dev qml-module-qtquick2 \ qml-module-qtquick-controls2 qml-module-qtquick-layouts \ qml-module-qtquick-window2 qml-module-qtgraphicaleffects然后拉源碼、編譯git clone https://github.com/moonlight-stream/moonlight-qt.git cd moonlight-qt git submodule update --init --recursive mkdir build cd build cmake .. make -j$(nproc) sudo make install編譯過程中最常見的報錯是依賴缺失尤其是 Qt 的 QML 模塊。如果 cmake 階段報找不到某個 Qt 組件就回去裝對應(yīng)的 dev 包。另一個坑是 submodule 沒更新導(dǎo)致編譯時找不到第三方庫記得執(zhí)行g(shù)it submodule update --init --recursive。編譯完成后直接運行moonlight就能啟動。如果提示找不到庫可能需要執(zhí)行sudo ldconfig刷新庫緩存。6.3 自托管場景下的其他玩法延伸既然主機已經(jīng) 24 小時開著跑 Sunshine其實還能順便干點別的。比如搭個自托管的寫作環(huán)境用 Docker 跑一個筆記服務(wù)配合 WebDAV 同步隨時隨地都能寫東西。我自己的做法是在同一臺主機上跑一個輕量的 Markdown 編輯器服務(wù)通過瀏覽器訪問和串流互不干擾。資源分配上要注意串流時編碼會占用顯卡寫作服務(wù)基本不吃顯卡所以兩者共存沒問題。但如果你的主機內(nèi)存緊張就要留意別讓后臺服務(wù)把內(nèi)存吃滿影響游戲。7. 驅(qū)動更新后串流失效的排查思路7.1 為什么顯卡驅(qū)動更新會導(dǎo)致串流出問題這是很多人遇到過的怪事顯卡驅(qū)動一更新Moonlight 就連不上了或者連上后黑屏。根本原因是 Sunshine 依賴顯卡的編碼接口驅(qū)動更新可能改變了接口行為或者 Sunshine 的編碼器初始化失敗。NVIDIA 用戶尤其容易遇到這個問題因為 NVIDIA 的驅(qū)動更新比較頻繁而且 GameStream 被砍之后NVENC 的某些接口行為有變化。遇到這種情況第一步是重啟 Sunshine 服務(wù)讓它重新初始化編碼器。如果重啟沒用就重啟主機。7.2 逐步排查的完整鏈路我的排查順序是這樣的先看 Sunshine 的日志在 Web 界面的 Troubleshooting 標(biāo)簽里能看到實時日志重點看編碼器初始化那幾行有沒有報錯然后確認(rèn) Moonlight 端能不能搜到主機能搜到說明網(wǎng)絡(luò)沒問題問題在編碼或配對接著嘗試降低編碼參數(shù)比如把 HEVC 換成 H.264把分辨率降到 1080P看能不能恢復(fù)最后檢查驅(qū)動版本如果是最新驅(qū)動出的問題可以回退到上一個穩(wěn)定版本。有個經(jīng)驗NVIDIA 驅(qū)動不要盲目追新尤其是 Studio 驅(qū)動和 Game Ready 驅(qū)動串流場景下 Studio 驅(qū)動往往更穩(wěn)。如果你主要用串流可以優(yōu)先裝 Studio 驅(qū)動。7.3 編碼器被占用的情況還有一種情況是編碼器被其他程序占用了。比如你同時開著 OBS 在錄制OBS 也用了 NVENC兩個程序搶編碼器就會出問題。解決辦法是串流時關(guān)掉其他占用編碼器的程序或者在 Sunshine 里換一個編碼器。Windows 上可以用任務(wù)管理器看 GPU 的編碼占用如果編碼單元已經(jīng)滿載串流肯定卡。這種情況要么降低串流參數(shù)要么關(guān)掉其他編碼任務(wù)。8. 我踩過的那些坑和最后的經(jīng)驗總結(jié)第一個大坑是無線網(wǎng)絡(luò)下的延遲波動。我一開始圖省事主機接網(wǎng)線接收端用 WiFi結(jié)果玩動作游戲時偶爾會卡一下。后來把接收端也接了網(wǎng)線問題徹底消失。所以我的建議是能接網(wǎng)線就接網(wǎng)線這是提升串流體驗性價比最高的一步。第二個坑是 HDR 串流。Sunshine 和 Moonlight 都支持 HDR但配置起來比較麻煩需要主機、接收端、游戲三方都支持而且色彩映射容易出問題。我折騰了幾次之后放棄了SDR 下畫質(zhì)已經(jīng)足夠好HDR 帶來的提升不值得那些折騰。第三個坑是音頻延遲。默認(rèn)設(shè)置下音頻和畫面可能有幾十毫秒的不同步在 Sunshine 的音頻設(shè)置里可以調(diào)整緩沖大小調(diào)小能降低延遲但太小會爆音。我一般設(shè)成 48ms 左右平衡得比較好。第四個坑是主機休眠。如果主機設(shè)置了自動休眠串流到一半主機會睡過去連接就斷了。解決辦法是在電源設(shè)置里把休眠關(guān)掉或者用 Sunshine 的 Prevent display sleep 選項。最后分享一個實用技巧Sunshine 支持多用戶配置你可以為不同的接收端設(shè)置不同的應(yīng)用列表和編碼參數(shù)。比如客廳電視用 4K 高碼率手機用 1080P 低碼率各取所需。在 Web 界面的 Applications 里可以針對每個應(yīng)用單獨配置靈活度很高。這套方案我從零搭到穩(wěn)定運行前后花了大概一個周末但真正調(diào)優(yōu)到滿意用了幾周?,F(xiàn)在它已經(jīng)成了我日常玩游戲的主力方式主機在書房人在客廳體驗和本地幾乎沒差別。如果你也在找一套靠譜的自托管串流方案Sunshine 加 Moonlight 值得你花時間折騰。