HTTP Live Streaming(简称HLS)是苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果的QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成基于HTTP的小文件下载,一次只下载一部分文件。当媒体流正在播放时,客户端可以选择以不同的速率从许多不同的备用源下载相同的资源,从而允许流媒体会话适应不同的数据速率。在流媒体会话开始时,客户端将下载包含元数据的扩展M3U (m3u8)播放列表文件,以找到可用的媒体流。
HLS只请求基本的HTTP消息。与实时传输协议(RTP)不同,HLS可以通过任何允许HTTP数据通过的防火墙或代理服务器。使用内容分发网络传输媒体流也很容易。
苹果把HLS协议作为互联网草案(按部就班提交),第一阶段作为非正式标准提交给IETF。但是,即使苹果偶尔提交一些小的更新,IETF也没有进一步制定该标准的行动。
协议介绍
根据HLS协议,视频打包格式为TS。
视频编码格式为H264,音频编码格式为MP3、AAC或AC-3。
除了TS视频文件本身,还定义了用于控制回放的m3u8文件(文本文件)。
其实苹果之所以提出HLS,主要是为了解决RTMP的一些问题。例如,RTMP协议不使用标准的HTTP接口传输数据,因此在某些特殊的网络环境下可能会被防火墙阻挡。但是因为HLS使用HTTP协议传输数据,所以不会被防火墙阻挡(不会有防火墙不放过接口80)。
此外,RTMP是一个有状态的协议,这使得很难平滑地扩展视频服务器,因为需要为每个播放视频流的客户端维护状态。而HLS是基于无状态协议(HTTP)的,客户端只按顺序使用和下载服务器中存储的普通TS文件,所以和普通HTTP文件服务器的负载均衡一样简单。
另外,HLS协议本身实现了速率适配,不同带宽的设备可以自动切换到最合适速率的视频播放。其实HLS最大的优势就是他爸爸是苹果。苹果只在其iOS设备上提供HLS原生支持,放弃了flash。安卓也是被平果的“嚣张”逼得本土支持HLS。因此,flv、rtmp和其他Adobe视频解决方案需要额外的努力才能在移动设备上播放。当然,闪存对移动设备造成的性能压力确实是它自身的问题。
但是HLS也有一些无法穿越的坑。例如,使用HLS协议的视频直播延迟时间不能小于10秒,而RTMP协议的延迟时间可以低至3秒或4秒。因此,对于直播延迟敏感的服务,请谨慎使用HLS。
图片来自苹果官网
解释这张图,从左到右,左下方输入的视频源是什么格式并不重要,它和服务器之间的通信协议可以是任意的(比如RTMP),只要视频数据传输到服务器即可。这个视频在服务器上转换成HLS格式的视频(TS和m3u8两种文件)。详细看服务器中的Media编码器,有一个转码模块负责将视频源中的视频数据转码为目标编码格式(H264)的视频数据,视频源的编码格式可以是任何视频编码格式(参考视频技术基础)。视频转码为H264视频数据后,在流分割器模块中进行切片,切片结果为索引文件(m3u8)和ts文件。其实图中的Distribution只是一个普通的HTTP文件服务器,然后客户端只需要访问一级索引文件的路径就可以自动播放HLS视频流。
HLS的索引文件
所谓的索引文件就是前面提到的m3u8文本文件。
图片来自苹果官网
如上图所示,客户端播放HLS视频流的逻辑其实很简单。首先下载一级索引文件,记录二级索引文件(Alternate-A,Alternate-B,Alternate-C)的地址,然后客户端下载二级索引文件,记录TS文件的下载地址,这样客户端就可以按顺序下载TS视频文件并连续播放。
1.《hls 音视频:HLS协议简介》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《hls 音视频:HLS协议简介》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1194543.html