My game consists of a very small screen (256x256). Behind that screen, though, there is a lot of very, very expensive ray tracing going on, which requires a very powerful GPU. Moreover, all clients see a variation of the same scene, so, a single GPU could render the whole scene for everyone.

Given that scenario, I had the idea of just rendering the screen on the server and streaming it to the clients. This way, one could run my game even on very weak machines. But I guess the bandwidth use could make it unpractical; is it possible to stream a 256x256 screen at 30 fps without delay and in a lossless format?


Sure. Services like OnLive did this for games that weren't small (resolution-wise), and you can stream 1080p60 videos on YouTube if you go looking for them. And although both of those examples may have accepted some tradeoffs (compression and an initial buffering delay), it certain seems feasible for your reduced data set to fit within the constraints.

Assuming an uncompressed 3 bytes per pixel, a 256x256 image is 196,608 bytes. You want to send at least 30 of these in a second, so that's 5,898,240 bytes per second, or about 5.7 megabytes per second. A 50 Mbps broadband internet connection is 6.25 megabytes per second. So yes, it is theoretically possible for people who have an appropriately fast (but not uncommonly so) connection.

In practice, of course, a customer doesn't get the full bandwidth of their connection 100% of the time, and even if they did, other things on their network might be competing for portions of it, and other nodes in the wider internet might bottleneck your packets sometimes. So you always have to account for that kind of thing, but a 256x256@30 stream seems quite doable for a reasonable portion of the user base.

  • \$\begingroup\$ This answer seems correct but I'd like to add that even if feasible it probably cause what is generally referred to as "input lag", meaning the server sends an imagine, I react to it by pressing a key which is sent to server who then computes and sends the result back to me. Which is one of the reasons you generally render client side instead of server side. \$\endgroup\$ – Mikael Aug 17 '16 at 9:00
  • \$\begingroup\$ Yeah that's a good point, I didn't address that at all. \$\endgroup\$ – user1430 Aug 17 '16 at 14:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.