andrewrk / groovebasin

Music player server with a web-based user interface.
MIT License
1.9k stars 119 forks source link

Multi-device/Multi-room Streaming #313

Open jprjr opened 10 years ago

jprjr commented 10 years ago

Something I'm really, really interesting in is multiroom audio setups. I would love to be on my computer, realize "oh hey, I need to go to the kitchen and get some dishes done," and have my music come with me.

I think this is possible with RTP streaming. Here's a few examples of people using PulseAudio's RTP implementation with MPD to achieve in-sync multiroom setup:

https://fruit.je/mpd-rtp http://www.hackerposse.com/~rozzin/journal/whole-home-pulseaudio.html

I believe ffmpeg/libav has rtp/sap support - using the ffmpeg command-line I can stream audio with SAP+RTP and listen to the stream in VLC. Example command for generating the stream:

ffmpeg -re -i 02\ F.W.S.flac -vn -f sap -acodec pcm_s16be "sap://224.1.2.3?same_port=1"

I haven't tried doing a multi-device setup this way, to test if everything is in sync or not when using ffmpeg's SAP implementation.

Just wanted to toss this idea your way, I think it would be a very neat feature, especially if it was all configurable via the web interface.

andrewrk commented 10 years ago

I'm open to this idea. I have a lot to learn before starting to implement it.

malakada commented 10 years ago

@jprjr -- What kind of speaker set up do you have? I admittedly don't know much of anything about streaming audio, so I'm curious if what you're talking about here would also help me with my Sonos setup at my house. Do you have any thoughts/input on that?

jprjr commented 10 years ago

@melissanoelle -- Right now, I have my desktop computer hooked to a normal set of computer speakers, and I've got a Raspberry Pi plugged into a stereo -- both devices are on wifi.

It turns out that using PulseAudio's RTP output over wifi destroys said wifi, so right now, they're two independent systems, though I'm still exploring options and trying things out. I don't really know a whole lot about Sonos and how it all works.

malakada commented 10 years ago

Heh, thanks for the response. From what I can see, and I've only had it for about a week now, is that it goes through it's controller (the hub you need to buy) so that you can group together the speakers you purchase and output different audio streams to different speakers, or have them operate as one group to create a surround-sound effect. Because of this, and my lack of streaming knowledge for audio, I wasn't sure if even part of what you were talking about above would be relevant to me. :)

saintger commented 10 years ago

For multi-device streaming I would recommend LMS approach. With a server running LMS you can control independantly (or synchronously) devices that you can build yourself very cheaply, like piCorePlayer.

Here is an interesting comparison between MPD and LMS: Squeezelite brings Spotify, better sound to Antipodes DS/DX

The LMS ecosystem has already quite a number of plugins (Spotify, Airplay, ...) and phone/tablet interfaces available. It also have a good reputation for output quality.

It may be possible to interface Groove Basin with LMS, perhaps using Groove Basin as a radio/stream and LMS reading that stream.

The huge advantage of Groove Basin over LMS is the web interface.

Merging the two projects would be an interesting challenge ;-)

fsateler commented 9 years ago

@jprjr have you tried the pulseaudio network tunnel? If both devices are running pulseaudio this should be easy.

I tried it the other day and the raspberry turned out to be a bit underpowered for this but maybe it works for you.

smoebody commented 9 years ago

i would love to see pulseaudio support in groovebasin. it can be used as a very simple setup as well as a flexible/complex ecosystem with many clients streaming from/to each other. also it separates the library from the audio-output which is a good thing IMO.

there is already a npm module pulseaudio, maybe it can help. i will have a look at it later as well. i also would try to implement it myself in a fork but therefor i will need some advice. can i contact you on that @andrewrk ?

smoebody commented 9 years ago

@saintger the LMS sounds cool, but to me it looks more like an alternative music library in general. and groovebasin itself is an alternative to mpd already. but maybe its a good idea to implement the Squeeze-protocol into groovebasin to support that squeeze-clients as well? i think groovebasin is by far not that feature-rich as squeezebox' clients show, but it grows.

andrewrk commented 9 years ago

@smoebody pulseaudio support would go in libgroove. I've added pulseaudio support to another project recently; I might use that knowledge to replace the SDL backend of libgroove.

smoebody commented 9 years ago

@andrewrk sounds great, thanks!

ning-yu commented 9 years ago

+1 to pulseaudio support in libgroove!

heavyk commented 9 years ago

@andrewrk dude, the daw project looks awesome! ... nice!