알려진 제한 사항 및 주의사항
이 문서는 FlowPick 현재 버전의 기술적 제한과 알려진 문제를 요약합니다. 이러한 제한을 이해하면 사용过程中 예기치 않은 상황을 피할 수 있습니다.
제한 등급 설명
이 문서의 각 제한은 영향 정도에 따라 세 등급으로 분류됩니다:
| 등급 | 아이콘 | 의미 | 예시 |
|---|---|---|---|
| 강력한 제한 | 🔴 | 우회 불가능, 현재 버전 미지원 | DRM 보호 콘텐츠, Blob 모드 1.5GB 상한 |
| 약한 제한 | 🟡 | 제한 있지만 대안 존재 | CORS 크로스 오리GIN(확장 프로그램으로 우회 가능), FFmpeg 성능(TS 출력 선택 가능) |
| 주의사항 | 🔵 | 기능에 영향 없지만 숙지 필요 | 첫 번째 로딩 느림, 세그먼트 URL 만료 가능 |
파일 크기 제한
Blob 모드 강력한 제한
브라우저가 File System Access API 또는 StreamSaver.js를 지원하지 않을 때 FlowPick은 Blob 모드로 파일을 씁니다. 이 모드는 강력한 크기 제한이 있습니다:
| 제한 유형 | 임계값 | 동작 |
|---|---|---|
| 경고 임계값 | 800MB | 콘솔에 경고 출력, 인터페이스에 프롬프트 표시 |
| 강력한 제한 | 1.5GB | 다운로드 거부, 사용자에게 브라우저 변경 프롬프트 |
원인: Blob 모드는 전체 파일을 메모리에 로드해야 하며, 1.5GB 초과 시 브라우저 크래시 또는 페이지 무응답을 초래할 수 있습니다.
해결 방안: Chrome 86+ 또는 Edge 86+ 사용, 이들은 File System Access API를 지원하여 임의 크기의 파일을 스트리밍 쓸 수 있습니다.
메모리 압력
스트리밍 쓰기를 사용하더라도 다음 요인은 여전히 메모리를 소모합니다:
- 동시 다운로드 세그먼트 데이터(각 세그먼트 통상 1-10MB)
- FFmpeg WASM 런타임 메모리(약 200-400MB)
- 페이지 UI 및 기타 컴포넌트
권장 사항:
- 초대용량 파일(>5GB) 다운로드 시 동시 스레드 수를 1-2로 낮추기
- 메모리 점유 탭 닫기
- 동시에 여러 FFmpeg 리무싱 작업 실행 피하기
스트리밍 프로토콜 제한
DRM 보호 콘텐츠
FlowPick은 다음 유형의 보호 콘텐츠를 처리할 수 없습니다:
| 보호 기술 | 일반적인 플랫폼 | 상태 |
|---|---|---|
| Widevine | Netflix, Disney+ | 지원 안 함 |
| PlayReady | 일부 Windows 플랫폼 | 지원 안 함 |
| FairPlay | Apple TV+ | 지원 안 함 |
| ClearKey | 일부 테스트 스트림 | 지원 안 함 |
검출 방식: DASH 플레이리스트에 <ContentProtection> 태그가 나타날 때 다운로더가 명확하게 지원하지 않음을 알립니다.
DRM을 지원할 수 없는 이유?
DRM 시스템의 핵심은 콘텐츠 복호화 모듈(CDM)이며, 이는 브라우저 내장의 폐소스 바이너리 컴포넌트입니다. CDM은 운영 체제와 하드웨어에 깊이 결합되어 있으며, 보호된 콘텐츠를 복호화하고 디코딩된 프레임을 그래픽 카드에 직접 출력하는 역할을 합니다. 애플리케이션 계층에서 복호화된 데이터를 가로채거나 읽을 수 없습니다. 이것이 DRM 시스템의 설계 목표입니다—복호화부터 표시까지 전체 체인에서 콘텐츠가 가로채이지 않도록 보장합니다.
AES-128 암호화
FlowPick은 HLS의 AES-128 세그먼트 암호화를 지원하지만 다음 제한이 있습니다:
METHOD=AES-128만 지원, SAMPLE-AES 미지원- 키 파일은 HTTP(S)로 직접 접근 가능해야 함
- Cookie 인증이 필요한 키 URL 미지원(온라인 도구 모드)
라이브 스트림
FlowPick은 주로 VOD(Video On Demand) 콘텐츠를 위해 설계되었습니다:
- 라이브 HLS 스트림은 캐시된 세그먼트를 다운로드할 수 있지만 미래의 세그먼트는 획득 불가
- 라이브 스트림의 세그먼트 리스트는 지속적으로 업데이트되며, 다운로더는 새로 추가된 세그먼트를 자동 추적하지 않음
- 라이브 종료 후 완전한 재생 다운로드 권장
라이브 스트림 다운로드 실제 효과:
라이브 진행 중(30분 재생됨):
M3U8 플레이리스트는 최근 ~30초 세그먼트 포함
→ 다운로더는 이 30초 콘텐츠만 획득 가능
→ 이전 또는 이후 세그먼트 획득 불가
라이브 종료 후:
M3U8 플레이리스트는 완전한 세그먼트 리스트 포함
→ 다운로더는 전체 콘텐츠 획득 가능
→ VOD 다운로드와 동일
분리 음비디오 스트림
일부 DASH 스트림은 비디오와 오디오를 독립적인 AdaptationSet으로 분리합니다:
- 다운로더는 비디오 스트림과 오디오 스트림을 각각 나열
- 일치하는 비디오와 오디오 스트림을 수동으로 선택해야 함
- 병합에 FFmpeg WASM 필요, 시간 소요
- 음비디오 길이가 일치하지 않으면 병합 결과에 음화면 동기화 불일치可能出现
브라우저 제한
File System Access API
| 브라우저 | 지원 상태 |
|---|---|
| Chrome 86+ | 완전 지원 |
| Edge 86+ | 완전 지원 |
| Firefox | 지원 안 함 |
| Safari | 지원 안 함 |
지원하지 않는 브라우저에서 모든 다운로드는 Blob 모드를 사용하며 1.5GB 크기 제한을 받습니다.
SharedArrayBuffer
FFmpeg WASM 멀티 스레드 모드는 SharedArrayBuffer를 필요로 하며, 이는 웹사이트가 다음 HTTP 응답 헤더를 설정해야 합니다:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
이 헤더들이 설정되지 않으면 FFmpeg이 자동으로 싱글 스레드 모드로 강등되며, 병합 속도가 약 40-60% 저하됩니다.
Service Worker
StreamSaver.js는 Service Worker에 의존합니다. 다음 상황에서 StreamSaver를 사용할 수 없습니다:
- 브라우저 프라이빗 모드(일부 브라우저가 Service Worker 제한)
- 기업 정책이 Service Worker 금지
- 웹사이트가
mitm.html과streamsaver-sw.js를 올바르게 배포하지 않음
네트워크 제한
CORS 크로스 오리GIN 제한
온라인 도구 모드(/m3u8-downloader, /dash-downloader)는 브라우저 동일 출처 정책 제한을 받습니다:
- 스트리밍 서버가
Access-Control-Allow-Origin응답 헤더를 설정하지 않으면 요청이 차단됨 - 일부 CDN이
Referer또는Origin요청 헤더를 확인함 - 확장 프로그램 버전은 이 제한을 받지 않으며, 확장 프로그램 권한으로 요청을 발행하기 때문
CORS 오류의 기술 원리:
온라인 도구(flowpick.app)이 CDN(cdn.example.com) 요청:
브라우저 요청 전송 → CDN 세그먼트 데이터 반환
↓
브라우저 응답 헤더 확인:
Access-Control-Allow-Origin에 flowpick.app 포함?
↓
아니오 → 브라우저 JavaScript 응답 읽기 차단
예 → 정상 읽기
확장 프로그램 버전:
확장 프로그램이 chrome.webRequest / chrome.fetch로 요청 발행
→ 동일 출처 정책 제한 없음
→ 모든 출처의 응읽을 읽을 수 있음
요청 빈도 제한
일부 CDN은 고빈도 요청에 대해 속도 제한을 적용합니다:
- 동시 스레드 수가 너무 높으면 429(Too Many Requests) 오류 트리거 가능
- 동시수를 4 이내로 제어 권장
- 속도 제한 발생 시 동시수 낮춘 후 재시도
세그먼트 URL 만료
일부 스트리밍 서비스의 세그먼트 URL에 유효기간 token이 포함됩니다:
- token 만료 후 세그먼트 다운로드 불가
- 만료 시간은 통상 몇 분에서 몇 시간
- 플레이리스트 획득 후 가능한 빨리 다운로드 시작 권장
- 다운로드 중단 시간이 너무 길면 플레이리스트 재획득 필요
일반적인 만료 시나리오:
| 서비스 유형 | 일반적인 만료 시간 | 권장 사항 |
|---|---|---|
| 온라인 강좌 플랫폼 | 2-4 시간 | 플레이리스트 획득 후 즉시 다운로드 |
| 라이브 재생 | 30분 - 2시간 | 가능한 빨리 완료, 중단 피하기 |
| 짧은 비디오 플랫폼 | 5-15분 | 1회 다운로드로 통상 충분 |
| 유료 스트리밍 | 1-5분 | 극히 짧은 윈도우, 신속 완료 필요 |
형식 변환 제한
FFmpeg WASM 성능
FFmpeg은 브라우저에서 WebAssembly로 실행되며, 성능은 원생 버전보다 현저히 낮습니다:
| 작업 | 원생 FFmpeg | FFmpeg WASM (싱글 스레드) | FFmpeg WASM (멀티 스레드) |
|---|---|---|---|
| TS → MP4 (1GB) | ~5초 | ~60-90초 | ~30-50초 |
| 음비디오 병합 (1GB) | ~10초 | ~120-180초 | ~60-90초 |
성능 차이의 원인:
- WASM 실행 오버헤드: WebAssembly는 브라우저 샌드박스에서 실행되며, 명령어 실행 효율은 원생의 약 70-80%
- SIMD 제한: FFmpeg은 SIMD 명령어 최적화를 대량 사용하며, WASM SIMD 지원은 원생보다 완벽하지 않음
- 메모리 접근: WASM 선형 메모리 모델과 원생 메모리 관리에 차이가 있음
- I/O 병목: 가상 파일 시스템의 읽기/쓰기 속도는 원생 파일 시스템보다 현저히 낮음
지원하지 않는 변환
다음 변환 경로는 현재 지원되지 않습니다:
- 임의 형식 → AVI, MOV, MKV, WebM
- 비디오 코딩 변환(예: H.264 → H.265)
- 오디오 코딩 변환(예: AAC → MP3)
- 해상도 스케일링
- 워터마크 또는 자막 추가
FlowPick의 FFmpeg 통합은 컨테이너 형식 변환(리무싱)에 집중하며, 코딩/디코딩은 포함되지 않습니다.
리무싱 vs 트랜스코딩:
리무싱(FlowPick 지원):
TS 컨테이너 → H.264 비디오 스트림 + AAC 오디오 스트림 추출 → MP4 컨테이너로 캡슐화
특징: 코딩 변경 없음, 속도 빠름, 무손실
트랜스코딩(FlowPick 미지원):
H.264 비디오 스트림 → 디코딩 → H.265로 재코딩 → 캡슐화
특징: 코딩 변경, 속도 느림, 손실 있음, CPU 집약적
확장 프로그램 버전 제한
Manifest V3 제한
FlowPick 확장 프로그램은 Chrome Manifest V3를 사용하며 다음 플랫폼 제한이 있습니다:
- Service Worker 수명 제한(유휴 약 30초 후 종료)
- 지속화 백그라운드 페이지 사용 불가
- 네트워크 요청 모니터링은
webRequestAPI에 의존
Manifest V3이 FlowPick에 미치는 영향:
| 제한 | 영향 | 대응 조치 |
|---|---|---|
| Service Worker 30초 타임아웃 | 장시간 다운로드 중단 가능 | 다운로드 중 하트비트 유지, SW 절전 방지 |
| 지속화 백그라운드 없음 | 백그라운드 지속 모니터링 불가 | 사용자가 팝업 창을 열 때 검출 활성화 |
webRequest 읽기 전용 변경 | 요청 헤더 수정 불가 | FlowPick에 영향 없음(읽기만, 수정 안 함) |
검출 범위
확장 프로그램의 미디어 검출은 네트워크 요청 모니터링에 의존합니다:
- 확장 프로그램 활성화 후 발행된 요청만 검출 가능
- 페이지 새로 고침 후 재검출 가능
- WebSocket 또는 MSE를 사용하는 일부 웹사이트는 미디어 URL 검출 불가능
- iframe 내 미디어는 검출 불가능할 수 있음(iframe의 크로스 오리GIN 정책에 따름)
알려진 Bug
대용량 파일 Blob 다운로드 멈칠 수 있음
증상: Blob 모드로 1.5GB에 가까운 파일 다운로드 시 브라우저가 오랫동안 무응답 상태일 수 있습니다.
원인: new Blob([...]) 생성 시 모든 데이터를 복사해야 하며, 대용량 파일의 메모리 할당과 복复制에 상당한 시간이 소요됩니다.
잠시 방안: Chrome 브라우저를 사용하여 스트리밍 쓰기를 활성화하십시오.
FFmpeg 첫 번째 로딩 느림
증상: 처음 형식 변환 기능 사용 시 FFmpeg 로딩에 10-30초 소요됩니다.
원인: FFmpeg WASM 코어 파일(약 8MB)을 네트워크에서 다운로드하고 컴파일해야 합니다.
설명: 이것은 정상적인 현상이며, 이후 사용 시 브라우저 캐시를 활용하여 로딩 속도가 현저히 향상됩니다.
로딩 시간 분해:
첫 번째 로딩:
WASM 파일 다운로드(~8MB) → 2-5초(네트워크 속도 따름)
WASM 컴파일 → 5-15초(CPU 따름)
가상 파일 시스템 초기화 → 1-3초
총계 → 10-30초
이후 로딩(캐시 적중):
캐시에서 WASM 읽기 → <1초
WASM 컴파일(캐시 가능) → 1-3초
총계 → 2-5초
일부 CDN 세그먼트 다운로드 간헐적 실패
증상: 다운로드 중 개별 세그먼트가 503 또는 네트워크 오류를 반환합니다.
원인: CDN 노드 일시적 장애 또는 네트워크 변동입니다.
설명: FlowPick은 내장 3회 재시도 메커니즘(지수 백오프)을 보유하며, 통상 자동 복구 가능합니다. 모든 재시도가 실패하면 해당 세그먼트는 건너뛰고 로그에 기록됩니다.
관련 문서
- 일반적인 문제 해결 — 증상별 분류 진단 단계와 해결 방안
- 자주 묻는 질문 — 고빈도 문제와 간결한 답변
- 다운로드 엔진 아키텍처 — 다운로드 엔진의 완전한 기술 아키텍처
- 비디오 스니핑 — HLS/DASH 플레이리스트 파싱과 암호화 검출
- 형식 변환 — FFmpeg WASM 엔진과 출력 형식
- 일괄 다운로드 — 큐 스케줄링과 동시 제어
- 브라우저 호환성 — 각 브라우저 API 지원과 강등 전략
- 온라인 도구 — 온라인 도구 사용과 제한
- 개인정보와 보안 — 권한 설명과 개인정보 보호
- 구성 참조 — 동시수, 필터 등 구성 항목
- 설치 가이드 — 확장 프로그램 설치와 활성화
- 라이브 재생 저장 — 초대형 파일 다운로드 시나리오
- 기여 가이드 — Bug 보고와 코드 기여 방법