0%

FFmpeg编译

这里讨论的是使用源码方式编译按照,而不是使用brew安装(后期不可裁剪)。

编译依赖准备

  • gas-preprocessor。Perl 脚本,将 GNU 的一个子集实现为 Apple 没有的预处理
  • yams
    • brew install yasm安装
  • pkg-config

基本编译命令

1
2
3
4
5
6
# 生成配置,执行后生成一些配置文件。
./configure --prefix=/opt/ffmpeg --enable-debug=3 --disable-static --enable-shared --enable-libfdk_aac --enable-nonfree --enable-libopus --enable-libvpx --enable-libx264 --enable-gpl --enable-libx265
# 设定使用CPU数量
make -j 4
# 编译
sudo make install

编译配置:

1
2
3
4
5
6
# 指定编译结果根目录,因为要装到/目录,所以才需要sudo
--prefix=/opt/ffmpeg
# 调试时可以更详细地输出符号信息
--enable-debug=3
# 关闭静态库而使用动态库,默认生成静态库
--disable-static --enable-shared

prefix参数目前设在一个共享目录,生成的动态库是共享用的,即不是随app的。另一方面,这个参数也是直接设置了dyld的install name,直接拷贝包会导致运行时找不到包。

似乎编解码都没有启用,所以都要一一启用。

要启用的编解码器不在FFmpeg代码中,因此启用编码器时,也不会下载,需要额外用brew安装。

使用这种方式安装意味着app要想到其他机器运行,也需要配置一样的环境。

iOS平台编译

1
2
3
4
5
6
7
8
9
10
./ffmpeg-4.3.2/configure \
--target-os=darwin \
--arch=arm64 \
--cc="xcrun -sdk iphoneos clang" \
--as="gas-preprocessor.pl -arch aarch64 -- xcrun -sdk iphoneos clang" \
--enable-cross-compile --disable-debug --disable-programs \
--disable-doc --enable-pic \
--extra-cflags="-arch arm64 -mios-version-min=8.0 -fembed-bitcode" \
--extra-ldflags="-arch arm64 -mios-version-min=8.0 -fembed-bitcode" \
--prefix=/Users/bq/Workspace/Git/FFmpeg/BuildScript/kewlbear/FFmpeg-iOS-build-script/thin/arm64

编译后的目录

  • bin|所有命令工具
  • include|头文件
  • lib|生成的动态库、静态库
  • share|文档、例子

pkg-config

查找系统库路径:pkg-config --libs libavformat

如果没找到,首先确认编译后的lib目录下是否有pkgconfig目录,然后添加全局变量:

1
export PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig/:$PKG_CONFIG_PATH

欢迎关注我的其它发布渠道