VisioForge

Media Blocks SDK .NETC#์œผ๋กœ ๋ชจ๋“ˆํ˜• ๋ฏธ๋””์–ด ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•

Media Blocks SDK .NET์œผ๋กœ ๊ฐ•๋ ฅํ•œ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“œ์„ธ์š”. ์ด ๋ชจ๋“ˆ์‹ ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ์  ์ƒ์„ฑ์ž(์นด๋ฉ”๋ผ โ†’ ์ฝ”๋ฑ โ†’ ์ถœ๋ ฅ)์ฒ˜๋Ÿผ ๋ณต์žกํ•œ ๋น„๋””์˜ค ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MP4, MKV ๋ฐ AVI๋กœ์˜ ๋…นํ™”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ HLS, RTMP ๋ฐ RTSP๋ฅผ ํ†ตํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ง€์›ํ•˜๋ฉฐ ์ƒ‰์ƒ ๋ณด์ •, ๋””์ธํ„ฐ๋ ˆ์ด์‹ฑ, ์›Œํ„ฐ๋งˆํฌ, ํ™”๋ฉด ์บก์ฒ˜ ๋ฐ ์˜ค๋””์˜ค ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•œ ํ’๋ถ€ํ•œ ํšจ๊ณผ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์žฅ๋œ ์ปดํ“จํ„ฐ ๋น„์ „, QR ์ฝ”๋“œ ์ธ์‹, ์–ผ๊ตด ์ถ”์  ๋ฐ Blackmagic ๋ฐ ONVIF ์žฅ์น˜์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ์ง€์›์„ ํ†ตํ•ด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ „๋ฌธ๊ฐ€๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SDK๋Š” WinForms, WPF, MAUI, Xamarin, Avalonia ๋ฐ Unity์™€ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ฐ์Šคํฌํ†ฑ, ๋ชจ๋ฐ”์ผ ๋ฐ ๊ฒŒ์ž„ ์—”์ง„ ์•ฑ์— ๊ณ ๊ธ‰ ๋ฏธ๋””์–ด ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ์ด์ 

๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜

์‚ฌ์šฉ์ž ์ง€์ • ๋ฏธ๋””์–ด ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋นŒ๋”ฉ ๋ธ”๋ก์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ๋˜๋Š” 200๊ฐœ ์ด์ƒ์˜ ์ฒ˜๋ฆฌ ๋ธ”๋ก

ํฌ๋กœ์Šค ํ”Œ๋žซํผ

๋ชจ๋“  ์ฃผ์š” .NET UI ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ Windows, macOS, Linux, Android ๋ฐ iOS์—์„œ ์ž‘๋™

ํ•˜๋“œ์›จ์–ด ๊ฐ€์†

์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ NVIDIA, Intel ๋ฐ AMD ์ง€์›์„ ํ†ตํ•œ GPU ๊ฐ€์† ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ

ํŒŒ์ดํ”„๋ผ์ธ ์˜ˆ์ œ

// Create MediaBlocks pipeline
_pipeline = new MediaBlocksPipeline();

// Add file source
var fileSourceSettings = await UniversalSourceSettings.CreateAsync("video.mp4");
var videoStreamAvailable = fileSourceSettings.GetInfo().VideoStreams.Count > 0;
var audioStreamAvailable = fileSourceSettings.GetInfo().AudioStreams.Count > 0;

var fileSource = new UniversalSourceBlock(fileSourceSettings);

// Add video renderer
if (videoStreamAvailable)
{
    var videoRenderer = new VideoRendererBlock(_pipeline, VideoView1);
    _pipeline.Connect(fileSource, videoRenderer);
}

// Add audio output
if (audioStreamAvailable)
{
    var audioOutputDevice = (await DeviceEnumerator.Shared.AudioOutputsAsync(
        AudioOutputDeviceAPI.DirectSound))[0];
    var audioOutput = new AudioRendererBlock(
        new AudioRendererSettings(audioOutputDevice));
    _pipeline.Connect(fileSource, audioOutput);
}

// Start playback
await _pipeline.StartAsync();

๊ฐ„๋‹จํ•œ ํ”Œ๋ ˆ์ด์–ด

๊ฐ„๋‹จํ•œ ํ”Œ๋ ˆ์ด์–ด ํŒŒ์ดํ”„๋ผ์ธ์€ UniversalSourceBlock์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ํŒŒ์ผ์„ ์ฝ๊ณ  ๋””์ฝ”๋”ฉํ•˜๊ณ , VideoRendererBlock์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋””์˜ค๋ฅผ ํ‘œ์‹œํ•˜๊ณ , AudioRendererBlock์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋””์˜ค๋ฅผ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ™”ํ˜• ํŒŒ์ดํ”„๋ผ์ธ ์‹œ๊ฐํ™”

Loading pipeline diagram...

๊ณ ๊ธ‰ ํ”Œ๋ ˆ์ด์–ด

๊ณ ๊ธ‰ ํ”Œ๋ ˆ์ด์–ด ํŒŒ์ดํ”„๋ผ์ธ์—๋Š” ํŒŒ์ผ ๋˜๋Š” ์ŠคํŠธ๋ฆผ ๋””์ฝ”๋”ฉ์„ ์œ„ํ•œ UniversalSourceBlock, ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ๋ Œ๋”๋Ÿฌ, ํšจ๊ณผ ์ฒ˜๋ฆฌ ๋ธ”๋ก์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

// Create MediaBlocks pipeline
_pipeline = new MediaBlocksPipeline();

// Add file source
var fileSourceSettings = await UniversalSourceSettings.CreateAsync(edFilename.Text);
var videoStreamAvailable = fileSourceSettings.GetInfo().VideoStreams.Count > 0;
var audioStreamAvailable = fileSourceSettings.GetInfo().AudioStreams.Count > 0;

var fileSource = new UniversalSourceBlock(fileSourceSettings);

// Add video renderer, text overlay and image overlay
if (videoStreamAvailable)
{
    var videoRenderer = new VideoRendererBlock(_pipeline, VideoView1);
    var textOverlay = new TextOverlayBlock(new TextOverlaySettings("Hello world!"));
    var imageOverlay = new ImageOverlayBlock(new ImageOverlaySettings("logo.png"));

    _pipeline.Connect(fileSource, textOverlay);
    _pipeline.Connect(textOverlay, imageOverlay);
    _pipeline.Connect(imageOverlay, videoRenderer);
}

// Add audio output and equalizer
if (audioStreamAvailable)
{
    var audioOutputDevice = (await DeviceEnumerator.Shared.AudioOutputsAsync(AudioOutputDeviceAPI.DirectSound))[0];
    var audioOutput = new AudioRendererBlock(new AudioRendererSettings(audioOutputDevice));

    var equalizer = new EqualizerParametricBlock();
    // set some equalizer settings

    _pipeline.Connect(fileSource, equalizer);
    _pipeline.Connect(equalizer, audioOutput);
}

// Start playback
await _pipeline.StartAsync();

ํšจ๊ณผ๊ฐ€ ํฌํ•จ๋œ ๊ณ ๊ธ‰ ํ”Œ๋ ˆ์ด์–ด ํŒŒ์ดํ”„๋ผ์ธ

Loading pipeline diagram...

// Create MediaBlocksPipeline object
_pipeline = new MediaBlocksPipeline();

// Add default video and audio sources
var videoSources = (await DeviceEnumerator.Shared.VideoSourcesAsync()).ToList();
var videoSource = new SystemVideoSourceBlock(new VideoCaptureDeviceSourceSettings(
    videoSources.Find(x => x.Name.Contains("920"))));

var audioSources = (await DeviceEnumerator.Shared.AudioSourcesAsync()).ToList();
var audioSource = new SystemAudioSourceBlock(audioSources[0].CreateSourceSettings());

// Add video renderer
var videoRenderer = new VideoRendererBlock(_pipeline, videoView: VideoView1);

// Add audio renderer
var audioRenderers = (await DeviceEnumerator.Shared.AudioOutputsAsync()).ToList();
var audioRenderer = new AudioRendererBlock(new AudioRendererSettings(audioRenderers[0]));

// Connect everything
_pipeline.Connect(videoSource, videoRenderer);
_pipeline.Connect(audioSource, audioRenderer);

// Start preview
await _pipeline.StartAsync();

์นด๋ฉ”๋ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

์นด๋ฉ”๋ผ/๋งˆ์ดํฌ ๊ฐ„๋‹จํ•œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํŒŒ์ดํ”„๋ผ์ธ์—๋Š” ์žฅ์น˜ ์†Œ์Šค ๋ธ”๋ก๊ณผ ๋น„๋””์˜ค/์˜ค๋””์˜ค ๋ Œ๋”๋Ÿฌ ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์žฅ์น˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์นด๋ฉ”๋ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํŒŒ์ดํ”„๋ผ์ธ

Loading pipeline diagram...

RTSP ๋ฏธ๋ฆฌ๋ณด๊ธฐ

RTSP ์†Œ์Šค ๋ธ”๋ก(๋‚ด๋ถ€ ๋””์ฝ”๋” ํฌํ•จ), ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ๋ Œ๋”๋Ÿฌ๋ฅผ ํฌํ•จํ•˜๋Š” RTSP ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค.

// Create Media Blocks pipeline
_pipeline = new MediaBlocksPipeline();

// Create video renderer
var videoRenderer = new VideoRendererBlock(_pipeline, VideoView1);

// Add RTSP camera source
var rtsp = await RTSPSourceSettings.CreateAsync(new Uri(edURL.Text), 
    edLogin.Text, edPassword.Text, audioEnabled: cbAudioStream.Checked);
var rtspSource = new RTSPSourceBlock(rtsp);

_pipeline.Connect(rtspSource, videoRenderer);

// Add audio output (if required)
if (cbAudioStream.Checked && rtsp.IsAudioAvailable())
{
    var audioOutputDevice = (await DeviceEnumerator.Shared.AudioOutputsAsync(
        AudioOutputDeviceAPI.DirectSound))[0];
    var audioOutput = new AudioRendererBlock(new AudioRendererSettings(audioOutputDevice));
    _pipeline.Connect(rtspSource, audioOutput);
}

// Start IP camera preview
await _pipeline.StartAsync();

RTSP ์ŠคํŠธ๋ฆผ ํŒŒ์ดํ”„๋ผ์ธ

Loading pipeline diagram...

// Create the pipeline
_pipeline = new MediaBlocksPipeline();

// Add video and audio sources
var videoSources = (await DeviceEnumerator.Shared.VideoSourcesAsync()).ToList();
var videoSource = new SystemVideoSourceBlock(new VideoCaptureDeviceSourceSettings(videoSources[0]));

var audioSources = (await DeviceEnumerator.Shared.AudioSourcesAsync()).ToList();
var audioSource = new SystemAudioSourceBlock(audioSources[0].CreateSourceSettings());

// Add video renderer and specify VideoView control
var videoRenderer = new VideoRendererBlock(_pipeline, videoView: VideoView1);

// Add audio renderer
var audioRenderers = (await DeviceEnumerator.Shared.AudioOutputsAsync()).ToList();
var audioRenderer = new AudioRendererBlock(new AudioRendererSettings(audioRenderers[0]));

// Configure MP4 output
var output = new MP4OutputBlock(Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), "output.mp4"));

// Add video and audio tees
var videoTee = new TeeBlock(2, MediaBlockPadMediaType.Video);
var audioTee = new TeeBlock(2, MediaBlockPadMediaType.Audio);

// Connect everything
_pipeline.Connect(videoSource, videoTee);
_pipeline.Connect(audioSource, audioTee);

_pipeline.Connect(videoTee, videoRenderer);
_pipeline.Connect(audioTee, audioRenderer);

_pipeline.Connect(videoTee, output);
_pipeline.Connect(audioTee, output);

// Start MP4 recording
await _pipeline.StartAsync();

๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ํฌํ•จ๋œ ์บก์ฒ˜

์บก์ฒ˜ ํŒŒ์ดํ”„๋ผ์ธ์—๋Š” ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ๋ถ„ํ• ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํ‹ฐ ๋ธ”๋ก์ด ์žˆ์–ด ๋น„๋””์˜ค ์บก์ฒ˜์™€ ํ•จ๊ป˜ ๋น„๋””์˜ค/์˜ค๋””์˜ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ํฌํ•จ๋œ ์บก์ฒ˜ ํŒŒ์ดํ”„๋ผ์ธ

Loading pipeline diagram...

AI ๋น„๋””์˜ค ๋ถ„์„ ๋ฐ ์Œ์„ฑ ์ธ์‹

Media Blocks SDK .NET ํŒŒ์ดํ”„๋ผ์ธ์— AI ์ถ”๋ก , ํ”„๋ผ์ด๋ฒ„์‹œ ๋งˆ์Šคํ‚น, ๊ฐœ๋ฐฉํ˜• ์–ดํœ˜ ๊ฐ์ง€, ์‹œ๊ฐ-์–ธ์–ด ์ดํ•ด, ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰, ์Œ์„ฑ ์ธ์‹์„ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

Media Blocks SDK .NET์€ VisioForge.DotNet.Core.AI์™€ VisioForge.DotNet.Core.AI.Whisper๋ฅผ ํ†ตํ•ด AI ์ฒ˜๋ฆฌ ๋ธ”๋ก์„ C# ๋ฏธ๋””์–ด ํŒŒ์ดํ”„๋ผ์ธ์— ์ง์ ‘ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” OCR, ๋ฒˆํ˜ธํŒ ์ธ์‹, YOLO/RT-DETR/๊ฐœ๋ฐฉํ˜• ์–ดํœ˜ ๊ฐ์ฒด ๊ฐ์ง€, ByteTrack ๊ฐ์ฒด ๋ถ„์„, ์–ผ๊ตด ์ธ์‹, ์ž๋™ PII ๋งˆ์Šคํ‚น, ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ, ์‹œ๊ฐ-์–ธ์–ด ์บก์…”๋‹, ๋น„๋””์˜ค ์ž„๋ฒ ๋”ฉ/์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰, ์‚ฌ์šฉ์ž ์ •์˜ ONNX ์ถ”๋ก ์„ ๊ธฐ์กด ์†Œ์Šค, ๋ Œ๋”๋Ÿฌ, ์ธ์ฝ”๋”, ์ŠคํŠธ๋ฆฌ๋ฐ ์ถœ๋ ฅ ์‚ฌ์ด์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ONNX Runtime ๊ธฐ๋ฐ˜ ๋ธ”๋ก์€ CPU์—์„œ ์‹คํ–‰๋˜๊ฑฐ๋‚˜, ํ•ด๋‹น ๋Ÿฐํƒ€์ž„์ด ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ CUDA, DirectML, CoreML๊ณผ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด ๊ณต๊ธ‰์ž์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Whisper ์Œ์„ฑ-ํ…์ŠคํŠธ ๋ณ€ํ™˜์€ GGML/whisper.cpp๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋˜๊ณ  ๊น”๋”ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์œ„ํ•œ ์„ ํƒ์  Silero VAD๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AI ๋ชจ๋ธ ํŒŒ์ผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๋‹ค์šด๋กœ๋“œํ•˜๋ฏ€๋กœ, ํŒ€์ด ๋ชจ๋ธ ์„ ํƒ๊ณผ ๋ผ์ด์„ ์‹ฑ์„ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ Media Blocks ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋ธ์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ ๋„ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ OCR ๋น„๋””์˜ค, ANPR ์‹œ์Šคํ…œ, ์ธ์› ์นด์šดํŒ…, ํŠธ๋ฆฝ์™€์ด์–ด ๋ถ„์„, ํ”„๋ผ์ด๋ฒ„์‹œ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ๋งˆ์Šคํ‚น, ์ž์—ฐ์–ด ๋น„๋””์˜ค ๊ฒ€์ƒ‰, ๋ผ์ด๋ธŒ ์ž๋ง‰, SRT/VTT ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆํ˜• .NET AI ๋น„๋””์˜ค SDK๊ฐ€ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.

OCR ๋ฐ ANPR

PaddleOCR ๊ธฐ๋ฐ˜ ONNX ๋ธ”๋ก๊ณผ ๊ตฌ์กฐํ™”๋œ ๊ฐ์ง€ ์ด๋ฒคํŠธ๋กœ ๋ผ์ด๋ธŒ ๋น„๋””์˜ค ๋˜๋Š” ํŒŒ์ผ์—์„œ ํ…์ŠคํŠธ์™€ ๋ฒˆํ˜ธํŒ์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

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

YOLOX, YOLOv8 ๋˜๋Š” RT-DETR ๋ชจ๋ธ์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ ByteTrack ID, ๋ผ์ธ ๊ต์ฐจ, ํด๋ฆฌ๊ณค ์˜์—ญ, ์นด์šดํ„ฐ, ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

์–ผ๊ตด ์ธ์‹

์–ผ๊ตด์„ ๊ฐ์ง€ํ•˜๊ณ , ์‹ ์›์„ ๋“ฑ๋กํ•˜๊ณ , FaceGallery์™€ ๋งค์นญํ•˜๋ฉฐ, ์ธ์‹๋œ ์‚ฌ๋žŒ์„ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ์— ๊ทธ๋ ค ๋„ฃ์Šต๋‹ˆ๋‹ค.

๋ฐฐ๊ฒฝ ์ œ๊ฑฐ

ONNX ๋งคํŒ… ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ๊ฒฝ ํ๋ฆผ, ๋‹จ์ƒ‰ ๊ต์ฒด, ์ด๋ฏธ์ง€ ๊ต์ฒด ๋˜๋Š” ํˆฌ๋ช… RGBA ์ถœ๋ ฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ONNX ์ถ”๋ก 

์ž์ฒด ONNX ๋ชจ๋ธ์„ ๋น„๋””์˜ค ํ”„๋ ˆ์ž„์— ์—ฐ๊ฒฐํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณ„ ํ›„์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์›์‹œ ํ…์„œ ์ถœ๋ ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์˜คํ”„๋ผ์ธ Whisper ์ž๋ง‰

Whisper๋กœ ์˜ค๋””์˜ค๋ฅผ ๋กœ์ปฌ์—์„œ ์ „์‚ฌํ•˜๊ณ , Silero VAD๋กœ ์Œ์„ฑ์„ ๋ถ„ํ• ํ•˜๊ณ , ๋ผ์ด๋ธŒ ์ž๋ง‰์„ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜ SRT/VTT ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

PII ๋งˆ์Šคํ‚น

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

๊ฐœ๋ฐฉํ˜• ์–ดํœ˜ ๊ฐ์ง€ ๋ฐ ์‹œ๊ฐ-์–ธ์–ด ์ดํ•ด

๊ณ ์ •๋œ ํด๋ž˜์Šค ๋ชฉ๋ก ๋Œ€์‹  OWLv2 ๋˜๋Š” Grounding DINO๋กœ ์ž์œ  ํ˜•์‹ ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜, Florence-2 ์‹œ๊ฐ-์–ธ์–ด ๋ธ”๋ก์œผ๋กœ ํ”„๋ ˆ์ž„ ์บก์…”๋‹, OCR, ๊ตฌ๋ฌธ ๊ทธ๋ผ์šด๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š” โ€” ๋Ÿฐํƒ€์ž„์— ํ”„๋กฌํ”„ํŠธ์™€ ์‹ ๋ขฐ๋„ ์ž„๊ณ„๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๋งจํ‹ฑ ๋น„๋””์˜ค ๊ฒ€์ƒ‰

๋น„๋””์˜ค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ CLIP ๊ธฐ๋ฐ˜ ์ž„๋ฒ ๋”ฉ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์ถ•ํ•œ ๋‹ค์Œ, ์ž์—ฐ์–ด ์ฟผ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” ํ”„๋ ˆ์ž„์„ ์ฐพ์œผ์„ธ์š”.

๋™์ผํ•œ ๋ธ”๋ก ์ธ์Šคํ„ด์Šค๋Š” Video_Processing_AddBlock/Audio_Processing_AddBlock์„ ํ†ตํ•ด VideoCaptureCoreX ๋ฐ MediaPlayerCoreX์—๋„ ์ง์ ‘ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค โ€” ์ˆ˜๋™์œผ๋กœ MediaBlocksPipeline์„ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Video Capture SDK .NET ๋ฐ Media Player SDK .NET ํŽ˜์ด์ง€์˜ AI ๊ธฐ๋Šฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Live Video Compositor

Live Video Compositor๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OBS์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ ์˜์ƒ ์ œ์ž‘ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜์„ธ์š”. Media Blocks SDK .NET ๊ธฐ๋ฐ˜์˜ ์‹ค์‹œ๊ฐ„ ๋‹ค์ค‘ ์ž…๋ ฅ, ๋‹ค์ค‘ ์ถœ๋ ฅ ์˜์ƒ ํ•ฉ์„ฑ ์—”์ง„์ž…๋‹ˆ๋‹ค. ์นด๋ฉ”๋ผ, ํ™”๋ฉด ์บก์ฒ˜, ๋ฏธ๋””์–ด ํŒŒ์ผ, RTSP/IP ์นด๋ฉ”๋ผ ํ”ผ๋“œ, NDI ์†Œ์Šค๋ฅผ ๋ ˆ์ด์–ด ์ž…๋ ฅ์œผ๋กœ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜๊ณ , GPU ๊ฐ€์† ๋ Œ๋”๋ง์œผ๋กœ ๋ฏน์‹ฑํ•œ ํ›„, ๋…นํ™” ํŒŒ์ผ๊ณผ ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์œผ๋กœ ๋™์‹œ์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ์นด๋ฉ”๋ผ ์ „ํ™˜, PIP(ํ™”๋ฉด ์† ํ™”๋ฉด) ๋ ˆ์ด์•„์›ƒ, ๋ผ์ด๋ธŒ ์˜ค๋ฒ„๋ ˆ์ด, ๋ฐฉ์†ก ํ’ˆ์งˆ์˜ ์˜ค๋””์˜ค ๋ฏน์‹ฑ์„ ์ง€์›ํ•˜๋ฉฐ, ๋ชจ๋“  ๊ธฐ๋Šฅ์„ C# ์ฝ”๋“œ๋กœ ๋Ÿฐํƒ€์ž„์— ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์  ์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ

์ปดํฌ์ง€ํ„ฐ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ๋„ ์–ธ์ œ๋“ ์ง€ ์˜์ƒ ๋ฐ ์˜ค๋””์˜ค ์†Œ์Šค์™€ ์ถœ๋ ฅ ๋Œ€์ƒ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ž…๋ ฅ์€ ๋…๋ฆฝ๋œ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ์†Œ์Šค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ „์ฒด ํ•ฉ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

GPU ๊ฐ€์† ๋ฏน์‹ฑ

ํฌ๋กœ์Šค ํ”Œ๋žซํผ GPU ๊ฐ€์† ๋ Œ๋”๋ง(OpenGL) ๋˜๋Š” CPU ํด๋ฐฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์˜์ƒ ๋ ˆ์ด์–ด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•ฉ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ”ฝ์…€ ๋‹จ์œ„์˜ ์ •๋ฐ€ํ•œ ์‚ฌ๊ฐํ˜•์œผ๋กœ ๊ฐ ์†Œ์Šค๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ , Z-order ์Šคํƒœํ‚น์„ ์ œ์–ดํ•˜๋ฉฐ, ๋ ˆํ„ฐ๋ฐ•์Šค, ์ŠคํŠธ๋ ˆ์น˜, ์ฑ„์šฐ๊ธฐ ๋ฆฌ์‚ฌ์ด์ฆˆ ์ •์ฑ… ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…นํ™” + ์ŠคํŠธ๋ฆฌ๋ฐ + ๋ฏธ๋ฆฌ๋ณด๊ธฐ

์—ฌ๋Ÿฌ ๋Œ€์ƒ์œผ๋กœ ๋™์‹œ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. MP4 ๋˜๋Š” WebM์œผ๋กœ ๋…นํ™”ํ•˜๊ณ , YouTube ๋ฐ Facebook์œผ๋กœ ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ณ , Decklink ํ•˜๋“œ์›จ์–ด๋กœ ์˜์ƒ์„ ์ „์†กํ•˜๊ณ , ํ™”๋ฉด์— ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์„ ๋‹จ์ผ ์ปดํฌ์ง€ํ„ฐ ์ธ์Šคํ„ด์Šค์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ ์˜ค๋ฒ„๋ ˆ์ด ๋ฐ ํšจ๊ณผ

ํ…์ŠคํŠธ ์˜ค๋ฒ„๋ ˆ์ด, ์ด๋ฏธ์ง€ ์›Œํ„ฐ๋งˆํฌ, ํ•ฉ์„ฑ ํ›„ ์˜์ƒ ํšจ๊ณผ๋ฅผ ๋™์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŒŒ์ดํ”„๋ผ์ธ์„ ๋‹ค์‹œ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์˜ค๋””์˜ค VU ๋ฏธํ„ฐ๋ง์œผ๋กœ ๋ผ์ด๋ธŒ ํ”„๋กœ๋•์…˜ ์ค‘ ์ „๋ฌธ๊ฐ€ ์ˆ˜์ค€์˜ ๋ ˆ๋ฒจ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

C#์œผ๋กœ Live Video Compositor ์„ค์ •ํ•˜๊ธฐ

C#
// Create the Live Video Compositor (cross-platform, GPU-accelerated)
var settings = new LiveVideoCompositorSettings(1920, 1080, new VideoFrameRate(25));
var compositor = new LiveVideoCompositor(settings);

// Add a camera source (full-screen background layer)
var cameraInput = new LVCVideoAudioInput(
    "Camera", compositor,
    new SystemVideoSourceBlock(cameraSettings),
    videoInfo, audioInfo, new Rect(0, 0, 1920, 1080),
    autostart: true);
await compositor.Input_AddAsync(cameraInput);

// Start compositing โ€” sources and outputs can be added/removed at any time
await compositor.StartAsync();

// Dynamically add screen capture as picture-in-picture overlay
var screenInput = new LVCVideoInput(
    "Screen", compositor,
    new ScreenSourceBlock(screenSettings), screenInfo,
    new Rect(1400, 50, 500, 300), autostart: true);
screenInput.ZOrder = 1;
await compositor.Input_AddAsync(screenInput);

// Dynamically add MP4 recording output while compositing is running
var mp4Output = new LVCVideoAudioOutput(
    "Recording", compositor,
    new MP4OutputBlock(mp4Settings), autostart: true);
await compositor.Output_AddAsync(mp4Output);

// Dynamically remove the screen overlay
await compositor.Input_RemoveAsync(screenInput.ID);

// Dynamically remove the recording output
await compositor.Output_RemoveAsync(mp4Output.ID);

Live Video Compositor๋Š” ์นด๋ฉ”๋ผ, ํ™”๋ฉด ์บก์ฒ˜, ๋ฏธ๋””์–ด ํŒŒ์ผ, RTSP/IP ์นด๋ฉ”๋ผ, NDI, Decklink ๋ฐ ๋ชจ๋“  ๋…นํ™”ยท์ŠคํŠธ๋ฆฌ๋ฐ ์ถœ๋ ฅ์„ ํฌํ•จํ•˜์—ฌ Media Blocks SDK .NET์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์ž…๋ ฅ ์†Œ์Šค์™€ ์ถœ๋ ฅ ํ˜•์‹๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

Unity ์ง€์›

๋‹จ ํ•˜๋‚˜์˜ ์ฆ‰์‹œ ์ž„ํฌํŠธ ๊ฐ€๋Šฅํ•œ .unitypackage๋กœ ์™„์ „ํ•œ Media Blocks SDK .NET์„ Unity 6์— ๋„์ž…ํ•˜์„ธ์š”. ์บก์ฒ˜, ๋””์ฝ”๋”ฉ ๋ฐ ์ธ์ฝ”๋”ฉ, ํšจ๊ณผ, ๋ฏน์‹ฑ, ๋…นํ™”, ์ŠคํŠธ๋ฆฌ๋ฐ ๋“ฑ ์–ด๋–ค ํŒŒ์ดํ”„๋ผ์ธ์ด๋“  ๊ตฌ์ถ•ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Unity RawImage์— ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์—๋Š” ๋ฏธ๋””์–ด ํŒŒ์ผ ํ”Œ๋ ˆ์ด์–ด์™€ ๋ผ์ด๋ธŒ RTSP/IP ์นด๋ฉ”๋ผ ๋ทฐ์–ด, ๋‘ ๊ฐœ์˜ ์ค€๋น„๋œ ์ƒ˜ํ”Œ ์”ฌ์ด ์‹œ์ž‘์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๊ฒƒ์ด ๊ตฌ์ถ• ๊ฐ€๋Šฅํ•œ ํ•œ๊ณ„๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋ˆ„์  ํŒจํ‚ค์ง€๊ฐ€ Windows, Android, macOS, iOS๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฏ€๋กœ, ํ•œ ๋ฒˆ ์ž„ํฌํŠธํ•œ ๋’ค Build Target๋งŒ ์ „ํ™˜ํ•˜์—ฌ ๋นŒ๋“œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Unity ์† ์™„์ „ํ•œ SDK

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

ํ•˜๋‚˜์˜ ๋ˆ„์  ํŒจํ‚ค์ง€

Windows, Android, macOS, iOS ๋„ค์ดํ‹ฐ๋ธŒ ๋Ÿฐํƒ€์ž„์ด ๋‹จ์ผ .unitypackage ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Build Target์„ ์ „ํ™˜ํ•˜๋ฉด Unity๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋„ค์ดํ‹ฐ๋ธŒ ๋Ÿฐํƒ€์ž„์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ค€๋น„๋œ ์ƒ˜ํ”Œ ์”ฌ

ํฌํ•จ๋œ SimplePlayer(๋ฏธ๋””์–ด ํŒŒ์ผ) ๋ฐ RTSPViewer(๋ผ์ด๋ธŒ IP ์นด๋ฉ”๋ผ) ์”ฌ์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ VisioForgeVideoView ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ์„ RawImage์— ๋ Œ๋”๋งํ•˜๋ฉฐ, Stretch, Letterbox, Crop ์ข…ํšก๋น„ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ช‡ ๋ถ„ ๋งŒ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ๋ชจ๋ฐ”์ผ

๋ชจ๋ฐ”์ผ ์žฌ์ƒ์€ ํ”Œ๋žซํผ ํ•˜๋“œ์›จ์–ด ์ฝ”๋ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค โ€” Android์˜ MediaCodec๊ณผ iOS์˜ VideoToolbox. ํ”„๋ ˆ์ž„์€ ํ• ๋‹น ์—†๋Š” ๋”๋ธ” ๋ฒ„ํผ ๊ฒฝ๋กœ๋กœ GPU ํ…์Šค์ฒ˜์— ์—…๋กœ๋“œ๋˜์–ด ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๊ฐ€๋น„์ง€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ถ€๋“œ๋Ÿฌ์šด ๋ผ์ด๋ธŒ ๋น„๋””์˜ค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์”ฌ์˜ ์–ด๋””์—๋“  ๋ Œ๋”๋ง

๊ฐ ํ”„๋ ˆ์ž„์€ Unity Texture2D์— ์—…๋กœ๋“œ๋˜๋ฏ€๋กœ ๋น„๋””์˜ค๊ฐ€ UI์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. RawImage์— ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜, ํ™”๋ฉด, ๊ด‘๊ณ ํŒ, ๊ณก๋ฉด ๋“ฑ ๋ชจ๋“  3D ์˜ค๋ธŒ์ ํŠธ์˜ ๋จธํ‹ฐ๋ฆฌ์–ผ์— ๋งคํ•‘ํ•˜์—ฌ ์”ฌ์˜ ์–ด๋””์—๋“  ๋น„๋””์˜ค๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Unity์—์„œ ์บก์ฒ˜, ๋…นํ™” ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ

์žฌ์ƒ์„ ๋„˜์–ด์„ญ๋‹ˆ๋‹ค: ๋””๋ฐ”์ด์Šค ์นด๋ฉ”๋ผ, ๋งˆ์ดํฌ, IP / RTSP ์ŠคํŠธ๋ฆผ์„ ๊ฐ€์ ธ์˜ค๊ณ , MP4, MKV ๋˜๋Š” WebM์œผ๋กœ ๋…นํ™”ํ•˜๋ฉฐ, RTMP, SRT, HLS ๋˜๋Š” ๋‚ด์žฅ RTSP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐฉ์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ์ด ๋ชจ๋“  ๊ฒƒ์ด ๋ฐ์Šคํฌํ†ฑ๊ณผ ๋ชจ๋ฐ”์ผ์˜ Unity ๋นŒ๋“œ ์•ˆ์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ง€์› ํ”Œ๋žซํผ:WindowsAndroidmacOSiOS
ํ™œ์šฉ ๋ถ„์•ผ:VR / AR ๋น„๋””์˜ค๋””์ง€ํ„ธ ์‚ฌ์ด๋‹ˆ์ง€IP ์นด๋ฉ”๋ผ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ๋น„๋””์˜ค ์›”์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ ๊ต์œก๊ฒŒ์ž„ ๋‚ด ๋น„๋””์˜ค๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ๋…นํ™”

Media Blocks ํŒŒ์ดํ”„๋ผ์ธ์„ Unity RawImage์— ๋ Œ๋”๋งํ•˜๊ธฐ

C#
// In your MonoBehaviour (e.g. Start()) โ€” the bundled native runtime
// is configured automatically before the first scene loads.
VisioForgeEnvironment.InitializeSdk();

// Build any Media Blocks pipeline. A file source is shown here;
// swap in RTSPSourceBlock, a camera, screen capture, etc.
_pipeline = new MediaBlocksPipeline();

// ignoreMediaInfoReader skips the gst-discoverer pre-probe (required under Unity).
var settings = await UniversalSourceSettings.CreateAsync(
    filePath, ignoreMediaInfoReader: true);
var source = new UniversalSourceBlock(settings);

// RGBA frames are delivered to a BufferSinkBlock...
var videoSink = new BufferSinkBlock(VideoFormatX.RGBA);
_pipeline.Connect(source.VideoOutput, videoSink.Input);
_pipeline.Connect(source.AudioOutput, new AudioRendererBlock().Input);

// ...and uploaded into a Unity Texture2D by VisioForgeVideoView,
// which handles the aspect mode and vertical flip for you.
videoSink.OnVideoFrameBuffer += _videoView.OnFrameBuffer;

await _pipeline.StartAsync();

Unity 6(6000.x)์—์„œ ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .NET Standard 2.1 API Compatibility Level์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Unity ๋ฌธ์„œ ๋ณด๊ธฐ โ†’

๋ธ”๋ก, ์ฝ”๋ฑ ๋ฐ ์žฅ์น˜ ์ „์ฒด ๋ ˆํผ๋Ÿฐ์Šค

์ผ๋ฐ˜ ๊ธฐ๋Šฅ

  • โ€ข ์˜ค๋””์˜ค/๋น„๋””์˜ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ
  • โ€ข ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ์บก์ฒ˜
  • โ€ข Bitmap ํด๋ž˜์Šค, BMP, JPEG ๋ฐ PNG ํŒŒ์ผ๋กœ ํ”„๋ ˆ์ž„ ์บก์ฒ˜
  • โ€ข ๋น„๋””์˜ค ์บก์ฒ˜ ์žฅ์น˜ ์ œ์–ด
  • โ€ข ๋ชจ์…˜ ๊ฐ์ง€
  • โ€ข ์‚ฌ์šฉ์ž ์ง€์ • ์ธํ„ฐํŽ˜์ด์Šค ์ง€์›
  • โ€ข PIP(Picture-In-Picture)
  • โ€ข ๋‹ค์ค‘ ์ถœ๋ ฅ ํ™”๋ฉด ์ง€์›
  • โ€ข ์Šคํ”ผ์ปค์—์„œ ์˜ค๋””์˜ค ์บก์ฒ˜
  • โ€ข ์˜ค๋””์˜ค/๋น„๋””์˜ค ํŒŒ์ผ ํƒœ๊ทธ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ง€์›

์ง€์›๋˜๋Š” ์ž…๋ ฅ ์žฅ์น˜

  • โ€ข USB ์›น ์นด๋ฉ”๋ผ ๋ฐ ์บก์ฒ˜ ์žฅ์น˜(4K ํฌํ•จ)
  • โ€ข JPEG/MJPEG, MPEG-4 ๋ฐ H.264 HTTP/RTSP/RTMP IP ์นด๋ฉ”๋ผ/์„œ๋ฒ„
  • โ€ข DV ๋ฐ HDV MPEG-2 ์บ ์ฝ”๋”
  • โ€ข PCI ์บก์ฒ˜ ์นด๋“œ
  • โ€ข TV ํŠœ๋„ˆ(๋‚ด๋ถ€ MPEG ์ธ์ฝ”๋” ํฌํ•จ/๋ฏธํฌํ•จ)
  • โ€ข IP ์นด๋ฉ”๋ผ์šฉ HD ํ˜•์‹ ์ง€์›
  • โ€ข PTZ ์ง€์› ONVIF IP ์นด๋ฉ”๋ผ
  • โ€ข Blackmagic Decklink ์žฅ์น˜
  • โ€ข ์˜ค๋””์˜ค ์บก์ฒ˜ ์žฅ์น˜ ๋ฐ ์‚ฌ์šด๋“œ ์นด๋“œ
  • โ€ข ASIO ์žฅ์น˜

์ „๋ฌธ ํ•˜๋“œ์›จ์–ด

  • โ€ข Blackmagic Decklink ์ž…๋ ฅ/์ถœ๋ ฅ ์ง€์›
  • โ€ข FLIR/Teledyne ์นด๋ฉ”๋ผ(USB3Vision/GigE)
  • โ€ข Basler ์นด๋ฉ”๋ผ(USB3Vision/GigE)
  • โ€ข DV ๋ฐ HDV MPEG-2 ์บ ์ฝ”๋”
  • โ€ข PCI ์บก์ฒ˜ ์นด๋“œ
  • โ€ข TV ํŠœ๋„ˆ(MPEG ์ธ์ฝ”๋” ํฌํ•จ/๋ฏธํฌํ•จ)
  • โ€ข PTZ ์ง€์› ONVIF IP ์นด๋ฉ”๋ผ
  • โ€ข ASIO ์žฅ์น˜

์†Œ์Šค

  • โ€ข Allied Vision ์นด๋ฉ”๋ผ
  • โ€ข ์• ๋‹ˆ๋ฉ”์ด์…˜ GIF
  • โ€ข Basler ์นด๋ฉ”๋ผ(USB3Vision/GigE)
  • โ€ข CDG ๋…ธ๋ž˜๋ฐฉ
  • โ€ข ํด๋ฐฑ ์Šค์œ„์น˜
  • โ€ข GenICam(์‚ฐ์—…์šฉ ์นด๋ฉ”๋ผ)
  • โ€ข HTTP
  • โ€ข HTTP MJPEG
  • โ€ข ์ด๋ฏธ์ง€ ์‹œํ€€์Šค
  • โ€ข ๋กœ์ปฌ ํŒŒ์ผ
  • โ€ข ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ
  • โ€ข NDI
  • โ€ข PulseAudio
  • โ€ข Raspberry Pi ์นด๋ฉ”๋ผ
  • โ€ข RTMP
  • โ€ข RTSP
  • โ€ข RTSP RAW
  • โ€ข ํ™”๋ฉด ์บก์ฒ˜
  • โ€ข SRT
  • โ€ข ์‹œ์Šคํ…œ ์˜ค๋””์˜ค
  • โ€ข ์‹œ์Šคํ…œ ๋น„๋””์˜ค
  • โ€ข ํ…Œ์ŠคํŠธ ์‹ ํ˜ธ
  • โ€ข UDP/RTP
  • โ€ข URI(ํŒŒ์ผ/๋„คํŠธ์›Œํฌ)

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

  • โ€ข ์ฆํญ
  • โ€ข ๋ฐธ๋Ÿฐ์Šค
  • โ€ข ์ƒ˜ํ”Œ ํ˜•์‹ ๋ณ€ํ™˜๊ธฐ
  • โ€ข ๋กœ๋“œ ๋…ธ๋ฉ€๋ผ์ด์ €
  • โ€ข ๋ฏน์„œ
  • โ€ข ๋ฆฌ์ƒ˜ํ”Œ๋Ÿฌ
  • โ€ข ์ƒ˜ํ”Œ ๊ทธ๋ž˜๋ฒ„
  • โ€ข ํƒ€์ž„์Šคํƒฌํ”„ ๋ณด์ •๊ธฐ
  • โ€ข Chebyshev ๋Œ€์—ญ ํ†ต๊ณผ ๊ฑฐ๋ถ€
  • โ€ข Chebyshev ์ œํ•œ
  • โ€ข ์••์ถ•๊ธฐ/ํ™•์žฅ๊ธฐ
  • โ€ข Csound ํ•„ํ„ฐ
  • โ€ข EBU R128 ๋ ˆ๋ฒจ
  • โ€ข ์—์ฝ”
  • โ€ข ์ดํ€„๋ผ์ด์ €(10๋ฐด๋“œ)
  • โ€ข ์ดํ€„๋ผ์ด์ €(ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ)
  • โ€ข HRTF ๋ Œ๋”
  • โ€ข ๋…ธ๋ž˜๋ฐฉ
  • โ€ข ๋ฌด์Œ ์ œ๊ฑฐ
  • โ€ข ์ž”ํ–ฅ
  • โ€ข ์Šค์ผ€์ผ/ํ…œํฌ
  • โ€ข ๋ณผ๋ฅจ
  • โ€ข VU ๋ฏธํ„ฐ
  • โ€ข ์™€์ด๋“œ ์Šคํ…Œ๋ ˆ์˜ค

๋ฐ”์ฝ”๋“œ ๋ฆฌ๋”

  • โ€ข QR ์ฝ”๋“œ
  • โ€ข UPC-A, UPC-E
  • โ€ข EAN-8, EAN-13
  • โ€ข Code 39
  • โ€ข Code 93
  • โ€ข Code 128
  • โ€ข Codabar
  • โ€ข ITF
  • โ€ข RSS-14
  • โ€ข Data Matrix
  • โ€ข Aztec
  • โ€ข PDF-417

์˜ค๋””์˜ค ์ธ์ฝ”๋”

  • โ€ข AAC
  • โ€ข ADPCM
  • โ€ข ALAW
  • โ€ข AptX
  • โ€ข FLAC
  • โ€ข MP2
  • โ€ข MP3
  • โ€ข OPUS
  • โ€ข Speex
  • โ€ข Vorbis
  • โ€ข WAV
  • โ€ข Wavpack
  • โ€ข WMA (Windows Media Audio)

๋น„๋””์˜ค ์ธ์ฝ”๋”(CPU/GPU)

  • โ€ข AV1
  • โ€ข DV
  • โ€ข GIF
  • โ€ข H.264
  • โ€ข H.265/HEVC
  • โ€ข MJPEG
  • โ€ข MPEG-2
  • โ€ข MPEG-4
  • โ€ข PNG
  • โ€ข Theora
  • โ€ข VP8/VP9 (VPX)
  • โ€ข WMV (Windows Media Video)
  • โ€ข NVENC, AMD, Intel ํ•˜๋“œ์›จ์–ด ์ธ์ฝ”๋” ์ง€์›
  • โ€ข iOS/macOS/Android ํ•˜๋“œ์›จ์–ด ์ธ์ฝ”๋” ์ง€์›

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

  • โ€ข ์—์ด์ง•
  • โ€ข ์•ŒํŒŒ ๊ฒฐํ•ฉ
  • โ€ข ์ž๋™ ๋””์ธํ„ฐ๋ ˆ์ด์Šค
  • โ€ข Bayer to RGB
  • โ€ข ํฌ๋กœ๋งˆ ํ‚ค
  • โ€ข ์ฝ”๋ฑ ์•ŒํŒŒ ๋””๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ
  • โ€ข ์ƒ‰์ƒ ํšจ๊ณผ
  • โ€ข ๋””์ธํ„ฐ๋ ˆ์ด์Šค
  • โ€ข ๋‹ค์ด์Šค
  • โ€ข ๊ฐ€์žฅ์ž๋ฆฌ ๊ฐ์ง€
  • โ€ข ์–ด์•ˆ
  • โ€ข ๋’ค์ง‘๊ธฐ/ํšŒ์ „
  • โ€ข ๊ฐ๋งˆ
  • โ€ข ๊ฐ€์šฐ์‹œ์•ˆ ๋ธ”๋Ÿฌ
  • โ€ข ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ
  • โ€ข ์ด๋ฏธ์ง€ ์˜ค๋ฒ„๋ ˆ์ด
  • โ€ข ์ด๋ฏธ์ง€ ์˜ค๋ฒ„๋ ˆ์ด Cairo
  • โ€ข ์ธํ„ฐ๋ ˆ์ด์Šค
  • โ€ข ํ‚ค ํ”„๋ ˆ์ž„ ๊ฐ์ง€๊ธฐ
  • โ€ข LUT ํ”„๋กœ์„ธ์„œ
  • โ€ข ๋ฏธ๋Ÿฌ
  • โ€ข ๋ฌด๋น™ ๋ธ”๋Ÿฌ
  • โ€ข ๋ฌด๋น™ ์—์ฝ”
  • โ€ข ๋ฌด๋น™ ์คŒ ์—์ฝ”
  • โ€ข ๊ด‘ํ•™ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ‘๋ฐฑ
  • โ€ข ์˜ค๋ฒ„๋ ˆ์ด ๊ด€๋ฆฌ์ž
  • โ€ข ์›๊ทผ
  • โ€ข ํ•€์น˜
  • โ€ข ์˜์‚ฌ 3D
  • โ€ข QR ์ฝ”๋“œ ์˜ค๋ฒ„๋ ˆ์ด
  • โ€ข ํฌ๊ธฐ ์กฐ์ •
  • โ€ข ์ƒ˜ํ”Œ ๊ทธ๋ž˜๋ฒ„
  • โ€ข ์†Œ๋ฒจ ์—์ง€
  • โ€ข ๊ตฌ
  • โ€ข ์ •์‚ฌ๊ฐํ˜•
  • โ€ข ์ŠคํŠธ๋ ˆ์น˜
  • โ€ข ํ…์ŠคํŠธ ์˜ค๋ฒ„๋ ˆ์ด
  • โ€ข ํ„ฐ๋„
  • โ€ข ํŠธ์›”
  • โ€ข ๋น„๋””์˜ค ๋ฐธ๋Ÿฐ์Šค
  • โ€ข ํ”ฝ์…€ ํ˜•์‹ ๋ณ€ํ™˜๊ธฐ
  • โ€ข ๋น„๋””์˜ค ๋ฏน์„œ
  • โ€ข ์™œ๊ณก๋œ ๋ฏธ๋Ÿฌ
  • โ€ข ๋ฌผ๊ฒฐ
  • โ€ข ์คŒ ๋ฐ•์Šค

ํŒŒ์ผ ์‹ฑํฌ

  • โ€ข ASF
  • โ€ข AVI
  • โ€ข DASH
  • โ€ข HLS
  • โ€ข HTTP MJPEG ๋ผ์ด๋ธŒ
  • โ€ข MKV (Matroska)
  • โ€ข MOV (QuickTime)
  • โ€ข MP4
  • โ€ข MPEG-PS
  • โ€ข MPEG-TS
  • โ€ข MXF
  • โ€ข OGG
  • โ€ข WAV
  • โ€ข WebM

๋„คํŠธ์›Œํฌ ์ŠคํŠธ๋ฆฌ๋ฐ

  • โ€ข Facebook Live
  • โ€ข HLS
  • โ€ข NDI
  • โ€ข RTMP
  • โ€ข RTSP
  • โ€ข Shoutcast
  • โ€ข SRT
  • โ€ข YouTube Live

Blackmagic Decklink

  • โ€ข ์˜ค๋””์˜ค ์‹ฑํฌ
  • โ€ข ์˜ค๋””์˜ค ์†Œ์Šค
  • โ€ข ๋น„๋””์˜ค ์‹ฑํฌ
  • โ€ข ๋น„๋””์˜ค ์†Œ์Šค

์˜ค๋””์˜ค ์‹œ๊ฐํ™” ๋„๊ตฌ

  • โ€ข Bumpscope
  • โ€ข Corona
  • โ€ข Infinite
  • โ€ข Jakdaw
  • โ€ข Jess
  • โ€ข LV Analyzer
  • โ€ข LV Scope
  • โ€ข Oinksie
  • โ€ข Spacescope
  • โ€ข Spectrascope
  • โ€ข Synaescope
  • โ€ข Wavescope

๋น„๋””์˜ค ๋””์ฝ”๋”

  • โ€ข AV1 ๋””์ฝ”๋”
  • โ€ข H.264 ๋””์ฝ”๋”
  • โ€ข HEVC ๋””์ฝ”๋”
  • โ€ข JPEG ๋””์ฝ”๋”
  • โ€ข VP8 ๋””์ฝ”๋”
  • โ€ข VP9 ๋””์ฝ”๋”
  • โ€ข NVIDIA, Intel ๋ฐ AMD ๊ฐ€์† ๋””์ฝ”๋”
  • โ€ข Android ํ•˜๋“œ์›จ์–ด ๋””์ฝ”๋”
  • โ€ข iOS ํ•˜๋“œ์›จ์–ด ๋””์ฝ”๋”

ํŠน์ˆ˜ ๋ธ”๋ก

  • โ€ข ๋ฐ”์ฝ”๋“œ ๊ฐ์ง€๊ธฐ
  • โ€ข ๋ฐ์ดํ„ฐ ํ”„๋กœ์„ธ์„œ
  • โ€ข ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ ๊ทธ๋ž˜๋ฒ„
  • โ€ข ๋””๋ฒ„๊ทธ ํƒ€์ž„์Šคํƒฌํ”„
  • โ€ข ๋ณตํ˜ธํ™”๊ธฐ
  • โ€ข ์•”ํ˜ธํ™”๊ธฐ
  • โ€ข ๋ฉ€ํ‹ฐ ํ
  • โ€ข Null ๋ Œ๋”๋Ÿฌ
  • โ€ข ํ
  • โ€ข SRTP ๋ณตํ˜ธํ™”๊ธฐ
  • โ€ข SRTP ์•”ํ˜ธํ™”๊ธฐ
  • โ€ข ํ‹ฐ(๋ถ„๋ฐฐ๊ธฐ)

์„ค์น˜

NuGet์„ ํ†ตํ•œ ๋น ๋ฅธ ์„ค์น˜

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— SDK๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•˜์„ธ์š”:

Install-Package VisioForge.DotNet.MediaBlocks

๋˜๋Š” Visual Studio์˜ NuGet ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์—์„œ VisioForge.DotNet.MediaBlocks ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”. ์„ค์น˜ ๊ฐ€์ด๋“œ ๋ณด๊ธฐ โ†’

๊ฐ€๊ฒฉ

์—ฐ๊ฐ„ ๊ตฌ๋… ๋˜๋Š” ํ‰์ƒ ๋ผ์ด์„ ์Šค ์ค‘์—์„œ ์„ ํƒํ•˜์„ธ์š”

์ผ๋ฐ˜ ๋ผ์ด์„ ์Šค

โ‚ฌ500๋…„
  • 1๋…„ ๋™์•ˆ ๋ฌด๋ฃŒ ๋งˆ์ด๋„ˆ ๋ฐ ๋ฉ”์ด์ € ์—…๊ทธ๋ ˆ์ด๋“œ
  • ๊ตฌ๋… ์ข…๋ฃŒ ํ›„์—๋„ SDK ๊ธฐ๋Šฅ ์œ ์ง€
  • ์šฐ์„  ์ง€์›
  • ๋งค๋…„ ์ž๋™ ๊ฐฑ์‹ (์–ธ์ œ๋“ ์ง€ ์ทจ์†Œ ๊ฐ€๋Šฅ)
  • 200๊ฐœ ์ด์ƒ์˜ ๋ชจ๋“  ์ฒ˜๋ฆฌ ๋ธ”๋ก ํฌํ•จ
์ตœ๊ณ ์˜ ๊ฐ€์น˜

ํ‰์ƒ ๋ผ์ด์„ ์Šค

โ‚ฌ1,500/ ์ผํšŒ์„ฑ
ํ‰์ƒ ๋ผ์ด์„ ์Šค ๊ตฌ๋งค
  • ํ‰์ƒ ๋ฌด์ œํ•œ ์—…๋ฐ์ดํŠธ
  • ์šฐ์„  ์ง€์› ๋ฐ ์ˆ˜์ •
  • ์ผํšŒ์„ฑ ๊ฒฐ์ œ
  • ๋ชจ๋“  ํ–ฅํ›„ ๊ธฐ๋Šฅ ํฌํ•จ
  • 200๊ฐœ ์ด์ƒ์˜ ๋ชจ๋“  ์ฒ˜๋ฆฌ ๋ธ”๋ก ํฌํ•จ

๋น„์ƒ์—…์  ์šฉ๋„๋กœ๋Š” ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ ๋ผ์ด์„ ์Šค๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด ๋ฌธ์˜ํ•ด ์ฃผ์„ธ์š”.

๋ชจ๋“  ๋ผ์ด์„ ์Šค์—๋Š” ๋กœ์—ดํ‹ฐ ์—†๋Š” ๋ฐฐํฌ ๊ถŒํ•œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ ๋ผ์ด์„ ์Šค

์ด SDK์˜ ์†Œ์Šค ์ฝ”๋“œ ๋ผ์ด์„ ์Šค๋Š” ์š”์ฒญ ์‹œ ์ด์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ ๋ฐ ๋ผ์ด์„ ์Šค ์กฐ๊ฑด์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋ ค๋ฉด ์˜์—…ํŒ€์— ๋ฌธ์˜ํ•˜์„ธ์š”.

์†Œ์Šค ์ฝ”๋“œ ๋ผ์ด์„ ์Šค ์š”์ฒญ

๐Ÿ’ฐ ๋ฒˆ๋“ค ํŒจํ‚ค์ง€๋กœ ๋” ๋งŽ์ด ์ ˆ์•ฝํ•˜์„ธ์š”

์ด ์ œํ’ˆ์€ ๋น„์šฉ ํšจ์œจ์ ์ธ ๋ฒˆ๋“ค ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ œํ’ˆ์„ ๋ฐ›๊ณ  ์ตœ๋Œ€ 71% ์ ˆ์•ฝํ•˜์„ธ์š”!

.NET Bundle Professional

์—ฐ๊ฐ„:โ‚ฌ700.00
ํ‰์ƒ:โ‚ฌ1800.00

์ตœ๋Œ€ 71% ์ ˆ์•ฝ

ํฌํ•จ ์‚ฌํ•ญ:

  • โ€ขVideo Capture SDK .NET (Professional)
  • โ€ขMedia Player SDK .NET (Professional)
  • โ€ขVideo Edit SDK .NET (Professional)
  • โ€ขVideo Edit SDK FFmpeg .NET (Professional)
  • โ€ขMedia Blocks SDK .NET

.NET Bundle Premium

์—ฐ๊ฐ„:โ‚ฌ1000.00
ํ‰์ƒ:โ‚ฌ2500.00

์ตœ๋Œ€ 70% ์ ˆ์•ฝ

ํฌํ•จ ์‚ฌํ•ญ:

  • โ€ขVideo Capture SDK .NET (Premium)
  • โ€ขMedia Player SDK .NET (Premium)
  • โ€ขVideo Edit SDK .NET (Premium)
  • โ€ขVideo Edit SDK FFmpeg .NET (Premium)
  • โ€ขMedia Blocks SDK .NET

์‹œ์Šคํ…œ ์š”๊ตฌ ์‚ฌํ•ญ

ํ”Œ๋žซํผ ์ „๋ฐ˜์˜ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ตœ์†Œ ์š”๊ตฌ ์‚ฌํ•ญ

์šด์˜ ์ฒด์ œ
  • โ€ขWindows 10 / 11 (32๋น„ํŠธ ๋ฐ 64๋น„ํŠธ)
  • โ€ขWindows 8/8.1, Windows 7 SP1
  • โ€ขWindows Server 2016 ์ด์ƒ
  • โ€ขmacOS 12 ์ด์ƒ
  • โ€ขUbuntu 22.04 / 24.04
  • โ€ขAndroid 8 ์ด์ƒ
  • โ€ขiOS 12 ์ด์ƒ
.NET Framework
  • โ€ข.NET Framework 4.6.1 ์ด์ƒ
  • โ€ข.NET Core 3.1
  • โ€ข.NET 5/6/7/8/9/10
ํ•˜๋“œ์›จ์–ด
  • โ€ข์ตœ์†Œ 2GB RAM(4GB ์ด์ƒ ๊ถŒ์žฅ)
  • โ€ขIntel Core i5 ๋˜๋Š” AMD ๋™๊ธ‰ ํ”„๋กœ์„ธ์„œ
  • โ€ขGPU ๊ฐ€์† ์ง€์› ์„ ํƒ ์‚ฌํ•ญ(NVIDIA/Intel/AMD)
UI ํ”„๋ ˆ์ž„์›Œํฌ
  • โ€ขWinForms
  • โ€ขWPF
  • โ€ขWinUI 3 for Desktop
  • โ€ขAvalonia
  • โ€ขGTK#
  • โ€ขMAUI
  • โ€ขXamarin.Android/iOS/Mac
  • โ€ขUnity

๋ฌธ์„œ ๋ฐ ๋ฆฌ์†Œ์Šค

Media Blocks SDK๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ

AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ

Claude Code, Cursor, GitHub Copilot, Gemini CLI, OpenAI Codex ๊ฐ™์€ AI ์—์ด์ „ํŠธ์™€ ํ•จ๊ป˜ ๊ฐœ๋ฐœ ์ค‘์ด์‹ ๊ฐ€์š”? VisioForge๋Š” Media Blocks SDK .NET์— ๋Œ€ํ•œ ๊ธฐ๊ณ„ ํŒ๋… ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์—์ด์ „ํŠธ๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ†ตํ•ฉ์„ ์ •ํ™•ํžˆ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ NuGet ํŒจํ‚ค์ง€, ๋ผ์ด์„ ์Šค ๋“ฑ๋ก, ํ”„๋กœ์ ํŠธ ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ถ”์ธกํ•ด์•ผ ํ•  ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐฐํฌ ์„ธ๋ถ€ ์‚ฌํ•ญ๊นŒ์ง€.

์‹ค์‹œ๊ฐ„ API ์ฟผ๋ฆฌ ๋ฐ ํด๋ž˜์Šค ์กฐํšŒ
ํ”Œ๋žซํผ๋ณ„ ํ†ตํ•ฉ ํ”Œ๋ ˆ์ด๋ถ
ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐฐํฌ ๋ ˆ์‹œํ”ผ
์ „์ฒด ๋ฌธ์„œ๋ฅผ llms.txt๋กœ

MCP ์„œ๋ฒ„ ์—ฐ๊ฒฐ

MCP

์—์ด์ „ํŠธ์— VisioForge MCP ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ƒํ™ฉ์— ๋งž๋Š” ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ๊ฒ€์ƒ‰, ํด๋ž˜์Šค ๋ฐ ๋ฉค๋ฒ„ ์กฐํšŒ, ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œ ์˜ˆ์ œ ๊ฐ€์ ธ์˜ค๊ธฐ, ๋ฐฐํฌ ๊ฐ€์ด๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์—๋””ํ„ฐ ์•ˆ์—์„œ ๋ฐ”๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Claude Code

claude mcp add --transport http visioforge-sdk https://mcp.visioforge.com/mcp

VS Code (.vscode/mcp.json)

{ "servers": { "visioforge-sdk": { "type": "http", "url": "https://mcp.visioforge.com/mcp" } } }
MCP ์„œ๋ฒ„ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

Agent Skill ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

Agent Skills

SDK์™€ ํ”Œ๋žซํผ ์กฐํ•ฉ๋งˆ๋‹ค ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Media Blocks SDK .NET์˜ ๊ฒฝ์šฐ ํ”Œ๋žซํผ๋ณ„๋กœ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” SKILL.md(ํ•„์š”ํ•œ NuGet ํŒจํ‚ค์ง€, ๋ผ์ด์„ ์Šค ์ฝ”๋“œ, csproj ์„ค์ •, ํ”ํ•œ ํ•จ์ •)์™€ ์—์ด์ „ํŠธ๊ฐ€ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘๋™ํ•˜๋Š” ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Claude Code, Cursor, OpenAI Codex, Gemini CLI ๋“ฑ 30๊ฐœ ์ด์ƒ์˜ ์—์ด์ „ํŠธ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค(Cloudflare Agent Skills RFC).

์—์ด์ „ํŠธ์— ์Šคํ‚ฌ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •

https://www.visioforge.com/.well-known/agent-skills/index.json
์Šคํ‚ฌ ๋ชฉ๋ก๊ณผ ๋„๊ตฌ๋ณ„ ์„ค์ • ๋ณด๊ธฐ

์ „์ฒด ๋ฌธ์„œ๋ฅผ ์—์ด์ „ํŠธ์— ๋„˜๊ธฐ๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”? ์ผ๋ฐ˜ ๋งˆํฌ๋‹ค์šด์œผ๋กœ๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค: /llms.txt ยท /llms-full.txt

์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”?

๋ฌด๋ฃŒ ํ‰๊ฐ€ํŒ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์˜ค๋Š˜ ๋ฏธ๋””์–ด ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์„ ์‹œ์ž‘ํ•˜์„ธ์š”

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Media Blocks SDK๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ๋‹ค๋ฅธ VisioForge SDK์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ?

Media Blocks SDK๋Š” ๊ฐœ๋ณ„ ์ฒ˜๋ฆฌ ๋ธ”๋ก(์†Œ์Šค, ์ธ์ฝ”๋”, ์ดํŽ™ํŠธ, ์ถœ๋ ฅ)์„ ๋นŒ๋”ฉ ๋ธ”๋ก์ฒ˜๋Ÿผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ชจ๋“ˆํ˜• ํŒŒ์ดํ”„๋ผ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์„ฑ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” Video Capture ๋˜๋Š” Media Player SDK์™€ ๋‹ฌ๋ฆฌ, Media Blocks๋Š” ๋ฏธ๋””์–ด ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž ์ •์˜ ๋˜๋Š” ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

C#์—์„œ ๋ฏธ๋””์–ด ํŒŒ์ดํ”„๋ผ์ธ์„ ์–ด๋–ป๊ฒŒ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๊นŒ?

MediaBlocksPipeline ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์†Œ์Šค ๋ธ”๋ก(ํŒŒ์ผ, ์นด๋ฉ”๋ผ, RTSP, ํ™”๋ฉด ์บก์ฒ˜)์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ฒ˜๋ฆฌ ๋ธ”๋ก(์ธ์ฝ”๋”, ์ดํŽ™ํŠธ, ์˜ค๋ฒ„๋ ˆ์ด)์„ ์—ฐ๊ฒฐํ•˜๊ณ , ์ถœ๋ ฅ ๋ธ”๋ก(ํŒŒ์ผ ์ถœ๋ ฅ, ๋ Œ๋”๋Ÿฌ, ๋„คํŠธ์›Œํฌ ์ŠคํŠธ๋ฆผ)์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. StartAsync()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. SDK๊ฐ€ ์Šค๋ ˆ๋”ฉ, ๋™๊ธฐํ™” ๋ฐ ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Media Blocks SDK๋Š” macOS, Linux ๋ฐ ๋ชจ๋ฐ”์ผ ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๋„ค. Media Blocks SDK๋Š” Windows, macOS 12 ์ด์ƒ, Ubuntu 22.04/24.04, Android 8 ์ด์ƒ, iOS 12 ์ด์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. WinForms, WPF, MAUI, Uno Platform, Avalonia, Xamarin์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ํŒŒ์ดํ”„๋ผ์ธ ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ํ”Œ๋žซํผ๋ณ„ ๋ Œ๋”๋ง ๋ฐ ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

RTMP, RTSP ๋˜๋Š” HLS๋กœ ๋น„๋””์˜ค๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. SDK์—๋Š” RTMP(YouTube Live, Facebook Live), RTSP ์„œ๋ฒ„, HLS, SRT, NDI, Shoutcast์šฉ ์ „์šฉ ์ŠคํŠธ๋ฆฌ๋ฐ ์ถœ๋ ฅ ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Tee ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์—ฌ๋Ÿฌ ์ถœ๋ ฅ์œผ๋กœ ๋ถ„ํ• ํ•จ์œผ๋กœ์จ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๋กœ์ปฌ ๋…นํ™” ๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GPU ๊ฐ€์† ์ธ์ฝ”๋”ฉ ๋ฐ ๋””์ฝ”๋”ฉ์ด ์ง€์›๋ฉ๋‹ˆ๊นŒ?

๋„ค. Media Blocks SDK๋Š” NVIDIA NVENC, Intel Quick Sync, AMD AMF๋ฅผ ํ†ตํ•œ ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ์ธ์ฝ”๋”ฉ๊ณผ ํ•˜๋“œ์›จ์–ด ๋””์ฝ”๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ํ”Œ๋žซํผ์—์„œ๋Š” iOS ๋ฐ Android ํ•˜๋“œ์›จ์–ด ์ฝ”๋ฑ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ตœ์†Œํ•œ์˜ CPU ์‚ฌ์šฉ์œผ๋กœ ์‹ค์‹œ๊ฐ„ 4K ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์‚ฐ์—…์šฉ ์นด๋ฉ”๋ผ(GigE Vision, USB3 Vision) ๋ฐ Blackmagic Decklink๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. SDK์—๋Š” GigE Vision ๋ฐ USB3 Vision์„ ํ†ตํ•œ GenICam ํ˜ธํ™˜ ์‚ฐ์—…์šฉ ์นด๋ฉ”๋ผ(Basler, Allied Vision, FLIR/Teledyne)์šฉ ์†Œ์Šค ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Blackmagic Decklink ์žฅ์น˜๋Š” ์ „๋ฌธ์ ์ธ ๋น„๋””์˜ค ์บก์ฒ˜ ๋ฐ ์ถœ๋ ฅ์„ ์œ„ํ•œ ์ „์šฉ ์†Œ์Šค ๋ฐ ์‹ฑํฌ ๋ธ”๋ก์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

