moonlight-stream / moonlight-chrome

GameStream client for ChromeOS
GNU General Public License v3.0
747 stars 165 forks source link

Latency, bandwith, resolution #119

Closed ronyn77 closed 8 years ago

ronyn77 commented 8 years ago

Hello,

I have tried to stream from my pc to a friend of mine. We live both in two different european countries. We check the connection between the two pcs, and what I have seen is that the ping is between 53ms and 60ms, and the upload is stable at 45 Mbits. He can reach at maximum 80 Mbits download and I can stream max 50 mbits upload. If he chooses 720p resolution at 30 fps, and set the bandwith at 45 Mbits (or less), the streaming is perfect. There is not input lag and the image quality is good as he is in front of my pc. At the moment that he tries to raise the fps to 60, or to raise the resolution to 1080p, in both cases he notices a lot of input lag and everything become unplayable.

What is the raccomended bandwith for 1080p30 or 1080p60 or 720p60? What is the average ping in ms that could be ok for streaming games?

What could be the problem in general to do not have good streaming if he chooses everything higher than 720p30?

raidancampbell commented 8 years ago

The default values that pop up when you change resolution/framerate are the loosely recommended bitrates. 45Mbit is pretty high for 720p@30, you likely won't notice a difference in the video quality if you drop way down to something like 20Mbit or 10Mbit. These bitrates aren't exact: when you're streaming there won't be a constant 45Mbit data transfer between the computers, it will be averaged out.

Average ping should be as low as possible: about 50ms is the upper limit for what I would consider okay. This is also highly dependent on what game you're playing: fast-paced games will need lower latency, while slower or turn-based games can have much higher latency.

The issue with higher resolutions or framerates is likely due to the computing power on either end. The source computer may struggle to render or encode at a higher resolution/framerate, and the client may also struggle to render at higher resolutions or framerates

ronyn77 commented 8 years ago

Thank you for the answer.

Could you tell me, in your opinion, what are the minimum requirement of Cpu and amount of ram that I need in order to stream at 1080p60 fluently (decode/encode) on either end?

On the server side I use an Asus ROG G751JY (Intel® Core™ i7 4860HQ,16 GB ram, Geforce 980m) connected with a gigabit ethernet cable directly to the router. I think that it is enough. Isn't it?

raidancampbell commented 8 years ago

The GameStream requirements for the serving PC can be found here.

The decoding benefits just as much from a modern processor as a fast one. Modern processors have build-in hardware decoding which will be the fastest. Fast but slightly older processors may not have hardware decoding but will be fast enough to decode everything in software.

ronyn77 commented 8 years ago

How can I swich from hardware decoding to software decoding? I cannot find any option in moonlight chrome.

raidancampbell commented 8 years ago

This is done within Chrome: if your CPU supports hardware decoding, then that will be used. If it doesn't support hardware decoding, it will fallback to software decoding.

Hardware decoding is considered superior.

ronyn77 commented 8 years ago

Is there any chance to make a local co-op, using both sides the gamepads? e.g. in games like fifa, moonlight recognize only the gamepads on the client side but not on the server side.

raidancampbell commented 8 years ago

This is out of our control and is a function of GameStream, not Moonlight