유튜브가 동영상을 다운로드하는 방식
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 웹 개발자, 동영상 스트리밍 기술을 구현하는 개발자
- 난이도: 중급 이상 (IndexedDB, MediaSource API 사용 경험 필요)
핵심 요약
- 동영상은 미리 정의된 크기로 쪼개진 채크(Chunk) 형태로 저장됨
- IndexedDB를 사용해 BLOB 및 ArrayBuffer 형태의 영상 데이터를 암호화하여 저장
- MediaSource API를 통해 스트리밍 중 동영상 채크를 동적으로 제공
- 버퍼링 전략: 현재 재생 위치보다 앞의 영역만 미리 로드(예: 2분 재생 시 6분까지 로드)
섹션별 세부 요약
1. 동영상 채크 분할 전략
- 4K 영상은 다중 품질로 변환 후 저장(예: 4K, 1080p 등)
- 1시간 영상은 60개의 1분 채크 또는 120개의 30초 채크로 분할
- 분할 방식은 비디오 크기/길이에 따라 유동적
2. IndexedDB 기반의 저장 방식
- IndexedDB에 BLOB 및 ArrayBuffer 형식의 암호화된 채크 저장
- 오프라인 재생 시 암호화 해독 후 채크 복구
- IndexedDB는 브라우저 내부 저장소로, 서버와의 상호작용 없이 작동
3. 스트리밍 및 버퍼링 로직
- 버퍼링 범위 제한: 전체 동영상이 아닌 현재 재생 위치 기반의 앞 영역만 로드
- 예: 2분 재생 시 6분까지 로드 (최대 4분 범위)
- 라이브 스트리밍 시 동일한 로직 적용
4. MediaSource API 활용
- 동적 채크 전송:
태그에 직접 MP4 파일을 로드하는 대신 MediaSource API 사용
- 비트레이트 조정, 채크 동적 추가 가능
- 유튜브도 MediaSource API를 활용
결론
- 동영상 채크 분할 + IndexedDB 활용이 오프라인 저장의 핵심
- MediaSource API를 통해 스트리밍 효율성 극대화
- 버퍼링 범위 제한은 리소스 절약과 네트워크 유연성 확보에 기여