Audio & Video 进阶 20m
使用 HLS Tools 改进流媒体制作
Improve stream authoring with HLS Tools
2020年6月24日
一句话判断
如果你在搭建 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