releases/VideoDownloader.App/README.md

63 lines
3.5 KiB
Markdown

# 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 리먹스). 없으면 설정에서 경로 지정.
## 빌드 및 실행
```bash
# 빌드 (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
```
배포용 단일 디렉토리 게시:
```bash
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)
- 오디오/자막 트랙 분리