코린이의 개발 일지

비디오 스트리밍 동작 흐름 - Adaptive HTTP Streaming 본문

CS공부/네트워크

비디오 스트리밍 동작 흐름 - Adaptive HTTP Streaming

폴라민 2023. 10. 18. 19:59
반응형

기존 Progressive download 방식

기존에 사용되던 Progressing download(PD) 방식은 동영상 소스가 한번 선택되면 해당 컨텐츠를 끝까지 다운로드 하여 플레이하는 방식이다.

아래의 그림처럼 세그먼트 단위로 비디오 파일을 받아서 클라이언트 측 버퍼에 일정 이상 쌓이면 동영상이 재생되는 방식으로 동작한다.

PD 방식의 단점은 한가지 해상도의 동영상 소스가 선택되어 계속 다운로드하는 방식이다 보니, 네트워크 상황에 따라 사용자가 지속해서 버퍼링을 만나게 된다는 것이다.

 

이러한 문제를 해결하기 위해 Adaptive HTTP Streaming 방식이 나왔다

 

Adaptive HTTP Streaming

기존의 HTTP 프로토콜을 이용해 구현하는 스트리밍 기술이다. 

유튜브에서 사용하는 HLS 프로토콜도 Adative HTTP Streaming 기술을 기반으로 한다.

 

아이디어는 다음과 같다.

  1. 하나의 동영상을 세그먼트 단위로 쪼갠다.
  2. 쪼갠 각각의 세그먼트들을 다양한 해상도로 인코딩해 저장한다.

Adaptive HTTP Streaming 방식을 사용하면 네트워크 상황에 따라 해상도 선택이 가능하다.

사용자의 네트워크 트래픽이 느리다면 낮은 해상도의 영상으로 버퍼링 없이 볼 수 있고, 사용자의 네트워크 트래픽이 빠르다면 높은 해상도의 영상을 시청할 수 있다.

 

또한 잘게 쪼개진 세그먼트 단위로 파일을 하나씩 다운로드 하기 때문에 동영상 재생 도중에 다른 해상도로 쉽게 교체 가능하다.

예를 들면, 사용자의 네트워크 사정이 좋지 않다면 동영상의 480P 소스를 한 조각씩 스트리밍 하다가, 네트워크 상황이 나아지면 다음 조각은 더 높은 해상도를 갖는 소스를 다운로드해 스트리밍할 수 있다.

 

이를 통해 사용자는 버퍼링 없이 동영상 시청이 가능하다.

 

Adaptive Streaming의 동작 과정

서버

  1. 동영상을 받아서 다양한 해상도로 인코딩한다.
  2. segmenter가 각각의 동영상을 쪼갠다.
  3. web server에 각각의 동영상 파일들을 저장해둔다.
  4. 각 해상도별 세그먼트 정보들을 담은 [Manifest] 파일(그림에서는 index file)을 생성한다.
  5. 필요한 경우 CDN에 쪼개진 동영상들과 Manifest 파일을 올려둔다.

Manifest 파일에는 동영상에 대한 정보, 각 세그먼트 별 사용할 수 있는 해상도와 세그먼트가 위치한 CDN URL 정보가 담겨있다.

 

클라이언트

  1. Manifest 파일 요청
  2. Manifest 파일 파싱
  3. 사용자 네트워크 대역폭 측정 후 최적의 비디오 퀄리티 선택
  4. 비디오 세그먼트 다운로드
  5. 다운로드한 세그먼트를 MSE 버퍼에 저장
  6. MSE는 데이터를 디코딩하고 비디오 플레이어에 제공해 재생

MSE(Media Source Extensions)는 클라이언트에서 Adaptive Streaming을 가능하게 하는 표준 기술이다. MSE를 통해 스트리밍 데이터를 디코딩하여 비디오 플레이어에 전달할 수 있다.

 

https://www.w3.org/TR/media-source/

 

Media Source Extensions™

Follow these steps when the coded frame processing algorithm needs to generate a splice frame for two overlapping timed text coded frames: Let track buffer be the track buffer that will contain the splice. Let new coded frame be the new coded frame, that i

www.w3.org

 

Adaptive HTTP Streaming를 제공하기 위한 프로토콜

Adaptive HTTP Streaming을 제공하기 위한 프로토콜로 대표적인 것은 HLS와 DASH가 있다.

Manifest 파일에 대한 스펙을 담고 있는 프로토콜이다.

HLS

애플에서 독자적으로 만든 프로토콜로 맥용 사파리와 모바일 사파리에서는 네이티브로 지원한다. 

그외 특정 브라우저에서도 네이티브로 지원하기 때문에, 지원되는 브라우저에서는 HTML5 Video의 미디어 소스로 별다른 설정 없이 바로 HLS 스트리밍을 사용할 수 있다.

네이티브로 지원하지 않는 브라우저의 경우 MSE를 사용해 구현할 수 있다.

DASH

MPEG와 ISO 비준 표준이다.

네이티브에서 지원하는 브라우저는 없기 때문에 HTML5 Video 태그에서 바로 소스로 사용할 수 없다. 

따라서 MSE를 이용해 서비스에 맞춰 Adaptive한 스트리밍을 직접 구현해줘야 한다.

반응형
Comments