New version
mb_Upnp2025_1.2Changes
- The profile list will properly select the new profile when clicking the add button.
- New Option - "enable remote control of musicbee via UPnP". It's a UPnP MediaRenderer service. *** Experimental ***. Don't check this unless you are actually going to use it.
The renderer doesn't work in the traditional sense. You can't stream things to Musicbee. As far as I know Musicbee can't play a stream?
But it does allow some remote control aspects via UPnP.
Using BubbleUPnP on my android phone I can browse the Musicbee library via DLNA\UPnP and set the Musicbee Renderer as the output device. When selecting to play a track with this setup, it will tell Musicbee to play that track.
What you can do when the Musicbee Renderer is set as the output in BubbleUPnP- Play a track from the Musicbee DLNA library and Musicbee will play it.
- Basic controls will be reflected in Musicbee, Pause, play, next, seek etc.. pushing the volume buttons on the phone while Mb renderer is set as the output will adjust Musicbee's volume. Note- Next will just play the next track in the BubbleUPnP playlist, not a playlist or Now Playing list in Musicbee. The playlist is limited to 15 tracks in the free version of BubbleUPnP. But the next/previous commands are configured for other UPnP controllers to use (more below on this).
What you can't do - Select a song on your phones internal storage and play it to the Musicbee Renderer. It will give you an error.
- Unmute. Something is broken with that at the moment with BubbleUPnP. It will allow you to mute but not unmute.
- It has no other control over Musicbee, you can't create or modify playlists or edit track info. It's purely for playing tracks.
It's experimental and a bit janky to be honest. I think most users will probably find it too clunky. There are times where you have to wait for the devices to appear. If you are having problems just close everything, start Musicbee first and then start BubbleUPnP. Everything should show up ok then.
Info for any developers wanting to use the Renderer features-In terms of the UPnP standard, It's a proper MediaRenderer device. The only difference is it just ignores the stream info and tells Musicbee to play the track directly. Most of the other actions should work normally. It should be possible to create simple remote app that lets you send play, stop, pause, seek, next, previous, volume, mute commands to Musicbee from any device on the network. And set play modes like repeat and shuffle.
The plugin creates a hash of all tracks and keeps a list of these hashes and the track metadata including the original URL (filepath). When the MediaServer component serves tracks over DLNA, this hash is part of the URL. When the Renderer receives this URL via the SetAVTransportURI action, it strips out the hash and finds the original track URL from the previously mentioned list then tells Musicbee to play it. That's why it can't play tracks from your internal phone storage because the supplied URI will not contain the hash information.
The SetAVTransportURI action will check if the supplied CurrentURI variable is a Musicbee style URL (basically the filepath) and play it if it exists in the Musicbee library. So technically I might be able to do a workaround so songs played from a mobile devices internal storage could be played but the folder structure would have to be the same as the PC and the track would have to exist on the PC and in the Musicbee library.
SetNextAVTransportURI isn't fully implemented yet.
Controllers can subscribe to Renderer events and will receive an initial response but nothing after that. That's what I'll be working on next.
I may have missed some things, this crap is bloody complicated (for me anyway) so expect errors.
I found a devicespy app on github that I compiled. It lets you browse for UPnP devices on the network and invoke actions on UPnP services. I can supply that if anyone is interested in playing around. Its a little buggy but mostly works...
edit: Forgot to mention the Renderer port will always be one digit higher than the server port. I'll add options later to manually set it and the renderer name.