24,854
社区成员
发帖
与我相关
我的任务
分享
#ifndef QFFMPEG_H
#define QFFMPEG_H
//必须加以下内容,否则编译不能通过,为了兼容C和C99标准
#ifndef INT64_C
#define INT64_C
#define UINT64_C
#endif
//引入ffmpeg头文件
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/avfilter.h>
#include <libswscale/swscale.h>
#include <libavutil/frame.h>
}
#include <QObject>
#include <QMutex>
#include <QImage>
class QFFmpeg : public QObject
{
Q_OBJECT
public:
explicit QFFmpeg(QObject *parent = 0);
~QFFmpeg();
bool Init();
void Play();
void SetUrl(QString url){this->url=url;}
QString Url()const{return url;}
int VideoWidth()const{return videoWidth;}
int VideoHeight()const{return videoHeight;}
private:
QMutex mutex;
AVPicture pAVPicture;
AVFormatContext *pAVFormatContext;
AVCodecContext *pAVCodecContext;
AVFrame *pAVFrame;
SwsContext * pSwsContext;
AVPacket pAVPacket;
QString url;
int videoWidth;
int videoHeight;
int videoStreamIndex;
signals:
void GetImage(const QImage &image);
public slots:
};
#endif // QFFMPEG_H
INCLUDEPATH += ffmpeg/include
LIBS += ffmpeg/lib/libavcodec.dll.a \
ffmpeg/lib/libavfilter.dll.a \
ffmpeg/lib/libavformat.dll.a \
ffmpeg/lib/libswscale.dll.a \
ffmpeg/lib/libavutil.dll.a \
#include "qffmpeg.h"
QFFmpeg *ffmpeg;
ffmpeg=new QFFmpeg(this);
QFFmpeg::QFFmpeg(QObject *parent) :
QObject(parent)
{
videoStreamIndex=-1;
av_register_all();//注册库中所有可用的文件格式和解码器
avformat_network_init();//初始化网络流格式,使用RTSP网络流时必须先执行
pAVFormatContext = avformat_alloc_context();//申请一个AVFormatContext结构的内存,并进行简单初始化
pAVFrame=av_frame_alloc();
}
INCLUDEPATH += ffmpeg/include
#LIBS += ffmpeg/lib/libavcodec.dll.a \
# ffmpeg/lib/libavfilter.dll.a \
# ffmpeg/lib/libavformat.dll.a \
# ffmpeg/lib/libswscale.dll.a \
# ffmpeg/lib/libavutil.dll.a \
LIBS += ffmpeg/lib/avcodec.lib \
ffmpeg/lib/avfilter.lib \
ffmpeg/lib/avformat.lib \
ffmpeg/lib/swscale.lib \
ffmpeg/lib/avutil.lib \