DASH — 프로토콜 및 동적 스트리밍 작동 원리

저자: IT Sectr 게시일: 2026-05-23 읽는 시간: 9 분

Dynamic Adaptive Streaming over HTTP (DASH)는 MPEG(Moving Picture Experts Group)이 개발한 멀티미디어 적응형 스트리밍을 위한 국제 표준입니다. DASH는 Media Presentation Description (MPD) 형식의 XML 스트림 설명을 사용하여 HTTP를 통해 비디오와 오디오를 전달하고, 콘텐츠를 다양한 비트레이트의 세그먼트로 분할합니다. Bitmovin Video Developer Report (2025)에 따르면, 58%의 비디오 개발자가 DASH를 사용하고 있어 HLS 다음으로 두 번째로 인기 있는 프로토콜입니다.

핵심 요약

  • DASH는 HTTP를 통한 적응형 스트리밍을 위한 개방형 국제 MPEG 표준입니다.
  • MPD 파일(Media Presentation Description)은 기간과 적응 세트에 대한 설명이 포함된 XML 구조를 통해 스트림을 관리합니다.
  • 코덱은 사양에 의해 제한되지 않습니다 — DASH는 H.264, HEVC, AV1, VP9, AAC 등을 지원합니다.
  • DRM은 Common Encryption (CENC)을 통해 구현되며, 단일 스트림에서 Widevine, PlayReady, FairPlay를 지원합니다.
  • 크로스플랫폼 DASH는 ExoPlayer (Android), dash.js (브라우저) 및 libdash를 통해 지원됩니다.

DASH란?

MPEG-DASH(Dynamic Adaptive Streaming over HTTP)는 2012년에 독점 적응형 스트리밍 솔루션의 파편화에 대응하여 발표된 국제 표준 ISO/IEC 23009-1입니다. HLS(Apple의 독점 프로토콜) 및 Smooth Streaming(Microsoft)과 달리, DASH는 처음부터 개방적이고 벤더에 독립적인 표준으로 개발되어 업계에서 폭넓은 지지를 받았습니다.

DASH의 주요 혁신은 스트림 설명과 미디어 콘텐츠의 분리입니다. 스트림 설명은 MPD(Media Presentation Description)라는 XML 파일에 저장되며, 사용 가능한 옵션(비트레이트, 해상도, 코덱, 자막, 오디오 트랙)에 대한 모든 정보를 포함합니다. 미디어 콘텐츠는 개별 세그먼트(일반적으로 fMP4)에 저장되며 HTTP를 통해 독립적으로 로드할 수 있습니다. 이 아키텍처를 통해 서버 인프라를 최대한 단순하게 유지할 수 있습니다 — 모든 HTTP 서버가 DASH 콘텐츠를 제공할 수 있습니다.

DASH의 적응성은 콘텐츠 변형의 다중화를 통해 구현됩니다. 서버는 여러 Representation(다양한 압축 매개변수를 가진 콘텐츠의 복사본)을 준비합니다. 클라이언트는 채널 대역폭을 분석하고 품질과 재생 안정성의 최적 균형을 선택하여 표현 간에 동적으로 전환합니다. 학술 연구(IEEE Access, 2024)에 따르면, BOLA 알고리즘을 사용한 DASH는 불안정한 연결에서 HLS에 비해 22% 더 적은 비트레이트 전환을 보여줍니다.

DASH의 역사와 표준화

MPEG은 2010년에 기존 솔루션(Apple HLS, Microsoft Smooth Streaming, Adobe HDS)을 분석한 후 DASH 작업을 시작했습니다. 표준의 첫 번째 버전(ISO/IEC 23009-1:2012)은 2012년에 발표되었습니다. 두 번째 버전(2014)은 이벤트 지원, 향상된 광고 삽입 및 서버 제어 적응을 추가했습니다. 세 번째 버전(2019)은 HDR, 8K, 햅틱 비디오 지원 및 5G 네트워크를 위한 MMT(MPEG Media Transport)와의 통합 개선을 추가했습니다.

