Improve stream authoring with HLS Tools
Audio & Video 进阶 20m

使用 HLS Tools 改进流媒体制作

Improve stream authoring with HLS Tools

2020年6月24日

在 Apple 官方观看视频

一句话判断

如果你在搭建 HLS 直播或点播系统,Apple 官方的 HLS Tools 命令行工具集是你验证流质量和调试问题的第一选择。

这场 Session 讲了什么

这场 Session 详细介绍了 Apple 提供的 HLS Tools——一套用于 HLS 流媒体制作、验证和调试的命令行工具集。演讲者从实际工作流出发,展示了如何使用这些工具来创建、检查和优化 HLS 流。

首先介绍了 mediastreamsegmenter 和 mediafilesegmenter,这是将音视频内容切片为 HLS 分段的核心工具。2020 年的更新增加了对 Low-Latency HLS 的支持,包括部分分段(Partial Segments)和预加载提示(Preload Hints)的生成。演讲者演示了如何配置 segment duration、如何生成多码率变体流(Variant Streams),以及如何处理 fMP4 容器格式。

中间部分聚焦于 HLS 验证工具——hlsverify 和 mediastreamvalidator。这两个工具可以检测你的 HLS 流是否符合 Apple 的规范要求,包括 playlist 格式、分段对齐、编解码器兼容性等。对于提交到 App Store 的 App 来说,流格式合规是必须的。

最后,演讲者展示了一些调试技巧,包括如何分析 playlist 加载时间、如何定位客户端卡顿问题,以及如何利用日志工具追踪 HLS 播放器的请求行为。

值得深挖的点

  • mediastreamvalidator 的规则体系:这个工具不仅仅检查格式正确性,还会评估流的质量指标——比如码率切换是否平滑、音频是否连续、I-frame 间隔是否合理。它会给出 INFO、WARN、ERROR 三级反馈,ERROR 级别的问题必须修复,否则某些客户端可能无法播放。
  • Low-Latency HLS 的工具链支持:如果你在构建低延迟直播流,HLS Tools 现在可以直接生成符合 Low-Latency HLS 规范的 playlist 和分段。关键配置包括 PART-HOLD-BACK 和 partial segment duration,这些参数直接影响端到端延迟。

代码片段

# 使用 mediastreamsegmenter 创建 Low-Latency HLS 直播流
mediastreamsegmenter \
  --file /dev/stdin \
  --port 8080 \
  --segment-duration 6 \
  --partial-segment-duration 1 \
  --delete-ext-old-clips 30 \
  --output-directory /var/www/hls/live/

# 生成的 playlist 会包含 Partial Segments 和 Preload Hints
# 使用 hlsvalidate 验证 HLS 流的合规性
hlsvalidate \
  --verbose \
  https://example.com/stream/master.m3u8

# 使用 mediastreamvalidator 进行深度质量检查
mediastreamvalidator \
  --timeout 60 \
  --bandwidth 5000000 \
  https://example.com/stream/master.m3u8
# 使用 mediafilesegmenter 创建点播 HLS 流
mediafilesegmenter \
  --segment-duration 6 \
  --iframe-interval 2000 \
  --output-directory /var/www/hls/vod/ \
  --master-playlist-name master.m3u8 \
  input.mp4

# 生成多码率变体流
variantplaylistcreator \
  --output-master-playlist /var/www/hls/vod/master.m3u8 \
  --iframe-playlist \
  /var/www/hls/vod/1080p/ \
  /var/www/hls/vod/720p/ \
  /var/www/hls/vod/480p/

最佳实践

  • 在每次流配置变更后都跑一遍 mediastreamvalidator,确保合规性没有回归
  • Low-Latency HLS 的 partial segment duration 建议设为 1 秒,在延迟和性能之间取得平衡
  • 点播流一定要生成 I-frame playlist,否则 seek 操作会非常慢
  • 自动化流程中集成 hlsvalidate,在流上线前拦截格式错误
  • 使用 --log 参数记录 segmenter 的详细输出,方便排查线上问题

还有什么值得关注

  • HLS Tools 是开源的,可以在 Apple 的 GitHub 仓库中获取
  • 如果你在用第三方 CDN,注意 CDN 对 Low-Latency HLS 的缓存策略需要特殊配置
  • 搭配 “What’s new in Low-Latency HLS” 和 “Discover HLS Blocking Preload Hints” 一起看,可以深入理解 Apple 流媒体技术的全貌
WWDC 2020