DASH — o que é, protocolo e princípio de funcionamento do streaming dinâmico

Autor: IT Sectr Publicado: 2026-05-23 Tempo de leitura: 9 min

Dynamic Adaptive Streaming over HTTP (DASH) é um padrão internacional de transmissão multimídia adaptativa, desenvolvido pelo MPEG (Moving Picture Experts Group). O DASH entrega vídeo e áudio via HTTP usando uma descrição XML do fluxo no formato Media Presentation Description (MPD) e divide o conteúdo em segmentos de diferentes taxas de bits. De acordo com o Bitmovin Video Developer Report (2025), 58% dos desenvolvedores de vídeo usam DASH, tornando-o o segundo protocolo mais popular depois do HLS.

Pontos principais

  • DASH é um padrão internacional aberto do MPEG para transmissão adaptativa via HTTP.
  • Arquivo MPD (Media Presentation Description) gerencia o fluxo através de uma estrutura XML com descrição de períodos e conjuntos de adaptação.
  • Codecs não são limitados pela especificação — DASH suporta H.264, HEVC, AV1, VP9, AAC e outros.
  • DRM é implementado via Common Encryption (CENC), suportando Widevine, PlayReady e FairPlay em um único fluxo.
  • Multiplataforma DASH é habilitado via ExoPlayer (Android), dash.js (navegadores) e libdash.

O que é DASH?

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) é um padrão internacional ISO/IEC 23009-1, publicado em 2012 como resposta à fragmentação das soluções proprietárias de streaming adaptativo. Ao contrário do HLS (protocolo proprietário da Apple) e do Smooth Streaming (Microsoft), o DASH foi desenvolvido desde o início como um padrão aberto e independente de fornecedor, o que garantiu seu amplo suporte na indústria.

A principal inovação do DASH é a separação da descrição do fluxo e do conteúdo multimídia. A descrição do fluxo é armazenada em um arquivo XML chamado MPD (Media Presentation Description), que contém todas as informações sobre as opções disponíveis: taxas de bits, resoluções, codecs, legendas, faixas de áudio. O conteúdo multimídia é armazenado em segmentos independentes (geralmente fMP4), que podem ser carregados independentemente via HTTP. Essa arquitetura permite que a infraestrutura do servidor seja a mais simples possível — qualquer servidor HTTP pode servir conteúdo DASH.

A adaptabilidade no DASH é implementada através da multiplexação de variantes de conteúdo. O servidor prepara várias Representations — cópias do conteúdo com diferentes parâmetros de compressão. O cliente analisa a largura de banda do canal e alterna dinamicamente entre as representações, escolhendo o equilíbrio ideal entre qualidade e estabilidade de reprodução. De acordo com um estudo acadêmico (IEEE Access, 2024), o DASH com o algoritmo BOLA mostra 22% menos trocas de taxa de bits em comparação com o HLS em conexões instáveis.

História e padronização do DASH

O MPEG começou a trabalhar no DASH em 2010 após analisar soluções existentes: Apple HLS, Microsoft Smooth Streaming e Adobe HDS. A primeira versão do padrão (ISO/IEC 23009-1:2012) foi publicada em 2012. A segunda versão (2014) adicionou suporte a eventos, inserção de anúncios aprimorada e adaptação controlada pelo servidor. A terceira versão (2019) adicionou suporte a HDR, 8K, vídeo háptico e melhor integração com MMT (MPEG Media Transport) para redes 5G.

Em 2024, o MPEG anunciou o DASH Next Generation, que inclui suporte a codecs de redes neurais, renderização em nuvem e otimização para cenários de Realidade Estendida (XR). Uma inovação chave é a Codificação de Vídeo Baseada em Redes Neurais (NNVC), que usa modelos de ML para decodificação no lado do cliente, potencialmente reduzindo a taxa de bits em 30-50% enquanto mantém a qualidade.

Como o DASH funciona?

O processo de reprodução de um fluxo DASH consiste em quatro etapas sequenciais: obtenção do MPD, análise da descrição do fluxo, seleção da representação inicial e comutação dinâmica entre representações. Cada etapa tem suas especificidades que afetam a qualidade da experiência do usuário.

Obtenção e análise do MPD

O player carrega o arquivo MPD de uma URL conhecida. O MPD contém uma estrutura XML que descreve todo o fluxo: duração do conteúdo, linha do tempo, períodos disponíveis (Period), conjuntos de adaptação (AdaptationSet) e representações (Representation) com parâmetros de codificação específicos. O player analisa o MPD e cria um modelo interno dos recursos multimídia disponíveis.

Exemplo de um arquivo MPD básico para conteúdo VOD com duas resoluções:

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>

Carregamento de segmentos e adaptação

Após selecionar a representação inicial, o player começa a carregar segmentos. Cada segmento contém vários segundos de conteúdo (geralmente 2-10 segundos). O player mantém um buffer de vários segmentos à frente, garantindo resiliência a quedas de curta duração na velocidade da rede. O algoritmo ABR (Adaptive Bitrate) monitora constantemente a velocidade de download dos segmentos e decide alternar entre as taxas de bits disponíveis.

