第二章 移动端环境搭建

一 增加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


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

推荐阅读更多精彩内容

  • 前言 在iOS设备上进行音视频的处理,往往要使用市面上比较流行的音视频相关库,比如音频编码的Lame,处理视频的F...
    BinaryBang阅读 1,941评论 2 2
  • 前言: 在音视频开发的过程中,了解交叉编译是必须的,因为在开发过程中,用到的很多第三方库都需要进行交叉编译的,然后...
    CoderP1阅读 2,673评论 10 13
  • 前言 为什么在讲解音视频之前我需要先讲讲交叉编译呢?因为音视频开发将会涉及到很多三方库,特别是基于C语言的,在iO...
    sweetpf阅读 693评论 0 2
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,492评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,551评论 0 11