Files
2025-09-28 16:47:45 +09:00
..
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00
2025-09-28 16:47:45 +09:00

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. 프로젝트 열기

  1. Godot Editor에서 "Import" 클릭
  2. project.godot 파일 선택
  3. "Import & Edit" 클릭

3. Extension 활성화

  1. Project → Project Settings
  2. Plugins 탭
  3. "VavCore" Extension 활성화

4. 실행

  1. F5 키 또는 "Play" 버튼 클릭
  2. "Load Video" 버튼으로 비디오 로드
  3. "Play" 버튼으로 재생 시작

🎯 테스트 시나리오

기본 테스트

  1. Extension 로드 확인: VavCore Extension이 정상 로드되는지 확인
  2. 비디오 로드: 테스트 AV1 파일 로드 성공 여부
  3. 재생 제어: Play/Pause/Stop 버튼 동작 확인
  4. GPU 렌더링: Zero-Copy GPU Pipeline 동작 확인
  5. CPU Fallback: GPU 실패 시 CPU 렌더링 동작 확인

고급 테스트

  1. 다양한 해상도: 320x240, 1920x1080, 3840x2160 파일 테스트
  2. 성능 측정: FPS, 메모리 사용량, GPU 사용률 모니터링
  3. 안정성 테스트: 장시간 재생, 반복 로드/언로드
  4. 에러 처리: 잘못된 파일, 코덱 오류 등 예외 상황 테스트

📊 기대 결과

성공 시나리오

  • VavCore Extension 정상 로드
  • AV1 비디오 파일 인식 및 로드
  • 부드러운 비디오 재생 (30fps 이상)
  • GPU Surface 직접 렌더링 (Zero-Copy)
  • 메모리 사용량 최적화

문제 발생 시 체크사항

  1. Extension 로드 실패: plugin.cfg, VavCore.dll 파일 확인
  2. 비디오 로드 실패: 파일 경로, AV1 코덱 지원 확인
  3. 재생 오류: GPU 드라이버, Godot 렌더링 설정 확인
  4. 성능 문제: 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 - 재생 상태 변경

📝 향후 개선사항

  1. 실제 VavCore Extension 통합 - 현재는 Mock 구현
  2. 파일 다이얼로그 추가 - 사용자가 비디오 파일 선택 가능
  3. 진행바 및 시간 표시 - 재생 진행 상황 시각화
  4. 설정 패널 - 디코더 선택, 품질 설정 등
  5. 전체화면 모드 - 비디오 전체화면 재생 지원

생성일: 2025-09-28 VavCore Extension Demo for Godot 4.4.1