MEDIABROWSER 공개 릴리스 - 설치자/패키지 배포 전용 (소스는 별도 저장소)
Find a file
2026-08-16 11:36:38 +09:00
build deploy: remote build scripts (build-remote.sh, install-buildkey.ps1) + self-hosted build machine setup 2026-08-15 13:33:44 +09:00
VideoDownloader.App 데스크톱 T3 잔여 완성 + 스타일 폴리시: 도메인 라우팅(WorkspaceRoutingRules 자동 워크스페이스 전환), 탭 아카이브(TabArchive 영속·팔레트 복구), 페이지 액션(흑백/세피아 필터), 노트 패널(NotesStore+플라이아웃), 컴팩트 모드(크롬 숨김+엣지 호버). 스타일: 한국어 폰트 폴백, 암시 폰트 통일, 다크 툴팁, 텍스트 대비 상향. UpdateNavState dispose 가드. 164/164 GREEN + 실창 스크린샷 검증 2026-08-16 08:46:54 +09:00
VideoDownloader.Avalonia Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.Browser 데스크톱 T3 잔여 완성 + 스타일 폴리시: 도메인 라우팅(WorkspaceRoutingRules 자동 워크스페이스 전환), 탭 아카이브(TabArchive 영속·팔레트 복구), 페이지 액션(흑백/세피아 필터), 노트 패널(NotesStore+플라이아웃), 컴팩트 모드(크롬 숨김+엣지 호버). 스타일: 한국어 폰트 폴백, 암시 폰트 통일, 다크 툴팁, 텍스트 대비 상향. UpdateNavState dispose 가드. 164/164 GREEN + 실창 스크린샷 검증 2026-08-16 08:46:54 +09:00
VideoDownloader.Cli Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.Core 최종 감사: 계획↔구현 매핑 문서(IMPLEMENTATION_AUDIT.md), slnx에 Mobile 추가, HlsDownloader._muxer ctor 누락 회귀 RED→GREEN 수정(103 tests), 빌드머신 아티팩트 갱신(linux-x64/osx-arm64) 2026-08-15 17:20:13 +09:00
VideoDownloader.Mobile M2/M3 갭: 라이브러리 그리드 추가일 표시 + iOS Info.plist ATS(NSAllowsLocalNetworking)/NSLocalNetworkUsageDescription 2026-08-16 11:36:38 +09:00
VideoDownloader.Mobile.Core M1 공유 타겟(U1)+M2 저장 진행 알림: ACTION_SEND 인텐트 필터+ShareTarget/SharePayload(RED 7건)+루트 타이머 큐 전송(am start 인텐트 E2E로 서버 큐 반영 실증), 오프라인 저장 Android ProgressBar 노티(5% 스로틀)→폰 저장 완료 전환(34MB E2E, Report(1) 되덮어쓰기 방지). 154/154 GREEN 2026-08-15 18:45:51 +09:00
VideoDownloader.Server T3-11/14/15 + M2 잔여: 권한 정책 UI(PermissionGate/PermissionRequested 다이얼로그+SavesInProfile), 추적 방지(TrackerBlocklist/WebResourceRequested 차단+실드 배지·팝업), 주소창 진행 바+파라미터 제거 복사(UrlCleaner/NavProgressTracker), U5 완료 알림(Mobile.Core 감지기+Plugin.LocalNotification), 재생중 ongoing 미디어 알림, 썸네일/해상도 API(Thumbnailer 사이드카 캐시+/thumb)+라이브러리 그리드, 외부망 안내(ConnectionTroubleshoot). 147 tests GREEN 2026-08-15 18:11:49 +09:00
VideoDownloader.Tests 데스크톱 T3 잔여 완성 + 스타일 폴리시: 도메인 라우팅(WorkspaceRoutingRules 자동 워크스페이스 전환), 탭 아카이브(TabArchive 영속·팔레트 복구), 페이지 액션(흑백/세피아 필터), 노트 패널(NotesStore+플라이아웃), 컴팩트 모드(크롬 숨김+엣지 호버). 스타일: 한국어 폰트 폴백, 암시 폰트 통일, 다크 툴팁, 텍스트 대비 상향. UpdateNavState dispose 가드. 164/164 GREEN + 실창 스크린샷 검증 2026-08-16 08:46:54 +09:00
.env.example deploy: .env template + gitignore hardening (.env* ignored, template whitelisted) 2026-08-15 12:39:36 +09:00
.gitignore deploy: .env template + gitignore hardening (.env* ignored, template whitelisted) 2026-08-15 12:39:36 +09:00
BACKLOG.md Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
BROWSER_FEATURES_PLAN.md 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
DEPLOYMENT_PLAN.md deploy: self-hosted build machines operational (vd-linux/vd-mac) - 4 artifacts built & native-exec E2E passed (HLS download EXIT=0 on both) 2026-08-15 13:46:05 +09:00
downloader.py Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
IMPLEMENTATION_AUDIT.md 데스크톱 T3 잔여 완성 + 스타일 폴리시: 도메인 라우팅(WorkspaceRoutingRules 자동 워크스페이스 전환), 탭 아카이브(TabArchive 영속·팔레트 복구), 페이지 액션(흑백/세피아 필터), 노트 패널(NotesStore+플라이아웃), 컴팩트 모드(크롬 숨김+엣지 호버). 스타일: 한국어 폰트 폴백, 암시 폰트 통일, 다크 툴팁, 텍스트 대비 상향. UpdateNavState dispose 가드. 164/164 GREEN + 실창 스크린샷 검증 2026-08-16 08:46:54 +09:00
MOBILE_PLAN.md 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
README.md Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
requirements.txt Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1) 2026-08-15 11:59:25 +09:00
VideoDownloader.slnx 최종 감사: 계획↔구현 매핑 문서(IMPLEMENTATION_AUDIT.md), slnx에 Mobile 추가, HlsDownloader._muxer ctor 누락 회귀 RED→GREEN 수정(103 tests), 빌드머신 아티팩트 갱신(linux-x64/osx-arm64) 2026-08-15 17:20:13 +09:00

