读书人

关于ffmpeg解码带有B帧的H264流时的疑

发布时间: 2014-01-17 15:01:00 作者: rapoo

关于ffmpeg解码含有B帧的H264流时的疑惑
按照我从网上查的资料,解码器会重新排序含有B帧的H264数据流:

the Input sequence for video decoder
1 4 2 3 7 5 6
I P B B I B B

Let's take 1,2,3.. as PTS for simplification

the out sequence for video decoder
1 2 3 4 5 6 7
I B B P B B I


但是问题是,ffmpeg在解码时,每一帧解码时调用avcodec_decode_video2(),要么得到YUV,要么没得到.
那么,假设我按照上面的帧队列来调用avcodec_decode_video2(),第一次input[0]是I帧肯定解码成功并得到图像,可第二次当我开始解码input[1]也就是PTS为4的P帧时,avcodec_decode_video2()会返回什么?如果它返回成功并得到图像,那网上的说法就不对了.因为它先于PTS为2的B帧的图像返回了.也就是说ffmpeg没有帮我重新排序.经过我验证这是不会发生的,更有可能是下面这样:
它返回的是解码成功,但是没有得到图像失败,那就是说ffmpeg把P帧保存到缓存了,那问题就来了,如果我一共有4帧视频分别为I,B,B,P,编码后顺序:IPBB.我调了四次接口,第一次得到了一张图像,第二次没有得到.第三次得到了.第四次也得到了.也就是说我一共才得到3张图像?如果ffmpeg真的是这样工作的,那我是不是丢失了一帧图像?那缓存里的图像我怎么样才能得到?
[解决办法]
参考这个文章试试:http://blog.yikuyiku.com/?tag=avcodec_decode_video2

读书人网 >多媒体

热点推荐