releases/VideoDownloader.App
2026-08-15 14:51:16 +09:00
..
Browser refactor(1): detection App->Core + AppPaths (VD_DATA_DIR isolation for deterministic E2E) 2026-08-15 14:51:16 +09:00
Core refactor(1): detection App->Core + AppPaths (VD_DATA_DIR isolation for deterministic E2E) 2026-08-15 14:51:16 +09:00
Themes Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
ViewModels refactor(1): move Detection (MediaDetector/SocialSiteDetector/DetectionContext) App->Core 2026-08-15 14:49:02 +09:00
App.xaml Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
App.xaml.cs Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
AppPaths.cs refactor(1): detection App->Core + AppPaths (VD_DATA_DIR isolation for deterministic E2E) 2026-08-15 14:51:16 +09:00
AssemblyInfo.cs Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
Converters.cs Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
MainWindow.xaml Phase A: tab architecture integrated into MainWindow - tab strip UI, per-tab WebView2 lifecycle, new-window->tab w/ deferral, audio indicator/mute, session save/restore, shortcuts; E2E on real window (56 tests GREEN) 2026-08-15 14:48:17 +09:00
MainWindow.xaml.cs refactor(1): detection App->Core + AppPaths (VD_DATA_DIR isolation for deterministic E2E) 2026-08-15 14:51:16 +09:00
README.md Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
SettingsWindow.xaml Phase 0 (T1-3/4/7/9/11): find bar w/ native Find API + search engine + site zoom + force reload + F11, wired into MainWindow, E2E smoke (39 tests) 2026-08-15 12:14:35 +09:00
SettingsWindow.xaml.cs Phase 0 (T1-3/4/7/9/11): find bar w/ native Find API + search engine + site zoom + force reload + F11, wired into MainWindow, E2E smoke (39 tests) 2026-08-15 12:14:35 +09:00
VideoDownloader.App.csproj Phase 0 (T1-3/4/7/9/11): find bar w/ native Find API + search engine + site zoom + force reload + F11, wired into MainWindow, E2E smoke (39 tests) 2026-08-15 12:14:35 +09:00

Video Downloader (WPF 데스크톱 앱)

임베디드 브라우저(WebView2)로 영상을 재생하면, 네트워크 요청을 자동으로 관찰해 .m3u8(HLS)를 감지하고 즉시 MP4로 다운로드하는 Windows 데스크톱 앱.

브라우저에서 재생만 하면 됩니다 — m3u8 주소를 직접 찾을 필요가 없습니다.

구조

  • VideoDownloader.Core (net8.0) — HLS 다운로더 엔진 (파서/AES-128/fMP4/병렬다운로드/ffmpeg 리먹스). UI/브라우저 의존성 없음.
  • VideoDownloader.Cli (net8.0) — 엔진 단독 테스트 하네스 (m3u8 URL 직접 입력 → MP4).
  • VideoDownloader.App (net8.0-windows, WPF + WebView2) — 데스크톱 앱 본체.

요구사항

  • .NET 8 SDK 이상 (Windows)
  • WebView2 런타임 — Windows 11 은 기본 설치됨 (Win10 은 Microsoft Edge 기반 자동 설치)
  • ffmpeg — 시스템 PATH 에 있으면 자동 사용 (TS/fMP4 → MP4 리먹스). 없으면 설정에서 경로 지정.

빌드 및 실행

# 빌드 (x64 필수 — net8.0-windows WPF)
dotnet build VideoDownloader.App/VideoDownloader.App.csproj -c Debug -p:Platform=x64

# 실행
VideoDownloader.App\bin\x64\Debug\net8.0-windows\VideoDownloader.exe
# 또는
dotnet run --project VideoDownloader.App -p:Platform=x64

배포용 단일 디렉토리 게시:

dotnet publish VideoDownloader.App/VideoDownloader.App.csproj -c Release -p:Platform=x64 -r win-x64 --self-contained false -o publish

사용법

  1. 앱 실행 → 주소창에 재생페이지 URL 입력 후 Enter (또는 이동)
  2. 페이지에서 영상 재생
  3. 영상이 재생되는 순간 앱이 .m3u8 요청을 자동 감지 → 하단 다운로드 목록에 진행률 표시
  4. 완료되면 %USERPROFILE%\Videos\VideoDownloader\ 에 MP4 저장
    • 파일명은 페이지 제목(document.title)에서 자동 생성
    • 같은 영상은 자동으로 중복 다운로드 방지

설정 (상단 설정 버튼)

  • 저장 폴더 (기본: %USERPROFILE%\Videos\VideoDownloader)
  • 동시 다운로드 연결 수 (기본 8)
  • 자동 다운로드 토글 (기본 켜짐 — 감지 즉시 받기)
  • ffmpeg 경로 (비워두면 PATH 사용)

작동 원리

  1. 탐지: WebView2 의 WebResourceRequested + All 리소스 필터로 모든 네트워크 요청 관찰 → URL 경로에 .m3u8 이면 감지
  2. 해석: 감지된 m3u8 을 재요청(브라우저 쿠키 + Referer 복사) → 마스터 재생목록이면 최고 화질 변환 선택 → 미디어 재생목록 확정 (최종 URL 기준 중복제거)
  3. 다운로드: 세그먼트 병렬 다운로드(이어백기 지원) + AES-128 복호화 + fMP4 처리 → 병합 → ffmpeg -c copy 무손실 리먹스 → MP4

문제 해결

  • 영상이 감지되지 않음 — 사이트가 DRM(Widevine)을 쓰거나 비-HLS(mp4 직링크/재생자체 난독화)일 수 있음. DRM 영상은 다운로드 불가.
  • 403/401 오류 — 쿠키/Referer 자동 복사가 안 된 경우. 페이지에서 실제로 재생을 시작했는지 확인 (재생해야 토큰 URL이 발행됨).
  • MP4가 안 만들어짐 — ffmpeg 확인 (ffmpeg -version). 설정에서 경로 지정.
  • 라이브 방송 — VOD(EXT-X-ENDLIST) 우선 지원. 슬라이딩 윈도우 라이브는 v1 미지원.
  • 엔진 단독 점검: dotnet run --project VideoDownloader.Cli -- "<m3u8-url>"

범위 외

  • DRM/Widevine 암호화 영상 (복호화 불가)
  • 라이브 스트림(sliding window)
  • 오디오/자막 트랙 분리