ffmpeg学习记录源码编译windows下vs2019构建demo调试
Posted Hero_HL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg学习记录源码编译windows下vs2019构建demo调试相关的知识,希望对你有一定的参考价值。
1 编译ffmpeg源码
1.1 下载ffmpeg源码(github或ffmpeg官网【http://ffmpeg.org】
1.2 下载msys2,官网地址【http://www.msys2.org】
windows使用MinGW编译ffmpeg源码
1.3 安装msys2,默认安装路径(C:\\msys64)
1.4 更新msys2数据源(可省略)
1.4.1 C:\\msys64\\etc\\pacman.d\\mirrorlist.mingw32
http://mirrors.ustc.edu.cn/msys2/mingw/i686
1.4.2 C:\\msys64\\etc\\pacman.d\\mirrorlist.mingw64
http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
1.4.3 C:\\msys64\\etc\\pacman.d\\mirrorlist.msys
http://mirrors.ustc.edu.cn/msys2/msys/$arch
1.4.4 重新启动msys 64bit
1.5 更新源pacman -Sy
1.5.1设置格式(可以不用设置,不影响编译结果)
1.6 msys安装编译工具pacman -S yasm make pkg-config diffutils
1.7 设置启动vs的批处理
复制vs安装路径下vcvars64脚本 D:\\soft\\vs2019\\install\\VC\\Auxiliary\\Build\\vcvars64.bat(找到vs安装路径直接搜索)
编辑msys启动命令 C:\\msys64msys2_shell.cmd
1.8 config配置项
./configure --enable-shared --enable-postproc --enable-gpl --toolchain=msvc --prefix=./bin
可使用./config --help查看所有选项
–enable-shared 开启动态库
–enable-postproc 启动后期处理
–enable-gpl 使用postproc时需要开源许可证
–toolchain-msvs 编码工具
–prefix=./bin 输出路径,当前目录下bin
同时可查看ffbuild目录下config.log文件中的输出日志
1.9 编译make
编译前工作:windows编译器编码格式是GBK,所以按照4.5的方法修改编码格式
ffmpeg目录下生成的文件转成utf-8格式
同理ffbuild目录下config.mak也需要保证是utf-8格式,修改后重启一下(可省略)
make 编译 -j(多少线程执行,一般按照cpu核心数量 * 2计算,最大化利用cpu进行编译)
1.10 make install 安装
到此就完成了编译工作,接下来就可以使用ffmpeg的库还有头文件来编写自己的demo
查看当前目录下是否有bin目录生成,里面就是编译源码后生成的动态库
2 安装SDL库,用于图像显示
下载地址 libsdl.org
下载后解压出SDL的库和头文件(后续播放时需要用到这个库)
3 调试自带的ffplay的demo
3.1 解决方案结构设计
MyFFmpeg
一一一一一 bin(所有项目生成目录)
一一一一一 dll(程序运行所依赖的动态库目录)
一一一一一一一一一一 ffmpeg
一一一一一一一一一一 SDLx64
一一一一一一一一一一SDLx86
一一一一一 FFmpeg(ffmpeg自带的三个应用目录)
一一一一一一一一一一 FFmpeg(ffmpeg自带的应用工程目录ffmpeg,转码,推流。。。)
一一一一一一一一一一 FFplay(ffmpeg自带的应用工程目录ffplay,播放)
一一一一一一一一一一 FFprobe(ffmpeg自带的应用工程目录ffpobe,查看文件格式)
一一一一一 include(SDL和ffmpeg头文件目录)
一一一一一一一一一一FFmpeg
一一一一一一一一一一一一一一一libavcodec
一一一一一一一一一一一一一一一libavdevice
一一一一一一一一一一一一一一一libavfilter
一一一一一一一一一一一一一一一libavformat
一一一一一一一一一一一一一一一libavutil
一一一一一一一一一一一一一一一libpostproc
一一一一一一一一一一一一一一一libswresample
一一一一一一一一一一一一一一一libswscale
一一一一一一一一一一SDL2-2.0.14
一一一一一一一一一一一一一一一SDL.h…
一一一一一一一一一一一一一一一…省略其他
一一一一一 lib(所有依赖的动态库或静态库)
一一一一一一一一一一ffmpeg
一一一一一一一一一一一一一一一avcodec.lib
一一一一一一一一一一一一一一一avcodec-59.dll
一一一一一一一一一一一一一一一avdevice.lib
一一一一一一一一一一一一一一一avdevice-59.dll
一一一一一一一一一一一一一一一…
一一一一一一一一一一SDLx64
一一一一一一一一一一一一一一一SDL2.dll
一一一一一一一一一一一一一一一SDL2.lib
一一一一一一一一一一一一一一一…
一一一一一一一一一一SDLx86
一一一一一一一一一一一一一一一…
一一一一一MyFFmeg(用于后续自己编写demo使用)
总结构图
ffmpeg自己的demo工程管理图
3.2 vs2019创建解决方案
下一步
创建ffmpeg自带的应用工程目录ffmpeg
创建ffmpeg自带的应用工程目录ffplay
创建ffmpeg自带的应用工程目录ffpobe
先创建这三个项目,并没有添加任何代码,示意图如下
3.3 修改项目属性和测试
全部修改为x64平台
这三个工程相同的修改方式基本一致,只举其中一个为例
ffmpeg工程添加测试代码test.cpp
编写测试代码(return 0后面少了一个分号,当时有点粗心)
test.cpp
#include <iostream>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <SDL.h>
#include <SDL_thread.h>
#include <libavutil/imgutils.h>
using namespace std;
int main()
{
cout << "test ffmpeg" << endl;
return 0;
}
此时我们会看到很多编译的错,就是需要用到的头文件没包进来。
工程->属性->配置属性->常规->输出目录
修改为 …\\bin
工程->属性->配置属性->c/c+±>常规->附加包含目录
修改为 …\\include\\FFmpeg;…\\include\\FFmpeg;…\\include\\SDL2-2.0.14
工程->属性->配置属性->链接器->常规->输出文件
修改为 …\\bin$(ProjectName).exe
工程->属性->配置属性->链接器->常规->附加库目录
修改为 …\\lib\\ffmpeg;…\\lib\\SDLx64
工程->属性->配置属性->链接器->输入->附加依赖项
添加 avcodec.lib;avdevice.lib;avfilter.lib;avformat.lib;avutil.lib;postproc.lib;swresample.lib;swscale.lib;SDL2.lib
工程->属性->配置属性->链接器->调试->生成数据库文件
修改为 …\\bin$(TargetName).pdb
因为已经没有明显的错误信息,此时编译一下试试
无法解析的外部符号 main,这个错误应该是其他头文件导致的,然后我们要把库给包含进来
3.2 将需要用到的库和用到的ffmpeg的代码拷到工程目录下
D:\\ffmpeg\\ffmpeg\\fftools\\ffplay.c
D:\\ffmpeg\\ffmpeg\\fftools\\cmdutils.c
D:\\ffmpeg\\ffmpeg\\fftools\\cmdutils.h
D:\\ffmpeg\\ffmpeg\\config.h
以上是关于ffmpeg学习记录源码编译windows下vs2019构建demo调试的主要内容,如果未能解决你的问题,请参考以下文章