ffmpeg如何从['P'帧]计算完整的帧['I'帧]。它在概念上是正确的吗?

时间:2014-02-14 08:56:56

标签: ffmpeg

我正在尝试获取ffmpeg流视频处理的知识。

我的理解:

我从IPed Camaera那里得到像'IPPPPPPPPPPPPPPPPIPPPPPPP'这样的帧。

帧'I'是一个完整的帧,其中帧'P'取决于前一个'P'或'I'帧,它们是关闭的。

我使用avcodec_decode_video2

获取帧
while (av_read_frame (context, &packet) >=0)
{   
        //LOGD (" Received PACKET...DTS and PTS  %ld and %ld ", packet.pts, packet.dts);

        if(packet.stream_index == videoStreamIndex ) { 
                avcodec_decode_video2 (pCodecCtx, pFrame, &finished, &packet);
                if ( finished) {
                // Here is my frame, getting the type by av_get_picture_type_char(pFrame->pict_type).
          }
 }

现在,当我只显示我收到的帧时,看起来每当“我”帧收到时,它会正确显示,当收到'P'帧时,图像会进行折腾。

1)我们需要手动进行任何计算才能将'P'帧转换为'I'帧,以便可以渲染吗?

2)如果不是(1),我需要注意什么?.. DTS / PTS计算在这里有效吗?

1 个答案:

答案 0 :(得分:2)

P帧不依赖于之前的P帧,它取决于之前的图片。所以,例如,如果你有IPP,你需要我和第二个P来使用第三个P,而不仅仅是第二个P.

decode_video2为你做插值并返回图像,所以它折腾的原因必须是不同的。

PTS / DTS告诉您何时显示帧,但帧仍然必须有效。

相关问题