HLS流媒体协议介绍
简介
HLS(HTTP Live Streaming)是苹果公司推出的流媒体协议, 用于直播或点播场景, 应该算是当前平台兼容性最好的流媒体协议了. 其他主流的流媒体协议还有RTP(内容传输使用UDP)和Adobe的RTMP(基于TCP).
特点:
平台兼容性好
基于HTTP嘛, 站在这么高的网络层上, 网络兼容性肯定强, 穿个防火墙当然没问题; 通杀当今主流浏览器, 一也是HTTP嘛, 与浏览器天然兼容, 二是现代H5浏览器的提供的MSE(Media Source Extensions)媒体源扩展接口的支持, 使得在用户浏览器端实现音视频数据的自定义组装与编码转换得到了应用, 从而支持了无第三方插件的支持下的自定制音视频源的播放. 非H5浏览器那只能依靠第三方插件了, 如flash
当前除苹果的Safari浏览器原生支持HLS外, 其他H5浏览器都未支持, 但都可以使用MSE和flash技术实现, 如videojs-contrib-hs
媒体内容数据分块管理与分块传输
内容数据会被切分为小块, 多为10秒左右一小块. 每块可以有自己的属性, 如不同的加密密钥或向量
支持多码率自适应
可根据当前数据传输的质量自动选择相应的码率的流媒体数据源, 这需要服务端准备好多份不同码率的数据源. 当然也可以手动选择, 播放端实现支持即可
直播应用时延较大
是相对RTP和RTMP这些而言. RTMP通常为3秒左右, HLS通常为10秒以上. 主要是因为分块大小通常为10秒的原因, 相当于当前录制的内容要10秒后才会生成一个完整的分块文件让客户端下载. 当然也可以缩小分块大小来增加实时性, 但又会造成文件过小, 形成碎片文件, 造成存储空间的浪费
不支持组播
HTTP基于TCP, 自然就不支持组播技术了, 这是UDP的’专利’. 这自然就导致服务器流量和运算都会随用户数据增长而增长明显了
结构
该图片引用自苹果开发者网站
多码率时右上部分为:
该图片引用自苹果开发者网站
组件
传输协议:HTTP
这个没啥好说的了, 用HTTP的特点简介里都说了. HLS里的所有数据都用HTTP来传输, 主要是传输mpegts文件(音视频数据)和m3u8文件(音视频索引信息和额外信息)
封装格式:mpegts
媒体内容的分块文件的格式为mpegts, 通常分块文件后缀为”*.ts”. 这相当于是一个’容器’协议, 里面可以放他支持的编码格式的音视频数据:
- 视频格式:h264
- 音频格式:mp3, aac, ac-3