- Moonshine एक Linux host है जो PC गेम की स्क्रीन को Moonlight client तक भेजता है और keyboard·mouse·controller input को host तक वापस पहुँचाकर remote play को सपोर्ट करता है
- हर stream के लिए अलग Wayland compositor इस्तेमाल किया जाता है ताकि वह desktop से अलग रहे; streaming के दौरान भी host PC का इस्तेमाल जारी रखा जा सकता है और यह बिना monitor वाले server पर भी चल सकता है
- GPU के जरिए H.264·H.265·AV1 encoding, 10-bit HDR, motion·touchpad·haptic समेत input, और Opus-आधारित low-latency 5.1·7.1-channel audio को सपोर्ट करता है
- Linux और systemd, Vulkan video encoding समर्थित NVIDIA RTX·AMD RDNA2+·Intel Arc GPU, और Moonlight v6.0.0 या उससे नया आवश्यक है
- GameStream protocol traffic application layer पर पूरी तरह encrypted नहीं होता, इसलिए ports को सीधे internet पर expose नहीं करना चाहिए; external access के लिए Tailscale·WireGuard·ZeroTier जैसे VPN की ज़रूरत होती है
अलग-थलग गेम स्ट्रीमिंग
- हर application host desktop से अलग अपनी streaming session में चलती है
- streaming के दौरान भी host PC को दूसरे कामों के लिए इस्तेमाल किया जा सकता है
- active desktop session, monitor, या HDMI dummy plug के बिना headless server पर काम करता है
- GPU के Vulkan video encoding से H.264·H.265·AV1 को प्रोसेस करता है
- समर्थित games में वास्तविक 10-bit HDR streaming देता है
- mouse, keyboard और gamepad को सपोर्ट करता है, साथ ही gamepad के motion·touchpad·haptic input को भी संभालता है
- audio low-latency Opus encoding का उपयोग करता है और stereo तथा 5.1·7.1 surround को सपोर्ट करता है
चलाने की आवश्यकताएँ
- फिलहाल केवल Linux के लिए है, Arch Linux पर टेस्ट किया गया है, और अन्य Linux distributions पर भी चलने के उदाहरण हैं
- application process चलाने और प्रबंधन के लिए systemd आवश्यक है
- Vulkan video encoding सपोर्ट करने वाला NVIDIA RTX, AMD RDNA2 या नया, या Intel Arc GPU चाहिए
- client Moonlight v6.0.0 या उससे नया होना चाहिए; पुराने versions या unofficial ports की compatibility की गारंटी नहीं है
इंस्टॉलेशन और रन करना
- Arch Linux में AUR के जरिए
yay -S moonshineसे install किया जा सकता है - user logout होने पर भी application चलानी हो तो
sudo loginctl enable-linger $USERका उपयोग करें- अगर streaming के समय user हमेशा logged in रहता है तो यह step छोड़ा जा सकता है
sudo systemctl enable --now moonshine@$USERसे boot पर service शुरू करें और तुरंत चलाएँ- source build के लिए clang, CMake, Rust, Wayland, Vulkan headers, shaderc, Mesa, Opus, PulseAudio से जुड़ी libraries आदि चाहिए
- build के बाद
cargo run --release -- /path/to/config.tomlसे चलाएँ
कॉन्फ़िगरेशन और client कनेक्शन
- तय path पर file न होने पर configuration file अपने-आप बन जाती है
- AUR package का default path
$XDG_CONFIG_HOME/moonshine/config.tomlहै
- AUR package का default path
- Moonlight पहली connection पर PIN दिखाता है, और host notification या
http://localhost:47989/pinपर pairing की जा सकती है /submit-pinendpoint परuniqueidऔरpinको POST करके command line से भी pairing की जा सकती है
application कॉन्फ़िगरेशन
config.tomlके हर[[application]]में उस program को परिभाषित किया जाता है जो isolated session में चलेगाtitle: Moonlight में दिखाया जाने वाला नामboxart: वैकल्पिक cover image pathcommand: executable और arguments की सूची
pre_commandapplication शुरू होने से पहले commands को क्रम से synchronous तरीके से चलाता है, और सभी खत्म होने तक session इंतज़ार करता हैpost_commandstreaming खत्म होने के बाद commands को क्रम से synchronous तरीके से चलाता है, और सभी खत्म होने तक server इंतज़ार करता है- इससे conflicting services को रोकना या streaming से पहले/बाद GPU state बदलना संभव है
स्वचालित application खोज
- Steam scanner तय Steam library में installed games खोजता है और game ID शामिल करने वाला execution command बनाता है
- Desktop scanner तय directory की
.desktopfiles से applications ढूँढता है- terminal applications शामिल करनी हैं या नहीं और icon path resolve करना है या नहीं, यह सेट किया जा सकता है
Sunshine से अंतर और सीमाएँ
- Sunshine ज़्यादा platforms और कुल मिलाकर ज़्यादा features को सपोर्ट करता है, लेकिन Moonshine केवल Linux के लिए है
- Moonshine की खासियत यह है कि इसकी streaming session desktop से अलग रहती है, इसलिए host का इस्तेमाल जारी रखा जा सकता है और यह active desktop के बिना भी चलता है
- एक साथ दो clients को streaming फिलहाल सपोर्ट नहीं है, और यह project का मुख्य फोकस भी नहीं है
नेटवर्क सुरक्षा
- Moonshine public network के लिए डिज़ाइन नहीं किया गया है
- underlying GameStream protocol की सीमाओं के कारण traffic application layer पर पूरी तरह encrypted नहीं है
- internet पर streaming के लिए Tailscale, WireGuard, ZeroTier जैसे VPN का इस्तेमाल करना चाहिए, और Moonshine ports को सीधे expose नहीं करना चाहिए
आधार प्रोजेक्ट्स
- Moonlight: Moonshine के लिए client प्रदान करता है
- Sunshine: host API का आधार प्रदान करता है
- Inputtino: input device implementation का आधार प्रदान करता है
- magic-mirror: Vulkan और Wayland compositor का उपयोग करने वाली headless streaming के लिए प्रेरणा देता है
1 टिप्पणियां
Hacker News की राय
संक्षेप में, Nvidia GameStream पहले एक proprietary technology थी जिसे Nvidia ने बंद कर दिया, और उसके बाद Sunshine और Moonlight सभी platforms पर low-latency streaming सपोर्ट करने वाले open source server-client के रूप में सामने आए।
Game on Whales multi-user streaming और virtual displays जोड़कर self-hosted Stadia/GeForce Now जैसा बनता है, जो मौजूदा login session को प्रभावित नहीं करता, और Steam, Firefox वगैरह को चुने हुए containers में चलाता है।
बाद में Apollo और Artemis ने virtual display streaming को आसान बनाया, लेकिन Apollo का virtual display असल में लगभग Windows-only है, जबकि Moonshine इसे Linux server पर implement करता है।
Apollo से निकला Vibepollo लगभग पूरी तरह vibe coding से बना improved version है, इसलिए मैं व्यक्तिगत रूप से इसे इस्तेमाल नहीं करने वाला; सोच रहा हूं कि इस lineage में कुछ छूट तो नहीं गया।
Steam के पास Google के उलट पहले से customer base भी है, इसलिए अगर वह कल ही सभी hardware पर owned games चलाने वाली Stadia-style service announce कर दे, तो मुझे हैरानी नहीं होगी।
Sunshine में streaming के दौरान host screen पर भी game दिखता है, लेकिन क्या Moonshine का मतलब यह है कि इसे physical display के बिना चलाया जा सकता है या कई games साथ-साथ चलाए जा सकते हैं?
Sunshine इसे real display के रूप में पहचानता है, इसलिए power और LAN cable ही काफी हैं; HDMI dummy plug या virtual display driver के बिना Linux game server ठीक चलता है।
सोच रहा हूं कि Windows पर remote gaming के दौरान क्या कोई और server इस्तेमाल कर सकता है। मैंने जो ज्यादातर virtual display solutions देखे, वे server display को बंद कर देते हैं।
मैं Moonshine developer हूं। Core idea Sunshine जैसा है, लेकिन फर्क यह है कि यह मौजूदा desktop environment पर निर्भर नहीं करता और अपना compositor बनाता है।
इसे desktop environment के बिना headless चलाया जा सकता है, dummy plug के बिना arbitrary resolution और refresh rate बनाए जा सकते हैं, और monitor support न भी करे तो HDR इस्तेमाल किया जा सकता है। मौजूदा desktop इस्तेमाल करते हुए साथ-साथ game stream करना भी संभव है।
तकनीकी तौर पर codebase को हल्का रखने के लिए जानबूझकर scope narrow रखा गया है: एक Vulkan encoder, एक Linux, कोई GUI नहीं, और पुराने Moonlight clients का support नहीं। इसके बदले अपेक्षाकृत नए GPU/driver और नए Moonlight client की जरूरत होती है।
यह 2022 से बना रहा hobby project है। शुरुआत में यह Sunshine से कमतर था, इसलिए README में इसे इस्तेमाल न करने की सलाह दी थी, लेकिन अलग तरह की features आने के बाद वह लाइन हटा दी।
नए users के लिए मैं पहले Sunshine recommend करता हूं, क्योंकि उसके लिए ज्यादा material है और उसके ठीक चलने की संभावना अधिक है; लेकिन अगर आपको नई चीजें आजमाना पसंद है, तो Moonshine भी ठीक है।
अपने compositor वाले structure की वजह से पूरा desktop environment चलाना मुश्किल लगता है, लेकिन Linux पर कम से कम एक-एक app को भी reliably remote run करने का तरीका बहुत जरूरी है। KDE और GNOME के built-in servers कुल मिलाकर problematic हैं और monitor भी on रहना पड़ता है।
Sunshine और Moonlight से desktop पर emulate और upscale किया हुआ PS2 game SSX Tricky को 7 साल से ज्यादा पुराने Android set-top box पर बहुत smooth stream कर पाया।
हालांकि desktop screen पर game वैसे ही दिखता था, इसलिए जब कोई और game खेल रहा हो तो host इस्तेमाल नहीं किया जा सकता था; Moonshine लगता है इसे solve करता है। पहले से बेहतरीन combo पर icing on the cake जैसा है।
मैं MacBook में DualSense connect करके Moonlight खोलता हूं, gaming desktop पर full-screen connect करता हूं और फिर Steam के AAA games चलाने के तरीके से Moonlight और Apollo इस्तेमाल कर रहा हूं।
Wi-Fi 7 पर महसूस होने लायक latency लगभग नहीं है, और बड़े TV से जुड़ा Minisforum भी DualSense के अलग button combination से connect हो सकता है। Apollo settings save रखता है, इसलिए दोनों devices के बीच switch करना लगभग बिना परेशानी के हो जाता है।
Phone सिर्फ video play करता है, इसलिए गर्म नहीं होता और battery भी लंबी चलती है।
सोच रहा हूं कि Moonshine हर session के लिए virtual desktop जैसी कोई चीज बनाता है, सिर्फ अलग screen है, या फिर पूरी तरह independent compositor instance है।
PC पर Switch गेम्स को emulate करके पुराने Wii U और 3DS पर stream करने के लिए मैंने यह तरीका इस्तेमाल किया
Moonlight और Sunshine का combination RTX 4000 Pro GPU server पर संतोषजनक तरीके से इस्तेमाल कर रहा हूँ
जुड़े हुए client के हिसाब से automatic resolution adjustment की कमी ही खलती थी, लेकिन Home Assistant Windows client से script लिखकर इसे हल कर लिया
laptop से phone पर Sunshine और Moonlight streaming setup करने के लिए guide follow की, लेकिन usable result नहीं मिला
आराम करने के लिए खेलने वाले game पर अपना सीमित खाली हफ्ता codec, latency, Wi‑Fi settings और कई apps से जूझने में खर्च कर दिया, फिर छोड़ दिया; अब करीब 3 साल बाद सोचता हूँ कि क्या यह बेहतर हुआ है
आखिर में जिस game को खेलना था वह सिर्फ local multiplayer support करता था और ProtonDB की limited compatibility rating के उलट laptop पर सीधे चल गया, इसलिए streaming की जरूरत नहीं पड़ी; लेकिन setup खुद आसान था। Tailscale भी इस्तेमाल किया
wireless में ideal environment में भी retransmission की जरूरत वाले packets कहीं ज्यादा होते हैं, इसलिए Wi‑Fi सिर्फ client side पर इस्तेमाल करना बेहतर है
GPU को direct attach किए हुए ROS 2 development VM में remote access के लिए Sunshine और Moonlight इस्तेमाल कर रहा हूँ
पुराने Ubuntu की जरूरत थी इसलिए VM चुना, और Gazebo simulation की वजह से GPU direct attach जरूरी था। RDP में desktop बहुत slow और unresponsive था, लेकिन इस combination से usable हो गया
अपना PC game streaming setup करना उस दौर की तुलना में काफी मुश्किल हो गया है जब बस Nvidia feature enable करना होता था
पिछली बार कोशिश की तो चलाने का तरीका समझ नहीं आया और छोड़ दिया; बाकी खूबियों के बावजूद open source developers usability का सही ध्यान नहीं रख पाते लगते हैं
YouTube guides या AI की मदद भी ली जा सकती है; असल में एक बार AI के साथ मिलकर यह कारण ढूँढा था कि Linux distribution firewall streaming ports block कर रहा था
शुरुआत local network से करना और internet streaming बाद में setup करना बेहतर है, लेकिन अगर WireGuard या Tailscale जैसा home VPN है तो मुश्किल नहीं हो सकता। host के लिए wired connection सबसे अच्छा है, और client Wi‑Fi अगर 6GHz support करता है तो आम तौर पर ठीक रहता है
PS Remote Play जितना जादुई रूप से आसान नहीं है, लेकिन फिर कोशिश करने की सलाह दूँगा
recommendations के उलट host भी Wi‑Fi पर था, फिर भी अच्छी तरह चला; पिछले कुछ सालों में technology से की गई चीजों में यह सबसे magical moment था। हालांकि मैंने सिर्फ local Wi‑Fi streaming इस्तेमाल की