We’ve just finished the initial work for adding support for Plex to our CQC (www.charmedquark.com) automation platform. We posted a preview last night for users to bang on and report issues. I just wanted to make some comments on the interface and how it could be improved. Since we have interfaces to hundreds of devices and systems by now, we have a pretty well developed opinion on what works and what doesn’t.
One nit is that the ‘stopped’ state is not reported. It only reports playing/paused, but not stopped. It would be much nicer if it did. What we ended up doing was watching the current run time and, if the state is play and the time hasn’t moved in a while, we assume it’s stopped. But, this is sub-optimal because you guys don’t even update the current time but about once per ten seconds, so we obviously have to wait longer than that in order to avoid spurious triggers of a stop state.
Which brings up the fact that polling is just not optimal for this type of application. When you add in the fact that, just to get some basic info like playing state and current time for one client, you have to pull down ALL of the metadata and current info about EVERY player that’s active, then it’s a lot worse. You really need to provide a better interface for this. If you insist on sticking with HTTP, then allow the connecting controller to request async notifications on a persistent HTTP connection. Other devices use this and it works well. If the controller doesn’t request it, it’s not done, and so it’s backwards compatible.
It’s particularly piggy in that includes all of the metadata, which almost never changes, but it has to be pulled over constantly just to get some sort of reasonably low latency access to current play state and current run time. We don’t even need the metadata, since we are providing that ourselves (by pulling it from the server and storing it upon starting up a movie.) It’s pretty crazy to suck over megabytes of data that’s never changing, and to do so for every client you want to control. It’s not so great for scalability.
It’s a bit awkward that controlling a client really involves talking to the server for the most part, or at least getting status about them does (and that’s the only on-going activity.) The only way to proactively know if a client has gone away is to (again poll) the active clients list and watch for the client of interest to disappear from the list, It would be nice to have some sort of periodic ping capability straight to the clients.
In our case, since we are an automation system, we are providing the browsing of media on our own touch screens (by pulling it from the server) and invoking playback and control. The user doesn’t want to have to switch between screens, and there’s a lot more to watching movies than just selecting a movie and playing it. We provide the control over all of the hardware as well and integrate that (along now with Plex optionally) all into a single system. This is likely to be the case for most users of automation, who want a single point of control.
It would be nice, for users like ours, to just have a ‘blank screen’ mode. Some other products do this. Instead of presenting you their interface, it can just come up with a blank screen and be used as a passive media player. That would make it much more applicable to high endy automation installations.
Anyway, just some feedback. Not intended to be negative, just telling you what is missing or sub-optimal from the perspective of our customers, and hence likely to most customers looking for automated solutions.
Dean Roddey
Chairman/CTO, Charmed Quark Systems, Ltd.