文章目录
架构
什么是
QML 还是 QtWidget
科技时代发s
QT播放器Windows上运行需要安装一个DirectShow解码器,例如LAV Filters
输出视频使用:QOpenGLWidget
程序发布使用:windeployqt
使用QPainter绘制视频图像不是一个好的解决方案:
1、YUV / RGB 转换费CPU
2、QPainter大面积绘制效率不高
OpenGL是一个不错的选择,目前移动设备上很多都是用GLES实现视频渲染。
大概思路是:
创建一个texture
实现一个shader用于YUV / RGB 转换
每次渲染将视频数据update到texture
将texture绘到一个表面
自从 Qt5 以后,Qt 的框架进行了大幅调整和更新,原有的 OpenGL 代码似乎已经无法在新版 Qt 上运行了。
在 Qt5 中,新增了 QOpenGL* 类,用以取代之前的 QGL* 类。
注意,虽然我们仍然能通过 Qt5 中的 OpenGL 模块使用 QGL* 类,但强烈建议大家在新的 Qt 应用程序中使用 QOpenGL* 类而不是 QGL* 类。
另外,在 Qt5 中,已经将 OpenGL 集成到了 Gui 模块中。因此,我们要想使用与 OpenGL 相关的类和函数,只需要在 .pro 工程文件中包含 gui 模块就可以了,无需像以前一样还要包含 opengl 。
initializeGL
该函数用来初始化当前的 OpenGL 环境。
注意,在此函数中,我们必须调用 initializeOpenGLFunctions(); 语句以便 Qt 在后台完成 OpenGL 环境的