关键帧不是关键帧?AV_PKT_FLAG_KEY不解码为AV_PICTURE_TYPE_I



解码标记中包含AV_PKT_FLAG_KEY的数据包后,我希望得到I帧,但我得到的却是p帧:

调用后:

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

我打印出以下内容作为完整性检查:

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

返回输出:

    packet flags: 1 picture type: P

当我期待的时候:

    packet flags: 1 picture type: I  

Where '1' == AV_PKT_FLAG_KEY。和'I'指的是AV_PICTURE_TYPE_I,

这个行为正确吗?(我正在解码MPEG2视频)。

我得到了ffmpeg bug跟踪器的响应:

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

我怀疑你错过了编解码器延迟。你得到的视频帧通常根本不是基于你刚刚发送进来的数据包。对于多线程解码尤其如此,但由于b帧的工作方式,即使没有它,通常也不可能。

并且,确实我在3帧后打印出->pict_type"图片类型",有一个I帧在几帧后弹出,并在3帧后出现"延迟"。在我的情况下,我有一个四核计算机,所以也许有一个线程被分配给我的计算机上的每个核心进行编码。

相关内容

  • 没有找到相关文章

最新更新