H.264的DTS、PTS、frame_num、poc

DTS与PTS:

        先盗一张网图,解释DTS和PTS。

        DTS和PTS是解码端或者说播放器的概念,DTS是解码的顺序,PTS是显示的顺序。H264中,如果码流中不包含B帧,码流中所有帧的PTS=DTS。如果有B帧,因为B帧会双向参考,导致播放顺序在B帧后面的帧需要先解码出来,PTS!=DTS。

        当然上述不是本文的重点。

DTS、PTS是保存在nalu单元里面的吗?怎么解析出来?

        首先nalu是没有DTS,PTS这两个语义的。

        DTS:slice_header里面的frame_num等同于DTS。frame_num标识了nalu在码流中的存储顺序,也就是nalu送入解码器的顺序,等于elecard中 Number in stream概念,frame_num意义是当前帧在一个gop里距离I帧的间隔,从0开始,I帧的frame_num=0。

        PTS:播放顺序。等同于POC。POC=picture order count,等于elecard中 Number in display概念。但是每帧的POC值并不是能直接从nalu中解析出来的,要根据slice_header里面的pic_order_cnt_type(有0、1、2 三种值)确定POC的计算方式。具体POC的计算方式看参考文章。这张图解释了frame_num和POC。

参考:

POC计算_Dillon2015的博客-CSDN博客

H264---帧间编码---帧间预测编码(2):解码、显示顺序与图像管理_SXM19940913sxm的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_37515325/article/details/128243390
今日推荐