HLS 버퍼링이 계속될 때: 원인별 점검 체크리스트
먼저 범위부터 좁힌다
버퍼링은 증상이 하나지만 원인은 여러 겹으로 쌓여 있습니다. 설정을 무작정 만지기 전에 짧은 질문 두 개로 점검 범위부터 줄이세요. 이 기기에서만 끊기는가? 그렇다면 클라이언트 쪽입니다. 다른 영상은 잘 되는데 이 영상만 끊기는가? 그렇다면 소스 쪽입니다. 기기 × 소스라는 두 축으로 나누면 아래 단계 중 건너뛰어도 되는 구간이 바로 보입니다.
1단계 · 재생 환경
- 같은 회선을 쓰는 다른 기기, 그리고 휴대폰 데이터(핫스팟)에서 각각 열어 봅니다. 핫스팟에서 매끄럽다면 공유기나 사내망이 용의자입니다.
- 다운로드, 클라우드 동기화, VPN처럼 대역폭을 잠식하는 프로그램을 잠시 중지합니다.
- 브라우저 탭이 수십 개 열려 있으면 디코딩 여유도 줄어듭니다. 재생 탭만 남겨 둔 상태로 비교해 보세요.
2단계 · 화질과 세그먼트 크기
- 플레이어에 화질 선택이 있으면 한 단계 낮춰 봅니다. 1080p에서 끊기던 스트림이 480p에서 매끄러워진다면 회선 속도가 병목이라는 뜻입니다.
- 개발자 도구 Network 패널에서
.ts로 필터링해 보세요. 조각 하나를 받는 시간이 조각 재생 시간보다 길면 재생이 계속 밀립니다. - 서버를 직접 운영하는 입장이라면 세그먼트 길이를 2~6초 범위로 유지하는 편이 안전합니다. 너무 길면 시킹이 둔해지고, 너무 짧으면 요청 오버헤드가 커집니다.
속도를 수치로 확인하고 싶으면 조각 하나를 직접 받아 보세요:
curl -o /dev/null -s -w "DNS %{time_namelookup}s / 연결 %{time_connect}s / 첫 바이트 %{time_starttransfer}s / 총 %{time_total}s\n" "https://cdn.example.com/live/0456.ts"
첫 바이트 시간(TTFB)이 1초를 넘는다면 CDN 캐시 미스나 서버 응답 지연을 의심할 차례입니다.
3단계 · 서버와 CDN
- 라이브 방송에서 전 시청자가 동시에 끊긴다면 송출 인코더나 업링크 문제입니다. 시청자 쪽에서 손댈 일이 없습니다.
- 같은 세그먼트를 반복해서 요청했는데 매번 캐시 미스가 나온다면 CDN 캐시 키 설정이나 헤더 우회 규칙을 점검하세요.
- 마스터 재생 목록의
BANDWIDTH표기가 실제 비트레이트보다 과하게 낮으면 플레이어가 회선을 과신해 상위 화질을 골라 계속 밀리게 됩니다.
4단계 · 권한과 CORS
- 콘솔에 교차 출처 오류가 반복된다면 조각 요청이 차단되고 있는 것이고, 겉으로는 그저 무한 버퍼링처럼 보입니다.
- 서명이 붙은 URL은 만료되면 재생 목록은 열리지만 조각 요청이 403으로 떨어지는 패턴을 보입니다. Network 패널에서 상태 코드를 확인하세요.
- 핫링크 방지(리퍼러 검사)가 걸린 소스는 다른 페이지에서 붙여 넣으면 세그먼트 일부만 실패하는 식으로 나타납니다.
여기서도 안 되면
소스 자체가 불안정한 무료 스트림이라면 클라이언트 튜닝에는 한계가 있습니다. 자주 보는 콘텐츠라면 파일로 받아 두는 편이 낫습니다. M3U8→MP4 변환으로 내려받으면 회선 상태와 무관하게 재생되고, 도구 선택이 고민될 때는 튜토리얼의 비교 글을 참고하세요. 간단히 화면만 확인하는 용도라면 온라인 플레이어로 충분합니다.