关键帧不是关键帧? AV_PKT_FLAG_KEY没有解码到AV_PICTURE_TYPE_I(

2019-08-04 17:36发布

含AV_PKT_FLAG_KEY在标志一个包进行解码后,我期待得到I帧,而是我得到了P帧:

在通话结束后:

avcodec_decode_video2(codecCtx, frame, &frameFinished, &packet); // mpeg2 video

我打印出以下的健全性检查:

    printf("packet flags: %d picture type: %c\n", packet.flags,
            av_get_picture_type_char(frame->pict_type));

返回的输出:

    packet flags: 1 picture type: P

当我想到的问题:

    packet flags: 1 picture type: I  

其中 '1' == AV_PKT_FLAG_KEY。 和“I”是指2 AV_PICTURE_TYPE_I,

这种行为是正确的吗? (我解码MPEG2视频)。

Answer 1:

我从FFmpeg的错误追踪系统的响应:

https://ffmpeg.org/trac/ffmpeg/ticket/2074

我怀疑你缺少的编解码器延迟。 你走出平时的视频帧不是基于你只是在发送的所有数据包。 这是多线程解码尤其如此,但即使没有它不是一般可能是由于B帧是如何工作的。

而且,事实上我打印出来的 - > pict_type“图片类型” 3帧后,有一个I帧,与一个各种各样的“延迟”整整3帧后后会弹出一个几帧。 就我而言,我有一个四核的电脑,所以也许有被分配为我的计算机上的每个核心做编码线程。



文章来源: keyframe is not a keyframe? AV_PKT_FLAG_KEY does not decode to AV_PICTURE_TYPE_I