6

在解码标志中包含 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' 指的是 AV_PICTURE_TYPE_I,

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

4

1 回答 1

8

我得到了 ffmpeg bugtracker 的回复:

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

我怀疑您缺少编解码器延迟。您输出的视频帧通常根本不是基于您刚刚发送的数据包。对于多线程解码尤其如此,但即使没有,由于 B 帧的工作方式,通常也不可能。

而且,实际上我在 3 帧后打印出 ->pict_type “图片类型”,有一个 I 帧在几帧后弹出,并在 3 帧后出现“延迟”。就我而言,我有一台四核计算机,因此可能为我计算机上的每个内核分配了一个线程来进行编码。

于 2012-12-28T18:07:58.433 回答