当前位置: 首页 > news >正文

协议之DASH介绍

DASH:Dynamic Adaptive Streaming over HTTP,基于 HTTP 的动态自适应码流标准,标准号ISO/IEC 23009-1,由 MPEG 制定,2012 年正式发布。

与 HLS 类似,核心思想是将媒体内容切分为多个小的媒体片段(segment),并在清单文件(MPD,Media Presentation Description)中声明不同比特率/分辨率的表示(Representation),由客户端根据网络状况动态选择。

一、DASH整体结构

三层结构:服务端分片存储层 → MPD 描述层 → 客户端自适应逻辑层

  1. 媒体分片层原始音视频编码后切割为小段独立分片(Segment),常见分片时长 2~10s; 分片封装格式:MP4(fMP4 碎片 MP4)、MPEG-TS。
  2. MPD 元数据层XML 格式清单文件,描述所有视频 / 音频 / 字幕轨道、分片地址、码率、分辨率、时长、加密信息;客户端播放的唯一入口。
  3. 客户端自适应控制层播放器解析 MPD,测量下载吞吐量,选择最优码率分片下载、解码渲染。

示例文件:

<MPD mediaPresentationDuration="PT300S" minBufferTime="PT2S"> <Period duration="PT300S"> <!-- 视频轨道组 --> <AdaptationSet mimeType="video/mp4" codecs="hev1.1.6.L93.90"> <!-- 1080P 5M码率版本 --> <Representation bandwidth="5000000" width="1920" height="1080" frameRate="25"> <SegmentTemplate media="video_$Bandwidth$_$Number$.m4s" initialization="video_$Bandwidth$_init.m4s" duration="4000" startNumber="1"/> </Representation> <!-- 720P 2M码率版本 --> <Representation bandwidth="2000000" width="1280" height="720" frameRate="25"> <SegmentTemplate media="video_$Bandwidth$_$Number$.m4s" initialization="video_$Bandwidth$_init.m4s" duration="4000" startNumber="1"/> </Representation> </AdaptationSet> <!-- 音频轨道组 --> <AdaptationSet mimeType="audio/mp4" codecs="mp4a.40.2"> <Representation bandwidth="128000"> <SegmentTemplate media="audio_$Number$.m4s" initialization="audio_init.m4s" duration="4000"/> </Representation> </AdaptationSet> </Period> </MPD>

二、核心介绍

2.1 MPD 文件(最核心)

MPD 是标准 XML,全称 Media Presentation Description,描述整个视频资源的全部信息。2.1.1,MPD 顶层关键节点结构XML

<MPD> <!-- 全局配置:总时长、更新周期、分片默认时长 --> <Period> <!-- 一段连续播放内容,点播1个Period,直播持续新增Period --> <AdaptationSet> <!-- 同类型媒体轨道集合:视频/音频/字幕各一套AdaptationSet --> <Representation> <!-- 单套码率规格:一种分辨率、码率、帧率 --> <SegmentTemplate> <!-- 分片命名规则、分片时长、起始序号、初始化分片 --> </SegmentTemplate> </Representation> </AdaptationSet> </Period> </MPD>
  • MPD 根节点
    • mediaPresentationDuration:点播总时长;直播无固定时长
    • minimumUpdatePeriod:直播 MPD 文件刷新间隔,客户端定时重新拉取 MPD 获取新分片
  • Period播放分段单元,广告、正片会拆分为多个 Period;直播持续追加新 Period。
  • AdaptationSet(适配集)同一媒体类型轨道集合:
    • 视频 AdaptationSet:所有分辨率视频轨道
    • 音频 AdaptationSet:多语言、多声道音频轨道
    • Subtitle AdaptationSet:字幕轨道 支持属性:mimeTypecodecswidthheight、音频声道、语言标识。
  • Representation(码率版本)一套独立编码规格,每个代表一个清晰度档位:
    • bandwidth:码率(bps),自适应核心判断依据
    • width/height:分辨率
    • frameRate:帧率
    • codecs:编码标识(avc1、hev1、aac 等)
  • SegmentTemplate(分片模板)定义分片 URL 生成规则,无需在 MPD 罗列每一个分片地址,大幅减小 MPD 体积:
    • initialization:初始化分片 URL(包含 SPS/PPS 解码器参数,播放器必须先下载)
    • media:分片路径模板,支持占位符:
      • $Number$:分片序号(最常用)
      • $Bandwidth$:码率
      • $Time$:分片起始时间戳
    • duration:单个分片时长(单位:毫秒)
    • startNumber:第一个分片序号

2.2 媒体分片 Segment

DASH 主流使用fMP4(Fragmented MP4,碎片 MP4),也支持 MPEG-TS 分片。

2.2.1 Init segment

ftyp moov ├─ mvhd # 全局媒体头部 ├─ trak # 视频/音频轨道信息 │ ├─ tkhd │ ├─ mdia │ │ ├─ mdhd │ │ ├─ hdlr │ │ └─ minf │ │ └─ stbl │ │ ├─ stsd # 编码参数 SPS/PPS/AAC 配置(核心) │ │ ├─ stts │ │ ├─ stsc │ │ ├─ stsz │ │ └─ stco

