What a difference two years makes:
Media types are defined like this:
You have a media player, which runs on each media director. This is a DCE device that basically can either:
(1) be a media player in its own right, Xine_Player uses libxine to do just this.
(2) wrap a media player by forking a process and talking to it over for example a FIFO or a network socket (mplayer_player does the former, mythtv_player does the latter.)
The media player accepts MediaStreams, these are defined in src/Media_Plugin/MediaStream.cpp and are basically handles. Media Streams are created by Media Plugins (which are subclasses of the Media Plugin itself.), and basically handle creating the media stream, finding what media players to send the stream to for an entertainment area, and sending the appropriate DCE::CMD_Play_Media() command.
The Register() method here in the Media Plugin links the Media Player device template, with the Plugin, and must be defined.
Media Players then implement at the very least, a play and stop command, which do what they need to do to start and stop the media. Typically, they receive a media stream ID, which can be used to grab media info (although, typically a media player doesn't need to know this, because it will be handed the relevant info as part of the command anyway.)
A note about device data: The Name device data (156) provides an X window tuple specifying a WM_CLASS and a window name. The Orbiter will reference this in response to the Set Now Playing command sent by the Media Plugin to figure out which window to swallow, and place on screen.
A bit of criteria, a media player's window MUST:
* be able to be resized to ANY size
* must NOT HIJACK THE SCREEN (go full screen, change resolutions, etc.)
* must not alter its window ordering in any way. It is Orbiter's bitch.
Now, Orbiter also needs a UI for the media plugin, so you need at the very least, to create a few screens:
* A Remote Screen
* A Remote FS (full screen)
* A Remote FS Options (used by UI1 OSD to show remote control on screen.)
There may be other screens you need to create to support the UI, but that is the typical scenarios.
Creating the templates, the best way to do it, is to look at the existing Xine and MythTV plugin/player templates and copy them.
Once you've done this:
* run /usr/pluto/DCEGen from inside your src/DCEGen folder.
* run /usr/pluto/sql2cpp from inside your src/sql2cpp folder.
* run /usr/pluto/Screengen from inside your src/ScreenGen folder.
* Implement code, hack, compile, test.