美文网首页
第二章 移动端环境搭建

第二章 移动端环境搭建

作者: 路飞_Luck | 来源:发表于2021-01-28 21:41 被阅读0次
    一 增加C++支持

    其中预定义变量$ (SRCROOT)$(PROJECT_DIR)都是项目的根目录。

    二 交叉编译的原理

    使用本机器的编译器,将源代码编译链接成为 一个可以在本机器上运行的程序。这就是正常的编译过程,也称为 Native Compilation,中文译作本机编译

    所谓交叉编译,就是在一个平台(如PC)上生成另外一个平台(AndroidiOS或者其他嵌入式设备)的可执行代码。

    交叉工具编译链,通过该交叉工具编译链,开发者就能在 PC上编译出可以运行在ARM平台下的程序了。

    无论是自行安装PC上的编译器,还是下载其他平台(Android或者 iOS)的交叉工具编译链,它们都会提供以下几个工具:CCASARLDNMGDB。那么,这几个工具到底是做什么用的呢?

    • CC 编译器,对C源文件进行编译处理,生成汇编文件。
    • AS 将汇编文件生成目标文件(汇编文件使用的是指令助记符,AS将它翻译成机器码)。
    • AR 打包器,用于库操作,可以通过该工具从一个库中删除或者增加目标代码模块。
    • LD 链接器,为前面生成的目标代码分配地址空间,将多个目标文件链接成一个库或者是可执行文件。
    • GDB 调试工具,可以对运行过程中的程序进行代码调试工作。
    • STRIP 以最终生成的可执行文件或者库文件作为输入,然后消除掉其中的源码。
    • NM 查看静态库文件中的符号表。
    • Objdump 查看静态库或者动态库的方法签名。
    2.1 iOS平台交叉编译的实践

    前面提到的目标平台虽然都基于ARM平。

    • armv6 Phone、iPhone 2、iPhone 3G
    • armv7 iPhone 4、iPhone 4S
    • armv7s iPhone 5、iPhone 5S
    • arm64 iPhone 5S、iPhone 6(P)、iPhone 6S(P)、iPhone 7(P)
    1. 机器对指令集的支持是向下兼容的。
    2. Architectures 指的是该App支持的指令集
    3. Valid architectures 选项指即将编译的指令集
    4. Build Active Architecture Only 选项表示是否只编译当前适用的指令集。一般情况下 在Debug的时候设置为YES,以便可以更加快速、高效地调试程序,而 在Release的情况下设置为NO,以便App在各个机器上都能够以最高效 率运行。因为Valid architectures选择的对应指令集是armv7armv7sarm64,在Release下会为各个指令集编译对应的代码,因此最后的ipa体 积基本上翻了3倍。
    2.2 LAME的交叉编译

    LAME是目前非常优秀的一种MP3 编码引擎,在业界,转码成MP3格式的音频文件时,最常用的编码器就是LAME库。

    bitcode模式是表明当开发者提交应用(App)到App Store上的时 候,Xcode会将程序编译为一个中间表现形式(bitcode)。

    合并静态库应该使用lipo命令。

    2.3 FDK_AAC的交叉编译

    FDK_AAC是用来编码解码 AAC格式音频文件的开源库,Android系统编码和解码AAC所用的就是这个库。

    2.4 X264的交叉编译

    X264是一个开源的H.264/MPEG-4 AVC视频编码函数库,是最好的 有损视频编码器之一。一般的输入是视频帧的YUV表示,输出是编码之后的H264的数据包,并且支持CBRVBR模式,可以在编码的过程中 直接改变码率的设置。

    • CBR的英文全称是Constant Bit Rate固定码率,就是说每一秒种的画面如果看做是一个静止的图片文件的话(实际上是每一帧的画面大小加起来)它大小是固定的。
    • VBR的英文全称是Variable Bit Rate可变码率,就是每一秒画面的大小是不固定。
    三 使用LAME编码MP3文件
    3.1 编码工具类的编写

    提供一个encode方法,负责读取PCM数据,并且调用LAME进行编码,然后将编码之后的数据写入文件。

    class Mp3Encoder {
      private:
        FILE* pcmFile;   // 输入pcm数据文件地址
        FILE* mp3File;   // 输出mp3文件地址
        lame_t lameClient;  // LAME
    
      public:
        Mp3Encoder(); 
        ~Mp3Encoder();
        // 初始化
        int Init(const char* pcmFilePath, const char *mp3FilePath, int sampleRate, int channels, int bitRate);
        void Encode();  // 负责读取PCM数据,并且调用 LAME进行编码,然后将编码之后的数据写入文件
        void Destory();  // 关闭所有的 资源
    };
    

    本文参考音视频开发进阶指南


    项目源码地址 - iOS-Mp3Encoder


    相关文章

      网友评论

          本文标题:第二章 移动端环境搭建

          本文链接:https://www.haomeiwen.com/subject/kygxtltx.html