在流媒体传输中,首屏时间(即用户从开始请求视频流到视频开始播放的时间)是衡量用户体验的重要指标之一。HLS(HTTP Live Streaming)作为苹果公司提出的基于HTTP的流媒体传输协议,广泛应用于直播和视频点播服务中。然而,HLS的传统配置往往导致较高的延迟,影响用户体验。本文将探讨如何通过技术优化来缩短HLS的首屏时间。
HLS传输协议与延迟
HLS的核心思想是将媒体文件切割成一系列小的TS(Transport Stream)文件,并通过HTTP协议传输这些文件。每个TS文件对应一个媒体分段,客户端通过下载这些分段文件并依次播放来实现流媒体播放。然而,这种机制导致了天然的延迟,因为客户端必须等待至少一个TS文件生成并被传输到客户端才能开始播放。
苹果最初推荐的HLS视频片段时长是10秒(现在推荐6秒),并建议在倒数第三个视频片段开始播放。按照这种配置,HLS的延迟将达到30秒左右。为了缩短这个延迟,一种简单的方法是减少每个视频片段的时长,例如将片段时长缩短到3秒,这样可以将延迟降低到10秒左右。然而,即使如此,延迟仍然较高。
现有的低延迟解决方案
为了降低HLS的延迟,社区和苹果公司分别提出了多种解决方案。
- LHLS(Low-Latency HLS):
- LHLS是一种社区驱动的HLS低延迟方案,最早由Periscope团队在2017年提出。
- 该方案将一个视频片段进一步细分成多个小的Chunk,无需等待整个视频片段生成,每生成一个Chunk就会被下载到播放器缓存。
- 使用HTTP/1.1的Chunked transfer encoding功能,播放器保持与服务器的连接,服务器生成一个Chunk就立即传递给播放器。
- 这种方案可以将延迟降低到3秒左右,但存在ABR(自适应码率切换)困难的问题,因为长连接使得客户端难以估算当前网络带宽。
- LLHLS(Low-Latency HLS,苹果官方方案):
- 苹果在2019年WWDC上介绍了官方的低延迟HLS解决方案。
- 该方案重新设计了一套低延迟机制,并未直接借鉴社区的低延迟方案。
- LLHLS通过优化切片生成、传输和播放的各个环节,实现了更低的延迟。
又拍云HLS+技术优化
又拍云在HLS延迟问题上做了针对性的技术优化,推出了HLS+技术,也称为流式HLS技术。这项技术通过以下方式显著降低了HLS的延迟:
- 流式处理:将标准的HLS进行流式处理,大幅度降低延迟,并提高HTML5端直播的兼容性。
- 动态生成M3U8列表和小切片文件:为每个播放请求生成独立的M3U8列表,并动态快速地生成仅针对这个播放请求的小切片文件。
- Variant HLS+HTTP 302:采用Variant HLS+HTTP 302的方式标识客户端的行为,能够标记每个客户端的HLS请求,并为每个请求建立起连接。
- 优化启动切片和播放器取片间隔:通过优化启动切片数量和播放器取片的间隔时间,进一步减少延迟。
通过这些优化措施,又拍云成功将HLS的延迟稳定控制在了4秒左右,显著提升了用户体验。
实践中的注意事项
在实际应用中,缩短HLS首屏时间需要注意以下几点:
- 网络状况:确保网络带宽充足且稳定,避免因网络延迟导致首屏时间增加。
- 客户端性能:客户端的性能也会影响首屏时间,需要确保客户端设备能够及时处理和播放视频流。
- 服务器配置:合理配置服务器端的编码器和流分割器,生成合适大小的TS文件,以减少传输延迟。
结论
HLS作为主流的流媒体传输协议,在直播和视频点播服务中发挥着重要作用。然而,传统的HLS配置往往导致较高的延迟,影响用户体验。通过采用LHLS、LLHLS等低延迟解决方案以及又拍云的HLS+技术优化,可以显著缩短HLS的首屏时间,提升用户体验。在实际应用中,需要注意网络状况、客户端性能和服务器配置等因素,以确保优化效果的最大化。