현대의 웹 생태계에서 비디오 스트리밍 데이터를 분석하고 추출하는 것은 개발자들에게 매우 흥미로운 주제입니다. 특히 '중국의 유튜브'라 불리는 Bilibili(빌리빌리)는 독자적인 기술 스택과 복잡한 미디어 전달 프로토콜을 사용하고 있어, 기술적으로 도전적인 과제를 제시합니다.
최근 저는 이러한 복잡한 구조를 해결하고 사용자가 간편하게 고화질 영상을 소장할 수 있도록 돕는 Bilibili 비디오 다운로더를 런칭했습니다. 본 포스팅에서는 이 도구를 개발하며 마주했던 DASH 프로토콜 분석, BV/AV ID 변환 로직, 그리고 서버 사이드 FFmpeg 머징 최적화에 대한 기술적 여정을 공유하고자 합니다.
1. ID 체계의 이해: AV 번호에서 BV 번호로의 전환
Bilibili는 과거 순차적인 정수값인 av 번호를 사용했으나, 데이터 크롤링 방지 및 보안 강화를 위해 Base58 기반의 BV 번호 체계로 전환했습니다.
기술적 변환 알고리즘
개발자로서 이 도구를 구현할 때 가장 먼저 해결해야 할 과제는 두 ID 체계 간의 상호 변환이었습니다. BV 번호는 단순한 난수가 아니라 특정 알고리즘에 의해 생성된 문자열입니다.
• Base58 인코딩: 0, O, I, l과 같이 혼동하기 쉬운 문자를 제외한 58개의 문자를 사용합니다.
• 비트 연산 및 XOR: 특정 오프셋 값과 XOR 연산을 통해 내부 데이터베이스 ID와 매핑됩니다.
이 변환 로직을 서버 사이드에 구현함으로써, 사용자가 어떤 형태의 URL을 입력하더라도 시스템이 정확한 비디오 메타데이터를 찾아낼 수 있도록 설계했습니다.
2. 핵심 도전 과제: DASH 스트리밍 프로토콜 분석
Bilibili 비디오 전달의 핵심은 DASH(Dynamic Adaptive Streaming over HTTP) 프로토콜입니다. 이는 일반적인 정적 MP4 파일 링크를 추출하는 것보다 훨씬 높은 난이도를 요구합니다.
오디오와 비디오의 분리 (Separation)
DASH 구조에서 Bilibili는 비디오 스트림과 오디오 스트림을 별도의 .m4s 파일로 전달합니다.
• 장점: 사용자의 네트워크 대역폭에 따라 오디오는 그대로 둔 채 비디오 해상도(4K, 1080P 등)만 동적으로 조절할 수 있습니다.
• 다운로더의 과제: 시스템은 가장 높은 품질의 비디오 궤도와 오디오 궤도를 각각 찾아내어 두 개의 독립적인 스트림을 동시에 획득해야 합니다.
API 협상 및 Referer 보안
Bilibili CDN은 강력한 무단 링크 방지 기능을 갖추고 있습니다. 단순히 URL을 알아낸다고 해서 다운로드가 가능하지 않습니다.
• Referer 검증: HTTP 헤더에 반드시 https://www.bilibili.com/을 포함해야 합니다.
• 권한 제어: 4K나 60fps와 같은 프리미엄 화질은 특정 API 토큰과 쿠키 세션이 필요하며, 이를 위해 효율적인 세션 관리 엔진을 구축했습니다.
3. 고성능 백엔드 아키텍처 및 미디어 처리
twittervideodownloaderx.com/bilibili_downloader_ko는 대규모 동시 접속을 처리하기 위해 Python/Django 기반의 비동기 아키텍처를 채택했습니다.
비동기 I/O를 활용한 병렬 다운로드
비디오 파싱은 전형적인 I/O 바운드 작업입니다. 저희는 httpx와 asyncio를 결합하여 비디오 헤더와 오디오 데이터를 병렬로 요청합니다. 이를 통해 동기식 방식 대비 응답 속도를 300% 이상 향상시켰습니다.
FFmpeg를 이용한 실시간 머징 (Muxing)
사용자에게 분리된 파일이 아닌 하나의 MP4 파일을 제공하기 위해 서버 사이드에서 머징 작업을 수행합니다. 이때 가장 중요한 것은 재인코딩(Transcoding) 방지입니다.
Bash
ffmpeg -i video_stream.m4s -i audio_stream.m4s -c copy -map 0✌️0 -map 1🅰️0 output.mp4
-c copy 옵션을 사용하여 데이터의 손실 없이 비트스트림만 복사함으로써, 서버 CPU 부하를 최소화하고 원본 화질을 100% 보존합니다.
4. 프론트엔드 최적화 및 사용자 경험 (UX)
기술적 기능만큼이나 중요한 것이 사용자의 접근성입니다.
- 반응형 디자인: 다양한 모바일 기기와 데스크탑 환경에서 최적의 인터페이스를 제공합니다.
- 다국어 지원: 한국 시장을 위해 최적화된 한국어 버전을 포함하여 글로벌 로컬라이징을 완료했습니다.
- 최소화된 로딩: 불필요한 JS 라이브러리를 배제하고 Vanilla JS와 경량화된 CSS 프레임워크를 사용하여 페이지 로딩 속도를 극대화했습니다.
5. 결론 및 향후 계획
Bilibili 비디오 다운로더 개발은 단순한 웹 스크레이핑을 넘어 미디어 프로토콜, 서버 최적화, 그리고 글로벌 SEO 전략을 통합하는 과정이었습니다. 앞으로도 DASH 프로토콜의 변화에 빠르게 대응하고 더욱 안정적인 서비스를 제공할 예정입니다.
안전하고 빠른 Bilibili 영상 저장을 원하신다면 지금 바로 확인해 보세요: 👉 Bilibili 비디오 다운로더 - 고화질 무료 도구
기술 스택 요약:
• Backend: Python / Django / Asyncio
• Media Engine: FFmpeg (Stream Copy)
• Networking: Httpx / Distributed Proxy
• Frontend: Modern JS / CSS Grid
본 프로젝트의 기술적 세부 사항이나 DASH 파싱 로직에 대해 궁금한 점이 있다면 언제든 댓글로 소통해 주세요!

Top comments (0)