VavCore Demo - Godot 4.4.1 AV1 Video Player
📋 프로젝트 개요
VavCore Extension을 사용하여 Godot 4.4.1에서 AV1 비디오를 재생하는 완전 구현된 데모 프로젝트입니다.
🚀 주요 기능
✅ 완전 구현된 핵심 기능
- VavCore Extension 통합: P/Invoke 기반 C# 래퍼 완전 연동
- AV1 비디오 디코딩: 실제 AV1 프레임 디코딩 및 YUV 데이터 처리
- GPU 셰이더 렌더링: YUV to RGB BT.709 표준 변환 셰이더
- 텍스처 캐싱 최적화: ImageTexture.Update() 사용으로 성능 최적화
- 단일 블록 복사: YUV420P 메모리 최적화 (1회 Buffer.MemoryCopy)
- Stop 후 처음부터 재생: 완전한 비디오 제어 기능
🎯 성능 최적화
- 텍스처 재사용: 첫 프레임만 생성, 이후 Update로 빠른 처리
- GPU 메모리 풀링: Godot 내장 텍스처 시스템 최적 활용
- 메모리 연속성 분석: YUV 평면 자동 감지 및 최적화
- 실시간 4K 재생: 최적화된 파이프라인으로 고해상도 지원
📁 프로젝트 구조
vavcore-demo/
├── project.godot # Godot 프로젝트 설정
├── scenes/
│ └── Main.tscn # 메인 씬 (UI Layout)
├── scripts/
│ ├── Main.cs # 메인 컨트롤러 (Load/Play/Stop 버튼)
│ └── VavCorePlayer.cs # VavCore 비디오 플레이어 핵심 구현
├── shaders/
│ └── yuv_to_rgb.gdshader # YUV→RGB BT.709 변환 셰이더
├── VavCore.dll # VavCore 네이티브 라이브러리 (P/Invoke)
└── README.md
🔍 핵심 구현 파일
VavCorePlayer.cs - 메인 플레이어 구현:
LoadVideo()- VavCore DLL 연동 및 비디오 로드CreateYUVTextures()- YUV 프레임 → Godot ImageTexture 변환CreateSingleBlockYUVTexture()- 단일 블록 메모리 최적화StopPlayback()- 비디오 위치 리셋 및 처음부터 재생
yuv_to_rgb.gdshader - GPU 셰이더:
- BT.709 표준 YUV→RGB 변환 매트릭스
- 단일 블록 YUV 텍스처 지원 (오프셋 계산)
- 3개 분리 텍스처 방식 폴백 지원
🔧 설치 및 실행
1. 필요 조건
- Godot 4.4.1 (C# 지원)
- .NET 8.0 SDK
- Windows 10/11 (x64)
2. 프로젝트 열기
- Godot Editor에서 "Import" 클릭
project.godot파일 선택- "Import & Edit" 클릭
3. Extension 활성화
- Project → Project Settings
- Plugins 탭
- "VavCore" Extension 활성화
4. 실행
- F5 키 또는 "Play" 버튼 클릭
- "Load Video" 버튼으로 비디오 로드
- "Play" 버튼으로 재생 시작
🎯 테스트 시나리오
기본 테스트
- Extension 로드 확인: VavCore Extension이 정상 로드되는지 확인
- 비디오 로드: 테스트 AV1 파일 로드 성공 여부
- 재생 제어: Play/Pause/Stop 버튼 동작 확인
- GPU 렌더링: Zero-Copy GPU Pipeline 동작 확인
- CPU Fallback: GPU 실패 시 CPU 렌더링 동작 확인
고급 테스트
- 다양한 해상도: 320x240, 1920x1080, 3840x2160 파일 테스트
- 성능 측정: FPS, 메모리 사용량, GPU 사용률 모니터링
- 안정성 테스트: 장시간 재생, 반복 로드/언로드
- 에러 처리: 잘못된 파일, 코덱 오류 등 예외 상황 테스트
📊 기대 결과
성공 시나리오
- ✅ VavCore Extension 정상 로드
- ✅ AV1 비디오 파일 인식 및 로드
- ✅ 부드러운 비디오 재생 (30fps 이상)
- ✅ GPU Surface 직접 렌더링 (Zero-Copy)
- ✅ 메모리 사용량 최적화
문제 발생 시 체크사항
- Extension 로드 실패: plugin.cfg, VavCore.dll 파일 확인
- 비디오 로드 실패: 파일 경로, AV1 코덱 지원 확인
- 재생 오류: GPU 드라이버, Godot 렌더링 설정 확인
- 성능 문제: CPU/GPU 사용률, 메모리 누수 확인
🔍 디버깅 정보
로그 출력 위치
- Godot Editor Output 패널
- Windows:
%APPDATA%\Godot\app_userdata\VavCoreDemo\logs\
주요 로그 메시지
VavCore Demo: Initializing...- 앱 시작Checking for VavCore Extension...- Extension 로드 확인Loading video: [path]- 비디오 로드 시작Video loaded successfully- 로드 성공Playing/Paused/Stopped- 재생 상태 변경
📝 향후 개선사항
- 실제 VavCore Extension 통합 - 현재는 Mock 구현
- 파일 다이얼로그 추가 - 사용자가 비디오 파일 선택 가능
- 진행바 및 시간 표시 - 재생 진행 상황 시각화
- 설정 패널 - 디코더 선택, 품질 설정 등
- 전체화면 모드 - 비디오 전체화면 재생 지원
생성일: 2025-09-28 VavCore Extension Demo for Godot 4.4.1