1

我尝试使用 ffmpeg + opengl 控制视频的播放速度。但我有问题。

我的视频以 25 fps 编码,播放速度非常快。我在我的代码中添加了这个。

tiempo = glfwGetTime();
duracion = 1.0/25.0; // 1 second / 25 fps

while(1){

...        

  if(glfwGetTime() > tiempo + duracion){
    if(av_read_frame(pFormatCtx,&packet) >= 0){
      if(packet.stream_index == 0){
        avcodec_decode_video2(pCodecCtx,pFrame,&frameFin,&packet);
        if(frameFin)sws_scale(img_convert_ctx,pFrame->data,pFrame->linesize,0,pCodecCtx->height,pFrameRGB->data,pFrameRGB->linesize);
      }
      av_free_packet(&packet);
    }
    tiempo = glfwGetTime();
  }

...

}

问题是现在视频播放速度比它应该慢。问题是什么?

4

2 回答 2

2

您将解码需要解码图像的时间添加到您必须等待显示下一个的 40 毫秒。此错误是因为您在循环结束时再次测量时间。

代替:

    }
    tiempo = glfwGetTime();
  }

写:

   }
   tiempo+=duraction;
}
于 2013-09-02T17:08:19.620 回答
0

我认为这是错误的: if(glfwGetTime() > tiempo + duracion){ //... tiempo = glfwGetTime();

因为第一次调用 glfwGetTime 和第二次不一样 -> 你应该将它缓存在一个变量中并与之比较。

于 2013-09-02T17:08:39.067 回答