VisioForge

Last updated: 2026๋…„ 1์›”

Video Capture SDK .NET vs LibVLCSharp

ํฌ๊ด„์ ์ธ .NET ๋น„๋””์˜ค ์บก์ฒ˜ ๋น„๊ต

.NET ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•œ ๋น„๋””์˜ค ์บก์ฒ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” VisioForge Video Capture SDK .NET(์ „์šฉ ์บก์ฒ˜ ์—”์ง„)๊ณผ LibVLCSharp(VLC ๋ฏธ๋””์–ด ์—”์ง„์˜ .NET ๋ฐ”์ธ๋”ฉ) ๊ฐ„์˜ ์ƒ์„ธํ•˜๊ณ  ๊ณต์ •ํ•œ ๋น„๊ต๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. LibVLCSharp๋Š” ๋ฏธ๋””์–ด ์žฌ์ƒ์— ๋›ฐ์–ด๋‚˜๋ฉฐ ์บก์ฒ˜ ์žฅ์น˜๋ฅผ ์—ด ์ˆ˜ ์žˆ์ง€๋งŒ, Video Capture SDK๋Š” ์ „๋ฌธ์ ์ธ ๋น„๋””์˜ค ์บก์ฒ˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ณด์— ๊ธฐ๋ฐ˜ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์•„ํ‚คํ…์ฒ˜, ๊ธฐ๋Šฅ, ์„ฑ๋Šฅ, ๋ผ์ด์„ ์Šค ๋ฐ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝ

์ธก๋ฉดVideo Capture SDK .NETLibVLCSharp
์•„ํ‚คํ…์ฒ˜๋“€์–ผ ์—”์ง„: ๋„ค์ดํ‹ฐ๋ธŒ DirectShow/Media Foundation + ๋‚ด์žฅ GStreamer ํŒŒ์ดํ”„๋ผ์ธlibvlc C interop์„ ํ†ตํ•œ ๋ชจ๋†€๋ฆฌ์‹ VLC ๋ฏธ๋””์–ด ์—”์ง„
์ฃผ์š” ๋ชฉ์ ์ „๋ฌธ์ ์ธ ๋น„๋””์˜ค ์บก์ฒ˜, ๋…นํ™”, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์ฒ˜๋ฆฌ๊ธฐ๋ณธ ์บก์ฒ˜ ์žฅ์น˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ฏธ๋””์–ด ์žฌ์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
์บก์ฒ˜ ์†Œ์Šค์›น์บ , ํ™”๋ฉด, IP ์นด๋ฉ”๋ผ, ์บก์ฒ˜ ์นด๋“œ, TV ํŠœ๋„ˆ, NDI, ์‚ฐ์—…์šฉ ์นด๋ฉ”๋ผdshow:// ๊ฒฝ์œ  ์›น์บ , screen:// ๊ฒฝ์œ  ํ™”๋ฉด, URL ๊ฒฝ์œ  IP ์นด๋ฉ”๋ผ
๋ผ์ด๋ธŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์˜ค๋ฒ„๋ ˆ์ด์™€ ํšจ๊ณผ๊ฐ€ ํฌํ•จ๋œ ๋‚ด์žฅ GPU ๊ฐ€์† ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋‚ด์žฅ ๋น„๋””์˜ค ์„œํ”ผ์Šค ๋ Œ๋”๋ง(์žฌ์ƒ ์ง€ํ–ฅ)
๋…นํ™” ํ˜•์‹MP4, MKV, WebM, AVI, WMV, MOV, TS, GIF + ํƒ€์ž…ํ™”๋œ ์ถœ๋ ฅ ํด๋ž˜์Šค๋กœ 30๊ฐœ ์ด์ƒsout ํŠธ๋žœ์Šค์ฝ”๋“œ ์ฒด์ธ ๊ฒฝ์œ  โ€” ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ ๊ตฌ์„ฑ
๋‹ค์ค‘ ์ถœ๋ ฅ๋™์‹œ ๋…นํ™” + ์ŠคํŠธ๋ฆผ + ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์œ„ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ Outputs_Add APIsout duplicate ์ง€์‹œ์–ด ๊ฒฝ์œ  โ€” ์ทจ์•ฝํ•œ ๋ฌธ์ž์—ด ๊ตฌ๋ฌธ
๋น„๋””์˜ค ํšจ๊ณผ์บก์ฒ˜ ์ค‘ 40๊ฐœ ์ด์ƒ์˜ CPU ๋ฐ GPU ๊ฐ€์† ํšจ๊ณผ์บก์ฒ˜ ์ค‘ ์‹ค์‹œ๊ฐ„ ํšจ๊ณผ ์—†์Œ
๊ฐ์ง€๋ชจ์…˜, ์–ผ๊ตด, ๋ฐ”์ฝ”๋“œ/QR ๊ฐ์ง€ ๋‚ด์žฅ๊ฐ์ง€ ๊ธฐ๋Šฅ ์—†์Œ
๋ผ์ด์„ ์Šค๊ฐœ๋ฐœ์ž๋‹น ์ƒ์—…์šฉ ๋ผ์ด์„ ์Šค(๊ตฌ๋… ๋˜๋Š” ์˜๊ตฌ)LGPL 2.1 โ€” ๋™์  ๋งํฌ ์‹œ ๋ฌด๋ฃŒ
๊ฐ€๊ฒฉEUR 250(๊ตฌ๋…)๋ถ€ํ„ฐ EUR 1,500(ํŒ€ ์˜๊ตฌ)๊นŒ์ง€๋ฌด๋ฃŒ(LGPL 2.1)

์•„ํ‚คํ…์ฒ˜ ์ƒ์„ธ ๋ถ„์„

Video Capture SDK .NET ์•„ํ‚คํ…์ฒ˜

Video Capture SDK๋Š” ๋“€์–ผ ์—”์ง„ ์„ค๊ณ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์—”์ง„์€ Windows์—์„œ DirectShow์™€ Media Foundation์„ ๋ž˜ํ•‘ํ•˜์—ฌ OS๊ฐ€ ๋…ธ์ถœํ•˜๋Š” ๋ชจ๋“  ์บก์ฒ˜ ์žฅ์น˜์— ๋Œ€ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์ ‘๊ทผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ณด์กฐ ๋‚ด์žฅ GStreamer ํŒŒ์ดํ”„๋ผ์ธ์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์บก์ฒ˜, ๊ณ ๊ธ‰ ์ฝ”๋ฑ ์ž‘์—… ๋ฐ IP ์นด๋ฉ”๋ผ ์ˆ˜์ง‘์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์—”์ง„์€ ํ†ตํ•ฉ๋œ .NET API ํ‘œ๋ฉด์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์ „ํ™˜ ์‹œ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • โ–ถDirectShow ๋ฐ Media Foundation ํ•„ํ„ฐ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•œ ๋„ค์ดํ‹ฐ๋ธŒ Windows ์บก์ฒ˜
  • โ–ถmacOS, Linux, iOS ๋ฐ Android์šฉ ํฌ๋กœ์Šค ํ”Œ๋žซํผ GStreamer ์—”์ง„
  • โ–ถDirect3D / OpenGL ๋ Œ๋”๋Ÿฌ๋ฅผ ํ†ตํ•œ GPU ๊ฐ€์† ๋ฏธ๋ฆฌ๋ณด๊ธฐ
  • โ–ถ.NET async/await ์ง€์›์ด ํฌํ•จ๋œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜
  • โ–ถ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ โ€” ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ๋ถˆํ•„์š”
  • โ–ถ๋…นํ™” ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ํƒ€์ž…ํ™”๋œ ์ถœ๋ ฅ ํด๋ž˜์Šค

