Coder Social home page Coder Social logo

moonlight-stream / moonlight-chrome Goto Github PK

View Code? Open in Web Editor NEW
726.0 47.0 159.0 13.19 MB

GameStream client for ChromeOS

License: GNU General Public License v3.0

Makefile 0.38% C 92.27% Batchfile 0.01% C++ 2.88% HTML 0.40% JavaScript 3.71% CSS 0.33% Shell 0.02%
moonlight nacl pnacl chromeos chrome-app nvidia gamestream

moonlight-chrome's Introduction

Moonlight for ChromeOS

Moonlight for ChromeOS is an open source client for NVIDIA GameStream and Sunshine.

Moonlight for ChromeOS allows you to stream your full collection of games from your powerful desktop to another PC or laptop running ChromeOS.

Moonlight also has mobile versions for Android and iOS/tvOS.

Check out the Moonlight wiki for more detailed project information, setup guide, or troubleshooting steps.

AppVeyor Build Status

Moonlight for ChromeOS

Deprecation

Moonlight for ChromeOS is a legacy client that depends on the deprecated NaCl runtime. It is receiving only basic bugfixes and little/no feature work.

For ChromeOS systems, we recommend migrating to the Android app for additional features, functionality, and active support. Please reach out in the GitHub tracker if there are any functionality or performance regressions when moving to the Android client on ChromeOS systems.

For Windows, Mac, and Linux clients, we recommend running the native PC port.

Building

  1. Install the Chrome Native Client SDK and download the current Pepper SDK
  2. Set the NACL_SDK_ROOT environment variable to your Pepper SDK folder. If you need more detailed instructions, see here
  3. Run git submodule update --init --recursive from within moonlight-chrome/
  4. Run make from within the moonlight-chrome/ repo

Testing

  1. Open the Extensions page in Chrome
  2. Check the 'Developer mode' option
  3. Click 'Load unpacked extension' and point it at your built moonlight-chrome repo
  4. Run Moonlight from the extensions page
  5. If making changes, make sure to click the Reload button on the Extensions page

moonlight-chrome's People

Contributors

aghassi avatar balping avatar brooss avatar cgutman avatar dead avatar goonieg avatar jorys-paulin avatar kevincharm avatar mandrichenko avatar raidancampbell avatar ryanomackey avatar tomciaaa avatar utopiafallen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

moonlight-chrome's Issues

Don't start in full-screen

Starting the game chooser UI in full-screen isn't really what we want. I'd prefer that we only enter full-screen when the actual stream starts.

Cache NvHTTP's appList

The getAppById and getAppByName functions both call getAppList. I don't see how this is necessary: I think instead a cached copy of the appList should be kept around.

The change is straightforward: on each call to getAppById or getAppByName, it checks if the variable is populated, if it's not then the variable is filled by a call to getAppList. Once we know the variable is filled, we continue with the logic of the function.

I think if the user really wants to add a new game, and see it appear in moonlight, without restarting moonlight, it's reasonable to expect them to hit the Retrieve App List button. The Retrieve App List button should make an actual API call to getAppList.

Master is broken

can't stream, and RTSP fails. Working on this until it's fixed.

Select video resolution

planned options: 720p, 1080p
Where should the user be able to select this? Host pairing, game selection, etc...?

Video scaling is sad

the data-width and data-height attribute in HTML seems to determine the ultimate streaming resolution. It seems to receive the stream at a certain resolution, then scale the final resolution to meet the final 1280x720.

Pairing doesn't work consistently

For some reason, pairing seems spotty: I can't get pairing to work on a first run, but after restarting, and another couple attempts, it seems to work.

To replicate this, it's necessary to clear the stored pairing by running the following line in the javascript console:

chrome.storage.sync.clear()

New UI for PC and app selection

The Moonlight Chrome UI should look and work similarly to Moonlight Android and iOS.

  • PCs should be displayed in a grid with icons rather than a dropdown
  • All mDNS discovered PCs should be added to the grid automatically
  • There should be a separate page or advanced settings panel for adding a PC to the grid by IP address
  • After a PC is clicked, if paired, the app grid should be displayed with box art and app titles. If not paired, pairing should begin.
  • There should be a separate settings page rather than having the settings stuck at the top

Unify terminology

  • host renders and streams the app
  • client receives the stream
  • app is the item selected to stream
  • address is the combined term for IP or hostname used to contact the host

Gamepad detection breaks sometimes

Sometimes it is required to restart Chrome from Moonlight to properly detect newly added gamepads. We should figure out if this is a Chrome bug or a Moonlight bug.

Perform routine polling of available PCs in the background

We should be polling machines the in background for reachability over the available IP addresses. We should pull new serverinfo roughly every 5 seconds. We should pull a new applist every 30 seconds (when we're viewing the grid of apps).

Start new app, auto-canceling the currently running app

By using a dialog similar to the pairing dialog, the user should be allowed to quit whatever's currently running, and start the app they wanted.

Should be relatively simple: when the go to run an app, check if there's already a currently running app. If there is, throw up a yes/no popup: "You wanted to start game X. Game Y is already running. Would you like to stop Game Y to start Game X?"

Test and enable 4K streaming

We need to add the GUI options for 4K and find any other places where resolutions might be hardcoded. We should also make sure it works on the various platforms.

Javascript code needs reviewed

I've never done this Javascript stuff before, and I'm absolutely certain there are fundamental practices that I'm disobeying. It would be awesome if someone more experienced in Javascript could take a look at the code.

Javascript code is located in the static/js directory, and my main concern is the index.js file

Catch errors due to NaCl module not being loaded

The first time the NaCl module is loaded (such as after a build clean) loading takes longer. Unfortunately, it takes long enough that the user can reasonably try to pair before the module is loaded. Any calls into NaCl will fail until it's loaded, so we need some way to prevent these calls from being made until the module is initialized.

Cannot remove a paired computer

Never occurred to me...

The current method to remove a computer is to remove all saved settings. To do this one must open the Javascript console (right click > inspect), and run the following command

chrome.storage.sync.clear()

Pairing not supported

X.509 crypto seems to be required for the SSL verification. The jsrsasign library looks to be a good candidate for supporting this on the javascript side.

UI doesn't reset after quitting stream

Start stream, have NaCL capture mouse/keyboard, ctrl + alt + shift + q, screen goes black.

This needs to send the user back to a screen similar (or identical to) the showAppsMode() seen after retrieving the list of apps from a host.

esc key kicks out of fullscreen

The plugin starts in fullscreen, and Chrome devotes the esc key to leaving fullscreen. Unfortunately, pretty much every game likes to use the esc key. The workaround is to maximize, but not fullscreen, the plugin.

I'm not sure if it's possible to fix this behavior: Chrome may not allow a plugin to capture the esc key while in fullscreen.

Video Stutter

36e76ed fixed hardware acceleration on OSX, but seems to have also introduced video stutter. It almost seems that there's a backlog of frames that still gets rendered when some holdup occurs.

Graphical feedback when connecting the stream

Similar to Android, PC, and iOS, Moonlight Chrome should display connection progress messages as the connection is being established. This way the user is not left with a black screen while the app is starting.

Save data

Save data for pairings, previously connected hosts, stream framerate/resolution, etc...

Starting RTSP handshake failed

index.js:106 message received: Starting connection to 192.168.1.223 to play game ID game_id_1
index.js:106 message received: Starting platform initialization...
index.js:106 message received: Starting name resolution...
index.js:106 message received: Starting RTSP handshake...
index.js:106 message received: Starting RTSP handshakefailed
index.js:106 message received: Starting connection failed

Any ideia what could be causing this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.