首页 > 解决方案 > QOpenGLWidget 多进程视频渲染性能

问题描述

如果没有代码,我的问题可能看起来很模糊,但实际上并非如此。

所以,我有一个几乎可以正常工作的小部件,它可以渲染视频帧。

Qt 5.10 和 QOpenGLWidget 子类化工作正常,我没有进行任何复杂的优化——有两个纹理和几个着色器,将 YUV 像素格式转换为 RGB—— glTexImage2D()+ 着色器,没有缓冲区。

视频帧是从 FFMPEG 获得的,由于硬件加速,它表现出很好的性能......当只有一个视频窗口时。

该软件是一个“视频墙”——同一屏幕上的多个独立视频窗口。当然,多线程将是首选的解决方案,但现在遗留的,我不能改变它。

因此,无论窗口大小如何,1 个全高清视频窗口都会消耗约 2% 的 CPU 和 8-10% 的 GPU。但是从同一个可执行文件同时启动的 7-10 个类似的窗口几乎消耗了所有 CPU。我的数学表明 2 x 8 != 100 ...

我最好的猜测是:

在 Ubuntu 上的行为是相同的,其中解码使用不同的编解码器(我的意思是使用 GPU 加速或 CPU 加速的编解码器没有区别!),所以,我更有可能错过了关于 OpenGL 的一些东西......或者没有,因为使用动态纹理启动 6-7 个 Qt 示例显示 CPU 使用率正常增长——它大约是窗口数量的总和。

无论如何,对我来说,描述这个案例变得非常棘手,所以我希望之前有人可以解决类似的问题并可以与我分享他的经验。我将不胜感激任何想法,如何处理所描述的谜语。

如果有帮助,我可以添加任何代码。

标签: c++qtopenglffmpeg

解决方案


推荐阅读