Algoritmos ABR modernos para DASH, como BOLA (Buffer Occupancy based Lyapunov Algorithm) e Pensieve (baseado em Reinforcement Learning), consideram não apenas a largura de banda atual, mas também o tamanho do buffer, o tipo de conteúdo (esportes, notícias, filmes) e até o consumo de energia do dispositivo. O BOLA, que faz parte do dash.js e do ExoPlayer, minimiza o número de trocas de taxa de bits enquanto mantém um buffer estável, conforme confirmado pela pesquisa ACM (Spiteri et al., 2020).

Estrutura do DASH: MPD, Period, Adaptation Set

A estrutura hierárquica de um fluxo DASH é organizada em quatro níveis: MPD → Period → AdaptationSet → Representation. Cada nível adiciona uma camada de detalhes, permitindo descrever cenários complexos — desde VOD simples até transmissões ao vivo com inserções de anúncios e vídeo multiângulo.

MPD (Media Presentation Description)

MPD é o elemento raiz que descreve toda a apresentação multimídia. Os atributos do MPD definem o tipo de fluxo (static para VOD, dynamic para live), duração total, linha do tempo, perfil e informações de DRM. O MPD pode conter um ou mais Periods, cada um representando um segmento de tempo independente do conteúdo.

Period, AdaptationSet e Representation

Period é um segmento temporal da apresentação. Para VOD, um único Period é usado para todo o conteúdo. Para live com pausas publicitárias, o Period pode mudar dinamicamente — o player carrega o MPD atualizado e detecta um novo Period correspondente ao bloco de anúncios. Cada Period contém um ou mais AdaptationSets.

AdaptationSet é um grupo de representações intercambiáveis de um tipo de mídia: vídeo, áudio, legendas. Dentro de um AdaptationSet, todas as representações diferem apenas na taxa de bits e/ou resolução, mas codificam o mesmo conteúdo. Uma propriedade importante: o player pode alternar entre representações dentro do mesmo AdaptationSet nos limites dos segmentos sem interrupção da reprodução.

Representation é uma variante de codificação específica com uma taxa de bits, resolução e codec definidos. Para cada Representation, o MPD especifica um template de URL para carregar segmentos. O DASH usa um sistema flexível de endereçamento de segmentos — através de templates de URL com substituição de número de segmento e tempo ($Number$, $Time$), permitindo que o servidor gere nomes de arquivo dinamicamente sem precisar listar cada segmento no MPD.

Segmentação e empacotamento

Os segmentos no DASH podem ser de dois tipos: tipo Segment (contêm apenas dados de mídia) e tipo Subsegment (parte de um segmento para acesso mais granular). Para codificar conteúdo DASH, são usadas ferramentas como FFmpeg ou codificadores em lote. Exemplo de criação de um fluxo DASH a partir de um arquivo de entrada:

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: comparação de protocolos

A escolha entre DASH e HLS é uma das decisões-chave ao projetar um sistema de streaming de vídeo. Ambos os protocolos resolvem o mesmo problema (entrega adaptativa de vídeo por HTTP), mas têm diferenças fundamentais na arquitetura, suporte a codecs e ecossistema. Vamos examiná-los por parâmetros-chave.

ParâmetroDASHHLS
PadrãoInternacional (ISO/IEC 23009-1)Proprietário (RFC 8216, Apple)
Descrição do fluxoXML (MPD)Lista de reprodução M3U8
CodecsQualquer (H.264, HEVC, AV1, VP9)Limitado (H.264, HEVC, AV1 desde 2023)
Formato de segmentosfMP4 (principal), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (unificado para todos os DRMs)FairPlay, Widevine (separados)
Suporte iOSVia players de terceirosNativo (AVPlayer, Safari)
NavegadoresChrome, Firefox, Edge (via MSE)Safari (nativo), outros via MSE

Vantagem chave do DASH — independência de codecs. Enquanto o HLS originalmente limitava os codecs aos suportados pela Apple (H.264, HEVC e recentemente AV1), o DASH pode usar qualquer codec suportado pelo player: VP9/VP8 (crítico para YouTube e Chrome), AV1 (para eficiência), H.264/HEVC (para compatibilidade). Isso torna o DASH a escolha preferida para serviços multiplataforma que exigem um fluxo unificado para todos os dispositivos.

Desvantagem do DASH no iOS — falta de suporte nativo no Safari e AVPlayer. Desenvolvedores iOS precisam usar players compatíveis com HLS de terceiros ou bibliotecas como libdash com integração via VTDecoder. Na prática, isso significa que para projetos focados em iOS, o HLS continua sendo o padrão de fato, enquanto para Android e plataformas web, o DASH é uma solução mais flexível e poderosa.

Uso do DASH no desenvolvimento móvel

A integração do DASH em aplicações móveis depende da plataforma. No Android, o DASH é suportado diretamente através do ExoPlayer com o módulo de extensão. No iOS, são necessárias bibliotecas de terceiros como libdash com integração via AVFoundation ou MPEGDASHPlayer. Vamos ver a implementação prática para ambas as plataformas.

DASH no Android via ExoPlayer

O ExoPlayer do Google fornece suporte integrado para DASH através do módulo `exoplayer-dash`. Conectar um fluxo DASH não é diferente de outros formatos — basta passar a URI do arquivo MPD em um MediaItem. O ExoPlayer detecta automaticamente o formato do conteúdo e inicia o renderizador correspondente, suportando todos os algoritmos ABR padrão.

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

DASH com DRM em ambas as plataformas

Common Encryption (CENC) é um dos recursos-chave do DASH, permitindo usar um único fluxo de mídia com diferentes sistemas DRM. O arquivo MPD contém elementos XML ContentProtection com identificadores de sistemas DRM (Widevine, PlayReady, FairPlay). O cliente seleciona o sistema DRM apropriado com base em sua plataforma e solicita uma licença ao servidor de licenças.

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()

Otimização do DASH para dispositivos móveis

As aplicações móveis requerem uma configuração especial do DASH devido às limitações de largura de banda e consumo de energia. As principais recomendações incluem: definir um buffer mínimo de 2-3 segmentos para resiliência a quedas curtas de velocidade, usar segmentos de 2-4 segundos para resposta mais rápida a mudanças de rede e pré-carregar o próximo segmento ao alternar a qualidade.

Para economizar tráfego em redes móveis, a Bitmovin (2024) recomenda usar Content Steering — um mecanismo semelhante à função análoga do HLS, que permite direcionar dinamicamente o cliente para o nó CDN ideal. O DASH Content Steering é descrito na especificação ISO/IEC 23009-1:2022 e é suportado no dash.js 4.5+ e ExoPlayer 2.18+.

Perguntas frequentes

Como o DASH difere do HLS?

DASH é um padrão internacional aberto do MPEG, não vinculado a nenhum fornecedor. Ao contrário do HLS (protocolo proprietário da Apple), o DASH suporta qualquer codec, usa descrição de fluxo XML (MPD) em vez de M3U8 e fornece um sistema DRM unificado através do CENC. O HLS tem suporte nativo no iOS, enquanto o DASH é mais flexível para soluções multiplataforma.

Quais players suportam DASH em dispositivos móveis?

No Android, o principal player para DASH é o ExoPlayer do Google com o módulo exoplayer-dash. No iOS, são usadas soluções de terceiros como libdash com integração via AVFoundation ou players comerciais (THEOplayer, Bitmovin). Em navegadores web, o DASH é reproduzido via dash.js usando MediaSource Extensions.

O que é MPD no contexto do DASH?

MPD (Media Presentation Description) é um arquivo XML que descreve a estrutura do fluxo DASH: duração do conteúdo, taxas de bits disponíveis, resoluções, codecs, formatos de segmentos e suas localizações. O MPD serve como ponto de entrada para o player, substituindo a playlist mestre no HLS. Sem um arquivo MPD, a reprodução de conteúdo DASH é impossível.

O DASH suporta transmissões ao vivo?

Sim, o DASH suporta tanto VOD quanto transmissões ao vivo. Para live, é usado o tipo de MPD dynamic com atualização automática. O servidor atualiza periodicamente o MPD, adicionando novos segmentos e removendo os obsoletos. O Low-Latency DASH (LL-DASH) com codificação fragmentada permite alcançar uma latência de 3-8 segundos, comparável ao LL-HLS.

Como o DRM funciona no DASH?

DASH usa Common Encryption (CENC, ISO/IEC 23001-7), que permite criptografar o conteúdo multimídia uma vez e descriptografá-lo com qualquer sistema DRM. O MPD contém elementos XML ContentProtection indicando os DRMs suportados (Widevine, PlayReady, FairPlay). O player seleciona o DRM apropriado com base na plataforma e solicita uma licença através da URL especificada.

Resumo

  • MPEG-DASH é um padrão internacional aberto para streaming adaptativo por HTTP com descrição de fluxo XML em formato MPD.
  • Independência de codecs — DASH suporta H.264, HEVC, AV1, VP9 e qualquer outro codec disponível no player.
  • CENC fornece criptografia unificada de conteúdo para todos os sistemas DRM, simplificando o licenciamento.
  • Algoritmos ABR (BOLA, Pensieve) minimizam as trocas de taxa de bits e garantem reprodução estável.
  • Android — DASH é suportado nativamente no ExoPlayer; iOS requer bibliotecas de terceiros.
  • LL-DASH reduz a latência de transmissões ao vivo para 3-8 segundos.
  • Recomendado usar DASH para projetos multiplataforma onde a flexibilidade de codecs e DRM é importante.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também