由于把视频编码成I,B,P等帧,如下图

假设现在有I,B,P帧,那么要传输和显示呢??
如果按照显示顺序传输的话:
传输顺序就是I->B>P
当对B帧进行解码后,由于B帧无法单独显示,只能等待后面的P帧
如果不按照顺序传输,按照解码顺序传输的话:
传输顺序就是I->P->B
无论用哪种方式传输和显示,一旦有了B帧这个东西,就都需要告诉对方什么时候该显示这帧
于是就有了PTS和DTS,即Presentation Time Stamp和Decode Time Stamp
PTS告诉对方什么时候该显示这帧,而DTS则告诉什么时候该解码这帧
如果没有B帧的情况,PTS和DTS都是一样的:

有B帧的情况下,PTS和DTS才会不一致:

参考文章: