#
Custom Format Output Using DirectShow Filters
Video Capture SDK .Net Video Edit SDK .Net
VideoCaptureCore VideoEditCore
This guide explains how to implement custom format output using DirectShow filters in VisioForge's .NET SDKs. The techniques described here work with both the Video Capture SDK .NET and Video Edit SDK .NET.
#
Introduction
DirectShow filters enable you to create custom output formats for your video applications. The CustomOutput
class serves as the foundation for configuring these custom output settings. While the examples in this guide use the VideoCaptureCore
class, Video Edit SDK .NET users can apply the same principles using the VideoEditCore
class instead.
To begin working with custom output, initialize the CustomOutput class:
var customOutput = new CustomOutput();
#
Implementation Approaches
There are two main approaches to implementing custom format output:
- Using Three Independent Filters
- Using a Single All-in-One Filter
#
Approach 1: Three Independent Filters
This approach separates the processing pipeline into three distinct components:
- Audio codec
- Video codec
- Multiplexer
You can use either DirectShow filters or standard codecs for the audio and video components. Here's how to implement this approach:
#
Step 1: Retrieve Available Codecs
First, populate your interface with available audio and video codecs:
// Get video codecs
foreach (string codec in VideoCapture1.Video_Codecs)
{
cbCustomVideoCodecs.Items.Add(codec);
}
// Get audio codecs
foreach (string codec in VideoCapture1.Audio_Codecs)
{
cbCustomAudioCodecs.Items.Add(codec);
}
// Get DirectShow filters
foreach (string directShowFilter in VideoCapture1.DirectShow_Filters)
{
cbCustomDSFilterA.Items.Add(directShowFilter);
cbCustomDSFilterV.Items.Add(directShowFilter);
cbCustomMuxer.Items.Add(directShowFilter);
cbCustomFilewriter.Items.Add(directShowFilter);
}
#
Step 2: Configure Filter Selection
Set up the video and audio processing pipeline based on user selections:
// Configure video codec
if (rbCustomUseVideoCodecsCat.Checked)
{
customOutput.Video_Codec = cbCustomVideoCodecs.Text;
customOutput.Video_Codec_UseFiltersCategory = false;
}
else
{
customOutput.Video_Codec = cbCustomDSFilterV.Text;
customOutput.Video_Codec_UseFiltersCategory = true;
}
// Configure audio codec
if (rbCustomUseAudioCodecsCat.Checked)
{
customOutput.Audio_Codec = cbCustomAudioCodecs.Text;
customOutput.Audio_Codec_UseFiltersCategory = false;
}
else
{
customOutput.Audio_Codec = cbCustomDSFilterA.Text;
customOutput.Audio_Codec_UseFiltersCategory = true;
}
// Configure multiplexer
customOutput.MuxFilter_Name = cbCustomMuxer.Text;
customOutput.MuxFilter_IsEncoder = false;
#
Step 3: Set Up Custom File Writer (Optional)
If your implementation requires a special file writer:
customOutput.SpecialFileWriter_Needed = cbUseSpecialFilewriter.Checked;
customOutput.SpecialFileWriter_FilterName = cbCustomFilewriter.Text;
#
Approach 2: Single All-in-One Filter
This approach uses a single filter that combines the multiplexer, video codec, and audio codec. The system can automatically detect whether the filter:
- Can write files independently
- Requires the standard File Writer filter
- Needs a special filter
Implementation steps:
// Get available DirectShow filters
foreach (string directShowFilter in VideoCapture1.DirectShow_Filters)
{
cbCustomDSFilterA.Items.Add(directShowFilter);
cbCustomDSFilterV.Items.Add(directShowFilter);
cbCustomMuxer.Items.Add(directShowFilter);
cbCustomFilewriter.Items.Add(directShowFilter);
}
// Configure multiplexer
customOutput.MuxFilter_Name = cbCustomMuxer.Text;
customOutput.MuxFilter_IsEncoder = true;
// Set up custom file writer if needed
customOutput.SpecialFileWriter_Needed = cbUseSpecialFilewriter.Checked;
customOutput.SpecialFileWriter_FilterName = cbCustomFilewriter.Text;
#
Using the Settings Dialog
For a more user-friendly approach, you can utilize the CustomFormatSettingsDialog:
CustomFormatSettingsDialog customFormatSettingsDialog = new CustomFormatSettingsDialog(
VideoCapture1.Video_Codecs.ToArray(),
VideoCapture1.Audio_Codecs.ToArray(),
VideoCapture1.DirectShow_Filters.ToArray());
customFormatSettingsDialog.SaveSettings(ref customOutput);
#
Implementing the Output
After configuring your custom format settings, follow these steps to implement the output:
// Apply custom format settings
VideoCapture1.Output_Format = customOutput;
// Configure capture mode and output file
VideoCapture1.Mode = VideoCaptureMode.VideoCapture;
VideoCapture1.Output_Filename = "output.mp4";
// Start the capture process
await VideoCapture1.StartAsync();
#
Required Redistributables
Ensure you have the appropriate redistributable packages installed:
Video Capture SDK .Net:
Video Edit SDK .Net:
Visit our GitHub page to get more code samples.