비디오 다운로더 (HLS / MP4)

maccms 계열 스트리밍 사이트(tvchak208 등)의 영상을 다운로드하는 도구입니다. HLS(.m3u8) 분할 재생과 직접 MP4 모두 지원합니다.

기능

  • 페이지 URL 자동 분석: 재생페이지 URL만 넣으면 player_aaaa 설정 / 정규식 / iframe 플레이어에서 m3u8·mp4 주소를 자동 추출
  • HLS 완전 지원: 마스터 재생목록(최고 화질 자동 선택), AES-128 복호화, fMP4(#EXT-X-MAP) 초기화 세그먼트
  • 병렬 다운로드 + 이어받기: 도중에 끊겨도 재실행 시 받은 분할은 건너뜀
  • ffmpeg 자동 리먹스: TS / fMP4 → MP4 (-c copy, 무손실·빠름)
  • 커스텀 헤더: --referer 등으로 CDN 토큰 인증 대응

준비

pip install -r requirements.txt
# ffmpeg 권장 (https://ffmpeg.org). PATH에 있으면 자동 인식됨.

사용법

1) 가장 간단 — 페이지 URL만

python downloader.py "https://tvchak208.com/index.php/vod/play/id/123367/sid/1/nid/1.html" -o 영상제목

2) m3u8 주소를 직접 넘기기 (가장 확실, 아래 참고)

python downloader.py "https://cdn.example.com/.../index.m3u8" -o 영상제목 --referer "https://tvchak208.com/"

3) 추가 헤더가 필요한 경우

python downloader.py "https://.../index.m3u8" -o 영상제목 \
    --referer "https://tvchak208.com/" \
    -H "Origin: https://tvchak208.com"

옵션 요약

옵션 설명
-o, --output 출력 파일명 (확장자 생략 가능, 기본 video)
--referer Referer 헤더. 403/401 날 때 페이지 주소를 지정
-H "K: V" 추가 헤더 (여러 개 가능)
-c, --concurrency 동시 연결 수 (기본 8)
--user-agent User-Agent 재정의
--keep-parts 병합 후 분할 임시파일 유지(디버그)

이 사이트에서 m3u8 주소 직접 구하기 (추천)

페이지 자동 추출이 안 될 때(사이트마다 난독화가 다름) 가장 확실한 방법:

  1. Chrome/Edge로 재생페이지 열기
  2. F12 → Network(네트워크) 탭
  3. 필터에 m3u8 입력
  4. 영상 재생 버튼 클릭
  5. 목록에 뜬 .m3u8 요청 위에서 우클릭 → Copy → Copy link address
  6. 그 주소를 다운로더에 넘김:
    python downloader.py "복사한_m3u8_주소" -o 영상제목 --referer "https://tvchak208.com/"
    

팁: index.m3u8(마스터)과 *.m3u8(미디어)이 모두 뜰 수 있는데, 마스터를 넘겨도 최고 화질을 자동 선택합니다. 가장 위쪽 m3u8을 고르면 됩니다. 403/401 에러가 나면 반드시 --referer로 재생페이지 주소를 지정하세요.

문제 해결

  • 페이지에서 영상 주소를 찾지 못했습니다 → 위 "m3u8 주소 직접 구하기" 방법 사용
  • 403/401 → --referer "페이지 주소" 추가 (필요시 -H "Origin: ..." 도 함께)
  • 암호화 영상입니다. pycryptodome 필요 → pip install pycryptodome
  • MP4로 안 변환됨 → ffmpeg 설치 확인 (ffmpeg -version)