This article goes in-depth into the creation of Customized Media Playback interfaces. If you are just trying to configure
Customized Media Playback, you should read this article instead.
In Zoom Player v3.10, a new method of media playback has been introduced, "Customized Media Playback".
This guide will explain the theory behind this new interface and go in-depth as to how you can utilize it
to prevent filter conflicts and build customized media graphs with as little effort as possible.
But first, a little background. To play a media file, a series
of components (from here on referred to as "Filters") are linked to each other to form a Filter Graph (from
here on referred to as "Graph"). Each Filter in the graph has a job. One filter will read the data from
your Hard Drive or CD (Source Filter), another filter will take this data and split the content of the
file into Audio, Video and other types of data-streams (Splitter Filter). From there the data will be
fed into filters that will decode the compressed data and send it forward as RAW Audio/Video data (Decoder Filters),
this data can then be modified/enhanced by additional filters (Transform Filters), and lastly the data
will be processed by filters that interface directly with your hardware to display the Video and Play the Audio (Rendering
Filters).
Here is an image taken from GraphEdit (a tool from microsoft for manually building Graphs) illustrating how a
DIVX video with MP3 audio AVI graph is constructed:
Now, you will notice that the filters have Pins. Each pin contains a data stream, either input (pins on left side
of filter) or output (pins on right side of filter). By right clicking the FFDShow input pin and selecting "Properties"
we get this information screen (you must have "proppage.dll" which comes with GraphEdit registered with the system by
using the "regsvr32.exe proppage.dll" command line in order to see the this dialog):
The thing that interests us here is the "Sub Type" string "{33564944-0000-0010-8000-00AA00389B71}". This string
identifies the type of data moving between these pins. In this case, DIVX v3 data. FFDShow contains a list
of Sub Types it can connect to. If the output pin presents the FFDShow decoder with a Sub Type it recognizes, it
will accept the connection. But... what if there is more than one filter that can accept this Sub Type? You've guessed
it: a possibility for filter conflicts.
And here is where the Customized Media Playback interface comes into play. Instead of letting DirectShow (Windows)
pick which of the suitable filters should be used, Zoom Player allows you to select the filter yourself. And to
make things quite a bit easier, Zoom Player contains pre-created profiles so that under most media configurations,
you won't have to deal directly with finding the current Sub Types for various media formats. In fact, unless you're
trying to add support for a new file format or a new type of compression, you should probably stay clear of touching
any of the Sub-Type data yourself.