如何使用ffmpeg c编程在彼此之上播放多个视频

如何使用ffmpeg c编程在彼此之上播放多个视频,c,video,ffmpeg,sdl,C,Video,Ffmpeg,Sdl,我正试图开发一个代码,可以同时播放多个视频与ffmpeg。 我需要在2x2矩阵背景上播放一个视频,在左上角播放另一个视频。 问题:左上角的视频正在轻弹,不够稳定。 代码: 当我选择0/1时,我只在音频之间移动。 我的问题是:我应该编写什么代码才能使左上角的视频稳定地观看?您可以使用双缓冲屏幕,并确保左上角的视频帧始终是翻转缓冲区之前显示的最后一个视频帧(即使您只是重新显示同一帧)?抱歉,我没有理解。如果您将屏幕设置为双缓冲屏幕(需要向SDL\u SetVideoMode())添加一个标志,您将渲

我正试图开发一个代码,可以同时播放多个视频与ffmpeg。 我需要在2x2矩阵背景上播放一个视频,在左上角播放另一个视频。 问题:左上角的视频正在轻弹,不够稳定。 代码:

当我选择0/1时,我只在音频之间移动。
我的问题是:我应该编写什么代码才能使左上角的视频稳定地观看?

您可以使用双缓冲屏幕,并确保左上角的视频帧始终是翻转缓冲区之前显示的最后一个视频帧(即使您只是重新显示同一帧)?抱歉,我没有理解。如果您将屏幕设置为双缓冲屏幕(需要向
SDL\u SetVideoMode()
)添加一个标志,您将渲染到屏幕外的缓冲区,该缓冲区只有在您“翻转”缓冲区时才可见(使用
SDL\u flip()
)…通过这种方式,您可以确保在看到视频帧之前完全绘制视频帧。此外,您还需要确保在翻转缓冲区之前绘制较大的视频后始终绘制左上角的视频,这样它就不会被后面的较大视频所覆盖。目前,您可能在观看视频时看到屏幕s被吸引到它上,导致“翻转”。你能使用双缓冲屏幕,并确保左上角的视频帧始终是翻转缓冲之前显示的最后一个视频帧吗(即使你只是重新显示同一帧)?抱歉,我不明白。如果你使屏幕双缓冲(需要在
SDL\u SetVideoMode()中添加一个标志)
),您将渲染到屏幕外的缓冲区,该缓冲区仅在您“翻转”缓冲区时才可见(使用
SDL\u flip()
)…通过这种方式,您可以确保在看到视频帧之前完全绘制视频帧。此外,您还需要确保在翻转缓冲区之前绘制较大的视频后始终绘制左上角的视频,这样它就不会被后面的较大视频所覆盖。目前,您可能在观看视频时看到屏幕s被吸引到它上面,导致“轻弹”。
SDL_Surface *screen = SDL_SetVideoMode(640, 480, 24, 0);
void video_display(VideoState *is) {
  SDL_Rect rect;
  VideoPicture *vp;
  int w, h, x, y;
  h = screen->h;
  w = ((int)rint(h * aspect_ratio)) ;
  if(w > screen->w) {
    w = screen->w;
    h = ((int)rint(w / aspect_ratio)) ;
  }

  rect.x = (screen->w - w) / 2;
  rect.y = (screen->h - h) / 2;

  if(  is->video_id == 0 ){
     rect.w = w;
     rect.h = h;
     SDL_DisplayYUVOverlay(vp->bmp, &rect); // i think the problem is over here
  }
  else if( is->video_id == 1 ){
     rect.w = w/2;
     rect.h = h/2;
     SDL_DisplayYUVOverlay(vp->bmp, &rect);
  }