首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

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

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

关于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

热点排行