-
Notifications
You must be signed in to change notification settings - Fork 397
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
PipeWire implementation #938
base: master
Are you sure you want to change the base?
Conversation
… server and test client. Remove rstest use of case directive.
…e control when to release a listener instance.
…ted in cascade (improved tests execution time)
…run them sequentially anymore.
…ing requests/responses in async context. Fix instabilities when running all tests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi and thank you for this pull request. PipeWire is certainly the future and therefore this PR is very valuable.
Sadly, the time that I can dedicate to cpal and my free time OSS endeavours is very limited as of late. So I can't really review this PR in its depth. I glanced over the code and it doesn't look bad.
Would you be interested in me merging this and then the community figures out if there is issues/bugs? If you have the time to spare, I can make you a maintainer.
Hi thanks for your feedback, indeed this a huge PR. I'm still working on it but on my own repository at this moment, I was planning to return to this PR to include only the PipeWire integration into CPAL. I don't mind if you merge it now, that could be cool to have feedbacks. But I was thinking if this Pipewire client implementation could have it own repository under RustAudio organization. What do you think ? Either way, I would be glad to maintain it. |
Good question, if by overlap you mean about merge conflicts that will depend on which PR will be merged first. I need to do some rework before this PR will be merged. If you mean overlap between PulseAudio integration and PipeWire integration. I guess if you have a PipeWire server running on your system, you could use CPAL PulseAudio integration to connect to the PipeWire server through their pipewire-pulse daemon. I don't have any knowledge about how PA is working but to integrate PW to CPAL I needed to create an init phase to retrieve default configuration (sample rate, etc) and default devices configured by the session manager (WirePlumber). That could be interesting to know how your PA implementation behave when connected to pipewire-pulse daemon. If think the two implementations can coexists. If tomorrow I'm going to switch to Archlinux and setup a PA server, I'll be glad to find a PA integration into CPAL. |
PipeWire implementation based on pipewire/pipewire-rs/doc and others draft PRs in this repository (thanks to them).
There is two additional crates, one for the PW client and one for SPA utils (used for some POD deserialization).
Client capabilities:
I updated some CPAL examples (enumerate and beep).
TODO (just some ideas):
I'm posting this PR as draft for now, if you have any suggestion/feedback or particular use cases, I'm glad to discuss it.
Note: You will need to install PipeWire development lib from your package manager. Having WirePlumber or PipeWire Media Session running. If your PW socket is located somewhere else you can define env vars: