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 ๋น๋ ์์์ ์ด๋ฃจ์ด์ง๋๋ค.
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 ๋ฅผ ๊ฒ์ํ์ธ์. ์ค์น ๊ฐ์ด๋ ๋ณด๊ธฐ โ
๊ฐ๊ฒฉ
์ฐ๊ฐ ๊ตฌ๋ ๋๋ ํ์ ๋ผ์ด์ ์ค ์ค์์ ์ ํํ์ธ์
์ผ๋ฐ ๋ผ์ด์ ์ค
- 1๋ ๋์ ๋ฌด๋ฃ ๋ง์ด๋ ๋ฐ ๋ฉ์ด์ ์ ๊ทธ๋ ์ด๋
- ๊ตฌ๋ ์ข ๋ฃ ํ์๋ SDK ๊ธฐ๋ฅ ์ ์ง
- ์ฐ์ ์ง์
- ๋งค๋ ์๋ ๊ฐฑ์ (์ธ์ ๋ ์ง ์ทจ์ ๊ฐ๋ฅ)
- 200๊ฐ ์ด์์ ๋ชจ๋ ์ฒ๋ฆฌ ๋ธ๋ก ํฌํจ
ํ์ ๋ผ์ด์ ์ค
- ํ์ ๋ฌด์ ํ ์ ๋ฐ์ดํธ
- ์ฐ์ ์ง์ ๋ฐ ์์
- ์ผํ์ฑ ๊ฒฐ์
- ๋ชจ๋ ํฅํ ๊ธฐ๋ฅ ํฌํจ
- 200๊ฐ ์ด์์ ๋ชจ๋ ์ฒ๋ฆฌ ๋ธ๋ก ํฌํจ
๋น์์ ์ ์ฉ๋๋ก๋ ๋ฌด๋ฃ์ ๋๋ค. ๋ฌด๋ฃ ๋ผ์ด์ ์ค๋ฅผ ๋ฐ์ผ๋ ค๋ฉด ๋ฌธ์ํด ์ฃผ์ธ์.
๋ชจ๋ ๋ผ์ด์ ์ค์๋ ๋ก์ดํฐ ์๋ ๋ฐฐํฌ ๊ถํ์ด ํฌํจ๋ฉ๋๋ค.
์์ค ์ฝ๋ ๋ผ์ด์ ์ค
์ด SDK์ ์์ค ์ฝ๋ ๋ผ์ด์ ์ค๋ ์์ฒญ ์ ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ๊ฒฉ ๋ฐ ๋ผ์ด์ ์ค ์กฐ๊ฑด์ ๋ํด ๋ ผ์ํ๋ ค๋ฉด ์์ ํ์ ๋ฌธ์ํ์ธ์.
์์ค ์ฝ๋ ๋ผ์ด์ ์ค ์์ฒญ๐ฐ ๋ฒ๋ค ํจํค์ง๋ก ๋ ๋ง์ด ์ ์ฝํ์ธ์
์ด ์ ํ์ ๋น์ฉ ํจ์จ์ ์ธ ๋ฒ๋ค ํจํค์ง์ ํฌํจ๋์ด ์์ต๋๋ค. ๋ ๋ง์ ์ ํ์ ๋ฐ๊ณ ์ต๋ 71% ์ ์ฝํ์ธ์!
.NET Bundle Professional
์ต๋ 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
์ต๋ 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
์์คํ ์๊ตฌ ์ฌํญ
ํ๋ซํผ ์ ๋ฐ์ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ํ ์ต์ ์๊ตฌ ์ฌํญ
| ์ด์ ์ฒด์ |
|
| .NET Framework |
|
| ํ๋์จ์ด |
|
| UI ํ๋ ์์ํฌ |
|
๋ฌธ์ ๋ฐ ๋ฆฌ์์ค
Media Blocks SDK๋ฅผ ์์ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ
AI ์ฝ๋ฉ ์์ด์ ํธ๋ก ๊ฐ๋ฐํ๊ธฐ
Claude Code, Cursor, GitHub Copilot, Gemini CLI, OpenAI Codex ๊ฐ์ AI ์์ด์ ํธ์ ํจ๊ป ๊ฐ๋ฐ ์ค์ด์ ๊ฐ์? VisioForge๋ Media Blocks SDK .NET์ ๋ํ ๊ธฐ๊ณ ํ๋ ๊ฐ๋ฅํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์์ด์ ํธ๊ฐ ์ฒ์๋ถํฐ ํตํฉ์ ์ ํํ ์ฒ๋ฆฌํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ NuGet ํจํค์ง, ๋ผ์ด์ ์ค ๋ฑ๋ก, ํ๋ก์ ํธ ์ค์ , ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ถ์ธกํด์ผ ํ ํฌ๋ก์ค ํ๋ซํผ ๋ฐฐํฌ ์ธ๋ถ ์ฌํญ๊น์ง.
MCP ์๋ฒ ์ฐ๊ฒฐ
MCP์์ด์ ํธ์ VisioForge MCP ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ฉด ์ํฉ์ ๋ง๋ ๋์์ ๋ฐ์ ์ ์์ต๋๋ค. API ๊ฒ์, ํด๋์ค ๋ฐ ๋ฉค๋ฒ ์กฐํ, ์๋ํ๋ ์ฝ๋ ์์ ๊ฐ์ ธ์ค๊ธฐ, ๋ฐฐํฌ ๊ฐ์ด๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์๋ํฐ ์์์ ๋ฐ๋ก ํ ์ ์์ต๋๋ค.
Claude Code
claude mcp add --transport http visioforge-sdk https://mcp.visioforge.com/mcpVS Code (.vscode/mcp.json)
{
"servers": {
"visioforge-sdk": {
"type": "http",
"url": "https://mcp.visioforge.com/mcp"
}
}
}Agent Skill ๋ถ๋ฌ์ค๊ธฐ
Agent SkillsSDK์ ํ๋ซํผ ์กฐํฉ๋ง๋ค ๋ค์ด๋ก๋ ๊ฐ๋ฅํ ์คํฌ์ ์ ๊ณตํฉ๋๋ค. 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์ ๊ตฌ์ฑํ ํ์๊ฐ ์์ต๋๋ค.
