I've been racking my brain about this for a bit, and today I sat down and got it to work.
I am currently streaming Spotify, through MC, to a second linked zone.
It certainly isn't PERFECT, but nor is it that hard to do :-)
Here's a rundown, as performed on Ubuntu 16.10 server.
Essentially what we're doing is setting up an Icecast server, routing the output from Spotify to the Icecast server, then playing the stream in MC.
I'm assuming you have MC installed.
1. Install Spotify on your server -
sudo apt-add-repository -y "deb http://repository.spotify.com stable non-free" &&
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D2C19886 &&
sudo apt-get update -qq &&
sudo apt-get install spotify-client
Install icecast2 on your server -
sudo apt-get install icecast2
Install Darkice on your server -
sudo apt-get install darkice
Create a config file darkice.cfg (in any location). Here is an example -
[general]
duration = 0 # duration in s, 0 forever
bufferSecs = 1 # buffer, in seconds
reconnect = yes # reconnect if disconnected
[input]
device = default # or `pulse' for Pulseaudio
sampleRate = 44100 # sample rate 11025, 22050 or 44100
bitsPerSample = 16 # bits
channel = 2 # 2 = stereo
[icecast2-0]
bitrateMode = vbr # variable bit rate (`cbr' constant, `abr' average)
quality = 1.0 # 1.0 is best quality
format = mp3 # format. Choose `vorbis' for OGG Vorbis
bitrate = 256 # bitrate
server = localhost # or IP
port = 8000 # port for IceCast2 access
password = hackme # source password to the IceCast2 server
mountPoint = mystream.mp3 # mount point on the IceCast2 server .mp3 or .ogg
name = mystream
Edit the file as you see fit. I've found MC doesn't like .ogg streams, but that might just be my system or a missing codec on my part.
Start Icecast and Darkice -
/etc/init.d/icecast2 start
darkice -c <path to>/darkice.cfg
Now open your volume control. In the Recording tab, you should see Alsa Plug-in [darkice].
Change that to the "Monitor for" device.
Open Spotify and start playing your fave playlist.
You should now be able to open the url <server.ip>:8000/mystream.mp3 in any MC on your network.
But what if you don't want to LISTEN to Spotify on the server?
Pulse lets us create NULL devices. Use the followng command -
pactl load-module module-null-sink sink_name=Stream \ sink_properties=device.description="Stream"
Now, in your Volume Control, under playback, you'll see the option to change where Spotify outputs to.
Change it to the "Stream" device.
In the Recording tab, change the device to the "Monitor for Stream" device.
Now Spotify will continue to play in the background, without you hearing it.
Go to MC or a browser and open the same URL as before. You can then link it to another zone. I had it playing between my MacBook Air and Linux computers well enough.
The Spotify app on your phone should pick up that Spotify is playing on your server and let you control it.
Unfortunately there isn't any meta data streamed through DarkIce (or from Spotify for that matter) so the Track name will always display as the name of your stream, but meh.
The best part is that you should be able to use this guide to set up streaming for any web / streaming service.
If you want to stream multiple sources, simply create another .cfg for darkice, create another NULL sound device and repeat the process.
I've tested this running multiple instances of Spotify concurrently on my server and it works no problem. Your system resources are your only limit.
Sources:
http://www.g0hww.net/2013/11/using-null-sinks-with-pulseaudio.htmlhttp://askubuntu.com/questions/28496/how-do-i-setup-an-icecast-server-for-broadcasting-audio-in-my-networkhttp://howtoubuntu.org/how-to-install-spotify-in-ubuntu