• 为iOS编译FFmpeg静态库


    为iOS编译FFmpeg静态库

    环境:OS X Yosemite (版本10.10.5)

         Xcode (Version 7.1.1 (7B1005))

    一、资料准备:

    (1)ffmpeg源码:https://github.com/FFmpeg/FFmpeg.git(也可以不用提前下载,在运行脚本的时候由脚本下载,这样脚本下载的话会花费很多时间, 提前下载会节约不少时间)。

    (2)yasm1.3.0:http://yasm.tortall.net/Download.html()

    (3)编译脚本: https://github.com/kewlbear/FFmpeg-iOS-build-script.git

    (4)gas-preprocessor:

      https://github.com/libav/gas-preprocessor.git

    二、配置与编译:

    (1)Xcode:选择命令行工具

     

    (2)安装gas-preprocessor:

        <1>将gas-preprocessor.pl 分别拷贝到:/usr/bin  和/usr/local/bin

       <2>修改gas-preprocessor.pl的读写权限:使用终端进入相关目录,输入以下命令。chmod +x gas-preprocessor.pl

    (3)安装yasm:经典三部曲^_^

       利用终端进入yasm的目录

         <1>./configure

         <2> make

         <3> sudo make install

    (4)配置ffmpeg:经典三部曲

       利用终端进入ffmpeg目录

         <1>./configure

         <2> make

         <3> sudo make install

    (5)运行编译脚本

        <1>把下载的ffmpeg拷贝到编译脚本目录中

     

     

    <2> 利用编译脚本编译ffmpeg:

          首先加入目标指令集。用编辑软件(如UltraEdit)打开build-ffmpeg.sh文件,找到ARCHS="arm64 armv7 x86_64 i386"这一行文字,在ARCHS中加入你需要的目标指令集。我这里面加入了arm64 armv7 x86_64 i386这四个指令集,则运行后生成的静态库也只会支持这四个指令集。

         然后利用终端进入脚本目录,输入命令:

         sh build-ffmpeg.sh(生成适用于指定命令集armv7 arm64 x86_64 i386的静态库)

       如果只想生成针对某一个指令集的静态库则可以使用下面的指令

        build-ffmpeg.sh arm64(只生成arm64的静态库)

       build-ffmpeg.sh armv7 x86_64(生成armv7 arm64的静态库)

     注意:若只针对不同的指令集分别单独生成了对应的静态库,如果在使用的时候想支持多个指令集那么就需要使用lipo命令把对应指令集的静态库合并成一个库。

    具体使用请参考:https://github.com/kewlbear/FFmpeg-iOS-build-script

     

     

    三、使用

    编译完成后的目录是这个样子

     

    注:config.h文件不是编译生成的,是我从ffmpeg中拖出来的,因为在编译的过程我遇到了Out of tree builds are impossible with config.h in source dir这个问题。

     

    把FFmpeg-iOS整个文件拖到你的项目中。因为我编译完成是用在kxmovie当中的,所以依赖的库有:

     

     

     

     

     

    四、可能出现的问题:

     (1)GNU assembler not found, install gas-preprocessor

    在编译的过程中,如果你把gas-preprocessor.pl文件分别拷贝到/usr/bin和/usr/local/bin下,并且也修改了该文件的读写权限,仍然出现这个问题。那么请运行下面的指令,修改编译路径

    PATH=$PATH: /usr/bin/gas-preprocessor.pl

    PATH=$PATH: /usr/local/bin/gas-preprocessor.pl

     (2) Out of tree builds are impossible with config.h in source dir

     删除ffmpeg 下面的config.h重新编译就可以了

     (3)拖入编译好的库,在运行项目的时候如果遇到下面两个问题

    问题:Undefined symbols for architecture armv7:

    解决方法:导入  libz.tbd

    
问题:Undefined symbols for architecture arm64

    解决方法:导入 libbz2.tbd

    五、参考资料

    http://www.cnblogs.com/smileEvday/p/ffmpeg.html

    http://www.cnblogs.com/wyymaomi/articles/3643606.html

    http://blog.csdn.net/cmsbupt/article/details/9962845

    http://blog.csdn.net/oqqquzi1234567/article/details/43152689

     

  • 相关阅读:
    javascript-事件代理
    控制DIV属性——实现盒子长、宽、背景等变化
    mac环境下VSCODE 全局搜索无效的问题
    VSCODE snippets的使用
    JS单线程与setTimeout执行原理(转载)
    ES6
    SQL聚合函数
    MySQL函数(转发)
    关于mysql中int(1)中int后面的数字(转发)
    关于xcode8.0 VVDocumenter无法使用的解决办法
  • 原文地址:https://www.cnblogs.com/qingpeng/p/4980902.html
Copyright © 2020-2023  润新知