How to get current frame number using ffmpeg c ++

I usually use the code below to get the current frame number when decoding a video.

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);
  }

Then, when I implemented the search function, I add av_seek_frame to search for the desired position as follows:

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);
 }

This is when a problem arises. pFrame-> coded_picture_number returns an invalid value. My question is, how do I get the current frame if I have a decoded pFrame?

+3
source share

All Articles