参考 https://www.jianshu.com/p/129874f34a58
前言
上一篇博客我们聊了一下如何使用FFmpeg的命令来实现各种需求,从这篇博客我们将一起来看一下如何使用使用FFmpeg代码实现各种需求,这一篇博客主要是来看一下,如何编译FFmpeg的静态库,以及FFmpeg中各个模块的作用.
编译FFmpeg静态库
这里先说iOS该如何编译FFmpeg,后期会说安卓如何编译FFmpeg静态库.
首先我们先下载编译脚本,脚本的Github连接如下所示.
https://github.com/kewlbear/FFmpeg-iOS-build-script
在编译之前我们需要做以下的几个操作.
下载并安装 gas-preprocessor .
- 先去 gas-preprocessor 下载文件.
- 复制gas-preprocessor.pl到/usr/local/bin下.
- 修改权限
chmod 777 /usr/local/bin/gas-preprocessor.pl
下载并且安装 yasm .
brew install yasm
由于,FFmpeg框架中的一个结构体命名为"AVMediaType"与苹果自带框架产生冲突,所以,我们必须修改编译脚本,使用"FFmpegAVMediaType"带替换"AVMediaType".这里需要在脚本文件中添加如下命令行,即将AVMediaType替换为FFmpegAVMediaType.
grep -rl AVMediaType ./$SOURCE | xargs sed -i .bak s@AVMediaType@FFmpegAVMediaType@g
当然了,我们可以通过修改build-ffmpeg.sh内容来定制FFmpeg.例如我们想指定FFmpeg版本,我们就可以修改如下参数即可.
FF_VERSION="4.2"
如果我们想修改编译环境,我们需要修改如下信息.
ARCHS="arm64 armv7 x86_64 i386"
当上面的准备工作完成之后,我们就使用下面命令进行编译.
./build-ffmpeg.sh
搭建FFmpeg开发环境
上一个模块我们已经编译FFmpeg静态库了,接下来FFmpeg-iOS文件夹整体需要添加到我们的工程中去.
由于我们需要进行C,C++的混编,所以我们需要把 AppDelegate.m 改名为 AppDelegate.mm .
然后我们需要为FFmpeg添加以下的依赖库文件.
libz.tbd
libbz2.tbd
libiconv.tbd
CoreMedia.framework
AudioToolbox.framework
VideoToolbox.framework
AVFoundation.framework
在Build Setting中要禁止Bitcode,否则会编译报错.
在Build Setting中 设置 Header Search Paths 和 Library Search Paths . 如下所示.
# Header Search Paths:
$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/include
# Library Search Paths:
$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/lib