一、HLS
HLS协议HTTP Live Streaming用于播放.ts视频,它是苹果公司实现的基于HTTP的流媒体传输协议,可以实现流媒体的直播和点播。关键组成有m3u8和多个视频分片.ts,其中m3u8指定视频分片的地址。
官网:http://developer.apple.com/resources/http-streaming/。
M3U8文件(hls的index文件)
M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。
#EXTM3U #EXT-X-TARGETDURATION:5 #EXTINF:5, ./0.ts #EXTINF:5, ./1.ts
#EXTM3U:每个M3U8文件第一行必须是这个tag。
#EXT-X-TARGETDURATION:指定最大的媒体段时间长度(秒),#EXTINF中指定的时间长度必须小于或等于这个最大值。该值只能出现一次。
#EXTINF:描述单个媒体文件的长度。后面为媒体文件,如./0.ts
二、TS流
ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多达十几个,视频格式主要是mpeg2。苹果公司发明的http live stream流媒体是基于ts文件的,不过他大大简化了传统的ts流,只需要2个最基本的配置表PAT和PMT,再加上音视频内容就可以了,hls流媒体视频编码的主要格式为h264/mpeg4,音频为aac/mp3。
ts文件分为三层:ts层(Transport Stream)、pes层(Packet Elemental Stream)、es层(Elementary Stream)。es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层是在pes层上加入了数据流识别和传输的必要信息。
- ts stream structrue:
ts包大小固定为188字节,ts层分为三个部分:ts header、adaptation field、payload。ts header固定4个字节;adaptation field可能存在也可能不存在,主要作用是给不足188字节的数据做填充;payload是pes数据。
三、实践
ffmpeg -i XXX.mp4 -c:v libx264 -c:a copy -f hls XXX.m3u8
其中,XXX.mp4为本地视频文件,XXX.m3u8为最终生成的播放索引列表,与此同时还有N多个ts文件。
参考:
1. ts && hls 知乎
2. MPEG-TS 格式解析
6. TS流格式(转) 王纲