1、如何同步视频
直到现在,我们的视频播放器还几乎无法正常工作,虽然它能播放视频,也能播放声音,但是声音和视频还没同步。那么现在我们要怎么做呢?
2、PTS和DTS的作用
音频流和视频流信息里面,都有一些信息用于表明应该以多快速度和什么时间来播放它们。音频流有采样率,视频流有帧率。但是如果只是简单的通过数帧和乘以帧率的方式来同步视频,那么同步很可能会出问题。为了可以实现同步,在流中的数据包中有解码时间戳(DTS)和显示时间戳(PTS)。要理解这两个参数的作用,得先了解电影的存储方式。像MPEG等格式,使用被称为B帧(B代表“bidrectional”)的方式。另外两种帧被称为I帧和P帧(I表示"intra",P表示“predicted”)。I帧包含了一帧指定的完整图像,P帧依赖于前面的I帧或者P帧,且使用比较或者差分的方式来编码。B帧与P帧有点类似,但是它是依赖于前面和后面的帧的信息。这也就解释了为什么在调用avcodec_decode_video的时候可能得不到一帧完整的图像。
假设我们有个视频,帧序列为:I B B P,现在要在显示B帧之前知道P帧中的信息。所以这个帧序列的存储方式可能是这样的:IPBB。从这里就可以看出解码时间戳和时间戳的作用了,解码时间戳决定什么时候解码&