Improving the netplay protocol¶
The RetroArch frontend currently provides a way to connect two cores together using the netplay protocol. This way, the state / inputs of the cores are shared and users can play their favorite (retro-)games together online.
The current implementation is quite old and has no extensive documentation nor formal specification.
The goal of this project would be to analyse the current implementation and to identify points for improvements.
A deliverable of this project could be, to analyse the performance characteristics of the current implementation and provide a detailed analysis of the current netplay stack. This analysis should include a formal description of the protocol, it’s performance characteristics and advice on how to further improve the protocol.
The student is of course free to actually implement improvements to the netplay stack:
The netplay protocol is currently TCP based, it could also be re-written to use UDP for better latency characteristics.
If the student has a deep background in network protocols, he/she could also design a new version if the netplay protocol all together.
C, Network protocols (TCP / UDP), FSM (Finite-state machine)
Improving the network library in RetroArch¶
Currently RetroArch uses the network stack provided by libretro-common to implement simple network interactions. It’s currently mainly IPv4 aware and supports only HTTP / HTTPS version 1. For TLS support we currently use the mbedtls library.
The current HTTP implementation is also not feature complete and has a lot of compatibility issues. The tasks for thus projects could involve:
Proper support for IPv6
General compatibility of the current HTTP/1 stack
HTTP/2 or even HTTP/3 support
Hardening the current TLS support
Either by extending the current implementation or by using an external, portable and small library. Not all of our targets need to be supported with these changes. Exotic build targets often don’t have network support anyway.
C, Network protocols (IPv4 / IPv6 / TCP / HTTP / HTTP/2 / HTTP/3)
Video preview for games / video files¶
The RetroArch frontend can currently display a screenshot of a video file (actually taken from the media file) or an archived screenshot / box art of a game inside the menu beside the medgame / video ia entry.
This project idea would implement a video preview feature. For this the frontend needs to be extended to preview a video file, or be able to display a pre-recorded gameplay video of the game in case instead of a screenshot.
For this we would need to write a new widget that displays a video (using the ffmpeg core) and a way to connect a game entry and a pre-recorded video file (like screenshots / box arts are currently distributed).
C, Video decoding
Universal caching of game / media files¶
Currently the RetroArch frontend gives the core the file path of the game / media to play. The core than has to open the media file directly. If the file is stored on a remote filesystem, the increased access time and slow bandwidth could cause slowdowns inside the core.
This proposed project would implement a mechanism to cache those files locally (for example in memory), so that the cores can access the files in a cached manner.
Student suggested ideas¶
Of course you're free to propose your own ideas. Feel free to discuss your idea with us!