1.下载sdl2,ffmpeg dev
2.qt的配置
win32: LIBS += -L$$PWD/libffmpeg/lib/ -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lpostproc -lswscale
win32: LIBS += -L$$PWD/libSDL/lib/x86/ -lSDL2 -lSDL2main
INCLUDEPATH += $$PWD/libffmpeg/include
DEPENDPATH += $$PWD/libffmpeg/include
INCLUDEPATH += $$PWD/libSDL/include
DEPENDPATH += $$PWD/libSDL/include
3.类接口源码(参考了雷博士的源码)
#ifndef VIDEOPLAYER_H
#define VIDEOPLAYER_H
#ifdef _WIN32
//Windows
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "SDL.h"
};
#else
//Linux...
#ifdef __cplusplus
extern "C"
{
#endif
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <SDL2/SDL.h>
#ifdef __cplusplus
};
#endif
#endif
class VideoPlayer
{
public:
VideoPlayer(void* hwnd);
~VideoPlayer();
//init ffmpeg SDL
static int StaticInit();
//crate videoplayer
static VideoPlayer * CreateNew(void *hwnd);
//
int OpenVideo(const char * videopath);
//
int Play();
//
int Stop();
//
int Pause();
//
int Continue();
void test();
public:
static bool IsStaticInit;
AVFormatContext *pFormatCtx;
AVCodecContext *pCodecCtx;
int videoindex;
//--------------SDL---------
SDL_Texture* sdlTexture;
SDL_Renderer* sdlRenderer;
bool fPause;
bool fEndThread;
private:
uint8_t *out_buffer;
//AVPacket *pa