【问题标题】:keyframe is not a keyframe? AV_PKT_FLAG_KEY does not decode to AV_PICTURE_TYPE_I关键帧不是关键帧吗? AV_PKT_FLAG_KEY 不解码为 AV_PICTURE_TYPE_I
【发布时间】:2012-12-12 05:35:16
【问题描述】:

解码标志中包含 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 视频)。

【问题讨论】:

    标签: ffmpeg libavcodec libav libavformat


    【解决方案1】:

    我收到了来自 ffmpeg bugtracker 的回复:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2014-12-05
      • 2014-02-14
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多