win 系统 qt 工程添加 ffmpeg

本文详细介绍了如何在Qt环境中集成FFmpeg库,包括下载预编译版本、配置Qt工程、添加必要的头文件及链接库,以及如何正确处理C与C++间的调用问题。

前提是 已经安装好qt 环境
步骤一:
到ffmpeg官网 下载 win平台 编译好的 shared+dev 版本的开发包,获取到  ffmpeg的头文件和 lib ,dll
步骤二:
添加ffmpeg 头文件和lib到qt 工程
INCLUDEPATH += $$PWD/../../commonlib/ffmpeg-dev/include
DEPENDPATH += $$PWD/../../commonlib/ffmpeg-dev/include


LIBS += -L$$PWD/../../commonlib/ffmpeg-dev/lib -lavformat
LIBS += -L$$PWD/../../commonlib/ffmpeg-dev/lib -lavdevice
LIBS += -L$$PWD/../../commonlib/ffmpeg-dev/lib -lavcodec
LIBS += -L$$PWD/../../commonlib/ffmpeg-dev/lib -lavfilter
LIBS += -L$$PWD/../../commonlib/ffmpeg-dev/lib -lavutil
LIBS += -L$$PWD/../../commonlib/ffmpeg-dev/lib -lpostproc
LIBS += -L$$PWD/../../commonlib/ffmpeg-dev/lib -lswresample
LIBS    +=  -L$$PWD/../../commonlib/ffmpeg-dev/lib -lswscale

步骤三:
在需要使用ffmepg 的地方添加相关的头文件,如下
extern "C"{

#ifdef __cplusplus
  #define __STDC_CONSTANT_MACROS
  #ifdef _STDINT_H
   #undef _STDINT_H
  #endif
  # include <stdint.h>
 #endif

#include"libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavutil/imgutils.h"
}


int main(int argc, char *argv[])
{
    AVFormatContext *pFormatCtx;
    int             i, videoindex;
    AVCodecContext  *pCodecCtx;
    AVCodec         *pCodec;
    AVFrame *pFrame,*pFrameYUV;
    unsigned char *out_buffer;
    AVPacket *packet;
    int ret, got_picture;
    av_register_all();
    return 0;
}
注意的地方是,因为ffmpeg是纯c编译的,qt配置的是C++编译器,所以自如没有加上“extern "C" 的话,会提示 undefined reference to `av_register_all() 和 出现“UINT64_C” was not declared in this scope 的错误;
ps C++保留了一部分过程试语言的特点,因而它可以定义不属于任何类的全局函数和变量,但是C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,c++对全局函数的处理明显与C不同。
extern "c" 的主要作用就是为了能够正确实现c++代码调用其他C语言代码,加上extern "C" 后,会提示编译器这部分的代码按c语言进行编译 ,而不是 c++的,由于c++支持函数重载,因而编译器编译函数的过程会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而c语言并不支持函数重载,因而编译c语言代码的函数不会带上函数的参数类型,一般只包括函数名。
比如说你用c开发了一个dll库,为了能够让c++语言也能调用你的dll输出(export)的函数,你需要用 extern ”c“ 来强制编译器不要修改你的函数名
 步骤四:
把ffmepg 的dll 放到运行的bin目录中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值