Last updated: 2026년 1월
Video Capture SDK .NET vs Medialooks MFormats SDK
파이프라인 엔진 vs 프레임 기반 캡처 비교
VisioForge Video Capture SDK .NET과 Medialooks MFormats SDK 중 선택하는 것은 근본적으로 다른 두 가지 아키텍처 모델 간의 결정입니다. Video Capture SDK는 소스, 처리 및 출력을 선언적으로 구성하는 파이프라인 기반 엔진을 사용하고, MFormats는 각 프레임을 수동으로 가져와 라우팅하는 프레임 기반 그랩-프로세스-출력 루프를 따릅니다. 이 가이드에서는 아키텍처, 기능, 플랫폼 지원, 가격 및 실제 코드를 비교하여 프로젝트에 적합한 선택을 할 수 있도록 합니다.
요약
| 측면 | Video Capture SDK .NET | MFormats SDK |
|---|---|---|
| 아키텍처 | 듀얼 엔진: 네이티브 DirectShow/Media Foundation + 내장 FFmpeg 파이프라인 | COM 객체를 사용한 프레임 기반 그랩-프로세스-출력 루프 |
| 플랫폼 지원 | Windows, macOS, Linux, Android, iOS (5개 플랫폼) | Windows만 지원 |
| 가격 | 연 250-500 EUR (구독) 또는 1,500 EUR 팀/영구 라이선스 | ~4,508달러/개발자/년 (구독 필수) |
| 최적 용도 | 크로스플랫폼 캡처 앱, 다중 출력 파이프라인, 비디오 효과, 감지 | 멀티벤더 SDI 방송, HTML5 CG 오버레이, 재생목록/플레이아웃 워크플로 |
| SDI 하드웨어 | Blackmagic DeckLink 지원 | Blackmagic, AJA, Bluefish444, Deltacast 멀티벤더 SDI |
| UI 프레임워크 | WinForms, WPF, MAUI, Avalonia, Uno, Console, Blazor | WinForms, WPF, Console |
| 라이선스 모델 | 영구 또는 연간 구독; 만료 후에도 작동 | 연간 구독만; 구독 만료 시 워터마크 추가 |
| 지원 | 전용 티켓 시스템, 우선 SLA | 이메일 지원, 포럼 |
아키텍처 심층 분석
Video Capture SDK .NET 아키텍처
Video Capture SDK는 파이프라인 기반 설계를 사용합니다. 소스, 처리 단계 및 출력을 선언적으로 구성합니다. 엔진은 내부 필터 그래프를 자동으로 조립하며 스레딩, 동기화 및 버퍼 관리를 처리합니다. 듀얼 엔진은 네이티브 장치 액세스를 위한 DirectShow/Media Foundation과 고급 코덱 및 IP 카메라 수집을 위한 내장 FFmpeg 파이프라인을 래핑합니다.
- ▶선언적 파이프라인 구성: 속성 설정, StartAsync() 호출
- ▶듀얼 엔진: 네이티브 OS 캡처 API + 내장 FFmpeg
- ▶Direct3D / OpenGL 렌더러를 통한 GPU 가속 미리보기
- ▶.NET async/await 지원을 통한 이벤트 기반 아키텍처
- ▶자동 스레드 관리를 통한 단일 프로세스 모델
- ▶하나의 파이프라인에서 다중 출력: 녹화 + 스트리밍 + 스냅샷 동시 수행
MFormats SDK 아키텍처
MFormats는 COM 객체를 기반으로 구축된 프레임 기반 그랩-프로세스-출력 모델을 사용합니다. MFReader를 생성하여 프레임을 가져오고, 각 프레임을 MFTransform 객체를 통해 처리하며, MFWriter 또는 MFRenderer 출력으로 전송합니다. 이는 프레임별 세밀한 제어를 제공하지만 캡처 루프 작성, 스레딩 관리 및 프레임 타이밍을 수동으로 처리해야 합니다.
- ▶프레임 기반 루프: MFReader에서 프레임 가져오기, 처리, MFWriter로 전송
- ▶.NET 인터롭 래퍼를 갖춘 COM 기반 아키텍처
- ▶수동 스레딩 및 프레임 타이밍 관리 필요
- ▶프레임별 제어로 커스텀 라우팅 로직 가능
- ▶각 파이프라인 단계를 위한 별도 객체 (Reader, Transform, Writer, Renderer)
- ▶방송 워크플로를 위한 내장 플레이아웃 및 재생목록 스케줄링
주요 아키텍처 차이점
| 측면 | Video Capture SDK | MFormats SDK |
|---|---|---|
| 프로그래밍 모델 | 선언적 파이프라인: 구성하고 시작 | 명령형 루프: 프레임별 가져오기, 처리, 출력 |
| 스레딩 | 자동 내부 스레드 관리 | 개발자가 캡처 루프 스레딩 관리 |
| 프레임 라우팅 | 파이프라인 구성을 통한 자동 | 코드에서 프레임별 수동 라우팅 |
| 다중 출력 | 하나의 파이프라인에서 내장 동시 출력 | 개발자가 프레임을 복제하여 여러 writer로 라우팅 |
| 플랫폼 | 크로스플랫폼 (.NET 6-10, MAUI) | Windows만 (COM 기반) |
| 객체 모델 | 순수 .NET 관리 API | .NET 래퍼를 사용한 COM 인터롭 |
기능별 비교
캡처 소스
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| USB 웹캠 | ✅ | ✅ |
| 화면 / 데스크톱 캡처 | ✅ | ✅ |
| IP 카메라 (RTSP/ONVIF) | ✅ | ✅ |
| Blackmagic DeckLink SDI | ✅ | ✅ |
| AJA SDI 카드 | ❌ | ✅ |
| Bluefish444 SDI 카드 | ❌ | ✅ |
| Deltacast SDI 카드 | ❌ | ✅ |
| TV 튜너 (BDA/DVB) | ✅ | ❌ |
| NDI 소스 | ✅ | ✅ |
| 산업용 카메라 (GenICam/GigE Vision) | ✅ | ❌ |
| 가상 카메라 (OBS Virtual Cam) | ✅ | ⚠️(DirectShow를 통해) |
녹화 및 출력
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| MP4 (H.264 / H.265) | ✅ | ✅ |
| MXF 컨테이너 | ⚠️ | ✅(MFormats는 방송 MXF에 강함) |
| MKV 컨테이너 | ✅ | ❌ |
| WebM (VP8 / VP9 / AV1) | ✅ | ❌ |
| AVI | ✅ | ✅ |
| MOV (ProRes) | ✅ | ✅ |
| WMV / ASF | ✅ | ✅ |
| MPEG-TS | ✅ | ✅ |
| 애니메이션 GIF | ✅ | ❌ |
| 오디오 전용 (MP3, AAC, WAV, FLAC) | ✅ | ⚠️ |
| 사전 이벤트 녹화 (순환 버퍼) | ✅ | ❌ |
다중 출력
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| 동시 녹화 + 스트리밍 | ✅ | ✅ |
| 여러 독립 녹화 출력 | ✅ | ⚠️(수동 프레임 복제 필요) |
| 독립 출력 제어 (각각 시작/중지/일시정지) | ✅ | ⚠️(writer별 수동 제어) |
| 출력별 다른 코덱 | ✅ | ✅ |
| 녹화 중 스냅샷 | ✅ | ✅ |
스트리밍
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| RTMP Push | ✅ | ✅ |
| RTSP 서버 | ✅ | ❌ |
| SRT 스트리밍 | ✅ | ✅ |
| HLS 출력 | ✅ | ⚠️ |
| NDI 출력 | ✅ | ✅ |
| UDP / TCP 멀티캐스트 | ✅ | ✅ |
비디오 처리 및 효과
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| 실시간 크기 조정 / 자르기 | ✅ | ✅ |
| 디인터레이싱 | ✅ | ✅ |
| 색상 조정 | ✅ | ✅ |
| 텍스트 / 이미지 오버레이 | ✅ | ✅ |
| HTML5 CG 오버레이 | ❌ | ✅ |
| 크로마 키 (그린 스크린) | ✅ | ✅ |
| GPU 가속 비디오 효과 (40+) | ✅ | ⚠️(내장 효과 제한적) |
| 화면 속 화면 | ✅ | ✅ |
| 전환 및 와이프 | ✅ | ✅ |
오디오
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| 오디오 장치 캡처 | ✅ | ✅ |
| 오디오 믹싱 (다중 입력) | ✅ | ✅ |
| 오디오 효과 (40+ 내장: EQ, 컴프레서, 리버브 등) | ✅ | ❌ |
| VU 미터 / 레벨 모니터링 | ✅ | ✅ |
| 시스템 오디오 루프백 캡처 | ✅ | ⚠️ |
| 임베디드 오디오 라우팅 (SDI) | ✅ | ✅ |
감지 및 분석
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| 모션 감지 | ✅ | ❌ |
| 얼굴 감지 | ✅ | ❌ |
| 바코드 / QR 코드 판독 | ✅ | ❌ |
| 객체 추적 | ✅ | ❌ |
| 오디오 레벨 감지 | ✅ | ✅ |
방송 및 플레이아웃
| 기능 | Video Capture SDK | MFormats SDK |
|---|---|---|
| 재생목록 / 플레이아웃 스케줄링 | ❌ | ✅ |
| 멀티벤더 SDI 출력 | ⚠️ | ✅(MFormats는 AJA, Bluefish, Deltacast 출력 지원) |
| HTML5 CG (캐릭터 제너레이터) 오버레이 | ❌ | ✅ |
| 가상 카메라 출력 | ✅ | ❌ |
| 젠록 / 레퍼런스 동기화 | ❌ | ✅ |
플랫폼 지원
운영 체제 호환성
| 플랫폼 | Video Capture SDK | MFormats SDK |
|---|---|---|
| Windows x64 | ✅ | ✅ |
| Windows ARM64 | ✅ | ❌ |
| macOS (Apple Silicon + Intel) | ✅ | ❌ |
| Linux x64 (Ubuntu, Debian, Fedora) | ✅ | ❌ |
| Linux ARM64 (Raspberry Pi) | ✅ | ❌ |
| Android (.NET MAUI를 통해) | ✅ | ❌ |
| iOS (.NET MAUI를 통해) | ✅ | ❌ |
UI 프레임워크 호환성
| 프레임워크 | Video Capture SDK | MFormats SDK |
|---|---|---|
| WinForms | ✅ | ✅ |
| WPF | ✅ | ✅ |
| .NET MAUI | ✅ | ❌ |
| Avalonia UI | ✅ | ❌ |
| Uno Platform | ✅ | ❌ |
| Console / Service | ✅ | ✅ |
| Blazor (Server-Side) | ✅ | ❌ |
가격 비교
Video Capture SDK .NET 가격
개발자 1명, 상업적 사용, 연간 업데이트 및 지원
최대 3명 개발자, 영구 라이선스, 1년 업데이트 포함
최대 8명 개발자, 영구 라이선스, 1년 업데이트 포함
All licenses include:
- ✓ 로열티 프리 배포
- ✓ 모든 소스 코드 예제
- ✓ 우선 티켓 지원
- ✓ 모든 플랫폼 대상 포함
- ✓ 영구 라이선스 옵션: 구독 만료 후에도 계속 사용 가능 (워터마크 없음)
MFormats SDK 가격
연간 구독, 단일 개발자, Windows만
개발자 5석, 3년 구독 약정
구성에 따라 배포별 런타임 요금이 필요할 수 있음
구독 만료 경고
MFormats SDK는 필수 연간 구독 모델을 사용합니다. 구독이 만료되거나 갱신되지 않으면:
- ⚠모든 비디오 출력에 워터마크가 자동으로 추가됩니다
- ⚠활성 구독 없이는 프로덕션에서 SDK를 계속 사용할 수 없습니다
- ⚠영구 라이선스 대체 옵션이 없습니다
- ⚠라이선스 서버가 검증할 수 없으면 배포된 애플리케이션에 워터마크가 표시됩니다
Video Capture SDK는 구매 후 무기한으로 계속 작동하는 영구 라이선스를 제공하며, 갱신 만료에 대한 워터마크 페널티가 없습니다.
코드 예제
예제 1: 웹캠 캡처를 MP4로
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types.Output;
// Create the capture engine
var capture = new VideoCaptureCore();
// Set video source (first available webcam)
var devices = await capture.Video_CaptureDevice_ListAsync();
capture.Video_CaptureDevice = devices[0];
// Set audio source
var audioDevices = await capture.Audio_CaptureDevice_ListAsync();
capture.Audio_CaptureDevice = audioDevices[0];
// Configure MP4 output with H.264
capture.Output_Format = new MP4Output
{
Video = new H264EncoderSettings
{
Bitrate = 4000,
Profile = H264Profile.Main
},
Audio = new AACEncoderSettings
{
Bitrate = 192
}
};
capture.Output_Filename = "recording.mp4";
// Enable preview
capture.Video_Preview_Enabled = true;
// Start recording with preview
await capture.StartAsync();MFormats SDK
C#// MFormats: Frame-based capture loop
MFDeviceClass devClass = new MFDeviceClass();
MFReaderClass reader = new MFReaderClass();
MFWriterClass writer = new MFWriterClass();
MFRendererClass renderer = new MFRendererClass();
// Configure video device
reader.DeviceSet(eMFDeviceType.eMFDT_Video, 0, "");
reader.DeviceSet(eMFDeviceType.eMFDT_Audio, 0, "");
// Configure writer output
writer.WriterSet("recording.mp4", 0, "");
// You must run the capture loop yourself
while (capturing)
{
MFFrame frame;
reader.SourceFrameGet(-1, out frame, "");
if (frame != null)
{
// Preview
renderer.RenderSet("preview", frame, "");
// Write to file
writer.WriterPut(frame, "");
// Release frame manually
Marshal.ReleaseComObject(frame);
}
Thread.Sleep(1); // Manual timing
}예제 2: IP 카메라 + 오버레이 + 스트리밍
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types.Output;
var capture = new VideoCaptureCore();
// IP camera source
capture.IP_Camera_Source = new IPCameraSourceSettings
{
URL = "rtsp://192.168.1.100:554/stream",
Type = IPCameraType.RTSP
};
// Add text overlay
capture.Video_Overlays.Add(new VideoOverlayText
{
Text = "{timestamp} - Camera 1",
Position = new System.Drawing.Point(10, 10),
Font = new System.Drawing.Font("Arial", 14),
Color = System.Drawing.Color.White
});
// Stream to RTMP
capture.Network_Streaming_Enabled = true;
capture.Network_Streaming_Format = new RTMPOutput
{
URL = "rtmp://streaming-server/live",
StreamKey = "stream_key",
Video = new H264EncoderSettings { Bitrate = 4500 },
Audio = new AACEncoderSettings { Bitrate = 128 }
};
// Also record locally
capture.Output_Filename = "backup.mp4";
capture.Output_Format = new MP4Output();
await capture.StartAsync();MFormats SDK
C#// MFormats: Manual frame loop with overlay + streaming
MFReaderClass reader = new MFReaderClass();
MFWriterClass localWriter = new MFWriterClass();
MFWriterClass rtmpWriter = new MFWriterClass();
MFRendererClass renderer = new MFRendererClass();
// Configure RTSP source
reader.ReaderOpen("rtsp://192.168.1.100:554/stream", "");
// Configure outputs
localWriter.WriterSet("backup.mp4", 0, "");
rtmpWriter.WriterSet("rtmp://streaming-server/live/stream_key", 0, "");
while (capturing)
{
MFFrame frame;
reader.SourceFrameGet(-1, out frame, "");
if (frame != null)
{
// Add overlay manually via MFTransform
MFOverlayClass overlay = new MFOverlayClass();
overlay.OverlayTextSet(frame,
DateTime.Now.ToString() + " - Camera 1",
10, 10, 14, "Arial", 0xFFFFFF, 0, "");
// Clone frame for second output
MFFrame clone;
frame.MFClone(out clone, eMFrameClone.eMFC_Full, eMFCC.eMFCC_Default);
// Write to local file
localWriter.WriterPut(frame, "");
// Write to RTMP stream
rtmpWriter.WriterPut(clone, "");
Marshal.ReleaseComObject(clone);
Marshal.ReleaseComObject(frame);
}
}각 솔루션을 선택할 시기
다음이 필요할 때 Video Capture SDK 선택
- ✓크로스플랫폼 캡처 애플리케이션 (Windows, macOS, Linux, 모바일)
- ✓자동 스레딩 및 버퍼 관리를 갖춘 파이프라인 기반 아키텍처
- ✓40+ 내장 GPU 가속 비디오 및 오디오 효과
- ✓캡처 중 모션 감지, 얼굴 감지, 바코드 스캐닝
- ✓OBS, Zoom, Teams 연동을 위한 가상 카메라 출력
- ✓영구 라이선스 옵션이 있는 경제적인 라이선스
- ✓개별 시작/중지 제어가 있는 여러 독립 출력
- ✓산업용 카메라 지원 (GenICam, GigE Vision)
- ✓TV 튜너 및 DVB 캡처 지원
다음이 필요할 때 MFormats SDK 선택
- ✓멀티벤더 SDI 지원: Blackmagic과 함께 AJA, Bluefish444, Deltacast
- ✓재생목록 스케줄링 및 자동화를 갖춘 방송 플레이아웃
- ✓라이브 방송용 HTML5 기반 CG (캐릭터 제너레이터) 오버레이
- ✓방송 스튜디오 환경용 젠록 및 레퍼런스 동기화
- ✓모든 처리 단계에 대한 프레임별 수동 제어
- ✓완전한 방송 메타데이터 지원을 갖춘 MXF 컨테이너 형식
- ✓기존 방송 인프라 및 SDI 라우터와의 통합
결정 매트릭스
| 요구사항 | Video Capture SDK | MFormats SDK | 승자 |
|---|---|---|---|
| 크로스플랫폼 지원 | Video Capture SDK | ||
| 독립 제어가 있는 다중 출력 | Video Capture SDK | ||
| 오디오 효과 (40+ 내장) | Video Capture SDK | ||
| GPU 비디오 효과 | Video Capture SDK | ||
| 모션 / 얼굴 / 바코드 감지 | Video Capture SDK | ||
| 가상 카메라 출력 | Video Capture SDK | ||
| 2,000 EUR 미만 예산 | Video Capture SDK | ||
| 영구 라이선스 옵션 | Video Capture SDK | ||
| 산업용 카메라 (GenICam) | Video Capture SDK | ||
| TV 튜너 / DVB 캡처 | Video Capture SDK | ||
| 멀티벤더 SDI (AJA, Bluefish444) | MFormats SDK | ||
| 방송용 HTML5 CG 오버레이 | MFormats SDK |
결론
Video Capture SDK .NET
Video Capture SDK는 풍부한 비디오 처리, 감지 기능, 여러 독립 출력 및 광범위한 장치 지원이 필요한 .NET 개발자를 위한 크로스플랫폼 파이프라인 기반 캡처 엔진으로 뛰어납니다. 선언적 API, 40+ GPU 효과 및 영구 라이선스는 데스크톱에서 모바일까지 대부분의 캡처 애플리케이션에 비용 효율적인 선택입니다.
MFormats SDK
MFormats SDK는 멀티벤더 SDI 하드웨어 지원 (AJA, Bluefish444, Deltacast), HTML5 CG 오버레이 및 재생목록 기반 플레이아웃 자동화가 필요한 방송 중심 워크플로에 강력한 선택입니다. 프레임 기반 아키텍처는 전문 방송 환경에 적합한 프레임별 세밀한 제어를 제공합니다. 그러나 Windows만 지원하고, 상당히 더 비싸며, 구독이 만료되면 워터마크가 추가됩니다.
The Reality
대부분의 .NET 비디오 캡처 프로젝트 — 특히 크로스플랫폼 지원, 감지 기능 또는 예산 친화적인 라이선스가 필요한 프로젝트 — 에 대해 Video Capture SDK가 확실한 선택입니다. MFormats는 AJA/Bluefish 하드웨어 통합과 CG 오버레이 워크플로가 필수적인 멀티벤더 SDI 방송 스튜디오에서 특별히 자리를 잡고 있습니다.
