【音视频】HLS和DASH 流媒体协议的详细介绍和实现方式

深入探讨 HLS 和 DASH 流媒体协议

1. HLS(HTTP Live Streaming)

核心技术细节

HLS(HTTP Live Streaming)是由苹果公司提出的一种基于 HTTP 协议的流媒体协议。它将视频分割成多个小片段,通过 .m3u8 文件作为索引进行管理。

文件结构
  • .m3u8 文件(索引文件):列出所有可用的视频片段及其路径,可以包含多质量级别。

  • 视频片段文件 :通常是 TS(MPEG-2 TS)fMP4(Fragmented MP4) 格式。

    示例 .m3u8 文件内容:

    m3u8 复制代码
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
    360p.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=1280x720
    720p.m3u8
多质量切换
  • 播放器根据网络带宽和缓冲情况,动态选择适合的分辨率。
  • 使用 .m3u8 文件中的 #EXT-X-STREAM-INF 标签定义多种比特率。
实时直播
  • 直播流通过持续生成新的片段文件,播放器周期性地刷新 .m3u8 索引文件。

    示例:

    m3u8 复制代码
    #EXT-X-TARGETDURATION:10
    #EXT-X-MEDIA-SEQUENCE:1
延迟优化
  • 传统延迟:通过减少片段时长(如 6 秒降为 2 秒),降低延迟。
  • 低延迟 HLS(LL-HLS):引入 HTTP/2 和部分片段加载(Part Segments)实现亚秒级延迟。

实现 HLS 流

1. 使用 FFmpeg 生成 HLS 流

FFmpeg 是处理 HLS 的利器,可以轻松生成 HLS 片段和清单文件。

bash 复制代码
ffmpeg -i input.mp4 \
  -codec: copy \
  -start_number 0 \
  -hls_time 4 \
  -hls_list_size 0 \
  -f hls output.m3u8
  • -hls_time:每个片段的时长,单位为秒。
  • -hls_list_size:清单文件中包含的片段数,0 表示包含所有片段。
2. 动态生成直播 HLS 流
bash 复制代码
ffmpeg -re -i input.mp4 \
  -codec: copy \
  -f hls \
  -hls_time 2 \
  -hls_flags delete_segments+append_list \
  live.m3u8
  • -re:实时模式,按视频原始速度处理。
  • -hls_flags delete_segments:删除过期片段,适用于直播。

2. DASH(Dynamic Adaptive Streaming over HTTP)

核心技术细节

DASH 是由 MPEG 组织推出的一种自适应流媒体协议,目标是提供一个开放标准,解决 HLS 的封闭性问题,支持更多设备和平台。

文件结构
  • .mpd 文件(清单文件):定义了多质量级别的流、时间轴信息以及片段路径。

  • 片段文件:通常是 MP4 或 WebM 格式。

    示例 .mpd 文件内容:

    xml 复制代码
    <MPD type="dynamic" minBufferTime="PT1.5S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
        <Period>
            <AdaptationSet mimeType="video/mp4" segmentAlignment="true">
                <Representation id="1" bandwidth="800000" width="640" height="360">
                    <SegmentTemplate media="chunk-$Number$.m4s" initialization="init.mp4" duration="2" />
                </Representation>
            </AdaptationSet>
        </Period>
    </MPD>
自适应播放
  • 清单文件定义多个 Representation(不同的分辨率和码率)。
  • 播放器根据网络带宽动态选择合适的 Representation,加载对应的片段。
实时直播
  • DASH 支持通过动态更新 .mpd 文件来处理实时直播流。
  • 可以设置时间轴更新规则,支持低延迟直播。

实现 DASH 流

1. 使用 FFmpeg 生成 DASH 流
bash 复制代码
ffmpeg -i input.mp4 \
  -map 0:v -map 0:a \
  -c:v libx264 -c:a aac \
  -f dash \
  -seg_duration 4 \
  output.mpd
  • -seg_duration:每个片段的时长。
  • 输出文件 output.mpd 和一系列视频片段。
