Last updated: 2026๋ 1์
Video Capture SDK .NET vs FFmpeg Wrappers
ํฌ๊ด์ ์ธ .NET ๋น๋์ค ์บก์ฒ ๋น๊ต
.NET ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ๋น๋์ค ์บก์ฒ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๋ ๊ฒ์ ์ค์ํ ์ํคํ ์ฒ ๊ฒฐ์ ์ ๋๋ค. ์ด ๊ฐ์ด๋๋ VisioForge Video Capture SDK .NET(์ ์ฉ ์บก์ฒ ์์ง)๊ณผ FFmpeg.AutoGen, Xabe.FFmpeg, FFMpegCore ๊ฐ์ FFmpeg ๊ธฐ๋ฐ ๋ํผ ๊ฐ์ ์์ธํ๊ณ ๊ณต์ ํ ๋น๊ต๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ํคํ ์ฒ, ๊ธฐ๋ฅ, ์ฑ๋ฅ, ๋ผ์ด์ ์ค ๋ฐ ์ค์ ์ฝ๋๋ฅผ ๊ฒํ ํ์ฌ ์ ๋ณด์ ๊ธฐ๋ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ํฉ๋๋ค.
์์ฝ
| ์ธก๋ฉด | Video Capture SDK .NET | FFmpeg Wrappers |
|---|---|---|
| ์ํคํ ์ฒ | VideoCaptureCore(Windows): DirectShow/Media Foundation. VideoCaptureCoreX(ํฌ๋ก์ค ํ๋ซํผ): GStreamer | ffmpeg.exe / libavcodec์ ๋ํ CLI ํ๋ก์ธ์ค ๋ํผ |
| ์บก์ฒ ์์ค | ์น์บ , ํ๋ฉด, IP ์นด๋ฉ๋ผ, ์บก์ฒ ์นด๋, TV ํ๋, ๊ฐ์ ์์ค | FFmpeg ๋น๋ ํ๋๊ทธ์ ๋ฐ๋ผ ๋ค๋ฆ; ์ผ๋ฐ์ ์ผ๋ก ์น์บ , ํ๋ฉด, RTSP |
| ๋ผ์ด๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | ์ค๋ฒ๋ ์ด๊ฐ ํฌํจ๋ ๋ด์ฅ GPU ๊ฐ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | ๋ค์ดํฐ๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์์; ๋ณ๋ ๋ ๋๋ฌ๋ก ํ๋ ์ ํ์ดํ ํ์ |
| ๋ นํ ํ์ | MP4, MKV, WebM, AVI, WMV, MOV, TS, GIF + 30๊ฐ์ง ์ด์ | FFmpeg์ด ์ง์ํ๋ ๋ชจ๋ ํ์(๊ด๋ฒ์) |
| ๋ฉํฐ ์ถ๋ ฅ | ํ๋์ ํ์ดํ๋ผ์ธ์์ ๋์ ๋ นํ + ์คํธ๋ฆฌ๋ฐ + ์ค๋ ์ท | tee ๋จน์ ๋๋ ๋ค์ค ํ๋ก์ธ์ค๋ฅผ ํตํ ๋ค์ค ์ถ๋ ฅ |
| ํ๋์จ์ด ๊ฐ์ | NVENC, QSV, AMF, DXVA2, D3D11VA, VideoToolbox | NVENC, QSV, AMF, VAAPI, VDPAU(์ง์์ด ํฌํจ๋์ด ์ปดํ์ผ๋ ๊ฒฝ์ฐ) |
| .NET ํตํฉ | ๋ค์ดํฐ๋ธ .NET API, ์ด๋ฒคํธ, async/await, WinForms/WPF/MAUI ์ปจํธ๋กค | Process.Start() ๋๋ P/Invoke; ์ ํ๋ .NET ๊ด์ฉ๊ตฌ |
| ๋ผ์ด์ ์ค | ๊ฐ๋ฐ์๋น ์์ฉ ๋ผ์ด์ ์ค(์๊ตฌ ๋๋ ๊ตฌ๋ ) | LGPL/GPL โ ๋งํฌ ์ ์ฝ; ๋ํผ MIT/Apache |
| ๊ฐ๊ฒฉ | EUR 489(Home)๋ถํฐ EUR 6,999(Team)๊น์ง | ๋ฌด๋ฃ(ํ์ง๋ง GPL ์ค์ ๋น์ฉ์ ์๋นํจ) |
| ์ง์ | ์ ์ฉ ํฐ์ผ ์์คํ , ์ฐ์ SLA, ์ปค์คํ ๋น๋ | ์ปค๋ฎค๋ํฐ ํฌ๋ผ, Stack Overflow, ๋ฉ์ผ๋ง ๋ฆฌ์คํธ |
์ํคํ ์ฒ ์์ธ ๋ถ์
Video Capture SDK .NET ์ํคํ ์ฒ
Video Capture SDK๋ ๋ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์์ง์ ์ ๊ณตํฉ๋๋ค. VideoCaptureCore๋ Windows์์ DirectShow์ Media Foundation์ ๋ํํ์ฌ OS๊ฐ ๋ ธ์ถํ๋ ๋ชจ๋ ์บก์ฒ ์ฅ์น์ ๋ํ ๋ค์ดํฐ๋ธ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. VideoCaptureCoreX๋ GStreamer ๊ธฐ๋ฐ์ ํฌ๋ก์ค ํ๋ซํผ ์์ง(Windows, macOS, Linux, iOS, Android)์ผ๋ก, IP ์นด๋ฉ๋ผ ์์ง๊ณผ ๋ฉํฐ ํ๋ซํผ ๋ นํ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋ ์์ง์ ํตํฉ๋ .NET API ํ๋ฉด์ ๊ณต์ ํฉ๋๋ค.
- โถDirectShow ๋ฐ Media Foundation ํํฐ ๊ทธ๋ํ๋ฅผ ํตํ ๋ค์ดํฐ๋ธ Windows ์บก์ฒ
- โถVideoCaptureCoreX: GStreamer ๊ธฐ๋ฐ ํฌ๋ก์ค ํ๋ซํผ ์์ง(Windows, macOS, Linux, iOS, Android)
- โถDirect3D / OpenGL ๋ ๋๋ฌ๋ฅผ ํตํ GPU ๊ฐ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
- โถ.NET async/await ์ง์์ด ํฌํจ๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
- โถ๋จ์ผ ํ๋ก์ธ์ค ๋ชจ๋ธ โ ์์ ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ถํ์
FFmpeg Wrapper ์ํคํ ์ฒ
FFmpeg ๋ํผ(.NET ๋ผ์ด๋ธ๋ฌ๋ฆฌ FFmpeg.AutoGen, Xabe.FFmpeg, FFMpegCore ๋๋ MediaToolkit)๋ FFmpeg CLI ๋๋ libav* ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ด๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. CLI ์ ๊ทผ ๋ฐฉ์์ ffmpeg.exe๋ฅผ ์์ ํ๋ก์ธ์ค๋ก ์์ฑํ๊ณ ๋ช ๋ น์ค ์ธ์์ ํ์ค I/O ํ์ดํ๋ฅผ ํตํด ํต์ ํฉ๋๋ค. P/Invoke ์ ๊ทผ ๋ฐฉ์์ libav* ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์ ์ฐ๊ฒฐํ์ฌ ๋ ๋ฎ์ ์์ค์ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- โถCLI ๋ํผ๋ ffmpeg.exe๋ฅผ ์์ฑํ๊ณ stdout/stderr ์ถ๋ ฅ์ ํ์ฑ
- โถP/Invoke ๋ํผ(FFmpeg.AutoGen)๋ libav* C ํจ์๋ฅผ ์ง์ ํธ์ถ
- โถ๋ด์ฅ UI ํตํฉ ์์ โ ํ๋ ์์ ์๋์ผ๋ก ๋ ๋๋งํด์ผ ํจ
- โถ๋ฉํฐ ํ๋ก์ธ์ค ์ํคํ ์ฒ๊ฐ ์ํ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ฆ๊ฐ
- โถ๋ชจ๋ ํ๋๊ทธ๋ก ์ปดํ์ผ ์ ์ ์ฒด FFmpeg ์ฝ๋ฑ/ํ์ ์ง์
์ฃผ์ ์ํคํ ์ฒ ์ฐจ์ด์
| ์ธก๋ฉด | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| ํ๋ก์ธ์ค ๋ชจ๋ธ | ๋จ์ผ ํ๋ก์ธ์ค, ์ธํ๋ก์ธ์ค ์์ง | ์์ ํ๋ก์ธ์ค(CLI) ๋๋ ์ธํ๋ก์ธ์ค(P/Invoke) |
| ์ฅ์น ๊ฒ์ | ๋ค์ดํฐ๋ธ OS ์ด๊ฑฐ API | ffmpeg -list_devices ๋๋ ์๋ ์ฟผ๋ฆฌ |
| ํ๋ ์ ํ์ดํ๋ผ์ธ | ๊ด๋ฆฌ ์ฝ๋ฐฑ์ด ํฌํจ๋ ๋ด๋ถ ํํฐ ๊ทธ๋ํ | stdout ๋๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ์์ ํ๋ ์ ํ์ดํ |
| ์ค๋ฅ ์ฒ๋ฆฌ | .NET ์์ธ ๋ฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ค๋ฅ | stderr ํ์ฑ ๋๋ C ๋ฐํ ์ฝ๋ |
| ์ํ ๊ด๋ฆฌ | ์ด๋ฒคํธ ํฌํจ ๊ด๋ฆฌ ์ํ ๋จธ์ | ํ๋ก์ธ์ค ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ |
| ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ | ๊ด๋ฆฌ + ๊ณ ์ ๋ ๋ค์ดํฐ๋ธ ๋ฒํผ | libav* ๋๋ ํ์ดํ ๋ฒํผ๋ฅผ ํตํ ๋น๊ด๋ฆฌ ํ ๋น |
๊ธฐ๋ฅ๋ณ ๋น๊ต
์บก์ฒ ์์ค
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| USB ์น์บ | โ | โ |
| ๋ ธํธ๋ถ ๋ด์ฅ ์นด๋ฉ๋ผ | โ | โ |
| ํ๋ฉด/๋ฐ์คํฌํฑ ์บก์ฒ | โ | โ |
| ์ ํ๋ฆฌ์ผ์ด์ ์ฐฝ ์บก์ฒ | โ | โ ๏ธ(์ ํ์ ; ํ๋ซํผ๋ณ ํ๋๊ทธ ํ์) |
| IP ์นด๋ฉ๋ผ (RTSP/ONVIF) | โ | โ |
| ์บก์ฒ ์นด๋ (Blackmagic, Magewell) | โ | โ ๏ธ(๋๋ผ์ด๋ฒ๊ฐ ๋ ธ์ถํ๋ ๊ฒฝ์ฐ DirectShow/V4L2 ๊ฒฝ์ ) |
| TV ํ๋ (BDA/DVB) | โ | โ |
| ๊ฐ์ ์นด๋ฉ๋ผ (OBS, NDI) | โ | โ ๏ธ(Windows์์ DirectShow ๊ฒฝ์ ) |
| NDI ์์ค | โ | โ ๏ธ(NDI๊ฐ ํฌํจ๋ ์ปค์คํ FFmpeg ๋น๋ ํ์) |
| DECKLINK ์ ๋ ฅ | โ | โ (FFmpeg์ decklink ์ ๋ ฅ์ ์ง์) |
๋ผ์ด๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| ๋ด์ฅ ๋น๋์ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ | โ | โ |
| GPU ๊ฐ์ ๋ ๋๋ง | โ | โ |
| ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ํ ์คํธ/์ด๋ฏธ์ง ์ค๋ฒ๋ ์ด | โ | โ(์ธ๋ถ์์ ๋ ๋๋งํด์ผ ํจ) |
| ๋ นํ ์์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ | โ | โ |
| ๋ค์ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ฐฝ | โ | โ |
| WinForms / WPF / MAUI ์ปจํธ๋กค | โ | โ(๋ค์ดํฐ๋ธ UI ์ปจํธ๋กค ์์) |
๋ นํ
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| MP4 (H.264 / H.265) | โ | โ |
| MKV ์ปจํ ์ด๋ | โ | โ |
| WebM (VP8 / VP9 / AV1) | โ | โ |
| AVI | โ | โ |
| WMV / ASF | โ | โ |
| MOV (ProRes) | โ | โ |
| MPEG-TS | โ | โ |
| ์ ๋๋ฉ์ด์ GIF | โ | โ |
| ์ค๋์ค ์ ์ฉ (MP3, AAC, WAV, FLAC, OGG) | โ | โ |
| ๋ถํ ๋ นํ (์๊ฐ/ํฌ๊ธฐ๋ณ ๋ถํ ) | โ | โ |
| ์ฌ์ ์ด๋ฒคํธ ๋ นํ (์ํ ๋ฒํผ) | โ | โ(๋ด์ฅ ์ํ ๋ฒํผ API ์์; ์ฌ์ฉ์ ์ ์ ๊ตฌํ ํ์) |
๋ฉํฐ ์ถ๋ ฅ ๋ฐ ์คํธ๋ฆฌ๋ฐ
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| ๋์ ๋ นํ + ์คํธ๋ฆฌ๋ฐ | โ | โ ๏ธ(tee ๋จน์ ๋๋ ๋ค์ค ํ๋ก์ธ์ค ๊ฒฝ์ ) |
| ๋ค์ค ๋ นํ ์ถ๋ ฅ | โ | โ ๏ธ(tee ๋จน์์๋ ์ ํ์ด ์์) |
| RTMP ์คํธ๋ฆฌ๋ฐ | โ | โ |
| RTSP ์๋ฒ | โ | โ(FFmpeg์ ํด๋ผ์ด์ธํธ์ด๋ฉฐ ์๋ฒ๊ฐ ์๋) |
| SRT ์คํธ๋ฆฌ๋ฐ | โ | โ (SRT ์ง์ ๋น๋ ํ์) |
| HLS / DASH ์ถ๋ ฅ | โ | โ |
| NDI ์ถ๋ ฅ | โ | โ ๏ธ(์ปค์คํ ๋น๋ ํ์) |
| ๋ นํ ์ค ์ค๋ ์ท | โ | โ ๏ธ(๋ณ๋ ํ๋ ์ ์ถ์ถ ์ฌ์ฉ ํ์) |
์คํธ๋ฆฌ๋ฐ ํ๋กํ ์ฝ
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| RTMP Push | โ | โ |
| RTSP ์๋ฒ ๋ชจ๋ | โ | โ |
| SRT (Caller / Listener) | โ | โ |
| HLS ์ธ๊ทธ๋จผํธ ์์ฑ | โ | โ |
| MPEG-DASH | โ | โ |
| UDP / TCP Unicast / Multicast | โ | โ |
๋น๋์ค ์ฒ๋ฆฌ
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| ์ค์๊ฐ ํฌ๊ธฐ ์กฐ์ / ์๋ฅด๊ธฐ | โ | โ |
| ๋์ธํฐ๋ ์ด์ฑ | โ | โ |
| ์์ ์กฐ์ (๋ฐ๊ธฐ, ๋๋น, ์ฑ๋) | โ | โ (FFmpeg ํํฐ ๊ฒฝ์ ) |
| ํ ์คํธ ์ค๋ฒ๋ ์ด (ํ์์คํฌํ, ์ํฐ๋งํฌ) | โ | โ (drawtext ํํฐ) |
| ์ด๋ฏธ์ง ์ค๋ฒ๋ ์ด / ๋ก๊ณ | โ | โ (overlay ํํฐ) |
| ํ๋ฉด ์ ํ๋ฉด | โ | โ (overlay ํํฐ) |
| ํฌ๋ก๋ง ํค (๊ทธ๋ฆฐ ์คํฌ๋ฆฐ) | โ | โ ๏ธ(chromakey ํํฐ โ ๊ธฐ๋ณธ) |
| GPU ๊ฐ์ ํํฐ | โ | โ ๏ธ(ํน์ hwaccel ํํฐ๋ก ์ ํ) |
์ค๋์ค
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| ์ค๋์ค ์ฅ์น ์บก์ฒ | โ | โ |
| ์์คํ ์ค๋์ค (๋ฃจํ๋ฐฑ) ์บก์ฒ | โ | โ ๏ธ(WASAPI ๋ฃจํ๋ฐฑ ์ค์ ํ์) |
| ์ค๋์ค ๋ฏน์ฑ (๋ค์ค ์ ๋ ฅ) | โ | โ (amix ํํฐ) |
| ์ค์๊ฐ ๋ณผ๋ฅจ/๊ฒ์ธ ์ ์ด | โ | โ (volume ํํฐ) |
| ์ค๋์ค ํจ๊ณผ (์์ฝ, ๋ฆฌ๋ฒ๋ธ) | โ | โ (๋ค์ํ ์ค๋์ค ํํฐ) |
| VU ๋ฏธํฐ / ๋ ๋ฒจ ๋ชจ๋ํฐ๋ง | โ | โ(loudnorm ์ถ๋ ฅ์ ํ์ฑํด์ผ ํจ) |
๊ฐ์ง ๋ฐ ๋ถ์
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| ๋ชจ์ ๊ฐ์ง | โ | โ |
| ์ผ๊ตด ๊ฐ์ง | โ | โ |
| ๋ฐ์ฝ๋ / QR ์ฝ๋ ์ฝ๊ธฐ | โ | โ |
| ๊ฐ์ฒด ์ถ์ | โ | โ |
| ์ค๋์ค ๋ ๋ฒจ ๊ฐ์ง | โ | โ ๏ธ(volumedetect / ebur128 ํํฐ ๊ฒฝ์ ) |
๊ณ ๊ธ ๊ธฐ๋ฅ
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| NVIDIA NVENC ์ธ์ฝ๋ฉ | โ | โ |
| Intel QSV ์ธ์ฝ๋ฉ | โ | โ |
| AMD AMF ์ธ์ฝ๋ฉ | โ | โ |
| ํ๋์จ์ด ๊ฐ์ ๋์ฝ๋ฉ | โ | โ |
| ์ปค์คํ ํํฐ ํ๋ฌ๊ทธ์ธ API | โ | โ(C๋ก ์ปค์คํ FFmpeg ํํฐ๋ฅผ ๋น๋ํด์ผ ํจ) |
ํ๋ ์ ์ก์ธ์ค ๋ฐ ํตํฉ
| ๊ธฐ๋ฅ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| ์์ ํ๋ ์ ์ฝ๋ฐฑ (RGB / YUV) | โ | โ ๏ธ(ํ์ดํ ๋๋ P/Invoke ๊ฒฝ์ ) |
| Bitmap / SKBitmap / WriteableBitmap | โ | โ(์๋ ๋ณํ ํ์) |
| ML.NET / ONNX ํตํฉ | โ | โ ๏ธ(ํ๋ ์ ์ถ์ถ ํ์ดํ๋ผ์ธ ํ์) |
| OpenCV ์ํธ ์ด์ฉ | โ | โ ๏ธ(ํ๋ ์์ OpenCV๋ก ํ์ดํ) |
| ์ง์ GPU ํ ์ค์ฒ ์ก์ธ์ค | โ | โ |
ํ๋ซํผ ์ง์
์ด์ ์ฒด์ ํธํ์ฑ
| ํ๋ซํผ | Video Capture SDK | FFmpeg Wrappers |
|---|---|---|
| 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 | FFmpeg Wrappers |
|---|---|---|
| WinForms | โ | โ(๋ด์ฅ ์ปจํธ๋กค ์์) |
| WPF | โ | โ(๋ด์ฅ ์ปจํธ๋กค ์์) |
| .NET MAUI | โ | โ(๋ด์ฅ ์ปจํธ๋กค ์์) |
| Avalonia UI | โ | โ(๋ด์ฅ ์ปจํธ๋กค ์์) |
| Console / Service | โ | โ |
| ASP.NET Core (Background Service) | โ | โ |
| Blazor (์๋ฒ ์ธก ์ฒ๋ฆฌ) | โ | โ |
๊ฐ๊ฒฉ ๋น๊ต
Video Capture SDK .NET ๊ฐ๊ฒฉ
๊ฐ๋ฐ์ 1๋ช , ๋น์์ ์ ์ฌ์ฉ
๊ฐ๋ฐ์ 1๋ช , ์์ ์ ์ฌ์ฉ, 1๋ ์ ๋ฐ์ดํธ
์ต๋ 3๋ช ๊ฐ๋ฐ์, ์์ ์ ์ฌ์ฉ, 1๋ ์ ๋ฐ์ดํธ
์ต๋ 8๋ช ๊ฐ๋ฐ์, ์์ ์ ์ฌ์ฉ, 1๋ ์ ๋ฐ์ดํธ
All licenses include:
- โ ๋ก์ดํฐ ํ๋ฆฌ ๋ฐฐํฌ
- โ ๋ชจ๋ ์์ค ์ฝ๋ ์์
- โ ์ฐ์ ํฐ์ผ ์ง์
- โ ๋ชจ๋ ํ๋ซํผ ํ๊ฒ ํฌํจ
FFmpeg Wrapper ๋น์ฉ
MIT ๋ผ์ด์ ์ค โ ์ ์์ค P/Invoke ๋ฐ์ธ๋ฉ
๋น์์ ์ ๋ฌด๋ฃ; ์์ ์ฉ ๋ผ์ด์ ์ค ํ์
MIT ๋ผ์ด์ ์ค โ CLI ๋ํผ
MIT ๋ผ์ด์ ์ค โ CLI ๋ํผ
GPL ์ค์ ๊ณ ๋ ค์ฌํญ
FFmpeg ์์ฒด๋ ๋น๋ ๊ตฌ์ฑ์ ๋ฐ๋ผ LGPL 2.1 ๋๋ GPL 2/3์ผ๋ก ๋ผ์ด์ ์ค๋ฉ๋๋ค. FFmpeg ๋น๋์ GPL ๊ตฌ์ฑ ์์(libx264, libx265, libfdk-aac)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด GPL ์๋ฌด ์ฌํญ์ ์ ์ฉ์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด๋ ๋ค์ ์ค ํ๋๋ฅผ ์ํํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค:
- โ GPL ํธํ ๋ผ์ด์ ์ค๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์์คํ
- โ LGPL ๋ผ์ด์ ์ค FFmpeg ๊ตฌ์ฑ ์์๋ง ์ฌ์ฉํ๊ณ ๋์ ์ผ๋ก ๋งํฌ
- โ FFmpeg ์ ์๊ถ์๋ก๋ถํฐ ์์ ์ฉ FFmpeg ๋ผ์ด์ ์ค ์ทจ๋(FFmpeg์๋ ์๋ฐฑ ๋ช ์ ๊ธฐ์ฌ์๊ฐ ์์ด ๋ณต์ก)
- โ LGPL ํธํ ์ฝ๋ฑ์ผ๋ก๋ง FFmpeg ๋น๋(๊ธฐ๋ฅ ์ ํ)
๋ง์ ๊ธฐ์ ์ด GPL ์ค์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ์๋นํ ๋ฒ์ ์์์ ํฌ์ํฉ๋๋ค. ๋ฒ์ ๊ฒํ ๋น์ฉ์ ์ข ์ข ์์ ์ฉ SDK ๋ผ์ด์ ์ค ๊ฐ๊ฒฉ์ ์ด๊ณผํฉ๋๋ค.
์ฝ๋ ์์
์์ 1: ์น์บ ์์ MP4๋ก ๋ นํ
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types;
using VisioForge.Core.Types.Output;
using VisioForge.Core.Types.VideoCapture;
// Create the capture engine (pass a VideoView for built-in preview)
var capture = new VideoCaptureCore(VideoView1 as IVideoView);
// Set video source (first available webcam)
var devices = capture.Video_CaptureDevices();
capture.Video_CaptureDevice = new VideoCaptureSource(devices[0].Name);
// Set audio source (first available audio device)
var audioDevices = capture.Audio_CaptureDevices();
capture.Audio_CaptureDevice = new AudioCaptureSource(audioDevices[0].Name);
capture.Audio_RecordAudio = true;
// Configure MP4 output with H.264 + AAC
var mp4 = new MP4Output();
mp4.Video.Bitrate = 4000;
mp4.Video.Profile = H264Profile.ProfileMain;
mp4.Audio_AAC.Bitrate = 192;
capture.Output_Format = mp4;
capture.Output_Filename = "recording.mp4";
// Capture mode (preview is provided by the VideoView passed above)
capture.Mode = VideoCaptureMode.VideoCapture;
// Start recording with preview
await capture.StartAsync();FFMpegCore (CLI Wrapper)
C#using FFMpegCore;
using FFMpegCore.Enums;
using System.Diagnostics;
// Note: No built-in device enumeration
// You must know your device name beforehand
var deviceName = "Integrated Camera";
var audioDevice = "Microphone (Realtek Audio)";
// Build the FFmpeg command
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments = $"-f dshow -i video=\"{deviceName}\":audio=\"{audioDevice}\" " +
"-c:v libx264 -preset fast -b:v 4000k " +
"-c:a aac -b:a 192k " +
"-y recording.mp4",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
// No preview โ video goes directly to file
// To stop: send 'q' to stdin or kill process
// Error handling: parse stderr output์์ 2: ์ค๋ฒ๋ ์ด๊ฐ ํฌํจ๋ ํ๋ฉด ์บก์ฒ
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types;
using VisioForge.Core.Types.Output;
using VisioForge.Core.Types.VideoCapture;
using VisioForge.Core.Types.VideoEffects;
var capture = new VideoCaptureCore(VideoView1 as IVideoView);
// Screen capture source
capture.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
FullScreen = true,
FrameRate = new VideoFrameRate(30),
GrabMouseCursor = true
};
// Enable the video effects pipeline
capture.Video_Effects_Enabled = true;
capture.Video_Effects_Clear();
// Add timestamp overlay
capture.Video_Effects_Add(new VideoEffectTextLogo(true)
{
Text = "{TIME}",
Left = 10,
Top = 10,
Font = new System.Drawing.Font("Arial", 14),
FontColor = System.Drawing.Color.White
});
// Add watermark image
capture.Video_Effects_Add(new VideoEffectImageLogo(true)
{
Filename = "logo.png",
Left = 10,
Top = 50,
TransparencyLevel = 77
});
// Configure output
var mp4 = new MP4Output();
mp4.Video.Bitrate = 8000;
capture.Output_Format = mp4;
capture.Output_Filename = "screen_recording.mp4";
capture.Mode = VideoCaptureMode.ScreenCapture;
await capture.StartAsync();FFmpeg CLI
C#using System.Diagnostics;
// Screen capture with overlay using FFmpeg
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments =
// Windows screen capture via GDI
"-f gdigrab -framerate 30 -i desktop " +
// Complex filter for overlays
"-vf \"" +
"drawtext=text='%{localtime}':" +
"x=10:y=10:fontsize=14:fontcolor=white," +
"movie=logo.png[wm];[in][wm]overlay=10:50:" +
"format=auto,colorchannelmixer=aa=0.7\" " +
// Encoding settings
"-c:v libx264 -b:v 8000k -y screen_recording.mp4",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
// Monitor stderr for progress / errors
string output = await process.StandardError.ReadToEndAsync();
await process.WaitForExitAsync();์์ 3: RTSP ์นด๋ฉ๋ผ์์ RTMP ์คํธ๋ฆผ์ผ๋ก
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types.Output;
using VisioForge.Core.Types.VideoCapture;
using VisioForge.Core.Types.FFMPEGEXE;
var capture = new VideoCaptureCore(VideoView1 as IVideoView);
// IP camera source (RTSP)
capture.IP_Camera_Source = new IPCameraSourceSettings
{
URL = new Uri("rtsp://192.168.1.100:554/stream"),
Login = "admin",
Password = "password",
Type = IPSourceEngine.RTSP_LowLatency
};
capture.Mode = VideoCaptureMode.IPCapture;
// Stream to YouTube/Twitch via RTMP (FFMPEG EXE muxer to FLV)
capture.Network_Streaming_Enabled = true;
capture.Network_Streaming_Audio_Enabled = true;
capture.Network_Streaming_Format = NetworkStreamingFormat.RTMP_FFMPEG_EXE;
var rtmpOutput = new FFMPEGEXEOutput();
rtmpOutput.FillDefaults(DefaultsProfile.MP4_H264_AAC, true);
rtmpOutput.OutputMuxer = OutputMuxer.FLV;
capture.Network_Streaming_Output = rtmpOutput;
capture.Network_Streaming_URL = "rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY";
// Also record locally to MP4
var mp4 = new MP4Output();
mp4.Video.Bitrate = 4500;
mp4.Video.IDR_Period = 60;
mp4.Audio_AAC.Bitrate = 128;
capture.Output_Format = mp4;
capture.Output_Filename = "backup.mp4";
await capture.StartAsync();FFmpeg CLI
C#using System.Diagnostics;
// RTSP to RTMP relay + local recording
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments =
// Input: RTSP camera
"-rtsp_transport tcp " +
"-i rtsp://admin:password@192.168.1.100:554/stream " +
// Tee muxer for multiple outputs
"-c:v libx264 -b:v 4500k -g 60 " +
"-c:a aac -b:a 128k " +
"-f tee " +
"\"[f=flv]rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY|" +
"[f=mp4]backup.mp4\"",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
// Note: Error recovery (reconnect on stream drop)
// must be implemented manually by monitoring stderr
// and restarting the process์์ 4: ๋ฉํฐ ์นด๋ฉ๋ผ ๊ฐ์ ์์คํ
Video Capture SDK .NET
C#using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types;
using VisioForge.Core.Types.Output;
using VisioForge.Core.Types.VideoCapture;
// Create multiple capture engines - one per camera
var cameras = new List<VideoCaptureCore>();
var cameraUrls = new[]
{
"rtsp://192.168.1.101/stream",
"rtsp://192.168.1.102/stream",
"rtsp://192.168.1.103/stream",
"rtsp://192.168.1.104/stream"
};
foreach (var url in cameraUrls)
{
var cam = new VideoCaptureCore();
cam.IP_Camera_Source = new IPCameraSourceSettings
{
URL = new Uri(url),
Type = IPSourceEngine.RTSP_LowLatency,
// Fires OnNetworkSourceDisconnect when no frames arrive within this interval
DisconnectEventInterval = TimeSpan.FromSeconds(5)
};
cam.Mode = VideoCaptureMode.IPCapture;
// Motion detection on each camera
cam.Motion_Detection.Enabled = true;
cam.Motion_Detection.Highlight_Threshold = 30;
cam.OnMotion += (s, e) =>
{
Console.WriteLine($"Motion on {url} (level {e.Level}) at {DateTime.Now}");
};
// Segmented recording (1-hour files)
cam.Output_Format = new MP4Output();
cam.Output_Filename = $"cam_{cameras.Count}_{DateTime.Now:yyyyMMdd}.mp4";
cam.SeparateCapture_Enabled = true;
cam.SeparateCapture_Mode = SeparateCaptureMode.SplitByDuration;
cam.SeparateCapture_AutostartCapture = true;
cam.SeparateCapture_TimeThreshold = TimeSpan.FromHours(1);
cameras.Add(cam);
}
// Start all cameras
foreach (var cam in cameras)
await cam.StartAsync();FFmpeg CLI (๋ค์ค ํ๋ก์ธ์ค)
C#using System.Diagnostics;
// Multi-camera: spawn one FFmpeg process per camera
var cameraUrls = new[]
{
"rtsp://192.168.1.101/stream",
"rtsp://192.168.1.102/stream",
"rtsp://192.168.1.103/stream",
"rtsp://192.168.1.104/stream"
};
var processes = new List<Process>();
for (int i = 0; i < cameraUrls.Length; i++)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments =
$"-rtsp_transport tcp -i {cameraUrls[i]} " +
// Segmented recording (1-hour segments)
$"-c:v libx264 -b:v 2000k " +
$"-f segment -segment_time 3600 " +
$"-reset_timestamps 1 " +
$"cam_{i}_%Y%m%d_%H%M%S.mp4",
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
processes.Add(process);
}
// Note: No built-in motion detection
// No automatic reconnection on stream failure
// Must implement process monitoring + restart logic
// 4 separate processes consume more resources์์ 5: ์งํ๋ฅ ์ด ํฌํจ๋ ํ์ผ ๋ณํ
Video Capture SDK .NET
C#// File-to-file conversion uses VideoEditCoreX (Video Edit SDK .NET),
// not VideoCaptureCore. VideoCaptureCore is a live-source capture engine.
using VisioForge.Core.VideoEdit;
var editor = new VideoEditCoreX();
// Add source file
editor.Input_AddVideoFile("input.avi");
// Configure H.265 MP4 output
editor.Output_Format = new MP4Output("output.mp4");
// Track conversion progress
editor.OnProgress += (s, e) =>
{
Console.WriteLine($"Progress: {e.Progress}%");
};
await editor.StartAsync();FFMpegCore Wrapper
C#using FFMpegCore;
using FFMpegCore.Enums;
// File conversion using FFMpegCore
await FFMpegArguments
.FromFileInput("input.avi")
.OutputToFile("output.mp4", overwrite: true, options => options
.WithVideoCodec(VideoCodec.LibX265)
.WithVideoBitrate(6000)
.WithAudioCodec(AudioCodec.Aac)
.WithAudioBitrate(256)
.WithSpeedPreset(Speed.Slow)
)
.NotifyOnProgress(percent =>
{
Console.WriteLine($"Progress: {percent}%");
})
.ProcessAsynchronously();
// Note: Progress reporting works well in FFMpegCore
// This is one area where the wrapper experience is good
// However, error details are limited to stderr output์ฑ๋ฅ ๋น๊ต
๋ฒค์น๋งํฌ๋ Windows 11, Intel i7-13700K, 32 GB RAM, NVIDIA RTX 4070์์ ์ํ๋์์ต๋๋ค. ๊ฒฐ๊ณผ๋ ํ๋์จ์ด์ ๊ตฌ์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
| ์งํ | Video Capture SDK | FFmpeg CLI | ๋น๊ณ |
|---|---|---|---|
| ์น์บ ์บก์ฒ ์์ ์๊ฐ | ~120 ms | ~800 ms | FFmpeg ํ๋ก์ธ์ค ์์ ์ค๋ฒํค๋ |
| ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ (๋จ์ผ ์น์บ ) | ~80 MB | ~120 MB | FFmpeg ํ๋ก์ธ์ค + ํ์ดํ ๋ฒํผ |
| CPU ์ฌ์ฉ๋ (1080p H.264 ๋ นํ) | ~8% | ~10% | ๋์ผ ์ธ์ฝ๋ ์ฌ์ฉ ์ ์ ์ฌ |
| CPU ์ฌ์ฉ๋ (1080p NVENC ๋ นํ) | ~3% | ~4% | GPU ์คํ๋ก๋๋ ๋น์ทํจ |
| ํ๋ ์ ์ง์ฐ (์บก์ฒ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ) | ~16 ms (1ํ๋ ์) | N/A | FFmpeg์๋ ๋ด์ฅ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์์ |
| ๋ฉํฐ ์นด๋ฉ๋ผ (4x 1080p) | ~25% CPU, ~320 MB | ~35% CPU, ~480 MB | 4๊ฐ ํ๋ก์ธ์ค vs 1๊ฐ ํ๋ก์ธ์ค |
| RTSP ์ฌ์ฐ๊ฒฐ | ~2์ด (์๋) | ์๋ ์ฌ์์ ํ์ | SDK์ ๋ด์ฅ ์ฌ์ฐ๊ฒฐ ๊ธฐ๋ฅ ์์ |
| ์์์์ ์ฒซ ํ๋ ์๊น์ง | ~200 ms | ~1,200 ms | ํ๋ก์ธ์ค ์ด๊ธฐํ + ์ฝ๋ฑ ํ์ |
๊ฐ ์๋ฃจ์ ์ ํ ๊ธฐ์ค
๋ค์์ด ํ์ํ๋ฉด Video Capture SDK๋ฅผ ์ ํํ์ธ์
- โWinForms/WPF/MAUI ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค๋ฒ๋ ์ด๊ฐ ํฌํจ๋ ๋ด์ฅ ๋ผ์ด๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
- โ๋ชจ์ ๊ฐ์ง ๋ฐ ์๋ ์ฌ์ฐ๊ฒฐ์ด ํฌํจ๋ ๋ฉํฐ ์นด๋ฉ๋ผ ๊ฐ์
- โGPL ๋ผ์ด์ ์ค ์ฐ๋ ค ์๋ ์์ ์ฉ ์ ํ ๋ฐฐํฌ
- โGPU ๊ฐ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ ๋๋ง์ด ํฌํจ๋ ์ ์ง์ฐ ์บก์ฒ
- โ์บก์ฒ ์ค ๋ด์ฅ ๋ฐ์ฝ๋/QR ์ฝ๋ ์ค์บ ๋๋ ์ผ๊ตด ๊ฐ์ง
- โ์ธ๋ถ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ง ์๋ ๋จ์ผ ๊ด๋ฆฌ .NET API
- โSLA ๋ฐ ์ปค์คํ ๊ฐ๋ฐ ์ง์์ด ํฌํจ๋ ์ ๋ฌธ ์ง์
- โ๋น ๋ฅธ ๊ฐ๋ฐ โ FFmpeg์ผ๋ก ๋ช ์๊ฐ ๊ฑธ๋ฆฌ๋ ๊ธฐ๋ฅ์ด SDK๋ก ๋ช ๋ถ ๋ง์ ์๋ฃ
๋ค์์ด ํ์ํ๋ฉด FFmpeg Wrappers๋ฅผ ์ ํํ์ธ์
- โUI ์๋ ์๋ฒ ์ธก ๋ฐฐ์น ์ฒ๋ฆฌ (ํค๋๋ฆฌ์ค ํธ๋์ค์ฝ๋ฉ)
- โ๋จ์ผ ๋๊ตฌ์์ ์ต๋ ์ฝ๋ฑ ๋ฐ ํ์ ์ง์
- โGPL ์ค์๊ฐ ํ์ฉ๋๋ ์์ฐ ์ ํ ํ๋ก์ ํธ
- โ๊ฐ๋จํ ์ผํ์ฑ ํ์ผ ๋ณํ ๋๋ ์คํธ๋ฆผ ๋ฆด๋ ์ด ์์
- โํฌ๋ก์ค ํ๋ซํผ CLI ์คํฌ๋ฆฝํ ๋ฐ ์๋ํ ํ์ดํ๋ผ์ธ
- โ์ด๋ฏธ GPL๋ก ๋ผ์ด์ ์ค๋ ์คํ ์์ค ํ๋ก์ ํธ
- โ์ปค์คํ ์ฝ๋ฑ ์์ ์ด ํ์ํ ํ์ ๋๋ ์ฐ๊ตฌ ํ๋ก์ ํธ
- โ๊ธฐ์กด FFmpeg ์ธํ๋ผ ๋ฐ ์คํฌ๋ฆฝํธ์์ ํตํฉ
ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ: ์์ชฝ์ ์ฅ์ ์ ๋ชจ๋
๋ง์ ํ๋ก๋์ ์์คํ ์ ๋ ๊ธฐ์ ์ ๊ฒฐํฉํฉ๋๋ค. Video Capture SDK๊ฐ ์ค์๊ฐ ์บก์ฒ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํ๊ณ , FFmpeg์ด ์คํ๋ผ์ธ ๋ฐฐ์น ์ฒ๋ฆฌ ๋ฐ ํน์ ํ์ ๋ณํ์ ์ฒ๋ฆฌํฉ๋๋ค.
- โถ๋ชจ๋ ์ค์๊ฐ ์บก์ฒ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๋ํํ ๊ธฐ๋ฅ์๋ SDK ์ฌ์ฉ
- โถ๋ นํ ํ์ผ์ ์คํ๋ผ์ธ ๋ฐฐ์น ํธ๋์ค์ฝ๋ฉ์๋ FFmpeg ์ฌ์ฉ
- โถSDK๊ฐ ์ง์ํ์ง ์๋ ๋๋ฌธ ํ์ ๋ณํ์๋ FFmpeg ์ฌ์ฉ
- โถ์์นด์ด๋ธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค๋ก FFmpeg ์ ์ง
๋ฐฐํฌ ๋ฐ ๋ฐฐํฌ
Video Capture SDK ๋ฐฐํฌ
- โNuGet ํจํค์ง์ ๋ชจ๋ ๋ค์ดํฐ๋ธ ์ข ์์ฑ ํฌํจ
- โ๋จ์ผ NuGet ์ฐธ์กฐ โ ์ธ๋ถ ๋๊ตฌ ์ค์น ๋ถํ์
- โ์์ ์ฉ ๋ผ์ด์ ์ค๋ก ๋ก์ดํฐ ํ๋ฆฌ ์ฌ๋ฐฐํฌ
- โxcopy / MSIX / ClickOnce ๋ฐฐํฌ ์ง์
- โDocker ์ปจํ ์ด๋ ์ง์ (Linux ๋ฐ Windows)
- โGPL ์๋ฌด ์์ โ ๋ ์ ์ํํธ์จ์ด์ ์์
FFmpeg Wrapper ๋ฐฐํฌ
- โ ์ ํ๋ฆฌ์ผ์ด์ ์ ffmpeg.exe(๋๋ ๋๋ฑํ ๊ฒ)๋ฅผ ๋ฒ๋คํด์ผ ํจ
- โ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ: ๋น๋ ๊ตฌ์ฑ์ ๋ฐ๋ผ ~80-150 MB
- โ ์ฌ๋ฐ๋ฅธ FFmpeg ๋น๋๊ฐ ๋์ ํ๋ซํผ๊ณผ ์ผ์นํ๋์ง ํ์ธํด์ผ ํจ
- โ GPL ์ค์๋ก ์์ค ์ฝ๋ ๊ณต๊ฐ๊ฐ ํ์ํ ์ ์์
- โ ํ๋ซํผ ๊ฐ ๋ฒ์ ๊ด๋ฆฌ๋ ์๋
- โ FFmpeg ๋ฐ์ด๋๋ฆฌ์ ์๋ ์ ๋ฐ์ดํธ๋ ์ฝ๋๋ก ์ฒ๋ฆฌํด์ผ ํจ
์์ฌ๊ฒฐ์ ๋งคํธ๋ฆญ์ค
| ์๊ตฌ์ฌํญ | Video Capture SDK | FFmpeg Wrappers | ์น์ |
|---|---|---|---|
| ๋ฐ์คํฌํฑ ์ฑ์ ๋ผ์ด๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | Video Capture SDK | ||
| ํค๋๋ฆฌ์ค ์๋ฒ ํธ๋์ค์ฝ๋ฉ | FFmpeg | ||
| ๋ชจ์ ๊ฐ์ง๊ฐ ํฌํจ๋ ๋ฉํฐ ์นด๋ฉ๋ผ | Video Capture SDK | ||
| GPL ํ๋ฆฌ ์์ ๋ฐฐํฌ | Video Capture SDK | ||
| ์ต๋ ํ์ ์ง์ | FFmpeg | ||
| ๋ฎ์ ์ด๊ธฐ ์์ฐ | FFmpeg | ||
| ๋น ๋ฅธ ๊ฐ๋ฐ ์๊ฐ | Video Capture SDK | ||
| ์ ๋ฌธ ์ง์/SLA | Video Capture SDK | ||
| ํฌ๋ก์ค ํ๋ซํผ UI ์ปจํธ๋กค | Video Capture SDK | ||
| ์ปค์คํ ์ฝ๋ฑ ๊ฐ๋ฐ | FFmpeg | ||
| ์ค์๊ฐ ๊ฐ์ง ๊ธฐ๋ฅ | Video Capture SDK | ||
| ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค/ํํ ๋ฆฌ์ผ | FFmpeg | ||
| ์ค๋์ค ๋ ๋ฒจ ๋ชจ๋ํฐ๋ง | Video Capture SDK | ||
| ์คํธ๋ฆผ ๋ฆด๋ ์ด (RTSP์์ RTMP) | ๋ฌด์น๋ถ | ||
| ๋ฐฐ์น ํ์ผ ์ฒ๋ฆฌ | FFmpeg | ||
| ์ํฐํ๋ผ์ด์ฆ ๊ท์ ์ค์/๋ผ์ด์ ์ค | Video Capture SDK |
๊ฒฐ๋ก
Video Capture SDK .NET
Video Capture SDK๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ค๋ฒ๋ ์ด, ๊ฐ์ง, ๋ฉํฐ ์นด๋ฉ๋ผ ๊ด๋ฆฌ๊ฐ ํฌํจ๋ ๋ผ์ด๋ธ ๋น๋์ค ์บก์ฒ๊ฐ ํ์ํ .NET ๋ฐ์คํฌํฑ ๋ฐ ํฌ๋ก์ค ํ๋ซํผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํดํค ์๋ฃจ์ ์ผ๋ก ํ์ํฉ๋๋ค. ๋ค์ดํฐ๋ธ .NET API๋ ํ๋ก์ธ์ค ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ ๊ฑฐํ๊ณ ์ ๋ฌธ์ ์ด๊ณ ์ง์๋๋ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ์์ ์ฉ ๋ผ์ด์ ์ค๋ ์ํฐํ๋ผ์ด์ฆ ๋ฐฐํฌ๋ฅผ ์ํ ๊นจ๋ํ IP๋ฅผ ๋ณด์ฅํฉ๋๋ค.
FFmpeg Wrappers
FFmpeg์ ์ฝ๋ฑ ์ง์๊ณผ ๋ฐฐ์น ์ฒ๋ฆฌ์ ๊ณจ๋ ์คํ ๋ค๋๋ก ๋จ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ํค๋๋ฆฌ์ค, ์๋ฒ ์ธก ๋๋ ์คํ ์์ค์ธ ๊ฒฝ์ฐ FFmpeg ๋ํผ๋ ํจ๊ณผ์ ์ด๊ณ ๋ฌด๋ฃ์ธ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ๋ผ์ด๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๊ฐ์ง ๊ธฐ๋ฅ, ๋ค์ดํฐ๋ธ .NET ์ปจํธ๋กค์ ๋ถ์ฌ๋ ๋ฐ์คํฌํฑ ์บก์ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋นํ ๋ ๋ง์ ์ปค์คํ ๊ฐ๋ฐ์ด ํ์ํจ์ ์๋ฏธํฉ๋๋ค.
The Reality
์บก์ฒ ์ค์ฌ์ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋๋ถ๋ถ์ .NET ๊ฐ๋ฐ์์๊ฒ Video Capture SDK๋ ์ ์ฃผ๊ฐ์ ๊ฐ๋ฐ ์๊ฐ์ ์ ์ฝํ๊ณ ๋ผ์ด์ ์ค ๋ฆฌ์คํฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์๋ฒ ์ธก ํธ๋์ค์ฝ๋ฉ ํ์ ๊ฒฝ์ฐ FFmpeg์ด ์ค์ฉ์ ์ธ ์ ํ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ง์ ํ์ด ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ฌ์ฉํฉ๋๋ค.
