This project is designed to be an open source implementation for streaming desktop games using WebRTC


p2prc

Maintenance made-with-Go

The aim of this project is develop a WebRTC screenshare designed for streaming video games and accepting remote inputs. There will be ansible instructions which can be executed inside into any virtual environment. This will be a plugin which complements the project P2PRC

Testing with Xplane 11

IMAGE ALT TEXT

Laplace

Based on the fork: https://github.com/Akilan1999/laplace/tree/keyboard_mouse

Installation

Installation required to share keyboard and mouse

To do this we ensure that the client either has an IPV6 address or a public IPV4 address. We use the popular open repository known as Barrier KVM.

What is Barrier kvm?

Barrier is software that mimics the functionality of a KVM switch, which historically would allow you to use a single keyboard and mouse to control multiple computers by physically turning a dial on the box to switch the machine you're controlling at any given moment. Barrier does this in software, allowing you to tell it which machine to control by moving your mouse to the edge of the screen, or by using a keypress to switch focus to a different system.

Barrier KVM build status and links to install

Platform Build Status
Linux Build Status
Mac Build Status
Windows Debug Build Status
Windows Release Build Status
Snap Snap Status

Build from source

# Assumes to be running on ubuntu 20.04
# Ports required to be allocated internally:
# - 8888 (laplace server)
# - 24800 (barrier server)

# Updating and installing go compiler
apt update
apt install -y golang
apt install -y jq
## Installing git
apt install -y git
## Installing barrier
apt install -y barrier
## Installing chromium
wget https://github.com/RobRich999/Chromium_Clang/releases/download/v94.0.4585.0-r904940-linux64-deb-avx/chromium-browser-unstable_94.0.4585.0-1_amd64.deb
apt install -y ./chromium-browser-unstable_94.0.4585.0-1_amd64.deb
#
## clone remotegameplay distribution
git clone https://github.com/Akilan1999/remotegameplay
## enter cloned directory
cd remotegameplay
# sets REMOTEGAMEPLAY path
export REMOTEGAMING=$PWD

# Build laplace binary file
go build .

# Set configuration laplace file
./laplace -setconfig

Program Execution

Executing this project basically serves an HTTP server that will host the frontend and the WebSocket implementation. Note that you sometimes need to run HTTPs in order for browser to connect to websocket.

$ ./laplace --help
  -BinaryToExecute string
    	Providing path (i.e Absolute path) of binary to execute
  -addr string
    	Listen address (default "0.0.0.0:443")
  -certFile string
    	TLS cert file (default "files/server.crt")
  -headless
    	Creating screenshare using headless mode
  -keyFile string
    	TLS key file (default "files/server.key")
  -killChromium
    	Kills all chromuim
  -killServer
    	Kills the laplace
  -roomInfo
    	Getting room id of headless server
  -setconfig
    	Generates a config file
  -tls
    	Use TLS

By default, you can run the executable without any argument to listen to TLS port 443. A self-signed certificate files are provided to ease up development. If you want to run with barrier KVM. Run as non-root.

Starting game when screen-share is triggered

This requires creating a bash script to trigger when the screenshare begins.

Ex: Start Xplane 11

Let's call this script xplane11.sh

# Navigating to the directory where XPlane11 is present 
cd /path/.local/share/Steam/steamapps/common/X-Plane\ 11/

# Execute Xplane 11 binary 
./X-Plane-x86_64

Open config file

", "ipaddress": "0.0.0.0", "rooms": "", "scripttoexecute": "", "systemusername": "" } ">
{
  "barrierhostname": "",
  "ipaddress": "0.0.0.0",
  "rooms": "",
  "scripttoexecute": "",
  "systemusername": ""
}

Call from built script which starts the server , creates room and outputs the ID

sh run.sh <IPV6 or Public IPV4 address of server>

Note: This script starts the server using the port 8888 by default The 2 steps below are if you want to start them command by command

Starting server

$ ./laplace -tls -addr 0.0.0.0:8888
2020/03/25 01:01:10 Listening on TLS: 0.0.0.0:8888

Starting screenshare

./laplace -headless -addr <public ip address of server> 

You can then open https://localhost:8888/ to view Laplace page. You may need to add certificate exceptions. In Chrome, you can type thisisunsafe.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

or

Support Server

Owner
Akilan Selvacoumar
The not boring developer
Akilan Selvacoumar
Similar Resources

Blunder is an open-source UCI compatible chess engine.

A UCI compatible chess engine written in Golang

Dec 30, 2022

snake game implementation using 2d array in Go

snake game implementation using 2d array in Go

Snake Game Implementation Snake game implementation in Go using a 2-dimensional array. Demo Install download the package git clone https://github.com/

