{"id":14235756,"url":"https://github.com/raspi/kaukosohva","last_synced_at":"2025-04-26T03:31:56.405Z","repository":{"id":54936803,"uuid":"319332705","full_name":"raspi/kaukosohva","owner":"raspi","description":"Play games remotely with Linux","archived":false,"fork":false,"pushed_at":"2021-01-25T00:06:24.000Z","size":123,"stargazers_count":41,"open_issues_count":5,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-04T07:23:33.778Z","etag":null,"topics":["game-stream","game-streaming","game-streaming-server","games","gaming","hacktoberfest","linux","remote","stream","streaming"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raspi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-07T13:44:27.000Z","updated_at":"2024-11-04T17:05:18.000Z","dependencies_parsed_at":"2022-08-14T07:00:56.501Z","dependency_job_id":null,"html_url":"https://github.com/raspi/kaukosohva","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raspi%2Fkaukosohva","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raspi%2Fkaukosohva/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raspi%2Fkaukosohva/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raspi%2Fkaukosohva/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raspi","download_url":"https://codeload.github.com/raspi/kaukosohva/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250926824,"owners_count":21509044,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["game-stream","game-streaming","game-streaming-server","games","gaming","hacktoberfest","linux","remote","stream","streaming"],"created_at":"2024-08-20T21:02:19.758Z","updated_at":"2025-04-26T03:31:55.973Z","avatar_url":"https://github.com/raspi.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"# kaukosohva\n\nPlay games remotely with Linux.\n\n## Current state \n\nThis is proof of concept prototype for technical users. \n\n# Architecture\n\n![Architecture](https://github.com/raspi/kaukosohva/blob/master/doc/Architecture.png)\n\n# Main problems TODO\n\n* Lower the latency for streaming\n  * Minimize streaming buffer(s)\n  * Tune h264 parameters for lowest latency\n  * Tune RTP parameters for lowest latency\n  * Constant or variable bitrate (CBR or VBR)?\n\n# FAQ\n\n* Why h264?\n  * Because GPU encoding/decoding hardware acceleration\n* Why h264 over RTP?\n  * Because it's a standard - https://tools.ietf.org/html/rfc6184\n* Why multicast?\n  * Eliminates need for extra server software as kernel sends host's stream to everyone connected to the VPN automatically\n* Why GStreamer?\n  * Lots of tuning options\n  * Lots of plugins\n  * Debugger - https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html\n  * View latency issues in the pipeline - https://www.flathub.org/apps/details/org.freedesktop.GstDebugViewer\n* Does it matter who hosts VPN (WireGuard)?\n  * Who has the most bandwidth and stable connection is recommended\n  \n# See \n\n* [host](host) directory for how to host a game\n* [remote-player](remote-player) directory for how to connect to a host as a remote player\n\n# Research\n\n* Network\n  * https://en.wikipedia.org/wiki/Multicast_address\n  * https://en.wikipedia.org/wiki/Reserved_IP_addresses\n  * https://en.wikipedia.org/wiki/Private_network\n* Video/Audio\n  * https://en.wikipedia.org/wiki/Real-time_Transport_Protocol\n  * https://en.wikipedia.org/wiki/Advanced_Video_Coding\n* GStreamer\n  * https://gstreamer.freedesktop.org/documentation/plugins_doc.html?gi-language=c\n  * https://github.com/GStreamer/gstreamer\n  * https://lists.freedesktop.org/archives/gstreamer-devel/\n  * https://github.com/GStreamer/gst-rtsp-server\n\n# Not tested yet\n\nIf h264 over RTP multicast doesn't pan out there's still many things to try with GStreamer:\n\n* Drop multicast and stream to UDP port in a remote player's machine (this limits player count)\n* Try h264 inside [MPEG-TS](https://gstreamer.freedesktop.org/documentation/rtp/rtpmp2tpay.html?gi-language=c) container over multicast\n* Try GStreamer's [RTSP server](https://github.com/GStreamer/gst-rtsp-server) if the host doesn't have enough upload bandwidth for all players there's RTSP proxies like [rtsp-simple-server](https://github.com/aler9/rtsp-simple-server)\n* [RTMP](https://gstreamer.freedesktop.org/documentation/rtmp/index.html?gi-language=c)\n* [SRT](https://gstreamer.freedesktop.org/documentation/srt/index.html?gi-language=c)\n* and others\n\n# Tested, didn't work\n\n* ffmpeg, mpv, vlc \n  * too many buffers\n  * 1000-4000 ms+ latency even locally\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraspi%2Fkaukosohva","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraspi%2Fkaukosohva","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraspi%2Fkaukosohva/lists"}