Qt5.9.7 配置FFmpeg ,并写例子测试(五)

折腾了6个小时,(其实是两天)。终于搞定了(刚找到小白入门的门)。不知道Qt的一些潜规则,导致一直有问题:.h文件找不到。.lib文件找不到,之类的错误。

注意版本的位数,一定要跟工程一致。(这个坑,我久久没有上来)

32位的MinGW对应32位FFmpeg, 64位的VS2017对应64位FFmpeg

环境:Win10 + Qt5.7 + VS2017 + ffmpeg2.5.2版本(有点老)

新建一个非Qt 的C++工程

取个文件名。然后:↓

我用到了 MinGW和VS2017 , 一个32位,一个64位。

继续完成即可。

打开.pro文件:

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
        main.cpp


// 添加如下(不要写注释)
INCLUDEPATH += $$PWD/FFmpeg-64/include-64
LIBS += $$PWD/FFmpeg-64/lib/avcodec.lib\
            $$PWD/FFmpeg-64/lib/avdevice.lib\
            $$PWD/FFmpeg-64/lib/avfilter.lib\
            $$PWD/FFmpeg-64/lib/avformat.lib\
            $$PWD/FFmpeg-64/lib/avutil.lib\
            $$PWD/FFmpeg-64/lib/postproc.lib\
            $$PWD/FFmpeg-64/lib/swresample.lib\
            $$PWD/FFmpeg-64/lib/swscale.lib

 定义了两个文件,分别为32位和64位。

FFmpeg-64 文件中如下

开始的时候,我把lib文件,写成了lib-64. 然后就一直找不到.lib文件 —_— !!  后来去掉数字之后,才行了。

转到 main.cpp文件,如下写:

#include <iostream>
using namespace std;

extern "C"
{
#include <FFmpeg-64/include-64/libavcodec/avcodec.h>
#include <FFmpeg-64/include-64/libavformat/avformat.h>
#include <FFmpeg-64/include-64/libswscale/swscale.h>
#include <FFmpeg-64/include-64/libavdevice/avdevice.h>
}

int main()
{
    std::cout << "Hello FFmpeg!" << endl;
    av_register_all();
    unsigned version = avcodec_version();
    cout << version << std::endl;
    return 0;
}

   

不知道这个“endl”跟谁冲突了,所以直接去掉就OK。

2019/4/12补充:endl 是<qDebug> 文件中的  qDebug()<<endl;  输出回车。因为没有包含<qDebug>所以,提示红色。

Qt中 endl 并不是VS中的endl

 运行成功!

 

参考:http://blog.yundiantech.com/?log=blog&id=8     继续写例子:遇到的问题如下:

     av_register_all();
     // 初始化
    AVFormatContext *pFormatCtx = avformat_alloc_context();
    // 打开视频文件
    char file_path[] = "D:/QtProject/pratice/ffmpeg_32_64/Forrest_Gump_IMAX.mp4";
    avformat_open_input(&pFormatCtx, file_path, nullptr, nullptr);

问题一:

如上代码,file_path,一直找不到文件。试了很多种方法:char file_path[] = "path_url";

1、视频文件放在debug目录下,file_path[] = "Forrest_Gump_IMAX.mp4"     不可行

2、视频文件放在main.cpp文件同级, file_path[] = "Forrest_Gump_IMAX.mp4"     可行

3、视频文件直接放在D盘,根目录下, file_path[] = "D::name.mp4"     不可行

4、char file_path[] = "D:\\Forrest_Gump_IMAX.mp4";    可以了 √

5、file_path[] = "D:/QtProject/ffmpeg_32_64/Forrest_Gump_IMAX.mp4";   // 包含绝对路径,反斜杠不要写反了。可以了 

 

问题二:

avpicture_fill((AVPacket *)pFrameRGB, out_buffer, PIX_FMT_RGB24, pCodecCtx->width, pCodecCtx->height);

对于这个问题,一直没有找到解决方法,先暂且搁置,新建一个demo,换一个FFmpeg的版本库。版本问题,已解决

 

 

总结注意事项,每次用FFmpeg做视频的时候,一定要按着这个注意事项,一个一个审查:

1、版本一致,版本一致,版本一致,32位库还是64位库,把FFmpeg文件包含在项目里面。(不要嫌麻烦,每一个建一个新项目,有要独立包含自己的FFmpeg库)

2、项目名称一定不能有中文,切记,不能有中文

3、包含lib文件时,lib文件名不要有数字,不要有数字。

4、dll文件,直接散放在debug目录下,不要直接把bin文件直接放进debug下,这样程序找不到函数。亲测有效。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值