解码标志中包含 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 bugtracker 的回复:
https://ffmpeg.org/trac/ffmpeg/ticket/2074 https://ffmpeg.org/trac/ffmpeg/ticket/2074
我怀疑你错过了编解码器延迟。
您输出的视频帧通常根本不基于您刚刚发送的数据包。对于多线程解码尤其如此,但即使没有,由于 B 帧的工作方式,这通常也是不可能的。
而且,事实上,我在 3 帧后打印出 ->pict_type“图片类型”,几帧后弹出一个 I 帧,并在 3 帧后出现了某种“延迟”。就我而言,我有一台四核计算机,因此可能为我的计算机上的每个核心分配一个线程来进行编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)