We have just released our new multi-format DirectShow decoder (click here to download) - a combined reader, splitter and decoder that uses a combination of FFmpeg and our proprietary technology to play out most of the available file formats. The filter uses LGPL builds of FFmpeg, is available for commercial licensing and can be used in commercial applications.
We believe that this is the best file playback solution for DirectShow developers that has ever existed. We designed this filter based on a fundamental understanding of DirectShow challenges and what the developer really needs when playing out files.
We expect that with the help of this product a DirectShow developer will not only have the file playback use case completely covered, but also:
1) Have a minimum viable version of your product completed and delivered to the customer much, much sooner. Here's an article about how important this is (http://steveblank.com/2013/07/22/an-mvp-is-no.../).
2) End up having an app that is easier to manage and support. Instead of keeping track of file formats and codecs it is smarter to rely on a tested and popular multimedia framework, tested and improved by a commercial vendor with official product updates and support.
Let's see what other benefits the Multi-Format DirectShow Source filter will bring to your app and to you, the developer.
Simpler DirectShow graphs
Traditionally in DirectShow playing out a file requires the use of a file reader (to actually read the data), a splitter (to extract separate audio and video data), an audio decoder and a video decoder (to actually decode the streams). These objects will be either automatically combined into a graph based on the Intelligent Connect feature or have to be pre-programmed manually for every file format that you want to support in your app.
Regardless of how you implement it, your graph will probably look like this:
With our new source filter things look a great deal simpler as it efficiently replaces the reader, splitter and both decoders. The filter guarantees that for every file format or codec it will find and use the best of either FFmpeg or our own technology.
The graph, in this case, will be minimized to this:
Changing files on the fly and built-in audio/video format conversion
Because we had the key components inside one filter, it was easy to implement instant (gapless) switching of files - something that traditionally required the use of several graphs and was in the heart of our previous DirectShow-based technology.
It is also possible to change audio streams or MPEG TS program streams on the fly, without black frames or delay.
Bottom line, there's no need to re-build the graph when switching to a new file - there's a method that does the file switching inside the filter and only one graph is needed to play all kinds of files in any of the ways supported by the filter.
Built-in audio/video format conversion will make sure the output parameters are consistent. This may be important when playing out to professional I/O devices (such as the ones from Blackmagic Design or Deltacast) or when working with downstream filters that don't support Dynamic Reconnection.*
Smooth reverse playback
Another consequence of our design is the reverse playback feature, which is usually available for I-frame encoding formats only (without temporal compression), such as AVC-i and MJPEG.
With the Multi-Format Source DirectShow filter it is available for most of the supported formats including MPEG-2, MPEG-4 and H.264.*
When you are prepping a file for playback, you may want to define CUE-in and CUE-out positions meaning that you want the filter to start and end playback exactly where you specified. We ensure frame-accurate positioning for you.
Improved support for MXF and LXF
MXF and LXF are complex, professional broadcast-specific formats. They are still supported by FFmpeg, but we have found that our own MXF and LXF splitters work better with some of the files submitted by customers.
Therefore, our splitters are included with the filter and are automatically used, unless FFmpeg's built in splitters are better for a specific file.
Support for external audio files*
If you want to play audio from an external file, you may simply specify so in the arguments before start of playback - the filter will play the two files in sync to the audio and video output pins. This feature allows to use just one graph for playback, even if audio or subtitles are fed from another file.
Timecodes are a kind of metadata used as a reference for editing and syncronizing media. If there's timecode data in your file, the filter will parse it and make it available via the output Timecode pin or via a method in the API.
Closed captions support*
Closed captions are a way of transmitting subtitles to analog and digital TV sets. When stored in digital form in files, these subtitles can be played back - useful for e.g. media verification). The Multi-Format DirectShow Source filter supports CEA-708 and CEA-608 closed captions playback via a special output pin.
We support most common formats such as MXF, MPEG-2, H.264 with ATSC data, LXF HD, MOV/MP4 with CEO-708 or 608 stream.
Decoding is a critical process that usually runs inside the app. Developers end up in a situation of uncertainty when the decoder meets a corrupt file or crashes because of its own bug: the host application can start leaking memory and also crash.
We run decoding in a separate process outside the DirectShow graph. If the decoding process crashes, the filter will notify you and you will decide what to do next - such as go to the another file or show an error message to the user. The performance of your main app will not be affected.
This makes the filter usable in 24/7 applications - often a critical requirement in the Broadcast world.
Built-in audio level (RMS)
Our built-in audio level will measure the sound level in RMS for every frame. This data is then made available to the developer via a simple API method, and can be easily drawn to screen, for example.
Callbacks & events support
Per each frame, asynchronous or synchronous events can be used to deliver the following data to your app:
- audio & video data;
- frame type (I, B, P);
- audio level.
There's no need to use the Sample Grabber filter (http://msdn.microsoft.com/en-us/library/windo.../) which is often used for callbacks in DirectShow.
Events or callbacks can be used for things like frame analysis, saving frames to disk or making changes in the frame (such as logo overlay with the help of the build-in method of the MFrame object).
The filter will be available in 2 versions: a) a Pro version with support for MXF, LXF and closed captions available for 1450 euro; b) a Standard version without these broadcast-specific features, available for 950 euro. In both cases these are Single Developer licenses, that can be used in quantities of less than 1000 copies per year.
You can download the filter here and try it for 30 days.
(*) The following features are currently not available:
- Decoding in an external process (protected decoding). Expected in one of the later versions.
- Some files may not work as expected in reverse playback mode. Please submit such files to us so that we can quickly review them and make fixes (if possible).
- Closed captions support.
- Rate conversion. Expected in Q1 2014.
- External audio files support.