LibVLCSharp ์•„ํ‚คํ…์ฒ˜

LibVLCSharp๋Š” VLC ๋ฏธ๋””์–ด ํ”Œ๋ ˆ์ด์–ด์˜ ํ•ต์‹ฌ ์—”์ง„์ธ libvlc์˜ ๊ณต์‹ .NET ๋ฐ”์ธ๋”ฉ์ž…๋‹ˆ๋‹ค. VLC์˜ C API์— ๋Œ€ํ•œ ๊ด€๋ฆฌํ˜• ๋ž˜ํผ๋ฅผ ์ œ๊ณตํ•˜์—ฌ VLC์˜ ๊ด‘๋ฒ”์œ„ํ•œ ๋ฏธ๋””์–ด ์žฌ์ƒ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์žฌ์ƒ์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ VLC์˜ ๋ฏธ๋””์–ด ๋ฆฌ์†Œ์Šค ๋กœ์ผ€์ดํ„ฐ ๊ตฌ๋ฌธ(dshow://, screen://, v4l2://)์„ ์‚ฌ์šฉํ•˜์—ฌ ์บก์ฒ˜ ์žฅ์น˜๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • โ–ถP/Invoke๋ฅผ ํ†ตํ•œ libvlc C API์˜ ๊ด€๋ฆฌํ˜• .NET ๋ž˜ํผ
  • โ–ถ๋ชจ๋“  ๋ฏธ๋””์–ด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋†€๋ฆฌ์‹ VLC ์—”์ง„
  • โ–ถURL ์Šคํƒ€์ผ ๋ฏธ๋””์–ด ๋ฆฌ์†Œ์Šค ๋กœ์ผ€์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ์บก์ฒ˜ ์žฅ์น˜
  • โ–ถsout(์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ) ๋ฌธ์ž์—ด ์ฒด์ธ์„ ํ†ตํ•ด ๊ตฌ์„ฑ๋˜๋Š” ๋…นํ™”
  • โ–ถ์žฌ์ƒ ์šฐ์„  ์„ค๊ณ„ โ€” ์บก์ฒ˜๋Š” ๋ณด์กฐ ์‚ฌ์šฉ ์‚ฌ๋ก€
  • โ–ถํ”Œ๋žซํผ๋ณ„ VLC ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ

์ฃผ์š” ์•„ํ‚คํ…์ฒ˜ ์ฐจ์ด์ 

์ธก๋ฉดVideo Capture SDKLibVLCSharp
์„ค๊ณ„ ์ดˆ์ ๋น„๋””์˜ค ์บก์ฒ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ „์šฉ์œผ๋กœ ๊ตฌ์ถ•์บก์ฒ˜๋ฅผ ๋ณด์กฐ ๊ธฐ๋Šฅ์œผ๋กœ ํ•˜๋Š” ๋ฏธ๋””์–ด ์žฌ์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
์žฅ์น˜ ๊ฒ€์ƒ‰์ „์ฒด ์žฅ์น˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋„ค์ดํ‹ฐ๋ธŒ OS ์—ด๊ฑฐ API์ˆ˜๋™ dshow:// ๋˜๋Š” v4l2:// URL ๊ตฌ์„ฑ
๋…นํ™” ๊ตฌ์„ฑํƒ€์ž…ํ™”๋œ .NET ์ถœ๋ ฅ ํด๋ž˜์Šค(MP4Output, H264EncoderSettings)๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ sout ํŠธ๋žœ์Šค์ฝ”๋“œ ์ฒด์ธ
์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ.NET ์˜ˆ์™ธ ๋ฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์˜ค๋ฅ˜VLC ๋กœ๊ทธ ์ฝœ๋ฐฑ ๋ฐ ์ด๋ฒคํŠธ ๊ตฌ๋…
๋‹ค์ค‘ ์ถœ๋ ฅ๋„ค์ดํ‹ฐ๋ธŒ Outputs_Add API โ€” ๊ด€๋ฆฌํ˜•์ด๊ณ  ํƒ€์ž… ์•ˆ์ „sout duplicate ์ง€์‹œ์–ด โ€” ์ทจ์•ฝํ•œ ๋ฌธ์ž์—ด ํŒŒ์‹ฑ
ํšจ๊ณผ ํŒŒ์ดํ”„๋ผ์ธ์บก์ฒ˜ ์ค‘ ๋‚ด์žฅ CPU + GPU ํšจ๊ณผ ์ฒด์ธ์บก์ฒ˜์šฉ ์‹ค์‹œ๊ฐ„ ํšจ๊ณผ ํŒŒ์ดํ”„๋ผ์ธ ์—†์Œ

๊ธฐ๋Šฅ๋ณ„ ๋น„๊ต

์บก์ฒ˜ ์†Œ์Šค

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
USB ์›น์บ โœ…โš ๏ธ(์ œํ•œ๋œ ์ œ์–ด๋กœ dshow:// ๊ฒฝ์œ )
๋‚ด์žฅ ๋…ธํŠธ๋ถ ์นด๋ฉ”๋ผโœ…โš ๏ธ(dshow:// URL ๊ฒฝ์œ )
ํ™”๋ฉด/๋ฐ์Šคํฌํ†ฑ ์บก์ฒ˜โœ…โš ๏ธ(screen:// ๊ฒฝ์œ  ๊ธฐ๋ณธ โ€” ์˜์—ญ ์„ ํƒ ์—†์Œ)
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฐฝ ์บก์ฒ˜โœ…โŒ
IP ์นด๋ฉ”๋ผ(RTSP/ONVIF)โœ…โš ๏ธ(URL ๊ธฐ๋ฐ˜, ์ž๋™ ์žฌ์—ฐ๊ฒฐ ์—†์Œ)
์บก์ฒ˜ ์นด๋“œ(Blackmagic DeckLink)โœ…โŒ
TV ํŠœ๋„ˆ(BDA/DVB)โœ…โŒ
NDI ์†Œ์Šคโœ…โŒ
์‚ฐ์—…์šฉ ์นด๋ฉ”๋ผ(GigE Vision, USB3 Vision)โœ…โŒ
๊ฐ€์ƒ ์นด๋ฉ”๋ผ(OBS Virtual Cam)โœ…โš ๏ธ(Windows์—์„œ๋งŒ dshow:// ๊ฒฝ์œ )

๋ผ์ด๋ธŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
๋‚ด์žฅ ๋น„๋””์˜ค ๋ฏธ๋ฆฌ๋ณด๊ธฐโœ…โœ…(์žฌ์ƒ ์ง€ํ–ฅ ์„œํ”ผ์Šค)
GPU ๊ฐ€์† ๋ Œ๋”๋งโœ…โœ…
๋ฏธ๋ฆฌ๋ณด๊ธฐ์˜ ํ…์ŠคํŠธ/์ด๋ฏธ์ง€ ์˜ค๋ฒ„๋ ˆ์ดโœ…โŒ(์บก์ฒ˜ ์ค‘ ์˜ค๋ฒ„๋ ˆ์ด API ์—†์Œ)
๋…นํ™” ์—†๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐโœ…โœ…
์—ฌ๋Ÿฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ฐฝโœ…โš ๏ธ(์—ฌ๋Ÿฌ MediaPlayer ์ธ์Šคํ„ด์Šค ํ•„์š”)
WinForms / WPF / MAUI ์ปจํŠธ๋กคโœ…โœ…(VideoView ์ปจํŠธ๋กค ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

๋…นํ™”

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
MP4(H.264 / H.265)โœ…โš ๏ธ(sout ํŠธ๋žœ์Šค์ฝ”๋“œ ๋ฌธ์ž์—ด ๊ฒฝ์œ )
MKV ์ปจํ…Œ์ด๋„ˆโœ…โš ๏ธ(sout ํŠธ๋žœ์Šค์ฝ”๋“œ ๋ฌธ์ž์—ด ๊ฒฝ์œ )
WebM(VP8 / VP9)โœ…โš ๏ธ(sout ํŠธ๋žœ์Šค์ฝ”๋“œ ๋ฌธ์ž์—ด ๊ฒฝ์œ )
AVIโœ…โš ๏ธ(sout ํŠธ๋žœ์Šค์ฝ”๋“œ ๋ฌธ์ž์—ด ๊ฒฝ์œ )
WMV / ASFโœ…โš ๏ธ(sout ํŠธ๋žœ์Šค์ฝ”๋“œ ๋ฌธ์ž์—ด ๊ฒฝ์œ )
ํƒ€์ž…ํ™”๋œ ์ถœ๋ ฅ ๊ตฌ์„ฑโœ…โŒ(๋ชจ๋“  ๊ตฌ์„ฑ์€ ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜)
์˜ค๋””์˜ค ์ „์šฉ ๋…นํ™”โœ…โš ๏ธ(sout ํŠธ๋žœ์Šค์ฝ”๋“œ ๋ฌธ์ž์—ด ๊ฒฝ์œ )
์„ธ๊ทธ๋จผํŠธ ๋…นํ™”(์‹œ๊ฐ„/ํฌ๊ธฐ๋ณ„ ๋ถ„ํ• )โœ…โŒ
์‚ฌ์ „ ์ด๋ฒคํŠธ ๋…นํ™” (์ˆœํ™˜ ๋ฒ„ํผ)โœ…โŒ

๋‹ค์ค‘ ์ถœ๋ ฅ

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
๋™์‹œ ๋…นํ™” + ์ŠคํŠธ๋ฆฌ๋ฐโœ…โš ๏ธ(sout duplicate ๊ฒฝ์œ  โ€” ์ทจ์•ฝ)
์—ฌ๋Ÿฌ ๋…นํ™” ์ถœ๋ ฅโœ…โš ๏ธ(sout duplicate ๊ฒฝ์œ  โ€” ์ทจ์•ฝ)
๋„ค์ดํ‹ฐ๋ธŒ Outputs_Add APIโœ…โŒ
๋…๋ฆฝ์  ์ถœ๋ ฅ ์ œ์–ดโœ…โŒ
๋…นํ™” ์ค‘ ์Šค๋ƒ…์ƒทโœ…โš ๏ธ(TakeSnapshot ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ œํ•œ์ )

์ŠคํŠธ๋ฆฌ๋ฐ

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
RTMP Pushโœ…โš ๏ธ(sout ๊ฒฝ์œ  โ€” ์ œํ•œ๋œ ์ œ์–ด)
RTSP ์„œ๋ฒ„ ๋ชจ๋“œโœ…โŒ
SRT(Caller / Listener)โœ…โŒ
HLS ์„ธ๊ทธ๋จผํŠธ ์ƒ์„ฑโœ…โš ๏ธ(sout ๊ฒฝ์œ  โ€” ์ œํ•œ์ )
UDP / TCP ์œ ๋‹ˆ์บ์ŠคํŠธ / ๋ฉ€ํ‹ฐ์บ์ŠคํŠธโœ…โš ๏ธ(sout rtp/udp ๊ฒฝ์œ )
ํƒ€์ž…ํ™”๋œ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ตฌ์„ฑโœ…โŒ(๋ชจ๋“  ๊ตฌ์„ฑ์€ ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ sout ์ฒด์ธ)

๋น„๋””์˜ค ์ฒ˜๋ฆฌ

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
์‹ค์‹œ๊ฐ„ ํฌ๊ธฐ ์กฐ์ •/์ž๋ฅด๊ธฐโœ…โŒ(์บก์ฒ˜ ์ค‘ ์ฒ˜๋ฆฌ ์—†์Œ)
๋””์ธํ„ฐ๋ ˆ์ด์Šคโœ…โœ…(VLC์— ๋‚ด์žฅ ๋””์ธํ„ฐ๋ ˆ์ด์Šค ์žˆ์Œ)
์ƒ‰์ƒ ์กฐ์ •(๋ฐ๊ธฐ, ๋Œ€๋น„)โœ…โŒ(์บก์ฒ˜ ์ค‘ ํšจ๊ณผ ์—†์Œ)
ํ…์ŠคํŠธ ์˜ค๋ฒ„๋ ˆ์ด/์›Œํ„ฐ๋งˆํฌโœ…โŒ(์บก์ฒ˜ ์ค‘ ์˜ค๋ฒ„๋ ˆ์ด ์—†์Œ)
์ด๋ฏธ์ง€ ์˜ค๋ฒ„๋ ˆ์ด/๋กœ๊ณ โœ…โŒ(์บก์ฒ˜ ์ค‘ ์˜ค๋ฒ„๋ ˆ์ด ์—†์Œ)
ํ”ฝ์ฒ˜ ์ธ ํ”ฝ์ฒ˜โœ…โŒ
ํฌ๋กœ๋งˆ ํ‚ค(๊ทธ๋ฆฐ ์Šคํฌ๋ฆฐ)โœ…โŒ
GPU ๊ฐ€์† ํ•„ํ„ฐโœ…โŒ

์˜ค๋””์˜ค

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
์˜ค๋””์˜ค ์žฅ์น˜ ์บก์ฒ˜โœ…โš ๏ธ(dshow:// ์˜ค๋””์˜ค ๊ฒฝ์œ )
์‹œ์Šคํ…œ ์˜ค๋””์˜ค(๋ฃจํ”„๋ฐฑ) ์บก์ฒ˜โœ…โŒ
์˜ค๋””์˜ค ๋ฏน์‹ฑ(๋‹ค์ค‘ ์ž…๋ ฅ)โœ…โŒ
์‹ค์‹œ๊ฐ„ ๋ณผ๋ฅจ/๊ฒŒ์ธ ์ œ์–ดโœ…โš ๏ธ(๊ธฐ๋ณธ ๋ณผ๋ฅจ ์ œ์–ด)
์˜ค๋””์˜ค ํšจ๊ณผ(40๊ฐœ ์ด์ƒ ๋‚ด์žฅ)โœ…โŒ
VU ๋ฏธํ„ฐ/๋ ˆ๋ฒจ ๋ชจ๋‹ˆํ„ฐ๋งโœ…โŒ

๊ฐ์ง€ ๋ฐ ๋ถ„์„

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
๋ชจ์…˜ ๊ฐ์ง€โœ…โŒ
์–ผ๊ตด ๊ฐ์ง€โœ…โŒ
๋ฐ”์ฝ”๋“œ/QR ์ฝ”๋“œ ์ฝ๊ธฐโœ…โŒ
๊ฐ์ฒด ์ถ”์ โœ…โŒ
์˜ค๋””์˜ค ๋ ˆ๋ฒจ ๊ฐ์ง€โœ…โŒ

ํ”„๋ ˆ์ž„ ์ ‘๊ทผ ๋ฐ ํ†ตํ•ฉ

๊ธฐ๋ŠฅVideo Capture SDKLibVLCSharp
Raw ํ”„๋ ˆ์ž„ ์ฝœ๋ฐฑ(RGB / YUV)โœ…โš ๏ธ(SetVideoCallbacks ๊ฒฝ์œ  โ€” ๋ณต์žกํ•œ ์„ค์ •)
Bitmap / SKBitmap / WriteableBitmapโœ…โŒ(์ˆ˜๋™ ๋ณ€ํ™˜ ํ•„์š”)
ML.NET / ONNX์™€ ํ†ตํ•ฉโœ…โš ๏ธ(์ˆ˜๋™ ํ”„๋ ˆ์ž„ ์ถ”์ถœ ํ•„์š”)
OpenCV Interopโœ…โš ๏ธ(๋น„๋””์˜ค ์ฝœ๋ฐฑ ๊ฒฝ์œ )
์ง์ ‘ GPU ํ…์Šค์ฒ˜ ์ ‘๊ทผโœ…โŒ
๊ฐ€์ƒ ์นด๋ฉ”๋ผ ์ถœ๋ ฅโœ…โŒ

ํ”Œ๋žซํผ ์ง€์›

์šด์˜ ์ฒด์ œ ํ˜ธํ™˜์„ฑ

ํ”Œ๋žซํผVideo Capture SDKLibVLCSharp
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 SDKLibVLCSharp
WinFormsโœ…โœ…(VideoView ์ปจํŠธ๋กค)
WPFโœ…โœ…(VideoView ์ปจํŠธ๋กค)
.NET MAUIโœ…โœ…(VideoView ์ปจํŠธ๋กค)
Avalonia UIโœ…โœ…(VideoView ์ปจํŠธ๋กค)
์ฝ˜์†”/์„œ๋น„์Šคโœ…โœ…
ASP.NET Core(๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค)โœ…โš ๏ธ(์žฌ์ƒ ์ง€ํ–ฅ ์„ค๊ณ„)
Blazor(์„œ๋ฒ„ ์ธก ์ฒ˜๋ฆฌ)โœ…โš ๏ธ(์ œํ•œ๋œ ์„œ๋ฒ„ ์ธก ์บก์ฒ˜)

๊ฐ€๊ฒฉ ๋น„๊ต

Video Capture SDK .NET ๊ฐ€๊ฒฉ

์—ฐ๊ฐ„ ๊ตฌ๋…EUR 250 - 500

๊ฐœ๋ฐœ์ž 1๋ช…, ์ƒ์—…์  ์‚ฌ์šฉ, 1๋…„ ์—…๋ฐ์ดํŠธ

ํŒ€ ์˜๊ตฌEUR 750 - 1,500

์ตœ๋Œ€ 8๋ช… ๊ฐœ๋ฐœ์ž, ์˜๊ตฌ ๋ผ์ด์„ ์Šค, ํ‰์ƒ ์—…๋ฐ์ดํŠธ ํฌํ•จ

All licenses include:

  • โœ“ ๋กœ์—ดํ‹ฐ ๋ฌด๋ฃŒ ๋ฐฐํฌ
  • โœ“ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ ์˜ˆ์ œ
  • โœ“ ์šฐ์„  ํ‹ฐ์ผ“ ์ง€์›
  • โœ“ ๋ชจ๋“  ํ”Œ๋žซํผ ํƒ€๊ฒŸ ํฌํ•จ

LibVLCSharp ๋น„์šฉ

LibVLCSharp๋ฌด๋ฃŒ

LGPL 2.1 ๋ผ์ด์„ ์Šค โ€” ๋™์  ๋งํฌ ํ•„์š”

LibVLC ์ƒ์šฉ ๋ผ์ด์„ ์ŠคVideoLAN ๋ฌธ์˜

๋…์ ์  ์ •์  ๋งํฌ ๋˜๋Š” LGPL ๋น„ํ˜ธํ™˜ ์‚ฌ์šฉ

LGPL ์ค€์ˆ˜ ๊ณ ๋ ค ์‚ฌํ•ญ

LibVLCSharp์™€ libvlc๋Š” LGPL 2.1์— ๋”ฐ๋ผ ๋ผ์ด์„ ์Šค๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” LGPL ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋Š” ํ•œ ์ƒ์—…์  ๋…์  ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • โš libvlc์— ๋™์ ์œผ๋กœ ๋งํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ •์  ๋งํฌ ๋ถˆ๊ฐ€)
  • โš ์‚ฌ์šฉ์ž๊ฐ€ LGPL ๋ผ์ด์„ ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ •๋œ ๋ฒ„์ „์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • โš LGPL ๋ผ์ด์„ ์Šค ์‚ฌ๋ณธ์„ ํฌํ•จํ•˜๊ณ  libvlc ์‚ฌ์šฉ์„ ๋ˆˆ์— ๋„๊ฒŒ ์–ธ๊ธ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • โš libvlc ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ˆ˜์ • ์‚ฌํ•ญ์„ LGPL์— ๋”ฐ๋ผ ๊ณต๊ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • โš ์ •์  ๋งํฌ ๋˜๋Š” ํŠน์ • ์ž„๋ฒ ๋””๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค์—๋Š” VideoLAN์˜ ์ƒ์šฉ ๋ผ์ด์„ ์Šค๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

LGPL์ด GPL๋ณด๋‹ค ๋” ํ—ˆ์šฉ์ ์ด์ง€๋งŒ, ์ค€์ˆ˜๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋งํฌ ๋ฐ ๋ฐฐํฌ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ธฐ์—… ๋ฒ•๋ฌดํŒ€์€ ์˜คํ”ˆ ์†Œ์Šค ์ค€์ˆ˜ ์œ„ํ—˜์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์šฉ ๋ผ์ด์„ ์Šค๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ์˜ˆ์ œ

์˜ˆ์ œ 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 UI control)
var capture = new VideoCaptureCore(videoView as IVideoView);

// Enumerate and set video source (first available webcam)
var devices = capture.Video_CaptureDevices();
capture.Video_CaptureDevice = new VideoCaptureSource(devices[0]);

// Set audio source
var audioDevices = capture.Audio_CaptureDevices();
capture.Audio_CaptureDevice = new AudioCaptureSource(audioDevices[0]);

// Configure MP4 output with default H.264/AAC settings
capture.Output_Format = new MP4Output();
capture.Output_Filename = "recording.mp4";

// Set mode: VideoCapture enables both recording and preview
capture.Mode = VideoCaptureMode.VideoCapture;

// Start recording
await capture.StartAsync();

LibVLCSharp

C#
using LibVLCSharp.Shared;

// Initialize VLC engine
Core.Initialize();
using var libVLC = new LibVLC();
using var mediaPlayer = new MediaPlayer(libVLC);

// Open webcam via dshow:// URL
// Note: device name must be known in advance
using var media = new Media(libVLC,
    "dshow://",
    FromType.FromLocation);

// Add recording via sout transcode chain
media.AddOption(
    ":sout=#transcode{" +
    "vcodec=h264,vb=4000," +
    "acodec=aac,ab=192" +
    "}:duplicate{" +
    "dst=std{access=file," +
    "mux=mp4," +
    "dst=recording.mp4}," +
    "dst=display" +
    "}");

// Set dshow device (string-based)
media.AddOption(
    ":dshow-vdev=Integrated Camera");
media.AddOption(
    ":dshow-adev=Microphone (Realtek Audio)");

// Start โ€” no typed API, errors in VLC log
mediaPlayer.Play(media);

// To stop: mediaPlayer.Stop();
// No progress events, no state machine

์˜ˆ์ œ 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(videoView as IVideoView);

// Screen capture source (full screen, 30 fps, with cursor)
capture.Screen_Capture_Source = new ScreenCaptureSourceSettings
{
    FullScreen = true,
    FrameRate = new VideoFrameRate(30),
    GrabMouseCursor = true
};

// Enable video effects pipeline
capture.Video_Effects_Enabled = true;
capture.Video_Effects_Clear();

// Add timestamp text overlay
capture.Video_Effects_Add(new VideoEffectTextLogo(true)
{
    Text = "{timestamp}",
    Left = 10,
    Top = 10
});

// Add watermark image overlay
capture.Video_Effects_Add(new VideoEffectImageLogo(true)
{
    Filename = "logo.png",
    Left = 10,
    Top = 50
});

// Record to file
capture.Output_Format = new MP4Output();
capture.Output_Filename = "screen.mp4";
capture.Mode = VideoCaptureMode.ScreenCapture;

// Also stream via RTMP (secondary output)
capture.Network_Streaming_Enabled = true;
capture.Network_Streaming_Format = NetworkStreamingFormat.RTMP_FFMPEG_EXE;
capture.Network_Streaming_URL = "rtmp://streaming-server/live/key";

await capture.StartAsync();

LibVLCSharp

C#
using LibVLCSharp.Shared;

Core.Initialize();
using var libVLC = new LibVLC();
using var mediaPlayer = new MediaPlayer(libVLC);

// Screen capture via screen:// URL
using var media = new Media(libVLC,
    "screen://",
    FromType.FromLocation);

// Configure screen capture
media.AddOption(":screen-fps=30");
media.AddOption(":screen-follow-mouse");

// Record to file via sout
// Note: No overlay support during capture
// Note: No text/image overlay API
media.AddOption(
    ":sout=#transcode{" +
    "vcodec=h264,vb=8000" +
    "}:std{" +
    "access=file," +
    "mux=mp4," +
    "dst=screen.mp4" +
    "}");

// Cannot simultaneously stream via RTMP
// sout duplicate is fragile and often fails
// for screen capture + streaming combos

// No overlay API โ€” cannot add timestamps
// No watermark support during capture
// No region selection for capture area

mediaPlayer.Play(media);

์˜ˆ์ œ 3: ๋‹ค์ค‘ ์ถœ๋ ฅ: ๋…นํ™” + ์ŠคํŠธ๋ฆผ + ๋ฏธ๋ฆฌ๋ณด๊ธฐ

Video Capture SDK .NET

C#
using VisioForge.Core.VideoCapture;
using VisioForge.Core.Types;
using VisioForge.Core.Types.Output;
using VisioForge.Core.Types.VideoCapture;

var capture = new VideoCaptureCore(videoView as IVideoView);

// Set webcam source
var devices = capture.Video_CaptureDevices();
capture.Video_CaptureDevice = new VideoCaptureSource(devices[0]);

var audioDevices = capture.Audio_CaptureDevices();
capture.Audio_CaptureDevice = new AudioCaptureSource(audioDevices[0]);

// Primary output: MP4 recording
capture.Output_Format = new MP4Output();
capture.Output_Filename = "recording.mp4";

// Second output: RTMP stream
capture.Network_Streaming_Enabled = true;
capture.Network_Streaming_Format = NetworkStreamingFormat.RTMP_FFMPEG_EXE;
capture.Network_Streaming_URL = "rtmp://live.server/app/stream_key";

// Set mode and start โ€” preview + recording + stream run simultaneously
capture.Mode = VideoCaptureMode.VideoCapture;
await capture.StartAsync();

LibVLCSharp

C#
using LibVLCSharp.Shared;

Core.Initialize();
using var libVLC = new LibVLC();
using var mediaPlayer = new MediaPlayer(libVLC);

// Open webcam
using var media = new Media(libVLC,
    "dshow://",
    FromType.FromLocation);

media.AddOption(
    ":dshow-vdev=Integrated Camera");

// Attempt multi-output via sout duplicate
// WARNING: This is fragile and often fails
media.AddOption(
    ":sout=#transcode{" +
    "vcodec=h264,vb=4000," +
    "acodec=aac,ab=192" +
    "}:duplicate{" +
    "dst=std{access=file," +
    "mux=mp4," +
    "dst=recording.mp4}," +
    "dst=std{access=rtmp," +
    "mux=flv," +
    "dst=rtmp://live.server/app/key}," +
    "dst=display" +
    "}");

// No independent bitrate per output
// No low-res backup option
// Single transcode shared across all outputs
// If one output fails, all may fail
// No typed API โ€” string errors at runtime

mediaPlayer.Play(media);

์˜ˆ์ œ 4: ๊ฐ์ง€๊ฐ€ ํฌํ•จ๋œ RTSP IP ์นด๋ฉ”๋ผ ๊ฐ์‹œ

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.VideoProcessing;

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.Auto_LAV
    };

    // Motion detection
    cam.Motion_Detection = new MotionDetectionSettings { Enabled = true };
    cam.OnMotion += (s, e) =>
    {
        Console.WriteLine($"Motion on {url}");
    };

    // Barcode detection
    cam.Barcode_Reader_Enabled = true;
    cam.OnBarcodeDetected += (s, e) =>
    {
        Console.WriteLine($"Barcode: {e.Value}");
    };

    // Segmented recording (split file every hour)
    cam.Output_Format = new MP4Output();
    cam.Output_Filename = $"cam_{cameras.Count}.mp4";
    cam.SeparateCapture_Enabled = true;
    cam.SeparateCapture_TimeThreshold = TimeSpan.FromHours(1);
    cam.Mode = VideoCaptureMode.IPCapture;

    cameras.Add(cam);
}

foreach (var cam in cameras)
    await cam.StartAsync();

LibVLCSharp

C#
using LibVLCSharp.Shared;

Core.Initialize();
using var libVLC = new LibVLC();

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 players = new List<MediaPlayer>();

foreach (var url in cameraUrls)
{
    var player = new MediaPlayer(libVLC);
    var media = new Media(libVLC, url,
        FromType.FromLocation);

    // Record via sout
    media.AddOption(
        ":sout=#transcode{vcodec=h264,vb=2000}" +
        ":std{access=file,mux=mp4," +
        $"dst=cam_{players.Count}.mp4}}");

    // No motion detection โ€” not available
    // No barcode detection โ€” not available
    // No face detection โ€” not available
    // No auto-reconnection on stream failure
    // No segmented recording support
    // Must implement reconnection manually:
    player.EndReached += (s, e) =>
    {
        // Manual reconnect attempt
        // ThreadPool.QueueUserWorkItem(_ =>
        //     player.Play(media));
    };

    player.Play(media);
    players.Add(player);
}

// No event-driven detection
// No managed surveillance features
// Manual process monitoring required

๊ฐ ์†”๋ฃจ์…˜์„ ์„ ํƒํ•ด์•ผ ํ•  ๋•Œ

๋‹ค์Œ์ด ํ•„์š”ํ•  ๋•Œ Video Capture SDK ์„ ํƒ

  • โœ“์‹ค์‹œ๊ฐ„ ๋น„๋””์˜ค ํšจ๊ณผ์™€ ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ํฌํ•จ๋œ ์ „๋ฌธ์  ์บก์ฒ˜
  • โœ“๋‹จ์ผ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ ๋‹ค์ค‘ ์ถœ๋ ฅ ๋…นํ™” + ์ŠคํŠธ๋ฆฌ๋ฐ
  • โœ“๋ชจ์…˜, ์–ผ๊ตด ๋ฐ ๋ฐ”์ฝ”๋“œ ๊ฐ์ง€๊ฐ€ ํฌํ•จ๋œ ๊ฐ์‹œ ์‹œ์Šคํ…œ
  • โœ“์บก์ฒ˜ ์ค‘ ์‹ค์‹œ๊ฐ„ ์˜ค๋””์˜ค ํšจ๊ณผ(40๊ฐœ ์ด์ƒ)
  • โœ“๋ฐฉ์†ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๊ฐ€์ƒ ์นด๋ฉ”๋ผ ์ถœ๋ ฅ
  • โœ“์‚ฐ์—…์šฉ ๋ฐ ์ „๋ฌธ ํ•˜๋“œ์›จ์–ด ์ง€์›(DeckLink, GigE Vision)
  • โœ“์บก์ฒ˜ ์ค‘ PiP ๋ฐ ํฌ๋กœ๋งˆ ํ‚ค ํ•ฉ์„ฑ
  • โœ“์˜์—ญ ์„ ํƒ๊ณผ ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ํฌํ•จ๋œ ํ™”๋ฉด ๋…นํ™”
  • โœ“๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ ๊ตฌ์„ฑ ์—†๋Š” ์™„์ „ํžˆ ํƒ€์ž…ํ™”๋œ .NET API

๋‹ค์Œ์ด ํ•„์š”ํ•  ๋•Œ LibVLCSharp ์„ ํƒ

  • โœ“๊ธฐ๋ณธ ์บก์ฒ˜ ์žฅ์น˜ ์ ‘๊ทผ์ด ํฌํ•จ๋œ ๋ฏธ๋””์–ด ์žฌ์ƒ
  • โœ“LGPL ์ค€์ˆ˜๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๋ฌด์˜ˆ์‚ฐ ํ”„๋กœ์ ํŠธ
  • โœ“ํšจ๊ณผ๋‚˜ ๊ฐ์ง€ ์—†๋Š” ๊ฐ„๋‹จํ•œ ์›น์บ  ๋…นํ™”
  • โœ“.NET MAUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฏธ๋””์–ด ์žฌ์ƒ
  • โœ“์ด๋ฏธ VLC ์ธํ”„๋ผ์™€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ
  • โœ“LGPL ๋ผ์ด์„ ์Šค์™€ ํ˜ธํ™˜๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ
  • โœ“๊ธฐ๋ณธ ๋น„๋””์˜ค ์บก์ฒ˜ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ž…
  • โœ“์žฌ์ƒ์ด ์ฃผ์ด๊ณ  ์บก์ฒ˜๊ฐ€ ๋ถ€์ฐจ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

๋ฐฐํฌ ๋ฐ ๋ฐฐํฌ

Video Capture SDK ๋ฐฐํฌ

  • โœ“NuGet ํŒจํ‚ค์ง€์— ๋ชจ๋“  ๋„ค์ดํ‹ฐ๋ธŒ ์ข…์†์„ฑ ํฌํ•จ
  • โœ“๋‹จ์ผ NuGet ์ฐธ์กฐ โ€” ์™ธ๋ถ€ ๋„๊ตฌ ์„ค์น˜ ๋ถˆํ•„์š”
  • โœ“์ƒ์—… ๋ผ์ด์„ ์Šค๋กœ ๋กœ์—ดํ‹ฐ ๋ฌด๋ฃŒ ์žฌ๋ฐฐํฌ
  • โœ“xcopy / MSIX / ClickOnce ๋ฐฐํฌ ์ง€์›
  • โœ“Docker ์ปจํ…Œ์ด๋„ˆ ์ง€์›(Linux ๋ฐ Windows)
  • โœ“LGPL ์˜๋ฌด ์—†์Œ โ€” ๋…์  ์†Œํ”„ํŠธ์›จ์–ด์— ์•ˆ์ „

LibVLCSharp ๋ฐฐํฌ

  • โš NuGet ํŒจํ‚ค์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ(LibVLCSharp + VideoLAN.LibVLC ํ”Œ๋žซํผ ํŒจํ‚ค์ง€)
  • โš ํ”Œ๋žซํผ๋ณ„ VLC ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒˆ๋“ค ํ•„์š”(์•ฝ 80-150 MB)
  • โš LGPL ์ค€์ˆ˜์—๋Š” ๋™์  ๋งํฌ ๋ฐ ๋ผ์ด์„ ์Šค ๊ณ ์ง€ ํ•„์š”
  • โš ์‚ฌ์šฉ์ž๊ฐ€ libvlc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ œ๊ณต ํ•„์š”
  • โš ํ”Œ๋žซํผ ํŒจํ‚ค์ง€๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐฐํฌ ์ฒ˜๋ฆฌ
  • โš ์ •์  ๋งํฌ์—๋Š” VideoLAN ์ƒ์šฉ ๋ผ์ด์„ ์Šค ํ•„์š”

๊ฒฐ์ • ๋งคํŠธ๋ฆญ์Šค

์š”๊ตฌ ์‚ฌํ•ญVideo Capture SDKLibVLCSharp์Šน์ž
์ „๋ฌธ์  ์บก์ฒ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜Video Capture SDK
๋‹ค์ค‘ ์ถœ๋ ฅ(๋…นํ™” + ์ŠคํŠธ๋ฆผ)Video Capture SDK
๊ฐ์ง€๊ฐ€ ํฌํ•จ๋œ ๊ฐ์‹œVideo Capture SDK
์บก์ฒ˜ ์ค‘ ์‹ค์‹œ๊ฐ„ ํšจ๊ณผVideo Capture SDK
๊ฐ€์ƒ ์นด๋ฉ”๋ผ ์ถœ๋ ฅVideo Capture SDK
์‚ฐ์—…์šฉ/์ „๋ฌธ ํ•˜๋“œ์›จ์–ดVideo Capture SDK
PiP/ํฌ๋กœ๋งˆ ํ‚ค ํ•ฉ์„ฑVideo Capture SDK
์บก์ฒ˜ ์ค‘ 40๊ฐœ ์ด์ƒ์˜ ์˜ค๋””์˜ค ํšจ๊ณผVideo Capture SDK
์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ํฌํ•จ๋œ ํ™”๋ฉด ๋…นํ™”Video Capture SDK
์˜ˆ์‚ฐ $0(์˜คํ”ˆ ์†Œ์Šค)LibVLCSharp
๊ฐ„๋‹จํ•œ ์›น์บ  ๋…นํ™”LibVLCSharp
LGPL ํ˜ธํ™˜ ํ”„๋กœ์ ํŠธLibVLCSharp

๊ฒฐ๋ก 

Video Capture SDK .NET

Video Capture SDK๋Š” ์ „๋ฌธ์ ์ธ ๋น„๋””์˜ค ์บก์ฒ˜ ์›Œํฌํ”Œ๋กœ์šฐ์— ๋›ฐ์–ด๋‚œ ์ „์šฉ ์บก์ฒ˜ ์—”์ง„์ž…๋‹ˆ๋‹ค. ํƒ€์ž…ํ™”๋œ .NET API, ๋‚ด์žฅ ํšจ๊ณผ ํŒŒ์ดํ”„๋ผ์ธ, ๋‹ค์ค‘ ์ถœ๋ ฅ ์•„ํ‚คํ…์ฒ˜, ๊ฐ์ง€ ๊ธฐ๋Šฅ, ์ „๋ฌธ ํ•˜๋“œ์›จ์–ด ์ง€์›์œผ๋กœ ์บก์ฒ˜ ํ’ˆ์งˆ๊ณผ ๊ธฐ๋Šฅ์ด ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ™•์‹คํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ƒ์šฉ ๋ผ์ด์„ ์Šค๋Š” ๊ธฐ์—… ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊นจ๋—ํ•œ ์ง€์  ์žฌ์‚ฐ๊ถŒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

LibVLCSharp

LibVLCSharp๋Š” ์บก์ฒ˜ ์žฅ์น˜๋„ ์—ด ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ๋ฏธ๋””์–ด ์žฌ์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฃผ๋กœ ์žฌ์ƒ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ๊ฐ€๋” ๊ฐ„๋‹จํ•œ ๋…นํ™”๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ, LibVLCSharp๋Š” ์œ ๋Šฅํ•˜๊ณ  ๋ฌด๋ฃŒ์ธ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ sout ๊ตฌ์„ฑ, ์‹ค์‹œ๊ฐ„ ํšจ๊ณผ ๋ถ€์žฌ, ๊ฐ์ง€ ๊ธฐ๋Šฅ ๋ถ€์žฌ๋Š” ์ „๋ฌธ์ ์ธ ์บก์ฒ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ›จ์”ฌ ๋” ๋งŽ์€ ๋งž์ถค ๊ฐœ๋ฐœ์„ ํ•„์š”๋กœ ํ•˜๊ฑฐ๋‚˜ LibVLCSharp๋งŒ์œผ๋กœ๋Š” ๊ตฌ์ถ•ํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

The Reality

์บก์ฒ˜ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ .NET ๊ฐœ๋ฐœ์ž์—๊ฒŒ Video Capture SDK๋Š” LibVLCSharp๊ฐ€ ์ œ๊ณตํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์€ ์ „๋ฌธ๊ฐ€๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. LibVLCSharp๋Š” ์žฌ์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ ๋น›๋‚˜๋ฉฐ ์˜ˆ์‚ฐ์ด ์ฃผ์š” ์ œ์•ฝ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์บก์ฒ˜์— ํ•ฉ๋ฆฌ์ ์ธ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํšจ๊ณผ, ๊ฐ์ง€, ๋‹ค์ค‘ ์ถœ๋ ฅ ๋˜๋Š” ์ „๋ฌธ ํ•˜๋“œ์›จ์–ด ์ง€์›์ด ํ•„์š”ํ•˜๋‹ค๋ฉด Video Capture SDK๊ฐ€ ์‹ค์šฉ์ ์ธ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

Frequently Asked Questions

์ตœ๊ณ ์˜ .NET ๋น„๋””์˜ค ์บก์ฒ˜ SDK๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
.NET์—์„œ ์ „๋ฌธ์ ์ธ ๋น„๋””์˜ค ์บก์ฒ˜๋ฅผ ์œ„ํ•ด VisioForge Video Capture SDK .NET์€ ์‹ค์‹œ๊ฐ„ ํšจ๊ณผ, ๋‹ค์ค‘ ์ถœ๋ ฅ ๋…นํ™”, ๋ชจ์…˜/์–ผ๊ตด/๋ฐ”์ฝ”๋“œ ๊ฐ์ง€, Blackmagic DeckLink ๋ฐ ์‚ฐ์—…์šฉ ์นด๋ฉ”๋ผ์™€ ๊ฐ™์€ ์ „๋ฌธ ํ•˜๋“œ์›จ์–ด ์ง€์›์„ ํฌํ•จํ•˜๋Š” ๊ฐ€์žฅ ํฌ๊ด„์ ์ธ ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. LibVLCSharp๋Š” ๊ธฐ๋ณธ ์บก์ฒ˜ ์š”๊ตฌ์— ์ข‹์€ ๋ฌด๋ฃŒ ๋Œ€์•ˆ์ด์ง€๋งŒ ์ „๋ฌธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”๊ตฌํ•˜๋Š” ์ „๋ฌธํ™”๋œ ์บก์ฒ˜ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.
C#์—์„œ ์›น์บ  ๋น„๋””์˜ค๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€?
With Video Capture SDK, you create a VideoCaptureCore instance, enumerate devices with Video_CaptureDevices() (synchronous), wrap the result in new VideoCaptureSource(devices[0]), configure output format with typed classes like MP4Output, set Mode = VideoCaptureMode.VideoCapture, and call StartAsync(). With LibVLCSharp, you open a dshow:// URL and configure recording via sout transcode string options. The SDK approach provides type safety, IntelliSense, and compile-time error checking, while LibVLCSharp uses runtime string parsing.
LibVLCSharp๋Š” C#์—์„œ ํšจ๊ณผ๊ฐ€ ํฌํ•จ๋œ ์›น์บ ์„ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
์•„๋‹ˆ์š”. LibVLCSharp๋Š” ์บก์ฒ˜ ์ค‘ ์‹ค์‹œ๊ฐ„ ๋น„๋””์˜ค ๋˜๋Š” ์˜ค๋””์˜ค ํšจ๊ณผ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฏธ๋””์–ด ์žฌ์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์บก์ฒ˜ ์ค‘ ์˜ค๋ฒ„๋ ˆ์ด, ์ƒ‰์ƒ ์กฐ์ •, ํฌ๋กœ๋งˆ ํ‚ค ๋˜๋Š” PiP์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด GPU ๊ฐ€์†์ด ํฌํ•จ๋œ 40๊ฐœ ์ด์ƒ์˜ ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ํšจ๊ณผ๋ฅผ ํฌํ•จํ•˜๋Š” VisioForge Video Capture SDK์™€ ๊ฐ™์€ ์ „์šฉ ์บก์ฒ˜ SDK๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
C# .NET์—์„œ ํ™”๋ฉด์„ ๋…นํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€?
Video Capture SDK๋Š” ์ „์ฒด ํ™”๋ฉด, ์˜์—ญ ์„ ํƒ, ์ปค์„œ ์บก์ฒ˜ ๋ฐ ํ”„๋ ˆ์ž„ ๋ ˆ์ดํŠธ ์ œ์–ด ์˜ต์…˜์ด ์žˆ๋Š” ScreenCaptureSourceSettings ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋ ˆ์ด, ํšจ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋™์‹œ์— ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LibVLCSharp๋Š” screen:// URL๋กœ ํ™”๋ฉด์„ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์˜์—ญ ์„ ํƒ, ์˜ค๋ฒ„๋ ˆ์ด, ์บก์ฒ˜ ์ค‘ ํšจ๊ณผ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ์„๊ณผ ์ŠคํŠธ๋ฆฌ๋ฐ์ด ํฌํ•จ๋œ ์ „๋ฌธ์ ์ธ ํ™”๋ฉด ๋…นํ™”์—๋Š” Video Capture SDK๊ฐ€ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.
Video Capture SDK๋Š” RTSP IP ์นด๋ฉ”๋ผ๋ฅผ ์ง€์›ํ•˜๋‚˜์š”?
์˜ˆ. Video Capture SDK๋Š” ์ŠคํŠธ๋ฆผ ์‹คํŒจ ์‹œ ์ž๋™ ์žฌ์—ฐ๊ฒฐ, ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์žฌ์‹œ๋„ ์ง€์—ฐ ๋ฐ ์ธ์ฆ์ด ํฌํ•จ๋œ ๊ด€๋ฆฌํ˜• RTSP/ONVIF IP ์นด๋ฉ”๋ผ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. IP ์นด๋ฉ”๋ผ ํ”ผ๋“œ์˜ ๋…นํ™”, ์ŠคํŠธ๋ฆฌ๋ฐ, ํšจ๊ณผ ์ ์šฉ์„ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LibVLCSharp๋Š” ์žฌ์ƒ ๋ฐ ๊ธฐ๋ณธ ๋…นํ™”๋ฅผ ์œ„ํ•ด RTSP URL์„ ์—ด ์ˆ˜ ์žˆ์ง€๋งŒ ์ž๋™ ์žฌ์—ฐ๊ฒฐ, ๊ฐ์ง€ ๊ธฐ๋Šฅ ๋ฐ ๋‹ค์ค‘ ์ถœ๋ ฅ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.
Video Capture SDK์™€ LibVLCSharp์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
Video Capture SDK๋Š” ํƒ€์ž…ํ™”๋œ API, ์‹ค์‹œ๊ฐ„ ํšจ๊ณผ, ๋‹ค์ค‘ ์ถœ๋ ฅ ๋…นํ™”, ๊ฐ์ง€(๋ชจ์…˜, ์–ผ๊ตด, ๋ฐ”์ฝ”๋“œ) ๋ฐ ์ „๋ฌธ ํ•˜๋“œ์›จ์–ด ์ง€์›์ด ํฌํ•จ๋œ ์ „์šฉ .NET ๋น„๋””์˜ค ์บก์ฒ˜ ์—”์ง„์ž…๋‹ˆ๋‹ค. LibVLCSharp๋Š” VLC ๋ฏธ๋””์–ด ์—”์ง„์˜ .NET ๋ฐ”์ธ๋”ฉ์œผ๋กœ, ์ฃผ๋กœ ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ sout ๊ตฌ์„ฑ์„ ํ†ตํ•œ ๊ธฐ๋ณธ ์บก์ฒ˜ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์žฌ์ƒ์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SDK๋Š” ์ƒ์—…์šฉ(์—ฐ๊ฐ„ EUR 250๋ถ€ํ„ฐ)์ด๋ฉฐ LibVLCSharp๋Š” LGPL 2.1์— ๋”ฐ๋ผ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ

Related Comparisons