一、环境介绍
操作系统: win10 64位
QT版本: QT5.12.6
编译器: MinGW 32
QtAV版本: QtAV-1.12.0
FFMPEG版本: ffmpeg 3.1 使用的是QtAV提供的包,直接使用
二、QTAV编译安装流程
参考博客: https://blog.csdn.net/xiaolong1126626497/article/details/112209279
三、获取解码的视频每帧图像数据
思路: 继承VideoOutput,重新实现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; }
使用方式:
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)));