您的位置:首页 > 移动开发 > IOS开发

ffmpeg编译 | 在苹果设备上玩转多媒体的第一步

2017-07-24 00:04 197 查看
ffmpeg,开源代码,运行起来后能完成格式获取、编解码、重采样、裁剪、缩放、录制等一系列的功能。

在能运行前,先编译

本文讲解,如何编译出在iOS设备上运行的ffmpeg静态库。

我使用的是mac机,以下都以macos环境为前提。



(一)下载ffmpeg源码

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
或
curl -0  http://ffmpeg.org/releases/ffmpeg-${VERSION}.tar.bz2 tar jxvf ffmpeg-${VERSION}.tar.bz2
VERSION设置为最新的ffmpeg版本号。


(二)安装xcode并安装command Line Tools(保证有gcc或clang编译器,保证有sdk)。

(三)安装支持asm的环境(假设你要使用asm优化)

gas-preprocessor.pl:
git clone git://github.com/mansr/gas-preprocessor.git
sudo cp -f gas-preprocessor/gas-preprocessor.pl /usr/local/bin/
chmod +x /usr/local/bin/gas-preprocessor.pl

yasm:
brew install yasm
或:
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz tar zxvf yasm-1.2.0.tar.gz
cd yasm-1.2.0/
cat INSTALL
./configure --prefix=/usr/local/yasm
make
sudo make install
export PATH="$PATH:/usr/local/yasm/bin" --在.bash_profile增加


(四)写编译脚本,但推荐直接使用以下项目:

https://github.com/yixia/FFmpeg-Vitamio.git

build_ios.sh为编译脚本。

(五)运行编译脚本,编译出libffmpeg.a。把这个库与头文件拷贝到目标项目,尽情使用ffmegp的强大功能。

知识点

(1)ffmpeg的configure配置

configure:
指定指令集:
--extra-cflags='-arch armv7s' --extra-ldflags='-arch armv7s'
指定cpu类型:
--arch=arm --cpu=cortex-a9
#应该根据不同的指令集使用不同的cpu优化;
#--arch=arm64,指定具体指令架构也可以
指定系统:
--target-os=darwin
指定sdk:
--sysroot=/Applications/Xcode.app/.../xxx.sdk
指定编译器:
--cc=xxx/clang

(以上几个是必不可少的)

指定库生成目录:
--prefix=build
指定使用的muxer/demuxer/encoder/decoder等:
--enable-muxer=mp4


(2)编译指令

make clean
make
make install (非必需)
ar


(3)ffmpeg怎么做到不同平台都可以运行?

基于c语言编写,提供编译配置–可根据不同的平台进行编译(交叉编译),并生成平台相关的二进制库(如ELF或Mach-O文件等),这个库可以在不同的平台运行。

ffmpeg项目已经写好makefile文件,只需要在make前作configure(影响到makefile文件)即可。

(4)ffmpeg性能优化的选择,怎么启用?

根据不同的指令集启用不同的选项,比如下面的选项:

--disable-debug
--optflags=-O3
--mfpu=neon
--mfpu=vfpv4


具体还是可以参考这个开源的编译项目(ffmpeg编译,提供了android/ios的编译脚本):

https://github.com/yixia/FFmpeg-Vitamio.git

(5)编译出ffmpeg库后,怎么使用?

使用库(如.a文件/.so文件等)跟头文件。

(6)ffmpeg编译时,为什么要指定平台的sdk(比如ios平台的sdk)?

ffmpeg使用到的c库函数、宏定义等等,都需要有基础sdk的支持,所以需要指定平台上的sdk。

对应选项为–sysroot,xx/xx.sdk/,要带usr/include。

(7)注意事项

配置选项extra-cflags跟extra-ldflags要指定-arch。

在xcode8.3.2(sdk为10.3)上,armv7/armv7s/arm64不能使用"-mfloat-abi=hard"选项,并且arm64要指定-mcpu=cortex-a53。

pkg-config用来管理依赖的库,它要查找/usr/local/lib/pkgconfig目录,使用里面的xx.pc文件。
比如rtmp在编译时,除了make,也要make install,才能把xxx.pc拷贝到这个目录。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ffmpeg 多媒体 苹果 ios