May 15, 2008

Building a glossier front end for MythTV

Author: Nathan Willis

Josh Stewart loves MythTV -- so much so that he is building his own front-end app for it as a drop-in replacement for MythTV's default. The replacement is called Gloss, and although it isn't ready for prime time yet (no pun intended), its OpenGL effects and GStreamer bindings show plenty of promise.

One of MythTV's distinctions among digital video recorder (DVR) applications is that the front end (through which you watch television and recordings) and the back end (which runs the scheduling database and records video to disk) are separate apps -- and multiple front ends can connect to the same back end independently.

Stewart describes himself as a long-time, everyday user of MythTV. "When it's working right, I really believe that Myth has to be one of the best ways to sell Linux to non-techies."

But although he considers MythTV's MythFrontend stable and mature, he also thinks it is starting to look dated. "My brother-in-law has a similar setup to mine except using Windows MCE, and after a few friendly jabs about how much better it looked I thought I might as well try to do something about it."

Gloss is the result. It is built on top of the Clutter user interface framework, which uses OpenGL for 2-D rendering. That permits Gloss to use OpenGL-accelerated operations to draw menu and interface elements, perform transitions, and even manipulate video as a UI element. The current MythFrontend uses static images for icons, backgrounds, and other graphics, and can play -- but not arbitrarily transform -- video output.

Beneath Clutter, Gloss is written in Python, and thus has access to other frameworks such as GObject and GStreamer that can make developers' lives easier both by simplifying the front end code, and providing new functionality.

Get Glossy

Pre-built Gloss packages are not yet available, but the project wiki has a straightforward installation guide to help you grab the code and make sure you have the proper version of Clutter and the other dependencies.

Since Gloss is a Python app, there is nothing to compile. Once you have downloaded the latest code, you launch it from the command line with python &.

Gloss is themeable, currently sporting a default look that resembles Apple's FrontRow, though you can see additional examples at work in the demo videos Stewart posts frequently to his blog. The smooth scaling and fade-ins and fade-outs are examples of what Clutter can do that MythFrontend cannot.

Right now, Gloss supports photo slide show, live TV, video, and DVD playback modules. For the uninitiated, "video" playback in MythTVspeak refers to external videos, not television recordings made with MythTV. For the time being, Gloss cannot play back MythTV-recorded programs.

It also cannot do scheduling, a fact that -- when coupled with the lack or recording playback -- means Gloss cannot substitute for MythFrontend on a real DVR system. As a workaround, you can use MythWeb to schedule recordings via your Web browser, but these limitations show that Gloss is still very much a work-in-progress.

For a non-DVR media center front end, Gloss is visually impressive. Its animated transitions are nice, especially in the photo viewer. And OpenGL has the potential to bring a lot to the on-screen display (OSD) -- standard MythTV interface elements like the channel guide and pause/rewind controls are overlaid onto moving video output, so good design is important to keep all of that information readable. Any tool that can themers can use to improve OSD design is a welcome addition.

I tested Gloss on an Ubuntu 7.10 box, a desktop machine that also serves as my MythTV master back end, presently using Mythbuntu's 0.20.1 MythTV packages. I noticed a few glitches, such as live TV being stretched to fit the screen -- in this case a 16:10 LCD that should letterbox both 4:3 and 16:9 content. Gloss runs in full-screen mode, while MythFrontend can run as a windowed desktop app in 16:9 aspect ratio.

It took me a few minutes to figure out which key bindings were supported and which were not. For example, in the default MythFrontend, you can exit the program from the main menu by pressing Q, Escape, or the left arrow key. In Gloss, only Q works, though you can still use the left arrow key to back out of submenus and return to the main menu. This is not a big deal when you are working with a full keyboard, but potential trouble if you use a remote control.

Nevertheless, Gloss does indeed work as a drop-in replacement for MythFrontend -- no tweaking or adjustment was necessary, and media player modules knew exactly where to find their content, as configured inside MythTV's plugins.

Coming up on MythTV

Gloss is almost exclusively a one-developer project for right now, but Stewart hopes that will change. "Anyone with good general Python skills can help. A general understanding (or better) in GTK/GObject would go a long way to helping. There are many things that aren't difficult technically, but simply take time to implement in code, but getting up to speed with Gloss could be difficult without that knowledge. That said, if anyone has specific skills with programming GStreamer in Python then their help would also be greatly appreciated."

Stewart is planning a 0.1 release as soon as music player support is finished. At that point, he hopes, Gloss will be usable enough to attract an interested base of users, testers, and possibly plugin writers.

It will certainly attract attention; the standard MythMusic plugin is often criticized for its inflexible and hard-to-use interface. "I have a particular dislike for MythMusic as well, but something I realized very early on when I started working on the Gloss music player is that the interface for such a thing is a very difficult thing to get right," Stewart says.

"Gloss does make it much simpler for plugin developers to get something up and running (code is in Python, and you get the GStreamer and OpenGL abilities 'for free') and whilst is does make adding things like heavily image-based interfaces simpler, the difficulty is still in getting the UI design right. The music module in Gloss has easily been the most difficult to write so far, but this is not for technical reasons."

Gloss shows a lot of promise. Admittedly, it is easier to look streamlined when you don't have MythTV's myriad setup and configuration menus; let's hope Gloss sticks to the "less is more" approach as it adds functionality. As any MythTV user knows, one of the app's strongest suits is its flexibility. With Gloss, it's great to see someone pushing the front end interface in new directions, too.


  • News
  • Entertainment
Click Here!