qt - 需要使用 QT QOpenGLWidget 渲染 YUV 帧(来自 ffmpeg 的 AVFrame)
问题描述
我有一个来自 FFMPEG 的 YUV 格式的 AVFrame。我想使用来自 QOpenGLWidget 和 QOpenGLFunctions 的 qt 派生类来渲染它。
我是 qt 和 OpenGL 的初学者。
有人可以帮忙吗?
谢谢阿斯温
解决方案
好吧,实际上,如果您需要实现一个真正快速渲染的播放器,您将不得不处理缓冲区优化、离屏渲染、缓冲区流——其中的一些东西。但就 Qt 新手而言,有一些简单但有效的解决方案:
- 试试 AV_PIX_FMT_RGBA 像素格式,将一个简单的纹理渲染成一些绘图表面矩形就足够简单了。
- 当我想自己尝试相同的方法时,发现了这个很棒的家伙,他在这里实现了完整的工作示例。
上面链接中的 QFFmpegGLWidget 类足以让您理解。转换为 RGB 是通过片段着色器完成的,使用 GL_LUMINANCE 应用的 3 个纹理的好老技巧在那里工作。
我在自己的几乎类似的解决方案中苦苦挣扎,但是从相机(rtsp)中得到了错误、混乱的颜色。因此,请确保您在YUV420p中获得帧。如果其他像素格式更适合您,请查看这些中文资源以更深入地了解它(谷歌翻译使它们易于阅读):
祝你好运!
推荐阅读
- python - 如何将任意字典存储到文件中,以便它也可以在 Fortran 中读取?
- excel - Excel IF公式从多个空白单元格中提取文本单元格
- c# - 如何监视文本文件并仅检索添加的行?
- c# - .net 核心应用程序中是否有 DependentUpon 选项?
- google-chrome - 为拥有多个帐户的 Chrome 用户获取正确的 Google 客户端 ID
- struts2 - 面临 log4j2 的问题:java.lang.ExceptionInInitializerError
- node.js - 如何在 heroku 服务器上启用 POST 方法(用于 React 应用程序)?我得到 405 方法不允许
- node.js - 对象内所需参数的 Joi 验证错误消息
- php - 无法使用 Apache (FPM) 连接到 Oracle (oci8)。PHP 7.x CLI 没问题
- php - 将标签输入数组后剥离标签?