ios android 多媒体开发,多媒体开发(7):编译Android与iOS平台的FFmpeg

编译FFmpeg,一个古老的话题,但小程还是介绍一遍,就当记录。之前介绍怎么给视频添加水印时,就已经提到FFmpeg的编译,并且在编译时指定了滤镜的功能。

但是,在手机盛行的时代,读者可能更需要的是能在iOS或Android平台上运行的FFmpeg,而对于命令行的ffmpeg,读者可以在个人电脑上面使用(因为它简洁易操作),也可以在服务程序中使用(安装FFmpeg后直接调用ffmpeg命令),比如小程经常在自己的mac机上使用ffmpeg命令。

本文介绍如何编译出iOS或Android平台使用的FFmpeg链接库。

正如编译macos平台使用的FFmpeg一样,编译iOS或Android平台使用的FFmpeg,主线也是先configure再make,只不过,有更多的细节需要考虑。

小程使用的是macos系统。

(1)编译环境准备

pkg-config

FFmpeg在编译时经常使用到第三方库(比如x264、rtmp等),编译器在查找这些第三方库的头文件与库文件时,需要使用到程序pkg-config。

pkg-conifig给编译器提供路径与链接选项。第三方库在make install时会生成pc后缀的文件并拷贝到系统目录,而pkg-config就是从这个pc文件读取出路径信息。

这样安装pkg-config:

brew install pkg-config

安装pkg-config后,可以这样得到第三方库的路径信息:

pkg-config --cflags --libs librtmp

以下是对于pkg-config命令的一个载图:

e82ee0dfea55399f0dd6508600dad307.png

pkg-config

可以设置PKG_CONFIG_PATH这个环境变量,让pkg-config到这个目录下面去找pc文件,如果不设置,则默认在/usr/local/lib/pkgconfig目录下面查找。

需要注意,虽然pkg-config查找到的pc文件里面有记录到第三方静态库的路径,但实际在编译FFmpeg静态库时,并不会链接上这个第三方库,而且在FFmpeg的编译脚本中可以指定第三方库的路径。

freetype

此项只在使用滤镜功能时需要安装。

如果编译时遇到这样的提示:freetype2 not found using pkg-config,那说明还没有安装freetype,这样安装即可:

brew install freetype

clang编译器

此项只在编译iOS平台的FFmpeg时才需要。

小程的mac机已经安装过xcode,所以clang已经存在。如果读者还没有安装clang的话,那建议把xcode安装好。

asm编译器

此项只在编译iOS平台的FFmpeg时才需要。

x264或FFmpeg等,都有汇编代码,编译这些汇编代码,需要使用更先进的编译脚本来处理,而mac系统没有这样的脚本。

这个脚本是gas-preprocessor.pl。

可以这样安装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

另一个需要的工具是yasm汇编编译器,可以这样安装:

brew install yasm

NDK工具包

此项只在编译Android平台的FFmpeg时才需要。

可以使用ndk-r9d版本,或者最新的版本,来编译FFmpeg。

(2)FFmpeg源码下载

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

(3)编译脚本

不必自己重写了,找开源的项目过来修改一下(注意开源协议)就可以了,比如参考这个开源项目:

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

在这个项目里面,有编译Android跟iOS平台的相应脚本,而且有相应的优化处理。

在移动平台使用的库都很注重两个东西,一个是性能,另一个是体积大小。一个好的脚本,既要根据不同的硬件类型作编译上的优化,也要根据软件需求裁剪FFmpeg的功能使得出来的库尽可能小(毕竟FFmpeg的功能并非全部都用上)。

(4)脚本修改

小程先介绍一下脚本里面的一些关键参数,这些参数并非平台通用。

指定指令集:

--extra-cflags='-arch armv7s' --extra-ldflags='-arch armv7s'

指定cpu类型:

--arch=arm --cpu=cortex-a9

(应该根据不同的指令集使用不同的cpu优化;--arch=arm64,像这样指定具体指令架构也是可以的。)

指定系统:

--target-os=darwin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值