C#과 AOT로 VLC 플러그인 개발, 성능과 확장성을 동시에!

by DD
3개월 전
조회수 14

C#과 Native AOT를 활용하여 VLC 네이티브 플러그인 개발 가능성을 제시하며, LibVLC API의 한계를 극복

ImageSharp를 사용하여 비디오 프레임에 텍스트 및 그래픽을 렌더링하는 자막 렌더러(Subtitle Renderer) 구현

VLC의 네이티브 플러그인(Native Plugin)은 비디오 필터, 오디오 필터 등 다양한 기능을 제공하며, .NET 생태계와의 통합을 시도

마샬링(Marshaling), 구조체 정의, 플랫폼 종속성 등 기술적 난관과 성능 최적화에 대한 고려 사항을 제시하며, 향후 확장 가능성(Scalability)을 강조

AOT 컴파일(Ahead-Of-Time Compilation)을 통한 성능 확보

본 게시물은 C# 코드를 네이티브 머신 코드로 직접 컴파일하는 AOT 컴파일(Ahead-Of-Time Compilation) 방식을 활용하여 VLC 플러그인 개발의 성능 문제를 해결한다. AOT는 JIT 컴파일러(Just-In-Time Compiler)의 런타임 오버헤드를 줄여, C/C++에 근접하는 성능을 제공한다. 특히, 비디오 프레임 처리와 같이 낮은 지연 시간(Low Latency)이 중요한 작업에서 AOT의 장점이 부각된다.

ImageSharp를 활용한 자막 렌더링 구현

저자는 ImageSharp를 사용하여 자막 렌더링 기능을 구현했다. ImageSharp는 .NET 환경에서 사용 가능한 2D 그래픽 라이브러리로, 별도의 종속성 없이(No Native Dependencies) AOT 컴파일에 적합하다. 자막 렌더링은 폰트 스타일, 크기, 색상, 윤곽선 등을 포함하는 복잡한 작업을 요구하며, ImageSharp의 텍스트 엔진을 통해 이러한 요구 사항을 충족한다. 특히, 윤곽선 렌더링은 여러 방향으로 텍스트를 복사하여 레이어링하는 방식으로 구현되었다.

네이티브 플러그인 개발의 기술적 난관

네이티브 플러그인 개발은 VLC의 C 구조체와 C# 구조체 간의 마샬링(Marshaling) 과정에서 어려움을 겪는다. VLC의 내부 C 구조체는 복잡하고, 플랫폼에 따라 레이아웃이 다르기 때문에, C# 구조체 정의가 정확해야 한다. 또한, VLC 4.x 플러그인 API의 변화에 따라 지속적인 업데이트가 필요하다. 이러한 문제들은 개발 과정에서 오류 발생(Error Occurrence)의 원인이 될 수 있다.

VLC 플러그인 개발 생태계 확장

본 게시물은 .NET ML 생태계를 활용하여 음성 인식, 실시간 비디오 분석, 지능형 자막 생성 등 다양한 기능을 VLC 플러그인으로 구현할 수 있는 가능성을 제시한다. 이는 LibVLC API로는 접근할 수 없는 영역이며, 네이티브 플러그인만이 가능한 영역이다. 또한, 개발자는 GitHub에 공개된 VLCLR 프레임워크를 통해 C# 기반의 VLC 플러그인 개발을 시작할 수 있다.

Writing a native VLC plugin in C#