Live Video Compositor๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ํŒŒ์ดํ”„๋ผ์ธ์„ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ?

Live Video Compositor๋Š” Media Blocks SDK ์œ„์— ๊ตฌ์ถ•๋œ ๊ณ ์ˆ˜์ค€ ์‹ค์‹œ๊ฐ„ ์˜์ƒ ํ•ฉ์„ฑ ์—”์ง„์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ๋ฏน์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ˆ˜๋™์œผ๋กœ ์กฐ๋ฆฝํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ปดํฌ์ง€ํ„ฐ๋Š” OBS์™€ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ์™„์ „ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฆ‰์‹œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ฆฌ์ง€ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ ๊ฒฉ๋ฆฌ, GPU ๊ฐ€์† ํ•ฉ์„ฑ, ๋Ÿฐํƒ€์ž„ ๋™์  ์†Œ์Šค ๋ฐ ์ถœ๋ ฅ ๊ด€๋ฆฌ, Z-order ๋ ˆ์ด์–ด ์ œ์–ด, ๋ผ์ด๋ธŒ ํ…์ŠคํŠธ ๋ฐ ์ด๋ฏธ์ง€ ์˜ค๋ฒ„๋ ˆ์ด, ํ•ฉ์„ฑ ํ›„ ํšจ๊ณผ, ์˜ค๋””์˜ค VU ๋ฏธํ„ฐ๋ง์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. C# ๋ฐ .NET์œผ๋กœ ๋ฉ€ํ‹ฐ ์นด๋ฉ”๋ผ ์ „ํ™˜ ์‹œ์Šคํ…œ, ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๋˜๋Š” ๋ฐฉ์†ก ์ œ์ž‘ ๋„๊ตฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

Unity์—์„œ Media Blocks SDK๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. Media Blocks SDK .NET์€ Unity 6์šฉ์œผ๋กœ ๋‹จ์ผ ํฌ๋กœ์Šค ํ”Œ๋žซํผ .unitypackage๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ํ•œ ๋ฒˆ์˜ ์ž„ํฌํŠธ๋กœ Windows, Android, macOS, iOS๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์บก์ฒ˜, ์†Œ์Šค, ๋””์ฝ”๋”์™€ ์ธ์ฝ”๋”, ํšจ๊ณผ, ๋ฏน์‹ฑ, ๋…นํ™”, ์ŠคํŠธ๋ฆฌ๋ฐ์„ ํฌํ•จํ•œ ์™„์ „ํ•œ SDK๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋–ค ํŒŒ์ดํ”„๋ผ์ธ์ด๋“  Unity RawImage์— ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ƒ˜ํ”Œ ์”ฌ(๋ฏธ๋””์–ด ํŒŒ์ผ ํ”Œ๋ ˆ์ด์–ด์™€ ๋ผ์ด๋ธŒ RTSP/IP ์นด๋ฉ”๋ผ ๋ทฐ์–ด)์ด ์‹œ์ž‘์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ • ๋ฐ ํ”Œ๋žซํผ๋ณ„ ๋นŒ๋“œ ๊ฐ€์ด๋“œ๋Š” Unity ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Unity์— ๋‚ด์žฅ๋œ Video Player์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ?

Unity์˜ Video Player๋Š” ๋ฒˆ๋“ค๋œ ํด๋ฆฝ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ, RTSP / IP ์นด๋ฉ”๋ผ ์ž…๋ ฅ์ด ์—†๊ณ , ์ฝ”๋ฑ ์„ธํŠธ๊ฐ€ ์ œํ•œ์ ์ด๋ฉฐ, ์บก์ฒ˜๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. Media Blocks SDK๋Š” ๋ผ์ด๋ธŒ RTSP ๋ฐ IP ์นด๋ฉ”๋ผ ์žฌ์ƒ, ํ›จ์”ฌ ๋” ๋‹ค์–‘ํ•œ ํ˜•์‹๊ณผ ์ฝ”๋ฑ(H.264, H.265, AV1, VP8/VP9, ProRes, MJPEG ๋“ฑ), ๋””๋ฐ”์ด์Šค ์บก์ฒ˜, ๋…นํ™”, ์•„์›ƒ๋ฐ”์šด๋“œ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค โ€” ์ด ๋ชจ๋“  ๊ฒƒ์ด Windows, Android, macOS, iOS์—์„œ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ผ๊ด€๋œ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

Unity ์•ฑ์—์„œ ๋น„๋””์˜ค๋ฅผ ๋…นํ™”ํ•˜๊ฑฐ๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. Unity ๋นŒ๋“œ ์•ˆ์—์„œ MP4, MKV ๋˜๋Š” WebM์œผ๋กœ ๋…นํ™”ํ•˜๊ณ , RTMP, SRT, HLS ๋˜๋Š” ๋‚ด์žฅ RTSP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐฉ์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ํ•˜๋“œ์›จ์–ด ๊ฐ€์† H.264 / H.265 ์ธ์ฝ”๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค, ์˜ค๋ฒ„๋ ˆ์ด, ๋น„๋””์˜ค ๋ฏน์„œ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋…นํ™”ํ•˜๊ฑฐ๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ๋‚ด์šฉ์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ๋ฐ์Šคํฌํ†ฑ๊ณผ ๋ชจ๋ฐ”์ผ ๋ชจ๋‘์—์„œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

C#์—์„œ AI ๋น„๋””์˜ค ๋ถ„์„ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. Media Blocks SDK .NET์—๋Š” OCR, ANPR, ๊ฐ์ฒด ๊ฐ์ง€, ๊ฐ์ฒด ๋ถ„์„, ์–ผ๊ตด ์ธ์‹, ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ, ์‚ฌ์šฉ์ž ์ •์˜ ONNX ์ถ”๋ก ์„ ์œ„ํ•œ VisioForge.DotNet.Core.AI ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ธ”๋ก์„ ์นด๋ฉ”๋ผ, RTSP ์ŠคํŠธ๋ฆผ, ๋ Œ๋”๋Ÿฌ, ์ธ์ฝ”๋”, ํŒŒ์ผ ์ถœ๋ ฅ, ์ŠคํŠธ๋ฆฌ๋ฐ ์ถœ๋ ฅ๊ณผ ๋™์ผํ•œ MediaBlocksPipeline ์•ˆ์—์„œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Whisper ์Œ์„ฑ-ํ…์ŠคํŠธ ๋ณ€ํ™˜์ด ์˜คํ”„๋ผ์ธ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๊นŒ?

๋„ค. VisioForge.DotNet.Core.AI.Whisper ํŒจํ‚ค์ง€๋Š” GGML/whisper.cpp ๋ฐฑ์—”๋“œ๋ฅผ ํ†ตํ•ด Whisper๋ฅผ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๋ฉฐ, ์Œ์„ฑ ๋ถ„ํ• ์„ ์œ„ํ•œ ์„ ํƒ์  Silero VAD๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋””์˜ค๋ฅผ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋กœ ์ „์†กํ•˜์ง€ ์•Š๊ณ ๋„ ๋ผ์ด๋ธŒ ์ž๋ง‰, ์ธ์‹๋œ ์Œ์„ฑ ์ด๋ฒคํŠธ, ์‚ฌ์ด๋“œ์นด SRT ๋˜๋Š” VTT ์ž๋ง‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ONNX ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. OnnxInferenceBlock์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ONNX Runtime ๋ชจ๋ธ์„ ๋น„๋””์˜ค ํ”„๋ ˆ์ž„์— ์‹คํ–‰ํ•˜๊ณ , ์ž์ฒด ๋””์ฝ”๋” ๋˜๋Š” ํ›„์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์›์‹œ ํ…์„œ ์ถœ๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฐ์ง€๊ธฐ ๊ณ„์—ด์˜ ๊ฒฝ์šฐ YOLOObjectDetectorBlock์ด ์ด๋ฏธ YOLOX, YOLOv8, RT-DETR ์ „์ฒ˜๋ฆฌ, ๋””์ฝ”๋”ฉ, ์ขŒํ‘œ ๋งคํ•‘, ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™ ํŒŒ์ดํ”„๋ผ์ธ ๋Œ€์‹  VideoCaptureCoreX ๋˜๋Š” MediaPlayerCoreX์™€ ํ•จ๊ป˜ ์ด๋Ÿฌํ•œ AI ๋ธ”๋ก์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. ๋ชจ๋“  AI ๋ธ”๋ก์€ VideoCaptureCoreX์™€ MediaPlayerCoreX์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฒ˜๋ฆฌ ๋ธ”๋ก ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ, StartAsync(์บก์ฒ˜) ๋˜๋Š” OpenAsync/PlayAsync(์žฌ์ƒ) ์ด์ „์— ๋™์ผํ•œ ๋ธ”๋ก ์ธ์Šคํ„ด์Šค๋ฅผ Video_Processing_AddBlock ๋˜๋Š” Audio_Processing_AddBlock์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค โ€” ์ˆ˜๋™์œผ๋กœ MediaBlocksPipeline์„ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.