63 lines
3.5 KiB
Markdown
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)
|
|
- 오디오/자막 트랙 분리
|