Qt音视频开发24-视频显示QOpenGLWidget方式(占用GPU)

Posted feiyangqingyun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt音视频开发24-视频显示QOpenGLWidget方式(占用GPU)相关的知识,希望对你有一定的参考价值。

一、前言

采用painter的方式绘制解码后的图片,方式简单易懂,巨大缺点就是占CPU,一个两个通道还好,基本上CPU很低,但是到了16个64个通道的时候,会发现CPU也是很吃紧(当然强劲的电脑配置另当别论),这就需要考虑用opengl来绘制了,采用opengl走的GPU,会占用很少的CPU(一般是部分运算),而且一般ffmpeg采集到的就是yuv数据,可以直接用opengl来绘制,并不需要转成rgb格式的图片,转换也会占用不少的CPU资源。在Qt中一般用QOpenGLWidget来绘制yuv数据,正常解码后的yuv420p格式以及硬解码后的NV12格式,这两种需要不同的代码去绘制,所以考虑可以分两个不同的QOpenGLWidget,也可以在一个widget中通过标志位设置是何种类型,然后再去调用对应的绘制代码。

其实QOpenGLWidget也可以绘制rgb数据,意味着采集到的qimage图片也可以将对应数据交给QOpenGLWidget来绘制,总体CPU占用比纯painter绘制低一些,但是比直接绘制yuv要高一些,毕竟采集到的数据默认是yuv,需要重新转换成rgb,这个转换过程又占用了一些CPU运算。至于为何会有这种需求?有一个原因是yuv有点色差,不知道什么原因,比如网上都是 rgb = mat3(1.0, 1.0, 1.0, 0.0, -0.39465, 2.03211, 1.13983, -0.58060, 0.0) * yuv; 或者 rgb = mat3(1.0, 1.0, 1.0, 0.0, -0.3455, 1.779, 1.4075, -0.7169, 0.0) * yuv; (推荐后者)里面这几个值慢慢

Qt系列文章之二十六(基于QMediaPlayer 在 QVideoWidget或QGraphicsVideoItem 组件上播放视频)

前言

前面讲解了 QMediaPlayer 播放音频文件,但是视频文件播放器一直没去讲,本章将会详细讲解如何播放视频的程序开发。

播放概述

使用 QMediaPlayer 可以进行视频文件解码,视频播放必须将视频帧在某个界面组件上显示,有 QVideoWidgetQGraphicsVideoItem 两种视频显示组件,也可以从这两个类继承,自定义视频显示组件。

QMediaPlayer 也可以结合 QMediaPlaylist 实现视频文件列表播放。

在QVideoWidget上播放视频

视频播放器实例程序

废话不多说,直接以实例demo来进行如何在 QVideoWidget 上播放视频,QVideoWidget 是用于显示视频的界面组件,要在项目中使用QVideoWidget,需要在项目配置文件中添加下面一行语句:

Qt += multimediawidgets

使用 QMediaPlayerQVideoWidget 实现的一个视频播放器实例程序运行时界面如下图
所示。该程序没有使用 QMed

以上是关于Qt音视频开发24-视频显示QOpenGLWidget方式(占用GPU)的主要内容,如果未能解决你的问题,请参考以下文章

Qt音视频开发27-ffmpeg视频旋转显示

Qt 视频采集

QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解

Qt音视频开发23-视频绘制QPainter方式(占用CPU)

USB应用实战视频教程第3期:手把手玩转USB BULK方式下位机和QT6.4上位机开发(上篇)

Qt音视频开发26-监控画面各种图形绘制设计