首先了解一下NAL包结构,如下图所示为NAL的包头结构,其中unit_type占用5个bit,表示帧类型如下表所示,其中IDR图像对应的unit_type数值为5,因此可以通过包头信息判断流数据是否为IDR图像

下面开始介绍视频播放Seek的基本原理,如下图所示,为视频文件播放时间轴示意图,Start为开始播放视频的,End为视频播放结束,IDR帧为立即刷新帧所对应的播放时刻,Seek为拖动播放条时刻。

  • 若正常播放到Seek点时,视频一帧一帧逐帧解码播放;
  • 若直接拖动播放条到Seek点,则只需比对NAL包头判断是否为IDR帧以及计算是否接近Seek时间点即可。若判断数据包的时间点不在Seek附近或者不是IDR帧,则不用解码忽略此数据包;若判断收包时间点在Seek附近并且为IDR帧(图中黄色圆圈位置)则再进行解码,从而达到快速响应Seek的效果。