The app is called 'UPnP Tool'
I created this for a colleague using markdown, so the formatting is a little strange.
Using UPnP Tool to retrieve track listing from a media server
NOTE: It seems there is a limit to the volume of XML returned by the UPnP Tool. This will vary by media server and by the index you're browsing (the amount of metadata at each step) so stick to a RequestedCount of about 25. You can always change the StartingIndex index to request the latter items.
If the return string is too large it will look like the app isn't processing the INVOKE command.
The objective is to browse through the indexes/levels of your media server to retrieve the metadata that's sent to your control point for the track listing so we can inspect the contents to see exactly what's going on.
Using MinimServer as an example we would only need to navigate two levels to get to the track listing: {n} albums > Album Title > Track Listing
With Plex on the other hand there's four: Music > Music > By Album > Album Title > Track Listing
Before diving in with UPnP Tool it's worth navigating to your selected album using your normal app and writing down the browse path and the position of your selected album in the album listing. This will make it easier to follow the logic of the subsequent steps and enable you to retrieve the target album if it's not contained within the initial subset of results.
Using Plex as an example I'd write down:
Music > Music > By Album > Hunky Dory (position 87)
Open UPnP Tool
Select your MediaServer
Select the ContentDirectory service
Select Browse
Enter the following information into UPnP Tool
Code:
ObjectID: 0
BrowseFlag: BrowseDirectChildren
Filter: *
StartingIndex: 0
RequestedCount: 25
Once you've entered the above information click INVOKE.
The XML that would have been sent to your control point is now contained in the 'Result (string)' field toward the bottom of the screen, if you touch and hold the text a window will open where you can copy it.
Paste this into a xml formatter such as
https://jsonformatter.org/xml-formatter. If using this formatter paste the text into the top pane, click 'Format/Beautify' and scroll down to see the results. It's probably best viewed in landscape mode if you're on a phone.
The following screenshot shows the initial XML returned from a MinimServer browse request.
Here we can see the browse hierarchy represented in XML, with the <dc:title> tags representing the labels we see in the app.
Notice that at the top level the class of the objects is <object.container>, when you're at the album level they'll be <object.container.album.musicAlbum> and at the track listing level <object.item.audioItem.musicTrack>.
To browse a further index/level we need its associated container id, which in this example is "0$albums". If we paste that into the ObjectID field in UPnP Tool and press INVOKE, the XML of the next browse step will be returned. Continue this until you reach the album listing.
Given we have to limit the number of records returned to 25 your selected album may not appear in the initial album listing, one way around this is - if we know the position of the album in the listing - to change the sliding window of returned results. When we wrote down our browse path above we noted the album was at position 87 in the album listing, so we can change the window by modifying the following parameter:
NOTE: Make sure to set it back to 0 when browsing different indexes.
When you can see your album, use the albums container id to retrieve the track listing.
The following screenshot shows an extract of the track listing
Once you get to this level copy this into a text file and attach it to a response.