Comments (4)
@cgutman sunshine is poorly documented and the code is a mess. The best documentation anyone can provide is some hand written notes that no one can understand. On top of that Loki is no longer involved in the project, or just ignoring the entire project. The project is hanging on by a thread.
In my opinion, it would be very beneficial for moonlight to document the protocol. This article (https://www.writethedocs.org/guide/writing/beginners-guide-to-docs/) describes many reasons why it's a good idea to document your project.
I started a thread on the discord, but never received a response. Seems you are the all knowing one on the protocol, so documenting it should be an effort led by you although I'm sure many are willing to assist. For example, I'd be willing to setup the sphinx documentation framework and integrations with github.
I understand that having the code itself somewhat serves as documentation; however it's pretty difficult to read through. One major issue with it is it expects the person trying to understand the protocols understands C/C++ or whatever language the code was written in. For example, I want to investigate writing a python based host for moonlight. Currently my only options are to reverse engineer moonlight, or reverse engineer sunshine (which in itself reverse engineered moonlight).
Documenting the protocol has been asked for a lot, ideally it would be in human readable terms. For example the documentation of pairing would describe:
- what types of request to sent to and from the server
- what port and endpoint
- what are the expected headers
- how to authenticate
- the order of the requests
- etc.
The protocol documentation should also describe how to handle things on the both the client and host side. For example with a discovery request, a moonlight client will require different requests as compared to the host.
Other related issues:
#69
#41
#29
moonlight-stream/moonlight-chrome#510 (comment)
from moonlight-common-c.
I recently started my quest into the depts of the Moonlight protocol, I'm trying to re-write Sunshine in a more readable, documented and (possibly) tested form.
So far I "only" got the pairing phase and I would really like to get some kind of high level overview of the code components, how they work together and what are the expected inputs/outputs.
You can see an example of the interface I'm creating here: protocol.hpp.
Would anyone from the Moonlight team be willing to share the knowledge?
[EDIT]
Here are some more docs: https://games-on-whales.github.io/wolf/stable/protocols/index.html
from moonlight-common-c.
Yes, I can try to fill in details if you can create a doc template or something.
There are 6 main protocols involved in the current GameStream protocol version:
- HTTP (TCP 47989)
- HTTPS (TCP 47984)
- RTSP (TCP 48010)
- Control over ENet (UDP 47999)
- Video over RTP (UDP 47998)
- Audio over RTP (UDP 48000)
For the first 3, doc templates designed for HTTP-based protocols should work.
The latter 3 will probably need templates designed for binary protocols (something like this)
from moonlight-common-c.
The Nvidia GameStream protocol is proprietary. There is no reference documentation.
Our implementation is based on reverse engineering. The best public reference is this repository, Moonlight clients like https://github.com/moonlight-stream/moonlight-embedded, and Moonlight-compatible hosting software like https://github.com/loki-47-6F-64/sunshine
from moonlight-common-c.
Related Issues (20)
- Extend support for other game streaming protocols HOT 1
- steamlink support? HOT 1
- LGPLv3 License
- RTX 3080 not support hevc? HOT 1
- Simultaneously stream to multiple clients HOT 1
- Not streaming due to "DRM"
- Controller no longer recognized
- questions about copyright HOT 1
- Nintendo Switch port (Need help) HOT 9
- Audio block size mismatch when connected to Sunshine server HOT 3
- Stream locked to 30 FPS with 0 frame dropped HOT 1
- and documents or simple demo on howto use libmoonlight-common-c.so ?
- BT.709 and full color range by default HOT 2
- Game session closed automatically HOT 5
- Can you run Moonlight on Samsung TVs? HOT 1
- Feature Request - ability to remap "exit stream" gamepad buttons
- Can you write a development document? HOT 1
- PS Vita crashes with Sunshine AMD on Linux HOT 1
- Moonlight on Playstation portal
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from moonlight-common-c.