1 पॉइंट द्वारा GN⁺ 4 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 है
  • Moonlight पहली connection पर PIN दिखाता है, और host notification या http://localhost:47989/pin पर pairing की जा सकती है
  • /submit-pin endpoint पर uniqueid और pin को POST करके command line से भी pairing की जा सकती है

application कॉन्फ़िगरेशन

  • config.toml के हर [[application]] में उस program को परिभाषित किया जाता है जो isolated session में चलेगा
    • title: Moonlight में दिखाया जाने वाला नाम
    • boxart: वैकल्पिक cover image path
    • command: executable और arguments की सूची
  • pre_command application शुरू होने से पहले commands को क्रम से synchronous तरीके से चलाता है, और सभी खत्म होने तक session इंतज़ार करता है
  • post_command streaming खत्म होने के बाद commands को क्रम से synchronous तरीके से चलाता है, और सभी खत्म होने तक server इंतज़ार करता है
  • इससे conflicting services को रोकना या streaming से पहले/बाद GPU state बदलना संभव है

स्वचालित application खोज

  • Steam scanner तय Steam library में installed games खोजता है और game ID शामिल करने वाला execution command बनाता है
  • Desktop scanner तय directory की .desktop files से 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 टिप्पणियां

 
GN⁺ 4 시간 전
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 Link भी छूट गया है। Hardware की बिक्री बंद हो चुकी है, लेकिन Android app आदि के जरिए software अभी भी जारी है।
      Steam के पास Google के उलट पहले से customer base भी है, इसलिए अगर वह कल ही सभी hardware पर owned games चलाने वाली Stadia-style service announce कर दे, तो मुझे हैरानी नहीं होगी।
    • Consumer GPU को कई virtualization hosts के बीच share करना अभी भी practically लगभग असंभव है, इसलिए उपयोगिता सीमित रहती है। एक powerful server से thin clients जोड़कर पुराने COD जैसे games खेलने वाला setup ideal है।
    • सोच रहा हूं कि Moonshine Linux पर headless Sunshine की तरह काम करता है या नहीं।
      Sunshine में streaming के दौरान host screen पर भी game दिखता है, लेकिन क्या Moonshine का मतलब यह है कि इसे physical display के बिना चलाया जा सकता है या कई games साथ-साथ चलाए जा सकते हैं?
    • Proxmox के अंदर Fedora boot होते समय असली monitor specs की नकल करने वाला fake display बनाने के लिए kernel arguments set किए हैं।
      Sunshine इसे real display के रूप में पहचानता है, इसलिए power और LAN cable ही काफी हैं; HDMI dummy plug या virtual display driver के बिना Linux game server ठीक चलता है।
    • Sunshine और Moonlight फिर से actively develop हो रहे हैं, और लगता है इनके releases Apollo और Artemis से भी ज्यादा हालिया हैं।
      सोच रहा हूं कि 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 भी ठीक है।

    • महीने के 20 डॉलर वाले Claude या Codex plan भर से Linux को आजमाने की entry barrier काफी कम हो गई है। पहले जिन चीजों में कई घंटे या दिन अटक जाते थे, वे अब एक कॉफी पीते-पीते solve हो जाती हैं, इसलिए Bazzite machine पर test करते समय थोड़ी rough edges भी पहले जैसी बाधा नहीं लगेंगी।
    • लगता है आपने इसे बहुत विनम्रता से introduce किया। Linux के Sunshine में arbitrary resolution इस्तेमाल न कर पाना बहुत बड़ा अंतर है।
    • Sunshine की कई Linux समस्याओं से परेशान होकर कल रात Moonshine मिला और अब तक मैं इससे काफी खुश हूं।
    • लगभग 10 मिनट इस्तेमाल किया और यह impressive लगा। VS Code नहीं चला पाया, लेकिन remote mode है, इसलिए यह बहुत अहम नहीं है; बाद में किसी दूसरे app के साथ फिर try करूंगा।
      अपने 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 जैसा है।

    • SSX series की याद आती है। अफसोस है कि EA Big बंद हो गया और किसी दूसरी company ने भी इसे आगे नहीं बढ़ाया; उनमें से Tricky मेरा सबसे पसंदीदा था।
  • मैं 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 करना लगभग बिना परेशानी के हो जाता है।

    • Android phone पर भी try करने लायक है। Controller लगे 6.7-inch OLED 2340×1080, 120Hz HDR screen पर बिस्तर में Diablo 2 Remastered खेलना Steam Deck से भी ज्यादा संतोषजनक है।
      Phone सिर्फ video play करता है, इसलिए गर्म नहीं होता और battery भी लंबी चलती है।
    • Streaming के दौरान latency spikes रोकने के लिए क्या AWDL बंद करना पड़ता है, यह भी जानना चाहता हूं।
    • Steam के बाहर के games support करने के अलावा, यह Steam Link से बेहतर काम करता है या नहीं, यह भी जानना चाहता हूं।
  • सोच रहा हूं कि Moonshine हर session के लिए virtual desktop जैसी कोई चीज बनाता है, सिर्फ अलग screen है, या फिर पूरी तरह independent compositor instance है।

    • Feature description के मुताबिक हर stream desktop environment से पूरी तरह अलग अपने compositor में चलता है। कई instances host कर सकने वाला game server का विचार बहुत आकर्षक है।
  • PC पर Switch गेम्स को emulate करके पुराने Wii U और 3DS पर stream करने के लिए मैंने यह तरीका इस्तेमाल किया

    • Android-आधारित Ayn Odin·Thor जैसे नए handheld devices पर भी इस्तेमाल करता हूँ
    • कुछ साल पहले Rust में सभी emulators के लिए multiplayer network play support करने वाला एक tool बनाया था, और हैरानी की बात है कि implementation आसान था
  • 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 साल बाद सोचता हूँ कि क्या यह बेहतर हुआ है

    • कभी-कभी ऐसे sessions भी हुए जो बिल्कुल सही चले, इसलिए technically यह संभव है, यह confirm हो गया; लेकिन करीब 90% समय अजीब errors, settings issues और updates से compatibility टूटने जैसी दिक्कतें रहीं। कुछ लोग इसे अच्छे से इस्तेमाल करते हैं, लेकिन issues polish करने के लिए अभी भी काफी काम बाकी लगता है
    • लगभग एक हफ्ते पहले LLM की मदद से Windows host और Ubuntu client को 30 मिनट में setup कर लिया, और external network connection issue भी करीब 15 मिनट में हल हो गया
      आखिर में जिस game को खेलना था वह सिर्फ local multiplayer support करता था और ProtonDB की limited compatibility rating के उलट laptop पर सीधे चल गया, इसलिए streaming की जरूरत नहीं पड़ी; लेकिन setup खुद आसान था। Tailscale भी इस्तेमाल किया
    • host PC को wired LAN से जोड़ना चाहिए और client के लिए 1080p 60fps या उससे ऊपर पर कम से कम Wi‑Fi 6 इस्तेमाल करना चाहिए। कुछ routers में packet loss बहुत ज्यादा होता है, इसलिए ठीक-ठाक equipment इस्तेमाल करना या खुद configuration करना बेहतर है
    • desktop और PS Vita के बीच Sunshine और Moonlight इस्तेमाल कर रहा हूँ; मुख्य बात यह है कि कम से कम host को wired connection पर रखें और wireless router तक latency कम करें
      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 का सही ध्यान नहीं रख पाते लगते हैं

    • अब Nvidia proprietary feature वाले दौर से काफी बेहतर environment है, इसलिए फिर कोशिश करना सही रहेगा। सबसे आसान तरीका Steam का built-in Remote Play और official app है, जबकि Sunshine और Moonlight बेहतर results, fine-grained settings और Steam के बाहर की apps का support देते हैं
      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 जितना जादुई रूप से आसान नहीं है, लेकिन फिर कोशिश करने की सलाह दूँगा
    • 5 साल पहले similar issues की वजह से game streaming पूरी तरह छोड़ दी थी, लेकिन एक महीने पहले पुराने Linux laptop पर sofa से Oxygen Not Included खेलने के लिए 5 मिनट में Sunshine और Moonlight setup किया और वह तुरंत perfectly चल पड़ा
      recommendations के उलट host भी Wi‑Fi पर था, फिर भी अच्छी तरह चला; पिछले कुछ सालों में technology से की गई चीजों में यह सबसे magical moment था। हालांकि मैंने सिर्फ local Wi‑Fi streaming इस्तेमाल की