C++ 如何使用ffmpeg c++;

C++ 如何使用ffmpeg c++;,c++,ffmpeg,frame,decode,C++,Ffmpeg,Frame,Decode,通常,在解码视频时,我使用以下代码获取当前帧编号 while(av_read_frame(pFormatCtx, &packet)>=0) { if(packet.stream_index==videoStream) { // Decode video frame avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet); // Did we ge

通常,在解码视频时,我使用以下代码获取当前帧编号

while(av_read_frame(pFormatCtx, &packet)>=0) {
    if(packet.stream_index==videoStream) {
      // Decode video frame
      avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

      // Did we get a video frame?
      if(frameFinished) {
    int currentFrameNumber = pFrame->coded_picture_number; 
    }
    /* Free the packet that was allocated by av_read_frame*/
    av_free_packet(&packet);
  }
然后,当我实现搜索功能时,我添加av_seek_帧以搜索到所需的位置,如下所示:

if(av_seek_frame(pFormatCtx, -1, seekTarget, 0 )<0){
         LOG("log","error when seeking");
}
while(av_read_frame(pFormatCtx, &packet)>=0) {
        if(packet.stream_index==videoStream) {
          // Decode video frame
          avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

          // Did we get a video frame?
          if(frameFinished) {
        int currentFrameNumber = pFrame->coded_picture_number; 
        }
        /* Free the packet that was allocated by av_read_frame*/
        av_free_packet(&packet);
 }
if(av_seek_帧(pFormatCtx,-1,seekTarget,0)=0){
if(数据包流\索引==视频流){
//解码视频帧
avcodec_decode_video2(pCodecCtx、pFrame、frameFinished和packet);
//我们有录像带吗?
如果(框架完成){
int currentFrameNumber=pFrame->编码图片编号;
}
/*释放av_read_帧分配的数据包*/
av_免费_数据包(&数据包);
}
这就是问题出现的时候。pFrame->coded\u picture\u number返回的值不正确。
我的问题是,如果我有一个已解码的帧pFrame,我如何获得当前帧?

是否编码了您想要的图片编号?它是按解码顺序,而不是按显示顺序…AVFrame结构有一个成员显示图片编号,它是实际帧。如果我不使用av seek seek frame进行搜索,则编码图片编号是正确的值ure_数通常为零且不可靠。