流媒体网络协议之HLS(一)

一、HLS简介

HTTP Live Streaming(HLS)是一个由苹果公司提出的基于HTTP的流媒体传输协议。HLS的工作原理是把媒体文件或媒体流按照不同的码率分成一个个小片段进行传输,客户端可以根据自身的网络带宽选择合适码率的码流进行下载播放。在传输会话开始时,客户端首先需要下载描述媒体码流数据的M3U8索引文件。

网络协议 HTTP
封装格式 MPEG-2 TS
编码格式 Video:h265、h264,audio:mp3、AAC、AC-3
索引文件 video/mp4

二、HLS框架

HLS由四个模块组成:音视频输入、服务器、分发系统(文件服务器)和客户端。
图1 HLS框架图

HLS系统的输入可以是实时采集的音视频码流或离线文件。服务器通过Media encoder将输入流转码为HLS支持的编码格式(AAC、HEVC)和封装格式(MP4),并根据用户需求输出多个码率的MPEG-4流分别送到Stream segmenter;Stream segmenter将MPEG-4流分成大量的片段媒体文件,并将这些文件部署到文件服务器。同时Stream segmenter还创建并维护一个包含媒体文件列表的索引文件(M3U8)。客户端软件读取索引文件,然后按顺序请求列出的媒体文件并连续播放。
服务器负责媒体文件的获取和编码。Media encoder将媒体流封装成便于传输的格式,并准备以封装的媒体格式分发。分发系统就是文件服务器,可通过HTTP将媒体文件和索引文件传递给客户端。实际部署HLS需要文件服务器以及将媒体文件封装成fmp4文件。

File Extension MIME Type
.m3u8 vnd.apple.mpegURL
.ts video/MP2T
.mp4 video/mp4

客户端负责请求下载合适的媒体流,然后重新组合它们,并连续地播放。客户端首先根据特定的url获取索引文件,索引文件可以指定媒体文件、解密秘钥以及备用流的位置。客户端会定期加载索引文件的新版本,一直持续到EXT-X-ENDLIST标签为止。客户端在更新的索引文件中查找新的媒体文件和加密秘钥,并将这些url添加到队列中[客户端软件支持IOS3.0和Safair4.0以及更高版本]。

三、M3U8文件结构

M3U8文件是UTF-8编码格式的M3U文件,用于存放待播放码流的基本信息。客户端根据网络带宽选择合适码率的码流进行下载播放,实现码率切换功能,比如不同的带宽、不同的网速播放不同清晰度的视频流。这种功能的实现在于索引文件的特殊结构。
图2  M3U8文件结构

客户端逻辑,首先根据m3u8文件url先下载一级Index file,它记录了二级索引文件的url(Alternate-A、Alternate-B、Alternate-C),然后再去下载二级索引文件,二级索引文件记录了TS文件的url,最后客户端可以按顺序下载TS视频文件并连续播放。
○1 m3u8文件地址:http://demo.srs.com/live/livestream.m3u8;
○2一级索引文件:存放不同码率的HLS源的url;
○3二级索引文件:存放统一码率下TS切片文件的url。

EXTM3U 每个M3U文件第一行必须是这个tag,提供标示作用
EXT-X-VERSION 用以标示协议版本。这里是3, 那么这里用的就是HLS协议第三个版本,此标签只能有0或1个,不写代表使用版本1
EXT-X-TARGETDURATION 所有切片的最大时长,有些Apple设备这个参数不正确会无法播放
EXT-X-MEDIA-SEQUENCE 切片的开始序号。每一个切片都有唯一的序号,相邻之间序号+1。这个编号会继续增长,保证流的连续性
EXTINF ts 切片的实际时长。duration : 媒体持续时间
EXT-X-PLAYLIST-TYPE 类型,vod 表示点播,live表示直播。
EXT-X-ENDLIST 文件结束符号 表示不再向播放列表文件添加媒体文件

四、 参考链接:

HLS官网:
HLS协议草案:
HLS草案第五版
M3U8文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章