HTTP 동적 적응 스트리밍는 무엇일까?

hyun_sang·2020년 9월 24일
0

Multimedia Engineering

목록 보기
1/1
post-thumbnail

안녕하세요, 멀티미디어 공학도 같이 공부하고 있는 프론트엔드 개발자 박현상입니다.
오늘은 우연히 멀티미디어 공학과 관련된 논문을 찾다가 WebRTC 기반 P2P 통신 병용 DASH 시스템을 위한 전달 이력 기반 피어 선택 알고리듬이라는 논문을 봤습니다.
도대체 DASH는 어떻게 사용되는 기술인지에 대해서 서술해 보았습니다!

HTTP 동적 적응 스트리밍(Dynamic Adaptive Streaming over HTTP, DASH)는 무엇일까?

HTTP 동적 적응 스트리밍(Dynamic Adaptive Streaming over HTTP, DASH 또는 MPEG-DASH)은 전통적인 HTTP 웹 서버로부터 전달되는, 인터넷을 경유하는 미디어의 고품질 스트리밍을 가능케 하는 적응 비트레이트 스트리밍 기술의 하나입니다. 애플의 HTTP 라이브 스트리밍(HLS) 솔루션과 비슷하게 MPEG-DASH는 내용을 일련의 작은 크기의 HTTP 기반 파일 세그먼트들로 분리시킴으로써 동작하며, 각 세그먼트는 영화나 스포츠 이벤트 생방송 등 잠재적으로 수시간에 걸친 내용물으 재생 시간의 짧은 간격(interval)을 포함하고 있습니다.
이 콘텐츠는 다양한 비트레이트로 이용이 가능합니다. 콘텐츠가 MPEG-DASH 클라이언트에 의해 재생되면 클라이언트는 비트레이트 적응(ABR) 알고리즘을 사용하여 재생시 멈춤이나 재버퍼링을 일으키지 않고 다운로드 할 수 있도록 가능한 최고 비트레이트의 세그먼트를 자동으로 선별하고 있습니다.
현재의 MPEG-DASH 참조 클라이언트 dash.js는 버퍼 기반(BOLA)과 하이브리드(DYNAMIC) 비트레이트 적응 알고리즘을 모두 제공합니다. 그러므로 MPEG-DASH 클라이언트는 변화하는 네트워크 상황에 순응하고 멈춤이나 재버퍼링을 거의 일으키지 않으면서 고품질의 재생을 제공할 수 있게 됩니다.

MPEG-DASH는 국제 표준화된 최초의 적응 비트레이트 HTTP 기반 스트리밍 솔루션입니다.
MPEG-DASH는 전송 프로토콜과 혼동해서는 안 되고 MPEG-DASH가 사용하는 전송 프로토콜은 TCP입니다.
MPEG-DASH는 필연적으로 모든 월드 와이드 웹 콘텐츠의 전송에 사용되는 기존 HTTP 웹 서버 하부 구조를 사용하고 있으며 인터넷에 연결된 텔레비전, TV 셋톱박스, 데스크톱 컴퓨터, 스마트폰, 태블릿 등과 같은 장치들이 인터넷을 경유하여 전달되는 멀티미디어 콘텐츠(동영상, TV, 라디오 등)을 소비할 수 있게 해 주며 다양한 인터넷 수신 상황에 대처하고 있습니다. 적응 스트리밍 솔루션의 표준화는 해당 솔루션이 범용적인 상황에 채택될 수 있음을 시장에 보증하는 것을 의미하며, 이는 마치 이와 유사하지만 사유 솔루션인 마이크로소프트의 스무스 스트리밍이라든지, 어도비의 HDS와 비견될 수 있습니다. HDS, 스무스 스트리밍과 달리 DASH는 코덱에 의존적이지 않으므로 H.265, H.264, VP9 등 어떠한 코딩 포맷으로 인코딩된 콘텐츠라도 사용이 가능합니다.

표준화

MPEG-DASH 기술은 MPEG를 통해 개발되었습니다. DASH의 작업은 2010년 시작되었으며 2011년 1월 초안 국제 표준이 되었고 2011년 11월 국제 표준이 되었습니다. MPEG-DASH 표준은 2012년 4월 출판되었으나 2019년 MPEG-DASH ISO/IEC 23009-1:2019을 통해서 개정되었습니다.

DASH의 두가지 요소

MP(Media Presentation)

  1. 오디오/비디오는 하나의 파일로 묶을 수도 있습니다. (Ex. HTTP Live Streaming)
  2. 각각의 파일로 분리될 수도 있습니다. (Ex. Smooth Streaming)

MPD(Media Presentation Description)

  1. 스트림의 정보를 나타내는 XML 입니다.

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="urn:mpeg:dash:schema:mpd:2011"
  xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd"
  type="static"
  mediaPresentationDuration="PT654S"
  minBufferTime="PT2S"
  profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">

  <BaseURL>http://example.com/ondemand/</BaseURL>
  <Period>
    <!-- English Audio -->
    <AdaptationSet mimeType="audio/mp4" codecs="mp4a.40.5" lang="en" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
      <Representation id="1" bandwidth="64000">
        <BaseURL>ElephantsDream_AAC48K_064.mp4.dash</BaseURL>
      </Representation>
    </AdaptationSet>
    <!-- Video -->
    <AdaptationSet mimeType="video/mp4" codecs="avc1.42401E" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
      <Representation id="2" bandwidth="100000" width="480" height="360">
        <BaseURL>ElephantsDream_H264BPL30_0100.264.dash</BaseURL>
      </Representation>
      <Representation id="3" bandwidth="175000" width="480" height="360">
        <BaseURL>ElephantsDream_H264BPL30_0175.264.dash</BaseURL>
      </Representation>
      <Representation id="4" bandwidth="250000" width="480" height="360">
        <BaseURL>ElephantsDream_H264BPL30_0250.264.dash</BaseURL>
      </Representation>
      <Representation id="5" bandwidth="500000" width="480" height="360">
        <BaseURL>ElephantsDream_H264BPL30_0500.264.dash</BaseURL>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

이미지 출처
소스코드 출처

참고

profile
👨‍💻 개발이 좋아서 개발자가 되었고 취미도 개발인 프론트엔드 개발자

0개의 댓글