HLS协议
http协议传输TS片段;苹果公司推出的一种适用于回放取流的协议
抓包解析:
1 三次握手
http服务端的端口是80

2 拉流
使用VLC拉取http live stream;服务端有M3U8和TS文件片段

3 取流响应

携带M3U8信息:
M3U8头,HLS协议版本号,是否允许缓存片段;
TARGETDURATION单个分片的最大时长;EXT-X-MEDIA-SEQUENCE 起始第一片的序号;后续依次递增
EXTINF描述下边这个分片的持续时长,单位是秒;现有的几个分片文件名称

4 播放分片
VLC根据抓包看是每次请求播放分片的时候都重新握手的,但是也可以不用重新握手
协议中包含刚才服务端传过去的分片的名称

5 返回200 并开始传输TS

TS188字节一个小包,一次可以发送多个TS包;TS的每个188字节的包中,第一个字节是0x47

6 响应信息详解



下边的包是视频数据;TS的视频使用的PES包头,之后就是H264数据;解析帧的时间戳,在PES包中

其中的PUSI变量可以标识改包是否是PES包中的第一包;用于断帧;CC是每15个包一循环,但是并不是15个包以内就能完整表示一帧音视频;

7 PES解析
里边会携带音视频头 E0,C0;长度(可能没有);时间戳;扩展信息

7 HLS 协议当首次传输的M3U8中的片段都播放完了,怎么穿后续的M3U8
当第一次传输的M3U8信息里的文件都播放完了,新的M3U8会携带新序列号(续接上一个M3U8的序列号)的一批文件传给客户端
客户端根据M3U8文件中的 #EXT-X-TARGETDURATION 字段(指定单个分片最大持续时长,如10秒)设定轮询间隔,通常为半周期(如5秒)触发新M3U8请求
示例:若 TARGETDURATION=10,则每5秒请求一次新版M3U8文件
但是有些播放器可能就按分片的TARGETDURATION来请求新的M3U8的;请求还是像第一步一项,get请求,得到M3U8的最新信息
浙公网安备 33010602011771号