视频格局 播映体验 流量占用状况
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 表明该视频流为直播源

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文件和下载后续的音频和视频分片。