2024년, MPEG는 DASH Next Generation을 발표했습니다. 여기에는 신경망 코덱 지원, 클라우드 렌더링 및 확장 현실(XR) 시나리오 최적화가 포함됩니다. 주요 혁신은 신경망 기반 비디오 코딩(NNVC)으로, 클라이언트 측 디코딩에 ML 모델을 사용하여 품질을 유지하면서 비트레이트를 30-50%까지 줄일 수 있습니다.

DASH 작동 방식

DASH 스트림 재생 프로세스는 네 가지 순차적 단계로 구성됩니다: MPD 가져오기, 스트림 설명 파싱, 초기 표현 선택, 표현 간 동적 전환. 각 단계는 사용자 경험 품질에 영향을 미치는 고유한 특성을 가지고 있습니다.

MPD 가져오기 및 파싱

플레이어는 알려진 URL에서 MPD 파일을 로드합니다. MPD에는 전체 스트림을 설명하는 XML 구조가 포함되어 있습니다: 콘텐츠 기간, 타임라인, 사용 가능한 기간(Period), 적응 세트(AdaptationSet), 특정 인코딩 매개변수가 있는 표현(Representation). 플레이어는 MPD를 파싱하고 사용 가능한 미디어 리소스의 내부 모델을 만듭니다.

두 가지 해상도를 가진 VOD 콘텐츠의 기본 MPD 파일 예시:

xml
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
     profiles="urn:mpeg:dash:profile:isoff-live:2011"
     type="static"
     mediaPresentationDuration="PT1H30M">
    <Period duration="PT1H30M">
        <AdaptationSet mimeType="video/mp4">
            <Representation bandwidth="5000000"
                           width="1920" height="1080"
                           codecs="avc1.640028"/>
            <Representation bandwidth="1000000"
                           width="640" height="360"
                           codecs="avc1.64001E"/>
        </AdaptationSet>
    </Period>
</MPD>

세그먼트 로딩 및 적응

초기 표현을 선택한 후, 플레이어는 세그먼트 로딩을 시작합니다. 각 세그먼트에는 수 초의 콘텐츠(일반적으로 2-10초)가 포함됩니다. 플레이어는 여러 세그먼트 앞서 버퍼를 유지하여 네트워크 속도의 단기적인 저하에 대한 복원력을 보장합니다. ABR(Adaptive Bitrate) 알고리즘은 지속적으로 세그먼트 다운로드 속도를 모니터링하고 사용 가능한 비트레이트 간 전환을 결정합니다.

DASH를 위한 최신 ABR 알고리즘인 BOLA(Buffer Occupancy based Lyapunov Algorithm) 및 Pensieve(강화 학습 기반)는 현재 대역폭뿐만 아니라 버퍼 크기, 콘텐츠 유형(스포츠, 뉴스, 영화) 및 장치 전력 소비까지 고려합니다. dash.js 및 ExoPlayer의 일부인 BOLA는 안정적인 버퍼를 유지하면서 비트레이트 전환 횟수를 최소화하며, 이는 ACM 연구(Spiteri et al., 2020)에 의해 확인되었습니다.

DASH 구조: MPD, Period, Adaptation Set

DASH 스트림의 계층적 구조는 네 가지 수준으로 구성됩니다: MPD → Period → AdaptationSet → Representation. 각 수준은 세부 정보 계층을 추가하여 단순한 VOD부터 광고 삽입 및 다중 각도 비디오가 포함된 라이브 방송까지 복잡한 시나리오를 설명할 수 있습니다.

MPD (Media Presentation Description)

MPD는 전체 미디어 프레젠테이션을 설명하는 루트 요소입니다. MPD 속성은 스트림 유형(VOD의 경우 static, 라이브의 경우 dynamic), 전체 기간, 타임라인, 프로필 및 DRM 정보를 정의합니다. MPD에는 하나 이상의 Period가 포함될 수 있으며, 각 Period는 콘텐츠의 독립적인 시간 세그먼트를 나타냅니다.