May 14, 2022

Minecraft server implementation using Golang

Deepslate Deepslate is a Minecraft server implementation in Go. Deepslate if WIP and currently not available for installation Goals First implementati

Nov 19, 2021

MagicSummon - A Terminal Game about Mixing Stuff to summon a MONSTER. Currently The Biggest Project I have worked on.

MagicSummon A Terminal Game about Mixing Stuff to summon a MONSTER that the warriors ALMOST defeated, but the MONSTER fled. Getting Started Clone the

Jan 6, 2022

Go implementation of the A* search algorithm

go-astar A* pathfinding implementation for Go The A* pathfinding algorithm is a pathfinding algorithm noted for its performance and accuracy and is co

Dec 29, 2022

An implementation of the popular game Codenames created with Go and React.

OpenCodenames A real-time implementation of Codenames created with React/TypeScript and Golang. You can play the game here! Installation Stack: React

Aug 8, 2021

⛏ 🐹 Minecraft Protocol implementation in Go

⛏ 🐹 Minecraft Protocol implementation in Go

illustration by @talentlessguy Install Go 1.16.x is required to use this library go get github.com/BRA1L0R/go-mcproto Opening a connection client := m

Sep 20, 2022

A go implementation of Conway's game of life

go-life A go implementation of Conway's game of life. The program takes input from stdin. It's recommended to use it as cat input.txt | go-life with i

Oct 20, 2021

Go implementation of 2048 game

Go implementation of 2048 game

Oct 21, 2021
Comments
  • Index adding to the `README` file

    Index adding to the `README` file

    This PR adds an Index to provide an eagle's eye view of all the stuff written within the README.md file.

    Other Minor Changes/Additions:

    1. Adds alt text for X-Plane 11 demo using WebRTC image
    2. Minor changes to the README file for better readibility.
  • Added default remote keyboard and mouse as x2x

    Added default remote keyboard and mouse as x2x

    What is x2x?

    x2x allows the keyboard, mouse on one X display to be used to control another X display. It also shares X clipboards between the displays.

    Installation required to share keyboard and mouse

    We need to ensure that the client has SSH client installed. We use the popular open repository known as x2x.

    Note: x2x runs on top of SSH.

  • Compatibility with windows

    Compatibility with windows

    Problem

    No clue if the following project work with windows :)

    This issue focuses on the appropriate changes required to run on windows.

    Once issue is complete. Installation instructions added to the README files.

Tetris in Go, as a test in using Go for small games

Tetris in Go This is an attempt at implementing Tetris in Go in a way which has

May 8, 2022
Using finite projective planes to make card (maybe video) games

pairwise What it is Using finite projective plane to generate card (maybe video) games. Running Run with go run . Right now uses Go 1.17 but 1.18 just

Jan 24, 2022
Dedicated Game Server Hosting and Scaling for Multiplayer Games on Kubernetes
Dedicated Game Server Hosting and Scaling for Multiplayer Games on Kubernetes

Agones is a library for hosting, running and scaling dedicated game servers on Kubernetes. Agones, is derived from the Greek word agōn which roughly t

Jan 6, 2023
Tetra3D is a 3D software renderer written in Go and Ebiten and made for games.
Tetra3D is a 3D software renderer written in Go and Ebiten and made for games.

Tetra3D Tetra3D Docs Support If you want to support development, feel free to check out my itch.io / Steam / Patreon. I also have a Discord server her

Dec 20, 2022
Awesome 2D Maze-based games to play with kids in family and with friends on rich console UI. developed into Go.
Awesome 2D Maze-based games to play with kids in family and with friends on rich console UI. developed into Go.

gomazes Have fun time with kids and family and friends at playing awesome 2D maze-based games while feeling like a programmer on the computer console/

Dec 23, 2021
Tcell-game-template - A small template repository for simple tcell based games

tcell game template This is a template repository used for making small terminal

Jan 22, 2022
An open source re-implementation of Diablo 2
An open source re-implementation of Diablo 2

OpenDiablo2 Join us on Discord! Development Live stream Support us on Patreon We are also working on a toolset: https://github.com/OpenDiablo2/HellSpa

Jan 8, 2023
An open-source re-implementation of Pokémon Red
An open-source re-implementation of Pokémon Red

This project is open source re-implementation of Pokémon Red.

Dec 6, 2022
A simple desktop snake game

A simple desktop snake game that's supposed to run on Linux and Mac OS (maybe eventually on Windows). Work on the game is currently in progress - so i

Oct 12, 2021
Engo is an open-source 2D game engine written in Go.

Engo A cross-platform game engine written in Go following an interpretation of the Entity Component System paradigm. Engo is currently compilable for

Dec 26, 2022