最近在做ffmpeg相关的项目,满眼的AVPacket和AVFrame,一下就眼晕了。Frame还好理解,但是这里packet到底什么样的包,和Frame又是什么关系呢。
参考网上的介绍
http://blog.csdn.net/ym012/article/details/6540065 写道
从int av_read_frame(AVFormatContext *s, AVPacket *pkt)函数看,从数据流读出的数据首先是保存在AVPacket里,也可以理解为一个AVPacket最多只包含一个AVFrame,而一个AVFrame可能包含好几个AVPacket,AVPacket是种数据流分包的概念。记录一些音视频相关的属性值,如pts,dts等
一桢的数据保存在frame里这没什么问题,packet实际是这一桢中的分包。因为packet中还包含pts/dts,可以理解为对一桢的细分.
http://blog.csdn.net/alentam/article/details/2490716 写道
DTS时间戳决定了解码器在SCR时间等于DTS时间时进行解码,PTS时间戳也是类似的。通常,DTS/PTS时间戳指示的是晚于音视频包中的SCR的一个时间。例如,如果一个视频数据包的SCR是100ms(意味着此包是播放100ms以后从磁盘中读取的),那么DTS/PTS值就差不多是200/280ms,表明当SCR到200ms时这个视频数据应该被解码并在80ms以后被显示出来(视频数据在一个buffer中一直保存到开始解码)