Projects / Work in progress August 25, 2021

Remote Plays – stream and play games in a browser

What is Remote Plays?

Remote Plays is an application where the host can stream their captured window(s) to a browser for people to watch or play games with. It started out as an idea to develop something that uses chat commands to control the game input like a “Twitch plays” type of tool but the delay was a bit too much for more action orientated type of games and such I reworked it to capture the source window instead and stream it directly to a browser. That way the host is streaming the game and is able to play with viewers by using a browser (the host can play directly in their game) while also showing the game on their Twitch stream for viewers to watch.

How it works

Select a window to capture and assign keys for players to control.

Features

  • game pad support
  • configure captured fps (set max captured window fps)
  • broadcaster to client fps (sets the max fps the hosts updates to clients)
  • scaling (scale & resize the captured window before sending it to clients)
  • enable / disable client input, can be set per client
  • enable sharpening (sharpens the finalized frames before sending it to clients)
  • enable captured window resize (when enabled it will capture the captured window 1:1 else you can resize to any size larger than 1)
  • enable max compression (sends the finalized frames as small as possible at costs of more CPU processing)
  • enable stream mode (finalized frames are send as they are captured)
  • enable broadcast (start streaming captured window to clients)
  • enable bandwidth optimization (skips sending frames that are the same previously)
  • enable client ready state (requires clients to send back a ping to tell the host they have processed the data before sending a new update)
  • enable packets mode (packs multiple finalized frames into one larger packet before sending it to clients to replays them in order at corrected time frame but this comes with a delay depending how long it’s set at)
  • finalized frame quality (quality of the captured window, 1 is lowest but also smallest data where 100 is 1:1 captured window but also largest data per finalized frame)
  • limit data to send (each finalized frames that is higher in size will not be send to clients, this means stuttering when there are many frames bigger than the set max size)
  • and other features not really worth mentioning yet I as work on implementing them first

 

Work in progress demo videos

 

Multiple clients test (local test)

 

Config page to switch captured widow to broadcast (Not had time to write a proper one)

 

PSP gameplay

 

Changes only in previous + current frame #1

 

Changes only in previous + current frame #2

 

FPS control
5 fps

 

15 fps

 

30 fps

 

60 fps

 

Ultra low quality + resized to 50% captured window

 

Medium quality + resized to 50% captured window

 

Bandwidth optimization on (total sent over ~6min)

 

Bandwidth optimization off (total sent over ~6min)

You may also like...