编译ffmpeg源码相关操作

0. 获取ffmpeg源码

ffmpeg作为开源软件,有自己的官网和源码仓库,同时在Github上也有,可以去下载压缩文件自己解压,也可以直接git clone下来,具体git 的使用可以参考网上的教程,例如

官网不光有源码,还有丰富的文档,代码的函数入口为 root/fftools/ffmpeg.c 

1. 编译 Ubuntu/Linux 64bit 版本

源码第一步便是编译,最常用的是Ubuntu 18.04 64bit ,此环境下的编译是最简单的

./configure
./make
./make install

此时并没有进行任何配置,一切以默认,可以正常使用 ffmpeg 和 ffplay 等。但是这样的 configure 即无法 debug 也无法测试各类 vf(video filter)。

2. 编译 Ubuntu/Linux 32bit 版本

写了nasm代码后需要在32bit 和windows下分别验证其正确性,因此需要在这两个环境下编译通过。

Ubuntu 32bit下编译需先安装相应的32bit环境,命令如下:

sudo apt install gcc-multilib g++-multilib 

安装完成后需要相应的configure

./configure --target-os=linux --arch=x86_32 --enable-gpl --cc="gcc -m32" --extra-cflags="-m32" --extra-cxxflags="-m32" --extra-ldflags="-m32"

此时应该可以正常make和install了。

但是实际在使用中发现还有问题:

input i386 x86_64 is not compatitable with output i386 x86

后来make clean 然后重新make 就好了。

3. 编译 Windows 64bit 版本

windows下其实比linux 32bit 还要简单一些,其实就是编译器gcc 和汇编编译器 的问题,同样是64bit 的差得不是很大。

参考了很多网页,其中有Is it possible to build ffmpeg x64 on Windows? 和 VS2015编译FFMPEG

实际编译环境是VS2017 Professional 版,成功编译通过。

首先安装VS Studio,理论上VS2013以上都可以。

其次下载Msys2,选择 msys2 64bit 版本下载安装,完成后打开msys2,运行以下命令,安装成功相关软件:

pacman -S make gcc diffutils

将安装目录下 C:\Dev\msys64\usr\bin\link.exe 改名为 msys2_link.exe 防止名字冲突。

接下来是Yasm,依旧选择 Win64.exe 下载并将其重命名为yasm.exe复制到msys2的安装文件夹下。

将 C:\Dev 添加到环境变量,运行 VS2013/2015 x86 (for x86) or x64 for (x64) Command Prompt (命令行),运行 C:\Dev\msys64\msys2_shell.cmd -msys -use-full-path 、

此时会启动 msys.exe ,使用 which cl / which link / which yasm / which cpp 观察环境是否完整。

进入源码目录,进程 configure 和 make ,其 configure 为:

./configure --target-os=win64 --arch=x86_64 --toolchain=msvc --enable-gpl

 

4. 编译debug版本

写了代码当然是要debug 的,不过我之前一直使用的是 VS 或 VS Code,打断点一直是鼠标点点点,一开始使用 linux 下的 gdb 还有些不习惯,不过仍然能够感受到它的强大。

通过多次实验,以下configure 在linux 64bit 时可用:

./configure --enable-gpl --enable-debug --disable-shared --extra-cflags=-g --extra-ldflag=-g --disable-stripping --disable-optimizations --arch=x86_64 (default) 

上面最重要的就是 enable debug、disable stripping、disable optimizations,分别用于开启debug生成debug文件,禁用剥离可执行程序和共享库(禁用后可执行程序和共享库为一体,不需要在运行的时候加载),禁用优化,防止某些语句被优化掉无法打断点。

disable-shared 可以生成完整的debug symbol,如果enable此项,那么会发现有的目录下的文件无法debug。

在 configure --> make 后,可以使用 gdb  ./ffmpeg_g 来进入gdb ,r filename.extension:lines 进行打断点(更多gdb命令自行查阅相关资料)。然后r commands 开始运行debug 模式,理论上此时会到断点处停下(实际操作中也是如此)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值