Last updated: 2026๋ 1์
DirectShow.NET ๋์: VisioForge .Net SDK ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋
DirectShow.NET(๊ฐ๋ฐ ์ค๋จ)์์ VisioForge .NET SDK๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋จ๊ณ๋ณ ๊ฐ์ด๋. .NET 6-10์์ ๋น๋์ค ์บก์ฒ, ์ฌ์ ๋ฐ ์ฒ๋ฆฌ.
DirectShow.NET(directshowlib)์์ ์ต์ .NET 6-10 ๋น๋์ค ์บก์ฒ, ์ฌ์ ๋ฐ ์ฒ๋ฆฌ SDK๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ C# ๊ฐ๋ฐ์
์ DirectShow.NET์ ๊ต์ฒดํด์ผ ํ๋๊ฐ?
DirectShow.NET์ 2010๋ 2์ ์ดํ ๊ฐ๋ฐ์ด ์ค๋จ๋์์ต๋๋ค โ 15๋ ์ด์ ์ ๋ฐ์ดํธ ์์. Microsoft์ DirectShow API์ ๋ํ ์์ COM ์ธํฐํ์ด์ค ์ ์๋ฅผ ์ ๊ณตํ๋ฉฐ, Microsoft ์์ฒด๊ฐ Media Foundation์ ์ ํธํ์ฌ DirectShow๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
| ์ํ | ์ํฅ |
|---|---|
| Microsoft๊ฐ DirectShow๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ | ์๋ก์ด ๊ธฐ๋ฅ, ์ฝ๋ฑ ๋๋ ํ๋ซํผ ์ง์ ์์ |
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ง๋ณด์ ์ค๋จ | .NET Framework 2.0, .NET 6+ ์ง์ ์์ |
| COM ๋ณต์ก์ฑ | ๊ธฐ๋ณธ ์์ ์ ์๋ฐฑ ์ค, ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ |
| ์ฝ๋ฑ ์ฐพ๊ธฐ | ์๋ํํฐ DirectShow ํํฐ๋ฅผ ์ฐพ๊ณ , ์ค์นํ๊ณ , ๋ฑ๋กํด์ผ ํจ |
| ํํฐ ๊ทธ๋ํ ๋๋ฒ๊น | ๋ถํฌ๋ช ํ ํ์ดํ๋ผ์ธ ์ค๋ฅ, ์ง๋จ ๋๊ตฌ ์์ |
| Windows ์ ์ฉ | COM/DirectShow๋ macOS, Linux ๋๋ ๋ชจ๋ฐ์ผ์์ ์คํ ๋ถ๊ฐ |
| ์ต์ ์ฝ๋ฑ ์์ | ์๋ํํฐ ํํฐ ์์ด๋ ๋ค์ดํฐ๋ธ H.265, AV1, VP9 ์์ |
| ๋ ์ง์คํธ๋ฆฌ ๋ฌธ์ | ์ต์ Windows์์ ํํฐ ๋ฑ๋ก ๋ฌธ์ |
DirectShow ๊ฐ๋ ์ค๋ช
DirectShow ์ํคํ ์ฒ๊ฐ VisioForge SDK์ ์ด๋ป๊ฒ ๋งคํ๋๋์ง ์ดํดํ๋ฉด ๋ง์ด๊ทธ๋ ์ด์ ๊ณํ์ ์ธ์ฐ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ ํ๋ DirectShow์ ๊ฐ ํต์ฌ ๊ฐ๋ ์ด ์ต์ .NET ๋์ ๊ธฐ๋ฅ์ผ๋ก ์ด๋ป๊ฒ ๋ณํ๋๋์ง ๋ณด์ฌ์ค๋๋ค.
DirectShow ์ํคํ ์ฒ์์ VisioForge ๋์์ผ๋ก
| DirectShow ๊ฐ๋ | VisioForge ๋์ |
|---|---|
| Filter Graph (IGraphBuilder) | ํ์ดํ๋ผ์ธ โ SDK๊ฐ ์๋ ๊ด๋ฆฌ ๋๋ ๋ช ์์ MediaBlocksPipeline |
| Source Filter (์ฅ์น/ํ์ผ) | ์์ค ์ค์ : VideoCaptureDeviceSourceSettings, RTSPSourceSettings ๋ฑ |
| Transform Filter (ํจ๊ณผ/์ธ์ฝ๋) | ๋ด์ฅ ๋น๋์ค/์ค๋์ค ํจ๊ณผ + ์ธ์ฝ๋ ํด๋์ค (H264EncoderSettings ๋ฑ) |
| Renderer Filter (๋น๋์ค ์ฐฝ) | VideoView ์ปจํธ๋กค (WinForms, WPF, MAUI, Avalonia) |
| Mux Filter (AVI/MP4 mux) | ์ถ๋ ฅ ํฌ๋งท ํด๋์ค: MP4Output, AVIOutput, MKVOutput, WebMOutput |
| ํ ์ฐ๊ฒฐ | ์๋ โ ๋๋ Media Blocks SDK์์ ๋ช ์์ Block.Connect() |
| ๋ฏธ๋์ด ํ์ (AM_MEDIA_TYPE) | ์๋ ์ฒ๋ฆฌ โ ์๋ ํฌ๋งท ํ์ ๋ถํ์ |
| ํํฐ ์นดํ ๊ณ ๋ฆฌ (์ฅ์น ์ด๊ฑฐ) | DeviceEnumerator.Shared.VideoSourcesAsync() / AudioSourcesAsync() |
| DirectShow ํํฐ ๋ฑ๋ก (regsvr32) | NuGet ํจํค์ง โ ์์คํ ๋ฑ๋ก ๋ถํ์ |
| GraphEdit ๋๋ฒ๊น ๋๊ตฌ | ํ์ดํ๋ผ์ธ ์ด๋ฒคํธ, ๋ก๊น , ํ์ ์ง์ ์์ธ |
์ด๋ค VisioForge SDK๊ฐ ๋ฌด์์ ๋์ฒดํ๋๊ฐ?
DirectShow.NET ์ฌ์ฉ๋ฒ์์ VisioForge ๋์ฒด๋ก
| DirectShow.NET ์ฌ์ฉ๋ฒ | VisioForge ๋์ฒด |
|---|---|
| ํํฐ ๊ทธ๋ํ๋ฅผ ํตํ C# ์น์บ ์บก์ฒ | Video Capture SDK .Net โ `VideoCaptureCoreX` |
| C# IP ์นด๋ฉ๋ผ ์บก์ฒ (RTSP/MJPEG) | Video Capture SDK .Net โ `RTSPSourceSettings` |
| C# ํ๋ฉด ์บก์ฒ ๋ฐ ๋ นํ | Video Capture SDK .Net โ `ScreenCaptureDX9SourceSettings` |
| `IGraphBuilder`๋ฅผ ํตํ ํ์ผ ์ฌ์ | Media Player SDK .Net โ `MediaPlayerCoreX` |
| `IDvdControl2`๋ฅผ ํตํ DVD ์ฌ์ | Media Player SDK .Net โ DVD ๋ด๋น๊ฒ์ด์ API |
| `IAMTVTuner`๋ฅผ ํตํ TV ํ๋ | Video Capture SDK .Net โ `VideoCaptureCore` |
| ํ์ผ ํธ๋์ค์ฝ๋ฉ | Video Edit SDK .Net โ `VideoEditCoreX` |
| ์ปค์คํ ํํฐ ๊ทธ๋ํ | Media Blocks SDK .Net โ ๋ชจ๋ํ ํ์ดํ๋ผ์ธ (400+ ๋ธ๋ก) |
| `ISampleGrabber` ํ๋ ์ ์ก์ธ์ค | ๋ชจ๋ SDK์ `OnVideoFrameBuffer` ์ด๋ฒคํธ |
C# DirectShow ์ธํฐํ์ด์ค ๋งคํ
C# DirectShow ์ธํฐํ์ด์ค ๋งคํ
| DirectShow.NET ์ธํฐํ์ด์ค | VisioForge ๋๋ฑ ๊ธฐ๋ฅ |
|---|---|
| `IGraphBuilder` | SDK๊ฐ ํ์ดํ๋ผ์ธ์ ์๋์ผ๋ก ๊ตฌ์ถ |
| `ICaptureGraphBuilder2` | `VideoCaptureCoreX` ์์ฑ์ |
| `IMediaControl` (Run/Stop/Pause) | `StartAsync()` / `StopAsync()` / `PauseAsync()` |
| `IMediaEvent` | SDK ์ด๋ฒคํธ (`OnError`, `OnStop` ๋ฑ) |
| `IVideoWindow` | `VideoView` ์ปจํธ๋กค (WinForms/WPF/MAUI/Avalonia) |
| `ISampleGrabber` | `OnVideoFrameBuffer` ์ด๋ฒคํธ |
| `IBaseFilter` | ๋ถํ์ โ SDK๊ฐ ๋ด๋ถ์ ์ผ๋ก ํํฐ ๊ด๋ฆฌ |
| `IPin` / ํ ์ฐ๊ฒฐ | ๋ถํ์ โ SDK๊ฐ ์๋์ผ๋ก ํ์ดํ๋ผ์ธ ์ฐ๊ฒฐ |
| `DsDevice.GetDevicesOfCat()` | `DeviceEnumerator.Shared.VideoSourcesAsync()` |
| `FilterCategory.VideoInputDevice` | `DeviceEnumerator.Shared.VideoSourcesAsync()` |
| `FilterCategory.AudioInputDevice` | `DeviceEnumerator.Shared.AudioSourcesAsync()` |
| `IAMTVTuner` | `VideoCaptureCore.TVTuner` ์์ฑ |
| `IDvdControl2` | `MediaPlayerCore.DVD_*` ๋ฉ์๋ |
| `Marshal.ReleaseComObject()` | `await sdk.DisposeAsync()` |
C# ์น์บ ์บก์ฒ ๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
DirectShow.NET โ ์น์บ ์บก์ฒ (์ด์ )
C#// 80+ lines of COM interop
var graphBuilder = (IGraphBuilder)new FilterGraph();
var captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
int hr = captureGraph.SetFiltergraph(graphBuilder);
DsError.ThrowExceptionForHR(hr);
// Find video device
var devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
IBaseFilter sourceFilter;
hr = graphBuilder.AddSourceFilterForMoniker(
devices[0].Mon, null, devices[0].Name, out sourceFilter);
DsError.ThrowExceptionForHR(hr);
// Render preview
hr = captureGraph.RenderStream(
PinCategory.Preview, MediaType.Video, sourceFilter, null, null);
DsError.ThrowExceptionForHR(hr);
// Set video window
var videoWindow = (IVideoWindow)graphBuilder;
videoWindow.put_Owner(panelHandle);
videoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings);
videoWindow.SetWindowPosition(0, 0, panel.Width, panel.Height);
// Start
var mediaControl = (IMediaControl)graphBuilder;
hr = mediaControl.Run();
DsError.ThrowExceptionForHR(hr);
// Cleanup (must release EVERY COM object)
Marshal.ReleaseComObject(sourceFilter);
Marshal.ReleaseComObject(captureGraph);
Marshal.ReleaseComObject(graphBuilder);VisioForge โ C# ์น์บ ์บก์ฒ (์ดํ)
C#await VisioForgeX.InitSDKAsync();
var capture = new VideoCaptureCoreX(videoView);
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
capture.Video_Source = new VideoCaptureDeviceSourceSettings(devices[0]);
await capture.StartAsync();
// Cleanup
await capture.StopAsync();
await capture.DisposeAsync();C# ์น์บ MP4 ๋ นํ
DirectShow.NET โ ์น์บ ์์ MP4 (์ด์ )
C#// Must find H.264 encoder filter, MP4 mux filter, file writer
// Each requires separate COM object management
var graphBuilder = (IGraphBuilder)new FilterGraph();
var captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
captureGraph.SetFiltergraph(graphBuilder);
// Add source
var devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
IBaseFilter sourceFilter;
graphBuilder.AddSourceFilterForMoniker(
devices[0].Mon, null, devices[0].Name, out sourceFilter);
// Find and add H.264 encoder (must be installed on system!)
// This varies by system โ no guarantee the filter exists
Guid h264Clsid = new Guid("some-encoder-guid");
IBaseFilter encoder = (IBaseFilter)Activator.CreateInstance(
Type.GetTypeFromCLSID(h264Clsid));
graphBuilder.AddFilter(encoder, "H.264 Encoder");
// Find and add MP4 mux
// Find and add file writer
// Connect source โ encoder โ mux โ writer pins manually
// Each pin connection can fail silently or throw cryptic COM errors
// Configure encoder properties via ICodecAPI or IPropertyBag
// Different for every encoder filter...
var mediaControl = (IMediaControl)graphBuilder;
mediaControl.Run();
// Cleanup: release 5+ COM objectsVisioForge โ C# ์น์บ MP4 ๋ นํ (์ดํ)
C#await VisioForgeX.InitSDKAsync();
var capture = new VideoCaptureCoreX(videoView);
var devices = await DeviceEnumerator.Shared.VideoSourcesAsync();
capture.Video_Source = new VideoCaptureDeviceSourceSettings(devices[0]);
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
await capture.StartAsync();C# ๋น๋์ค ํ์ผ ์ฌ์
DirectShow.NET โ ๋น๋์ค ์ฌ์ (์ด์ )
C#var graphBuilder = (IGraphBuilder)new FilterGraph();
int hr = graphBuilder.RenderFile("video.mp4", null);
DsError.ThrowExceptionForHR(hr);
var videoWindow = (IVideoWindow)graphBuilder;
videoWindow.put_Owner(panelHandle);
videoWindow.put_WindowStyle(WindowStyle.Child);
videoWindow.SetWindowPosition(0, 0, panel.Width, panel.Height);
var mediaControl = (IMediaControl)graphBuilder;
mediaControl.Run();
// Seeking
var mediaSeeking = (IMediaSeeking)graphBuilder;
long position = 50000000; // 5 seconds in 100ns units
mediaSeeking.SetPositions(
ref position, AMSeekingSeekingFlags.AbsolutePositioning,
null, AMSeekingSeekingFlags.NoPositioning);VisioForge โ C# ๋น๋์ค ํ๋ ์ด์ด (์ดํ)
C#await VisioForgeX.InitSDKAsync();
var player = new MediaPlayerCoreX(videoView);
await player.OpenAsync(await UniversalSourceSettings.CreateAsync("video.mp4"));
await player.PlayAsync();
// Seeking
await player.Position_SetAsync(TimeSpan.FromSeconds(5));C# ๋น๋์ค ํ๋ ์ ์บก์ฒ
DirectShow.NET โ ISampleGrabber ํ๋ ์ ์บก์ฒ (์ด์ )
C#// Must insert ISampleGrabber into filter graph
var sampleGrabber = (ISampleGrabber)new SampleGrabber();
var mediaType = new AMMediaType();
mediaType.majorType = MediaType.Video;
mediaType.subType = MediaSubType.RGB24;
sampleGrabber.SetMediaType(mediaType);
graphBuilder.AddFilter((IBaseFilter)sampleGrabber, "Grabber");
// Connect pins...
sampleGrabber.SetBufferSamples(true);
// In callback: manually read buffer, create Bitmap from raw bytes
sampleGrabber.GetCurrentBuffer(ref bufferSize, buffer);
// Manual pixel format conversion, stride calculation, etc.VisioForge โ C# ๋น๋์ค ํ๋ ์ ์บก์ฒ (์ดํ)
C#capture.OnVideoFrameBuffer += (s, e) =>
{
// Frame data available as managed buffer
// Or convert to SKBitmap/Bitmap directly
var bitmap = e.Frame.ToBitmap();
ProcessFrame(bitmap);
};C# IP ์นด๋ฉ๋ผ (RTSP) ์บก์ฒ
DirectShow.NET โ RTSP ์บก์ฒ (์ด์ )
C#// Must find and install RTSP source filter (e.g., LAV, ffdshow)
// No standard DirectShow RTSP filter ships with Windows
var graphBuilder = (IGraphBuilder)new FilterGraph();
// Add RTSP source filter (if installed)
Guid rtspFilterClsid = new Guid("some-rtsp-filter-guid");
IBaseFilter rtspSource = (IBaseFilter)Activator.CreateInstance(
Type.GetTypeFromCLSID(rtspFilterClsid));
graphBuilder.AddFilter(rtspSource, "RTSP Source");
// Configure URL via IFileSourceFilter or custom interface
var fileSource = (IFileSourceFilter)rtspSource;
fileSource.Load("rtsp://camera-ip:554/stream", null);
// Must manually connect pins to decoder, renderer
// No reconnection logic โ if stream drops, graph stops
// No authentication helpers
// No ONVIF supportVisioForge โ RTSP ์บก์ฒ (์ดํ)
C#var capture = new VideoCaptureCoreX(videoView);
// RTSPSourceSettings requires async factory (private constructor)
capture.Video_Source = await RTSPSourceSettings.CreateAsync(
new Uri("rtsp://camera-ip:554/stream"), "admin", "password");
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
await capture.StartAsync();C# ํ๋ฉด ์บก์ฒ ๋ฐ ๋ นํ
DirectShow.NET โ ํ๋ฉด ์บก์ฒ (์ด์ )
C#// DirectShow has no built-in screen capture filter
// Must use third-party filter or custom push source
// Common approach: manually capture GDI/BitBlt in a thread,
// feed frames through a custom IBaseFilter implementation
// 200+ lines of custom filter code:
// - Implement IBaseFilter, IPin, IMediaSample
// - Manual frame rate timing with Thread.Sleep
// - Manual pixel format conversion
// - No GPU acceleration
// - No mouse cursor rendering
// - No multi-monitor supportVisioForge โ ํ๋ฉด ์บก์ฒ (์ดํ)
C#await VisioForgeX.InitSDKAsync();
var capture = new VideoCaptureCoreX(videoView);
capture.Video_Source = new ScreenCaptureDX9SourceSettings
{
Monitor = 0,
FrameRate = new VideoFrameRate(25),
CaptureCursor = true
};
capture.Outputs_Add(new MP4Output("recording.mp4"), true);
await capture.StartAsync();C# ๋ง์ดํฌ ์ค๋์ค ๋ น์
DirectShow.NET โ ์ค๋์ค ์บก์ฒ (์ด์ )
C#var graphBuilder = (IGraphBuilder)new FilterGraph();
var captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
captureGraph.SetFiltergraph(graphBuilder);
// Find audio device
var audioDevices = DsDevice.GetDevicesOfCat(
FilterCategory.AudioInputDevice);
IBaseFilter audioSource;
graphBuilder.AddSourceFilterForMoniker(
audioDevices[0].Mon, null, audioDevices[0].Name,
out audioSource);
// Must find WAV/MP3 encoder filter
// Must find file writer filter
// Must connect pins manually
// Configure sample rate/channels via IAMStreamConfig
var mediaControl = (IMediaControl)graphBuilder;
mediaControl.Run();
// Manual COM cleanup for all objectsVisioForge โ ์ค๋์ค ์บก์ฒ (์ดํ)
C#var capture = new VideoCaptureCoreX();
var audioDevices = await DeviceEnumerator.Shared
.AudioSourcesAsync();
capture.Audio_Source = audioDevices[0].CreateSourceSettingsVC();
capture.Audio_Record = true;
capture.Outputs_Add(new WAVOutput("audio.wav"), true);
await capture.StartAsync();C# ์ปค์คํ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ
DirectShow.NET โ ์ปค์คํ ํํฐ ๊ทธ๋ํ (์ด์ )
C#// Building a custom graph: source > resize > overlay > encode > mux > write
// Each step requires finding/creating a filter, adding to graph,
// connecting pins with compatible media types
var graphBuilder = (IGraphBuilder)new FilterGraph();
// Add source filter...
// Add resize filter (must find one that's installed)...
// Add overlay filter (must write custom or find one)...
// Add H.264 encoder (system-dependent)...
// Add MP4 mux (system-dependent)...
// Add file writer...
// Connect each pair of pins manually...
// Handle format negotiation failures...
// Total: 150-300 lines, fragile, system-dependentVisioForge Media Blocks โ ์ปค์คํ ํ์ดํ๋ผ์ธ (์ดํ)
C#var pipeline = new MediaBlocksPipeline();
var source = new SystemVideoSourceBlock(
new VideoCaptureDeviceSourceSettings(device));
var resize = new ResizeBlock(1920, 1080);
var overlay = new TextOverlayBlock("Recording...");
var encoder = new H264EncoderBlock();
var sink = new MP4SinkBlock("output.mp4");
pipeline.Connect(source.Output, resize.Input);
pipeline.Connect(resize.Output, overlay.Input);
pipeline.Connect(overlay.Output, encoder.Input);
pipeline.Connect(encoder.Output, sink.Input);
await pipeline.StartAsync();๋ง์ด๊ทธ๋ ์ด์ ์ฒดํฌ๋ฆฌ์คํธ
- DirectShow.NET ์ฌ์ฉ ํํฉ ๊ฐ์ฌ โ ๋ชจ๋ `using DirectShowLib` ์ฐธ์กฐ ์ฐพ๊ธฐ
- ํํฐ ๊ทธ๋ํ ๋ชฉ์ ์๋ณ โ ์บก์ฒ, ์ฌ์, ํธ๋์ค์ฝ๋ฉ ๋๋ ์ปค์คํ ์ฒ๋ฆฌ
- VisioForge SDK ์ ํ โ Video Capture, Media Player, Video Edit ๋๋ Media Blocks
- NuGet ํจํค์ง ์ค์น โ DirectShowLib NuGet์ VisioForge ํจํค์ง๋ก ๊ต์ฒด
- ํํฐ ๊ทธ๋ํ ์ฝ๋ ๊ต์ฒด
- COM ์ ๋ฆฌ ์ฝ๋ ์ ๊ฑฐ โ VisioForge๋ `IAsyncDisposable` ์ฌ์ฉ
- ์๋ํํฐ DirectShow ํํฐ ์ข ์์ฑ ์ ๊ฑฐ โ VisioForge์ ์ฝ๋ฑ ํฌํจ
- ์ต์ .NET ๋์ โ .NET 6-10
- ํฌ๋ก์ค ํ๋ซํผ ํ ์คํธ
- DirectShow ํํฐ ๋ฑ๋ก ์ ๊ฑฐ โ ๋ ์ด์ ํ์ ์์
๋ง์ด๊ทธ๋ ์ด์ ํ ์ป๋ ๊ฒ
| ํญ๋ชฉ | DirectShow.NET | ๋ง์ด๊ทธ๋ ์ด์ ํ |
|---|---|---|
| ์ฝ๋ ์ค ์ | ๊ธฐ๋ฅ๋น 100์ค ์ด์ | ๊ธฐ๋ฅ๋น 5-10์ค |
| ํ๋ ์์ํฌ | .NET Framework 2.0 | .NET 6-10 |
| ํ๋ซํผ | Windows ์ ์ฉ | Windows, macOS, Linux, iOS, Android |
| API ์คํ์ผ | ์์ COM, ์๋ ํ ์ฐ๊ฒฐ | ํ์ ์ง์ async C# API |
| ์ฝ๋ฑ | DirectShow ํํฐ ์ฐพ์์ ์ค์น | ๋ด์ฅ (H.264, H.265, AV1, VP9) |
| ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ | ์๋ `Marshal.ReleaseComObject` | `IAsyncDisposable` |
| ๋๋ฒ๊น | ๋ถํฌ๋ช ํ COM ์ค๋ฅ (HRESULT) | ํ์ ์ง์ ์์ธ, ์ด๋ฒคํธ |
| ๋น๋์ค ํจ๊ณผ | ํจ๊ณผ ํํฐ ์ฐพ์์ผ ํจ | 40+ ๋ด์ฅ (GPU + CPU) |
| ์ค๋์ค ํจ๊ณผ | ์์ | 40+ (EQ, ๋ฆฌ๋ฒ๋ธ, ์ฝ๋ฌ์ค, 3D) |
| ์คํธ๋ฆฌ๋ฐ | ์ฌ์ฉ ๋ถ๊ฐ | RTMP, HLS, SRT, NDI |
| ๊ฐ์ง | ์ฌ์ฉ ๋ถ๊ฐ | ๋ชจ์ (MOG2), ์ผ๊ตด (Haar/DNN/DLib), ๋ณดํ์ (HOG+SVM), ๋ฐ์ฝ๋ |
| ํ๋์จ์ด ์ธ์ฝ๋ฉ | ์ธ์ฝ๋ ํํฐ ์ฐพ์์ผ ํจ | NVENC, QSV, AMF, VideoToolbox |
| IP ์นด๋ฉ๋ผ | ์๋ ํํฐ ๊ทธ๋ํ | RTSP, RTMP, HLS, ONVIF (์๋ ์ฌ์ฐ๊ฒฐ) |
| ์ ์ง๋ณด์ | ๊ฐ๋ฐ ์ค๋จ (2010) | ํ๋ฐํ ๊ฐ๋ฐ |
Frequently Asked Questions
DirectShow.NET์ ์์ง ์ ์ง๋ณด์๋๊ณ ์๋์?
C# ๋น๋์ค ์บก์ฒ๋ฅผ ์ํ ์ต๊ณ ์ DirectShow.NET ๋์์ ๋ฌด์์ธ๊ฐ์?
VisioForge๊ฐ ์ปค์คํ DirectShow ํํฐ ๊ทธ๋ํ๋ฅผ ๋์ฒดํ ์ ์๋์?
VisioForge๋ .NET 6, .NET 8, .NET 9, .NET 10์ ์ง์ํ๋์?
์์คํ ์ DirectShow ํํฐ๊ฐ ์ฌ์ ํ ์ค์น๋์ด ์์ด์ผ ํ๋์?
DirectShow.NET์์ ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๋์?
๋ง์ด๊ทธ๋ ์ด์ ์์
์ค์น ๊ฐ์ด๋
Visual Studio, Rider, VS for Mac ์ค์
Video Capture SDK
DirectShow ์บก์ฒ ํํฐ ๊ทธ๋ํ ๋์ฒด
Media Player SDK
DirectShow ์ฌ์ ๋ฐ DVD ๊ทธ๋ํ ๋์ฒด
Media Blocks SDK
์ปค์คํ ํํฐ ๊ทธ๋ํ๋ฅผ 400+ ํ์ ์ง์ ๋ธ๋ก์ผ๋ก ๋์ฒด
๋ฌธ์
API ์ฐธ์กฐ, ํํ ๋ฆฌ์ผ, ๋ฐฐํฌ ๊ฐ์ด๋
์ฝ๋ ์ํ ํ์
์๋ํ๋ C# ์์