Period, AdaptationSet 및 Representation

Period는 프레젠테이션의 시간 세그먼트입니다. VOD의 경우 전체 콘텐츠에 단일 Period가 사용됩니다. 광고 삽입이 있는 라이브의 경우 Period가 동적으로 변경될 수 있습니다 — 플레이어는 업데이트된 MPD를 로드하고 광고 블록에 해당하는 새 Period를 감지합니다. 각 Period에는 하나 이상의 AdaptationSet이 포함됩니다.

AdaptationSet은 하나의 미디어 유형(비디오, 오디오, 자막)의 교환 가능한 표현 그룹입니다. AdaptationSet 내에서 모든 표현은 비트레이트 및/또는 해상도만 다르며 동일한 콘텐츠를 인코딩합니다. 중요한 특성: 플레이어는 재생 중단 없이 세그먼트 경계에서 동일한 AdaptationSet 내의 표현 간에 전환할 수 있습니다.

Representation은 특정 비트레이트, 해상도 및 코덱을 가진 특정 인코딩 변형입니다. 각 Representation에 대해 MPD는 세그먼트를 로드하기 위한 URL 템플릿을 지정합니다. DASH는 유연한 세그먼트 주소 지정 시스템을 사용합니다 — 세그먼트 번호 및 시간 대체($Number$, $Time$)가 있는 URL 템플릿을 통해 서버가 MPD에서 각 세그먼트를 나열하지 않고도 동적으로 파일 이름을 생성할 수 있습니다.

세그먼테이션 및 패키징

DASH의 세그먼트는 두 가지 유형이 있습니다: Segment 유형(미디어 데이터만 포함)과 Subsegment 유형(더 세분화된 액세스를 위한 세그먼트의 일부). DASH 콘텐츠를 인코딩하기 위해 FFmpeg 또는 배치 인코더와 같은 도구가 사용됩니다. 입력 파일에서 DASH 스트림을 생성하는 예시:

python
import subprocess

subprocess.run([
    "ffmpeg",
    "-i", "input.mp4",
    "-filter_complex",
    "[0:v]split=2[v1][v2];[v1]scale=1920:1080[v1out];[v2]scale=640:360[v2out]",
    "-map", "[v1out]", "-b:v:0", "5000k",
    "-map", "[v2out]", "-b:v:1", "1000k",
    "-map", "0:a",
    "-f", "dash",
    "-seg_duration", "4",
    "-use_template", "1",
    "-use_timeline", "1",
    "dash/stream.mpd"
])

DASH vs HLS: 프로토콜 비교

DASH와 HLS 사이의 선택은 비디오 스트리밍 시스템을 설계할 때 주요 결정 중 하나입니다. 두 프로토콜 모두 동일한 문제(HTTP를 통한 적응형 비디오 전달)를 해결하지만, 아키텍처, 코덱 지원 및 생태계에서 근본적인 차이점이 있습니다. 주요 매개변수별로 비교해 보겠습니다.

매개변수DASHHLS
표준국제 (ISO/IEC 23009-1)독점 (RFC 8216, Apple)
스트림 설명XML (MPD)M3U8 재생목록
코덱모두 (H.264, HEVC, AV1, VP9)제한적 (H.264, HEVC, 2023부터 AV1)
세그먼트 형식fMP4 (기본), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (모든 DRM 통합)FairPlay, Widevine (개별)
iOS 지원타사 플레이어를 통해네이티브 (AVPlayer, Safari)
브라우저Chrome, Firefox, Edge (MSE를 통해)Safari (네이티브), 기타 MSE를 통해

