Last updated: 2026๋ 9์
Video Capture SDK .NET vs FFmpeg Wrappers
ํฌ๊ด์ ์ธ .NET ๋น๋์ค ์บก์ฒ ๋น๊ต
.NET ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ๋น๋์ค ์บก์ฒ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๋ ๊ฒ์ ์ค์ํ ์ํคํ ์ฒ ๊ฒฐ์ ์ ๋๋ค. ์ด ๊ฐ์ด๋๋ VisioForge Video Capture SDK .NET(์ ์ฉ ์บก์ฒ ์์ง)๊ณผ FFmpeg.AutoGen, Xabe.FFmpeg, FFMpegCore ๊ฐ์ FFmpeg ๊ธฐ๋ฐ ๋ํผ ๊ฐ์ ์์ธํ๊ณ ๊ณต์ ํ ๋น๊ต๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ํคํ ์ฒ, ๊ธฐ๋ฅ, ์ฑ๋ฅ, ๋ผ์ด์ ์ค ๋ฐ ์ค์ ์ฝ๋๋ฅผ ๊ฒํ ํ์ฌ ์ ๋ณด์ ๊ธฐ๋ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ํฉ๋๋ค.
์ฐ โฌ250๋ถํฐ ยท Lifetime ๋ผ์ด์ ์ค โฌ750๋ถํฐ
์์ฝ
| ์ธก๋ฉด | 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 |
| ๊ฐ๊ฒฉ | ์ฐ๊ฐ โฌ250โโฌ500 ๋๋ โฌ750โโฌ1,500 LifetimeยทTeam | ๋ฌด๋ฃ(ํ์ง๋ง GPL ์ค์ ๋น์ฉ์ ์๋นํจ) |
| ์ง์ | ์ด๋ฉ์ผ ์ง์, ํฐ์ผ ์์คํ , ์ปค์คํ ๋น๋ | ์ปค๋ฎค๋ํฐ ํฌ๋ผ, 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๋ช , 12๊ฐ์๊ฐ ์ฃผ์ ๋ฐ ๋ถ ์ ๋ฐ์ดํธ์ ์ด๋ฉ์ผ ์ง์
ํ ๋์์ ํ ์์น์ ์๋ ๊ตฌ๋งค ์กฐ์ง์ ๋ชจ๋ ๊ฐ๋ฐ์, ์ ํ ์๋ช ๋์ ๋ง์ด๋ ๋ฐ ๋ฉ์ด์ ์ ๋ฐ์ดํธ์ ์ด๋ฉ์ผ ์ง์
๋น์์ ์ ์ฌ์ฉ์ ์ํ ๋ณ๋ ๋ผ์ด์ ์ค
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 ๋ผ์ด์ ์ค ๊ฐ๊ฒฉ์ ์ด๊ณผํฉ๋๋ค.
์ฐ โฌ250๋ถํฐ ยท Lifetime ๋ผ์ด์ ์ค โฌ750๋ถํฐ
์ฝ๋ ์์
์์ 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์ด ์ค์ฉ์ ์ธ ์ ํ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ง์ ํ์ด ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ฌ์ฉํฉ๋๋ค.
Frequently Asked Questions
FFmpeg ๋ํผ๋ฅผ GPL ๋ฌธ์ ์์ด ์์ ์ฉ ์ ํ์ ์ฌ์ฉํ ์ ์๋์?
Video Capture SDK๋ ๋ด๋ถ์ ์ผ๋ก FFmpeg์ ์ฌ์ฉํ๋์?
4K ์บก์ฒ์์ ์ด๋ค ์๋ฃจ์ ์ ์ฑ๋ฅ์ด ๋ ์ข๋์?
FFmpeg ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ด๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ถ๊ฐํ ์ ์๋์?
Video Capture SDK๋ ์๊ตฌ ๋ผ์ด์ ์ค์ธ๊ฐ์, ๊ตฌ๋ ์ธ๊ฐ์?
FFmpeg ์ ๋ฐ์ดํธ์ ๋ณด์ ํจ์น๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์?
ํ๋ก์ ํธ ์ค๊ฐ์ FFmpeg ๋ํผ์์ Video Capture SDK๋ก ์ ํํ ์ ์๋์?
์์ํ๊ธฐ
FFmpeg๋ ๋ฌด๋ฃ ์คํ ์์ค์ ๋๋ค(ffmpeg.org, 2026-09-06 ํ์ธ). ์ฌ๊ธฐ์ ๋น๊ตํ๋ ๋น์ฉ์ ์์ฉ ๋ํผ ๋ผ์ด์ ์ค์ ๊ฐ๋ฐ ์๊ฐ์ ๋๋ค.
