qt - 需要使用 QT QOpenGLWidget 渲染 YUV 帧(来自 ffmpeg 的 AVFrame)

标签 qt ffmpeg yuv qopenglfunctions

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

我是 qt 和 OpenGL 的初学者。

有人可以帮忙吗?

谢谢
阿斯温

最佳答案

好吧,实际上,如果您需要实现一个真正快速渲染的播放器,您将不得不处理缓冲区优化、离屏渲染、缓冲区流——其中的一些东西。但就 Qt 新手而言,有一些简单但有效的解决方案:

  • 试试 AV_PIX_FMT_RGBA 像素格式,将一个简单的纹理渲染成一些绘图表面矩形就足够简单了。
  • 当我想自己尝试同样的方法时,发现了这个很棒的家伙,他实现了 full working example here .

  • 上面链接中的 QFFmpegGLWidget 类足以让您理解。转换为 RGB 是通过片段着色器完成的,使用 GL_LUMINANCE 应用的 3 个纹理的好老技巧在那里工作。

    我在自己的几乎类似的解决方案中苦苦挣扎,但是从相机(rtsp)中得到了错误、困惑的颜色。所以,请确保,您 获取帧 YUV420p .如果其他像素格式更适合您,请查看这些中文资源以更深入地了解它(谷歌翻译使它们易于阅读):
  • YUV shader conversions
  • YUV 2 RGB math

  • 祝你好运!

    关于qt - 需要使用 QT QOpenGLWidget 渲染 YUV 帧(来自 ffmpeg 的 AVFrame),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52676855/

    相关文章:

    c++ - Qt Linux/XP 差异 - 使用户无法调整窗口大小

    c++ - Qt 的 Sunbird 中的时间表/日期簿?

    c# - FFmpeg C# 视频转换

    video - 如何为输入颜色设置与视频大小相同的大小?

    python - 如何解码此 YUV 色彩空间字符串并将其保存为图像

    android - 如何在 android 中从 omxcodec 转储 yuv 缓冲区

    c++ - C++ 类中的引用

    qt - 在 ListView 中使用 QAbstractListModel

    windows - %a 和 %%a 突然分别在 Win 10 cmd 和批处理文件中不起作用?

    pointers - FFMPEG:将 YUV 数据映射到解码函数的输出缓冲区