Commit graph

30 commits

Author SHA1 Message Date
sergystepanov
62d8240e7c
Migrate to pion/webrtc v3 (#254)
* Add initial pion/webrtc v3 migration

* Use custom timestamps when sending video packets

* Update dependencies
2021-01-04 21:09:03 +03:00
sergystepanov
1fcf34ee02
Add new Libretro core manager module (#249)
* Add initial external configuration files support.

These external configuration files allow changing app params at the runtime without recompilation.

* Find config files with specified directory in the tests

* Add aspect ratio recalculation config

* Clean code

* Add new configuration files into the Docker container image

* Add shared core and config paths into the Libretro cores config

* Split ROM <-> Emulator mapping between workers and coordinators

* Extract coordinator config

* Add shared worker/coordinator server config

* Add explicit embedded shared worker/coordinator struct for auto-config reflection fill

* Remove default stun/turn servers from the config

* Extract and add new ice servers config structures

* Update coordinator config params

* Add auto emulation lib loader based on the runtime OS/arch

* Update configuration structures

* Remove shared config embedding

* Add missing network config params

* Add game library external config

* Remove unused config parameters

* Add WebRTC encoder external options

* Add user dir for config search

* Update config loader

* Update config

* Add generic downloader with Grab lib implementation

* Add a simple file downloader backed by the grab lib

* Add initial Libretro core repos abstractions

* Expose compression info for Libretro cores repository records

* Add pipe-based abstract file downloader

* Refactor downloader

* Refactor Libretro repos

* Add worker coresync stubs

* Add multiprocess-safe HTTP-based core manager implementation

* Remove Libretro cores from the repo

* Keep custom N64 cores in te repo for now

* Add Libretro cores repo select in the config

* Fix http manager repo switch

* Cleanup code

* Add greedy Libretro lib loader

* Don't crash when arch map is not set

* Disable dynamic recompiler for pcsx core by default since it's could cause a crash

* Use global Libretro dynalib handler

* Shorten the default Libretro cores store path

* Update zip extractor implementation

* Remove explicit fig lib field markings

* Add config note to the README file

* Add GitHub repo backend for the core downloader

* Fix GitHub repo param list in the manager factory

* Add env variables reader with CLOUD_GAME prefix

* Re-optimize ice server info struct custom marshaler
2020-12-31 13:24:27 +03:00
sergystepanov
bd6e146e64
Fix errors/misuse with OpenGL-based core API (#237)
* Follow Go standard for naming constants

* Use reformatted pixFormats for Libretro cores

* Use OpenGL 2.1 Core profile bindings for render instead 4.1

* Cleanup the code

* SDL attributes should be set before the sdl.Init call

* Use simple vertical frame flip function instead imaging lib with OpenGL renderer

* Use the separate control flow for the macOS OpenGL context handling

* Add OpenGL pixel type/format switch based on cores callback

* Use unified log instead of fmt

* Clean code

* Remove unnecessary SDL init flag

* Printout errors with SDL / OpenGL functions

* Add CGO Libretro logging output

* Use main thread lock for windows and OpenGL context

* Remove Darwin OS switch

* Add extended OpenGL version info print

* Update Libretro cores info print

* Add game library module (#232)

* Add game library

* Add missing local game lib files

* Add missing return statement

* Use v2 suffix

* Bump the dependencies

* Update Libretro modules to support headless test runners

* Port old savestates tests as example for Libretro cores runner testing

* Add n64 core example game and a test

* Update room tests for various games

* Add frame dump support for CI builds

* Add frame rendering to image output for core testing

* Update ROM frame exporter in tests

* Disable Docker image publishing

* Add frame rendering output for non-gl cores for CI

* Add auto GL context override for headless, gpu-less machines (e.g. Github CI Xeon)

* Add Windows CI headless cores frame render config

* Add missing Mesa OpenGL drivers to Ubuntu CI

* Add mupen n64 core download into CI tests

* Add Linux, macOS, Windows core frame render tests into CI

* Remove unnecessary var

* Add some comments

* Revert Y flip

* Move OpenGL into a separate package

* Add SDL package

* Update modules
2020-11-04 18:59:12 +08:00
sergystepanov
5d28d6f94b
Add missing Ubuntu packages in the guide (#243)
* Add missing Ubuntu packages in the guide

* Bump expected Go language version for the app
2020-10-31 01:38:45 +08:00
sergystepanov
83efc733a8
Add game library module (#232)
* Add game library

* Add missing local game lib files

* Add missing return statement

* Use v2 suffix

* Bump the dependencies
2020-10-10 21:42:06 +08:00
sergystepanov
a42aebec88
Migrate to v2 suffix (#231) 2020-10-04 23:21:03 +08:00
giongto35
6f53f8f736
Split services (#219)
* Close channel to avoid routine leak

* Use unix socket

* Use socket
2020-07-07 18:12:03 +08:00
88hcsif
c23347db08
Add basic N64 support on Mac (#205)
Note: mupen64plus lib unload is not working properly on Mac, so stopping and restarting N64 emulation will cause a crash
2020-06-25 22:46:12 +08:00
Sergey Stepanov
a61d4585a1
Tidy Go modules after SDL2 addition 2020-06-18 19:22:09 +03:00
88hcsif
091b086bcb
N64 Support (#195)
* Allow HTTP access to Raspberry Pi over local network
Lower audio buffer maximum theoretical size to get the worker code to compile on Raspberry Pi

* Add https port flag to run https worker and coordinator on the same machine
Add https chain and key flags to allow to use an existing certificate and bypass letsencrypt
Note the ping address resolution is still broken with this configuration

* Add option to define a ping server in the coordinator
This is useful when it is not predicatable what address and port the worker will be runnning at
This only works when there is a single worker

* Free temporarily allocated CStrings
Store constant CString

* Only load core once and unload it when done

* Add Nintendo 64 support!
Disclaimer: only tested with Mupen64plus and Mupen64plusNext on Raspberry Pi.
It probably needs more work to run on every system and with other OpenGL libretro libraries.
Input controls are hacked together, it really needs analog stick and remapping support to play in a nicer way.
I am worried there might be a memory leak when unloading Mupen64plus but this needs further investigation.

* Add analog sticks + R2,L2,R3,L3 support

* Add client logic to control left analog stick via keyboard and touch
Add client logic to toggle between dpad mode and analog mode (even for joystick)
Might need to revisit if and when remapping is implemented
Tocuh sensitivity of analog stick is pretty high, might need tweaking

* Add cores for Raspberry Pi
Add N64 core for linux x86_64

* Reset use OpenGL flag on nanoarch shutdown (line lost in refactoring)
2020-06-17 18:07:10 +08:00
Sergey Stepanov
ee9088a065
Update deps for WSL2 support 2020-05-29 15:22:28 +03:00
Sergey Stepanov
7ba83c4ce8
Update Go modules 2020-04-20 12:06:42 +03:00
giongto35
7e8ebd5f74 Minor fix + Update more collaborate games for fun 2020-04-19 03:35:28 +08:00
Sergey Stepanov
44392442f1
Clean Go modules 2020-04-13 17:18:48 +03:00
giongto35
87e929d67c Update Pion version 2020-04-12 02:55:07 +08:00
giongto35
a1ac8f272a
Setup HTTPS using autocert (#149)
* Add HTTPS WSS

* Update https

* HTTPS

* Add https

* Add HTTPS worker

* Add HTTPS

* add https

* Add pingserver to worker

* add https

* Add public domain whitelist

* Not fatal when there existing echo server
2020-01-03 04:37:26 +08:00
giongto35
1ccdab08a0
Update pion version (#147)
* Update DREADME CrowdPlay

* Update README

* Update README.md

* Update webRTC version

* Update pion version
2019-12-10 03:33:14 +08:00
giongto35
fde4a24158
Merge aspect ratio to master (#116)
* Add frame scaling support (#107)

* Update README.md with additional info about Windows builds

* Add frame scaling

* Add and enable bilinear scaling (#109)

* Add and enable bilinear scaling

* Use Go x/image lib for interpolation

* Reformat the code goimport/gofmt

* Move worker config into the pkg/worker directory

* Change separator in the save file path allowing it to work on Windows (#113)
2019-10-19 02:29:07 +08:00
giongto35
50343faaad
Update Audio batch + Fix the issue reload failed + escape room ID (#106)
* Try muted first

* WIP

* Update AudioChannel by batch

* Update util package

* Remove min

* Tidy module

* Update module
2019-10-12 21:46:02 +08:00
sergystepanov
4e06d6a27e Add audio streaming support with WebRTC and Opus (#102)
* Update README.md with additional info about Windows builds

* Add initial Opus stream audio support
2019-10-09 03:02:09 +08:00
giongto35
474cb7592e
Test server (#90)
* Update README

* Update Readme typo

* to Test server

* Update libretro system path
2019-09-22 23:36:45 +08:00
Sadlil Rhythom
0e17092acb Refactor of cloud game overlord and overworker (#70)
* Introduce Makefile and go vendor directory for faster build

* WIP: Refactor cloud-game codebase with spliting overlord and worker binary

* Fix all issues and have a running build

* Complete first version of refactor
2019-09-12 03:35:21 +08:00
giongto35
f49a347de2 Update vendor and makefile (#76)
* Update dependencies

* Update vendor

* Update vendor with C package

* Update Make file
2019-09-01 04:56:27 +08:00
giongto35
d64d77c80b Update Playstation core (#73)
* Update cores setting for ps1

* Update PS3 output + use bytes per row to get the correct number of bytes per row

* Add more inputs

* Update input

* Fix input

* Add resize image comment

* Update screenshot

* Try side by side

* Update Image side by side

* Add image side by side

* Update landing page

* Add landing page image

* Update landing page image
2019-08-28 03:54:18 +08:00
giongto35
0ed764ce77 Move gamelist to become a utility library, this package can be shared between overlord and worker (#72)
* Return games based on type

* Add nes extension also

* Update game list logic

* Add more files to diff
2019-08-27 07:26:33 +08:00
giongto35
02c18e98f2 Add H264 codec (#71)
* Update gomod

* Add h264 codec + interface

* Add config to use H264 or Vp8
2019-08-23 03:41:16 +08:00
giongto35
c7caa87624 Integrate with RetroArch to have Universal emulator. (#64)
* WIP

* Add libretro

* Update input retro

* Update cloud retro input:

* Integrate libretro remove GL

* Launch emulator by game type

* Save and load

* Update deeplink to game directly

* Done channel for naemulator

* each server handle only one session

* Only provide available clients

* Emulator based on game

* Remove all OpenGL related

* Retroarch audio

* Audio encoding mono

* Experiment with libretro audio

* Audio without datachannel

* Audio opus internal

* Remove unnecessary code

* Resampled

* Limit time frame

* Start Room and Audio by game

* Dynamic video image allocation

* Dynamic Video buffer allocation based on video resolution

* Move encoder to room

* width and height from emulator

* Padding images to fix multipler of 64

* Remove OpenGL

* Remove Open AL

* Remove OpenGL from Go mod

* Move away nanoarch logic in naemulator

* Remove unecessary savefiles.go

* Optimize Docker for caching

* Update ReadME

* Update README to introduce Retro

* Update README

* Update README.md
2019-08-02 22:06:26 +08:00
giongto35
dda0f1b446 Update to pion 2.0.23 + logic to skip private IP (#61)
* Remove unnecessary comments

* Update find best server by latencies

* Update README.md
2019-06-22 17:45:17 +08:00
giongto35
2babe06950 Add prometheus client 2019-06-05 01:57:53 +08:00
giongto35
48d6ddbf6d Use go mode + use pion v2 (#39)
* Update webrtv2

* Update gomod

* Update run local

* Update docker

* Update mario 3 rom

* Update script

* Throw error when overlord cannot launch
2019-05-25 12:10:04 +08:00