1.源码及脚本下载
FFmpeg官网最新源码:http://www.ffmpeg.org
FFmpeg历史版本源码:Index of /releases
FFmpeg脚本:https://github.com/kewlbear/FFmpeg-iOS-build-script
x264源码:x264, the best H.264/AVC encoder - VideoLAN
x264脚本:https://github.com/kewlbear/fdk-aac-build-script-for-iOS
fdk-aac源码:http://www.linuxfromscratch.org/blfs/view/svn/multimedia/fdk-aac.html
fdk-aac脚本:https://github.com/kewlbear/x264-ios
2.编译
以我的下载为例,下载的包分别为:
ffmpeg-4.0.2.tar,FFmpeg-iOS-build-script-master.tar.gz
x264-master.tar.bz2,x264-ios-master.zip
fdk-aac-2.0.1.tar.gz,fdk-aac-build-script-for-iOS-master.zip
2.1 首先解压 FFmpeg-iOS-build-script-master.tar.gz得到FFmpeg-iOS-build-script-master,然后把ffmpeg-4.0.2.tar放到FFmpeg-iOS-build-script-master中解压得到ffmpeg-4.0.2。
2.2 编译 x264
- 为了防止混乱,咱们在 FFmpeg-iOS-build-script-master 新建 x264 文件夹
- 解压源码包 x264-master.tar.bz2 到 x264 文件夹下,解压脚本包 x264-ios-master.zip 得到 build-x264.sh 放到 x264 文件夹下。
- chmod 777 build-x264.sh 修改权限,否则有可能会报Permission denied
- 打开编辑 build-x264.sh,SOURCE="x264-master" 对应你的源码包名字,FAT="x264-iOS" 编译完成输出的文件名,这个都可以看情况自定义
- 进入到 x264 目录,执行 ./build-x264.sh 编译
- 如果编译成功则会在 x264 文件夹下生成 x264-IOS,库文件和头文件都在其中
2.3 编译 dk-aac
- 为了防止混乱,咱们在 FFmpeg-iOS-build-script-master 新建 fdk-aac 文件夹
- 解压源码包 fdk-aac-2.0.1.tar.gz 到 fdk-aac 文件夹下,解压脚本包 fdk-aac-build-script-for-iOS-master.zip 得到 build-fdk-aac.sh 放到 fdk-aac 文件夹下。
- chmod 777 build-fdk-aac.sh 修改权限,否则有可能会报Permission denied
- 打开编辑 build-fdk-aac.sh,SOURCE="fdk-aac-2.0.1" 对应你的源码包名字,FAT="fdk-aac-ios" 编译完成输出的文件名,这个都可以看情况自定义
- 进入到 fdk-aac 目录,执行 ./build-fdk-aac.sh 编译
- 如果编译成功则会在 fdk-aac 文件夹下生成 fdk-aac-ios,库文件和头文件都在其中
2.4 编译 FFmpeg
- chmod 777 build-ffmpeg.sh 修改权限,否则有可能会报Permission denied
- 打开编辑 build-ffmpeg.sh,更改你对应的版本 FF_VERSION="4.0.2",输出文件名 FAT="FFmpeg-iOS",选项 X264=`pwd`/x264/x264-iOS 和 FDK_AAC=`pwd`/fdk-aac/fdk-aac-ios 路径是刚才生成库的路径。
- 进入到 FFmpeg-iOS-build-script-master 目录,执行 ./build-ffmpeg.sh 编译
- 如果编译成功则会在 FFmpeg-iOS-build-script-master 文件夹下生成 FFmpeg-iOS,库文件和头文件都在其中
3. 报错处理
3.1 Found no assembler Minimum version is nasm-2.13 If you really want to compile without asm, configure with --disable-asm. (缺少nasm 通过brew安装 )
brew install nasm
3.2 No working C compiler found.(编译x264时报的错, 如果fdk-aac编译时也报这个也这样处理)
CFLAGS="$CFLAGS -mios-simulator-version-min=7.0" 和 5.0 都改为8.0 就好了,我的是这样
3.3 no member named “encoderDelay” (ffmpeg编译集成fdk-aac报的错误)
ffmpeg针对fdk-aac,存在如下patch解决此问题。大家可以参考下:https://github.com/libav/libav/commit/141c960e21d2860e354f9b90df136184dd00a9a8.patch 这是由于使用的fdk-aac版本太新,数据结构有所改变。修改文件目录ffmpeg-4.0.2/libavcodec/libfdk-aacenc.c 。另外一种变通的修改方式,降低fdk-aac的版本,也可以解决问题
3.4 GNU assembler not found, install/update gas-preprocessor
是因为 gas-preprocessor.pl 版本太老了,去这个地址 https://github.com/libav/gas-preprocessor 下载最新的,下载完放在/usr/local/lib/下,增加权限即可。