← 쉽게 읽는 IT

넷플릭스는 어떻게 인터넷이 느려져도 영상을 이어서 재생할까?

지하철에서 화면이 잠시 흐려지는 순간, 재생 앱이 하는 일

퇴근길, 수빈은 지하철에서 넷플릭스로 드라마를 보고 있었습니다. 열차가 터널에 들어가자 화면이 잠깐 흐릿해졌습니다. 그런데 배우의 대사는 계속 이어졌고, 잠시 후에는 화질도 다시 선명해졌죠.

수빈이는 문득 궁금해졌습니다.

인터넷이 느려졌다면 영상도 바로 멈춰야 할 것 같은데, 어떻게 동영상 재생이 계속되는 걸까요?


1. 드라마 한 편을 작은 조각으로 나눠 받습니다

영상을 스트리밍할 때는 앞부분을 재생하면서 다음 부분을 내려받을 수 있습니다. 이를 위해 같은 장면을 여러 품질로 인코딩하고, 재생 중 짧은 구간 단위로 받아 볼 수 있게 준비합니다. 재생 앱에는 같은 시점의 장면을 받아 올 여러 선택지가 생깁니다.

영상 1초를 표현하는 데 들어가는 데이터의 양을 비트레이트라고 합니다. 같은 장면과 인코딩 조건이라면 대체로 비트레이트가 높을수록 더 많은 세부를 담을 수 있지만, 그만큼 전송할 데이터도 늘어납니다. 인터넷이 느려졌을 때 데이터가 적은 버전을 고르면 다음 장면을 제때 받을 가능성이 커집니다. 넷플릭스 기술 블로그의 스트리밍 설명

2. 잠깐 느려져도 미리 받은 장면으로 버팁니다

수빈이 보고 있는 장면 뒤에는 이미 내려받아 둔 몇 초 분량의 영상이 있을 수 있습니다. 이처럼 재생 전에 잠시 쌓아 두는 공간을 버퍼라고 합니다. 터널에서 새 데이터가 늦게 도착해도 버퍼에 남은 분량은 바로 재생할 수 있습니다.

가령 10초 분량이 남은 상태에서 연결이 잠깐 끊기면, 그동안 화면은 받은 영상으로 계속 움직일 수 있습니다. 연결이 오래 끊겨 남은 분량을 다 쓰면 재생은 멈추고 앱은 다음 조각을 기다립니다. 버퍼를 미리 많이 채우면 변동에 버티기 쉽지만, 처음 재생 버튼을 눌렀을 때 기다리는 시간이 길어질 수 있습니다. 넷플릭스 기술 블로그의 버퍼 설명

3. 다음 조각의 화질을 바꿔 남은 시간을 벌어요

재생 앱은 영상이 얼마나 빨리 들어오는지, 버퍼가 얼마나 남았는지 등을 고려해 다음 조각의 품질을 고릅니다. 높은 품질의 조각이 늦게 올 것으로 판단하면 데이터가 적은 버전을 요청할 수 있습니다. 상황에 따라 재생 중 비트레이트를 조절하는 방식이라 적응형 스트리밍이라고 부릅니다.

이미 재생 중인 장면을 다시 만드는 과정은 필요 없습니다. 다음 조각부터 다른 품질을 고르면 됩니다. 그래서 수빈은 줄거리가 끊기기 전에 화면이 먼저 흐릿해지는 것을 볼 수 있었던 거죠. 연결이 회복되면 앱은 더 높은 품질을 다시 선택할 수 있습니다. 넷플릭스 기술 블로그의 적응형 재생 설명

4. 영상이 출발하는 곳도 시청자 가까이에 둡니다

넷플릭스는 CDN인 오픈 커넥트(Open Connect)를 통해 영상 데이터를 시청자와 가까운 네트워크 거점에서 전달합니다. 여러 곳에 콘텐츠를 미리 배치해 두면, 시청할 때마다 먼 곳에서 같은 파일을 반복해 가져올 필요가 줄어듭니다. 넷플릭스 오픈 커넥트

다만 영상의 출발점이 가까워도 지하철 안 휴대폰의 연결은 느려질 수 있습니다. 오픈 커넥트가 영상이 이동하는 경로의 부담을 줄이는 동안, 재생 앱은 수빈의 연결 상태에 맞는 조각을 골라 받습니다. 화면이 선명해지는 순간에는 영상이 도착하는 속도와 재생에 필요한 속도의 균형도 다시 달라진 셈입니다.

이야기 속 IT 개념

  • 스트리밍
  • 비트레이트
  • 버퍼
  • CDN
  • 캐시
  • ABR