视频开发iOS-音视频

八.FFmepg--编译静态库(iOS)

2017-11-16  本文已影响629人  听木子说心语

有了前面shell脚本语言的基础,
剩下的就是自己动手写脚本.
好了,开始编写我们的静态库

1.FFmepg编译环境及结构

2.下载FFmepg

首先呢,我们先下载音视频框架
这里提供两种下载方法:

FFmpeg下载.png ffmpeg_down_结果.png

注意:把下载后的解压包放在与shell脚本同一目录下

3.查看FFmpeg配置选项介绍

首先呢,我们进入下载好的FFmpeg框架包中,打开终端,cd到目录下,执行如下命令,就可以配置选项的组成

./configure --help

选项(options)介绍:

externalLibrary Support_2.png

把这些options(选项)终于翻译完了,到这一步,笔者确实累了.
1.要把英文翻译过来,
2.结合技术词汇进行翻译.
这里选项大家根据自己需要各取所需,加入到自己编译shell中.

4.下载gas-preprocessor.pl及安装

一: github地址:https://github.com/libav/gas-preprocessor 
二: 到我的github下载:请查看文章底部
把gas-preprocessor.pl文件与执行sh文件放到同一目录下.
sh_pl同一目录.png
一:
1. 下载最新的gas-preprocessor.pl
2.右键点Finder->前往文件夹,输入/usr,
在里面新建local文件夹,进入local文件夹中![C compiler test failed.png]
(https://img.haomeiwen.com/i2960658/41ad8a2bf4758ada.png?
imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
再新建bin文件夹,
拷贝下载的gas-preprocessor.pl到该目录下;
3. 打开终端,输入 chmod 777 /usr/local/bin/gas-preprocessor.pl
二:
1.下载gas-preprocessor安装包
2.复制gas-preprocessor.pl到/usr/sbin下
3.chmod 777 /usr/local/bin/gas-preprocessor.pl

5.编写脚本代码

source="ffmpeg-3.4"
cache="cache"
staticdir=`pwd`/"lk-ffmpeg-iOS"
Toolchain options:工具链选项(指定我们需要编译平台CPU架构类型)
--enable-cross-compile:交叉编译
--enable-pic:允许建立与位置无关代码
Developer options:开发者选项
--disable-debug:禁止使用调试模式
Program options选项
--disable-programs:禁用程序(不允许建立命令行程序)
Documentation options:文档选项
--disable-doc:不需要编译文档
configure_flags="--enable-cross-compile --disable-debug --disable-programs 
--disable-doc --enable-pic"
arm64 armv7->真机->CPU架构类型
x86_64 i386->模拟器->CPU架构类型
archs="arm64 armv7 x86_64 i386"
targetversion="7.0"
动态接受命令输入CPU平台架构类型
if [ "$*" ]
then
       #存在输入参数,也就说:外部指定需要编译CPU架构类型
       archs="$*"
fi
下载yasm最新版本:http://www.tortall.net/projects/yasm/releases/ 
首先判断是否存在汇编器,然后通过软件管理器,下载安装汇编器
if [  ! `which yasm` ]
then
        if [ ! `which brew` ]
        then
               echo "安装brew"
               ruby -e "$(curl -fsSL
 https://raw.githubusercontent.com/Homebrew/install/master/install)" || exit 1
        fi
        echo "安装yasm"
        brew install yasm || exit 1
fi 
currentdir=`pwd`
for arch in #archs
do
    echo "开始编译"
    #创建目录
    mkdir -p "$cache/$arch"
    #进入这个目录
    cd "$cache/$arch"
    #配置编译CPU架构类型->指定当前编译CPU架构类型
    archflags="-arch $arch"
    #判定一下是编译的模拟器.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
                  #程序运行时,变量访问越界问题
                  EXPORT="GASPP_FIX_XCODE5=1"  
          fi
fi
将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
--target-os:目录系统->darwin(mac系统早期版本)
--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" \
          || exit 1
    #执行命令 安装导出静态库
    make -j3 install $EXPORT || exit 1
    #回到了我们的脚本文件目录
    cd $currentdir
done

6.执行脚本结果一览

运行结果2.jpg 运行结果_3.png 运行结果_4.png

7.编译过程中遇到的问题

一.
chmod +x 脚本名
二.
chmod 777 脚本名
语法错误1.jpg 语法错误2.jpg GNU assembler not found, install:update gas-preprocessor.png
如果这一步出错,因为没有把pl文件放在同一目录下,才导致的错误.
所以您可以最新下载的pl文件,放在同一目录下进行编译.
那就需要您查看第四步操作进行下载和安装
C compiler test failed.png
1.打开终端。
输入并回车
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.
platform/developer/SDKs/
然后输入 
ls 
可以查看到你当前iOS SDK的版本
2.修改iOS SDK版本。
3.再次执行脚本

8.个人总结

好了,到这里呢?

您就完成了FFmepg--静态库的编译,

容易出错的地方呢?

当您完成这些操作,还是蛮有成就的,

编译自己想要的静态库,需要花费时间,需要静心等待,

编译出错就需要您想办法解决,

个人觉得写编译脚本不是一件困难的事,关键是遇到了编译出错的问题,你是否可以自己解决.

考验了一下个人能力时候到了,如果您觉得对您有帮助,请您来一波鲜花和赞.

以上遇到几种编译问题呢?是个人遇到的,如果您也遇到了其他的问题呢,自己解决了,也可以发给我,我把您的问题和解决方法也加上去,希望帮助更多的小伙伴.

如果有什么问题咱么可以交流一下,借用名人Dream的一句话,"有问题就要提出来,不要憋着,否则憋出内伤".

如果需要FFmepg--shell的编译及下载源代码,请到我的github下载:
https://github.com/LK26/FFmepg--shell
...
...
...
如果需要转载,请注明原著地址哦,非常感谢!!

上一篇 下一篇

猜你喜欢

热点阅读