该文章讲述如何在Qt上使用ffmpeg进行视频播放
环境配置这里就不再讲了,有需要的朋友可以直接看下面链接
基于Qt的FFmpeg–环节配置https://editor.youkuaiyun.com/md/?articleId=116718558
本章中的代码是基于雷神(直接粘贴,简单修改,主要是在Qt下运行),想要提供给一些想要使用Qt来调用ffmpeg新手的一些启示。
下面展示一下运行界面,使用的是控制台。播放用的SDL2。
直接粘贴代码使用就可以了,然后我简单给大家讲解一下里面的内容,都会在代码里面添加注释。如果有不对,请指出。共同学习,当前代码只有视频来源没有给出,这里各位可以自行下载,我也会贴出代码工程给各位下载。
#include <QCoreApplication>
extern "C"{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavutil/imgutils.h"
#include <libavutil/time.h>
#include "libavutil/pixfmt.h"
#include "libswresample/swresample.h"
#include "SDL2/SDL.h"
}
#undef main
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//解封装上下文,ffmpeg里关键
AVFormatContext *pFormatCtx;
int i, videoindex;
//解码器上下文
AVCodecContext *pCodecCtx;
//解码器
AVCodec *pCodec;
//帧数
AVFrame *pFrame,*pFrameYUV;
//可以作为数据存放的一个空间
unsigned char *out_buffer;、
//packet是在解压为一个Frame前的包数据
AVPacket *packet;
int y_size;
int ret, got_picture;
struct SwsContext *img_convert_ctx;
char filepath[]="bigbuckbunny_480x272.h265";
//SDL---------------------------
int screen_w=0,screen_h=0;
//SDL屏幕
SDL_Window *screen;
//渲染器
SDL_Renderer* sdlRenderer;
//渲染文本
SDL_Texture* sdlTexture;
//方框
SDL_Rect sdlRect;
SDL_Rect sdlRect2;
FILE *fp_yuv;
//这个在使用FFmpeg,一般都需要注册
av_register_all();
//如果有用到网络相关
avformat_network_init();
//初始化
pFormatCtx = avformat_alloc_context();
//打开文件
if(avformat_open_input(&pFormatCtx,filepath,NULL,