音视频面试涨知识(四)

2,272 阅读4分钟
视频格式播放体验流量占用情况
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文件和下载后续的音频和视频分片。