基本的工作原理:首先通过FFmpeg获取视频,可以是通过摄像头,文件,截屏等。然后利用QT中的OpenGL组件显示视频。主要的工作是利用着色器进行视频格式转换,因为获取到的视频格式一般是YUV格式,显示到显示器上的一般是RGB格式。这里的代码只实现了YUV422格式的转换,其他格式类似。 下面是视频获取类VideoSource.h头文件: #pragma once extern “C” { #include “libavcodec/avcodec.h” #include “libavformat/a […]
FFmpeg是纯C语法的,内部结构体内存分配和释放需要调用专门的函数,比如avformat_alloc_context,avformat_free_context等。使用起来不太方便,如果调用的时候忘记了一一对应的,很容易造成内存泄漏。 因此用C++的模板把ffmpeg中的内存分配进行了封装。下面的例子只是对AVFormatContext, AVCodecContext进行了封装,其他结构体封装起来也很方便,只需重载FFmpegPtrTraits类就可以。 template<typename T> class FFmpegPtrTraits; template& […]