需要使用QT QOpenGLWidget渲染YUV帧(ffmpeg的AVFrame)

时间:2018-10-06 07:44:41

标签: qt ffmpeg yuv qopenglfunctions

我有一个来自YUFF格式的FFMPEG的AVFrame。我想使用来自QOpenGLWidget和QOpenGLFunctions的qt派生类来渲染它。

我是qt和OpenGL的初学者。

有人可以帮忙吗?

谢谢 阿斯温

1 个答案:

答案 0 :(得分:1)

好吧,实际上,如果您需要实现一个 really 快速渲染播放器,则必须搞乱缓冲区优化,屏幕外渲染,缓冲区流传输-这些都是其中的东西。 。但就Qt的新手而言,有一些简单但可行的解决方案:

  1. 尝试使用AV_PIX_FMT_RGBA像素格式,将简单的纹理渲染到某些绘图表面矩形中就足够简单了。
  2. 当我想尝试相同的方法时,找到了一个出色的人,他实施了full working example here
上面的链接中的

QFFmpegGLWidget类足以使您理解。转换为RGB是通过片段着色器完成的,使用GL_LUMINANCE应用了3种纹理的良好老技巧在那里工作。

我一直在努力解决自己几乎相同的解决方案,但是仍然从相机(rtsp)获得了错误的,混乱的颜色的图片。因此,请确保您 正在获取 YUV420p 中的帧。如果其他像素格式更适合您,请检查这些中文资源以使其更深入(Google翻译使它们更具可读性):

  1. YUV shader conversions
  2. YUV 2 RGB math

祝你好运!