About

OpenHTPC is an open source home theater PC (HTPC) front end project. The system is written in C#. Currently it's running on the Windows platform. However, the system is design to be platform independent so that in the future it could be deployed on other platforms like Linux.

Use Case Analysis

The system is a Home Theater PC (HTPC) front-end software. The software provides the as easy-to-use interface as the user interface of any home electronics. With the control simplest input device, the software should be able to play movie clips (DivX, Real media, Quick time etc), DVD movie, TV and musics (mp3, rm, AAC etc) and pictures.
The media files can be located on local machine, or on others PC through home network, or even on removable storages like CD/DVD, compact flash or secure digital cards.

Design Goal

  • Versatile. The system is primarily a front-end. On Windows platform it uses the DirectX interface. As long as the codec of the specific media type is installed, it should be able to play it.
  • Simple maintenance. The system is composed of several DLLs, one executable, at least one skin folder and one configuration file. Basically the users just need to copy the files. Make changes to no more than 10 lines in XML configuration and run.
  • Easy to use. The system is designed to work with any input device (keyboard, remote controller and joysticks etc) with at least 6 buttons (up, down, left, right, ok and cancel).
    I designed the innovative context sensitive key map mechanism. For example, the Right function and FastForward function can be assigned to the same button. If the current context is DVD navigation, the code will only check if the button supports the Right. If the current context is playback, it will only check if the button supports FastForward function.
  • Internationalization. I always beat in mind the support for internationalization in the design process. All text string and fonts are defined in the configuration file of the skin. The skin is fully customizable with different languages support.
    Also, for DivX movies with different external subtitles in different languages. The system can automatically adjust the language font when switching among different subtitles.

In a word, the system is designed to be maximum considerate to end users.

Portablity Issues

I would expect in the near future the project would be able to be ported to Unix platforms. The system is implemented in C#. The design has successfully decoupled the media navigation functionalities and actual media playback related functionalities.
The media playback functions can be abstracted into an interface with around 10 functions. On Windows I'm currently using DirectX interface to do actual playback work. On Linux/Unix we can choose the front-ends like mplayer, xine or videolan.
I'm keeping an eye on the DotGNU project on Linux platform.