[네트워크/Network] HTTP 스트리밍 및 대시(DASH) 기술

kindof

·

2021. 10. 10. 22:01

📺 인터넷 비디오

얼마 전에는 넷플릭스에서 DP가 정말 흥행했고, 요즘에는 오징어게임이 전세계적으로 각광을 받고 있는데요. 그래서 이번 포스팅에서는 이와 관련된 인터넷 비디오의 개념과 HTTP 스트리밍 및 대시(DASH) 기술에 대해 알아보려고 합니다.

 

먼저, 비디오 애플리케이션이란 녹화된 영화나 TV 프로그램, 스포츠 경기 등을 대상으로 하는 애플리케이션을 말합니다. 녹화된 비디오는 서버에 저장되고, 사용자는 비디오 시청을 서버에게 온디맨드(On-Demand)로 요청하게 되죠. 넷플릭스나 유튜브, 왓챠 등이 이런 비디오 스트리밍을 지원하고 있습니다.

 

비디오 스트리밍 서비스

 

한편 비디오는 이미지의 연속으로서 일반적으로 초당 24개 또는 30개의 이미지로 일정한 속도로 표시됩니다. 여기서 비디오의 중요한 특징 중 하나는 "압축"될 수 있다는 것인데, 오늘날의 상용 압축 알고리즘은 근본적으로 원하는 모든 비트 전송률로 비디오를 압축할 수 있기 때문에 비트 전송률을 높여 이미지 품질을 높이고, 고화질의 스트리밍 서비스를 제공할 수 있게 합니다.

 

이러한 맥락과 함께 네트워크의 관점으로 보면, 비디오의 가장 두드러지는 특성은 곧 비트 전송률인데요. 압축된 인터넷 비디오는 일반적으로 고화질 동영상을 스트리밍하기 위해 100 kbps에서 3Mbps 이상으로 구성됩니다. 고화질이나 초고화질 동영상의 경우 트래픽 및 스토리지 용량이 엄청나게 필요하다는 것을 의미하죠. 그리고 연속 재생을 제공하기 위해 네트워크는 압축된 비디오의 전송률 이상의 스트리밍 애플리케이션에 대한 평균 처리량을 제공해야만 하는 임무가 생깁니다.

 

 

📲 HTTP 스트리밍과 대시(DASH)

HTTP 스트리밍에서 비디오는 HTTP 서버 내의 특정 URL을 갖는 일반적인 파일로 저장됩니다. 사용자가 비디오 시청을 원하면 클라이언트는 서버에게 TCP 연결을 요청하고, 해당 URL에 대한 HTTP GET 요청을 보냅니다. 그러면 서버가 기본 네트워크 프로토콜 및 트래픽 조건이 허용되는 대로 HTTP 응답 메시지 내에서 비디오 파일을 전송하는 것이죠.

 

클라이언트 버퍼와 비디오 스트리밍

 

위 그림처럼 클라이언트 쪽에서는 애플리케이션 버퍼에 전송된 바이트가 저장됩니다. 이 버퍼의 바이트 수가 미리 정해진 임계값(Threshold)을 초과하면 클라이언트 애플리케이션이 재생을 시작하게 됩니다. 특히 스트리밍 비디오 애플리케이션은 클라이언트 애플리케이션 버퍼에서 주기적으로 비디오 프레임을 가져와서 프레임을 압축해제한 다음 사용자의 화면에 표시하죠. 따라서 비디오 스트리밍 애플리케이션은 비디오의 후반 부분에 해당하는 프레임을 수신하고 버퍼링하는 동시에 비디오를 표시합니다.

 

한편, HTTP 스트리밍은 유튜브 등 많은 시스템에서 실제 적용되고 있지만 중요한 문제점을 가지고 있습니다.

 

바로 모든 클라이언트들이 그들 사이의 가용 대역폭의 차이가 있음에도 불구하고 똑같이 인코딩된 비디오를 전송받는다는 것이죠. 또한 가용 대역폭의 차이는 서로 다른 클라이언트들 뿐만 아니라 같은 클라이언트에게도 시간에 따른 차이가 발생할 수 있습니다. 쉽게 말해서 우리 집에서 5G로 유튜브를 보는 것과 친구 집에서 LTE로 유튜브를 보는 것은 다른다는 얘기죠.

 

고화질, 저화질 비교

 

이 문제점으로 인해 등장한 것이 바로 새로운 형태의 HTTP 기반 스트리밍인 DASH(Dynamic Adaptive Streaming over HTTP)인데요. DASH에서 비디오는 여러 개의 서로 다른 버전으로 인코딩되며, 각 버전은 서로 다른 비트율과 품질 수준을 갖고 있습니다. 클라이언트는 동적으로 서로 다른 버전의 비디오를 몇 초 분량의 길이를 가지는 비디오 조각(chunk) 단위로 요청합니다. 가용 대역폭이 충분할 때에는 높은 비트율의 비디오 버전을 요청하며, 가용 대역폭이 적을 때에는 낮은 비트율의 비디오 버전을 요청하죠. 즉, 클라이언트는 HTTP GET 요청을 이용해 다른 버전의 비디오 조각을 매번 선택하게 된다는 뜻입니다.

 

조금 더 구체적으로 설명해보겠습니다.

 

DASH를 사용할 때, 각 비디오 버전은 HTTP 서버에 서로 다른 URL을 가지고 저장됩니다.

 

HTTP 서버는 비트율에 따른 각 버전의 URL을 제공하는 Manifest File(매니페스트 파일)을 가지고 있습니다.

 

그래서 클라이언트는 최초에 매니페스트 파일을 요청하여 서버에서 제공되는 다양한 버전의 동영상에 대해 알 수 있고, 이후 클라이언트는 매번 원하는 버전의 비디오 조각 단위 데이터를 선택하여 HTTP GET 요청 메시지에 URL과 Byte-range를 지정하여 요청하죠.

 

그리고 비디오 조각 단위 데이터를 다운로드하는 동안에 클라이언트는 측정된 수신 대역폭과 비트율 결정 알고리즘을 이용해 다음에 선택할 비디오 조각 단위 데이터의 버전을 결정하게 되는 것입니다.

 

 


지금까지 인터넷 비디오가 어떤 형태로 저장되고 스트리밍 되는지에 대한 공부를 해보고, HTTP 기반 스트리밍 기술인 DASH에 대해 알아봤습니다. 기술적인 내용보다는 자연스럽게(?) 이해할 수 있는 내용인 것 같습니다. 이제 동영상을 볼 때마다 DASH 기술이 떠오를 것 같습니다.

 

감사합니다.