주요 장점 DASH의 — 코덱 독립성. HLS가 원래 Apple이 지원하는 코덱(H.264, HEVC, 최근에는 AV1)으로 제한되었던 반면, DASH는 플레이어가 지원하는 모든 코덱(VP9/VP8, YouTube 및 Chrome에 중요; AV1, 효율성; H.264/HEVC, 호환성)을 사용할 수 있습니다.이로 인해 DASH는 모든 기기에 통합 스트림을 제공해야 하는 크로스플랫폼 서비스에 선호되는 선택이 됩니다.

단점 iOS에서 DASH의 — Safari 및 AVPlayer에서 네이티브 지원 부족. iOS 개발자는 타사 HLS 호환 플레이어 또는 VTDecoder를 통한 통합이 있는 libdash와 같은 라이브러리를 사용해야 합니다. 실제로 이는 iOS 우선 프로젝트의 경우 HLS가 사실상의 표준으로 남아 있는 반면, Android 및 웹 플랫폼의 경우 DASH가 더 유연하고 강력한 솔루션임을 의미합니다.

모바일 개발에서 DASH 활용

모바일 애플리케이션에 DASH를 통합하는 것은 플랫폼에 따라 다릅니다. Android에서는 확장 모듈과 함께 ExoPlayer를 통해 DASH가 직접 지원됩니다. iOS에서는 AVFoundation 또는 MPEGDASHPlayer를 통한 통합이 있는 libdash와 같은 타사 라이브러리가 필요합니다. 두 플랫폼의 실제 구현을 살펴보겠습니다.

ExoPlayer를 통한 Android에서의 DASH

Google의 ExoPlayer는 `exoplayer-dash` 모듈을 통해 DASH에 대한 내장 지원을 제공합니다. DASH 스트림 연결은 다른 형식과 다르지 않습니다 — MediaItem에 MPD 파일의 URI를 전달하기만 하면 됩니다. ExoPlayer는 자동으로 콘텐츠 형식을 감지하고 적절한 렌더러를 시작하며 모든 표준 ABR 알고리즘을 지원합니다.

kotlin
val player = ExoPlayer.Builder(this).build()

val dashMediaItem = MediaItem
    .Builder()
    .setUri("https://example.com/dash/stream.mpd")
    .setMimeType("application/dash+xml")
    .build()

player.setMediaItem(dashMediaItem)
player.prepare()
player.playWhenReady = true

두 플랫폼에서 DRM을 사용한 DASH

Common Encryption(CENC)은 DASH의 주요 기능 중 하나로, 단일 미디어 스트림을 다양한 DRM 시스템과 함께 사용할 수 있게 합니다. MPD 파일에는 DRM 시스템 식별자(Widevine, PlayReady, FairPlay)가 있는 ContentProtection XML 요소가 포함됩니다. 클라이언트는 플랫폼에 따라 적절한 DRM 시스템을 선택하고 라이선스 서버에 라이선스를 요청합니다.

kotlin
val drmLicenseUri = Uri.parse("https://license.example.com/wv")
val drmSessionManager = DefaultDrmSessionManager
    .Builder()
    .setUuidAndExoMediaDrmProvider(
        C.WIDEVINE_UUID,
        FrameworkMediaDrm.DEFAULT_PROVIDER
    )
    .build(drmLicenseUri, null)

val mediaItem = MediaItem
    .Builder()
    .setUri("https://example.com/encrypted/stream.mpd")
    .setDrmConfiguration(
        MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
            .setLicenseUri("https://license.example.com/wv")
            .build()
    )
    .build()

모바일 기기를 위한 DASH 최적화

모바일 애플리케이션은 대역폭과 전력 소비의 제약으로 인해 특별한 DASH 구성이 필요합니다. 주요 권장 사항은 다음과 같습니다: 단기 속도 저하에 대한 복원력을 위한 최소 2-3세그먼트 버퍼 설정, 네트워크 변화에 더 빠르게 대응하기 위한 2-4초 길이의 세그먼트 사용, 품질 전환 시 다음 세그먼트 사전 로드.