2. 使用 MP4Box 生成 DASH 流

MP4Box 是另一种流行的工具,支持复杂的 DASH 流生成。

bash 复制代码
MP4Box -dash 4000 -frag 4000 -rap -out output.mpd input.mp4
  • -dash:片段长度,单位为毫秒。
  • -rap:确保片段从关键帧开始。

3. 播放器实现

HLS 播放器

  • iOS/macOS :使用 AVPlayer,原生支持 .m3u8 文件。

  • Web:使用 HLS.js 库在非 Safari 浏览器上支持 HLS。

    示例代码:

    javascript 复制代码
    if (Hls.isSupported()) {
        var video = document.getElementById('video');
        var hls = new Hls();
        hls.loadSource('path/to/playlist.m3u8');
        hls.attachMedia(video);
    }

DASH 播放器

  • 使用 Dash.js 播放 DASH 流。

    示例代码:

    javascript 复制代码
    var player = dashjs.MediaPlayer().create();
    player.initialize(document.querySelector("#videoPlayer"), "path/to/stream.mpd", true);

4. 延迟优化

HLS 延迟优化

  • 使用低延迟 HLS(LL-HLS)。
  • 减少 #EXT-X-TARGETDURATION,控制每个片段的持续时间。

DASH 延迟优化

  • 设置 .mpd 中的 availabilityStartTime 和时间段对齐。
  • 使用低延迟 DASH(LL-DASH)配置,减少缓冲区时间。

5. HLS 和 DASH 对比

特性 HLS DASH
提出者 苹果公司 MPEG 组织
清单文件格式 .m3u8 .mpd
片段封装格式 TS、fMP4 MP4、WebM
编码格式支持 H.264、H.265 H.264、H.265、VP9、AV1
设备支持 iOS/macOS 原生支持;Android 需库支持 跨平台,需播放器支持
实时直播延迟 一般较高(几秒到几十秒) 可优化到低延迟(甚至亚秒级)
开放性 封闭(苹果主导) 开放(国际标准)

总结

  • HLSDASH 都是现代流媒体的核心技术,提供了自适应流传输,保证了良好的用户体验。
  • HLS 适合苹果生态和广泛的设备支持,尤其是直播和点播场景。
  • DASH 作为开放标准,适用于多平台、多编码格式,尤其是需要高效流媒体的场景。
  • 选择合适的协议和工具(如 FFmpeg、MP4Box)可以大大简化流媒体内容的生成和传输。
相关推荐
byte轻骑兵5 小时前
【HFP】蓝牙HFP协议中音频连接转移与拨号功能的深度解析
音视频·蓝牙技术·hfp
xiaoh_717 小时前
解决视频处理中的 HEVC 解码错误:Could not find ref with POC xxx【已解决】
python·ffmpeg·音视频
灏瀚星空21 小时前
Python在AI虚拟教学视频开发中的核心技术与前景展望
人工智能·python·音视频
Everbrilliant891 天前
音视频之H.265/HEVC环路后处理
音视频·h.265·h.265/hevc·去方块滤波技术·h.265环路后处理·sao技术·h.265去方块滤波
飞桨PaddlePaddle1 天前
Wan2.1和HunyuanVideo文生视频模型算法解析与功能体验丨前沿多模态模型开发与应用实战第六期
人工智能·算法·百度·音视频·paddlepaddle·飞桨·deepseek
EasyDSS1 天前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
阿酷tony1 天前
将视频生成视频二维码步骤
音视频·视频格式·视频二维码·视频生成二维码
9527华安1 天前
国产紫光同创FPGA视频采集转SDI编码输出,基于HSSTHP高速接口,提供2套工程源码和技术支持
fpga开发·音视频·紫光同创·sdi·高速接口·hssthp
潮汐退涨月冷风霜2 天前
开发了一个b站视频音频提取器
音视频