IT/Network

[Network] Application Layer (애플리케이션 계층) - 2.6 비디오 스트리밍 및 DASH 정리

wookiist 2018. 1. 12. 13:52

2.6 Video Streaming and Content Distribution Networks

현재 스트리밍 영상은 북미 지역의 가정 ISP의 트래픽 대다수를 차지하고 있다. 특히, 2015년 가정 ISP의 트래픽 중 Netflix나 YouTube 서비스는 그 자체만으로도 엄청나게도 각각 37%와 16%를 차지하고 있다.

2.6.1 Internet Video

스트리밍 비디오 애플리케이션은 영화나 TV 쇼나 녹화된 스포츠 경기나 Youtube에서 흔히 보이는 유저들이 직접 만든 영상과 같은 사전에 녹화된 비디오를 기반으로 한다. 이렇게 녹화된 영상은 서버에 위치하며, 사용자는 필요에 따라 비디오를 보기 위해 서버로 요청을 보낸다. Netflix, YouTube(Google), Amazon, Youku와 같은 많은 인터넷 회사들은 비디오 스트리밍 서비스를 제공한다.

비디오는 연속적인 이미지이며, 초당 24나 30개의 이미지를 일정한 간격으로 보여준다. 압축되지 않은 디지털적으로 인코딩된 이미지는 픽셀들의 배열로 구성되어 있다. 그리고 이 각각의 픽셀들은 빛과 색을 표현하는 수많은 비트로 인코딩되어 있다. 비디오의 중요한 특징은 비디오 영상이 압축될 수 있으며, 그것에 의하여 비트레이트에 따른 비디오의 품질을 좌우하게 된다. 현재 존재하는 압축 알고리즘은 비디오를 원하는 만큼의 비트레이트로 압축할 수 있다. 당연하게도 비트레이트가 높으면 높을 수록 이미지의 품질도 높아지고, 사용자의 전체적인 시청 경험도 높아지게 될 것이다.

네트워크의 관점에서 비디오의 가장 두드러진 특징은 아마도 그것의 높은 비트레이트일 것이다. 압축된 인터넷 비디오는 저화질의 100kbps에서 고화질의 영상 스트리밍을 위한 3Mbps까지 다양하다. 또 4K 스트리밍의 경우, 10Mbps보다 훨씬 높다.

무엇보다도, 비디오 스트리밍에서 가장 중요한 성능 척도는 종단간 평균 처리량일 것이다. 연속적인 재생을 제공하기 위해서, 네트워크는 반드시 평균 처리량을 적어도 비디오의 압축된 비트레이트 크기 정도만큼은 스트리밍 애플리케이션에게 제공해야 한다.

2.6.2 HTTP Streaming and DASH

HTTP 스트리밍에서, 영상은 보통의 파일처럼 HTTP 서버에 특정 URL을 가지고 저장되어 있다. 사용자가 영상을 보고 싶을 때, 클라이언트는 서버와 TCP 연결을 만들고, 그 URL로 HTTP GET request message를 전송한다. 이를 전송받은 서버는 HTTP response message에 영상 파일을 담아 네트워크 트래픽 조건과 네트워크 프로토콜이 허용하는 내에서 최대한 빠르게 전송한다. 클라이언트 측에선 client application buffer에 받은 bytes를 쌓는다. client application buffer에 쌓인 bytes가 사전에 정의한 threshold를 초과할 때 client application은 영상을 재생하기 시작한다. 특히, 스트리밍 영상 애플리케이션은 주기적으로 client application buffer에서 비디오 프레임을 가져오고, 압축을 해제하고 그것을 사용자의 스크린에 보여준다. 이렇게 스트리밍 영상 애플리케이션이 영상을 보여줄 때, 그와 동시에 비디오의 다음 영상 부분에 해당하는 프레임을 수신하고 버퍼링을 하고 있다.

HTTP 스트리밍이 관습적으로 많이 써오긴 했지만, 주요한 단점이 있다. 클라이언트의 bandwidth가 사람마다 다 다를 것임에도 불구하고, HTTP 스트리밍은 모두에게 똑같이 인코딩된 영상을 보내준다. 이러한 문제점을 해결하기 위해 Dynamic Adaptive Streaming over HTTP (DASH) 라는 이름의 새로운 타입의 HTTP 기반의 스트리밍을 개발하게 되었다.

DASH에서 하나의 영상은 여러 개의 다른 버전으로 인코딩된다. 그리고 각 버전은 다 다른 비트레이트를 갖고 있고, 이에 따라 다 다른 품질을 갖게 된다. 클라이언트는 영상의 아주 짧은 일부 조각을 동적으로 요청한다. bandwidth가 크면, 클라이언트는 자연스럽게 높은 비트레이트 버전의 chunk를 선택할 것이고, 낮은 bandwidth라면, 낮은 비트레이트 버전의 chunk를 선택할 것이다. 클라이언트는 HTTP GET request message를 통해 각기 다른 chunk를 매 시간마다 선택하게 된다.

DASH는 각기 다른 인터넷 access rate를 가진 클라이언트가 각기 다른 인코딩 레이트를 받도록 해준다. 저속의 3G 연결을 가진 클라이언트는 낮은 비트레이트 버전을 받을 것이고, 유선 연결된 클라이언트는 고품질의 버전을 받을 것이다. DASH는 세션이 유지되는 경우 종단간 bandwidth가 변경되는 경우, 이에 맞게 클라이언트가 가용한 bandwidth로 변화하게 해준다. 이 특징은 특히 모바일 사용자들에게 중요하다. 모바일 사용자들은 그들의 움직임에 따라 기지국과의 거리가 달라지므로, 빈번하게 bandwidth가 변하기 때문이다.

DASH를 이용하는 경우, HTTP 서버 내에 비디오가 버전별로 저장되어 있고, 각 버전들은 다 다른 URL을 가지고 있다. HTTP 서버는 각 비트레이트에 해당하는 버전별 URL을 제공해주는 manifest file을 갖고 있다. 클라이언트는 manifest file을 요청하고, 다양한 버전에 대한 정보를 인지한다. 그 후, 클라이언트는 한 시점에 대해 특정 URL을 지정하고, HTTP GET request message에 그 각각의 chunk에 대한 byte range를 지정한다. chunk를 다운로드 하는 동안, 클라이언트는 수신한 bandwidth를 측정하고, 그 다음에 요청할 때는 어떤 버전으로 요청할 지를 알기 위해 rate determination algorithm을 계산한다. 이런식으로 DASH는 클라이언트가 다양한 품질 내에서 자유롭게 전환할 수 있도록 해준다.

반응형