모바일 네트워크에서 트래픽을 절약하기 위해 Bitmovin (2024)은 Content Steering 사용을 권장합니다 — HLS의 유사한 기능과 유사한 메커니즘으로, 클라이언트를 최적의 CDN 노드로 동적으로 안내할 수 있습니다. DASH Content Steering은 ISO/IEC 23009-1:2022 사양에 설명되어 있으며 dash.js 4.5+ 및 ExoPlayer 2.18+에서 지원됩니다.

자주 묻는 질문

DASH는 HLS와 어떻게 다른가요?

DASH는 벤더에 종속되지 않는 개방형 국제 MPEG 표준입니다. HLS(Apple의 독점 프로토콜)와 달리 DASH는 모든 코덱을 지원하고, M3U8 대신 XML 스트림 설명(MPD)을 사용하며, CENC를 통해 통합된 DRM 시스템을 제공합니다. HLS는 iOS에서 네이티브 지원을 받는 반면, DASH는 크로스플랫폼 솔루션에 더 유연합니다.

모바일 기기에서 DASH를 지원하는 플레이어는?

Android에서 DASH의 기본 플레이어는 exoplayer-dash 모듈이 포함된 Google의 ExoPlayer입니다. iOS에서는 AVFoundation을 통한 통합이 있는 libdash 또는 상용 플레이어(THEOplayer, Bitmovin)와 같은 타사 솔루션이 사용됩니다. 웹 브라우저에서는 DASH가 MediaSource Extensions을 사용하여 dash.js를 통해 재생됩니다.

DASH 맥락에서 MPD란?

MPD(Media Presentation Description)는 DASH 스트림 구조(콘텐츠 기간, 사용 가능한 비트레이트, 해상도, 코덱, 세그먼트 형식 및 위치)를 설명하는 XML 파일입니다. MPD는 플레이어의 진입점 역할을 하며 HLS의 마스터 재생목록을 대체합니다. MPD 파일 없이는 DASH 콘텐츠 재생이 불가능합니다.

DASH는 라이브 방송을 지원하나요?

네, DASH는 VOD와 라이브 방송을 모두 지원합니다. 라이브의 경우 자동 업데이트가 있는 dynamic MPD 유형이 사용됩니다. 서버는 정기적으로 MPD를 업데이트하여 새 세그먼트를 추가하고 오래된 세그먼트를 제거합니다. 청크 인코딩을 사용하는 Low-Latency DASH (LL-DASH)는 LL-HLS와 비슷한 3-8초의 지연 시간을 달성합니다.

DASH에서 DRM은 어떻게 작동하나요?

DASH는 Common Encryption (CENC, ISO/IEC 23001-7)을 사용하여 미디어 콘텐츠를 한 번 암호화하고 모든 DRM 시스템으로 복호화할 수 있습니다. MPD에는 지원되는 DRM(Widevine, PlayReady, FairPlay)을 나타내는 ContentProtection XML 요소가 포함됩니다. 플레이어는 플랫폼에 따라 적절한 DRM을 선택하고 지정된 URL을 통해 라이선스를 요청합니다.

요약

  • MPEG-DASH는 MPD 형식의 XML 스트림 설명을 사용하는 HTTP 기반 적응형 스트리밍을 위한 개방형 국제 표준입니다.
  • 코덱 독립성 — DASH는 H.264, HEVC, AV1, VP9 및 플레이어에서 사용 가능한 다른 모든 코덱을 지원합니다.
  • CENC는 모든 DRM 시스템에 통합된 콘텐츠 암호화를 제공하여 라이선싱을 간소화합니다.
  • ABR 알고리즘(BOLA, Pensieve)은 비트레이트 전환을 최소화하고 안정적인 재생을 보장합니다.
  • Android — DASH는 ExoPlayer에서 네이티브 지원됨; iOS는 타사 라이브러리 필요.
  • LL-DASH는 라이브 방송 지연 시간을 3-8초로 줄입니다.
  • 코덱 및 DRM 유연성이 중요한 크로스플랫폼 프로젝트에는 DASH 사용을 권장합니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기