I'm doing tests for a similar situation, although I only need to play a short audio instead of a full song or playlist.
I finally was able to make It work by awaiting the audio to be finished before returning in the perform() method.
It looks like it's not your case but it might give you at least an idea.