【音视频】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)可以大大简化流媒体内容的生成和传输。
相关推荐
Luke Ewin5 小时前
根据音频中的不同讲述人声音进行分离音频 | 基于ai的说话人声音分离项目
人工智能·python·音视频·语音识别·声纹识别·asr·3d-speaker
Macdo_cn16 小时前
Infuse Pro for Mac v8.1 全能视频播放器 支持M、Intel芯片
macos·音视频
我爱蛋蛋后21 小时前
Linux驱动开发之音频驱动与基础应用编程
linux·c语言·驱动开发·音视频
Macdo_cn1 天前
Screen Wonders for Mac v3.3.1 3D屏保应用 支持M、Intel芯片
macos·音视频
苏三福1 天前
rk3588/3576板端编译程序无法运行视频推理
arm开发·音视频
江同学_1 天前
RTSP场景下RTP协议详解及音视频打包全流程
音视频
EasyNVR2 天前
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
运维·服务器·网络·安全·音视频·webrtc·p2p
Erekys2 天前
视觉分析之边缘检测算法
人工智能·计算机视觉·音视频
EasyNVR2 天前
EasyRTC:全平台支持与自研算法驱动的智能音视频通讯解决方案
运维·服务器·小程序·音视频·webrtc·p2p·智能硬件
modest —YBW2 天前
视频HDR技术详解,你的电脑怎么播放HDR视频?
音视频