Qt+FFmpeg网上下载的例子运行出错LNK2019

有耐心的小王 2015-09-16 09:41:25
网上例子:http://download.csdn.net/detail/feiyangqingyun/7653493
Qt版本:Qt5.2 MSVC2012
自己新建对话框项目进行测试,将例子中ffmpeg文件夹放入当前目录,添加例子中qffmpeg.cpp和qffmpeg.h,取消影子构建。
其中qffmpeg.h内容:
#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

pro文件中添加:
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 \

dialog.cpp中添加:
#include "qffmpeg.h"

QFFmpeg *ffmpeg;
ffmpeg=new QFFmpeg(this);

报错:

QFFmpeg的构造函数代码:
QFFmpeg::QFFmpeg(QObject *parent) :
QObject(parent)
{
videoStreamIndex=-1;
av_register_all();//注册库中所有可用的文件格式和解码器
avformat_network_init();//初始化网络流格式,使用RTSP网络流时必须先执行
pAVFormatContext = avformat_alloc_context();//申请一个AVFormatContext结构的内存,并进行简单初始化
pAVFrame=av_frame_alloc();
}

怀疑是av_register_all();等函数就没有找到,但是Ctrl+鼠标左键能转到相应定义处。
请高手帮忙看看,谢谢
...全文
316 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
有耐心的小王 2015-09-17
  • 打赏
  • 举报
回复
问题解决了,动态链接库的问题。
路径“LIBS +=”里添加静态连接库.lib文件,然后程序运行在系统文件夹或exe所在文件夹寻找相应动态链接库.dll
我下载了完整的ffmpeg库http://download.csdn.net/detail/xuelinytianyi/9113209
1.首先,不同于例子,我引用的是.lib (估计和.dll.a性质一样)
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 \

2.然后,在debug里添加ffmpeg/bin中的.dll文件,如下

3.运行成功,同样原理配置例子也可以运行。
fly_dragon_fly 2015-09-16
  • 打赏
  • 举报
回复
这个CPP没在工程里面吗
有耐心的小王 2015-09-16
  • 打赏
  • 举报
回复
我用的是Qt Creator,添加包含目录、添加库目录用写代码的形式,写在.pro文件里,如上图所示。 此外lib文件夹里有avcodec.lib和libavcodec.dll.a两种文件有何区别?例子里添加的是libavcodec.dll.a。
赵4老师 2015-09-16
  • 打赏
  • 举报
回复
项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项
欧阳春晖 2015-09-16
  • 打赏
  • 举报
回复
谢谢楼主邀请我回复帖子,这个错误的一般情况是你没有将该构造函数实现。
有耐心的小王 2015-09-16
  • 打赏
  • 举报
回复
我是将例子里的类加入我的程序中,直接运行例子提示程序异常退出,拆开来找原因,应该是FFMpeg没配置好。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