* Disable CGO (C libs) for coordinator
Needed for static linking.
* Fix "error strings should not be capitalized (ST1005)"
* Fix SA1015
Using time.Tick leaks the underlying ticker, consider using it only in endless functions, tests and the main package, and use time.NewTicker here (SA1015)
* Fix SA9004
Only the first constant in this group has an explicit type (SA9004).
* Remove unused code in the webrtc package
* Fix S1000
Should use a simple channel send/receive instead of select with a single case (S1000).
* Force dir creation/check for core downloader
* Update Makefile release script
* Disable ASLR for worker builds
* Remove WORKER_BUILD_PARAMS flag from the CI
* Don't force recompilation in release
* Add Debian packages installer script
* Build worker app without libopusfile
* Test worker app without libopusfile
* Add opus wrapper without opusfile
* Make install.sh executable
* Add opus lib in Win builds
* Make insecure HTTPS requests when downloading libs
* Add ca-certificates for Docker build stage
go mod download works only with SSL certificates installed.
* Move libx264 wrapper into the repo
That way we can get rid of a lot of not needed external Go dependencies.
* Update the dependencies
* Remove jQuery
* Remove browser (vendor) prefixes for some CSS properties
* Use simple device orientation test
* Realign D-pad pointers
* Make GameBoy text unselectable
* Cleanup console.log
* Keep 90% size on mobile browsers due to gh-ribbon overlap
* Remove legacy `unselectable="on"` attributes
* Align UI buttons
* Remove not used UI elements
* Change Options button
* Don't show player change message when not in a game
* Add click/touch handler for circle-pad
Negate exact matches with multiple video codecs when a negotiated list of codecs will be stripped of partially matched ones.
As an example, if we want to use the h264 codec along with vp8 then in some browsers we'll have the exact match on vp8 and some partial matches on h264 (different browsers have different SDP Fmtp) which leads to the forced use of vp8 when the app is streaming h264.
As a workaround, we should add only one codec (vp8 or h264) into the list.
It is possible that the official Golang Docker image used in the build stage may produce an executable file dynamically linked with some old libs that may not be present in the target OS image therefore use of identical Docker images is the better option.
Since Pion's webrtc v3.0.13 and this fix if both peers have some fmtp set then codecs should match exactly. By default Pion defines a list of supported codecs with fmtp set but different browsers set their own fmtp values by default as well therefore they may not match.
To fix this we can define our own list of codecs on the server with empty fmtp so it will match any client codecs.
See: e5c8c659ca/rtpcodec.go (L99)
Add new YUV converter with 2x2 pixel matrix YUV color estimation.
The new YUV color converter, as opposed to the original one, uses more precise color calculations based on four neighboring pixels' average color values which helps a great deal with image aliasing / shimmering artifacts.
By default, it runs in the multithreaded mode with the game frames sliced between 2*(CPU cores) goroutines.
In case if this estimation mode doesn't work as expected it is possible to switch back to the original mode.
The default encoder is switched to x264 since it's faster now.
* Add experimental core's SRAM save/load
* Clean room.go
* Update Save RAM states
* Update dependencies
* Extract emulator states into a separate module
* Google Cloud saves don't support save RAM persistence, but save state (.dat) files only.
* Add emulator storage path into the configuration file
* Verify offline storage path
Since Go version 1.15 ASLR security mode is enabled by default for Windows builds. In order to make it work without random NPE crashes in the cores (as example in PSX games during load), you have to (re)compile every core with ASLR support or just disable this mode.
See: https://github.com/golang/go/issues/35192
* Refactor OPUS encoder for quality and speed.
Use OPUS low delay mode (https://www.opus-codec.org/docs/opus_api-1.1.3/group__opus__ctlvalues.html#ga592232fb39db60c1369989c5c5d19a07)
* Slightly tweak linear resample function and disable it on 48kHz input
* Rewrite OPUS encoder as a struct with some internal buffer
* Use OPUS 192Kbps preset by default
* Add encoder callback function on a full buffer
* Reuse OPUS output buffer
* Add write limiter for samples
* Add port and IP config and env params for bridged Docker network in Windows, macOS
- CLOUD_GAME_WEBRTC_ICEIPMAP -- replaces IP of any ICE candidates on the server
- CLOUD_GAME_WEBRTC_ICEPORTS_MIN/MAX -- limits WebRTC random port range on the server