视频格局 | 播映体验 | 流量占用状况 |
---|---|---|
DASH | 计算直播推流端到播映端延时。支撑和视频帧绑定的内容交互。比如,直播答题在播映端的弹窗等。 | 小 |
HLS | 对视频进行切片,按切片播映,缓存小起播快;拖动时刻轴到任意时刻播映时,能够快速定位到对应的切片进行播映,响应快。 | 全体占用小,播映一个切片只下载一个切片内容;关于低码率的视频场景,因封装代价高导致流量占用相对较高。 |
MP4 | 头文件较大,边下边缓存,起播相对HLS和DASH慢一些;拖动时刻轴播映时,需求必定的时刻缓存;市场上大多数的浏览器客户端均能够播映,播映成功率高。 | 拖动时刻轴播映时,仍然需求下载整个头文件,耗费流量大;因流量占用较大,主张用在短视频处理的场景。 |
1.HLS格局
1.1 怎么区别直播和点播
- 判别是否存在 #EXT-X-ENDLIST
- 一个M3U8文件,假如结尾不存在 #EXT-X-ENDLIST,那么必定是 直播,不是点播
- 判别 #EXT-X-PLAYLIST-TYPE 类型
- ‘#EXT-X-PLAYLIST-TYPE’有两种类型:
- VOD 即 Video on Demand,表明该视频流为点播源
- EVENT 表明该视频流为直播源
- ‘#EXT-X-PLAYLIST-TYPE’有两种类型:
1.2 HLS怎么完成自适应码率
HLS有两种类型:
- Media Playlist
- Master Playlist:内部供给的是同一份媒体资源的多份流列表资源。其格局如下所示:
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
#EXT-X-ENDLIST
码率自适应技能:
- Adaptive Bitrate Streaming,一种视频码率能够根据网络状况或客户端播映buffer状况自动调整的视频传输技能。
有三种不同的码率自适应算法:
- Buffer-based:根据客户端的播映缓冲区buffer状况决议计划下一片段的码率档位
- 设置维护窗口,当buffer小于维护窗的时分,降低码率;
- 设置缓存约束:当buffer长度大于该约束的时分,提高码率;
- Rate-based:根据预测的带宽去决议计划下一片段的码率档位
- 经过对之前下载的视频切片的带宽进行收集处理, 从而预测下载下一个切片的网络带宽
- 一起考虑预测吞吐量和buffer信息决议计划下一片段的码率档位
1.3 #EXT-X-DISCONTINUITY
当HLS播映过程中编码参数发生变化的时分,需求加上#EXT-X-DISCONTINUITY字段分离隔,重启编码器。假如我想在HLS中插入广告,就需求加上这个字段。
- file format
- number and type of tracks
- encoding parameters
- encoding sequence
- timestamp sequeue
1.4 TS结构介绍
TS也称MPEG-TS,其间TS是”Transport Stream”,MPEG2-TS格局的特点便是要求从视频流的任一片段开始都是能够独立解码的。
- TS格局是首要用于直播的码流结构,具有很好的容错能力。
- TS流中不包含快速seek的机制,只能经过协议层完成seek。HLS协议根据TS流完成的。
TS文件(流)能够分为三层:
- TS层(Transport Stream),TS层在PES层上加入了数据流标识和传输的必要信息。
- PES层(Packet Elemental Stream),PES层在音视频数据上加了时刻戳等对数据帧的说明信息。
- ES层(Elementary Stream),ES层便是音视频数据
1.5 fMP4
fMP4 跟普通 mp4 根本文件结构是相同的。普通mp4用于点播场景,fmp4一般用于直播场景。
- 普通mp4的时长、内容一般是固定的。fMP4 时长、内容一般不固定,能够边生成边播映;
- 普通mp4完好的metadata都在moov里,需求加载完moov box后,才能对mdat中的媒体数据进行解码烘托;
- fMP4中,媒体数据的metadata在moof box中,moof 跟 mdat (一般)结对出现。moof 中包含了sample duration、sample size等信息,因而,fMP4能够边生成边播映;
一个完好的fMP4文件是:moov + (moof + mdat)* N
2.DASH格局
作业原理:
- 下载MPD文件,解析DASH相关信息;
- 下载视频的Initialization Segment和音频的Initialization Segment;
- 下载视频的第一个分片,下载音频的第一个分片;
- 当视频和音频的第一个分片都下载完,播映器内部再进行一些相关处理后,就能够开始播映出画面。后续便是不断轮询更新MPD文件和下载后续的音频和视频分片。