Programación de aplicaciones QT: use QTAV para obtener cada cuadro de video decodificado

1. Introducción medioambiental

Sistema operativo:  win10 de 64 bits

Versión QT:   QT5.12.6

Compilador:   MinGW 32

Versión QtAV:   QtAV-1.12.0

Versión FFMPEG :   ffmpeg 3.1 usa el paquete provisto por QtAV, úselo directamente

Dos, proceso de compilación e instalación de QTAV

Blog de referencia: https://blog.csdn.net/xiaolong1126626497/article/details/112209279 

Tres, obtenga los datos de imagen de cada fotograma del video decodificado

Idea: herede VideoOutput y vuelva a implementar la función ReceiveFrame.

#include <QObject>
#include <QWidget>
#include <VideoOutput.h>
#include <QDebug>

using namespace QtAV;

class my_qtav_videoOut: public VideoOutput
{
    Q_OBJECT
public:
    my_qtav_videoOut(QObject *parent = nullptr);
signals:
    void SendOneFrame(QImage img);
protected:
    //接收帧
    bool receiveFrame(const VideoFrame& frame);
};
my_qtav_videoOut::my_qtav_videoOut(QObject *parent)
{

}

//接收帧
bool my_qtav_videoOut::receiveFrame(const VideoFrame& frame)
{
    //得到每帧的图像
    QImage Image=frame.toImage();
    //将得到的一帧数据传递出去
    emit SendOneFrame(Image);
    return true;
}

Cómo utilizar:

my_qtav_videoOut *m_vo;
AVPlayer *m_player;
Widgets::registerRenderers();
m_player = new AVPlayer(this);
m_vo=new my_qtav_videoOut(this);
m_player->setRenderer(m_vo);
//关联播放器的视频帧显示
connect(m_vo, SIGNAL(SendOneFrame(QImage)),ui->widget,SLOT(slotGetOneFrame(QImage)));

 

 

 

Supongo que te gusta

Origin blog.csdn.net/xiaolong1126626497/article/details/112330651
Recomendado
Clasificación