For the longest time we used to use
XBMC Kodi, but a year ago we moved our media management at home over to the Plex ecosystem. This allows me to store all our content on a private server and then stream to any device that I wish. Up until recently this has been various iOS devices and smart TV’s.
We’ve invested in some Sonos speakers to allow listening to music to be easier in our house. Sonos works by having providers that integrate into your system, and recently they added a Plex connector. This allows you to stream your audio from your Plex server to your Sonos. However, unlike commercial services, which were just plug and play, I had to do a little bit more to make Plex work. Hopefully this helps someone else out there and saves them some time.
The way that the Sonos connector works is that it connects to the central Plex servers to find the external IP address of your private servers, which it then uses to connect. This is unlike other Plex apps that are able to look on your local network to find servers and connect using the local IP address. This can cause problems if your router doesn’t support Haripinning (NAT loopback). Hairpinning is where a device on a network behind NAT tries to connect to a device on the same network using the external address. The router should be intelligent and prevent the request from going out of the local network.
I previously had my Plex using UPnP to expose it externally, but my router only supports Hairpinning on forwarded (static) ports. Therefore to fix this, I set manual port in the Plex settings and then set that port to forward to my Plex server in my router’s config. Hey presto, working Plex on our Sonos.