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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值