Track progress not updated if using UPnP/DLNA with Yamaha Musiccast devices

Issue description:

If I cast via UPnP to Yamaha the progress bar instantly stops inside the app. The media view inside the Android task view keeps progressing until the progress bar is full, but it isn’t in sync with the progress on the Yamaha player.

After the first track is completed the next track starts on the Yamaha player, but neither the view inside the Symfonium app, nor the media view in the task view is indicating that and are still showing the first track. It seems that Symfonium is not aware of what is playing on the Yamaha player.
Because of the issue played tracks are either not reported as such to Navidrome, or Navidrome can’t recognize them as finished. Therefore they are neither counted nor is a scrobble event fired.

The issue can’t be observed when I cast to Kodi instead of Yamaha. The progress is picked up correctly and also seeking is working.
Track play counting is working as well as scrobbling.


“Error/UPnPRenderer: Error getting position info” log entries for instance only appear with Yamaha (386,3 KB)


Progress bar becomes stuck.

Additional information:

Yamaha does respond to pause button presses inside Symfonium, but not to anything related with seeking. Seeking might not be supported by Yamahas UPnP implementation, as I wasn’t able to get it working with other UPnP Controllers and servers either.

The issue can be reproduced with the stereo receiver R-N803D, the smart speakers WX-030 and WX-021, as well as the AV receiver RX-A2A. All of them are Yamaha Musiccast devices.

The device is broken and returns invalid XML and so does not respect UPNP

2023-07-15 16:53:45.951 T:UPnPRenderer 
Error getting position info: <?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="" s:encodingStyle=""><s:Body><u:GetPositionInfoResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><Track>1</Track><TrackDuration>0:05:25</TrackDuration><TrackMetaData>&lt;DIDL-Lite xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot; xmlns:dlna=&quot;urn:schemas-dlna-org:metadata-1-0/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot; xmlns:sec=&quot;; xmlns:dc=&quot;;&gt;&lt;item restricted=&quot;1&quot; id=&quot;c5673fea-c3be-4730-a081-fa6d82b84b1f&quot; parentID=&quot;0&quot;&gt;&lt;upnp:album&gt;This Is What I Mean&lt;/upnp:album&gt;&lt;upnp:class&gt;object.item.audioItem.musicTrack&lt;/upnp:class&gt;&lt;upnp:artist&gt;Stormzy&lt;/upnp:artist&gt;&lt;res duration=&quot;00:05:25&quot; protocolInfo=&quot;http-get:*:audio/flac:DLNA.ORG_PN=FLAC;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000&quot;&gt;;amp;u=REDACTED&amp;amp;t=REDACTED&amp;amp;s=REDACTED&amp;amp;v=1.13.0&amp;amp;c=Symfonium&amp;amp;f=json&lt;/res&gt;&lt;upnp:originalTrackNumber&gt;2&lt;/upnp:originalTrackNumber&gt;&lt;upnp:albumArtURI&gt;;/upnp:albumArtURI&gt;&lt;dc:title&gt;This Is What I Mean&lt;/dc:title&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</TrackMetaData><TrackURI></TrackURI><RelTime>0:00:58</RelTime><AbsTime>0:00:58</AbsTime><RelCount>58</RelCount><AbsCount>58</AbsCount></u:GetPositionInfoResponse></s:Body></s:Envelope>

The TrackURI is not properly escaped and so the XML parser can’t decode what the device says.

It should be fixed by Yamaha.

I currently do not really have a workaround as the author of the library I use do not have much time even to discuss about how to implement a proper workaround.