直播软件开发科普之音视频&流媒体(四)

 

I帧表示直播软件开发的关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面).

P帧表示的是直播软件开发的这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据).

B帧是直播软件开发的双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~。

PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来

DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。

DTS主要用于直播软件开发的视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的.

GOP

 

直播软件开发科普之音视频&流媒体(四)

 

 

两个I frame之间形成一个GOP,在x264中同时可以通过参数来设定bf的大小,即:I 和p或者两个P之间B的数量。如果有B frame 存在的情况下一个GOP的最后一个frame一定是P.

一般平均来说,I的压缩率是7(跟JPG差不多),P是20,B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。

如果一个GOP里面丢了I帧,那么后面的P帧、B帧也将会无用武之地,因此必须丢掉,但是一般策略会保证I帧不丢(如通过tcp协议保证) ,如果采用UDP,那么也会有更多的策略来保证I帧正确传输。


作者:吴德宝AllenWu
链接:https://juejin.im/post/6844903555141238791
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。