3.5 KiB
3.5 KiB
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
사용법
- 앱 실행 → 주소창에 재생페이지 URL 입력 후 Enter (또는 이동)
- 페이지에서 영상 재생
- 영상이 재생되는 순간 앱이
.m3u8요청을 자동 감지 → 하단 다운로드 목록에 진행률 표시 - 완료되면
%USERPROFILE%\Videos\VideoDownloader\에 MP4 저장- 파일명은 페이지 제목(document.title)에서 자동 생성
- 같은 영상은 자동으로 중복 다운로드 방지
설정 (상단 설정 버튼)
- 저장 폴더 (기본:
%USERPROFILE%\Videos\VideoDownloader) - 동시 다운로드 연결 수 (기본 8)
- 자동 다운로드 토글 (기본 켜짐 — 감지 즉시 받기)
- ffmpeg 경로 (비워두면 PATH 사용)
작동 원리
- 탐지: WebView2 의
WebResourceRequested+All리소스 필터로 모든 네트워크 요청 관찰 → URL 경로에.m3u8이면 감지 - 해석: 감지된 m3u8 을 재요청(브라우저 쿠키 + Referer 복사) → 마스터 재생목록이면 최고 화질 변환 선택 → 미디어 재생목록 확정 (최종 URL 기준 중복제거)
- 다운로드: 세그먼트 병렬 다운로드(이어백기 지원) + 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)
- 오디오/자막 트랙 분리