FFmpeg-编译iOS静态库

下载的ffmpeg一般需要自己编译下,如果在iOS上用编译成静态库.a文件,如果在安卓上用编译成.so动态库。把编译好的库文件导入相应系统中使用。

如何编译iOS静态库:

1.下载ffmpeg

2.下载gas-preprocessor.pl,将这个文件放入/usr/local/bin目录下


3.编译脚本文件

#!/bin/bash

#1.首先:定义下载的库名称

source="ffmpeg-3.4"

#2.其次:定义".h/.mm/.c"文件编译的结果目录

#目录作用:用于保存.h/.m/.c文件编译后的结果.o问加你

cache="cache"

#3.定义".a"静态库保存目录

#pwd命令:表示获取当前目录

staticdir=`pwd`/"lk-ffmpeg-iOS"

#4.添加FFmpeg配置选项->默认配置

#Toolchain options:工具链选项(指定我们需要编译平台CUP架构类型)

#--enable-cross-compile:交叉编译

#Developer options:开发者选项

#--disable-debug:禁止使用调试模式

#Program options选项

#--disable-programs:禁用程序(不允许建立命令行程序)

#Documentation options:文档选项

#--disable--doc:不需要编译文档

#Toolchain options:工具链选项

#--enable-pic:允许建立与位置无关代码

configure_flags="--enable-cross-compile --disable-debug --disable-programs --disable-doc --enable-pic"

#5.定义默认CPU平台架构类型

#arm64 armv7->真机->CPU架构类型

#x86_64 i386->模拟器->CPU架构类型

archs="arm64 x86_64 i386"

#6.指定我们的这个库编译系统版本-iOS系统下的7.0以及以上版本使用这个静态库

targetversion="10.1"

#7.接受命令后输入参数

#动态接受命令输入CPU平台架构类型(输入参数:编译指定的CPU库)

if["$*"]

then

    #存在输入参数,也就说:外部指定需要编译CPU架构类型

    archs="$*"

fi

#8.安装汇编器->yasm

#判断一下是否存在这个汇编器

#目的:通过软件管理器(Homebrew),然后下载安装(或者更新)汇编器

#一个命令就能够帮助我们完成所有的操作

if [ ! `which yasm` ]

then

   #Homebrew:软件管理器

   #下载一个软件管理器:安装,卸载,更新,搜索等等...

   if [ ! `which brew` ]

   then

       echo"安装brew"

       ruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" || exit 1

   fi

   echo"安装yasm"

   #成功了

   #下载安装这个汇编器

   #exit -1 ->安装失败了,那么退出程序

   brew install yasm ||exit1

fi

echo "循环编译"

#9.for循环编译FFmpeg静态库

currentdir=`pwd`

forarchin$archs

do

   echo"开始编译"

   #9.1.创建目录

   #在编译结果目录下-创建对应的平台架构类型

   mkdir -p"$cache/$arch"

   #9.2.进入这个目录

   cd"$cache/$arch"

   #9.3配置编译CPU架构类型->指定当前编译CPU架构类型

   archflags="-arch $arch"

   #9.4.判定一下你倒是是编译的模拟器.a静态库,还是真机.a静态库

   if [ "$arch" = "i386" -o "$arch" = "x86_64" ]

   then

       #模拟器

       platform="iPhoneSimulator"

       #支持最小系统版本->iOS系统

       archflags="$archflags -mios-simulator-version-min=$targetversion"

   else

       #真机(mac,iOS都支持)

       platform="iPhoneOS"

       #支持最小系统版本->iOS系统

       archflags="$archflags -mios-version-min=$targetversion -fembed-bitcode"

       #注意:优化处理(可有可无)

       #如果架构类型是"arm64",那么

       if["$arch"="arm64"]

       then

           #GNU汇编器(GNU Assembler),简称为GAS

           #GASPP->汇编器预处理程序

           #解决问题:分段错误

           #通俗一点:就是程序运行时,变量访问越界一类的问题

           EXPORT="GASPP_FIX_XCODE5=1"

        fi

    fi

#10.正式编译

#tr命令可以对来自标准输入的字符进行替换,压缩和删除

#'[:upper:]'->将小写转成大写

#'[:lower:]'->将大写转成小写

#将platform->转成大写或者小写

     XCRUN_SDK=`echo $platform | tr '[:upper:]' '[:lower:]'`

#编译器->编译平台

     CC="xcrun -sdk $XCRUN_SDK clang"

#架构类型->arm64

     if [ "$arch" = "arm64" ]

     then

         #音视频默认一个编译命令

         #preprocessor.pl帮助我们编译FFmpeg->arm64位静态库

         AS="gas-preprocessor.pl -arch aarch64 -- $CC"

     else

         #默认编译平台

         AS="$CC"

     fi

     echo"执行到了1"

     #目录找到FFmepg编译源代码目录->设置编译配置->编译FFmpeg源码

     #--target-os:目录系统->darwin(mac系统早期版本名字)

     #darwin:是mac系统,iOS系统祖宗

     #--arch:CPU平台架构类型

     #--cc:指定编译器类型选项

     #--as:汇编程序

     #$configure_flags最初配置

     #--extra-cflags

     #--prefix:静态库输出目录

     TMPDIR=${TMPDIR/%\/} $currentdir/$source/configure \

          --target-os=darwin \

          --arch=$arch \

          --cc="$CC"\

          --as="$AS"\

          $configure_flags \

          --extra-cflags="$archflags"\

          --extra-ldflags="$archflags"\

          --prefix="$staticdir/$arch"\

          ||exit1

     echo"执行了"

     #解决问题->分段错误问题

     #安装->导出静态库(编译.a静态库)

     #执行命令

     make -j3 install $EXPORT ||exit1

     #回到了我们的脚本文件目录

     cd $currentdir

done

将编译的脚本文件和下载的ffmpeg-3.4放在同一个文件中

3.打开终端执行脚本文件开始编译,终端执行完成后就在这个文件夹中生成一个文件,这个文件中就有我们要的静态库文件了。在终端执行过程中遇到一个问题:xcrun -sdk iphoneos clang is unable to create an executable file.

这个是Xcode开发路径指定的问题,网上大部分说的执行一个命令:sudo xcode-select--switch/Applications/Xcode.app/Contents/Developer/,这个命令的意思就是指定Xcode开发路径,sudo xcode-select--switch/后面是自己的Xcode路径。比如我的就是:sudo xcode-select--switch/Users/zhengqiankun/Downloads/Xcode.app   执行这个命令后重新执行下上面的脚本,就没问题了。

4.使用:粒子

4.1:新建一个工程,将编译好的库文件导入项目中


4.2:设置头文件路径,注意Library Search Paths路径系统会自动设置,而头文件路径需要我们手动设置。


lib系统自动生成


头文件路径

4.3:导入依赖库


4.4运行项目


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容