编译 opencore-amr for iOS
2017.07.21
Talent•C
 热度
℃
作者Talent•C 转载请注明出处
前言 最近好多人跟我反馈,我2年前写的关于SoundTouch
的Demo,随着 xcode 版本的升级出现了一个问题就是不支持 bitcode , 最近正好项目上线了,时间比较充裕决定把它搞搞,将其下载下来分析看看发现主要有三个库不支持 bitcode , 分别是 lame(mp3音频格式编码库) 和 opencore-amr(amr音频格式编/解码库两个库) 。
关于 bitcode 的相关介绍我之前就有过介绍以及如何支持 bitcode ,点击这里查看 。上面我提到 opencore-amr(amr音频格式编码库) 不支持 bitcode , 那么就需要将其重新编译,网上有很多关于编译 opencore-amr(amr音频格式编码库) 的文章,但几乎都不能正确编译,今天我们就自己动手试着编译 opencore-amr 库。
可能有人会说 iOS 本身是不支持 amr格式音频的 , 为什么我们还在用?amr 由欧洲通信标准化委员会提出,是在移动通信系统中使用最广泛的语音标准。他是被各大手机厂商认可的一种保存手机录音的格式。由于 amr 文件容量很小,因此即便是长达一分钟的音频文件,也能符合中国移动现行的彩信不超过50KB容量的技术规范,所以 amr 也是实现在彩信中加载人声的唯一格式。但是受体积所限,amr 在音质方面不太乐观。 摘自百度百科
由此可见,当我们的app 需要传递音频文件时,在不要求高音频质量是使用 amr 格式的音频会大大降低网络带宽使用量,减少通讯时间,提高app使用体验
编译 opencore-amr
opencore-amr 源码下载 。 目前官网最新版本是 0.1.5,本文使用的版本为最新版本。
将下载好的源码放在桌面(任何地方都可以,只要你能找到就可以),源码有了,下一步就是编译这个库了,我们使用脚本来编译。 注: 本文使用的脚本来自网络,脚本部分内容被修改
在电脑中新建一个文件命名为 build_ios.sh ,并将如下内容拷贝至文件中。文章结尾有完整文件下载链接。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/sh
set -xe
DEVELOPER=`xcode-select -print -path`
DEST=`pwd .`"/opencore-amr-iOS"
ARCHS="i386 x86_64 armv7 armv7s arm64"
LIBS="libopencore-amrnb.a libopencore-amrwb.a"
mkdir -p $DEST
./configure
for arch in $ARCHS ; do
make clean
IOSMV=" -miphoneos-version-min=6.0"
case $arch in
arm*)
if [ $arch == "arm64" ]
then
IOSMV=" -miphoneos-version-min=7.0"
fi
echo "Building opencore-amr for iPhoneOS $arch ****************"
PATH=`xcodebuild -version -sdk iphoneos PlatformPath`"/Developer/usr/bin:$PATH " \
SDK=`xcodebuild -version -sdk iphoneos Path` \
CXX="xcrun --sdk iphoneos clang++ -arch $arch $IOSMV --sysroot=$SDK -fembed-bitcode-marker -isystem $SDK /usr/include" \
LDFLAGS="-Wl,-syslibroot,$SDK " \
./configure \
--host=arm-apple-darwin \
--prefix=$DEST \
--disable -shared
;;
*)
echo "Building opencore-amr for iPhoneSimulator $arch *****************"
PATH=`xcodebuild -version -sdk iphonesimulator PlatformPath`"/Developer/usr/bin:$PATH " \
CXX="xcrun --sdk iphonesimulator clang++ -arch $arch -fembed-bitcode-marker $IOSMV " \
./configure \
--host=$arch \
--prefix=$DEST \
--disable -shared
;;
esac
make -j3
make install
for i in $LIBS ; do
mv $DEST /lib/$i $DEST /lib/$i .$arch
done
done
echo "Merge into universal binary."
for i in $LIBS ; do
input=""
for arch in $ARCHS ; do
input="$input $DEST /lib/$i .$arch "
done
xcrun lipo -create -output $DEST /lib/$i $input
done
脚本有了, 源码有了, 接下来我们开始操作: 1、找到刚才下载源码,将新建的脚本文件放入 “opencore-amr-0.1.5” 文件夹下(源码所有资源的根目录下)。 2、打开命令行工具 进入到 “opencore-amr-0.1.5” 目录下 (新建的脚本文件所在目录)。 3、执行命令 “./build_ios.sh” ,等待几分钟,就会发现在其根目录下出现一个文件夹 opencore-amr-iOS 所有编译的静态库都在这里, 其中 xxx.a 为通用静态库, 其余静态库为对应架构下的静态库 如xxx.a.arm64等 以便于上线时可以将通用静态库替换成不包含模拟器架构的,以达到减少ipa包大小。 4、便已完毕后在 opencore-amr-iOS 目录下 会有两个子目录 lib 和 include 我们将两个目录中的 .h 文件 和 .a 文件 加入到工程中就可以使用了。
本文使用的脚本及源码下载