Init 仅由 MP4 基础盒子构成,无媒体数据, 具体的属性内容可以参考MP4格式的解析。容器格式之MP4介绍-CSDN博客

Init 分片全局唯一,一套 Representation 只需要下载一次。

2.2.2 media segment

单个 media segment示意图

[ftyp][moof(元数据)][mdat(视频帧+音频帧)]
ftyp # 文件类型标识(可选,很多分片省略) moof # Fragment Movie Box 分片元数据(每段分片独立) ├─ mfhd # 分片序号 └─ traf # Track Fragment 轨道分片信息 ├─ tfhd # 轨道基础配置 ├─ tfdt # 分片起始时间戳 PTS └─ trun # 本分片所有帧:时长、偏移、关键帧标记 mdat # Media Data Box:原始裸流(H.264/H.265/AAC 二进制帧)

1)ftpy

文件类型标记,识别 fMP4 碎片格式,很多生成工具会省略。

2)moof(分片元数据头,自适应核心)

每一个 media segment 自带独立 moof,不需要依赖前面任何分片,这是 DASH 无缝切换码率的基础。

  • mfhd:fragment 序号,对应 MPD Number
  • traf/trun: trun 记录本分片内每一帧:PTS、帧长度、是否 I 帧。播放器可以精准跳转、快速解码。
  • tfdt:分片起始绝对时间戳,用于音视频同步、直播时间轴对齐。

3)mdat (裸数据区)

二进制原始音视频压缩帧,无封装头,由 moof 内 trun 提供偏移、长度信息分割每一帧。

2.3 两种DASH工作模式

2.3.1 点播模式(On-Demand DASH)

  • 完整视频提前分片,全部分片静态存储在 CDN;
  • MPD 文件包含完整总时长、全部分片序号范围;
  • 客户端可任意拖拽跳转,随机访问任意分片;
  • 适合短视频、长视频点播平台。

2.3.2 直播模式(Live DASH / DASH-IF Live)

  • 实时流持续切片,服务器不断生成新分片;
  • MPD 设置minimumUpdatePeriod,播放器定时重新请求 MPD 拉取最新分片地址;
  • 存在播放窗口(timeShiftBufferDepth):仅保留最近 N 秒分片,过期分片自动删除,无法回看久远历史;
  • 低延迟扩展:LL-DASH(Low Latency DASH),通过分片分块推送、HTTP/2、Chunked 传输将端到端延迟降至 2~5s。
http://www.jsqmd.com/news/1164351/

相关文章:

  • 二阶线性递推数列通项:Python 3.12 实现特征根法,3步求解与可视化
  • 最新AI量化开发,学习表达开发验证要分阶段
  • 2026年7月台州靠谱GEO/SEO优化公司实测推荐榜单 - 品牌测评网
  • 智能家居Wi-Fi连接:2.4GHz与5GHz频段5大关键差异与设备分配策略
  • 将 PyTorch 训练出的 PySlowFast(.pyth)模型转换为 ONNX 格式
  • ROS 2 Humble vs Noetic:树莓派4B性能实测与5个关键选型建议
  • 系统规划与管理师-数据标准化与数据管理(占 6-8 分)
  • 数字电路信号上下拉配置原理与工程实践
  • Linux 账户安全校验:pwck 命令详解,一键检测 passwd 与 shadow 完整性
  • 大模型推理服务的延迟优化与成本控制策略
  • 【面试算法笔记】0101-数组-二分查找 相关
  • NTN全局控制器集中管理的优势
  • 2026年宁波刑事律师推荐怎么选?看这三点关键不踩雷 - 本地品牌推荐
  • FL Studio Producer Edition 26.1.0 Build 5530 全插件版新功能介绍
  • machine 一般公差、未注公差的线性和角度尺寸的公差(GB/T1804-2000)
  • 2026国内最受机构欢迎的教务管理系统是哪个品牌,看看适不适合你
  • ADB 无线调试实战:Android 11+ 免USB配对与多设备并发连接(3步完成)
  • Meta Muse Image:AI图像生成工具在社交场景的应用与实操指南
  • 2026年7月最新烟台浪琴官方售后服务网点地址及客服电话一览 - 浪琴官方售后服务中心
  • 2026年宁波离婚律师推荐指南:从财产分割到抚养权全程 - 本地品牌推荐
  • 层次聚类算法复杂度分析:从 O(n³) 到 O(n² log n) 的3种优化策略
  • K-Means vs DBSCAN vs 层次聚类:3大算法实战对比与5个选型决策点
  • OpenCode + Ollama 本地智能编程实战指南
  • 2026主流业务数据报表工具对比测评|企业个人工具选型参考
  • ip2region 3.17.0 版本更新:新增多项功能,开源数据大升级!
  • LlamaIndex:RAG工程化中的数据框架与索引架构解析
  • 直流有刷电机驱动设计与STM32控制实现
  • AD7490与STM32F334R8高精度ADC硬件设计与优化
  • 亲身到店探访杭州亨得利官方名表服务中心|服务热线及全部维修详细地址(2026年7月更新) - 亨得利官方
  • 快速入门openEuler LFS实践:5个核心脚本详解与实战