To explain what I'm doing right now.
I just poll MCWS/v1/Playback/Info?Zone=-1 (well, not always -1 but for this example it's sufficient), every 5s. That data goes into redis and the formatted data gets sent out via websocket. To actually get what's playing, when the 'filekey' changes, I ask for the full data. This gives me the proper stream info (so that I can control audio and subs), and the IMDb ID so I can reference it back to my main metadata server and get more comprehensive metadata about the item's global identity.
Redis acts as the database here, cutting down on the need to poll JRiver (no control / client device actually needs to ask jriver for state), and taking care of playback history (which influences my recommendations).
Obviously, if there's the possibility of a duplicate filekey, I'll have to come up with a new stable id (There's very little chance of FileKey+DurationMS having a collision right?)