-
Notifications
You must be signed in to change notification settings - Fork 502
alternative transport: snapcast protocol over RIST by using libRIST #1435
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
|
There is extreme madness going on with CI/macos. I probably need a hand for fixing that, as I cannot align In file included from /Users/runner/work/snapcast/snapcast/client/client_connection.cpp:20:
/Users/runner/work/snapcast/snapcast/client/client_connection.hpp:28:10: fatal error: 'boost/asio/any_io_executor.hpp' file not found
28 | #include <boost/asio/any_io_executor.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.problems with boost with the changes I made. |
|
There seem to be random issues on macos in several branches, regarding |
|
Thanks, but I'm not sure yet if I will pull this in, as I'm already considering to deprecate plain TCP in favor of WS only (which supports also TLS (WSS)) and would make the code base smaller and easier to maintain. |
|
Well, I'm fine with making TCP optional - but I also have to admit that I normally use TCP (and only try WS for android and browser use). I'm not completely in that, but I think that WS should have considerably more overhead than TCP. The RIST stuff has the potential to diminish the overhead even further - it is basically UDP (and it would support broadcasting and multicasting - however I so far haven't tried that). All in all, this is all about the use cases which drive people to use snapcast at all. I think there are people out there that use snapcast mainly with OPCs (server and client). TCP might be important for that use case. |
|
I set up the poll #1441 to get more information about the usage pattern of snapcast regarding transports. My motivation to implement this is to avoid the TCP overhead without sacrificing reliability. IMHO, RIST is well suited for the task, even better than TCP. RIST includes very interesting features like broadcasting, multicasting and encryption. (However, all this is not addressed in this PR, which only provides a basic RIST implementation.) |
Implements snapcast protocol over RIST (Reliable Internet Stream Transport)
RIST is an open protocol for low-latency, reliable streaming over unreliable IP networks, ideal for live audio/video contribution and broadcasting. It uses UDP for low-latency transport, with RTP for media synchronization, and adds reliability through ARQ (Automatic Repeat reQuest) and optional FEC (Forward Error Correction).
It is primarily designed for video, but this PR leverages it for audio streaming, benefiting from its robustness and low-latency capabilities. As RIST is bidirectional and multiplexed (with virtual ports), the original snapcast protocol could be used without modification.
This is an alternative transport to the already implemented: TCP and WS. It uses libRIST for the heavy lifting.
Pull Request Checklist
Contributions must be licensed under the GPL-3.0 License
This project loosely follows the Google C++ Style Guide
For better compatibility with embedded toolchains, the used C++ standard should be limited to C++17
Code should be formatted by running
make reformatBranch from the
developbranch and ensure it is up to date with the currentdevelopbranch before submitting your pull request. If it doesn't merge cleanly withdevelop, you may be asked to resolve the conflicts. Pull requests to master will be closed.Commits should be as small as possible while ensuring that each commit is correct independently (i.e., each commit should compile and pass tests).
Pull requests must not contain compiled sources (already set by the default .gitignore) or binary files
Test your changes as thoroughly as possible before you commit them. Preferably, automate your test by unit/integration tests. If tested manually, provide information about the test scope in the PR description (e.g. “Test passed: Upgrade version from 0.42 to 0.42.23.”).
Create Work In Progress [WIP] pull requests only if you need clarification or an explicit review before you can continue your work item.
If your patch is not getting reviewed or you need a specific person to review it, you can @-reply a reviewer asking for a review in the pull request or a comment, or you can ask for a review by contacting us via email.
Post review: